Date. 2026-08-14 · CR. change-requests/cr-2026-210-loomworks-commit-error-truth-v0_2 (the amendment version, ruled at the Step-1 halt; v0.1 superseded, kept).
State. Built and tested. HALTED before tag and push. Surface main local commit a1deb86 (NOT pushed; no tag), built at 8871997 — the v0.2 baseline exactly, tree clean. Engine untouched.
Eleven consumers driven against the LIVE engine with no session (a genuine 401 each), pre- and post-amendment, results captured verbatim. Pass condition held: no consumer's observed behavior changed. Every consumer either throws the 401 onward (AuthProvider /me probe, me-settings, me-credits, me-spend, me-current-engagement, converse-history), wraps it from status alone ({"kind":"unauthorized"} — me-security ×2, admin-grants), or swallows it (signout resolves void; signin-flow's begin needs no session; claim-grant's not-found path). Post-change each receives exactly what it received before plus a populated detail it demonstrably ignores. One sweep row (claim-grant) shifted value between runs — chased down and cleared: my probe's input arity changed between runs, not the behavior; re-observed pre-change with the identical input → identical row. The scratch harness ran against the live engine and is deliberately NOT committed (the suite stays hermetic).
api() amendment — a parse and nothing more. The body-parse block hoisted above the 401 branch (the 204 early-return above both); the 401 throw now carries payload as detail. Redirect condition, AUTH_FLOW_PATHS guard, and bypass semantics byte-identical — pinned by the existing api.test.ts redirect tests (unchanged, still green) plus three new amendment tests (JSON body → detail; empty body → undefined; bypass skips redirect, never the throw). The flag's name is now honest: "handle this 401 yourself" finally hands the caller the 401.commit-ceremony.ts); the component owns the expired-session redirect.CommitCeremony.tsx, in-component — no shared helper, the fence): not_converged → the server's message verbatim; the step-up family (step_up_required / commit_attestation_failed: / commit_challenge_invalid: — all three probed live at the Step-1 halt before the branch was written) → the passkey sentence, in its true cases only, no redirect; bare 401 → /signin, component-driven; other ApiError → the FallbackAffordance extraction or honest ignorance; non-ApiError → "didn't complete," unchanged.
13 tests across the two new files (the seven ruled component cases + redirect-idiom stub + three api() amendment pins), observed failing against the pre-change code (8 of 11 fail with the implementation stashed; the three that pass pre-change are the preserved-behavior pins, as they must), all green after. The guard is in: the verbatim observed 409 body through the component asserts the server's message renders and the passkey sentence does NOT. Full suite 803/803; tsc clean. The api() diff reviewed against the fence: a parse and nothing more.
On the dev surface against the real engine, E0128's banner: challenge 200, the tap failed client-side (rp-mismatch on localhost — the cancelled-tap class), and "The passkey step didn't complete. Tap to try again." rendered; the passkey-retry sentence absent; no redirect — the client branch live. The not_converged branch cannot be produced through a localhost browser (the tap cannot complete against rp dunin7.com, by WebAuthn design), so it rests on the component test carrying the observed body verbatim — and lands live at Step 5's post-deploy walk: the Operator's next real tap on E0128 will show "Seed has 1 open finding(s). All findings must be addressed before committing." instead of the passkey sentence. That observation is the acceptance-gate's item 1 and is the Operator's to see.
Kind C as expected (v0.2 §4): surface error-rendering + one transport parse; nothing reads or writes the seed. Null finding recorded.
Tag; push a1deb86; watch the run; redeploy; the post-deploy E0128 walk — where two days of "try your passkey again" becomes the server's sentence, on the Operator's own screen.
DUNIN7 — Done In Seven LLC — Miami, Florida — CR-2026-210 Checkpoint A — v0.1 — 2026-08-14 A name is not a behavior; the parse made it one. The sweep observed, the branch follows the observed, and the guard keeps it so.