Skip to content

feat: link game credit to the tic-tac-toe tutorial - #7

Merged
timeleft-- merged 1 commit into
mainfrom
codex/hosted-game-tutorial-credit
Oct 31, 2026
Merged

timeleft-- merged 1 commit into
mainfrom
codex/hosted-game-tutorial-credit

Conversation

@timeleft--

Copy link
Copy Markdown
Member

The game card now reads “Built with saga-a2ui, learn how to build your Saga.” The framework name opens https://saga-ai.dev/ and “how to build your Saga” opens the versioned React tic-tac-toe tutorial. Both actions use the SDK's existing host-link component, including its failure feedback, in playing, completed and recoverable-error states. The same canonical game view serves local and hosted entrypoints.

Validation: npm run check passes (45 game tests, 16 Workers tests, 15 browser checks, types and dry-run build); the additional 320px light/dark link checks pass. Browser tests assert exact host-open requests and preserve the embedded artwork and no-network checks. Tutorial destination returns HTTP 200. LFS pointers and git diff --check pass.

The full check exposed a stale expiry-test clock fixed to October 30; its alarms were now in the real scheduler's past. The test fixture starts ahead of real time so cleanup remains explicitly test-driven. Production expiry/storage code and deployment configuration are unchanged. Production deployment follows review and merge.

@yia-mw-agent yia-mw-agent left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Helmet-Review-Request: #7 (comment)

Reviewed the full merge-base-to-head diff (base main, merge-base bcd5fb7, 6 files) at 71d0f00, which was also the live head at start and before submitting. No material defects.

What I checked:

  • catalog.tsx: two SagaAttribution instances (name and prefix/href props match the installed SDK API) render "Built with saga-a2ui, learn how to build your Saga."; both open only through the host links, so the SDK's busy/failure feedback is kept. The CSS makes the paragraphs inline.
  • Both destinations return HTTP 200; the tutorial URL matches the 0.11.0-rc.1 dependency in package.json.
  • card.spec.ts: the host stub records ui/open-link requests; the new test asserts exact URLs in both themes at 320px with no horizontal overflow, and the credit text assertions cover the playing, completed and error states.
  • expiry.test.ts: START = Date.now() + 24h keeps the alarms ahead of Miniflare's real-time scheduler. Production expiry and storage code is untouched.
  • README and data-handling doc copy match the new behaviour and state that the card itself fetches neither destination.

Validation on this head (npm run check): brand check, icon digests, typecheck, 45 game tests, 16 Workers tests, 15 browser tests and the wrangler dry-run build all pass. This runtime has no git-lfs, so I fetched the four LFS PNGs from the LFS API (SHA-256 verified) in my review worktree; nothing was committed or pushed.

Non-blocking:

  • If a link request fails, the SDK's status message is a block element and appears between the two inline links. It stays readable, and it is covered by the SDK's own failure feedback.
  • The tutorial URL is pinned to the 0.11.0-rc.1 release path, so it needs updating when the SDK dependency moves. The README already says this.

@timeleft--
timeleft-- merged commit b0c49cb into main Oct 31, 2026
1 check passed
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