re: the rest() fallback -- its example dissolved, the question got bigger
ui-resting-pose.md built its dwell-fallback section on GP_TITLE build 7's ptlogo_eff3.t32, listing keyframes [46, 61, 103, -] -- the STALE PARSER's output. Corrected they are [0, 46, 61, 103], the longest gap moves from 61->103 to 0->46, and BOTH ends of the new longest gap are a=0. The element no longer selects a visible pose under either indexing, and build 7 renders byte-identical under the corrected and legacy readings (0 px differ). MISSION lists this element as the one case a Japanese capture was needed to discriminate; it is not. But losing an example is not closing a question, so: disc-wide census. The fallback fires on 2 305 of 13 991 elements and returns a VISIBLE pose in 1 697 of them -- 74 %. GP_TITLE is 5 fires, 4 visible, and all four are on the SPLASH screens: palogo_sqex_eff and palogo_anima_eff, each [0:a0 15:a255 30:a212 45:a0], a flash peaking at 15 and dead by 45 where the fallback returns t=30 a=212. Independently converged on from the other side: the port, working from the JP capture and knowing nothing of this census, found ptlogo_back2eff1's rest.t at the peak of its own 4-unit sparkle with six staggered across the logo, so --pose=rest fires every sparkle at once -- a frame the game never shows. Consequence recorded as a rule: a render posed at rest is a legitimate common reference for comparing two DECODERS and is not a frame to score against a capture of the game. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
This commit is contained in:
@@ -268,15 +268,40 @@ no pose is held, and the rule is choosing an endpoint of a movement.**
|
||||
|
||||
### The element that exposed it
|
||||
|
||||
`GP_TITLE` build 7, `ptlogo_eff3.t32` — a transient bloom:
|
||||
🔴 **This listing is the STALE PARSER's, and the example it supports is dead
|
||||
(2026-08-30).** The times below are shifted by one with an untimed final pose —
|
||||
the pre-record-layout-fix reading. See
|
||||
[CONTAINER-NOTES](../../agents/CONTAINER-NOTES.md) for the trap.
|
||||
|
||||
`GP_TITLE` build 7, `ptlogo_eff3.t32` — a transient bloom, **as it was printed**:
|
||||
|
||||
```
|
||||
46: (98,42) 100%,100% a=0
|
||||
61: (108,72) 0%,0% a=0
|
||||
103: (108,72) 200%,200% a=255 r=80
|
||||
-: (108,72) 0%,0% a=0 r=150
|
||||
-: (108,72) 0%,0% a=0 r=150 ← stale: shifted, final pose untimed
|
||||
```
|
||||
|
||||
**and as it actually reads:**
|
||||
|
||||
```
|
||||
0: (98,42) 100%,100% a=0
|
||||
46: (108,72) 0%,0% a=0
|
||||
61: (108,72) 200%,200% a=255 r=80
|
||||
103: (108,72) 0%,0% a=0 r=150
|
||||
```
|
||||
|
||||
| | gaps | longest | its two ends |
|
||||
|---|---|---|---|
|
||||
| stale | 15, 42 | 61→103 | one is **a=255 at 200 %** — the screen-filling bloom |
|
||||
| **fresh** | **46, 15, 42** | **0→46** | **both a=0** |
|
||||
|
||||
✅ **So this element no longer discriminates.** `rest()` returns `(98,42) a=0` —
|
||||
invisible — and build 7 renders **byte-identical** under the corrected and legacy
|
||||
readings (0 pixels differ, max Δ 0). ⚠️ `MISSION.md` lists this element as the one
|
||||
case a **Japanese-locale capture** was needed to settle. It is not; that capture was
|
||||
still worth taking, for the port's `title_jp` question, but not for this.
|
||||
|
||||
No two adjacent poses are equal, so there is no plateau. The longest gap is
|
||||
`61 → 103` (42 units), during which the sprite grows from nothing to **200 %** at
|
||||
full alpha while rotating 80°, then collapses again. The rule returns whichever
|
||||
@@ -294,6 +319,32 @@ units brighter.
|
||||
**The element has no resting pose.** It is a flash; after it plays there is
|
||||
nothing. Neither answer is *derived* — one of them is merely harmless.
|
||||
|
||||
### 🔴 Losing the example did not close the question — it is larger than one element
|
||||
|
||||
Disc-wide ([`../data/rest-fallback-census.txt`](../data/rest-fallback-census.txt)):
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| elements with ≥ 2 keyframes | 13 991 |
|
||||
| have a plateau — the fallback never runs | 11 686 |
|
||||
| **have none — the fallback decides** | **2 305** |
|
||||
| **of those, it returns a VISIBLE pose** | **1 697 (74 %)** |
|
||||
|
||||
**`GP_TITLE`: 5 fires, 4 visible** — and all four are on the **splash screens**,
|
||||
`palogo_sqex_eff.t32` / `palogo_anima_eff.t32` on entries 10/11/13/14. Each reads
|
||||
`[0:a0 15:a255 30:a212 45:a0]`: a flash peaking at t=15, dead by t=45, and the
|
||||
fallback returns **t=30, a=212** — near the peak of a transient.
|
||||
|
||||
✅ **Independently converged on from the other side.** The port agent, working from
|
||||
the Japanese title capture and knowing nothing of this census, found
|
||||
`ptlogo_back2eff1`'s `rest.t` sitting at the peak of its own **4-unit** sparkle,
|
||||
with six staggered across the logo — so `--pose=rest` fires every sparkle at once,
|
||||
a frame the game never shows.
|
||||
|
||||
⚠️ **The consequence, and it is a rule about how a rest render may be used:** a
|
||||
render posed at `rest` is a legitimate **common reference for comparing two
|
||||
decoders**, and is **not** a frame to score against a capture of the game.
|
||||
|
||||
### 🔴 What this retracts
|
||||
|
||||
Last iteration I reported the build 7 render difference as evidence **against**
|
||||
|
||||
Reference in New Issue
Block a user