- Export all templates as JSON file
- Import templates from JSON file with duplicate detection
- template-io utility for file handling and validation
- Import/Export buttons in SettingsDialog templates section
- Duplicates skipped during import with notification
- Add agent field to template editor (preferred agent for code tasks)
- Agent selector in AddTemplateForm with all available agents
- Agent displayed in template list alongside other defaults
- Templates can specify preferred agent (claude-code, amp, copilot, gemini, veritas)
- Add template-variables utility with support for {{date}}, {{datetime}}, {{project}}, {{author}}, {{custom:label}}
- Extract custom variables from templates and prompt user for values
- Interpolate variables in description and subtask titles on task creation
- Display custom variable input form in CreateTaskDialog
- Variables resolved at creation time for dynamic content
- Add subtasks field to CreateTaskInput
- Task service creates subtasks from template when task is created
- CreateTaskDialog displays subtasks from template
- Users can remove individual subtasks before creating
- Subtasks sorted by order field and auto-generated with IDs
- Extend TaskTemplate with version, category, tags, agent, subtaskTemplates, and blueprint fields
- Add SubtaskTemplate and BlueprintTask interfaces
- Implement v0 to v1 migration in template service (backward compatible)
- Export template types from shared package
- Server validates enhanced schema on create/update
TraceService:
- 4 coarse step types: init, execute, complete, error
- Trace ID = Attempt ID for natural correlation
- Traces stored as JSON files in .veritas-kanban/traces/
- Off by default (enable via POST /api/traces/enable)
API Endpoints:
- GET /api/traces/status — Check if tracing is enabled
- POST /api/traces/enable — Enable tracing
- POST /api/traces/disable — Disable tracing
- GET /api/traces/:attemptId — Get a specific trace
- GET /api/traces/task/:taskId — List all traces for a task
AgentService Integration:
- Automatically records trace steps when tracing is enabled
- init: worktree setup, prompt building
- execute: agent process running
- complete: post-run processing
- error: captures error details
New endpoints:
- GET /api/metrics/tasks — Task counts by status, total, completed, archived
- GET /api/metrics/runs?period=24h|7d — Error rate, success rate, run counts
- GET /api/metrics/tokens?period=24h|7d — Token totals, per-run stats (avg, p50, p95)
- GET /api/metrics/duration?period=24h|7d — Duration stats (avg, p50, p95)
- GET /api/metrics/all?period=24h|7d — All metrics in one call
All endpoints support optional project filter.
AgentService now emits telemetry events for:
- run.started: when agent process spawns
- run.completed: when agent exits (with durationMs, exitCode, success)
- run.error: on spawn failure or process error
All events include taskId, attemptId, agent type, and project.
TaskService now emits telemetry events for:
- task.created: when a new task is created
- task.status_changed: when task status changes (with previousStatus)
- task.archived: when a task is archived
- task.restored: when a task is restored from archive
All events include taskId, project, and current status.
- Rewrote README with current features and Clawdbot integration
- Added CHANGELOG.md covering all 7 sprints
- Cleaner structure and better organization
Added pr-8 to header flex containers in:
- ArchiveSidebar
- ActivitySidebar
- ConflictResolver
- PreviewPanel
The Sheet component's close button is positioned absolute at right-4,
which was overlapping with action buttons (refresh, trash, etc.)
- Created ClawdbotAgentService that delegates to Veritas main session
- Agent requests written to .veritas-kanban/agent-requests/ as JSON
- Added /api/agents/pending endpoint for Veritas to poll
- Added /api/agents/:taskId/complete callback endpoint
- CLI commands: agents:pending, agents:complete, agents:status
- Removed PTY process management - Clawdbot handles it
Flow:
1. Kanban UI → POST /api/agents/:taskId/start
2. Server writes request to agent-requests/{taskId}.json
3. Veritas polls agents:pending or checks manually
4. Veritas calls sessions_spawn with task prompt
5. Sub-agent works in worktree, commits changes
6. Veritas calls /api/agents/:taskId/complete
7. Task updated, notifications sent
- Blue glow effect (ring + shadow) when agent is running
- Running badge with spinning loader icon
- Shows agent name in badge and tooltip
- Pulsing animation for easy visibility
- Sprint 7: All 11 stories complete
- TimeEntry and TimeTracking types
- TaskService: startTimer, stopTimer, addTimeEntry, deleteTimeEntry, getTimeSummary
- API endpoints for time operations
- TimeTrackingSection component with:
- Start/stop timer with live elapsed display
- Manual entry dialog (1h 30m format)
- Entries list with delete
- Time indicator on TaskCard with animated icon when running
- formatDuration/parseDuration utilities
- TaskService: getArchiveSuggestions(), archiveProject() methods
- Server-side detection of projects where all tasks are done
- API endpoints: GET /archive/suggestions, POST /archive/project/:project
- ArchiveSuggestionBanner component with confirmation dialog
- Activity logging for project_archived events
- Replaced client-side detection with server-side approach
- DevServerConfig type for repo settings (command, port, readyPattern)
- PreviewService to manage dev server processes per task
- Auto-detect port and ready state from server output
- API endpoints for preview start/stop/status/output
- PreviewPanel slide-out with iframe, terminal output toggle
- Preview button in TaskDetailPanel for code tasks
- GitHubService using gh CLI for PR operations
- Added prUrl/prNumber to TaskGit type
- API endpoints for status check and PR creation
- Create PR dialog with title, description, draft option
- View PR button when PR exists
- Auto-opens new PR in browser
- Added New Attempt button for completed/failed tasks
- Added attempt history list with status indicators
- Click attempt to view its log
- Supports selecting different agent for retries
- Previous attempts preserved and viewable
- Added blockedBy field to Task type
- Added blocking status API endpoint
- Added server-side validation for blocked tasks
- Created DependenciesSection component
- Added blocked indicator badge on task cards
- Tooltip shows blocker names on hover
- Cannot move blocked task to In Progress
- Added restoreTask() to TaskService
- Added POST /api/tasks/:id/restore endpoint
- Added useRestoreTask() hook
- Added restore button (hover) to ArchiveSidebar items
- Tasks restore to Done column with all data preserved
- Added listArchivedTasks() to TaskService
- Added GET /api/tasks/archived endpoint
- Added useArchivedTasks() hook
- Created ArchiveSidebar component with:
- Search by title/description/tags
- Filter by task type
- Filter by project
- Click to view task details
- Added Archive button to Header toolbar
- Use refs instead of state for keyboard callback setters
- Simplify FilterBar to remove problematic useEffect sync
- Make useBulkActions safe when used outside provider (DragOverlay)
- Remove unnecessary useEffect wrappers for ref-based callbacks