{"_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":"offline-verifier","urls":{"read":"https://miscsubjects.com/api/articles/offline-verifier/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/offline-verifier/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/offline-verifier/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/offline-verifier/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/offline-verifier/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/offline-verifier/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/offline-verifier/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":"offline-verifier","title":"An offline verifier that refuses to ask this site whether this site is honest","register":"standard","tags":["verification","anchor","drand","bitcoin","offline-verifier"],"updated_at":"2026-07-30T02:59:50.608Z","body_excerpt":"Every check on this site that ends in \"and you can verify it\" has, until now, ended in \"by asking this site\". That is not a check. Below is a 200-line script that answers PASS or FAIL over a downloaded bundle and refuses to contact miscsubjects.com at all — it raises an exception if a URL it is handed contains that hostname.\n\n## What it recomputes, and what each check would catch\n\n| check | recomputes | catches |\n|---|---|---|\n| ANCHOR_ID | `SHA256(canonical preimage)` and compares to the published anchor id | a commitment edited after publication |\n| CANONICAL_BINDING | that every field the packet displays is inside the string the hash was taken over | a preimage committing to a different drand round, block or chain head than the packet shows |\n| DRAND_SELF | `randomness == SHA256(signature)` — drand's own construction, checkable with no network and no BLS library | an invented beacon |\n| DRAND_LIVE | the beacon at `api.drand.sh` for that round, byte for byte | a real-looking round that was never published |\n| BTC_HEADER | the 80-byte header double-SHA256s to the claimed hash, and that hash meets its own difficulty target | a fabricated block hash — proof-of-work cannot be forged backwards |\n| BTC_SECOND_SOURCE | a second independent explorer's hash at that height | one compromised explorer |\n| OBJECT_HASHES | every bundled object — image bytes, record, rule set, system prompt — against the hash the findings cite | a rule set or artifact swapped after the findings were made |\n| FINDING_BINDING | that each finding cites this bundle's rule-set hash and artifact hash, and signs with the model its row targets | a finding re-pointed at a different rule set, or a signature naming a model that did not run |\n\n## Run it\n\n```bash\ncurl -sO https://miscsubjects.com/img/up/attested-finding-bundle-2026-07-30.json\ncurl -sO https://raw.githubusercontent.com/massoumicyrus/miscsubjects-pages/main/scripts/verify_bundle.py\npython3 verify_bundle.py attested-finding-bundle-2026-07-30.json\n\n# hash-only, zero network:\npython3 verify_bundle.py attested-finding-bundle-2026-07-30.json --no-network\n```\n\nThe test vector is the 1,016,031-byte bundle for the [attested radiograph finding](https://miscsubjects.com/a/attested-finding-image-record-action): the image bytes, the record, the rule-set preimage, the full system prompt, six findings with their receipts, and the anchor packet. Output on that bundle, today:\n\n```\nbundle: attested finding — synthetic chest radiograph + synthetic medication record, 5 adjudicators\nnetwork: drand + 2 bitcoin explorers (never miscsubjects.com)\n\nANCHOR_ID          PASS computed 3be5071eb3035ca29093c671\nCANONICAL_BINDING  PASS all 5 asserted fields are inside the hashed preimage\nDRAND_SELF         PASS randomness == SHA256(signature)\nDRAND_LIVE         PASS round 6331315 matches the League of Entropy beacon byte for byte\nBTC_HEADER         PASS 80-byte header double-SHA256s to the claimed hash and meets its own target\nBTC_SECOND_SOURCE  PASS an independent explorer returns the same hash at height 960173\nOBJECT_HASHES      PASS 4 objects hash to the values the findings cite\nFINDING_BINDING    PASS 6 findings cite this bundle's rule set and artifact and sign with the model that ran\n\nPASS — 8 checks, 0 failed, 0 skipped\n```\n\n## The first run failed, and it failed on the bundle rather than on the site\n\nOn its first execution FINDING_BINDING came back FAIL:\n\n```\nFINDING_BINDING    FAIL inv_k18tz2n8c1 cites ruleset c8823bafd3b3946c, bundle ruleset is 6f4102eb210d6651;\n                        inv_cysc2z38zp cites ruleset c8823bafd3b3946c, bundle ruleset is 6f4102eb210d6651; …\n```\n\nThe findings cite the rule-set hash the publisher took over its own canonical form of the rule-set object. The bundle had been built with a **different** serialisation of the same clauses, which hashes to something else. Two serialisations of one rule set is exactly the defect that makes a pinned hash worthless, and the verifier caught it immediately. The ","ranking":"safety-first (interaction_risk/limitations), then quote-gated effective_weight","claims":[{"id":"c1","text":"An offline verifier recomputes the anchor id, the canonical binding, drand's randomness-from-signature construction, the Bitcoin header's proof-of-work, every bundled object hash and every finding's binding, and refuses by construction to contact miscsubjects.com.","tier":"demonstrated","section":"verifier","interaction_risk":false,"status":"active","source_ids":["s1","s5"],"retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c2","text":"On the published test-vector bundle the verifier returns PASS on 8 of 8 checks, including a byte-for-byte match against the live drand beacon for round 6331315 and a proof-of-work check on Bitcoin block 960173 from two independent explorers.","tier":"demonstrated","section":"verifier","interaction_risk":false,"status":"active","source_ids":["s1","s3","s4"],"retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c3","text":"On its first run the verifier failed FINDING_BINDING because the bundle carried a second serialisation of the rule set that hashed differently from the preimage the findings cite; the bundle was corrected and the verifier was not changed.","tier":"demonstrated","section":"verifier","interaction_risk":false,"status":"active","source_ids":["s1"],"retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c4","text":"The anchor establishes a lower bound on the record's age against surfaces the operator does not control and establishes no upper bound, and the verifier prints that distinction rather than leaving it to the reader.","tier":"demonstrated","section":"anchor","interaction_risk":false,"status":"active","source_ids":["s2","s3"],"retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false},{"id":"c5","text":"The verifier does not perform full BLS signature verification against the drand group key, carries no OpenTimestamps inclusion proof, and carries no qualified electronic timestamp under eIDAS Article 41 — three named gaps, none of them closed.","tier":"argued","section":"limits","interaction_risk":false,"status":"active","source_ids":["s5"],"retracted_at":null,"retraction_reason":null,"challenged_by":[],"effective_weight":0.1,"quote_gated":false}],"sources":[{"id":"s1","type":"live_surface","url":"https://miscsubjects.com/img/up/attested-finding-bundle-2026-07-30.json","title":"The test-vector bundle, 1,016,031 bytes","summary":"Image bytes, record, rule-set preimage, full system prompt, six findings with receipts, anchor packet. Download it and verify it offline.","claim_ids":[],"hash":"a9df411b322148bcfab31c7b8e97bfc07b0c64fc02d7ee330978db3154816b5c"},{"id":"s2","type":"live_surface","url":"https://miscsubjects.com/api/anchor/3be5071eb3035ca29093c6713646bbe21bdca6cce262fc7f7eb64080c04e61fe","title":"The anchor packet the verifier recomputes","summary":"anchor_id = SHA256(canonical). The canonical preimage is published with it.","claim_ids":[],"hash":"48190147ddb6a5f5613f92b6d9a646c7192a4a17e54e4bedde3ae9560bc16d20"},{"id":"s3","type":"live_surface","url":"https://api.drand.sh/public/6331315","title":"drand round 6331315","summary":"League of Entropy beacon. BLS-signed, unpredictable before its cadence time, and nothing here can produce it early.","claim_ids":[],"hash":"910d703a75cd38fa1cd2860eba17022e89222c864f4e0eb001abe48ea18636d4"},{"id":"s4","type":"live_surface","url":"https://mempool.space/api/block-height/960173","title":"Bitcoin block 960173, second source","summary":"The verifier fetches the 80-byte header from one explorer, recomputes the hash, checks proof-of-work, then compares the hash against a second explorer.","claim_ids":[],"hash":"9f9cad1a189cbf05340fc271b6feab029f6ae9ed8136cf834f0f42b9ff64687f"},{"id":"s5","type":"github","url":"https://github.com/massoumicyrus/miscsubjects-pages/blob/main/scripts/verify_bundle.py","title":"scripts/verify_bundle.py","summary":"The verifier in the repository, so the copy in this article can be diffed against the committed one.","claim_ids":[],"hash":"385322a68541ec98bc1ffeb6d7fa1fb24d9be843b9b2df1563cb101e5193fbd9"}],"anecdotal_sources":[],"scientific_sources":[],"user_reports":[],"related_articles":[],"question_graph":{"slug":"offline-verifier","questions":[],"evidence":[],"edges":[],"counts":{"questions":0,"evidence":0,"edges":0}},"honesty":{"active_claims":5,"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":5,"claims_total":5,"sources":5,"anecdotal":0,"scientific":0,"user_reports":0,"questions":0,"evidence_ingests":0}}