diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md index 3054898..1eb4f3c 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/CURRENT_PHASE.md @@ -4,7 +4,60 @@ **Plan:** `phase-ends/Phase12_PLAN.md` — **APPROVED** by the developer 2026-09-24. **Ledger:** `phase-ends/logs/Phase12.md` (the running record; staging under `.run/p12/`). -## Progress at the cycle-1 checkpoint approach (2026-09-24 21:30) +## STATE — 2026-09-24 23:20 (supersedes the cycle-1 block below, which is kept as history) + +**679 bodies / 688 regions**, from 602 / 611 at the Phase 11 close — **+77 bodies**. Milestone 750 +needs **+71** more; stretch 800 needs +121. SHA-1 `e173426c157384ebf1b6caf8c6fea18a85a14af9` unchanged +since Phase 9. `make check` exit 0. **344 tests.** Every merge gated; the gate has been green at all 28. + +| worker | bodies (phase) | the band that produced them | +|---|---|---| +| **D** | **~19** | fresh band, then **its own un-attempted band at 11 matched / 15 attempted** | +| **C** | **~16** | the classified-negatives pool, 0 rows abandoned without a mechanism | +| **B** | **~18** | one TU, then the pool at 8/10, plus **two mode findings** (`moves`, and a maspsx patch) | +| **A** | **~10** | adjacency 3-for-3, the pool, a **harness bug fix**, and **two flag-closed rows** | + +### THE PHASE'S CENTRAL MEASURED RESULT, which changes the method + +**The band that works is "has this row been attempted with the CURRENT LEVER SET", not "which file is +it in".** Worker D's band — index rows with **no mechanism named**, attempted in phase 8/9 and never +pushed to a floor — is running at **73% (11 of 15)** against roughly **50% on prio-1**. All three +workers are now on that criterion (`negatives-{a,b,d}-unattempted.tsv`). **Worker D reached this by +reporting its own 2-for-7 pessimism rather than absorbing it**, and it took a re-rank to act on: three +workers separately proposed discriminators based on the *wording of a row's note*, and I **implemented +that rule, measured it (3/7 precision, would have demoted half the real successes), and disarmed it.** +The criterion that survived is about a row's HISTORY rather than its prose. + +### OPEN ITEMS, in priority order + +1. **The harness-transform list, and it is now the phase's largest single lever.** Three named +test cases with receipts: `0x800FFB74` (finding 85's base fold, 14 spellings across two phases), +`0x800FF6DC` + `0x80100998` + `0x800FFBBC` (**one compiler-boundary class: no vendored cc1 produces the +original's combination of a separate epilogue AND a correct delay filler** — 2.7.x merges the epilogue +and fills correctly; 2.8.x separates it and sinks the copy out of the slot). **The gp-rewrite/delay-slot +item is the most concrete:** `rewrite_gp_accesses` can REMOVE an instruction from a delay slot, and D's +framing is that a maspsx mode re-deriving the slot after the rewrite would close a class. +2. **`excluded_already_registered` lags the registry by a stable 2** since merge 8. Characterised, two +hypotheses refuted, no correctness risk (the gate proves every row simultaneously). Reconcile at close. +3. **The fragment predicate is not yet a triage rule.** `$8-$15` read before anything writes it. Two +worked instances (`0x800C3490`, `0x8001DC20`). Needs a fail-first test, not a hand edit. +4. **The twin instruments are not promoted** (C's `twin-scan.py` with the registered-parent label, +D's `twin.py`). Check the name against cookbook 186 before promoting. +5. **Per-region codegen flags** — 2 rows (`0x80101C7C`, `0x800AB504`) admitted under a four-condition +policy with **no mechanical byte predicate**, raised to the developer as a scope question. + +### The classes now closed as unreachable, each with a named mechanism + +**compiler-boundary** (3 rows, no vendored build) · **base-in-register** (3 rows, and the distinction is +*forced is not enough; the address must be NEEDED*) · **allocator tie-break** (**6 rows**, signature +identical every time: same count, same order, one register number apart, plus one `move`) · +**zero-operand folding** (2 rows, cc1 folds or shares a constant the original materialised and kept) · +**loop-invariant motion** (ADDS registers, unlike the scheduler class which reorders within a fixed +count) · rare-epilogue mutual exclusion · trapping arithmetic (charter-blocked). + +--- + +## HISTORICAL — Progress at the cycle-1 checkpoint approach (2026-09-24 21:30) **625 bodies / 634 regions**, from 602 / 611 at the Phase 11 close — **+23 bodies**. `excluded_already_registered` divergence at merge 8 is OPEN and characterised in the ledger