From 5f6af56c2befd4ff3169e0ff841c4e962455b135 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Mon, 27 Jul 2026 21:58:58 -0600 Subject: [PATCH] =?UTF-8?q?docs(phase-29):=20items=201+2=20diagnosed=20?= =?UTF-8?q?=E2=80=94=20func=5F8016EC0C=20is=20permuter=20fuel=20behind=20a?= =?UTF-8?q?=20masking=20PLUMBING=20verdict;=20func=5F8013BD74's=20Error=20?= =?UTF-8?q?1=20is=20the=20=C2=A759(3)=20pad-spec=20drift?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phase-ends/CURRENT_PHASE.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md index cc3bb7c73..ff0cea88a 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/CURRENT_PHASE.md @@ -6290,3 +6290,36 @@ suppressing them**, and each fix released real matches: - **Roadmap re-baseline owed**; the 39 type-1 modules are in no phase. - **The ladder-vs-bare-gate asymmetry** (ladder 0/7 vs bare gate 2/7) โ€” still unexplained. **DO NOT close P29 on ROI** โ€” burn-down floor still undetermined (+1.5pp instr today says otherwise). + +## ๐Ÿ”Ž T25 โ€” item 1 (`func_8016EC0C`) and item 2 (`func_8013BD74`): both DIAGNOSED to the exact cause, neither banked + +**Item 1 โ€” `func_8016EC0C`: ยง99 generalises, but its "PLUMBING" was hiding a DIFF (โ†’ cookbook ยง102).** +- **ยง99 worked as a general rule:** converting the def to K&R promoted `u8`โ†’`s32`, so the computed + canonical became `void func_8016EC0C(s32, s32)` โ€” **the 1,617-site SCALAR-NARROWING warning vanished + entirely**, leaving only a RETURN change (`s32`โ†’`void`) whose ยง85 precondition was already satisfied. + A caller-hazardous conform became byte-neutral *because of how the definition was written*. +- **K&R is NOT automatically a codegen change โ€” measured, not assumed.** `match_one` on the ANSI and + K&R forms returned **identical** results (closeness 8, 88 ins, same residual). The rule is + "convert, then compare both against the target", not "K&R always matches". +- **THE REAL FINDING:** the T14 census recorded this as `PLUMBING: conflicting types` โ€” which reads + as *recoverable*. It is not. With the decls clean the true verdict is **`SCHEDULE-REORDER`, + closeness 8, bucket `permuter`**. cc1 reports the declaration conflict and **never reaches the byte + comparison**, so a PLUMBING verdict is a statement about the DECLARATIONS and says nothing about the + BODY. **A census's PLUMBING pool is an upper bound on recoverable work, not a count of it.** +- **Consequence:** `func_8016EC0C` is genuine **permuter fuel** (close=8) โ€” unlike the four DIFFs + measured earlier, which are all `structural` and correctly rejected by the grinder's admission rule. + +**Item 2 โ€” `func_8013BD74`: the `Error 1` now has a NAME.** +Applied ยง100's principle first (reshape the draft, don't edit shared state): the def was rewritten to +take `void *` โ€” **matching the TU's existing prototype exactly** โ€” with a compile-time cast to +`A_8013BD74 *` inside. That **removed the declaration conflict** (no more PLUMBING) at T0 cost, no +conform, no shared-header lift. What remains is purely the carve: +``` +jtbl_rodata_pads: more rodata .align directives than pad specs (2) โ€” table-count drift vs the carve +``` +That is the **ยง59(3) documented carve wall**: the `_o0` object holds more jump tables than the span's +derived pad spec (`JTBL_PADS['ov_SC01_077_o0'] = [0, 4]`, i.e. 2 pads) accounts for. Splice-then-carve +order was correct (ยง61b); the drift is that the pad spec is derived before cc1 emits the draft's own +table. **This is genuine tooling work in `jtbl_carve`/`jtbl_rodata_pads`, NOT a compiler wall and NOT +a declaration problem** โ€” a real advance over "Error 1, no cc1 text". Worth 27,324 templ ins. +**Tree restored, `d19c9580` byte-identical, nothing committed for it.**