Skip to content

config: drop the stale src/game/actors dead-reference baseline entry - #2076

Merged
andrewboudreau merged 1 commit into
mainfrom
tools/drop-stale-src-game-actors-baseline
Aug 31, 2026
Merged

config: drop the stale src/game/actors dead-reference baseline entry#2076
andrewboudreau merged 1 commit into
mainfrom
tools/drop-stale-src-game-actors-baseline

Conversation

@andrewboudreau

Copy link
Copy Markdown
Collaborator

A baselined reference that resolves is a pre-armed mask

check_dead_references has been printing this on every run against main:

1 baselined reference(s) now resolve -- run --update to shrink the baseline (not a failure)

The entry is:

{ "file": "notes/src-domain-buckets.md", "ref": "src/game/actors" }

It went stale when #1985 landed src/game/actors/WingFeather/, which made the path resolve. Produced by tools/check_dead_references.py --update, which removed exactly this one entry and added none — 133 → 132.

"Not a failure" is right today and wrong tomorrow. TU promotion is a mass path-deletion event — #2071 removed 23 per-symbol files in one commit — so if that directory is ever consolidated away, this entry absorbs the break silently instead of failing. That is the same class of hole as [two-green-prs-can-make-a-red-main], one step earlier in the chain.

Negative control

Measured, not argued. Removing WingFeather from both the index and disk (my first attempt moved it only on disk and nothing changed — the checker resolves via git ls-files, so an on-disk move is invisible to it), then running the checker under each baseline:

baseline result notes/src-domain-buckets.mdsrc/game/actors
entry present FAIL: 3 prose reference(s) name a path that does not exist masked
entry removed FAIL: 4 prose reference(s) name a path that does not exist names `src/game/actors`, which is not in the tree

diff of the two runs is exactly that one row. The removal is what restores the signal, and nothing else moves.

What I deliberately did not bundle

The other 3 rows in that control are pre-existing and unbaselined — they already fire. They are per-symbol paths in notes/actor-leaf-provenance.md:

src/game/actors/WingFeather/_ZN11WingFeather13InitResourcesEv.cpp
src/game/actors/WingFeather/_ZN11WingFeather8BehaviorEv.cpp
src/game/actors/WingFeather/_ZN11WingFeather6RenderEv.cpp

Doomed twice over: by promotion, and by the rename promotion requires — WingFeather is a coined name the cartridge contradicts.

_ZTV11WingFeather @ 0x021088a8 (ov002)   ROM name 11daFeather_c   DISAGREES

I measured the tree-wide scale before deciding whether to fix them here: 622 per-symbol path mentions across 90 prose files (notes/smartball-provenance.md 67, notes/bgobject-provenance.md 67, notes/actor-leaf-provenance.md 44, …). That is a real backlog and it is not a sed — each mention needs the reason written into the prose, or the next reader restores the path as a helpful clarification. It is filed separately rather than smuggled into a single-entry config change.

Gates

Base is eace12bd8 = current origin/main, and git merge-base --is-ancestor origin/main HEAD succeeds, so the merge tree is the branch tree — these are merge-tree measurements, not proxies:

check_dead_references            no new dead references, no broken links, warning GONE
pytest test_check_dead_references  29 passed
check_python_names               PASS

Both consumers of this file — .github/workflows/dead-references.yml and .github/workflows/tool-tests.yml — are covered by those two runs.

Config only. One file, four deleted lines, no src/, no tools/, no generated state.

check_dead_references has been reporting "1 baselined reference(s) now
resolve -- run --update to shrink the baseline (not a failure)" on main.
The entry is:

    { "file": "notes/src-domain-buckets.md", "ref": "src/game/actors" }

It went stale when #1985 landed src/game/actors/WingFeather/, which made
the path resolve. Produced by tools/check_dead_references.py --update,
which removed exactly this one entry and added none: 133 -> 132.

A baselined reference that resolves is not inert. It is a pre-armed mask:
if that directory is ever consolidated away -- and TU promotion is a mass
path-deletion event -- the break is absorbed silently instead of failing.

Negative control, measured rather than argued. Removing WingFeather from
both the index and disk, then running the checker under each baseline:

  entry present   FAIL: 3 prose reference(s) ...   src/game/actors MASKED
  entry removed   FAIL: 4 prose reference(s) ...   notes/src-domain-buckets.md
                                                   names `src/game/actors`,
                                                   which is not in the tree

The two runs differ in exactly that one row, so the removal is what
restores the signal.

The other 3 rows are pre-existing and out of scope here: they are
per-symbol paths under src/game/actors/WingFeather/ in
notes/actor-leaf-provenance.md, which were never baselined and already
fire. They are part of a tree-wide backlog measured at 622 per-symbol
prose path mentions across 90 files, filed separately -- not bundled into
a single-entry config change.

Config only. No src/, no tools/, no generated state.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WdCK1xgrJdiJzPCh3bAJfQ
@tangos-validator

tangos-validator Bot commented Aug 31, 2026

Copy link
Copy Markdown

✅ PR validation — Passed

Committed merge introduces no reconstruction or attribution regression.

Full merge validation

Check Result
Committed test merge yes
Byte-verified functions 10,853 / 11,347 (95.65%, +0)
Byte-verified code bytes 2,023,208 / 2,211,124 (91.50%, +0)
Claimed, not byte-verified 364 functions, 82,472 bytes (+0)
Perfect source moves 0 R100
Enrolled ranges (delinks complete) 11,059 functions, 2,053,148 bytes (92.86%, +0) -- differs from byte-verified by +206
Contributor credit 0 added, 0 changed, 0 lost
Relocation check 0 checked; no affected slots
Module fidelity 106/106 exact; 100.000000% compared bytes
Code linked from verified source 11,088 functions, 2,067,148 bytes (93.49%)
Module bytes from source 2,067,148 / 3,049,600 (67.8%); 811,492 (26.6%) are data no delink entry reaches
ROM data reproduced from source 462 symbol(s) exact, 250 partial, 9 differ

Byte-verified means the range carries complete in a delinks.txt, so the ROM build compiled it and compared it to the cartridge. The 364 claimed functions have a src/ file named after the symbol with no NONMATCHING banner, and nothing compiles them -- dsd fills their addresses with the ROM's own bytes. Both together are the 11,217 this project calls matched.

The private worker commits a test merge, builds the stock ROM profile, compares every executable module, measures matched and source-built code, checks contributor lineage, and verifies affected relocations. The mod profile is opt-in and is not part of this merge gate.

@andrewboudreau
andrewboudreau merged commit 8658e15 into main Aug 31, 2026
4 checks passed
@andrewboudreau
andrewboudreau deleted the tools/drop-stale-src-game-actors-baseline branch August 31, 2026 10:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant