From c98bb519952e28d5bd5d8479acf02a3b22dbd63e Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Tue, 11 Aug 2026 12:08:43 -0600 Subject: [PATCH] =?UTF-8?q?chore(phase-30=20S47):=20record=20the=20data-bu?= =?UTF-8?q?ndled=20family=20class=20=E2=80=94=20reach-57=20banked,=2056=20?= =?UTF-8?q?siblings=20blocked?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reach-57 exemplar func_801EDC18 is banked and R22-green, but its family sweep returned 0/56. 54 of 56 failed 'parse error before buffer': the remapped sibling carries neither the draft's own Blk8 typedef nor any declaration of the per-member data symbol. Two gaps. (1) family_remap does not gather draft typedefs — the T7-S1 class, named a phase ago and still unbuilt; cdecl.strip_provided_typedefs is NOT the culprit, it correctly keeps a typedef the target lacks, so the loss is in unit extraction. (2) NEW: this family's data is PER-MEMBER — each sibling's .s carries its own rodata bytes, so a symbol remap cannot produce it; the bytes must be decoded per member and emitted as that member's definition. No existing tool does this. Bounded: 116 of 12,583 .s files are data-bundled. The md_* module TUs cannot fall back on the shared Blk8 (engine_types.h:497) because they include only common.h — tu_scope is 53 entries there versus 4,190 for an overlay. --- phase-ends/CURRENT_PHASE.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/phase-ends/CURRENT_PHASE.md b/phase-ends/CURRENT_PHASE.md index 1abdd099d..a31009f37 100644 --- a/phase-ends/CURRENT_PHASE.md +++ b/phase-ends/CURRENT_PHASE.md @@ -452,6 +452,29 @@ alias only on the demote path when the file's OWN comment says staged drafts arr burned three attempts on a 44-member class by inferring the shape instead of reading ONE failing draft, which took 90 seconds when I finally did it. +## ⚠ THE DATA-BUNDLED FAMILY CLASS — reach-57 exemplar BANKED, its 56 siblings BLOCKED (S47) +`func_801EDC18` is banked and R22-green (cookbook §160a-c). Its family sweep returned **0/56**, and +the cause is structural, not codegen: **54 of 56 failed `parse error before 'buffer'`.** +The remapped sibling draft carries NEITHER the draft's `typedef struct { char c[8]; } Blk8;` NOR any +declaration of the per-member data symbol: + + extern int func_80171D78(u32, void *); + void func_801E2860(u32 arg0) { Blk8 buffer; buffer = D_801E25EC; ... } <- both undeclared + +**Two distinct gaps, one of them NEW:** +1. **`family_remap` does not gather the draft's own typedefs** — the T7-S1 "typedef/macro gather" + class, named a phase ago and still unbuilt. (`cdecl.strip_provided_typedefs` is NOT the culprit — + it correctly KEEPS a typedef the target TU lacks. The loss is upstream, in unit extraction.) +2. **NEW: this family's data is PER-MEMBER.** The exemplar needed `const Blk8 D_801ED98C = {{...}}` + because the `.s` rodata block IS the definition (§160c). Every sibling has its OWN symbol with + its OWN bytes, so a symbol remap cannot produce it — the bytes must be decoded from each + member's `.s` and emitted as that member's definition. **No existing tool does this.** +**Scope:** 116 of 12,583 `.s` files are data-bundled (§160b), so this class is real but bounded. +**Why the md_* TUs cannot use the shared type:** they include only `common.h`; `engine_types.h` +arrives via `engine_core.h`, which they do not include (`tu_scope` = 53 entries vs 4,190 for an +overlay). `Blk8` already exists at `engine_types.h:497` but is unreachable from there. +**Do NOT retry this sweep until a tool emits per-member data definitions + carries the typedef.** + ## ▶ RESUME HERE — D (and the leftovers below) **C is DONE.** For reference, the command was: `.venv/bin/python tools/dedup_extend.py --binaries ov_SC03_107,ov_MAIN_012,ov_SC02_037`