CORRECTIONS — the only file in the canon that changes#
Append-only. One row per correction. A row names the verse, states what was found with
its number and evidence class, and names the verse's pre-written replacement that now
applies. If the book pre-wrote no replacement, the row says NO REPLACEMENT PRE-WRITTEN
and the next row is the new verse — the book's own standard failed and the failure is on
the page, never in a silent edit (CHARTER.md §0, §7; MISTAKES.md P-3).
| id | date | book.verse | what was found | number · evidence | replacement now in force | supersedes |
|---|---|---|---|---|---|---|
| C1 | 2026-09-10 | inspector.py:459 / scripts/render_struck.py / tests/loop/test_no_struck_constant_ships.py (enforcement machinery, not a canon book verse) |
The strike-enforcement machinery was severed at commit c71527a — both scripts/render_struck.py and inspector.py died on a missing tests/loop/test_no_struck_constant_ships.py, so no retraction in the repo was enforced by anything executable. |
RUN python scripts/render_struck.py and RUN python inspector.py, this session, at c71527a and at HEAD 527ffca. |
The test file is restored from 99777ab; python scripts/render_struck.py now runs clean (12 entries, RUN at 527ffca). python inspector.py still raises FileNotFoundError on STATE.md (RUN, this session) — NO REPLACEMENT PRE-WRITTEN for that half. |
— |
| C2 | 2026-09-10 | ceqjepa/beds/gridworld.py:119-127 (bed docstring, not a canon book verse) |
"kappa of the bed exceeds 1/TELEPORT = 80, therefore the architecture cannot represent it" — WITHDRAWN as a category error. | READ ceqjepa/beds/gridworld.py:126-127: an operator built by operator.build_operator at kappa_model = 1.000000 fits a target field whose true chain reads kappa = 300.8 to 1.110e-16 (the float64 floor); bed median kappa 109.3 on a bare 9x9 (same file, demo()'s own output). |
q is harmonic, so a model only has to reproduce the committor, not the chain; the bed's kappa is not a representation constraint (same citation). | — |
| C3 | 2026-09-10 | ceqjepa/beds/gridworld.py:120-124 (bed docstring, not a canon book verse) |
The constant 164.25, quoted as the measured kappa of a 14x14 grid — WITHDRAWN AS FABRICATED. | READ ceqjepa/beds/gridworld.py:122-123: a hardcoded string literal written into a print() and into the docstring; nothing in the file ever computed it. |
NO REPLACEMENT PRE-WRITTEN. Already struck from ceqjepa/beds/gridworld.py; the repair is deletion, not substitution. |
— |
| C4 | 2026-09-10 | ceqjepa/beds/gridworld.py do(a) intervention (bed module, not a canon book verse) |
"every cell's counterfactual is a rank-1 edit sharing one solve," asserted for do(BLOCK a cell) — WITHDRAWN. |
Reported this session: blocking is rank ≤ 5 (the cell's row plus its ≤ 4 neighbours' rescaled rows) and the grid operator is not lower-triangular; do(CLAMP one cell's outgoing row) measures sigma_2/sigma_1 = 2.837e-15, numerical rank exactly 1 on all 12 instances tested. NO PRODUCER SCRIPT FOR THIS NUMBER WAS FOUND IN THE TREE (ceqjepa/, docs/, results/, *.ipynb searched) — carried here from this session's report, not independently reproduced. |
The rank-1-shared-solve claim holds for do(CLAMP one cell's outgoing row), not for do(BLOCK a cell); do(BLOCK) is rank ≤ 5. |
— |
| C5 | 2026-09-11 | STRUCK.md row 0.743864 / its registry entry in tests/loop/test_no_struck_constant_ships.py (enforcement machinery, not a canon book verse) |
The absence proof published for the nine names the U1/N3 battery calls was the bare git log -S across all refs, recorded as returning zero commits. It returns hits: the audit's own recordings, and def harmonic_measure( in scale/kirchhoff.py since 22036de, an unrelated function of that name. |
RUN 2026-09-11: git log -S'absorbing_boundary_kernel' --all --oneline returns 9 commits; git log -S'def harmonic_measure(' --all --oneline -- '*.py' ':!tests/' returns 3 (scale/kirchhoff.py and two Kaggle snapshot copies). |
The file-scoped search: git log -S"def <name>(" --all --oneline -- scale/negation_scope.py returns 0 for all nine names against 1 for the control def nrmse(; for the lead name, -- "*.py" ":!tests/" returns 0 against 3 for the control def path_product(. The verdict NO PRODUCER HAS EVER EXISTED stands. |
— |
| C6 | 2026-09-20 | 08_ARCHITECTURE.md:66 (08.2 Statement, the 4 B/element branch) |
"At \(g\equiv0\) the operator is built and stored real — the branch if g == 0: return num.real / zb" asserts a branch that does not exist in the module it cites; WITHDRAWN as a shipped fact and restated as a target. |
READ ceq/arm_smprime.py::operator (this session): return torch.complex(num.real / zb, num.imag / zb) unconditionally, no if g == 0 anywhere in the function. READ ceq/hf/modeling_ceq.py:487 — the shipped call site takes .real on the complex tensor smprime_readout(...) returns, AFTER the complex operator is built — a discard, not a branch. RUN this session (CPU, n=32,d=8,g=0.0,beta=1.0,qk=1.0): operator(...) dtype is torch.complex128 at 16 B/element from float64 input, torch.complex64 at 8 B/element from float32 input, against the verse's claimed 4. Also RUN: num.imag is exactly 0 on every entry at g=0 (bool((num.imag == 0).all()) is True — blend forces theta*g=0 and gate's torch.polar(1,0) is exactly real, unlike polar(1,pi)'s 1.2246e-16), and torch.complex(num.real/zb, num.imag/zb) is torch.equal to num.real/zb on the real part and to num.imag/zb on the imaginary part. |
The verse's own line 620 (08.21 Hypotheses) already states the true reading — operator is complex at every switch setting, the real branch is NOT MEASURED, and the complex residency rule (\(n\le15\) at \(s=4096\)) is the conservative one; line 66's branch sentence is struck and line 620 governs. Line 878's Repair entry ("All three edits made") is superseded in its first clause — the branch it claims was added to 08.2's Statement is not in ceq/arm_smprime.py::operator. The branch is measured a bitwise no-op for correctness (both parts torch.equal to the unconditional real-division read above); its only payoff is byte width, a separate optimization with its own measurement (one forward on the real path at \(g=0\)), not a canon repair — NO REPLACEMENT PRE-WRITTEN for adding it. |
B-9's Repair (line 878), first clause only |
| C7 | 2026-09-20 | 08_ARCHITECTURE.md:329 (08.13 Statement, the freeze) |
"\(g_h\equiv0\) frozen, non-learnable, in the shipped module — not '\(0\) at load'" is false on all three clauses in the module it names; WITHDRAWN. | READ ceq/hf/modeling_ceq.py:446 — self.g = nn.Parameter(torch.tensor(float(config.smp_g))), a plain learnable Parameter. READ ceq/hf/configuration_ceq.py:71 — SMPRIME_CORNER = (1.0, 1.0, 1.0), so config.smp_g defaults to 1.0, not 0. RUN grep -n "requires_grad" ceq/hf/modeling_ceq.py ceq/arm_smprime.py this session: 4 hits, all beta_column's reporting fields (modeling_ceq.py:711,712,728,843) — no requires_grad=False on g in either file. READ ceq/arm_smprime.py:632 — self.g = nn.Parameter(torch.tensor(1.0)), the arm's own corner, same value. |
NO REPLACEMENT PRE-WRITTEN. 08.2's own text states the blast radius — "If \(g\) is ever unfrozen, none of those hypotheses hold" — naming 08.3, 08.4, 08.7, 08.11 and 08.12, plus 08.2's own row-stochasticity sentence; this row states that their Hypotheses are unmet in the shipped module and does not re-derive them. The prerequisite for any restatement is the row-sum guard 08.2 already marks NOT MEASURED — needs the complex row-sum instrument (book 03/04). Freezing g is not the repair: requires_grad_(False) on self.g would contradict #5a's settable-switch requirement (ceq/arm_smprime.py:608 docstring: "which is what #5a requires to be settable, and they are nn.Parameters so the harness trains them"; ceq/hf/modeling_ceq.py:442-443 comment: "#5a requires the three switches to be settable and the arm makes them trainable") and SMPRIME_CORNER's own corner value. |
— |
| C8 | 2026-09-20 | docs/assets/resolvent.js:160 / docs/index.md:494,515 / site/assets/resolvent.js:160 (site prose and its interactive widget, not a canon book verse) |
"bf16 and float32 share the overflow wall at 88.72283935546875" was published as a single shared constant for both dtypes — WRONG on both the shared-wall claim and the constant itself, and repeated into house-events.jsonl, MISTAKES.md, and tests/arm_smprime/test_bf16_ceiling.py through the day. |
RUN this session, torch 2.14.0+cpu: float(torch.finfo(torch.float32).max) = 3.4028234663852886e+38, log = 88.72283905206835; float(torch.finfo(torch.bfloat16).max) = 3.3895313892515355e+38, log = 88.71892521235186 — two different walls, disagreeing across the whole interval [88.71892521235186, 88.72283905206835], and neither equal to the published 88.72283935546875, which also matches no run in the tree (house-events.jsonl:1791 carries a third value, 88.72283554077147, itself wrong). Demonstrated: torch.exp(torch.tensor(88.7215, dtype=torch.float32)) = 3.3982583016316987e+38 (finite); casting that same result .to(torch.bfloat16) reads inf. |
bf16 and float32 share an 8-bit exponent, which is why the range intuition was right that they would be close — but bf16 carries fewer mantissa bits, so its largest finite value rounds down smaller than float32's, and it overflows first, at 88.71892521235186 against float32's 88.72283905206835. The surviving claim — bf16 does not widen the overflow ceiling — holds and is stronger than the retracted one: it does not merely fail to widen the ceiling, it narrows it. |
— |
| C9 | 2026-09-20 | site caption, "reproduced independently on a second draw, ratio 22.08x at D=64" (site prose, not a canon book verse) | A caption carried a second-draw reproduction figure, ratio 22.08x at D=64, with supporting arrays 2.1221/3.9995 through 2.8945/63.9008 — WITHDRAWN AS UNPRODUCED. |
SEARCHED this session: git grep and a tree-wide search for 22.08, 2.1221, 63.9008 return no hit in any tracked .py, .md, .js, .html, or notebook — the figure's only home was a throwaway command, never a file the repo runs. |
NO REPLACEMENT PRE-WRITTEN. The caption is struck, not re-derived; under the same rule as C3, a number with no producer in the tree is deleted, not replaced with another unproduced one. | — |