Skip to content

daTrs_c (ov063): bisect the FLAGS16 launders and promote the TU #2721

Description

@andrewboudreau

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions