Skip to content

Reconstruct dPathLiftActor_c identity and Carpet TU - #2005

Merged
andrewboudreau merged 10 commits into
mainfrom
cpp/pathlift-identity-carpet
Aug 30, 2026
Merged

Reconstruct dPathLiftActor_c identity and Carpet TU#2005
andrewboudreau merged 10 commits into
mainfrom
cpp/pathlift-identity-carpet

Conversation

@andrewboudreau

@andrewboudreau andrewboudreau commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • rebuild daObjRcCarpet_c as one genuine compiler-owned shadow TU
  • correct the ROM-proven dPathLiftActor_c identity across symbols, headers, consumers, and TU manifests
  • reconstruct dPathLiftActor_c as a 22-function genuine C++ shadow TU with organic destructor pair, initializer, RTTI, vtable, and member-function pointers

Verification

  • dPathLiftActor_c: 22/22 text exact; objisolate and relocation destinations clean
  • daObjRcCarpet_c: 9/9 exact; daObjPathLift_c: 8/8 exact
  • strict standalone PathLift owners and callback: VERIFIED, blind: 0
  • ROM-data checks: 0 DIFFERS
  • affected consumers, header offsets, references, and port refs pass
  • all reconstructed TUs compile: 89/89
  • full ROM: 11,085/11,085, 0 mismatches; 106/106 modules exact

Promotion state

dPathLiftActor_c intentionally remains shadow-only: mwcc emits the D1/D0 and six PMF .data sections in a non-retail physical order, so the manifest licenses none of that output.

daObjRcCarpet_c also remains shadow-only. Its nine text functions and each named data record verify individually, but an intact-object probe with #2001 places the resource table before the class RTTI while retail requires RTTI first. The manifest cannot conceal that physical section-order difference; source-order reconstruction continues separately.

@tangos-validator

tangos-validator Bot commented Aug 30, 2026

Copy link
Copy Markdown

✅ PR validation — Passed

Committed merge passes; 1 contributor credit reassignment(s) noted, not a blocker.

Full merge validation

Check Result
Committed test merge yes
Byte-verified functions 10,998 / 11,347 (96.92%, +0)
Byte-verified code bytes 2,045,248 / 2,211,124 (92.50%, +0)
Claimed, not byte-verified 218 functions, 60,056 bytes (+0)
Perfect source moves 0 R100
Enrolled ranges (delinks complete) 11,058 functions, 2,052,772 bytes (92.84%, +0) -- differs from byte-verified by +60
Contributor credit 0 added, 1 changed, 0 lost
Relocation check 19 checked; 19 VERIFIED
Port reference check 405 checked; 0 stale
Module fidelity 106/106 exact; 100.000000% compared bytes
Code linked from verified source 11,087 functions, 2,066,772 bytes (93.47%)
Module bytes from source 2,066,772 / 3,049,600 (67.8%); 811,492 (26.6%) are data no delink entry reaches
ROM data reproduced from source 452 symbol(s) exact, 241 partial, 15 differ

Contributor credit moved (1)

Function Source Before After
ov002:0x020eff18 src/_ZN8PathLift9AfterClsnEv.cpp -> src/_ZN16dPathLiftActor_c9AfterClsnEi.cpp tangosdev andrewboudreau

Byte-verified means the range carries complete in a delinks.txt, so the ROM build compiled it and compared it to the cartridge. The 218 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,216 this project calls matched.

Warnings: contributor attribution changed, not a blocker (1 changed, 0 lost -- src/_ZN16dPathLiftActor_c9AfterClsnEi.cpp: tangosdev -> andrewboudreau).

Per-file link-check detail

All 12 changed file(s) compile to the ROM byte-for-byte with correct relocation targets.

File Symbol Result Slots checked
src/FlyingCarpet_Spawn.cpp FlyingCarpet_Spawn ✅ verified 1
src/_ZN15daObjRcCarpet_c13InitResourcesEv.cpp _ZN15daObjRcCarpet_c13InitResourcesEv ✅ verified 1
src/_ZN15daObjRcCarpet_c16CleanupResourcesEv.cpp _ZN15daObjRcCarpet_c16CleanupResourcesEv ✅ verified 1
src/_ZN15daObjRcCarpet_c6RenderEv.cpp _ZN15daObjRcCarpet_c6RenderEv ✅ verified 1
src/_ZN15daObjRcCarpet_c8BehaviorEv.cpp _ZN15daObjRcCarpet_c8BehaviorEv ✅ verified 1
src/_ZN15daObjRcCarpet_cD0Ev.cpp _ZN15daObjRcCarpet_cD0Ev ✅ verified 1
src/_ZN15daObjRcCarpet_cD1Ev.cpp _ZN15daObjRcCarpet_cD1Ev ✅ verified 1
src/_ZN16dPathLiftActor_c12BaseBehaviorEv.cpp _ZN16dPathLiftActor_c12BaseBehaviorEv ✅ verified 1
src/_ZN16dPathLiftActor_c9AfterClsnEi.cpp _ZN16dPathLiftActor_c9AfterClsnEi ✅ verified 1
src/_ZN16dPathLiftActor_cD0Ev.cpp _ZN16dPathLiftActor_cD0Ev ✅ verified 1
src/_ZN16dPathLiftActor_cD1Ev.cpp _ZN16dPathLiftActor_cD1Ev ✅ verified 1
src/actors/daObjPathLift_c.cpp _ZN15daObjPathLift_cD1Ev + _ZN15daObjPathLift_cD0Ev + func_ov100_02146e70 + func_ov100_0214700c + _ZN15daObjPathLift_c16CleanupResourcesEv + _ZN15daObjPathLift_c6RenderEv + _ZN15daObjPathLift_c8BehaviorEv + _ZN15daObjPathLift_c13InitResourcesEv ✅ verified 8

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 added the attribution-override Maintainer accepts this PR's contributor-credit changes; validation reports them as warnings label Aug 30, 2026
andrewboudreau and others added 4 commits August 30, 2026 10:01
Carries origin/main through the restacked #2000. Same two generated files
conflicted and are resolved the same way:

