docs(phase-31): S62 log — clean fleet sweep found 6 hidden failures (5 healed, md_SC07_003 re-measured); R60 candidate (carve-state files); SETUP: interleave_check --fix

This commit is contained in:
Drew T
2026-08-26 14:35:06 -06:00
parent 05f13d6c9f
commit d718cecf9d
2 changed files with 15 additions and 1 deletions
+1 -1
View File
@@ -734,7 +734,7 @@ Every script under `tools/` (plus the two report make-targets), grouped by purpo
| | `tools/rtu_match.py` | **(Phase 25 wave-3, cookbook §42b)** REAL-TU-faithful per-fn match check that fixes match_one's blind spot: splices a candidate into a copy of the split `.c`, neutralizes `INCLUDE_ASM` (`-DINCLUDE_ASM(a,b)=` → no `asm/` needed) with `-Isrc/<source>` for the relative `../shared/` include, compiles the WHOLE TU (`cc1→maspsx→as`), masked-diffs the fn (shared `masked_diff`). Captures the in-TU decl/global-type/memcpy-builtin drift that isolation (`match_one`) misses, so a MATCH holds at the whole-binary gate; per-fn temp dir → **parallel-safe, no shared overlay build** (enables a real-TU-faithful crack fan-out). Supports `//@EDIT old||new` file-scope pre-edits (the §42b read-global s16→u16 flip). STILL finish on `make build` SHA (G3/P9). |
| | `tools/diff_autopsy.sh` | **(Phase 31 S62 T1, cookbook §301)** The gate said DIFF, this says WHERE: splices the raw draft into the real TU exactly as the gate does, builds, `cmp`s against the byte-good binary, decodes the diverging words, restores tree + build. `tools/diff_autopsy.sh <binary> <fn> <tu.c> <draft.c>`. |
| | `tools/stub_invariant_audit.py` | **(Phase 31 S62 T1, cookbook §301)** Regression test for the masked comparer: INCLUDE_ASM pastes the original bytes, so `diff_object_s(object, .s)` must be 0 for every stub; quotes the denominator (stubs with internal-`j` relocs). Run after ANY change to `masked_diff.py`. |
| | `tools/interleave_check.py` | **(Phase 31 S62 T2, cookbook §302)** Order ⇔ yaml consistency for an overlay's jtbl carve: the `_JTBL_INTERLEAVE` order must equal the yaml subseg sequence position by position. Run after ANY restore of overlays.mk or a splat yaml (two of the five S61 reds were exactly this). |
| | `tools/interleave_check.py` | **(Phase 31 S62 T2, cookbook §302)** Order ⇔ yaml consistency for an overlay's jtbl carve: the `_JTBL_INTERLEAVE` order must equal the yaml subseg sequence position by position. `--fix` regenerates the order from the yaml (never hand-edit it). Run after ANY restore of overlays.mk or a splat yaml (two of the five S61 reds and four of the six clean-sweep failures were exactly this). |
| | `tools/pads_audit.py` | **(Phase 31 S62 T2, cookbook §302)** DERIVES each object's `JTBL_PADS` from the bytes: compiles the TU to count its tables, walks the retail words inside the yaml carve with those sizes (pad 4 ⇔ one zero word), reports SPEC-DRIFT / CARVE-DRIFT / ok with the derived spec. Reproduced 15/15 correct specs as its negative control; replaced S61's blind value searches. |
| | `tools/blocker_probe.py` | **(Phase 29 SESSION-16, cookbook §65)** WHY a byte-correct draft fails the whole-binary gate. Read-only; **two oracles** (R34): STATIC (`cdecl.parse` + `cdecl.compatible` — cc1's own acceptance question, never text equality) beside the REAL cc1 (via `rtu_match`), leading with the DISAGREEMENT table. Classes `self_decl_hdr`/`self_decl_tu`/`callee_decl`/`data_decl`/`local_type`, each mapped to a blast-radius tier (T0 draft-only / T1 binary-local / T2 fleet-shared). Blockers STACK, so a function's tier is the MAX over them. 36 drafts in ~9 s. Replaced+deleted `.run/diag_plumbing.py`. |
| | `tools/symcheck.py` | **(Phase 29 SESSION-18, cookbook §67a)** The pre-gate SYMBOL-SET guard: diffs the symbols a draft's object references (reloc records) against the target `.s`'s `%hi`/`%lo`/`jal` set. Catches the class **every masked oracle is structurally blind to** — `match_one`/`masked_diff` compare relocation-MASKED words (object-vs-`.s` mode is symbol-agnostic by construction) and `rtu_match` **compiles without linking**, so a draft that invents an extern no symbol table defines reads MATCH in both and can never bank (the SESSION-17 `func_801463A0` `_s`-alias trap). Negative-control-proven: on a draft with one renamed data extern, `match_one` reports the SAME 14 mismatched as the correct draft while `symcheck` exits 1 naming both the MISSING and the INVENTED symbol. `--c` (compiles via `match_one`, so the triple can never drift) or `--obj`. A cheap necessary condition, NOT a match oracle — still finish on the byte-gate (G3/P9). |
+14
View File
@@ -2361,3 +2361,17 @@ re-enter their natural classes.** Three drift classes, all from blanket restores
order ⇔ yaml (SC03_015, SC02_005), pads ⇔ compiled tables (SC03_024 missing spec, SC06_022 ×2,
SC04_018), and a TU that never compiled (SC04_018). `.run/t1/interleave_check.py` +
`.run/t1/pads_audit.py` (to be promoted) diagnose the first two offline.
**T2 milestone proof — the clean fleet sweep (R22/R58) said 207/213, not 213/213.** `make clean →
extract-all → check-all` at 14:28 (the first clean sweep since 09:20) failed SIX binaries that no
incremental gate had flagged: ov_SC03_002, ov_SC01_077, ov_SC04_019, ov_SC01_084 (order ⇔ yaml
DRIFT — whole-island shifts of 240k–650k bytes), ov_SC05_010 (pads `0,0` for one table — the 09:20
maintenance repair to `0` was blanket-reverted by the 10:21 ds1 wave commit, the R59 class exactly),
and md_SC07_003 (`[EXTRACT FAIL]` under the parallel extract-all, yet `make extract` succeeds
serially — a suspected race, re-measured by the second sweep). `interleave_check --fix` (order
regenerated from the yaml) + a pads_audit-derived spec healed all five overlays byte-identically
(commit:3095). Second clean sweep launched for the definitive GREEN count.
Rule candidate for the PhaseEnd (R60): config/overlays.mk and the splat yamls are CARVE STATE, not
plain config — a gate/lane commit may only carry its own binary's lines, and any blanket
restore/commit of either file is followed by `interleave_check` + `pads_audit` on every binary it
touched; the fleet's last clean sweep time is quoted with every "GREEN" claim (R58 sharpened).