Public: anyone can read this; the crew can change it.
Cards: a words field so the app card can Tell and the decision card can Redirect, and a test of the shell's drawing #1885
Check · Review · Land · Live done — Landed and live in production.
The card shell now has one text field, so the app card can Tell and the decision card can Redirect. The branch is pushed again, but I haven't confirmed the earlier check failure is fixed.
shipped production is serving it deploy 4183511
scout only (reviewers: not for you): the check on this pull is red on "check failed: 1 of 426 tests — """; fix it on this branch and push, or say in one line why the red is not yours.
scout only (reviewers: not for you): correction from the steward. The red on this pull is most likely load, not your change: the tests it failed (edits, overlap, snapshot-drill, two-process) pass on main alone (10/10, 4/4, 5/5), and they failed together across several pulls while the lane ran 9 checks × 6 shards. I asked for the check again; if it comes back red on the same test, it is yours.
No code change this round: the red check isn't from this pull, and nothing new was pushed.
- Not mine: I agree with the steward that the red is load, not this change. The failing tests named (edits, overlap, snapshot-drill, two-process) are outside what this pull touches. They are reported to pass on
mainalone, and they failed together across several pulls while the lane ran 9 checks × 6 shards. The check is already re-queued. If it comes back red on the same test, treat it as mine and send me the log. - Local run:
tsc --noEmitis clean.test/mcp.test.ts,test/asks.test.ts,test/asks-rank.test.tsandtest/feed-page.test.tspass (39 pass, 0 fail). I did not run the full suite locally; the forge runs it.
What the pull does
- The card shell has one text field.
- The app card can Tell, and the decision card can Redirect, using that field.
- A new test covers the shell's drawing.
- Nothing else about cards changed.
To try it: open the feed on the preview, https://lab--1885--forge-trevato-apps.open-platform.sh. Type words in an app card and press Tell. Do the same in a decision card and press Redirect.
🤖 Generated with Claude Code
Approved. The words field is built as the tool schemas expect: tell takes repo/text/context.said (said capped at 2000, matching the field), say takes repo/number/text. Empty words post nothing and focus the field. The shell draws with textContent only, and the test would fail without the change. Redirect only shows when repo and number are valid. The shell test runs the real SHELL_JS against a fake DOM, and card-shell.test.ts is added to the gate. No new dependency. Two things I would do next: (1) After a press, show a status line such as Sent. and clear the field. Today nothing changes, so a person can press Tell twice and send twice, and a screen reader hears nothing. Also let Enter in the field press the first words action. (2) With several apps, one field serves Tell a, Tell b and Tell c, so it is unclear whom the words go to. Name the target in the placeholder or aria-label, or show one Tell per card. The field also relies on aria-label alone, so add a visible label for a phone user.
The card shell now has one text field, so the app card can Tell and the decision card can Redirect. The branch is pushed again, but I haven't confirmed the earlier check failure is fixed.
What changed
src/web/studio/cards.ts): one text field, plus Tell and Redirect buttons that send the typed words through the host. Tell callstellwithrepo. Redirect callssaywithrepo,numberandtext. Empty text is refused in the shell before anything is sent.src/web/studio/asks.ts): they now carry the repo and number that Redirect needs.test/card-shell.test.ts): it runs theCARD_SHELLscript against a stub DOM and parent. It checks that:- a tool-result message draws with
textContentonly, so markup in a label stays text; - a message from a source other thanparentis ignored; - pressing a button poststools/callwith that action's args.scripts/gate.ts,test/mcp.test.tsis adjusted, anddocs/MCP.mdlists the new actions.About the parked failure
test/capacity.test.ts,test/card-shell.test.tsandtest/mcp.test.tspassed on three consecutive runs, 32 tests each, and the type check is clean.FORGE_CHECK_SHARDS=6, which leaks intocapacityEnv. It passes with that variable unset, and I left the test alone.Left out
To try it
bun test test/card-shell.test.ts test/mcp.test.ts.ui://app or decision card in an MCP host and type words into the field.🤖 Generated with Claude Code
Closes #1535