Why this issue exists
PR #2710 cleans up ov063's daTrs_c (Boo) without promoting the TU. Source
review (BOO-2710-01) will not accept the retained codegen constraints on
inline "same wall as" notes alone: under
notes/agents/SOURCE-REVIEW-CUTOVER.md a compiler_constraint disposition
needs a commit-pinned experiment artifact, and a deferred one needs a named
issue, a next owner and completion: partial. This is that issue.
1. Retained codegen constraint: the FLAGS16 / FLAGS16T launders
src/game/actors/daTrs_c/_ZN7daTrs_c13InitResourcesEv.cpp:62-63 reaches the
0x5d4 flag word through a long long round trip, in two spellings:
#define FLAGS16 (*(unsigned short *)((long long)(c + 0x5d4)))
#define FLAGS16T (*(unsigned short *)((long long)((char *)((long long)c) + 0x5d4)))
Every other field in the file uses the plain U16(o) form. These two do not,
and the difference is load-bearing: review measured that replacing both with the
direct *(unsigned short *)(c + 0x5d4) spelling changes InitResources from
2464 to 2456 bytes and changes its relocations under 2004/b56.
What is owed
That measurement is currently only a sentence in a PR comment. It needs the
compiler_constraint evidence fields -- tested_commit, compiler,
attempted_change, command, result, log, artifact_commit,
artifact_path -- with the experiment source committed and retained in
ancestry.
What has NOT been established
FLAGS16 and FLAGS16T were not independently bisected. The measurement
replaced both at once, so it does not show that each is separately necessary,
or that the T variant's extra (char *) hop buys anything the plain variant
does not. Three cells were never run:
FLAGS16 |
FLAGS16T |
result |
| laundered |
laundered |
2464, retained (the only tested cell) |
| plain |
laundered |
not measured |
| laundered |
plain |
not measured |
| plain |
plain |
2456 + relocation change |
A launder that is only necessary because a sibling launder is present is a known
shape in this tree, and it is worth knowing which of the two is actually paying
before either is written down as a permanent constraint.
2. Deferred: helper and shared-interface ownership
daTrs_c is still eleven shard files under src/game/actors/daTrs_c/, not a
promoted TU:
_ZN7daTrs_c13InitResourcesEv.cpp _ZN7daTrs_c16OnPendingDestroyEv.cpp
_ZN7daTrs_c13OnYoshiTryEatEv.cpp _ZN7daTrs_c6RenderEv.cpp
_ZN7daTrs_c16CleanupResourcesEv.cpp _ZN7daTrs_c8BehaviorEv.cpp
_ZN7daTrs_c16OnAimedAtWithEggEv.cpp _ZN7daTrs_cD0Ev.cpp
d_a_trs_boss_teresa.cpp _ZN7daTrs_cD1Ev.cpp
d_a_trs_teresa.cpp
Consequences that #2710 does not attempt and should not be held for:
- Header helper ownership is unsettled while the class spans eleven files.
- Factory / vtable glue stays explicit for the same reason the sibling
daPiano_c cleanup does: an unpromoted class owns no
config/tu_manifest.d/ov063/daTrs_c.json, and that file is the only place a
deadstrip-duplicate license can live. ov063 does have a manifest directory --
it carries daObjTh_Fall_Block_c.json -- so this is a per-class packaging
gap, not an overlay-wide one.
Completion boundary
- In scope: bisect the two launders and record whichever survive as
compiler_constraint with full pinned-artifact evidence; promote daTrs_c
(ov063) to a single TU with a manifest carrying the duplicate-emission
license; settle header helper ownership and the factory/vtable glue with
fresh byte proof per change.
- Out of scope: the
Fix12<int>-by-value wall (6az) shared with several
other actors.
- Acceptance: full-ROM build (
module fidelity: 106/106 exact,
mismatching: 0, ROM-build analysis: PASS), module-aware relocation checks
for changed functions and consumers, and terminal private validation green on
the actual PR head/base.
Next owner
Unassigned and adoptable. #2710 carries the cleanup only; it does not attempt
any of the above.
Related: #2413 (daBmb_c -- its Vector3D1 manifest row is the shape of the
license fix), #2410, #2412, #2414.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Y4FxdKHG3a6hQRYRAbx29c
Why this issue exists
PR #2710 cleans up ov063's
daTrs_c(Boo) without promoting the TU. Sourcereview (BOO-2710-01) will not accept the retained codegen constraints on
inline "same wall as" notes alone: under
notes/agents/SOURCE-REVIEW-CUTOVER.mdacompiler_constraintdispositionneeds a commit-pinned experiment artifact, and a
deferredone needs a namedissue, a next owner and
completion: partial. This is that issue.1. Retained codegen constraint: the
FLAGS16/FLAGS16Tlaunderssrc/game/actors/daTrs_c/_ZN7daTrs_c13InitResourcesEv.cpp:62-63reaches the0x5d4 flag word through a
long longround trip, in two spellings:Every other field in the file uses the plain
U16(o)form. These two do not,and the difference is load-bearing: review measured that replacing both with the
direct
*(unsigned short *)(c + 0x5d4)spelling changesInitResourcesfrom2464 to 2456 bytes and changes its relocations under
2004/b56.What is owed
That measurement is currently only a sentence in a PR comment. It needs the
compiler_constraintevidence fields --tested_commit,compiler,attempted_change,command,result,log,artifact_commit,artifact_path-- with the experiment source committed and retained inancestry.
What has NOT been established
FLAGS16andFLAGS16Twere not independently bisected. The measurementreplaced both at once, so it does not show that each is separately necessary,
or that the
Tvariant's extra(char *)hop buys anything the plain variantdoes not. Three cells were never run:
FLAGS16FLAGS16TA launder that is only necessary because a sibling launder is present is a known
shape in this tree, and it is worth knowing which of the two is actually paying
before either is written down as a permanent constraint.
2. Deferred: helper and shared-interface ownership
daTrs_cis still eleven shard files undersrc/game/actors/daTrs_c/, not apromoted TU:
Consequences that #2710 does not attempt and should not be held for:
daPiano_ccleanup does: an unpromoted class owns noconfig/tu_manifest.d/ov063/daTrs_c.json, and that file is the only place adeadstrip-duplicate license can live. ov063 does have a manifest directory --
it carries
daObjTh_Fall_Block_c.json-- so this is a per-class packaginggap, not an overlay-wide one.
Completion boundary
compiler_constraintwith full pinned-artifact evidence; promotedaTrs_c(ov063) to a single TU with a manifest carrying the duplicate-emission
license; settle header helper ownership and the factory/vtable glue with
fresh byte proof per change.
Fix12<int>-by-value wall (6az) shared with severalother actors.
module fidelity: 106/106 exact,mismatching: 0,ROM-build analysis: PASS), module-aware relocation checksfor changed functions and consumers, and terminal private validation green on
the actual PR head/base.
Next owner
Unassigned and adoptable. #2710 carries the cleanup only; it does not attempt
any of the above.
Related: #2413 (
daBmb_c-- itsVector3D1manifest row is the shape of thelicense fix), #2410, #2412, #2414.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Y4FxdKHG3a6hQRYRAbx29c