Repository navigation
docs(blueprints): propose React starter, view conversation and tic-tac-toe guide - #320
Merged
Merged
Conversation
…c-toe guide Add two draft feature Blueprints for design review: - getting_started_tracks: a qualified react-mcp/hono starter pair, a shorter setup guide with Lit notes and React tic-tac-toe tracks, the tic-tac-toe example played with the host's assistant, and the brand expansion change. - view_conversation: a delivery-neutral Conversation contract whose appendMessage lets a view hand the assistant its turn, implemented for MCP Apps ui/message and exposed on ViewHost in both stacks. Record the draft successor in application_setup's Status, index both designs, and add the turn-loop and conversation diagrams. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vus14ntFwS1mYMaD3siMkK
timeleft--
marked this pull request as ready for review
October 28, 2026 20:55
Settle the open decision: view becomes optional on operation declarations, so play_move stays a saga operation that opens no card. Record three requirements (identical execution guarantees, no UI association on definitions or results, one consumer interface), their verification, and that the change ships with the view-conversation SDK release. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vus14ntFwS1mYMaD3siMkK
…finished games - appendMessage takes an optional context. MCP Apps sends ui/update-model-context, then ui/message. By default a context that cannot be delivered blocks the message; bestEffort opts into sending it anyway, and the result reports which stage stopped or was skipped. - The move message names the game and never restates the board. The accepted game travels as context, and the new viewless get_game operation is the assistant's fallback read and the board's wait. - A winning or drawing X move appends a result message and asks for no move. - Append results are applied only while the board still shows the same game and move, because an action's current() ends with its hook. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vus14ntFwS1mYMaD3siMkK
yia-mw-agent
approved these changes
Oct 28, 2026
yia-mw-agent
left a comment
Contributor
There was a problem hiding this comment.
Helmet-Review-Request: #320 (comment)
Reviewed the full merge-base-to-head diff (base main, merge-base a5cf9d0, head 6c3638b, 10 files, +564/-0) at the exact head.
No material defects found. This PR is documentation and diagrams only, and both Blueprints stay status: draft.
What I checked:
- Both new Blueprints follow the lifecycle rules in blueprints/README.md: draft status, a Status section, Implementation "not started", and the successor note in application_setup.blueprint.md that leaves the approved design current until approval.
- Relative links and anchors in the four changed Markdown files all resolve (local script). The SVG, PNG pointer and Mermaid source for both diagrams are present.
- The repo claims the designs rest on match the tree:
templates/has only the Lit templates;SUPPORTED_PAIRSand thereact-mcprefusal tests exist in scripts/saga.ts and saga.test.ts;OperationViewis currently required in packages/mcp/src/server/operation.ts;hostLinksFromApplives in packages/mcp/src/view; the Lit stack'sViewHosthaslinks, the React stack's does not; the lit-hono pins (hono 4.13.13, @hono/node-server 1.19.17, @modelcontextprotocol/hono 2.0.2) and the<starter-appmarker in operations.ts are as described. - CI on this head passes: build/test/qualification, documentation and policy, version policy, GitBook.
check-blueprint-lengthreports only the advisory word-count warnings. A localmw-version.pyrun failed only for lack of a PR title in my environment, andcheck-lfs.pyfailed because git-lfs is not installed here. I relied on the passing CI jobs for both.
Non-blocking observations:
- This approval covers the PR's content and hygiene. It is not the human design approval the description asks for. Both Blueprints need that approval of this head revision, diagrams included.
- The host behaviour the designs rely on (
ui/message,ui/update-model-context, how a host places a model call's card) is unverified in Claude, ChatGPT and Alexa+. The PR says so, and the wait cadence is correctly left as an open decision. play_moveis callable by the model for either player. The design states this tradeoff and keeps the server authoritative throughexpectedMoveNumber.
This was referenced Oct 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Change
This PR proposes two draft designs for review. It changes no code.
Today a React developer has a published stack but no starter. Nothing shows an assistant taking part in an app, either. A view can call its own server, but it has no supported way to tell the assistant that it is the assistant's turn.
status: draft) proposes:saga init --a2ui-stack react-mcp --server hono DIR, from a newtemplates/react-honowhoseserver/shares thelit-honotext;play_moveoperation. The server enforces turns, occupancy, completion andexpectedMoveNumberstaleness.context. The message names the game and never restates the board, and the viewlessget_gameis the assistant's fallback read.get_gamewait. MCP Apps delivers a model call's result to a card mounted for that call, not to the board that is already open.viewbecomes optional on saga operation declarations, soplay_moveandget_gameare saga operations that open no card. Three requirements apply:@saga-a2ui/mcp;status: draft) proposes a delivery-neutralConversationcontract in@saga-a2ui/core, exposed asViewHost.conversationin both stacks:appendMessage(text, {role?, context?}). On MCP Apps,contextbecomesui/update-model-contextsent beforeui/message.context.bestEffortopts into sending the message anyway. The result names the stage that stopped the append, or the context that was skipped.current()ends with its hook.message/send, with context as a data part) but not proposed.diagrams/tic-tac-toe-turn-loopanddiagrams/view-conversation, ship with their Mermaid sources.Neither design is approved. This PR asks for human design approval of both Blueprints at this PR's head revision, including the diagrams. Implementation tickets follow only after that approval. The one remaining open decision is the wait's cadence and limit, which host runs will settle.
Validation
python3 scripts/check-blueprint-length.py --base origin/main: only advisory length warnings.python3 scripts/mw-version.py check --base origin/main: "Version policy passed", with no component changed. Blueprints and diagrams are excluded paths..mmdsources with Mermaid 11.4.1 in Chromium, then inspected.python3 scripts/check-lfs.pyvalidated the PNG pointers, andgit lfs pushuploaded them.@modelcontextprotocol/ext-apps2.0.3 typings and is unverified in Claude, ChatGPT and Alexa+:ui/messageandui/update-model-contextsupport;🤖 Generated with Claude Code
https://claude.ai/code/session_01Vus14ntFwS1mYMaD3siMkK