Skip to content

feat(kanban): add a project board shared by you and your sessions - #242

Merged
GoDiao merged 1 commit into
mainfrom
feat/kanban
Nov 9, 2026
Merged

GoDiao merged 1 commit into
mainfrom
feat/kanban

Conversation

@GoDiao

@GoDiao GoDiao commented Nov 9, 2026 •

Copy link
Copy Markdown
Owner

Closes #241

What changed

A persistent project board that the person and the agent sessions of a project share.

  • Server (sidecar). Each board is an append-only event log (boards/<project>/events.jsonl in the config directory) with a pure reducer (kanbanModel.ts). kanbanService.ts validates commands against the role table, appends events and plans notifications (kanbanNotifications.ts); notifications reach sessions as user turns with a new kanban origin. People use the REST API under /api/kanban; sessions use two control requests, kanban_query and kanban_command (kanbanControl.ts). All worktrees of a project share one board (resolveProjectRoot).
  • CLI tools. KanbanList, KanbanGet, KanbanCreate, KanbanUpdate; StartSession takes an optional card and role to start a session as a task's owner or reviewer.
  • Desktop. A board page per project (board and hierarchy views, search and filters, drag between columns), task detail in the workspace side panel, a "Needs me" list, permission cards for assignments, cancellation and acceptance changes, and links from board notifications in a session to the task.
  • Docs. PRD, technical design and research in docs/features/kanban/, a README section with screenshots, and CHANGELOG entries.

Rules worth reviewing

  • A task records its owner, reviewer and creator. The reviewer accepts the work; without one, the person does. A session cannot own and review the same task.
  • The creator owns the acceptance criteria and chooses the reviewer. A session that changes criteria it did not set, makes itself a reviewer, or, as creator and owner at once, chooses a reviewer, asks the user every time (safetyCheck, not classifier-approvable), in every permission mode. Creating the board, starting a session on a task and cancelling a task also always ask. These checks live in the CLI tools because the server cannot tell whether the user approved; the server enforces the role table.

Changes outside the board

  • The CLI now sets always_asks on every safetyCheck permission request, and the desktop hides "Allow for this session" for them, because that rule never took effect. This also applies to existing prompts such as edits under .git/.
  • Tools sent through the OpenAI Responses API now carry strict: false, so optional parameters stay optional.
  • sessionService resolves a session's project root through the new src/utils/projectRoot.ts; the .claude/worktrees/ cut now also applies when the root comes from the fallback project directory.

How I tested

  • bun test: 2625 pass, 0 fail. cd desktop && bun run lint: clean. bun run test -- --run: 2756 passed, 4 skipped.
  • The touched server and tool test files also pass with bun test --randomize --seed=1.
  • New tests were run against the code before each fix and failed there.
  • Manual: the dev app with a seeded demo board, in light and dark themes, in English and Chinese, and at H5 phone width; real sessions on OpenRouter models created sub-tasks, started sessions on tasks, submitted and reviewed work, and raised the acceptance-change approval card used in the README.

Known gaps

  • Editing the same field from two places at once keeps the later save.
  • Two clients resending the same failed notification at the same moment can deliver it twice.
  • Each board poll looks up every session on the board; fine at the sizes we tried, not measured beyond that.
  • "Later" in Needs me is stored per device.

@GoDiao
GoDiao merged commit f7f1445 into main Nov 9, 2026
4 checks passed
@GoDiao
GoDiao deleted the feat/kanban branch November 9, 2026 15:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

RFC: A project board for people and agent sessions

1 participant