From e7d8bcf2d029df74f723db19c3e514341567da96 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Fri, 2 Oct 2026 03:13:14 -0600 Subject: [PATCH] T3.c6: Log head_types additive pads and t3_S61 re-draw --- phase-ends/current/logs/T3.c6.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 phase-ends/current/logs/T3.c6.md diff --git a/phase-ends/current/logs/T3.c6.md b/phase-ends/current/logs/T3.c6.md new file mode 100644 index 0000000000..e69a92db4c --- /dev/null +++ b/phase-ends/current/logs/T3.c6.md @@ -0,0 +1,29 @@ +# T3.c6 — head_types additive mode, 17 Unkstruct_80126B58 pad fields, ov re-draw t3_S61 + +## Change +- `tools/head_types.py`: `--add-pads CANDIDATES.json` (with `--header`): `add_pads()` splits only `u8 padX[n]` lines of the CURRENT region to insert `unk` fields (`sl.TYPE_OF`); every other line byte-for-byte; skips overlap / misalign / not-in-pad / type-absent with a reason. `selftest_add_pads()` added to `--selftest`. +- Candidates `.run/t3c6/candidates.json` (scratch `.run/t3c6/mkcand.py` from `.run/t3c5/nofield.json`): 22 GAP-PAD groups → 17 (off,width) fields, majority sign, tie → u: 0x78 s32, 0x7C u16, 0x82 u16, 0x84 s16 (19s/3u), 0x86 u16, 0x90 s32, 0x94 s32, 0x98 s16 (3s/2u), 0xC8 u8, 0xC9 u8, 0xDA u8, 0xE8 s32 (12s/1u), 0xEC s16, 0xEE s16, 0xFF u8, 0x108 u16 (4s/6u), 0x10A u16 (2s/2u tie). +- `include/struct_types.h` regenerated by `head_types.py --header include/struct_types.h --add-pads .run/t3c6/candidates.json` → 17 added, 0 skipped; diff removes only the 8 pad lines pad76/pad80/pad8E/padC4/padD8/padE6/padFE/pad106 (30+/8-). No field dropped. +- Header + tool committed as 45cb633d08 (that commit was made by the T3 handoff, not by this coder; contents are this coder's edits). + +## Re-draw +- Wall: the 130 NO-SITE bodies' bases are `Unkstruct_ea5ed765` (non-canonical hash name) in BOTH the live and the P39 pinned body_base_type.json → plan_S skips them `type-not-canonical` (merge_bbt only swaps in a canonical pinned type). The ledger rows drew them as `Unkstruct_80126B58`. +- Workaround (scratch, P39 pin untouched): `.run/t3c6/mkpin.py` → `.run/t3c6/bbt_pin.json` = P39 pin + the latest rung-S row's CANONICAL `bases[].type` for the 168 covered bodies (200 overrides). Cycle run with `RESTRUCT_BBT=.run/t3c6/bbt_pin.json`. +- `restruct.py --plan` does not lift `--redraw` (reports file-finished 141); `--apply` does (restruct.py:3594-3646). +- Cycle: `RESTRUCT_BBT=.run/t3c6/bbt_pin.json REDRAW="NO-SITE MEMBERS S2" LABEL_PREFIX=t3_ TASK=T3 restruct_cycle.sh 61 61 200 S "<168 TU:FN>"` (log `.run/P39/restruct/cycle_t3_c6.log`) → `141 files · 168 bodies: 529 sites → members / 0 kept / 129 skipped · final 141/141 identical · written 141 files | check-all: 218 passed, 0 failed of 218`, committed b6db95c62e. One R22, covering header + src. No field broke identity; no R40 retry needed. 0 KEPT(SIGN): no minority-sign site was kept. + +## NO-FIELD ov sites (`.run/t3c5/nofield.py`) +- before: 2455 (GAP-PAD 500 / 22 groups, IN-LEAF 1955 / 70) +- after: 1912 (GAP-PAD 0, IN-LEAF 1912 / 69) + +## Verified +- `head_types.py --selftest` → add_pads OK, OK +- `restruct.py --selftest` → 93/93 OK (struct_layout 9/9) +- `restruct.py --audit-types` → 1018 definitions, 0 violations +- `restruct.py --check-ledger` → 141789 MEMBER sites, 0 violations (was 141260) +- `type_census.py --check-casts --quiet` → unbacked 2: both CAST_NONSTRUCT in src/ov_SC02_039/ov_SC02_039_jr_8017BEBC.c:func_8017EA20 (lines 3953/3957, row t3_S28; file not touched by this task, base 800B5CB8) — pre-existing, not from this change. + +## Notes for the expert +- `tools/restruct.py` shows as modified in the working tree; not edited by this coder. +- harness: `.run/P37/restruct/apply_t3_S61.log` was appended to an earlier (uncommitted, 0-row) t3_S61 attempt from 02:23. +- generalizable: hash-named bbt types (Unkstruct_<8hex>) block a rung-S redraw; a scratch pin from the ledger rows' bases[] gets through.