Skip to content

feat(apps): iphone16-demo - #258

Merged
doodlewind merged 2 commits into
pocket-stack:mainfrom
NathanWalker:feat/iphone16-demo
Aug 14, 2026
Merged

feat(apps): iphone16-demo #258
doodlewind merged 2 commits into
pocket-stack:mainfrom
NathanWalker:feat/iphone16-demo

Conversation

@NathanWalker

@NathanWalker NathanWalker commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Stacked on #257 (feat/tick-rate); only the last commit is new.

Following the apps/iphone2g-demo pattern, this adds apps/iphone16-demo.

Validated: bun tools/ios.ts build iphone16-demo --density=4 --hz=120 resolves the ios-dev plan and builds; bunx tsc --noEmit and bun test tests/ios-profile.test.ts pass.

🤖 Generated with Claude Code

@NathanWalker NathanWalker changed the title feat(apps): iphone16-demo — hero wrapper with device-true copy feat(apps): iphone16-demo Aug 10, 2026
@NathanWalker
NathanWalker marked this pull request as ready for review August 10, 2026 01:37
doodlewind added a commit to NathanWalker/pocketjs that referenced this pull request Aug 10, 2026
…ncher display union

Review fixes for pocket-stack#258:

- apps/iphone16-demo/pocket.json landed without its row in the
  admission-matrix test, so the unit gate failed (expected[demo]
  undefined for every committed manifest is the test's contract).
  iphone16-demo resolves exactly like nsengine: vita-only through the
  shared touch + integer-fit contract, private ios-dev otherwise.

- The committed launcher display registry (a cross-target union; each
  host intersects at runtime) regenerated via `bun tools/launcher.ts
  scan`, now carrying both vita-only demos, and the Vita-equality pin
  in tests/launcher-sim.test.ts evolves into subset + exact delta
  (["iphone16-demo-main", "nsengine-main"]). This overlaps the review
  commit on feat/ios-cli (f5a5975), which makes the same registry/test
  change for nsengine alone — whichever lands second reconciles
  trivially in the stack rebase.

Verified: `bun run test` 11/11 stages green (unit and launcher sim
both failed before this commit).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@doodlewind

Copy link
Copy Markdown
Collaborator

Review — content is right, but the branch broke the unit gate; fixed and pushed

Verdict: the demo itself is clean — after the pushed fix the full gate is green, so this merges once the stack under it does (it stacks on #257, which has open design findings of its own).

What I ran

  • bun run test on this branch as pushed by the PR: FAIL in the unit stagetests/platform-contracts.test.ts "every committed demo manifest lands on the expected admission matrix" (378 pass / 1 fail): apps/iphone16-demo/pocket.json landed with no matrix row, and that test fails by design for every unlisted manifest. The PR body's validation ran bun test tests/ios-profile.test.ts only — the admission matrix and the launcher stages live elsewhere in the gate, which is exactly why bun run test is the bar.
  • With the pushed fix: 11/11 stages green in 40.5 s.
  • The demo renders end-to-end through the pocket-apple host (bun tools/build.ts iphone16-demo-main, then the render_hero example): 180 frames, non-blank, byte-identical across two instances — "Tap Me", the iPhone 16 Pro device line, and the FPS tile all correct. Built at --hz=120 the headline and tile read 120. (Caveat that belongs to feat(core): per-realm tick rate — fixed-step at a declared hz #257, not this PR: the host in that experiment never called set_tick_rate, and nothing objected to the mismatch.)

Pushed to this branch (822dc4c)

  1. "iphone16-demo": [false, true, false] in the admission matrix — it resolves exactly like nsengine (vita-only through the shared touch + integer-fit contract, private ios-dev otherwise).
  2. The launcher display union regenerated (bun tools/launcher.ts scan) with both vita-only demos, and the Vita-equality pin in tests/launcher-sim.test.ts evolved to subset + exact delta. Note: this overlaps the review commit on feat/ios-cli (f5a5975), which makes the same registry/test change for nsengine alone — whichever lands second reconciles trivially in the stack rebase.

Notes

  • app.tsx/main.tsx follow the repo conventions (framework imports from @pocketjs/framework/*, mounted entry, // @title header) and the manifest mirrors iphone2g-demo's shape with the 480×272 integer-fit viewport. Nothing else to flag in the 42 added lines.
  • One consequence of the manifest worth being deliberate about: like nsengine, this demo now appears in the committed launcher display union and is Vita-admissible by contract, so it shows up in Vita's Cover Flow deck. If iOS demos shouldn't ride along there, the exclusion belongs in the manifest/admission story, not the registry file.

🤖 Generated with Claude Code

@doodlewind

Copy link
Copy Markdown
Collaborator

Status update: #255 and #256 are merged. Your d00b12cb (chore: use latest ios-quickjs) landed inside #256's merge — the pin lives in hosts/apple/ns-shell/package.json, which is #256's file, so it was cherry-picked onto feat/ios-cli with authorship preserved rather than waiting for this branch. It will fall out of this branch on rebase as already-applied.

This PR is otherwise ready (gate was 11/11 green with the review fix) and now waits only on #257 — once that merges, rebase onto main and the remaining diff should be just apps/iphone16-demo/ plus the admission-matrix/launcher rows from the review commit.

🤖 Generated with Claude Code

doodlewind added a commit to NathanWalker/pocketjs that referenced this pull request Aug 12, 2026
…ncher display union

Review fixes for pocket-stack#258:

- apps/iphone16-demo/pocket.json landed without its row in the
  admission-matrix test, so the unit gate failed (expected[demo]
  undefined for every committed manifest is the test's contract).
  iphone16-demo resolves exactly like nsengine: vita-only through the
  shared touch + integer-fit contract, private ios-dev otherwise.

- The committed launcher display registry (a cross-target union; each
  host intersects at runtime) regenerated via `bun tools/launcher.ts
  scan`, now carrying both vita-only demos, and the Vita-equality pin
  in tests/launcher-sim.test.ts evolves into subset + exact delta
  (["iphone16-demo-main", "nsengine-main"]). This overlaps the review
  commit on feat/ios-cli (f5a5975), which makes the same registry/test
  change for nsengine alone — whichever lands second reconciles
  trivially in the stack rebase.

Verified: `bun run test` 11/11 stages green (unit and launcher sim
both failed before this commit).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@doodlewind

Copy link
Copy Markdown
Collaborator

Rebased onto the current #257 head and pushed, so this branch is a coherent stack again instead of conflicting against main.

Verification: bunx tsc --noEmit clean, bun run test 11/11 stages green.

The branch is now tick-rate → tick-rate review fix → iphone16-demo → iphone16-demo review fix. Once #257 squash-merges this needs one more rebase onto main, after which the diff should be just apps/iphone16-demo/ plus the admission-matrix and launcher rows.

🤖 Generated with Claude Code

One note on the gate, since it cost me a couple of reruns: the unit stage failed 383/1 twice here, including with no concurrent run, but the same 38 files pass 384/0 standalone and a full-gate rerun goes 11/11 green in 39 s. That is the known macOS Gatekeeper first-launch stall on freshly linked test binaries (symbian-runtime / iphone2g-device-transaction), which exists on main — not anything this branch introduced.

NathanWalker pushed a commit to NathanWalker/pocketjs that referenced this pull request Aug 14, 2026
…ncher display union

Review fixes for pocket-stack#258:

- apps/iphone16-demo/pocket.json landed without its row in the
  admission-matrix test, so the unit gate failed (expected[demo]
  undefined for every committed manifest is the test's contract).
  iphone16-demo resolves exactly like nsengine: vita-only through the
  shared touch + integer-fit contract, private ios-dev otherwise.

- The committed launcher display registry (a cross-target union; each
  host intersects at runtime) regenerated via `bun tools/launcher.ts
  scan`, now carrying both vita-only demos, and the Vita-equality pin
  in tests/launcher-sim.test.ts evolves into subset + exact delta
  (["iphone16-demo-main", "nsengine-main"]). This overlaps the review
  commit on feat/ios-cli (f5a5975), which makes the same registry/test
  change for nsengine alone — whichever lands second reconciles
  trivially in the stack rebase.

Verified: `bun run test` 11/11 stages green (unit and launcher sim
both failed before this commit).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@NathanWalker

Copy link
Copy Markdown
Contributor Author

Rebased onto the new #257 head (the three review fixes just pushed there), replaying this PR's two commits — no conflicts, the demo files are disjoint from the tick-rate changes. Verified on the stack: bun run test 11/11 green (37.4 s), bunx tsc --noEmit clean. Once #257 squash-merges, one more rebase and the diff should still be just apps/iphone16-demo/ plus the admission-matrix and launcher rows.

🤖 Generated with Claude Code

NathanWalker and others added 2 commits August 15, 2026 00:17
The stock hero bakes PSP-demo defaults (Press Circle, 60 in the FPS
tile, "running on a 2005 handheld"). Wrap it like apps/iphone2g-demo
does so the ios-dev embedding shows its own device: Tap Me, an FPS tile
tied to the baked tick rate, and an iPhone 16 Pro device line.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ncher display union

Review fixes for pocket-stack#258:

- apps/iphone16-demo/pocket.json landed without its row in the
  admission-matrix test, so the unit gate failed (expected[demo]
  undefined for every committed manifest is the test's contract).
  iphone16-demo resolves exactly like nsengine: vita-only through the
  shared touch + integer-fit contract, private ios-dev otherwise.

- The committed launcher display registry (a cross-target union; each
  host intersects at runtime) regenerated via `bun tools/launcher.ts
  scan`, now carrying both vita-only demos, and the Vita-equality pin
  in tests/launcher-sim.test.ts evolves into subset + exact delta
  (["iphone16-demo-main", "nsengine-main"]). This overlaps the review
  commit on feat/ios-cli (f5a5975), which makes the same registry/test
  change for nsengine alone — whichever lands second reconciles
  trivially in the stack rebase.

Verified: `bun run test` 11/11 stages green (unit and launcher sim
both failed before this commit).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@doodlewind
doodlewind merged commit dcbf536 into pocket-stack:main Aug 14, 2026
@doodlewind

Copy link
Copy Markdown
Collaborator

Merged as dcbf536, right after #257. Rebased onto the post-#257 main (--onto origin/main d6ae5f03) so only this PR's two commits replay; net diff is exactly the seven files predicted — apps/iphone16-demo/ plus the admission-matrix and launcher-union rows. Gate 11/11 green (36.9 s), bunx tsc --noEmit clean.

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.

2 participants