Wiki · Evidence & Verdicts
RED pre-registration — decide-page-records-never-acts
How to read this page
Eighty-seven dated pages: receipts, pre-registrations, handoffs, validation records and review verdicts. A receipt is written at the moment a piece of work was checked. It names what was claimed, the commit and the seed, what was actually run, and the outcome in one of a small set of controlled words. Then it names what the work did not achieve. That last part is what makes it a receipt rather than an announcement. A pre-registration is the same discipline run in advance: the conditions that would count as a pass and the conditions that would falsify the claim are written down before the run, so neither can be adjusted once the numbers arrive.
That is why so many small dated stubs are an audit trail rather than noise. No one of them is meant to be a good read. The value is in the sequence and in the dates, because you can watch a prediction be registered, then the run happen, then the verdict land — sometimes against the prediction. Pages here record a falsified result, a rejected fix, a retracted overclaim, and a green receipt that turned out not to be reproducible from the commit that carried it. A record that carried only successes would be worth a good deal less than this one.
A gentle way in is to read a pre-registration first, so the shape becomes familiar, then a result page, then one of the corrections. This section sits off the main navigation on purpose: it is the record you check the rest of the site against, not the place to begin.
What it is not: documentation, and not a summary. Nothing here has been tidied in hindsight. Every entry reads as of its date, a later entry may overturn an earlier one, and the presence of a page is not a claim that its result stood.
A Plain and a Clear version of this page have not been written yet. What follows is the document itself.
Precise — the source document
This is the document. Rendered from the repository at the commit above, with nothing rewritten for the web. A gate re-renders it on every deploy and fails the build if a single byte differs.
verdict: PENDING evidence_class: pending
RED pre-registration — decide-page-records-never-acts
- Gate name (ledger
name):decide-page-records-never-acts - Registry id:
decide-page—viewer/gate_registry.json:197-201 - Phase: NOT STATED IN THE RUNNER.
viewer/verify_decide_page.cjsnames no phase or step in its header (lines 1-34). The registry's_whyfor the sibling gate places the surface in the Phase 3 plan (viewer/gate_registry.json:194). - Pre-registered: 2026-08-01
- Runner:
viewer/verify_decide_page.cjs - CI:
ci: true - Subject under test:
viewer/track/decide.html - Related:
viewer/verify_decision.cjs(the endpoint),viewer/track/decisions.cjs
What this document is, and what it is not
This is a transcription, not a judgement. The gate is registered in
viewer/gate_registry.json and has no row in evidence/gates.ndjson; the blocker is the
empty receipt_path the schema requires (viewer/lab/desk.cjs:317-322,
production/schemas/gate_row.schema.json:8).
Every condition below is quoted verbatim, with path:line locators.
Appending the ledger row is S4 — the operator's alone.
PASS condition (verbatim)
The runner states no PASS — sentence and no usage line. It enumerates the four properties it
checks, and those are its pass condition. viewer/verify_decide_page.cjs:10-34:
// THE FOUR THINGS IT CHECKS, AND WHY EACH IS HERE
//
// 1. IT DOES NOT POLL. track.html rewrites `app.innerHTML` wholesale on a 10-second `setInterval`.
// A textarea living inside that would have a half-typed answer to "the writer's key on node2"
// destroyed mid-sentence, repeatedly, with nothing recoverable. So /decide is a separate page and
// must contain NO timer. This is the check most likely to be broken later by someone adding a
// harmless-looking auto-refresh.
//
// 2. IT TALKS TO EXACTLY TWO ENDPOINTS. GET /api/decisions and POST /api/decision. It must not be
// able to go live, take a scene, mint presence, or write the gate ledger.
//
// AND THE SCAN STRIPS COMMENTS FIRST, BECAUSE THIS IS THE TRAP THIS REPOSITORY KEEPS FALLING
// INTO. A page-endpoint check written earlier in this programme reported `/api/golive: True`
// against the run-of-show page — the string was in a COMMENT BLOCK explaining what the page must
// never call. Use versus mention, inside the check written to catch it, at least the eighth
// instance in one session. This file's own header names `/api/golive` for exactly that reason, so
// a scan that did not strip comments would convict THIS FILE too.
//
// 3. NOTHING IS WRITTEN UNTIL HE PRESSES. No autosave, no draft POST, no sendBeacon on unload. He
// must be able to close the tab mid-sentence and leave the ledger untouched.
//
// 4. THE IRREVERSIBILITY AND THE CAVEAT ARE SAID BEFORE THE ACT, NOT AFTER. The ledger is
// append-only: there is no undo, and a page that reveals that in the receipt has told him too
// late. And `presence_evident` must appear on the page, because a UI that drops the caveat turns
// a record into an authentication.
Mechanical form, viewer/verify_decide_page.cjs:321:
console.log(`\nGATE: ${failed.length === 0 ? "PASS" : "FAIL"} - decide-page, ${results.length - failed.length}/${results.length} checks`);
For the ledger row's pass_condition field:
The page does not poll (no timer); it talks to exactly two endpoints, GET /api/decisions and POST /api/decision; nothing is written until he presses (no autosave, no draft POST, no sendBeacon on unload); and the irreversibility and the
presence_evidentcaveat are said BEFORE the act, not after.
FALSIFIES condition
NOT STATED IN THE RUNNER.
File read: viewer/verify_decide_page.cjs, in full. The string falsif does not occur anywhere
in it, and no step in evidence/remediation/phase9_plan.json declares one for this gate — the gate
post-dates the plan's step list.
The registry's _why for this gate does name the failure it is most worried about
(viewer/gate_registry.json:201): "the check most likely to be broken later by someone adding a
harmless-looking auto-refresh." That is a risk note, not a declared falsifier, and it is not
promoted to one here.
The limitation the runner declares about itself
viewer/gate_registry.json:201, verbatim, and it belongs in the row's notes:
WHAT IT CANNOT ESTABLISH, and says so every run: that the page is USABLE. It measures structure, not experience. Whether it is survivable at hour three is the operator's eye and the organic-operator review, and no gate stands in for either.
Protocol
- Run
node viewer/verify_decide_page.cjsfrom the repository root. - Read-only: it reads
viewer/track/decide.html,viewer/track/track.htmlandviewer/track/track_server.cjs(viewer/verify_decide_page.cjs:41-43) and boots nothing. - The irreversibility check is positional — the declaration must appear above the button. Record the measured positions, not just pass/fail, so a later reflow is visible in the receipt.
- Record the exit code and the final
GATE:line (viewer/verify_decide_page.cjs:321).
Ship-gate discipline
- Structure only. A green here is not evidence that the page works for a tired human at hour three.
That is the operator's eye and the
organic-operatorreview, and this gate must never be cited as standing in for either. - Evidence class
Con a first local run.
Non-goals
This gate does not test the endpoint (that is decision-records-only), and it does not establish
usability. It establishes four structural properties of the page.
sha256 c2cc6244f1ad228a — of the original file, so what was ingested stays checkable.