mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-05 00:47:54 -04:00
router: T10 done
This commit is contained in:
@@ -82,12 +82,12 @@ R3.38-001 (remaining work after P37; Gen3 constraints), R3.38-002 (type_census /
|
||||
- T4 | done | expert-opus55 | title: rung S sweep, md_*, main and shared bodies (forms P and X) | coder: opus55 | effort: medium | files: src/md_*/**/*.c, src/main/**/*.c, src/shared/**, include/struct_types.h, src/shared/engine_types.h | done-when: as T3 for md_*, main and shared bodies; main gated only by tools/gate_main.py; shared-body edits followed by R22; P and X raw = 0 fleet-wide except sites ledgered with a cause that T5 owns (non-struct base) | verify: PY tools/type_census.py --check-casts --quiet; make clean && make extract-all JOBS=16 && make check-all JOBS=16 | reads: T1, T2, T3 | deps: T3 | est-ctx: 160k | review: no | wait-for: —
|
||||
Shared bodies (C0502 §453 include-at-site share) re-fan every includer: batch them, one R22 per batch.
|
||||
Closed done by the 2026-10-02 replan: swept work stands; the fleet-wide P/X clause is superseded by the reading-A milestone (residue covered per site, T10).
|
||||
- T10 | queued | expert-opus55 | title: residue coverage gate (--check-casts --residue) and 3.40 sizing | coder: opus55 | effort: medium | files: tools/type_census.py, tools/restruct.py, .run/P37/restruct/ledger.jsonl, docs/ops/, HOW_WE_WORK.md | done-when: `type_census --check-casts --residue` exists with the Interfaces line; a raw P/I/X/M site counts covered only when its body's latest ledger row (via restruct.ledger_latest) has a matching site entry `RESIDUAL(<cause>)` with a non-empty cause; selftest controls per form: one covered site passes, one uncovered site (no row; row present but site absent; entry without cause) fails, plus a KEPT macro site still counted under macros, not residue; restruct --residue can write ledger-only I/M rows with causes (selftest control) and `--check-residue` matches per site, not per body (selftest control: a MEMBERS body with an unlisted raw site reports uncovered); any P/X gap the per-site match exposes on the T4 tree is closed by a ledger-only `--residue` rerun (no source edit); on the T4 tree the gate reads P/X uncovered 0 and fails only on I/M uncovered and lying, counts in the summary; `residue_census.{json,txt}` written and its by-cause / top-50-type tables quoted in the summary as 3.40's sizing; `--help` and docs/ops note updated, HOW_WE_WORK tools row updated | verify: PY tools/type_census.py --selftest && PY tools/restruct.py --selftest && PY tools/restruct.py --rung S --check-residue --only "ov_*" && PY tools/restruct.py --rung S --check-residue --only "md_*" && PY tools/restruct.py --rung S --check-residue --only main && PY tools/restruct.py --rung S --check-residue --only "src/shared/*" && (PY tools/type_census.py --check-casts --residue; test $? -eq 1) | reads: T2, T3, T4 | deps: T4 | est-ctx: 110k | review: no | wait-for: —
|
||||
- T10 | done | expert-opus55 | title: residue coverage gate (--check-casts --residue) and 3.40 sizing | coder: opus55 | effort: medium | files: tools/type_census.py, tools/restruct.py, .run/P37/restruct/ledger.jsonl, docs/ops/, HOW_WE_WORK.md | done-when: `type_census --check-casts --residue` exists with the Interfaces line; a raw P/I/X/M site counts covered only when its body's latest ledger row (via restruct.ledger_latest) has a matching site entry `RESIDUAL(<cause>)` with a non-empty cause; selftest controls per form: one covered site passes, one uncovered site (no row; row present but site absent; entry without cause) fails, plus a KEPT macro site still counted under macros, not residue; restruct --residue can write ledger-only I/M rows with causes (selftest control) and `--check-residue` matches per site, not per body (selftest control: a MEMBERS body with an unlisted raw site reports uncovered); any P/X gap the per-site match exposes on the T4 tree is closed by a ledger-only `--residue` rerun (no source edit); on the T4 tree the gate reads P/X uncovered 0 and fails only on I/M uncovered and lying, counts in the summary; `residue_census.{json,txt}` written and its by-cause / top-50-type tables quoted in the summary as 3.40's sizing; `--help` and docs/ops note updated, HOW_WE_WORK tools row updated | verify: PY tools/type_census.py --selftest && PY tools/restruct.py --selftest && PY tools/restruct.py --rung S --check-residue --only "ov_*" && PY tools/restruct.py --rung S --check-residue --only "md_*" && PY tools/restruct.py --rung S --check-residue --only main && PY tools/restruct.py --rung S --check-residue --only "src/shared/*" && (PY tools/type_census.py --check-casts --residue; test $? -eq 1) | reads: T2, T3, T4 | deps: T4 | est-ctx: 110k | review: no | wait-for: —
|
||||
No source or header edit: tool code and ledger-only rows. Key sites by (binary, address, body) (R99); read verdicts only through `ledger_latest` (R100), never a second filter. Ledger writes go through restruct's lock (inflight/fcntl); commit the ledger before and after any `--residue` rerun. Keep `--check-casts` without `--residue` byte-for-byte as T2 left it (T2 selftest stays green). The top-50-type table is what the 3.40 planner sizes the canonical-types campaign from: report sites and bodies per type, and how many of the 18,526 map types cover 50/80/95% of TNC sites.
|
||||
- T5 | queued | expert-opus55 | title: globals and absolute addresses to declared symbols (forms I and M, residual non-struct bases) | coder: opus55 | effort: medium | files: src/**/*.c, src/shared/engine_types.h, include/common.h, config/symbols.*.txt | done-when: form I (`*(T *)D_x`, `&D_x` reinterpret, absolute `0x80…`) and form M (`M2C_FIELD`) at 0 uncovered: each site is a typed extern / declared symbol (recipes R1 pointer global as struct member, R2 `extern T X[]`, R3 walked pointer), a member access, a T2 macro backed by its row, or (no recipe draws it) a ledger-only RESIDUAL entry with a specific cause in T10's I/M row shape; absolute addresses become symbols named in the binary's symbol file (unnamed `D_<addr>` form, no invented names, G5); every touched binary make check / gate_main green and R22 green | verify: PY tools/type_census.py --check-casts --residue --quiet; make clean && make extract-all JOBS=16 && make check-all JOBS=16 | reads: T1, T2, T3, T4, T10 | deps: T10 | est-ctx: 150k | review: no | wait-for: —
|
||||
Verify reads I/M uncovered from `--check-casts --residue` (still exit 1 on lying until T6). Ledger RESIDUAL only after the recipe ladder refused the site; cause names the recipe that failed.
|
||||
`restruct --try TU FN --base global:D_x --recipes` per class before fanning out; a global's declared type change is a header/def edit seen by every user — batch. Symbol-file edits follow the symbol-file path (R15), never generated asm.
|
||||
- T6 | queued | expert-opus55 | title: lying declarations to 0 outside the ledger | coder: opus55 | effort: medium | files: src/**/*.c, src/**/*.h, config/lying_exceptions.tsv | done-when: types_floor_lying 0 outside config/lying_exceptions.tsv; each of the 24 callees either drawn by restruct --rung D (--callee/--signature/--all-defs, def + all callers as one unit, C0508) and R22-green, or ledgered with kind and cause (e.g. func_80146C3C zero-arg `$a0` callers); --check-structs still 0 | verify: PY tools/type_census.py --check-casts --quiet; PY tools/type_census.py --check-structs --quiet | reads: T1, T2 | deps: T2 | est-ctx: 110k | review: no | wait-for: T5
|
||||
- T6 | next | expert-opus55 | title: lying declarations to 0 outside the ledger | coder: opus55 | effort: medium | files: src/**/*.c, src/**/*.h, config/lying_exceptions.tsv | done-when: types_floor_lying 0 outside config/lying_exceptions.tsv; each of the 24 callees either drawn by restruct --rung D (--callee/--signature/--all-defs, def + all callers as one unit, C0508) and R22-green, or ledgered with kind and cause (e.g. func_80146C3C zero-arg `$a0` callers); --check-structs still 0 | verify: PY tools/type_census.py --check-casts --quiet; PY tools/type_census.py --check-structs --quiet | reads: T1, T2 | deps: T2 | est-ctx: 110k | review: no | wait-for: T5
|
||||
Runs after T5 so declarations are drawn on the final symbol types (wait-for keeps the tree single-writer; no file overlap with T3-T5 otherwise). Shared-header prototypes conform in every includer at once.
|
||||
- T7 | queued | expert-opus55 | title: GTE to one spelling | coder: opus55 | effort: medium | files: include/gte_inline.h, src/**/*.c, tools/gte_consolidate.py | done-when: 0 direct GTE statements in bodies and 0 per-TU asm macro definitions (lever_census --strict counts); every `_m` variant either replaced by its canonical macro (byte-proven IDENTICAL) or kept as a header-level variant in include/gte_inline.h with a `// !FAKE:` marker naming pass and instrument (R113), one definition per variant; call vs inline left per site (§195-J); gte_inline.h regenerated by gte_consolidate --header, not hand-edited; R22 green | verify: PY tools/gte_consolidate.py --selftest && PY tools/lever_census.py --check && make clean && make extract-all JOBS=16 && make check-all JOBS=16 | reads: T1, T2 | deps: T6 | est-ctx: 130k | review: no | wait-for: —
|
||||
If gte_consolidate cannot express a header-level variant, extend it (decomp tool, in scope). gte-lever sites after this task are marked levers; under reading A they enter T8's residue ledger, under B T8 removes them.
|
||||
@@ -113,3 +113,5 @@ R3.38-001 (remaining work after P37; Gen3 constraints), R3.38-002 (type_census /
|
||||
- 2026-10-01 router: T1 next -> done
|
||||
- 2026-10-01 router: T2 next -> done
|
||||
- 2026-10-02 router: T3 next -> done
|
||||
- 2026-10-02 router: T10 queued -> next
|
||||
- 2026-10-02 router: T10 next -> done
|
||||
|
||||
Reference in New Issue
Block a user