port: the forced-backdrop pass decides two screens and confirms four, not six

I have said 'six forced elements' since implementing it and verified after every
change that no verdict moved -- which measured stability, not necessity. Removing
the pass entirely: the four splashes are BYTE-IDENTICAL, because palogo_eff0's
implied key 0x00000000 is lower than the lowest sprite key and the crate already
sorts it first. Only build_12/15 change, and they go black again.

Those two are the port's strongest dependency on an undecoded rule:
pgloading_eff00 there has layer: null, layer_source: none -- the only elements in
the export with neither a read nor an implied key. Their position rests entirely
on the occlusion constraint with nothing to fall back on, and that was hiding
inside a count of six.

Census: 160 layer keys read from sprites, 16 implied (every layerless primitive),
2 absent. FORMAT.md requires a consumer to tell which, and layer_source does.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N7FiFFFwbvG2uxdcEh8HyF
This commit is contained in:
Sylpheed port agent
2026-08-30 06:48:42 +00:00
parent f609acbc95
commit 1834ad1f40

View File

@@ -9,7 +9,7 @@ dies, which is what this file is for.
<!-- INDEX: generated by tools/port/index-decisions -- do not hand-edit -->
113 sections. Search this before re-deriving anything.
114 sections. Search this before re-deriving anything.
* [P0 — the exporter, 2026-08-28](#p0--the-exporter-2026-08-28)
* [P1 — Godot draws the screen, 2026-08-28](#p1--godot-draws-the-screen-2026-08-28)
@@ -124,6 +124,7 @@ dies, which is what this file is for.
* [Auditing `BLOCKED.md` found three stale rows, and the undated ones were all three](#auditing-blockedmd-found-three-stale-rows-and-the-undated-ones-were-all-three)
* [The record already answered last iteration's question, under headings that name it](#the-record-already-answered-last-iterations-question-under-headings-that-name-it)
* [🔴 Twenty-one messages to a dead address, each one warning me it was dead](#twenty-one-messages-to-a-dead-address-each-one-warning-me-it-was-dead)
* [The forced-backdrop pass is load-bearing on two screens, not six](#the-forced-backdrop-pass-is-load-bearing-on-two-screens-not-six)
<!-- /INDEX -->
## P0 — the exporter, 2026-08-28
@@ -6722,3 +6723,51 @@ because it converts into evidence that the situation is understood. The fix is n
"read the warnings" — I read them all. It is that a warning repeating unchanged
across attempts is a *state*, not a footnote, and the second identical one should
have been treated as a failure rather than a fact about the world.
## The forced-backdrop pass is load-bearing on two screens, not six
I have said "six forced elements" since implementing the rule, and checked after
every change that **no verdict moved**. That measured the pass's *stability*, never
its *necessity*. Removing it entirely answers the other question:
| screens | order without the pass |
|---|---|
| `publisher_logo`, `publisher_logo_r`, `developer_logos`, `developer_logos_r` | **byte-identical** |
| `build_12`, `build_15` | first element becomes `pgloading_loop5` — the black screen returns |
**Four of the six are redundant.** `palogo_eff0`'s layer key is `0x00000000`,
`layer_source: implied` — lower than the lowest sprite key on those screens
(`0x0000a100`) — so the crate already sorts it first and the occlusion rule merely
agrees.
🔴 **The two that matter have no key at all.** On `build_12`/`build_15`,
`pgloading_eff00` carries `layer: null`, `layer_source: none` — the only two
elements in the export with neither a read nor an implied key. Their position rests
**entirely** on the occlusion constraint, with nothing to fall back on. That is the
port's single strongest dependency on a rule it did not decode, and it was hiding
inside a count of six.
### Which is also what makes the rule worth having
An agreement on four screens where a key already existed is not evidence — it is
the rule reproducing the crate. The two screens where it is load-bearing are the
two the rule was found on, and the argument for it there is not the key (there is
none) but that a permanently black screen is impossible on its face.
⚠️ So the honest statement, replacing the one I have been repeating: the rule
**decides** two screens and **confirms** four. I will not describe it as six again.
### The layer-key census this came out of
| `layer_source` | count | which |
|---|---|---|
| `sprite` — read from the file | 160 | everything with a texture |
| `implied` — the crate's, measured per name | 16 | `pteff00`, `pteff02`, `palogo_eff0`, `pgloading_eff00` |
| `none` — no key exists | **2** | `pgloading_eff00` on the two loading screens |
✅ Every layerless primitive's position is `implied` or absent, never read — and
`FORMAT.md` requires a consumer to be able to tell, which `layer_source` delivers.
The Decoder's own page says `pteff00`'s place on top *"is still a **measured**
per-name entry, not a decoded one"*; the port inherits that through
`layer: 0xfffffffe, layer_source: implied` and declares it. Nothing is being
passed off as decoded that is not.