router: T5 done

This commit is contained in:
Drew T
2026-10-02 15:07:08 -06:00
parent 878f0f9e67
commit 04701d7cdd
+2 -1
View File
@@ -84,7 +84,7 @@ R3.38-001 (remaining work after P37; Gen3 constraints), R3.38-002 (type_census /
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 | 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 | next | 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: —
- T5 | done | 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.
- T11 | queued | expert-opus55 | coder: opus55 | effort: medium | title: progress snapshot and chart catch-up | files: docs/readability-progress.tsv,docs/story-timeline.md,docs/story-timeline.svg,README.md,docs/progress.json | done-when: docs/readability-progress.tsv has a P39 row at this commit; timeline.py --check fresh; README Types reads the live check-casts numbers and the uncovered split | verify: PY tools/readability_progress.py --check && PY tools/timeline.py --check | reads: — | deps: — | est-ctx: — | review: no | wait-for: —
@@ -119,3 +119,4 @@ R3.38-001 (remaining work after P37; Gen3 constraints), R3.38-002 (type_census /
- 2026-10-02 router: T5 queued -> next
- 2026-10-02 developer: added T11 — progress snapshot and chart catch-up
- 2026-10-02 developer: D1 2026-10-02: every census-moving task closes with readability_progress --snapshot, timeline.py, progress.py --readme in its commit and a 'progress:' line in its summary Done
- 2026-10-02 router: T5 next -> done