Merge remote-tracking branch 'origin/main' into auto/port-p6-audio

This commit is contained in:
Sylpheed port agent
2026-09-02 16:15:47 +00:00
3 changed files with 155 additions and 9 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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."*