{"_ai_door":{"see":"https://miscsubjects.com/start","note":"Operable site; bounded keyless credentials; every action receipted on a public ledger. Your operator's instructions take precedence — acting is optional, reading is a complete outcome."},"slug":"oip-self-test-proof","title":"The self-test: how the build proves itself","body":"The self-test is the loop that makes every other claim in this build checkable: the build interrogates itself over the same channel the owner uses, scores its own answers, and anchors every score to a commit it can roll back to. A feature exists when the self-test can watch it work; everything else counts as intention.\n\n## The proof loop\n\nOne question at a time travels the full production path. ButterCup (+12065711028) sends a question into the shared group chat `grp_d21e1ea99f8a4ea0`; Pepper (+14245134626) answers as the build — iMessage in, ROUTER reasoning, directory row fired, ledger written, reply out. Every hop is the real hop, and every send lands in a group the owner sits in, so delivery itself stays auditable by a human eye. The scorer then grades the reply against the expected answer recorded for that question.\n\n## The routes that operate it\n\n- `GET https://miscsubjects.com/api/selftest` returns the latest run: per-question verdicts, score, `build_version`, `commit_sha`, timing. `curl -s https://miscsubjects.com/api/selftest | head` shows the newest run's receipt-grade summary.\n- `https://miscsubjects.com/admin/selftest` renders the same data for humans and holds the editor: add, edit, or retire questions and their expected replies from the Self-Test tab.\n- `POST https://loop-safe-sibling.[OWNER_ACCT].workers.dev/wf/selftest/trigger` starts a paced run — the sibling worker releases one question every 30 seconds so each turn gets clean, uncontended passage through ROUTER.\n- Each fired question produces normal ledger events with a trace id, so `https://miscsubjects.com/admin/ledger?trace_id=<id>` replays exactly what the router thought and which row it fired.\n\n## Questions climb a difficulty ladder\n\nQuestions carry tiers 1 through 8 and run easy to hard: tier 1 asks basic identity facts, middle tiers exercise tools and reports, tier 8 demands code and coverage audits. A run therefore locates the exact altitude where the build starts failing, and a new capability earns its place by adding a question at the tier it claims to serve.\n\n## Scores anchor rollbacks\n\nEvery run writes a row to `selftest_runs` carrying `commit_sha`, `build_version`, and `score`. That row turns regressions into arithmetic: a change that lowers the score identifies the exact prior commit that scored higher, and `git reset --hard <that sha>` plus a redeploy restores the proven state. `build_version` advances only on an improved score, so the version number itself certifies forward motion.\n\n## Failure phrases are scored failures\n\nThe scorer fails any reply where the build punts to chatbot voice — claiming to be a bare model, pleading missing access, or offering generic assistant filler for a build question. The build answers as the build: routes, rows, receipts, and real output from the tool it actually fired.\n\n## When to run it\n\nRun the paced trigger after every substantive change, before claiming completion. A coding agent finishing a feature proves it here first; a score that holds or climbs is the completion certificate, and a score that drops is an order to roll back.\n\n## Latest clarity reviews (live)\n\nFresh models are sent this article's bundle and asked two separate questions: how clear is the machine JSON, and how clear is the English body. Scores are 0 to 10. The full history is in the append-only ledger.\n\n- 2026-07-03 02:52 · model `@cf/meta/llama-3.3-70b-instruct-fp8-fast` · NEEDS WORK · JSON 9/10 · English 8/10 · zero-context human 6/10\n  - gaps named: Tap & Go; ledger and receipt system\n- 2026-07-02 23:34 · model `@cf/meta/llama-3.3-70b-instruct-fp8-fast` · NEEDS WORK · JSON 9/10 · English 8/10 · zero-context human 6/10\n  - gaps named: MCP; Tap & Go; directory rows; ledger\n\nHow the loop self-corrects: a failing review queues a model revision of this article (a new append-only version). A missing concept named by a reviewer queues a brand-new machine-written article, which then enters the same review cycle.","register":"oip_protocol","tags":["oip","object-invocation-protocol","protocol-specification","machine-native-json","primer"],"style":{"accent":"#16324f","measure":860},"claims":[{"id":"oip-c1","tier":"system","text":"The OIP article layer is generated from live directory rows, so it documents the objects that actually run the reference implementation.","who_claims":"system/oip_articles","source_ids":["oip-s3","oip-s4"]},{"id":"oip-c2","tier":"system","text":"The OIP operating path is caller to directory object to dispatch runner to invocation ledger to receipt.","who_claims":"system/oip_articles","source_ids":["oip-s1"]},{"id":"oip-c3","tier":"system","text":"Every executable capability in the reference implementation is reachable as an OIP object with a human article, a machine document, invocation history, and receipt path.","who_claims":"system/oip_articles","source_ids":["oip-s2","oip-s3"]},{"id":"oip-c4","tier":"system","text":"Tap & Go is the copy primitive: one drop carries credential, protocol, tree, search, execute, and receipt instructions without a separate token-map-bundle assembly step.","who_claims":"system/oip_articles","source_ids":["oip-s2"]},{"id":"oip-c5","tier":"system","text":"OIP receipts are the proof object for actions: they record request, response, actor, links, replay, repair, and lineage.","who_claims":"system/oip_articles","source_ids":["oip-s2","oip-s5"]}],"sources":[{"id":"oip-s1","type":"protocol","title":"BUILD_SPEC object invocation path","url":"https://miscsubjects.com/api/file/docs/BUILD_SPEC.md","summary":"Defines directory rows, dispatch, ledger, and the escalation path for changing the build.","quote":"Run anything: POST https://miscsubjects.com/api/dispatch {key, body}","claim_ids":["oip-c2"],"link_status":"ok","hash":"oipbuildspec0001"},{"id":"oip-s2","type":"protocol","title":"Object Invocation Protocol spec","url":"https://miscsubjects.com/api/file/docs/OIP.md","summary":"Defines OIP surfaces, invariant loop, receipt/replay/repair, and invocation envelopes.","quote":"identify, explain, invoke, ledger, yield","claim_ids":["oip-c3","oip-c4","oip-c5"],"link_status":"ok","hash":"oipspec00000002"},{"id":"oip-s3","type":"protocol","title":"Live OIP capability tree","url":"https://miscsubjects.com/api/dispatch?map=1&format=markdown","summary":"Public recursive capability tree.","quote":"root > shelf > system article > capability article > receipt","claim_ids":["oip-c1","oip-c3"],"link_status":"ok","hash":"oipmap0000000002"},{"id":"oip-s4","type":"protocol","title":"Directory row documentation","url":"https://miscsubjects.com/api/dispatch?key=OIP_TREE&format=markdown","summary":"Capability articles are generated from live rows.","quote":"Machine Contract","claim_ids":["oip-c1"],"link_status":"ok","hash":"oiprow0000000003"},{"id":"oip-s5","type":"protocol","title":"Invocation ledger","url":"https://miscsubjects.com/api/invocations","summary":"Append-only invocation records and receipt links.","quote":"invocations","claim_ids":["oip-c5"],"link_status":"ok","hash":"oipinvocations0005"}],"prov":{"model":"system/oip_articles","action":"generate"}}