* feat: add In Review and Cancelled task statuses
Add two new kanban columns (In Review, Cancelled) with full-stack support:
- API endpoints: POST /api/tasks/:id/review and /cancel
- CLI commands: task review, task cancel
- D1 migration: 0003_review_cancel.sql
- Frontend: 5-column grid, ActivityLog labels/styles
- Agent idle check now considers In Review as active
- Dependency blocked check treats Cancelled as finished
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(qa): ISSUE-001 — use dynamic grid columns instead of hardcoded grid-cols-5
Tailwind JIT can't generate grid-cols-N dynamically. Use inline style
with gridTemplateColumns based on actual column count from API.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(qa): ISSUE-002 — rename migration to 0004 to avoid conflict with 0003_projects.sql
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: reject cancel on completed tasks — Done → Cancelled guard
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test: add coverage for In Review and Cancelled constants
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: bump version and changelog (v1.2.1)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: Agent Kanban v2 — agent observatory, dependencies, SSE streaming
Transform the board from a task tracker into an agent observatory with
real-time visibility, platform-driven assignment, and dependency-aware
task coordination.
- Agent entity: status tracking (idle/working/offline), GET /api/agents
- Task dependencies: depends_on with cycle detection, blocked computation
- Task origin: created_from for subtask tracking
- Assign/Release: POST /api/tasks/:id/assign and /release endpoints
- Stale detection: auto-release after 2h, write-on-read in board fetch
- SSE streaming: GET /api/tasks/:id/stream with polling fallback
- CLI: task assign/release, agent list, --parent/--depends-on flags
- UI: ActivityLog, AssignDropdown, AgentProfile, SubtaskList, blocked badges
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(review): address 5 review findings from pre-landing review
- Narrow SSE auth bypass to exact path pattern (was too broad)
- Fix SSE reconnection: resolve log ID to timestamp for since filtering
- Compute blocked status in getBoard() so kanban view shows blocked badges
- Remove dead code in useSSE polling fallback
- Rename fetch→load in useAgents to avoid shadowing global
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: bootstrap test framework (vitest)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test: enum completeness coverage for v2 actions and agent statuses
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: bump version and changelog (v1.2.0)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: sync CLAUDE.md with v1.2.0 patterns
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>