feat(kanban): PM chat panel for conversational ticket management#226
Merged
Conversation
A "Board PM" chat panel inside the Kanban tab: describe features, bugs, or piles of ideas and the PM shapes them into tickets via conversation. - PmChatService drives one rune session per board, one headless turn per message (rune --prompt, then --resume <id> --prompt; requires rune with headless resume). Session ids persist to ~/.fleet/kanban/pm so conversations survive restarts. Errors are classified (rune missing / auth failure / crash), turns time out after 5 minutes, and in-flight children are killed on app shutdown. - Kanban MCP server gains a board-scoped token (RunScope is now a TaskScope | BoardScope union) and a PM_TOOLS set with explicit task_id parameters. Mutations route through KanbanCommands, so the PM obeys the same rules as the UI: running tasks are untouchable (status AND edits), review stays worktree-only, and tasks/features on other boards are invisible. The PM persona ships as an AGENTS.md rune loads into its system prompt. - Renderer: PmChatPanel (fixed right panel, KanbanDrawer pattern) with transcript bubbles + tool chips, a small pm-chat Zustand store, and a PM toggle button in the board toolbar. Created tickets appear live via the existing kanban:event refresh path. Verified end-to-end by driving the dev app over CDP: a chat message produced a ticket in triage with the PM confirming the id. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
setToolVisible fires updateSettings at window.fleet.settings, which the bare window.fleet test stub doesn't provide — the rejected promise surfaced as 2 unhandled errors and failed CI on main since b075f1f. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Summary
--prompt, then--resume <id> --prompt). Requires rune with headless resume (feat: headless resume (--resume with --prompt) + session id on stderr rune#25). Conversations persist across app restarts; rune-missing/auth/crash errors surface in the panel; turns time out after 5 min; in-flight children are killed on quit.RunScope→TaskScope | BoardScopeunion) and aPM_TOOLSset with explicittask_idparams. Mutations route throughKanbanCommands, so the PM follows the same rules as the UI: can't touch running tasks (status or edits), review stays worktree-only, other boards are invisible. PM persona ships as anAGENTS.mdrune loads into its system prompt.Test plan
npm run typecheck(node + web) andnpm run buildpasskanban_create→ ticket appeared in Triage with the PM confirming the id; concurrent turns on two boards ran isolatedNotes / follow-ups
kanban_kanban_create) — cosmetickanban_swarmexcluded from PM tools in v1 (needs a board-scoped workspace-inheritance variant)🤖 Generated with Claude Code