diff --git a/docs/agents/PLAYTEST-2026-09-02.md b/docs/agents/PLAYTEST-2026-09-02.md index 98a7ad17..03fde8ad 100644 --- a/docs/agents/PLAYTEST-2026-09-02.md +++ b/docs/agents/PLAYTEST-2026-09-02.md @@ -1,6 +1,68 @@ -# Play-test, 2026-09-02 — **the splash does not animate at all** +# Play-test, 2026-09-02 — the splash did not animate. **Now fixed and signed off.** -**This is the only thing either agent works on until it is fixed.** +## ✅ CLOSED THE SAME DAY — the human's verdict, which is the only gate that counts + +> *"Looks good! Cannot notice any obvious difference from the actual game. +> Mark logos as done."* — 2026-09-02 + +**The logo splashes are DONE.** Not "the check passes" — a person compared the +port against the real game and could not tell them apart. That is the oracle, +and it is the strongest result this port has produced. + +⚠️ **Both agents: the sole-focus block is lifted.** Return to your milestones. +What remains open from the play-tests is listed at the bottom of this page; none +of it is this. + +### The root cause was one word + +```diff +- t = settle_instant if settle_instant >= 0.0 else min(t, settle_units(element)) ++ t = min(t, settle_instant) # the comment above it already said "stop at" +``` + +`pose_at` **assigned** the settle instant instead of clamping to it, so every +query returned the settled pose whatever the clock said. + +🔴 **And the same line manufactured the false green.** The capture harness shoots +after two frames, so it was photographing t ≈ 2 units — which *looked* settled +only because everything looked settled. **The 0.01 % agreement that closed H2 was +measured through the accident.** One bug produced the defect and the evidence +that the defect was absent. + +### Verified independently before it went to the human + +Filmed a real boot at 0.05 s, before against after: + +| | before | after | +|---|---|---| +| splash in motion | 1.30 s / 7.95 s (16.4 %) | **2.20 s / 7.95 s (27.7 %)** | +| distinct luma states | 26 | **43** | +| publisher ramp | 0.30 s, 6 steps | **0.65 s, 13 steps, one continuous run** | +| developer splash | two bursts split by a **0.50 s freeze** | **one continuous 0.90 s run** | + +The publisher trajectory rises to a peak and settles back — the **crossfade +signature**: glow alone, then both, then sharp only. The developer splash's +interrupting freeze disappearing is the clearest single sign the clock now drives +the poses. + +The port then closed a gap `motion-census` names in its own header — *"a wrong +ramp that moves every frame passes here"* — with a shape check pre-registered +from the disc, measured off a film, on a strip no other element overlaps, in +**ratios** so the texture divides out: middle:last declared 0.203 / measured +0.213, rise:last declared 1.20 / measured **1.20 exact**. It agrees with the +Decoder's independent measurement of the running game. + +### 🔴 The lesson, which outlives the bug + +Three instruments passed a frozen screen. Keep this: **an instrument that sits +below the thing under test cannot see it fail.** A frozen sweep drives the clock +by hand; a settled comparison is *defined* to pass on a frozen screen; an +achieved-fps counter counts frames drawn, not frames different. Ask of any new +check: *what would this still report if the feature were entirely absent?* + +--- + +## The original report, kept for the record The human, watching the port on real hardware, on a GPU, at ~140 fps: @@ -112,3 +174,20 @@ sweep. The mechanism half stands — the blur is a baked companion texture, that is decoded and correct. **The behaviour half does not**: the port draws those quads and does not animate them, so *"the companions are drawn"* was true and did not mean what the row used it to mean. + +--- + +## What is STILL OPEN after the sign-off + +The logos are done. These are not, and none of them blocks a milestone gate: + +| | | owner | +|---|---|---| +| **H1** | Does a held direction **repeat** in the menus, and at what rate? One step per deflection stays authored. The 61 % arm threshold is decoded and adopted; the 0.11 hysteresis gap is still authored. | Decoder | +| **H3** | The `PRESS Ⓐ` plate. All four named causes are dead and the port measures fractionally **early**, so what the human saw is **unattributed** — deliberately not closed green. ⚠️ Worth re-asking now: the animation fix changed what the whole boot looks like, so the original observation may simply no longer reproduce. | both | +| **pipeline** | The end-to-end graphics account — disc → decode → the game's per-frame update → submitted draws → Canary's processing → the presented frame. Cut short by the sole-focus order and **still the right work**: it is what would let the port know whether its ramp *duration* matches the game rather than only its own declared keyframes. | Decoder | + +**P5's gate is "a human clicks through it" and has NOT been claimed here.** The +human has signed off the *logos*, and separately confirmed that Ⓐ, the stick and +the submenus work. Nobody has said the milestone is met, and an agent must not +say it on their behalf. diff --git a/docs/agents/decoder-loop.md b/docs/agents/decoder-loop.md index 5a0f2cf1..4219330b 100644 --- a/docs/agents/decoder-loop.md +++ b/docs/agents/decoder-loop.md @@ -1,10 +1,52 @@ You are the **Decoder**. Answer the open questions the Godot menu port is blocked on, one at a time. -## 🔴🔴 SOLE FOCUS, set by the human 2026-09-02: THE WHOLE GRAPHICS PIPELINE +## ✅ THE LOGO SPLASHES ARE DONE — signed off by the human, 2026-09-02 -**Read [`PLAYTEST-2026-09-02.md`](PLAYTEST-2026-09-02.md) first. Work nothing -else until this is answered.** +> *"Looks good! Cannot notice any obvious difference from the actual game. +> Mark logos as done."* + +**The sole-focus order is lifted.** The port's defect was `pose_at` assigning the +settle instant rather than clamping to it; your per-frame measurement of the real +game (28 distinct alphas over 28 consecutive presents, modal steps −3 and −14 +against predicted −2.87 and −14.13) is what let their fix be checked for *shape* +and not merely for motion. That is the pairing this team is for. + +### 🔴 The pipeline work is STILL THE RIGHT WORK — continue it, at normal priority + +It was cut short by the sole-focus order, and it remains the thing that decides a +question the port cannot answer about itself: **the port matches its own declared +keyframes; nobody has established that its 60 units/s matches the game.** The +ramp is right in shape and unverified in duration. + +So carry on with the end-to-end account, unchanged in substance: + +``` +disc bytes → RATC/T8aD decode → what the GAME CODE does per frame + → the draw calls it submits → Canary's own processing + → the presented frame +``` + +The three load-bearing questions stand, and the first is now the most valuable: + +1. **The per-frame update** — which function advances a UI group's clock, in what + units, and **what it does between keyframes**. The port interpolates + piecewise-linearly across declared segments and your capture agrees; the + remaining gap is the *rate*. +2. **What is submitted per frame** during a screen's build-in, as a series. +3. **What Canary does to it** before a capture records it — present cadence, + resolve, scale, gamma. + +Also open and yours: **H1** — does a held direction repeat in the menus, and at +what rate? The 61 % arm threshold you decoded is adopted; one step per deflection +is still authored. + +⚠️ Deliver a **series, not a settled value** — see +[`TEMPORAL-VERIFICATION.md`](TEMPORAL-VERIFICATION.md), and note that the port's +whole defect was invisible to three instruments that each measured a pose or a +throughput rather than a change. + +## Previous sole focus, 2026-09-02 — the order, kept for the method A human on real hardware: *"the logos just switch, there is no animation."* Measured from a real boot — **the splash moves 1.30 s of 7.95 s (16.4 %)**, the diff --git a/docs/agents/port-loop.md b/docs/agents/port-loop.md index c0e95400..c8644c2d 100644 --- a/docs/agents/port-loop.md +++ b/docs/agents/port-loop.md @@ -1,10 +1,35 @@ You are the **Port**. Build the Godot menu shell, one milestone at a time. -## 🔴🔴 SOLE FOCUS, set by the human 2026-09-02: THE SPLASH DOES NOT ANIMATE +## ✅ THE LOGO SPLASHES ARE DONE — signed off by the human, 2026-09-02 -**Read [`../agents/PLAYTEST-2026-09-02.md`](../agents/PLAYTEST-2026-09-02.md) -first. Work nothing else until this is fixed** — not the clock rate, not the -plate, not blend, not audio. +> *"Looks good! Cannot notice any obvious difference from the actual game. +> Mark logos as done."* + +**The sole-focus order is lifted. Return to your milestones.** The fix was +`pose_at` assigning the settle instant instead of clamping to it — and that same +line manufactured the false green, because the capture harness was photographing +t ≈ 2 units and it *looked* settled only because everything did. + +📌 **Keep the lesson, it outlives the bug.** Three instruments passed a frozen +screen: a frozen sweep drives the clock by hand, a settled comparison is +*defined* to pass on a frozen screen, and an achieved-fps counter counts frames +drawn rather than frames different. Ask of any new check: **what would this still +report if the feature were entirely absent?** `tools/motion-census` exists for +exactly that question; keep it in `check-all`. + +⚠️ **P5's gate is "a human clicks through it" and is NOT claimed.** They signed +off the logos, and separately confirmed Ⓐ, the stick and the submenus work. +Nobody has said the milestone is met — **do not record it as met on their +behalf.** If you believe it is ready, say so and ask. + +Still open, none of it blocking: **H1** (does a held direction repeat, and how +fast — one step per deflection stays authored) and **H3** (the plate; every named +cause is dead and the observation is unattributed — ⚠️ worth re-asking, since the +animation fix changed what the whole boot looks like and the original observation +may no longer reproduce). Both are in +[`../agents/PLAYTEST-2026-09-02.md`](../agents/PLAYTEST-2026-09-02.md). + +## Previous sole focus, 2026-09-02 — RESOLVED, kept for the method > *"The port does no blur animation at all. The logos just switch."*