Skip to content

spec(t27f): demo camera and scene kind as scalar entry points for deck hosts - #9984

Merged
gHashTag merged 1 commit into
masterfrom
t27f/reel-demo-camera
Oct 17, 2026
Merged

gHashTag merged 1 commit into
masterfrom
t27f/reel-demo-camera

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Summary

This PR adds scalar entry points to specs/t27f/reel.t27 that let a wasm host place the demo reel's map on a T27fDeck slide (specs/t27f/deck.t27, #9979). Closes #9983. Refs #9980, #9978.

slide_x, slide_y and slide_r in deck.t27 take the reel camera (cx, cy, hw). Until now reel.t27 exposed that camera only through the array-taking camera_cx, camera_cy and camera_hw, and a wasm export cannot receive arrays. The new entry points:

  • demo_cx(f), demo_cy(f) and demo_hw(f): the demo camera at base frame f;
  • demo_kind(scene): the scene kind, or SCENE_KIND_COUNT for a scene the demo does not have, which deck's layout_for maps to LAYOUT_NONE;
  • demo_scene_start(scene): the first frame of a scene, or END_OF_REEL. deck's card_alpha(k, n) needs the frame within the scene.

The header's "not claimed" line now names both importers, t27f_view and T27fDeck. It no longer says that only t27f_view imports this file, which stopped being true when deck.t27 landed.

Test added

demo_camera_is_the_reel_camera checks the following:

  • At the focus still, the camera stands on cell 10 at FOCUS_HW. At the lens still, it stands at lens_cy(0).
  • For every demo scene, on the tall preset, demo_sx and demo_sy equal screen_x and screen_y of the new camera.
  • demo_scene_at(demo_scene_start(s)) == s, and the start is never after the still.
  • The demo has no title scene: scene 0 is the overview and scene 4 is the call. Out-of-range scenes return SCENE_KIND_COUNT and END_OF_REEL.

Evidence (Railway lab, t27c 0.5.2 built at 57474a4, zig 0.16.0)

  • Verbose test report: 20/20 tests pass, 0 vacuous. The new test runs 32 asserts.
  • Four negative controls, each a mutated copy of the spec, are all killed. Each one fails demo_camera_is_the_reel_camera (19 pass, 1 fail):
    • n4: demo_hw returns OVERVIEW_HW;
    • n5: demo_kind guards with > in place of >=;
    • n6: demo_scene_start returns the still frame;
    • n7: demo_cy returns OVERVIEW_CY.
  • deck.t27 from master, compiled next to this file: 14/14 tests pass, 0 vacuous.
  • sha256 of specs/t27f/reel.t27: c47b21cea1d7169da6528e321cf2d2c513d3f552c0cd04fe9d37bbd5314ccacf.

The consumer is the deck look of gHashTag/t27-mcp t27f_view, in a PR stacked on gHashTag/t27-mcp#3.

🤖 Generated with Claude Code

…k hosts (Closes #9983)

demo_cx/cy/hw expose the demo reel camera at frame f, demo_kind and
demo_scene_start the scene's kind and first frame, so a wasm host can
call T27fDeck slide_x/slide_y/slide_r and card_alpha. Test
demo_camera_is_the_reel_camera ties them to demo_sx/demo_sy; lab 20/20,
0 vacuous, 4/4 negative controls killed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gHashTag
gHashTag enabled auto-merge (squash) October 17, 2026 15:21
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-17 15:21:46 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 49
PRs with All Checks Green 1
READY 0
FAILING 49
PENDING 0
NO CHECKS YET 0

These columns do not partition: 0 + 49 + 0 + 0 = 49, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=e769ef021713 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

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.

spec(t27f): demo camera and scene kind as scalar entry points for deck hosts

1 participant