Skip to content

fix(components): portal hosts are hit-transparent — the constant-33 hardware bug - #213

Merged
doodlewind merged 1 commit into
mainfrom
fix/portal-hit-pass
Aug 3, 2026
Merged

fix(components): portal hosts are hit-transparent — the constant-33 hardware bug#213
doodlewind merged 1 commit into
mainfrom
fix/portal-hit-pass

Conversation

@doodlewind

Copy link
Copy Markdown
Collaborator

The first real-hardware regression of the phase-2 touch program, found live on a Vita and diagnosed over the svc channel.

The bug

Every touch on the device resolved to one constant node id (33) — the TextField's Portal host: a full-screen absolute box in the overlay layer. #209 made the overlay ROOT hitPass, but portal hosts inside it are full-screen pure containers too. Result: list pan dead, field tap dead, OSK alive (modally exempt).

Why every rig missed it

rig why it lied
pocket-youtube sim vendored wasm was stale (no op 42 export) → journeys silently ran the ink-query fallback, never the fact path
Vita3K e2e the only touch spec drove OSK keys — overlay content, immune
pocketjs unit tests mock hosts have no layout — facts were injected by hand

The fix + the immune system

  • hitPass on Portal hosts + the TextField dock wrapper (plumbing never claims; modal scrims are portal content and keep blocking)
  • tests/portal-hit.test.ts — REAL-core mount test: an empty-chrome Portal must not swallow bounds hits (red without the fix)
  • im-rowtap golden made permanent on both oracles — app-layer tap-through-the-stack coverage
  • (pocket-youtube follow-up: harness always rebuilds the vendored wasm — closing the stale-wasm class)

🤖 Generated with Claude Code

…ardware bug

Every touch on real Vita hardware resolved to ONE node — the TextField's
Portal host — killing list pans and field taps while the OSK (modally
exempt) kept working. The host is an explicit full-screen absolute box in
the overlay layer; #209 marked the overlay ROOT hitPass but every portal
host inside it was another full-screen pure container that still claimed
every bounds hit.

Why no rig caught it: the pocket-youtube sim's vendored wasm was STALE
(predating op 42), so its journeys silently exercised the ink-query
FALLBACK, not the fact path; the Vita3K suite's only touch spec drove OSK
keys — overlay content, immune. The on-device svc diagnostic (every
touch-down reporting x,y,hit) showed the constant node id across the whole
screen; rebuilding the vendor wasm reproduced it in the sim in one probe.

- Portal host + the TextField dock wrapper: hitPass (pure plumbing never
  claims; a modal scrim is portal CONTENT and keeps blocking).
- tests/portal-hit.test.ts: the REAL-core mount test mock hosts cannot
  express — a mounted empty-chrome Portal must not swallow bounds hits
  (fails without the fix, registered in the chain).
- golden-specs: im-rowtap made permanent — app-layer tap-through-the-stack
  coverage on BOTH oracles (web + Vita3K), the hole this bug lived in.

Validated: canonical chain 0 fail, 54 web goldens, im-rowtap + im-touch
Vita3K byte-exact.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@doodlewind
doodlewind marked this pull request as ready for review August 3, 2026 08:38
@doodlewind
doodlewind merged commit 5dea701 into main Aug 3, 2026
@doodlewind
doodlewind deleted the fix/portal-hit-pass branch August 3, 2026 08:38
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