Queue worktree intents before spawning terminals#858
Conversation
Hickey/Lowy Analysis
Hickey rationaleThe first pass caught places where the same concept was being represented in separate shapes depending on where it appeared. The workspace switcher now builds a unified item list for search/facets and projects live terminals and queued worktrees back into their rendering lanes, instead of making the search model learn two partially duplicated worlds. Queue mutation also moved behind Lowy rationaleThe volatile part of terminal creation is the initial metadata envelope, not each caller's argument list. Queued worktree behavior is likely to evolve independently from presentation, so the final shape keeps lifecycle rules in a small client-side owner and lets UI surfaces consume that owner through simple start/remove/enqueue operations. |
|
| Step | Status | Duration | Verification |
|---|---|---|---|
| sync | ✓ | 1s | git fetch ok; forge=github; noGit=false |
| research | ✓ | 4m 39s | mapped persisted intent, queued worktree surface cell, spawn-time agent selection, UI display, and test coverage |
| branch | ✓ | 4s | created feat/queued-worktree-intent from origin/master |
| implement | ✓ | 5m 20s | implemented persisted terminal intent, queuedWorktrees surface cell, palette queue/start flows, workspace switcher queued column, and focused unit coverage |
| check | ✓ | 43s | just check passed (typecheck clean; biome reported existing warnings) |
| docs | ✓ | 37s | updated README feature/architecture notes and surface inventory for queuedWorktrees and terminal intent |
| fmt | ✓ | 5s | just fmt ran successfully |
| commit | ✓ | 11s | committed 920237d and pushed feat/queued-worktree-intent |
| hickey+lowy | ✓ | 7m 21s | hickey/lowy review completed; committed 074c4d9 centralizing initial metadata and queued worktree lifecycle |
| police | ✓ | 1m 5s | code-police completed; committed 71d8785 to validate queued worktree names with WorktreeNameSchema |
| test | ✓ | 3m 50s | unit tests passed; just test-quick features/workspace-switcher.feature features/worktree.feature features/worktree-agent.feature features/command-palette.feature features/session-restore.feature passed |
| create-pr | ✓ | 26s | draft PR created at #858; hickey/lowy analysis posted |
| ci | ✓ | 24m 22s | just ci passed on 32a354b; explicit status cross-check found no missing or non-success ci/* contexts |
| evidence | ✓ | 1m 12s | posted ## Evidence comment with queued-worktree intent screenshot: #858 (comment) |
| Total | 53m 11s |
Slowest step: ci (24m 22s)
Optimization suggestions
- CI dominated the run. For follow-up-only fixes on this PR, start from the CI entry point instead of repeating the full workflow.
- Full CI exposed timing flakes in Code tab rendering and agent mock detection; when touching UI/e2e surfaces, run the focused slices before the matrix:
features/code-tab.feature,features/codex.feature, andfeatures/opencode.feature. - Hickey/Lowy took 7m 21s because the first pass found real lifecycle/boundary issues. Future task briefs should name whether queued work is terminal-owned or backlog-owned up front; that reduces structural churn.
Workflow completed at 2026-05-09T23:41:44Z.

Queued worktrees can now hold intent before they become terminals, and live terminals can carry editable intent without losing their terminal title. The workflow stays terminal-first: users queue
repoPath + optional worktreeName + intent, then decide at spawn time whether the worktree opens as a plain shell or with a recent agent CLI.The refinement from #828 is now explicit in the UI. Intent is multiline markdown: the first line becomes an attached top-border pill on terminal tiles and workspace cards, while the full rendered markdown appears in the workspace switcher with copy/edit controls. Empty terminals get a titlebar pencil affordance, so creating or editing intent is available from the terminal chrome, command palette, queued cards, and live workspace cards.
How it fits together
Terminal intent rides with the saved terminal metadata and restores through session restore. Queued worktrees are restored from their own persisted
queuedWorktreesconf cell, so backlog items survive app restart even before they become terminals.Notable details
markedand rendered as Solid nodes, avoiding raw HTML injection while still supporting links, lists, code, tables, and emphasis.useQueuedWorktrees, so command palette and workspace switcher use the same queue mutation rules.Refs #828.
Verification
just fmtjust check(passes; existing Biome warnings remain outside this diff)nix develop --accept-flake-config -c pnpm --filter kolu-client test:unit -- src/canvas/workspace-switcher/model.test.tsnix develop --accept-flake-config -c pnpm --filter kolu-server test:unit -- src/session.test.ts src/state.test.tsnix build --accept-flake-configjust test-quick features/workspace-switcher.feature:67just test-quick features/workspace-switcher.featurejust cion9e5fd73e, plus explicit status cross-check: no missing contexts and no non-successci/*statusesTry it locally
Generated by
/doon Codex (modelgpt-5).