re: the forced-backdrop rule's pixel cost -- 38 screens go black without it

Follows the necessity census. 'The order moves' is a property of the sort; the
tie-break work already found reorders costing zero pixels, so the picture
moving is a separate claim. Rendered each of the 62 deciding builds twice and
diffed.

  38 .prm deciders: changed_px == ink_px in ALL 38. Without the rule the
                    primitive sorts last, paints over everything, and the
                    screen composites to pure black. The port's original
                    contradiction argument, measured on 38 builds across seven
                    archives instead of argued on two.
  24 .tbm deciders: zero -- and that is MY INSTRUMENT, not a finding.

The control asked whether the composite had ink; it always does. The question
was whether the reordered ELEMENT has ink, and compose draws no pixels at all
for a .tbm. So those 24 zeros measure our renderer's blindness by construction.
tie_break_pixel_cost.rs already had the per-element ink_mask this needed.
Reported rather than quietly patched: a control that cannot fail is the shape
this corpus keeps paying for.

Also corrects two things the port agent caught:

  - 'Two renderers, same answer' was true of the six GP_TITLE instances and not
    of the other 74. The port's re-run of my probe is my code executed twice;
    its independent leg was removing its own exporter post-pass, which covers
    GP_TITLE only. The disc-wide 62 has one witness and the page now says so.
  - forced_backdrop_necessity.rs defaulted to GP_TITLE with no argument, so a
    bare run printed 6 instances in the same format as 80. It now walks every
    dat/*.pak and reports the archive count.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
This commit is contained in:
sylph-decoder
2026-08-30 07:04:05 +00:00
parent 304ce9efaa
commit aa9b7ef340
5 changed files with 307 additions and 10 deletions

View File

@@ -0,0 +1,83 @@
# What forced_backdrop costs IN PIXELS on the 62 builds whose order it decides.
#
# Produced by: cargo run -p sylpheed-formats --example forced_backdrop_pixel_cost
# (no argument = every dat/*.pak), 2026-08-30, SYLPHEED_DISC=/disc.
# Each build rendered twice at 1280x720 with include_primitives=true and a
# black backdrop: once in derived_paint_order(), once with the
# forced_backdrop fallback removed. changed_px is the diff.
#
# RESULT, and it splits perfectly along the element kind:
# 38 .prm deciders: changed_px > 0, and changed_px == ink_px in ALL 38.
# Without the rule the screen composites to PURE BLACK.
# 24 .tbm deciders: changed_px == 0 in all 24 -- but see the caveat, this
# is our compositor drawing no pixels for a .tbm at all,
# NOT the rule being free. The control below did not
# catch it and was the wrong control.
#
# archive entry element changed_px total_px ink_px(control) pct
GP_BUNK.pak 0 px_bunk_base.tbm 0 921600 75487 0.00%
GP_BUNK.pak 2 px_bunk_base.tbm 0 921600 70372 0.00%
GP_BUNK.pak 4 pvbase.tbm 0 921600 41137 0.00%
GP_BUNK.pak 6 pvbase.tbm 0 921600 34773 0.00%
GP_DEBRIEFING_PILOTLOG.pak 118 px_deb_base.tbm 0 921600 25812 0.00%
GP_DEBRIEFING_PILOTLOG.pak 130 px_deb_base.tbm 0 921600 25812 0.00%
GP_DEBRIEFING_PILOTLOG.pak 131 pjbgbase2.tbm 0 921600 33329 0.00%
GP_DEBRIEFING_PILOTLOG.pak 134 px_deb_base.tbm 0 921600 44147 0.00%
GP_DEBRIEFING_PILOTLOG.pak 150 pjbgbase2.tbm 0 921600 34401 0.00%
GP_DEBRIEFING_PILOTLOG.pak 165 px_deb_base.tbm 0 921600 42487 0.00%
GP_DIALOG.pak 2 pcbase.tbm 0 921600 646626 0.00%
GP_DIALOG.pak 3 pcbase.tbm 0 921600 646626 0.00%
GP_DIALOG.pak 9 pzeff00.prm 867195 921600 867195 94.10%
GP_DIALOG.pak 10 pzeff00.prm 869598 921600 869598 94.36%
GP_DIALOG.pak 11 pzeff00.prm 868329 921600 868329 94.22%
GP_DIALOG.pak 12 pzeff00.prm 867629 921600 867629 94.14%
GP_DIALOG.pak 13 pzeff00.prm 867713 921600 867713 94.15%
GP_DIALOG.pak 14 pzeff00.prm 868023 921600 868023 94.19%
GP_DIALOG.pak 15 pzeff00.prm 867294 921600 867294 94.11%
GP_DIALOG.pak 16 pzeff00.prm 865326 921600 865326 93.89%
GP_DIALOG.pak 17 pzeff00.prm 867276 921600 867276 94.11%
GP_DIALOG.pak 18 pzeff00.prm 868899 921600 868899 94.28%
GP_DIALOG.pak 19 pzeff00.prm 866752 921600 866752 94.05%
GP_DIALOG.pak 20 pzeff00.prm 868266 921600 868266 94.21%
GP_DIALOG.pak 21 pzeff00.prm 868388 921600 868388 94.23%
GP_DIALOG.pak 22 pzeff00.prm 870053 921600 870053 94.41%
GP_DIALOG.pak 23 pzeff00.prm 867982 921600 867982 94.18%
GP_DIALOG.pak 24 pzeff00.prm 868386 921600 868386 94.23%
GP_DIALOG.pak 25 pzeff00.prm 865233 921600 865233 93.88%
GP_DIALOG.pak 26 pzeff00.prm 865525 921600 865525 93.92%
GP_DIALOG.pak 28 pzeff00.prm 865233 921600 865233 93.88%
GP_DIALOG.pak 29 pzeff00.prm 865500 921600 865500 93.91%
GP_DIALOG.pak 30 pzeff00.prm 866183 921600 866183 93.99%
GP_DIALOG.pak 31 pzeff00.prm 866233 921600 866233 93.99%
GP_DIALOG.pak 32 pzeff00.prm 865192 921600 865192 93.88%
GP_DIALOG.pak 33 pzeff00.prm 865538 921600 865538 93.92%
GP_DIALOG.pak 34 pzeff00.prm 865233 921600 865233 93.88%
GP_DIALOG.pak 35 pzeff00.prm 866079 921600 866079 93.98%
GP_DIALOG.pak 36 pzeff00.prm 865508 921600 865508 93.91%
GP_DIALOG.pak 37 pzeff00.prm 866218 921600 866218 93.99%
GP_DIALOG.pak 38 pzeff00.prm 868259 921600 868259 94.21%
GP_DIALOG.pak 39 pzeff00.prm 866804 921600 866804 94.05%
GP_DIALOG.pak 40 pzeff00.prm 866062 921600 866062 93.97%
GP_DIALOG.pak 41 pzeff00.prm 866792 921600 866792 94.05%
GP_DIALOG.pak 86 esrb_base.prm 6388 921600 6388 0.69%
GP_DIALOG.pak 130 esrb_base.prm 6388 921600 6388 0.69%
GP_GAMEOVER.pak 4 pnbase.tbm 0 921600 921600 0.00%
GP_GAMEOVER.pak 7 pnbase.tbm 0 921600 921600 0.00%
GP_MISSION_SELECT.pak 3 px_mission_base.tbm 0 921600 661678 0.00%
GP_MISSION_SELECT.pak 5 px_mission_base.tbm 0 921600 659464 0.00%
GP_MOVIE_THEATER.pak 0 px_movie_base.tbm 0 921600 32871 0.00%
GP_MOVIE_THEATER.pak 1 px_movie_base.tbm 0 921600 27726 0.00%
GP_SAVE_LOAD.pak 46 pgloading_eff00.prm 49771 921600 49771 5.40%
GP_SAVE_LOAD.pak 69 pgloading_eff00.prm 49771 921600 49771 5.40%
GP_SAVE_LOAD.pak 89 px_replay_base.tbm 0 921600 269421 0.00%
GP_SAVE_LOAD.pak 98 px_replay_base.tbm 0 921600 269421 0.00%
GP_SYSTEM.pak 0 pqbase.tbm 0 921600 828253 0.00%
GP_SYSTEM.pak 1 pqbase.tbm 0 921600 828199 0.00%
GP_TITLE.pak 12 pgloading_eff00.prm 49771 921600 49771 5.40%
GP_TITLE.pak 15 pgloading_eff00.prm 49771 921600 49771 5.40%
GP_TUTORIAL.pak 0 pubase.tbm 0 921600 92946 0.00%
GP_TUTORIAL.pak 1 pubase.tbm 0 921600 92879 0.00%
# builds whose ORDER the rule decides: 62
# of those, costing ZERO pixels: 24
# of those, BLIND (build renders no ink, control fails): 0