Repository navigation
feat(queen): a card tap opens its agent chat in the app framing the board - #1203
Conversation
…oard
Framed by app.t27.ai/game on the same origin, a tap on a kanban card (board
and map views) posts {v:1, type:'t27-app', kind:'open-card', repo, number,
title, column} to the parent instead of following the GitHub link; the
player opens the card's conversation with the agent there. Anywhere else --
t27.ai/#/queen, a cross-origin frame, the board alone -- and on cmd-click or
middle click, the issue opens as before.
Spec of record: gHashTag/t27 specs/automation/kanban-card-chat.t27
(t27#5389, EPIC t27#5388). Test: npm run test:card-chat, wired into
website-checks. Reaches prod only with a QUEEN_REF bump in 999 -- owner's
call; until then the player catches the anchor tap itself.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Reviewer bee Y: not merged. (1) CONFLICTING with main (Queen.tsx moved on: #1236, #1237, #1239). (2) Required status 'T27 work report' = FAILURE. (3) Edits .github/workflows/website-checks.yml -> needs the owner's |
|
bee review: left open -- CONFLICTING with main (head 91e3659). Touches |
…s-chat # Conflicts: # apps/website/src/pages/Queen.tsx
X Brain Health CheckScore: 100.0/100 X Brain is above merge threshold |
🧪 Brain Stress Test ResultsTests: 261/261 passed, 0 leaked |
What
A tap on a card in the Queen's kanban (board view and map view) now opens that card's conversation with the agent, when the board is framed by the app on the same origin (
app.t27.ai/game/kanbanframesapp.t27.ai/queen/). The board posts one message to its parent:Everywhere else the card stays a plain GitHub link:
t27.ai/#/queen, any cross-origin framer, and the board on its own all keep the link, because reading a cross-originparent.locationthrows, and that counts as "no";Where
apps/website/src/lib/queenCardChat.ts: the envelope andopenCardInApp. It has no imports, so node can test it directly.apps/website/src/pages/Queen.tsx:onClickon both card anchors.apps/website/scripts/queen-card-chat.test.mjs: 4 tests, run bynpm run test:card-chatand as the CI step "Card opens its chat".Contract
specs/automation/kanban-card-chat.t27(spec(automation): kanban-card-chat -- a card opens its agent conversation t27#5389), coveringMSG_V,MSG_TYPE,MSG_KINDandSAME_ORIGIN_ONLY.claude/kanban-chat-agent-history-4353da.Not in this PR
QUEEN_REFbump in 999. Whether to bump it is the owner's call.Test
tscreports no errors in the touched files. The 194 pre-existing errors are elsewhere (TrinityCanvas and others).🤖 Generated with Claude Code
{ "version": 1, "head_sha": "a77b4bffa883afb8319ac7efa9c9cad12db449e4", "summary": "A tap on a Queen kanban card, when the board is framed by the app on its own origin, now posts one open-card message to the parent so the app can open that card's agent chat; everywhere else the card stays a GitHub link.", "changes": [ "New apps/website/src/lib/queenCardChat.ts builds the open-card envelope (v 1, type t27-app, kind open-card, repo, number, title, column) and openCardInApp, which posts it only when the parent window has this page's own origin.", "Queen.tsx adds an onClick on the card anchors of both the board view and the map view; modified clicks, middle clicks and clicks already handled keep the plain GitHub issue link.", "New scripts/queen-card-chat.test.mjs with four node tests, exposed as npm run test:card-chat and wired into website-checks.yml as the step Card opens its chat.", "Merge of origin/main (90 commits behind) resolved one conflict in the Queen.tsx import block: kept main's leaveTabSelections and specsChatSpec imports and added the queenCardChat import beside them." ], "tests": [ { "command": "Website checks / checks job on head a77b4bff", "status": "failed", "result": "The job stopped at the Silicon coverage step, which also fails on main for the unclassified spec dmitrii-f-t27/trinity-memory/t27/rtl/gf16_attn.t27; ARIA references, the typecheck ratchet and the API contract passed before it.", "evidence": "https://github.com/gHashTag/trinity/actions/runs/37224843573/job/111502263460" }, { "command": "npm run test:card-chat (CI step Card opens its chat)", "status": "not_run", "result": "The CI step was skipped because the earlier Silicon coverage step failed, so CI has no result for it on this head.", "evidence": "Step 47 skipped in https://github.com/gHashTag/trinity/actions/runs/37224843573/job/111502263460" }, { "command": "CI / Build & Test", "status": "passed", "result": "The repository Build and Test job completed successfully on this head.", "evidence": "https://github.com/gHashTag/trinity/actions/runs/37224843542/job/111502263630" }, { "command": "Docs check / Check Documentation Links", "status": "failed", "result": "The documentation link check failed on this head; it is not a required check and was not investigated in this merge.", "evidence": "https://github.com/gHashTag/trinity/actions/runs/37224842076/job/111502259217" } ], "limitations": [ "The card-chat tests did not run in CI on this head because the website checks job stops at the Silicon coverage failure inherited from main.", "The receiving side, the player sheet in 999-multibots-telegraf, is not part of this PR, and no QUEEN_REF bump is made here.", "The silicon coverage failure on main (gf16_attn.t27 not classified in siliconHistory.ts) is left for a separate fix." ], "tags": [ "Queen", "kanban", "AgentChat" ], "blog": { "title": "A kanban card tap opens its agent chat inside the app", "summary": "On app.t27.ai the Queen board is framed by the app on the same origin, and a tap on a card now asks the app to open that card's conversation with the agent instead of jumping to GitHub.", "outline": [ "The board posts a single versioned open-card message carrying the repository, issue number, public title and column, and nothing else, to its parent window.", "The message is sent only when reading the parent's origin succeeds and equals the page's own origin, so a cross-origin framer or the bare board keeps the GitHub link.", "Command, control, shift and alt clicks, middle clicks and clicks already handled elsewhere keep their usual behaviour, so opening the issue in a new tab still works.", "The branch was brought up to date with ninety commits of main, and the only conflict was a shared import line in Queen.tsx where both sides' imports were kept." ] } }