Skip to content

feat(apps): touch across the demo fleet — taps, swipes, and the proof - #214

Draft
doodlewind wants to merge 4 commits into
mainfrom
feat/demo-touch
Draft

feat(apps): touch across the demo fleet — taps, swipes, and the proof#214
doodlewind wants to merge 4 commits into
mainfrom
feat/demo-touch

Conversation

@doodlewind

Copy link
Copy Markdown
Collaborator

Per review request: hero tap-to-count + the rest of the fleet on the same recipe.

The audit

demos status
hero, cards, chrome, cursor, gallery, notifications, settings, im, note, library, music already tappable via #212 — Focusable onPress IS the activation; zero diff
motions, stats swipe-to-page added (axis-locked whole-screen gesture, mirrors L/R buttons; zero nodes → goldens byte-exact)
cafe status-bar hint = the touch twin of START (menu rows already add on tap); only an active: press wash → untouched frames byte-identical
zoomlab follow-up: wants pinch-zoom — a two-contact recognizer the gesture layer doesn't offer yet
ipod-nano intentionally untouched — it IS a click-wheel interaction study

The proof

tests/sim.test.ts — hero, no app changes: four scripted taps on the button cross the count > 3 gate 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

@doodlewind

Copy link
Copy Markdown
Collaborator Author

Second commit: fleet-wide XMB covers + stick packaging (per the memory-stick refresh request).

  • gen-demo-covers now covers all 13 fragment demos (5 new entries: cafe/chrome/cursor/motions/zoomlab — family tiles + real sim-rendered PIC1 frames, assets committed)
  • psp-all gains a SKIP list (labs/variants, launcher, other-host apps) and stops repacking procedural art over authored covers — committed fragments ship as cargo-psp packed them
  • Deployed: 14 covered EBOOTs on the stick; kept octane ×8 / PocketFigma / OpenStrike / PocketJS-launcher / PocketShell / dev tools; removed POCKETJS, POCKETTALK, and the old uncovered PocketJS-* set

@doodlewind

Copy link
Copy Markdown
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. tools/vita-all.ts packages the fleet (14/14, unique TITLE_IDs); deployed to ux0:vpk/ for VitaShell install.

doodlewind and others added 4 commits August 4, 2026 15:40
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant