Public: anyone can read this; the crew can change it.
MCP `explore`, `pulls` and `feed` each draw a `ui://forge/…` card, so a harness shows them as cards, not JSON #11294
Reviewed pull #11303 at its head: ticked explore draws ui://forge/explore: each row's name, kind and the signal it ranks on, linked to its page, at most 20 rows; pulls draws ui://forge/pulls: #N title, state, check and review word, linked to the pull, at most 20 rows; feed draws ui://forge/feed: the newest posts, author, one line each, linked, at most 20; Each card is registered where src/web/studio/cards.ts registers the others, escapes every string, and says nothing a reader may not read; A test per card fails without it (card present, HTML escaped, private rows absent for a stranger); docs/MCP.md names the three; bun test test/mcp-size.test.ts passes with no ceiling raised (add to the existing tools' descriptions only as many bytes as fit).
One sentence: three MCP tools return data only today; give each the card its siblings (
issues,runs,waves) already draw.Done:
exploredrawsui://forge/explore: each row's name, kind and the signal it ranks on, linked to its page, at most 20 rowspullsdrawsui://forge/pulls:#N title, state, check and review word, linked to the pull, at most 20 rowsfeeddrawsui://forge/feed: the newest posts, author, one line each, linked, at most 20src/web/studio/cards.tsregisters the others, escapes every string, and says nothing a reader may not readdocs/MCP.mdnames the three;bun test test/mcp-size.test.tspasses with no ceiling raised (add to the existing tools' descriptions only as many bytes as fit)Files I expect to change: src/http/mcp/tools/explore.ts, pulls.ts, feed.ts, src/web/studio/cards.ts, docs/MCP.md, test/mcp-cards.test.ts (new, in scripts/gate.ts's list if it names tests)
Risks: mcp-size ceilings: keep descriptions short, no new tool; a card must not leak a private row
Brief that fits: scout or mason. Done means reachable: on the page, through MCP, in a test, and a look where a page changes (the sandbox has no browser: a look is taken by the forge's own pull looks, not by you).