- config/converted-baseline.json: REGENERATED with the post-#2007 tiers.py
  (tools/tiers_ratchet.py --update), never by side or key union. Count
  2552 = the parent branch's 2559 minus the seven per-symbol files this
  PR's ov070/daKrpa_c promotion absorbs. All seven are classified
  "MOVED -- absorbed into src/actors/daKrpa_c.cpp" by classify_missing(),
  that file exists in this tree, and all seven already had rows in
  config/converted-backslide-exceptions.jsonl from this branch's own
  earlier run, so no duplicate rows were added.

- notes/cpp-tu-current-state.md: regenerated with tools/cpp_tu_state.py
  --write-note; --check-note is clean.

No source file, delinks entry, or byte changed in this merge.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WdCK1xgrJdiJzPCh3bAJfQ
Drops this branch's two redundant daObjAbuku_c backslide rows in favour of
#2011's authoritative pair (the union merge driver had produced one of each),
and re-regenerates config/converted-baseline.json from the parent branch's
2559 with tools/tiers_ratchet.py --update.

Count 2552 = 2559 minus the seven per-symbol files this PR's ov070/daKrpa_c
promotion absorbs. All seven are classified "MOVED -- absorbed into
src/actors/daKrpa_c.cpp by TU promotion (ov070/daKrpa_c)" by the tool's own
classify_missing(); that file exists and is git-tracked here. Zero genuine
removals, and all seven already had rows from this branch's earlier run, so
no duplicate rows were added.

notes/cpp-tu-current-state.md regenerated; --check-note clean.
No source file, delinks entry, or byte changed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WdCK1xgrJdiJzPCh3bAJfQ
Carries origin/main through the restacked #2000 and #2002.

- config/converted-baseline.json: this PR RENAMES rather than absorbs, so it
  is resolved by carrying the three PathLift -> dPathLiftActor_c key renames
  onto the parent branch's 2552 set and then regenerating with
  tools/tiers_ratchet.py --update. That yields +1 / -0 and count 2553: zero
  removals and zero backslide rows, which is the honest reading.

  Regenerating WITHOUT the key rename first would have reported the three
  paths as "GONE -- not a tracked source file any more" and demanded a
  --reason, which would have logged a rename as a readability backslide.
  git itself scores them as renames (R076/R059/R061), all three destinations
  exist and are tracked, and all three are CONVERTED in the new set, so no
  readability was lost. This matches how this branch already handled the
  D0/D1 pair against the older baseline.

- notes/cpp-tu-current-state.md: regenerated with tools/cpp_tu_state.py
  --write-note; --check-note is clean.

No source file, delinks entry, or byte changed in this merge.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WdCK1xgrJdiJzPCh3bAJfQ
@andrewboudreau
andrewboudreau changed the base branch from cpp/dakrpa-genuine-tu to main August 30, 2026 15:54
@andrewboudreau
andrewboudreau merged commit e720948 into main Aug 30, 2026
7 checks passed
@andrewboudreau
andrewboudreau deleted the cpp/pathlift-identity-carpet branch August 30, 2026 16:04
andrewboudreau added a commit that referenced this pull request Aug 30, 2026
Refresh the validation base: the queued job was pinned to 8c0b811, which
predates #2005 and #2014. Merge tree verified to preserve #2005's
deadstrip-data fix for _ZTI16dPathLiftActor_c and to hold source-built
coverage at 2,066,772 B with 0 bytes handed back.
andrewboudreau added a commit that referenced this pull request Aug 30, 2026
Refresh the validation base: the queued job was pinned to 207d932, which
predates #2014. Merge tree verified to preserve #2005's deadstrip-data fix
for _ZTI16dPathLiftActor_c and to hold source-built coverage at
2,066,772 B with 0 bytes handed back.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

attribution-override Maintainer accepts this PR's contributor-credit changes; validation reports them as warnings

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant