{
  "generated_on": "2026-10-11",
  "metrics": [
    {
      "definition": "Records that passed every blocking gate and are served from /v1/index.untrusted.json, at any trust level.",
      "gaming": "Publish more records. That is the catalog improving, which is why this number is here and not on its own.",
      "key": "records",
      "label": "Records published",
      "unit": "count",
      "value": 30
    },
    {
      "definition": "The share of published records whose computed trust is T2 or higher, which is what /v1/index.json contains. Trust is computed from evidence at read time and decays; it is never assigned.",
      "gaming": "A record reaches T2 by passing every gate with a verified publisher. There is no way to raise this that is not a record getting better or a publisher getting verified.",
      "key": "trusted_share",
      "label": "At T2 or above",
      "unit": "share",
      "value": 1
    },
    {
      "definition": "Records whose source has moved on: upstream_state is `changed` or `gone`. A record can be perfectly valid and still describe a procedure its source has since rewritten.",
      "gaming": "Deleting the affected records would lower it, and would also lower the record count beside it. The pair is published together for that reason.",
      "key": "stale_upstream",
      "label": "Upstream changed or gone",
      "unit": "count",
      "unmeasured": "No upstream has been checked on this checkout, so there is nothing to count. `upstream_state` is written when a record is made and stays `current` until `pnpm reindex` says otherwise; reporting zero would claim the catalog looked and found every source where it left it.",
      "value": null
    },
    {
      "definition": "Days since the trust level of each record was computed, at the median. Trust decays after 180 days, so this says how close the catalog is to that edge.",
      "gaming": "Recomputing trust lowers it, and recomputing is exactly the work this number exists to prompt.",
      "key": "trust_age_median",
      "label": "Median age of the trust judgement",
      "unit": "days",
      "value": 0
    },
    {
      "definition": "Distinct (target, trigger) pairs across the 50 most-covered targets. It measures spread rather than volume: ten records about one target and one trigger fill one cell.",
      "gaming": "Adding a record for a pair nobody covers. That is coverage improving.",
      "key": "coverage_cells",
      "label": "Filled target × trigger cells",
      "unit": "count",
      "value": 16
    },
    {
      "definition": "Of the records an adaptation batch has seen, the share that reached a P1 proposal. The rest were refused by their licence, kept as P0 because the procedure does not decompose, or dropped as not runbooks. A proposal is not a publication: nothing here has been reviewed by counting it.",
      "gaming": "Proposing for records that should have stayed P0 raises it and lowers the acceptance rate beside it, which is why the review queue's correction rate belongs on this page too.",
      "key": "adapted_share",
      "label": "Ingested records with a P1 proposal",
      "unit": "share",
      "unmeasured": "No adaptation batch has run against this checkout, so there is nothing to take a share of. Reporting zero would say every ingested record failed to promote.",
      "value": null
    },
    {
      "definition": "Proposals a person has not yet accepted, kept as P0 or dropped. An unreviewed adaptation is never published, so this queue growing is a reason to add reviewers, improve the inference or narrow the intake — never to lower the bar.",
      "gaming": "Dropping proposals unread would empty it and show up as a collapse in the acceptance rate published beside it.",
      "key": "adaptation_queue",
      "label": "Adaptations awaiting review",
      "unit": "count",
      "unmeasured": "No adaptation batch has run against this checkout, so there is no queue to measure. Reporting zero would claim an empty queue.",
      "value": null
    },
    {
      "definition": "Of accepted adaptations, the share where the reviewer changed something the pipeline had proposed. Answering a question the pipeline asked is not a correction: it asked precisely because it did not know.",
      "gaming": "Proposing less would lower it by asking more questions instead, which shows up as a longer queue and more actions per acceptance.",
      "key": "adaptation_correction_rate",
      "label": "Accepted after correction",
      "unit": "share",
      "unmeasured": "Nothing has been accepted yet, so there is nothing to take a share of. Reporting zero would claim the inference has never been wrong.",
      "value": null
    },
    {
      "definition": "Bytes of the records payload in /v1/search-index.json — the part a reader would download to search — against a 524288-byte budget. The payload rather than the file, because the file carries this measurement and measuring it would change it. Faceted search is client-side over this file, which is what keeps the \"no mandatory database\" rule true; past the budget that stops being the cheap option it was designed to be and /catalog has to fall back to a search endpoint.",
      "gaming": "Publishing fewer records lowers it, and lowers the record count beside it. Shortening descriptions lowers it and makes the catalog worse to read.",
      "key": "search_index_bytes",
      "label": "Client-side search index",
      "unit": "count",
      "value": 16003
    },
    {
      "definition": "Days since the most recent attestation on each attested record, at the median. An attestation is a signature over a run bound to a content hash, and it is what carries a record above T2.",
      "gaming": "Issuing attestations lowers it, and an attestation is a signed claim about a real run — the work it measures is the work itself.",
      "key": "attestation_age_median",
      "label": "Median age of the latest attestation",
      "unit": "days",
      "unmeasured": "No record carries an attestation yet. A median of zero over an empty set would read as every record having been attested today.",
      "value": null
    },
    {
      "definition": "Findings at error severity from the last run of §15's autogate chain over every record in the catalog. A record with one does not publish, so this number is normally zero and is worth publishing precisely because of that.",
      "gaming": "Fixing the records lowers it. Removing a gate would too, which is why the gate list is published beside the number and a gate is removed only by changing the code that every caller shares.",
      "key": "gate_failures",
      "label": "Records failing a blocking gate",
      "unit": "count",
      "value": 0
    },
    {
      "definition": "Requests to the security channel where the gap between the request and the action passed 72 real hours — weekends included, since a leaked credential does not wait for Monday. Counted from the public log in moderation/takedowns.json.",
      "gaming": "Answering faster lowers it. Not recording a request would too, which is why the request count is published beside it and the log is append-only.",
      "key": "takedown_breaches",
      "label": "Takedowns answered later than 72 hours",
      "unit": "count",
      "unmeasured": "No request has been recorded. That is what an empty log means and it is not the same as a channel that answered everything on time.",
      "value": null
    },
    {
      "definition": "The day a record was published for the purpose and withdrawn as a real request would withdraw it, checked from outside against every surface that carried it. Recorded in the public log, counted apart from real requests so it never flatters the response time.",
      "gaming": "Rehearsing more often improves it, and rehearsing is the thing being measured — there is no way to move this that is not the control being exercised. Rehearsing against a record nothing else touches would be the cheap version, which is why what was touched is written in the log entry.",
      "key": "takedown_rehearsal_age",
      "label": "Days since the unpublish was rehearsed",
      "unit": "days",
      "value": 36
    },
    {
      "definition": "Items opened last week minus items closed, against the threshold §15 calls healthy. Growth rather than size: a large queue that is not growing is a backlog, and a small one that doubles weekly is a project about to have one.",
      "gaming": "Closing items lowers it, and closing items is the work. Rejecting is a decision and counts; ignoring does not — after seven business days an unreviewed record publishes itself at the bottom of the ladder.",
      "key": "queue_growth",
      "label": "Moderation queue growth per week",
      "unit": "count",
      "unmeasured": "No queue snapshot was taken. An empty queue and an unwatched one look identical from here, and only one of them is good news.",
      "value": null
    },
    {
      "definition": "The share of searches that matched no record, in aggregate. The queries themselves are never stored (§17): what is useful is the rate, and the rate is what is kept.",
      "gaming": "Returning weak matches instead of nothing would lower it while making search worse, which is why it is published beside coverage rather than alone.",
      "key": "zero_result_share",
      "label": "Searches returning nothing",
      "unit": "share",
      "unmeasured": "Search runs in the reader's browser over a published file, so nobody sees the queries and nobody counts them — which is the arrangement, not an oversight. This becomes a number if an endpoint is ever deployed, and stays absent until then: reporting zero would claim every search succeeds.",
      "value": null
    }
  ]
}
