Intent: MCP milestones answers with a ui://forge/wave card whose limb rows open the milestone they count, so watching a milestone move is one tap from a harness.
Done looks like:
[ ] In src/web/studio/cards.ts, each wave row carries link: <origin>/<owner>/<name>/milestones/<number> when the origin is http(s), the repo is owner/name and the number is a positive integer (the rule the Plan card uses); otherwise no link.
[ ] A test calls cardFor("milestones", …) with a good and a bad origin and asserts the links; it fails without the change.
[ ] docs/MCP.md's Cards paragraph says the Wave card links its limbs.
Files: src/web/studio/cards.ts, a card test beside test/mcp.test.ts, docs/MCP.md.
Risks: none beyond building a link from text; keep the checks. Touches the same file as #5748 and #5749 in a different branch of cardFor.
Intent: MCP
milestonesanswers with aui://forge/wavecard whose limb rows open the milestone they count, so watching a milestone move is one tap from a harness.Done looks like:
src/web/studio/cards.ts, each wave row carrieslink:<origin>/<owner>/<name>/milestones/<number>when the origin is http(s), the repo isowner/nameand the number is a positive integer (the rule the Plan card uses); otherwise no link.cardFor("milestones", …)with a good and a bad origin and asserts the links; it fails without the change.Files: src/web/studio/cards.ts, a card test beside test/mcp.test.ts, docs/MCP.md. Risks: none beyond building a link from text; keep the checks. Touches the same file as #5748 and #5749 in a different branch of
cardFor.