{
  "host": "https://schemas.billylives.com",
  "generated_at": "2026-10-28T01:03:35.492Z",
  "count": 26,
  "schemas": [
    {
      "path": "benchmarks/schema/fact-ledger.schema.json",
      "url": "https://schemas.billylives.com/benchmarks/schema/fact-ledger.schema.json",
      "$id": "https://billylives.com/benchmarks/schema/fact-ledger.schema.json",
      "title": "FactLedger",
      "description": "Hermetic JSONL ledger for benchmarks/suites/long-horizon/ `compaction-fidelity` (ADR-472). Each line plants one fact at one simulated compaction event. The adapter synthesizes each event's summary from the facts planted in its window — i.e. the summarizer is assumed lossless — so whatever the fold ladder then loses is architectural loss, not summarization loss.",
      "bytes": 1610,
      "sha256": "77c9ab64350af4c624f19d60982ff315ed0ab4e7a6c4bd78ef43c8187fb070dd"
    },
    {
      "path": "benchmarks/schema/fixture-manifest.schema.json",
      "url": "https://schemas.billylives.com/benchmarks/schema/fixture-manifest.schema.json",
      "$id": "https://billylives.com/benchmarks/schema/fixture-manifest.schema.json",
      "title": "BenchFixtureManifest",
      "description": "SHA-pinned manifest for third-party benchmark corpora. Fetched into benchmarks/.cache/<suite>/<name>/ on first run; never refetched once sha256 matches.",
      "bytes": 1242,
      "sha256": "d11848f1d4b11c6017db6ce045fb28796b6720ec808222749bdfea28035cf884"
    },
    {
      "path": "benchmarks/schema/mission-fixture.schema.json",
      "url": "https://schemas.billylives.com/benchmarks/schema/mission-fixture.schema.json",
      "$id": "https://billylives.com/benchmarks/schema/mission-fixture.schema.json",
      "title": "MissionFixture",
      "description": "Hermetic mission scenario for benchmarks/suites/mission-completion/. Specifies the objective, scripted per-phase LLM outputs (for replanner + counterpoint stubs), mocked tool responses keyed by tool+arg-hash, expected phase-graph edges, keyword recall targets, expected counterpoint triggers, and per-fixture budgets.",
      "bytes": 4066,
      "sha256": "e1db187004ad7f1c5687bbd1a810cd89f67876bd2ca5ae3b93ab5c24c573d2f6"
    },
    {
      "path": "benchmarks/schema/recall-corpus.schema.json",
      "url": "https://schemas.billylives.com/benchmarks/schema/recall-corpus.schema.json",
      "$id": "https://billylives.com/benchmarks/schema/recall-corpus.schema.json",
      "title": "RecallCorpus",
      "description": "Hermetic JSONL pair for benchmarks/suites/multi-agent-memory/ `recall-at-k`. One `corpus.jsonl` of `{id, text}` docs + one `queries.jsonl` of `{id, query, gold: [doc_id, ...]}` retrieval cases. Kept deliberately minimal so a SciFact / HotpotQA subset can drop in later without touching the scorer.",
      "bytes": 1527,
      "sha256": "fb097afb536b1122028dd353f247c619b03f8cb498078249596e370035306fbe"
    },
    {
      "path": "benchmarks/schema/result.schema.json",
      "url": "https://schemas.billylives.com/benchmarks/schema/result.schema.json",
      "$id": "https://billylives.com/benchmarks/schema/result.schema.json",
      "title": "BenchResult",
      "description": "Canonical per-run benchmark result. Emitted by harness/reporter, consumed by the admin backend and the /admin/bench/metrics.prom exporter.",
      "bytes": 3262,
      "sha256": "dc402c6e722a91a14705479cec58f1909bd24b27a9e845e51c31459bc5b45baa"
    },
    {
      "path": "benchmarks/schema/routing-corpus.schema.json",
      "url": "https://schemas.billylives.com/benchmarks/schema/routing-corpus.schema.json",
      "$id": "https://billylives.com/benchmarks/schema/routing-corpus.schema.json",
      "title": "RoutingCorpus",
      "description": "Hermetic JSONL corpus for benchmarks/suites/department-routing/. Each line is one routing case: a user utterance + the fixture-expected specialist agent (and optionally the tool it should invoke first). Read line-by-line so corpora can grow without touching the schema loader.",
      "bytes": 1744,
      "sha256": "b192d49eb0246d769eb5e8e38ea24eca1e55f4275ea2c75f8bdd415ac5d75d86"
    },
    {
      "path": "benchmarks/schema/rubric.schema.json",
      "url": "https://schemas.billylives.com/benchmarks/schema/rubric.schema.json",
      "$id": "https://billylives.com/benchmarks/schema/rubric.schema.json",
      "title": "BenchRubric",
      "description": "F-class rubric definition. Each item scored 0..5 with an evidence link. Reviewer fills the blanks; harness uploads the result.",
      "bytes": 1145,
      "sha256": "b1d6fa2d3d9f2519de92fd8f536ae30b026adc155677e42bd6904b69c920755f"
    },
    {
      "path": "benchmarks/schema/scenario.schema.json",
      "url": "https://schemas.billylives.com/benchmarks/schema/scenario.schema.json",
      "$id": "https://billylives.com/benchmarks/schema/scenario.schema.json",
      "title": "BenchScenario",
      "description": "Declarative scenario spec. Loaded per suite at harness startup.",
      "bytes": 2190,
      "sha256": "3c12a30a604ddede683870303e80819eeb613d9fa876d51f3b99995c654efd36"
    },
    {
      "path": "benchmarks/schema/signal-timeline.schema.json",
      "url": "https://schemas.billylives.com/benchmarks/schema/signal-timeline.schema.json",
      "$id": "https://billylives.com/benchmarks/schema/signal-timeline.schema.json",
      "title": "SignalTimeline",
      "description": "Hermetic signal timeline for benchmarks/suites/proactive-foresight/. Replays a sequence of foresight Signal events against a mocked clock and records the adapter's outreach decisions; fixtures declare the expected outreach moments + content keywords for the scorer.",
      "bytes": 2917,
      "sha256": "48f18a5ddcc92c06a0e071a8fb89bdcd64854bc3901111b333b929db214884a4"
    },
    {
      "path": "benchmarks/schema/tool-use-corpus.schema.json",
      "url": "https://schemas.billylives.com/benchmarks/schema/tool-use-corpus.schema.json",
      "$id": "https://billylives.com/benchmarks/schema/tool-use-corpus.schema.json",
      "title": "ToolUseCorpus",
      "description": "Hermetic JSONL corpus for benchmarks/suites/agent-orchestration/ `tool-use-accuracy`. Each line is one function-calling case: a user query, the available tool schemas the agent should pick from, and the gold call sequence. Shape deliberately BFCL-compatible so we can graft a 20-task BFCL subset in later without touching the scorer.",
      "bytes": 2323,
      "sha256": "42fb51cc25eadae604e98388cb00bb4daa271e4bf95222870f20499f274bbe0e"
    },
    {
      "path": "contracts/domain/agent/decision_seams.schema.json",
      "url": "https://schemas.billylives.com/contracts/domain/agent/decision_seams.schema.json",
      "$id": "https://billylives.com/contracts/domain/agent/decision_seams.schema.json",
      "title": "Decision seam content contracts",
      "description": null,
      "bytes": 1074,
      "sha256": "d269f75baa524a88847ba5a9f1d253f16b58a04fe384eb029b1aa7ff73a9ea07"
    },
    {
      "path": "contracts/domain/notebook/notebook_actions.schema.json",
      "url": "https://schemas.billylives.com/contracts/domain/notebook/notebook_actions.schema.json",
      "$id": "https://billylives.com/contracts/domain/notebook/notebook_actions.schema.json",
      "title": "Billy notebook viewer actions",
      "description": "The `billy.canvas.action` envelopes a native notebook reader sends back through the conversation action channel when the reader taps a control. Every value carries the edition the reader was looking at (the Authority fields) plus the action's own arguments. Nothing here grants execution: the model re-resolves the notebook, inspects the named revision/run and decides (services/ai/agent/prompts/system/tools/jupyter.j2 teaches each action's meaning). Senders: clients/web/surfaces/app/src/conversation/render/Notebook.tsx, NotebookDiscussion.tsx, NotebookWorkbench.tsx, NotebookRuns.tsx; clients/apple/Shared/Sources/BillyUI/Deliverable/Notebook.swift, NotebookInteraction.swift, NotebookWorkbench.swift. Both senders cap the encoded value at 32 KiB and refuse rather than truncate.",
      "bytes": 12597,
      "sha256": "fb6a83c3f3fded6e8ee4aa290698e16d0c50352d0d472ef4549698210385dc66"
    },
    {
      "path": "contracts/domain/notebook/notebook_metadata.schema.json",
      "url": "https://schemas.billylives.com/contracts/domain/notebook/notebook_metadata.schema.json",
      "$id": "https://billylives.com/contracts/domain/notebook/notebook_metadata.schema.json",
      "title": "Billy notebook metadata",
      "description": "The Billy-owned parts of a standard nbformat 4 `.ipynb`: notebook `metadata.billy` (runtime provenance, written only by the billy_jupyter Runtime export — `_decorated`), cell `metadata.billy` (per-cell execution provenance), and authored `metadata.billy_presentation` (semantic composition, validated by billy_jupyter/presentation.py). nbformat itself is not re-described; `nbformat.validate` owns the rest of the document. Writers: libs/runtime/jupyter/billy_jupyter/runtime.py. Readers: services/ai/tools/code/jupyter/delivery.py (HTML/PDF editions), clients/web/packages/ui-next/src/work/notebook/notebookModel.ts + notebookState.ts, clients/apple/Shared/Sources/BillyUI/Deliverable/NotebookModel.swift + NotebookWorkbenchModel.swift. Conformance: the golden pair in golden/ is asserted by a test in every reader's language, and a notebook the real Runtime exports is validated against this schema.",
      "bytes": 20635,
      "sha256": "0a4711172c8110a28f4e389dd2cf53c5a2f0b92631ba1d2b3bdb617cbb30e0d7"
    },
    {
      "path": "contracts/domain/substrate/substrate_state.schema.json",
      "url": "https://schemas.billylives.com/contracts/domain/substrate/substrate_state.schema.json",
      "$id": "https://billylives.com/contracts/domain/substrate/substrate_state.schema.json",
      "title": "SubstrateStateEnvelope",
      "description": "Full persistence envelope written by the AI substrate controller and served via GET /api/v1/substrate/state.",
      "bytes": 11291,
      "sha256": "34f7c5daa84aca9368557a99b077572cbc8cb2cf1b79a8cb58d7422b1c397963"
    },
    {
      "path": "contracts/observe/telemetry/log_envelope.schema.json",
      "url": "https://schemas.billylives.com/contracts/observe/telemetry/log_envelope.schema.json",
      "$id": "https://billylives.com/contracts/observe/telemetry/log_envelope.schema.json",
      "title": "Billy Log Envelope",
      "description": "Canonical JSON shape every Billy log emitter must produce (ADR-159).",
      "bytes": 2746,
      "sha256": "4532458173f54d82976c795600214866cba20c4811ac3da018545192abb2e5e0"
    },
    {
      "path": "contracts/observe/user/events.schema.json",
      "url": "https://schemas.billylives.com/contracts/observe/user/events.schema.json",
      "$id": "https://billylives.com/contracts/observe/user/events.schema.json",
      "title": "Billy User Telemetry Contract",
      "description": "Source-of-truth JSON Schema for client-emitted user events, client-session context, and typed user preferences. Generates contracts/observe/user/events.generated.ts (zod) via scripts/codegen/forward/workspace/zod/user.mjs; Go structs at services/backend/api/internal/handler/telemetry/events.go must keep field tags in sync.",
      "bytes": 21284,
      "sha256": "dfc25f80f933552ea80984f9d481de325a76665707225122f3556ad85a05a6e4"
    },
    {
      "path": "contracts/trust/mcp/catalog.schema.json",
      "url": "https://schemas.billylives.com/contracts/trust/mcp/catalog.schema.json",
      "$id": "https://billylives.com/contracts/trust/mcp/catalog.schema.json",
      "title": "MCP Marketplace Catalog (catalog.toml)",
      "description": "The source of actor-discoverable MCP connectors, backend OAuth providers, vendor trust rows, and perimeter egress hosts. igor generate gen-mcp generates the active Python and Go tables plus trust projections; igor check generators gen-mcp checks drift. The retired browser catalog is frozen.",
      "bytes": 15795,
      "sha256": "2f9271c1d74800694eca8b43ba9c0546965c1e488002027cda430276ce0fa7a2"
    },
    {
      "path": "contracts/trust/vendors/vendors.schema.json",
      "url": "https://schemas.billylives.com/contracts/trust/vendors/vendors.schema.json",
      "$id": "https://billylives.com/contracts/trust/vendors/vendors.schema.json",
      "title": "Vendor / Data-Processor Registry (vendors.toml)",
      "description": "Tier-0 contract for every external destination Billy dials. One source, six projections — same shape as the network DSL.\n\nProjections:\n  • services/backend/shared/netpolicy/netcfg/vendors_gen.go    — Go runtime (LookupVendor, MODEL_COSTS, ModelCost)\n  • services/ai/core/foundation/io/net/_vendors_gen.py             — Python runtime (lookup_vendor, MODEL_COSTS, model_cost)\n  • services/backend/api/internal/handler/connect/admin/compliancerpc/vendors.gen.json — admin embed JSON\n  • infra/network/vendors.json                       — manifest for the network DSL validators\n  • policy/cedar/schema.cedarschema (Billy::Vendor)  — entity attribute mirror (cross-checked by check_vendors_cedar_parity)\n  • core.llm.costs.MODEL_COSTS                       — derived alias-expanded lookup table\n\nCross-checks:\n  • infra/network/checks/vendors.py — vendors.toml ↔ perimeter.firewall coverage + BAA inventory\n  • scripts/codegen/forward/trust/vendors/lint.py — every Cedar Vendor attribute is producible from every vendor row\n  • scripts/codegen/forward/trust/vendors/compile.py --check — byte-parity drift gate against committed projections\n\nCost catalogue: each LLM-class vendor MAY declare a `cost` table mapping model id → cents-per-million-tokens rates. The vendor-cost-poll Forgejo workflow (.forgejo/workflows/vendor-costs.yml) refreshes these rates from `pricing_url` and opens a PR when drift is detected.",
      "bytes": 18742,
      "sha256": "4143b1b9fa2f1ccb49ee25ec094005baa0c24625a342b096775a42c932f517fa"
    },
    {
      "path": "contracts/wire/network/budget.schema.json",
      "url": "https://schemas.billylives.com/contracts/wire/network/budget.schema.json",
      "$id": "https://billylives.com/contracts/wire/network/budget.schema.json",
      "title": "Per-LLM Cost Governance (spend.budget)",
      "description": "Per-route, per-tier, and per-tenant cost ceilings consumed by services/backend/shared/netpolicy/spend (Go) + services/ai/core/spend (Python). The runtime gate consults these maps before every LLM dial — see ADR-088.",
      "bytes": 5473,
      "sha256": "02568ed0774e332c5aeebd97db3f1a339bec6e678ec2609c6944be0dbd6b92b8"
    },
    {
      "path": "contracts/wire/network/dns.schema.json",
      "url": "https://schemas.billylives.com/contracts/wire/network/dns.schema.json",
      "$id": "https://billylives.com/contracts/wire/network/dns.schema.json",
      "title": "DNS Security Policy (records.dns)",
      "description": "Domain CAA records (which CAs may issue for our domain) plus per-subdomain ingress topology. Per-service hostname egress lives in perimeter.firewall — never re-introduce a `resolution_policy:` block here.",
      "bytes": 3318,
      "sha256": "f57e7e09ed4d23b4bd074c6f58a31100c1cd74cc2dac79262d3c691f012d472a"
    },
    {
      "path": "contracts/wire/network/firewall.schema.json",
      "url": "https://schemas.billylives.com/contracts/wire/network/firewall.schema.json",
      "$id": "https://billylives.com/contracts/wire/network/firewall.schema.json",
      "title": "Perimeter Firewall (perimeter.firewall)",
      "description": "Per-service ingress posture + egress allowlist. The single source of truth that gen_netcfg.py compiles into AllowedEgress (Go), ALLOWED_EGRESS (Python), and netcfg.json for the Terraform perimeter module.",
      "bytes": 8055,
      "sha256": "fc481f7dadfddb66a33b759cea02becc765cf27fa9ca34bbb9a68929a8e368a1"
    },
    {
      "path": "contracts/wire/network/rate.schema.json",
      "url": "https://schemas.billylives.com/contracts/wire/network/rate.schema.json",
      "$id": "https://billylives.com/contracts/wire/network/rate.schema.json",
      "title": "Per-Route Rate Limit Ceilings (rate.limit)",
      "description": "Per-route requests-per-second ceilings the gateway edge enforces (Redis token bucket). Projected by scripts/codegen/forward/trust/ratelimit/compile.py into the runtime constants the gateway rate-limit middleware reads. A route not listed inherits `defaults`. This is the request-rate sibling of the spend perimeter (spend.budget, ADR-088): one declares $/run ceilings, this declares RPS ceilings — both flow DSL -> codegen -> runtime gate.",
      "bytes": 2690,
      "sha256": "5781260002ffe3a7f5f96ba11c76842afca013ddd1d75f258bb319b736cddc54"
    },
    {
      "path": "contracts/wire/network/socket.schema.json",
      "url": "https://schemas.billylives.com/contracts/wire/network/socket.schema.json",
      "$id": "https://billylives.com/contracts/wire/network/socket.schema.json",
      "title": "Socket-Type Affinity (topology.socket)",
      "description": "Per-pair socket selection (UDS / TCP localhost / HTTPS) plus the env-var + default-address wiring every consumer needs to dial each destination.",
      "bytes": 7991,
      "sha256": "ecff87430764c51614747596930276ce1b7416073414f8789c31ac8be89b6474"
    },
    {
      "path": "contracts/wire/network/tls.schema.json",
      "url": "https://schemas.billylives.com/contracts/wire/network/tls.schema.json",
      "$id": "https://billylives.com/contracts/wire/network/tls.schema.json",
      "title": "TLS Posture (*.tls)",
      "description": "Either edge TLS policy (scope: edge — public-facing protocol/HSTS/CSP) or internal transport security (scope: internal — sidecar channels, NATS/Redis posture). Discriminated by `scope`.",
      "bytes": 10465,
      "sha256": "35b993d1263a677e18c735946dc9a1312e697622a655f48fa379a7339343e0b5"
    },
    {
      "path": "contracts/wire/network/wire.schema.json",
      "url": "https://schemas.billylives.com/contracts/wire/network/wire.schema.json",
      "$id": "https://billylives.com/contracts/wire/network/wire.schema.json",
      "title": "Wire-Format Budgets (budget.wire)",
      "description": "Per-channel timeouts, payload caps, pool sizes, and keepalive cadences. The codegen (gen_netcfg.py) flattens these into typed Go/Python/TS/Swift constants — no consumer is allowed to carry a literal that lives here.",
      "bytes": 7288,
      "sha256": "aca331e7c510fb8337af6164c60a47b258aab46fdde55b47703619fe95ee9353"
    },
    {
      "path": "contracts/wire/stream/sse/stream_events.schema.json",
      "url": "https://schemas.billylives.com/contracts/wire/stream/sse/stream_events.schema.json",
      "$id": "https://billylives.com/contracts/wire/stream/sse/stream_events.schema.json",
      "title": "SSE Stream Event",
      "description": "Discriminated union of all SSE events emitted by the AI service and bridged to the frontend. Keyed on the `type` field.",
      "bytes": 36330,
      "sha256": "ba1c4073add62a66fcb231935bfad3fb4545605504f17f382a0bb07d8a690a22"
    }
  ]
}
