port: Ⓐ was never bound to the pad, and the stick is not an edge
Both found by a human playing the port on a real controller. Both were
invisible to every check this port has, for one reason:
`--script` sends InputEventAction, which BYPASSES the input map.
So the harness asserted every line of code AFTER the map and nothing about the
map itself. Measured on this Godot, not remembered -- the remembered answer was
wrong:
ui_accept key:Enter, key:Kp Enter, key:Space <- no joypad at all
ui_cancel key:Escape <- no joypad at all
ui_up key:Up, JOYBTN:11, JOYAXIS:1- <- d-pad AND left stick
ui_down key:Down, JOYBTN:12, JOYAXIS:1+
Four actions worked on the pad and two did not, which presents as a broken
controller: navigation moved, Ⓐ skipped nothing and opened nothing. Godot
4.7.2 binds no joypad button to ui_accept or ui_cancel.
Gamepad.bind_missing() ADDS the two buttons to the built-in actions rather than
redefining them in project.godot, which would replace the built-ins wholesale
and drop the keyboard bindings silently.
Second defect, same blind spot: an InputEventAction is not an analog axis. The
left stick is bound to axis 1, and an axis is not an edge -- held at deflection
it emits an event per jitter, each reporting the action pressed. That was one
cursor step per jitter ("moves the cursor too fast"). The stick is now latched
to one step per deflection, with hysteresis so a stick resting near the
threshold does not chatter.
AUTHORED, and deliberately the conservative half: whether the game REPEATS a
held direction, and how fast, is an oracle question. One deflection one step
cannot run away and invents no rate. Logged as BLOCKED H1.
tools/port/verify-input asserts the map and the latch, with a control that
removes each check's OWN subject -- its first version inverted all nine
assertions when only two depended on the fixup, and reported seven correct
checks as broken. Three rows say plainly they are not controllable (they assert
Godot's own bindings) and one is a negative carrying a positive control (R4),
rather than faking an inversion for either.
Also logged BLOCKED H2, unguessed: the splash blur/fade-in is more pronounced
in the game than in the port. The port applies no blur at all. Noted there that
the two splashes are the only screens reaching the rest() plateau-less
fallback, which the R1 pass just re-opened in both directions.
This commit is contained in:
@@ -84,6 +84,51 @@ command rather than by trusting the date:
|
||||
git log -1 --format=%h -- docs/port/HANDOFF.md # newer than 9ca1eb5? re-reconcile
|
||||
```
|
||||
|
||||
## New asks, 2026-09-01 — from a HUMAN PLAY-TEST on real hardware, port `HEAD` `6b713e8` + input fix
|
||||
|
||||
**The first play-test on a physical controller found four things.** Two were port
|
||||
defects and are fixed; **two are oracle questions and are recorded here unguessed.**
|
||||
|
||||
⚠️ Read the fixed pair first, because the *reason* they survived so long is a
|
||||
method finding that applies to the Decoder's harness as much as this one:
|
||||
|
||||
> **`--script` sends `InputEventAction`, which bypasses the input map.** So every
|
||||
> check this port had asserted the code *below* the map and nothing about the map
|
||||
> — which turned out to have **no joypad binding for `ui_accept` or `ui_cancel`
|
||||
> at all** in Godot 4.7.2, while binding the d-pad *and* the left stick to
|
||||
> `ui_up`/`ui_down`. Ⓐ and Ⓑ were dead on a real pad for the whole of P5 while
|
||||
> the unattended walk passed every iteration. The same blind spot hid the second
|
||||
> defect: an `InputEventAction` is not an analog axis, so nothing could observe
|
||||
> that a held stick fires once per *jitter*. Now asserted by
|
||||
> `tools/port/verify-input`, with a control.
|
||||
|
||||
| # | ask | why the port cannot answer it |
|
||||
|---|---|---|
|
||||
| **H1** | **Does a held direction REPEAT in the menus, and at what rate?** Initial delay and repeat interval, for the d-pad and for the left stick separately if they differ. | Behavioural. The port now does **one step per deflection** — `authored`, and deliberately the conservative half: it cannot run away and it invents no rate. If the game repeats, a human will feel it as *"I have to flick it again"*. |
|
||||
| **H2** | **The splash blur/fade-in does not match the game.** A human watching both says the game's is **more pronounced** than the port's. | Needs a capture of the publisher/developer splash across its fade, at a known frame cadence. The port's ramp comes from the declared keyframes; whether the game applies a **blur** on top — and whether what we read as a fade is one — is not answerable from the export. |
|
||||
|
||||
**On H2, three things the port can say that narrow it**, none of which settle it:
|
||||
|
||||
* The port draws the splash from the declared keyframe alphas only. It applies
|
||||
**no blur at all**, so "more pronounced in the game" is consistent with a
|
||||
post-effect the export does not describe, with a different ramp shape, or with
|
||||
both.
|
||||
* 🔴 **The `rest()` question is open in both directions** — see
|
||||
[`REFUTED.md`](../re/REFUTED.md)'s `rest()` pair after the 2026-09-01 R1
|
||||
reclassification. The two splashes are the *only* screens that reach the
|
||||
plateau-less fallback (title, main menu and `EXTRAS` reach it zero times), so
|
||||
**H2 lands exactly where our resting-pose heuristic is least trustworthy.**
|
||||
That is not a coincidence worth ignoring.
|
||||
* The register also has *"the declared keyframe timeline reproduces the captured
|
||||
splash"* now sitting at 🟡 `⟨our-reader⟩` rather than ❌, because the
|
||||
record-layout fix re-times a group's final pose and the entry was never
|
||||
re-derived under it. **H2 may already be half-answered by re-running that.**
|
||||
|
||||
**What would settle H2:** a capture of the developer splash across its build-in
|
||||
at a known cadence, compared frame-by-frame against the port's ramp — and, if
|
||||
they differ in shape rather than in extent, a draw capture naming what is
|
||||
submitted per frame.
|
||||
|
||||
## Still open — these block work
|
||||
|
||||
🔴 **This table's rows carry no derivation sha, and that is why they rot.** The standing instruction is to record the HANDOFF commit each row was derived from; every *prose* section added since does, and **every row in this table and the next does not**. On 2026-08-30 an audit found three stale rows here — one of them contradicted by a struck row four lines below it, claiming the boot ends on a plateless title when it had drawn the plate for weeks. The undated rows are exactly the ones that went stale, which is as close to a controlled experiment as this page is going to get.
|
||||
|
||||
Reference in New Issue
Block a user