From 0cb720da1cd48bfdc3c71d243946b38c5a9ac741 Mon Sep 17 00:00:00 2001 From: Christopher Williams Date: Thu, 24 Sep 2026 19:38:43 -0400 Subject: [PATCH] phase12: merge worker D's final row 0x8002D014 (685 bodies / 694 regions, +83) + record my attribution error --- phase-ends/logs/Phase12.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/phase-ends/logs/Phase12.md b/phase-ends/logs/Phase12.md index cf10d8a..32d0152 100644 --- a/phase-ends/logs/Phase12.md +++ b/phase-ends/logs/Phase12.md @@ -1776,3 +1776,33 @@ from a worker reading its own input file before trusting it, and none of them fr here **only so the working tree is clean at the stop**, and it is marked as unverified: it is not a claim, it is not in the registry, and nothing depends on it. Recording the distinction because "committed" and "verified" are different states and this file is the former. + +### Worker D's final row — and it is the file I had committed as UNVERIFIED + +**`0x8002D014` (76 B) MATCHES**, so the `src/func_8002D014.c` committed two commits ago "only so the tree +is clean, marked unverified" is now a verified claim. **FINAL: 685 bodies / 694 regions. Phase: 602 → +685 = +83.** D's lever is worth keeping: + +> **THE FRAME SIZE PINS A LOCAL AGGREGATE'S SIZE.** Written with a struct of exactly the twelve bytes the +> code touches, the row is 76 B at the right instruction count with **four differing bytes that are all +> frame arithmetic** (`addiu sp,sp,-40` / `sw ra,32(sp)` against the original's `-48` / `40(sp)`). +> A 16-byte struct still gives 40. A **24-byte** struct — twelve used plus twelve tail — gives the +> original's 48 and matches byte-exact. + +**So size a local aggregate from the FRAME, not from the fields you can see.** And D flagged the mirror of +the per-row epilogue trap on the same row: `0x8002D014` must NOT use `--fill-epilogue`, unlike the five +other rows of D's that need it. + +### MY ATTRIBUTION ERROR, found by worker A + +**In the stop messages I credited worker D's rows to A and to B.** The four rows `0x80100334`, +`0x800FBDC0`, `0x800F88F0`, `0x80042DD4` are **D's**, and `0x80102F58` is D's; I wrote them into the +messages addressed to A and B. **Worker A caught it and said so plainly** — and it is exactly the kind of +error that corrupts a handover, because it changes two workers' counts in opposite directions and the +ledger cannot detect it (the ledger tracks addresses, not authorship). + +**Recorded because the count in this file was already wrong once this session** (a commit message stating +672/681 when the truth was 679/688, corrected in its own commit). Authorship and counts are the two +things a later session trusts without re-deriving, and I have now been wrong about both. **The authority +for bodies is `config/regions.tsv` counted at the merge; the authority for authorship is each worker's +own `claims.tsv` as the checksum in their own directory.**