diff --git a/.github/workflows/converted-ratchet.yml b/.github/workflows/converted-ratchet.yml index 8ac8aed69c..bbca401591 100644 --- a/.github/workflows/converted-ratchet.yml +++ b/.github/workflows/converted-ratchet.yml @@ -24,6 +24,19 @@ # pass, so the file is not in every PR's diff and does not conflict. Re-bank it # occasionally, on its own, to bank recent gains. # +# ONE-WAY STALENESS HAS AN EXCEPTION, AND IT COST A DAY. A TU promotion REMOVES banked +# paths: `tubuild.py` consolidates N per-symbol files into one, and the absorbing file +# structurally cannot pass `no_mangled_refs`. So a promotion leaves the baseline stale in +# the FAILING direction. Measured: PR #1996 promoted `ov002/daObjAbuku_c` while its own +# checks were green -- they had run against a base predating the re-bank that first +# banked the two files it deletes. Main went out of sync the moment it merged, and the +# next unrelated PR to touch `src/**` (#1978) is the one that turned red for it. +# +# Hence the `push:` trigger below. It does not gate anything -- there is no branch +# protection here and a red main is advisory -- but it attributes the breakage to the +# merge that caused it instead of to whoever opens the next PR. Re-bank with +# `--update --reason` naming the promotion; that is the designed path, not a workaround. +# # Hence: no second checkout, and no root-file override the way langmode has one. The # escape hatch is a flag on the tool, used LOCALLY before you push. # @@ -61,6 +74,17 @@ on: - "config/tu_manifest.d/**" - "config/converted-baseline.json" - ".github/workflows/converted-ratchet.yml" + push: + branches: [main] + paths: + - "src/**" + - "tools/tiers.py" + - "tools/tiers_ratchet.py" + - "tools/delaunder.py" + - "tools/tu_manifest.py" + - "config/tu_manifest.d/**" + - "config/converted-baseline.json" + - ".github/workflows/converted-ratchet.yml" workflow_dispatch: permissions: diff --git a/config/converted-backslide-exceptions.jsonl b/config/converted-backslide-exceptions.jsonl index f11f5a0d16..25faadbe8b 100644 --- a/config/converted-backslide-exceptions.jsonl +++ b/config/converted-backslide-exceptions.jsonl @@ -12,3 +12,5 @@ {"path": "src/_ZN6BobOmb13OnYoshiTryEatEv.cpp", "reason": "Both files traded a raw (unsigned char*)this cast at [263] for dEnemyBase_c's actual field at 0x107, which is still honestly named unk_107 because nobody has recovered what the byte means. The old spelling only scored because a raw index through a re-cast this pointer slips past the RAW_OFFSET criterion -- it was never more readable, only less legible to the gate. Reverting it to score would be exactly the regression the tier exists to prevent; naming the field properly is a dEnemyBase_c-wide rename touching 13 files and belongs in its own PR."} {"path": "src/_ZN6Rabbit13OnYoshiTryEatEv.cpp", "reason": "Both files traded a raw (unsigned char*)this cast at [263] for dEnemyBase_c's actual field at 0x107, which is still honestly named unk_107 because nobody has recovered what the byte means. The old spelling only scored because a raw index through a re-cast this pointer slips past the RAW_OFFSET criterion -- it was never more readable, only less legible to the gate. Reverting it to score would be exactly the regression the tier exists to prevent; naming the field properly is a dEnemyBase_c-wide rename touching 13 files and belongs in its own PR."} {"path": "src/__sinit_ov075_0211bb00.c", "reason": "dScEntry_c::graphCallback_c's constructor is now a real compiler-owned C++ symbol. The static initializer remains a generated C reconstruction and cannot spell a constructor call in C++ source form, so its relocation must use _ZN10dScEntry_c15graphCallback_cC1Ev until the initializer's globals are reconstructed as typed C++ definitions."} +{"path": "src/_ZN12daObjAbuku_cD0Ev.cpp", "reason": "TU promotion ov002/daObjAbuku_c (PR #1996) consolidated these two per-symbol files into src/actors/daObjAbuku_c.cpp. A reconstructed TU must spell vague-linkage symbols directly (_ZN7fBase_cnwEj, _ZN8dActor_cC2Ev, _ZN8dActor_cD2Ev) or its range will not link, so no_mangled_refs cannot pass for the absorbing file. Byte-match outranks readability; the code was not reverted and no byte changed."} +{"path": "src/_ZN12daObjAbuku_cD1Ev.cpp", "reason": "TU promotion ov002/daObjAbuku_c (PR #1996) consolidated these two per-symbol files into src/actors/daObjAbuku_c.cpp. A reconstructed TU must spell vague-linkage symbols directly (_ZN7fBase_cnwEj, _ZN8dActor_cC2Ev, _ZN8dActor_cD2Ev) or its range will not link, so no_mangled_refs cannot pass for the absorbing file. Byte-match outranks readability; the code was not reverted and no byte changed."} diff --git a/config/converted-baseline.json b/config/converted-baseline.json index 800a7bd1c2..1a8f15204d 100644 --- a/config/converted-baseline.json +++ b/config/converted-baseline.json @@ -7,7 +7,7 @@ "no_codegen_trick", "no_mangled_refs" ], - "count": 2567, + "count": 2565, "converted": [ "src/ARMMathLoadState.c", "src/ARMMathSaveState.c", @@ -660,8 +660,6 @@ "src/_ZN12daDossyCap_c6RenderEv.cpp", "src/_ZN12daDossyCap_cD0Ev.cpp", "src/_ZN12daDossyCap_cD1Ev.cpp", - "src/_ZN12daObjAbuku_cD0Ev.cpp", - "src/_ZN12daObjAbuku_cD1Ev.cpp", "src/_ZN13BasementWater16CleanupResourcesEv.cpp", "src/_ZN13BasementWaterD0Ev.cpp", "src/_ZN13BasementWaterD1Ev.cpp",