mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-04 00:20:10 -04:00
6.8 KiB
6.8 KiB
T2 — cast and lying gate instruments, reinterpret-macro set
Status: done | expert: expert-fable | ctx-at-completion: n/a | commit: see COMMIT | coder runs: c1 opus55 done (247422bb83), c2 opus55 done (313ee50403), c3 opus55 done (7845da8f03)
Done: type_census --check-casts gate (raw by form, macro sites vs restruct ledger, lying vs TSV), kept-cast macro set in include/common.h with five make-check proofs + one R22, lever_census --strict --residue, both selftests extended, caches invalidated, check-structs still 0.
Files:
- include/common.h:62-78 — CAST_ALIAS / CAST_SIGN / CAST_WIDTH / CAST_MISALIGNED / CAST_NONSTRUCT, each
(T, p, k)→(*(T *)((p) + (k))), one cause class each; LOBU..LOWU (:55-61, already present since P37 T3) kept as class REINTERP; M2C_FIELD unchanged (raw form M) (c1) - tools/type_census.py — KEPT_MACROS registry + FORM_K :141-147; form-K sites (tu, fn, line, pos, name, cls, base/bclass/off) :374-394; registered
#definelines in include/common.h dropped from counts :612-620;check_casts_inputs()(restruct.ledger_latest, config/lying_exceptions.tsv),check_casts_verdict(),--check-casts; selftest 32 → 50 checks (c3) - tools/lever_census.py —
load_residue,strict_failures(sites, pt, gte_header, residue):1109-1148,--residue PATH:1219, main --strict printsresidue <n>, residue-unused <n>+ first 10 unused rows; selftest controls i-iv :1194-1209 (c2) - config/lying_exceptions.tsv — header only:
callee def_file kind cause task(ledgered = row matches callee + defined_in + kind) - config/lever_residue.tsv — header only:
file func kind pass instrument cause(match on file + func + kind; pass/instrument carried, R113) - docs/gen3-standards.md — §2 rule 5 (every raw cast goes or names its cause; the set, the gate, the ledger reading) + definition-of-done clause (expert)
- decomp-architect/corpus/**, docs/struct-map.md, .run/P36/census/lever_census., .run/P37/census/ — regenerated by kit-corpus and the census runs Interfaces (the exact shapes later tasks read):
type_census --check-casts→check-casts: raw P=<n> I=<n> X=<n> M=<n>; macros <name>=<n> …|none (unbacked <n>); lying=<n> (ledgered <n>); exit 1 on raw > 0, unbacked > 0, lying − ledgered > 0.- Backed macro site:
restruct.ledger_latest[("S", tu, fn)]row with verdict in {KEPT, S2, KEPT-ALL} and asites[]entryverdict == "KEPT(<class>)"for the macro's class matchingoffandbase == "<bclass>:<base>"; REINTERP macros match online. restruct does not yet write macro respells orKEPT(SIGN|MISALIGNED|NON-STRUCT|REINTERP)hints (pass_hint :563-591 has SCHED-ALIAS, ALIGNMENT, WIDTH only). - Classes: SCHED-ALIAS, SIGN, WIDTH (overlap loser), MISALIGNED, NON-STRUCT, REINTERP. Decisions:
- Legacy LOBU/LOH/HIH/LOHU/HIHU/LOW/LOWU reinstated as the sixth class REINTERP (lvalue read at another width/sign), not retired; their byte proof is restruct's macro_probe (
--selftest --real82/82 at b5e18e5f83, T1). - Registered macros'
#definelines in include/common.h are definitions, not sites: M = 19,542 (T1's 19,543 included common.h:43 itself); P unchanged at 408,974. - binding: a kept cast is spelled only by a registered macro of include/common.h and is honest only with its ledger row;
--check-castsis the campaign's gate,--checkstays the broader (non-gating on block frames) reading. - binding: reading A for levers:
lever_census --check --strict --residue config/lever_residue.tsvis the gate; residue rows are excluded from failures and counted in every total. Deviations: - Byte-proof respells were restored after BYTE-IDENTICAL (tree has 0 macro sites, unbacked 0) so the next task inherits no unledgered macro sites; proof lines in logs/T2.c1.md.
--strictonly runs inside--check(unchanged tool shape), so the gate spelling is--check --strict --residue ….- Residue cannot name a per-TU asm macro definition (mdefs_all is local to run_census): while pt > 0 strict fails with one synthetic
asm-macroentry; a later task exposes mdefs if residue must cover them. - No restruct/delever apply was run, so no recalibration was needed;
restruct --selftest --realis still red after these commits (T1 gotcha) — the next apply task recalibrates first. - commit_task auto-staged the pre-modified phase-ends/current/discussions/INDEX.md into 247422bb83 (one router line). Findings:
- Byte proofs (all BYTE-IDENTICAL, .run/logs/t2_proof_sc01.log, t2_proof_sc05.log): CAST_ALIAS src/ov_SC05_010/ov_SC05_010_jr_80180F84.c:3006 (func_801814AC
+0x34store, cookbook §458); CAST_SIGN src/ov_SC01_000/ov_SC01_000_after.c:2682 (func_801523F4); CAST_WIDTH src/ov_SC01_000/ov_SC01_000_jr_801734BC.c:2582 (func_801749C8); CAST_MISALIGNED src/ov_SC01_000/ov_SC01_000_jr_8012ACE0.c:2624 (func_801345F8*(int *)(param_1 + 6)); CAST_NONSTRUCT same file :795 (func_8012E364). R22 after the common.h edit: 218 passed 0 failed (.run/logs/t2_r22.log). - Ledger .run/P37/restruct/ledger.jsonl: 173,459 rows, rung S = 0,
KEPT(= 0 — the gate's macro half starts empty. - Live gate on this tree:
check-casts: raw P=408974 I=60666 X=13800 M=19542; macros none (unbacked 0); lying=229 (ledgered 0)rc 1;lever_census --check --strict --residue: pins 1868, asm 1411 (non-GTE), gte-levers 450, direct GTE 6717, per-TU asm macro defs 314, residue 0, residue-unused 0 — FAIL rc 1. Gotchas: - harness: a PreToolUse hook denies
sed/caton tools/*.py for the expert even when the tool is the task's deliverable; source facts go through retriever-code. - harness:
tools/run.sh --wait --max 280inside one Bash call plus the --bg launch exceeds the 285 s call budget when the census runs cold; launch and wait in separate calls. - generalizable: a macro definition line that textually matches a site regex is counted as a site by a text census; a gate must exclude the registry's own
#definelines by name, not by file. - workflow: a tools/ edit →
make kit-corpus→make tools-healthbefore the task commit (corpus copies are tracked). Research: none new (three retriever-code answers inline, no report files). Next task needs: restruct must learn to (a) respell a KEPT site with its class macro and (b) writeKEPT(<class>)with the four new hints (SIGN, MISALIGNED, NON-STRUCT, REINTERP) before any macro site can be backed; recalibrate (delever_oracle --snapshot-baseline+--calibrate …) before the first apply; denominators: P 408,974 I 60,666 X 13,800 M 19,542, lying 229/24 callees, levers 3,729. Verified:PY tools/type_census.py --selftest && PY tools/lever_census.py --selftest && PY tools/type_census.py --check-structs --quiet→ 50/50 checks OK; selftest OK — 24 sites; check-structs OK, conflicting_types=0, rc 0 (.run/logs/t2_verify_a.log);PY tools/type_census.py --check-casts→ the live line above, rc 1 as the verify requires (.run/logs/t2_verify_b.log) Full log: phase-ends/current/logs/T2.md