{"_self":{"principle":"Self-explaining payload — no external context required. This _self block describes what you are reading and where to look next.","widget":"article_topology","feature":"topology","name":"Article topology","what":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","contains":"claims, sources, anecdotes, question_graph slice","slug":"proof-of-coverage","urls":{"read":"https://miscsubjects.com/api/articles/proof-of-coverage/topology"},"how_to_use":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","write":null,"imessage":null,"router_tag":null,"proof_chain":[{"step":1,"claim":"Articles are voxel graphs of tiered claims, not prose blobs.","verify":"https://miscsubjects.com/api/articles/constitution"},{"step":2,"claim":"Claims link to hash-chained sources via source_ids.","verify":"https://miscsubjects.com/api/articles/proof-of-coverage/sources"},{"step":3,"claim":"Ask reads topology; ingest/claim append to ledger.","verify":"https://miscsubjects.com/api/protocol"},{"step":4,"claim":"Models queue growth: populate → collaborate → repair → reflex.","verify":"https://miscsubjects.com/api/protocol/grow"},{"step":5,"claim":"Graph proves its own shape (reflex) and $/claim (yield).","verify":"https://miscsubjects.com/graph.html?layer=reflex"},{"step":6,"claim":"Full feature index + _explain on every API response.","verify":"https://miscsubjects.com/api/articles/system-map"}],"related_features":[{"id":"ask","name":"Ask protocol","what":"Answer only from topology; creates question_node with gaps and ingest_hint.","urls":{"read":"https://miscsubjects.com/api/articles/proof-of-coverage/prompts","write":"https://miscsubjects.com/api/protocol/ask"}},{"id":"graph_topology","name":"Cross-article graph","what":"Merged claims/sources across condition+stack slugs for one question.","urls":{"read":"https://miscsubjects.com/api/articles/proof-of-coverage/graph-topology?question=..."}},{"id":"question_graph","name":"Question graph","what":"Ask nodes (questions + gaps) and evidence_ingest nodes (pasted model output).","urls":{"read":"https://miscsubjects.com/api/articles/proof-of-coverage/question-graph","write":"https://miscsubjects.com/api/protocol/ask"}},{"id":"voxels","name":"Voxel graph","what":"Claims as atoms, sources as edges (supported_by, posted_by). Per-claim provenance.","urls":{"read":"https://miscsubjects.com/api/articles/proof-of-coverage/voxels","write":"https://miscsubjects.com/api/protocol/claim"}}],"system_map":"https://miscsubjects.com/api/articles/system-map","system_map_markdown":"https://miscsubjects.com/api/articles/system-map?format=markdown","not_medical_advice":true},"_explain":{"feature":"topology","name":"Article topology","what":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","why":"Every feature is auditable collective intelligence","how":"Claims, sources, anecdotes, user reports, related embeds, question graph slice — for ask/ROUTER.","model":null,"verifies":null,"urls":{"read":"https://miscsubjects.com/api/articles/proof-of-coverage/topology"},"imessage":null,"router":null,"related":[{"id":"ask","what":"Answer only from topology; creates question_node with gaps and ingest_hint."},{"id":"graph_topology","what":"Merged claims/sources across condition+stack slugs for one question."},{"id":"question_graph","what":"Ask nodes (questions + gaps) and evidence_ingest nodes (pasted model output)."},{"id":"voxels","what":"Claims as atoms, sources as edges (supported_by, posted_by). Per-claim provenance."}],"not_medical_advice":true},"slug":"proof-of-coverage","title":"Proof of coverage: how to prove an AI examined every record it was given","register":"technical","tags":["system","protocol","objects","ledger","audit"],"updated_at":"2026-07-28T03:24:44.947Z","body_excerpt":"## What proof of coverage is\n\nProof of coverage is a way of recording machine work so that a stranger can check whether every item that was supposed to be examined actually was. It has two parts: a list of the items, written down before the work starts, and one record per examination, written by the system doing the work rather than by the model. Completeness is then a subtraction between the two lists.\n\nThe problem it solves comes up whenever software is asked to look at many things and report back. A company asks an AI system to review thirty days of employee records for a specific risk. The system answers: reviewed, three concerns found. Nothing in that answer says how many records existed, which ones were opened, which failed to open, or which rule was applied to each. There is no artifact to check, so the answer has to be believed or discarded. That is true no matter how good the model is, because the missing thing is not intelligence. It is bookkeeping.\n\n[[embed:source:s7]]\n\nA second model, asked the same question with none of the first answer in front of it, stopped in the same place.\n\n[[embed:source:s8]]\n\n## The four objects\n\nEverything below is built out of four record types. Nothing else is required.\n\n| Object | What it is | Written when |\n|---|---|---|\n| **universe** | A named set of items to be examined, with a frozen count and the rule that decides membership | Once, before any work |\n| **object** | One item in that set, with a stable id and a hash of its content | Once per item, at enrolment |\n| **procedure** | A versioned description of the test to apply — the prompt, the model, the threshold, the tool | Once per version |\n| **pass** | One examination of one object by one actor under one procedure, with the result | Once per examination |\n\n\"Universe\" is the load-bearing word. It is the denominator: the number the coverage percentage is divided by. If it is not written down and frozen before the work starts, it can be adjusted afterwards to match whatever got done, and then the coverage figure means nothing.\n\n## What a pass record contains\n\nThe record is written by the execution environment — the code that calls the model — never by the model itself. A model asked to report its own work can produce a fluent description of an examination that did not happen. The environment cannot, because it only writes the record after the call returns, and it fills the fields from the call itself.\n\n```json\n{\n  \"universe_id\": \"u_2026_07_27_gate_a_faces\",\n  \"object_id\": \"face:8f2a1c9d4b6e0175\",\n  \"object_hash\": \"sha256:8f2a1c9d…0a1b2c\",\n  \"procedure\": \"match@v3.1\",\n  \"actor\": \"vision-model-a@operator-1\",\n  \"input_envelope_hash\": \"sha256:1b9f…7d21\",\n  \"output\": \"no_match\",\n  \"confidence\": 0.02,\n  \"started_at\": \"2026-07-27T18:04:11.221Z\",\n  \"duration_ms\": 412,\n  \"receipt\": \"sha256:c4d5…9e08\",\n  \"prev\": \"sha256:aa01…4f6b\",\n  \"hash\": \"sha256:bb02…7c1d\"\n}\n```\n\nField by field, and why each one is not optional:\n\n| Field | Why it is there |\n|---|---|\n| `object_hash` | Binds the result to the exact bytes examined. Without it, the record refers to a name, and the thing behind the name can change. |\n| `procedure` | Versioned. \"Reviewed for risk\" is not checkable; `match@v3.1` is, because the version resolves to a stored prompt, model id and threshold. |\n| `actor` | Which model, which endpoint, which operator ran it. Two actors disagreeing about one object is a fact worth keeping. |\n| `input_envelope_hash` | Hash of everything sent — prompt, parameters, attachments. Makes the call repeatable by a third party. |\n| `output` | A value from a fixed set the procedure declares, not free text. Free text cannot be counted. |\n| `receipt` | The provider's own identifier for the call, when one exists. Independent corroboration that the call occurred. |\n| `prev`, `hash` | The chain. Explained below. |\n\n[[embed:source:s9]]\n\nThe same requirement exists in software supply-chain security, where a signed statement binds a claim to the digest of the artifact ","ranking":"safety-first (interaction_risk/limitations), then quote-gated effective_weight","claims":[{"id":"c1","text":"Coverage cannot be verified without a stored count of the objects that were supposed to be examined.","tier":"system","section":"The four objects","interaction_risk":false,"status":"active","source_ids":["s7","s8"],"why_material":"It is the field every existing provenance format omits.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c2","text":"Coverage is a subtraction between the object table and the pass table, not a statement produced by a model.","tier":"system","section":"The arithmetic","interaction_risk":false,"status":"active","source_ids":[],"why_material":"It makes the completeness question a query anyone can rerun.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c3","text":"The identity rule — what counts as one object — must be written down before enrolment, because it sets the denominator.","tier":"system","section":"The identity rule","interaction_risk":false,"status":"active","source_ids":[],"why_material":"Every coverage number is only as honest as this rule.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c4","text":"A pass record is only evidence if the execution environment writes it and binds it to the hash of the exact input; a model's own account of its work is not evidence.","tier":"system","section":"The pass record","interaction_risk":false,"status":"active","source_ids":["s9","s2","s3"],"why_material":"It sets the minimum content of the record and rules out narration.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c5","text":"Hash-chaining pass records makes silent deletion detectable, because removing a row breaks every hash after it.","tier":"system","section":"The chain","interaction_risk":false,"status":"active","source_ids":[],"why_material":"Without it, a clean coverage report can be produced by deleting the failures.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c6","text":"Most systems present a small number of record shapes, so enrolling the thousandth system is a classification against an existing template rather than a new integration.","tier":"system","section":"Enrolment","interaction_risk":false,"status":"active","source_ids":["s10"],"why_material":"It is the reason the cost of the method does not grow with the number of systems.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c7","text":"At Cloudflare D1's published rates, one billion pass records cost $1,000 to write once, about $490 per month to store, and $1.00 for a full-table coverage recount.","tier":"system","section":"Cost","interaction_risk":false,"status":"active","source_ids":["s6"],"why_material":"It shows the method is limited by rules and access, not by money.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c8","text":"PROV, OpenTelemetry and OpenLineage each record operations, and none of them stores a declared universe, so none can answer a coverage question by itself.","tier":"system","section":"What already exists","interaction_risk":false,"status":"active","source_ids":["s1","s4","s5"],"why_material":"It locates the specific gap this method fills.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c9","text":"A coverage proof shows a procedure ran over every enrolled object. It does not show the procedure was correct.","tier":"system","section":"The limit","interaction_risk":false,"status":"active","source_ids":["s11"],"why_material":"Confusing the two is the way this method would be used to launder a bad rule.","retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false}],"sources":[{"id":"s1","type":"reference","url":"https://www.w3.org/TR/prov-dm/","title":"W3C PROV-DM: The PROV Data Model","quote":"PROV-DM is a data model for provenance that describes the entities, activities and agents involved in producing a piece of data or thing in the world.","summary":"The standard vocabulary for saying who did what to which thing. It models the pass. It does not model the universe, so it cannot express coverage.","claim_ids":["c8"],"hash":"8c775f5d952802bf3db493a44c7e5849717c96af7fb88e1e57da4a2084080258"},{"id":"s2","type":"github","url":"https://github.com/in-toto/attestation","title":"in-toto attestation framework: signed statements about software artifacts","summary":"A signed statement binds a predicate to a subject identified by cryptographic digest. This is the shape a pass record needs: the claim is bound to the hash of the exact thing examined, not to its name.","claim_ids":["c4"],"hash":"2124d27220fe8178b478d688013d609039c992ad5c656cb9e7256e31efa1eb37"},{"id":"s3","type":"reference","url":"https://slsa.dev/spec/v1.0/provenance","title":"SLSA v1.0 provenance specification","quote":"The provenance attestation describes how an artifact was produced, including the builder identity, the build definition, and the resolved dependencies.","summary":"Builder identity plus resolved inputs plus an externally produced record. Same three parts a model pass needs, applied to build systems instead of inference.","claim_ids":["c4"],"hash":"82e399fc614846ea7202acd4886a5e81deeb80ae8d602bd463b3c738f7882598"},{"id":"s4","type":"reference","url":"https://opentelemetry.io/docs/specs/otel/trace/api/","title":"OpenTelemetry tracing specification","summary":"Records operations and their causal relationships across services. Spans are sampled and expire, and nothing declares how many spans should have existed, so a trace cannot answer a coverage question.","claim_ids":["c8"],"hash":"df7628c336d037c2cc2d694284358fbaeb13f885712a1d80eb405d2d65fa4051"},{"id":"s5","type":"reference","url":"https://openlineage.io/docs/spec/object-model","title":"OpenLineage object model","summary":"Datasets, jobs and runs, tracked across pipelines. Lineage at dataset granularity: it says a job read a table, not which of the table's rows were evaluated.","claim_ids":["c8"],"hash":"ae35669d3b719559bf9aea5abb4713c877a1904b817baf57583788aef064a480"},{"id":"s6","type":"reference","url":"https://developers.cloudflare.com/d1/platform/pricing/","title":"Cloudflare D1 pricing — rows written, rows read, storage","quote":"Rows written: first 50 million / month included + $1.00 / million rows. Rows read: first 25 billion / month included + $0.001 / million rows. Storage: first 5 GB included + $0.75 / GB-mo.","summary":"The rates used in the cost arithmetic below. Page last updated 2026-04-21.","claim_ids":["c7"],"hash":"42840db3431c48cfb0957033249cc7161e52528a1fbe540a310fe98ecab8e18d"},{"id":"s7","type":"model","title":"GPT-5.6 on the declared universe","quote":"Without the declared universe, “the AI checked everything” is unverifiable.","claim_ids":["c1"],"hash":"0dc65990e9176fe5d5ceb8ce2177db26d63b377a4429f5b3bcb546d12938ab41"},{"id":"s8","type":"model","title":"Kimi, given the same question and none of the first answer","quote":"Your “one door” is only as good as your proof that nothing slipped through it.","claim_ids":["c1"],"hash":"e61852e926fbb6e8ddd3d88e46e299d61e57a44c682c6ab31b1a80072cf243f3"},{"id":"s9","type":"model","title":"GPT-5.6 refuses the self-report","quote":"Model self-report is not proof. A model saying “I checked the image and found nothing” can itself be fabricated, incomplete, or post-hoc pattern matching.","claim_ids":["c4"],"hash":"e232898b2b524219946ea9edaded18c0c2c2bc79f5ce8aaed6db539dd68d22ff"},{"id":"s10","type":"model","title":"Kimi on how few shapes there are","quote":"Payments: Stripe, Square, PayPal, Plaid — same shape, different field names.","claim_ids":["c6"],"hash":"daa3fe75852ee4fafeacf0028e5e15af0b75ccf938945947d00de7b5cc4ceb2c"},{"id":"s11","type":"model","title":"The strongest objection on the page","quote":"Execution correctness: every intended object was processed under the intended procedure. World correctness: the resulting judgment was actually true. Ten models can consistently make the same error.","claim_ids":["c9"],"hash":"3edb4dfa764793b867984ddd18e3a893c34bed7604e52e863ffa53f1db932c69"}],"anecdotal_sources":[],"scientific_sources":[],"user_reports":[],"related_articles":[],"question_graph":{"slug":"proof-of-coverage","questions":[],"evidence":[],"edges":[],"counts":{"questions":0,"evidence":0,"edges":0}},"honesty":{"active_claims":9,"retracted_claims":0,"cut_claims":0,"challenges":0,"scrub_events":0,"note":"Retracted/cut claims stay on ledger but are excluded from ask unless ?include_inactive=1"},"counts":{"claims":9,"claims_total":9,"sources":11,"anecdotal":0,"scientific":0,"user_reports":0,"questions":0,"evidence_ingests":0}}