feat(apps): touch across the demo fleet — taps, swipes, and the proof - #214
Draft
doodlewind wants to merge 4 commits into
Draft
feat(apps): touch across the demo fleet — taps, swipes, and the proof#214doodlewind wants to merge 4 commits into
doodlewind wants to merge 4 commits into
Conversation
Collaborator
Author
|
Second commit: fleet-wide XMB covers + stick packaging (per the memory-stick refresh request).
|
Collaborator
Author
|
Third commit: per-demo Vita LiveArea — the big-logo full-screen preview is gone; every demo's LiveArea bg/startup is its own sim-rendered frame (PNG8 via the established ImageMagick path), square icon0 stays default. |
Most of the fleet needed NOTHING: every Focusable-driven demo (hero, cards, chrome, cursor, gallery, notifications, settings, im, note, library, music) became tappable the moment #212 landed — a tap IS an activation. The new hero sim journey pins that: four taps on the untouched demo cross the count>3 gate through the default recognizer alone. The three raw-button demos get the matching idiom, golden-safely: - motions: a horizontal swipe turns the page (L/R + triggers unchanged) — a whole-screen axis-locked gesture, zero nodes added. - stats: swipe between the two boards, mirroring LEFT/RIGHT. - cafe: the status-bar hint is now the touch twin of START — tapping it places the order (menu rows already add on tap). The only visual is an active: press wash, so untouched frames stay byte-identical. Not adapted here (different interaction classes, tracked as follow-ups): zoomlab wants pinch-zoom (a two-contact recognizer the gesture layer does not offer yet) and ipod-nano IS a click-wheel study. Validated: canonical chain 0 fail, 54 web goldens byte-exact (the cafe wrapper is pixel-neutral), Vita3K motions 5/5 + stats 3/3 byte-exact, hero tap journey. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…packaging gen-demo-covers grows entries for the five uncovered demos (cafe, chrome, cursor, motions, zoomlab): the family tile layout with a per-demo mark and accent, PIC1 a real dimmed app frame pumped through the same deterministic sim the golden suites use. The generated apps/<demo>/psp/ fragments are committed — regenerate any of them with `bun tools/gen-demo-covers.ts`. psp-all learns two things: - a SKIP list: framework labs/variants of hero, apps whose primary target is another host class (note, ipod-nano), and the launcher — its real EBOOT embeds a registry via tools/launcher.ts, and a bare build would collide with that install's folder. - committed covers win: a demo carrying apps/<name>/psp/Psp.toml ships the cargo-psp-packed EBOOT untouched instead of having procedural box art repacked over the authored covers (which previously clobbered them). The fleet output is 14 EBOOTs, every one with authored XMB art. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ackaging The default Vita full-screen preview was the brand avatar blown up to 840x500 on every install — replaced across the fleet: - gen-demo-covers derives THREE renditions from ONE deterministic sim frame per demo: the PSP PIC1 (dimmed, as before) plus a Vita LiveArea pair — bg.png 840x500 (the real app frame between two family bands with the demo's accent rule, gently dimmed for the gate text) and startup.png 280x158 (the frame full-bleed). Vita art is indexed PNG-8 through the same ImageMagick conversion the default assets use (the package validator requires color type 3). apps/im joins the list vita-only (pspArt: false keeps its hand-made psp/gen-cover.ts art untouched). - tools/vita.ts overlays apps/<name>/vita/ onto the default sce_sys via the existing applicationAssets resolver — the square icon0 bubble stays the framework default unless a fragment overrides it. - tools/vita-all.ts (new): every fleet demo into dist/vita-all/PocketJS-<demo>.vpk, same SKIP list as psp-all, per-demo admission failures reported as skips. TITLE_IDs derive from each demo's application id, so side-by-side installs never collide. 14/14 VPKs built with authored LiveArea. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The pure-line swipe script passed on the broken axis verdict everywhere; only hardware failed. The spec's touch track now lands with an 8px vertical wobble before the horizontal sweep — the profile that turns the page ONLY through #215's deferred-dominance claim (verified both ways: 1/4 on the pre-fix framework, 2/4 with it). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
doodlewind
force-pushed
the
feat/demo-touch
branch
from
August 4, 2026 07:42
f8c2ebf to
28b5813
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Per review request: hero tap-to-count + the rest of the fleet on the same recipe.
The audit
onPressIS the activation; zero diffactive:press wash → untouched frames byte-identicalThe proof
tests/sim.test.ts— hero, no app changes: four scripted taps on the button cross thecount > 3gate purely through the default activation recognizer (docs/TOUCH.md §0), pinning "a bare Focusable is a button on touch hosts" at the app level.The golden-safety recipe (reusable)
Touch adaptations that add no nodes and no resting visuals (gestures;
active:-only washes) keep every golden byte-exact — motions 5/5 + stats 3/3 Vita3K, 54 web goldens, canonical chain 0 fail.🤖 Generated with Claude Code