- Add digest service for 24h activity aggregation
- Add GET /api/digest/daily endpoint (JSON and Teams format)
- Add GET /api/digest/daily/preview for testing
- Add scripts/daily-digest.sh for cron scheduling
- Skip empty digests when no activity
Content includes:
- Tasks completed/created/in-progress counts
- Agent runs with success rate by agent
- Token usage by agent
- Top accomplishments (recently done tasks)
- Failed runs and blocked items
- Created useTaskMetrics hook to fetch and aggregate telemetry events for a task
- Built TaskMetricsPanel component with:
- Summary cards for total runs, success rate, duration, tokens, cost
- Last run status display
- Expandable per-attempt breakdown with full details
- Integrated as new 'Metrics' tab in TaskDetailPanel
- Fetches via GET /api/telemetry/events/task/:taskId endpoint
- Add POST endpoint for ingesting run telemetry events
- Accepts: run.started, run.completed, run.error, run.tokens
- Zod validation with discriminated union schema
- Stores events in date-partitioned NDJSON files
- Returns 201 with generated id and timestamp
- Add WebSocket broadcast for telemetry events
- New broadcastTelemetryEvent() in broadcast-service
- Emits 'telemetry:event' messages to connected clients
- Update shared telemetry types for flexibility
- RunStartedEvent, RunCompletedEvent, RunErrorEvent types
- TokenTelemetryEvent with optional cacheTokens and cost fields
- Change agent field from AgentType to string for external sources
- Update metrics-service to handle optional totalTokens
- Calculate totalTokens from input+output when not provided
- Updated TaskStatus union from 'review' to 'blocked' in shared/src/types/task.types.ts
- Updated Zod enum in server/src/routes/tasks.ts
- ReviewComment and ReviewState interfaces unchanged (still valid for code review)
- Add typeof check for process.env to avoid ReferenceError in browser
- process.env only exists in Node.js, not browser environments
- Fixes white screen issue when loading web frontend
- Add position field to Task type (shared/types.ts)
- Add POST /api/tasks/reorder endpoint to persist ordering
- Update task-service with reorderTasks() method
- Switch TaskCard from useDraggable to useSortable (@dnd-kit/sortable)
- Wrap KanbanColumn tasks in SortableContext with verticalListSortingStrategy
- Update KanbanBoard DnD handlers to support both within-column reorder
and cross-column status changes
- Sort tasks by position in useTasksByStatus hook
- Use closestCorners collision detection for better sortable support
Fixes: task_20260128_4qCzGr
- Added SprintConfig interface extending ManagedListItem in shared types
- Created SprintService with seed migration from existing tasks
- Added /api/sprints endpoints using managed list router pattern
- Implemented useSprints and useSprintsManager hooks
- Updated TaskDetailPanel and CreateTaskDialog to use dynamic sprint list
- Added sprint management UI to SettingsDialog
- Sprint IDs match existing task.sprint values for backward compatibility
- Reference counter prevents deletion of sprints with tasks
PHASE 1: US-915 ManagedListService Foundation
- Added ManagedListItem and ManagedListServiceOptions types to shared/src/types.ts
- Created ManagedListService<T> base class with full CRUD, reorder, and reference checking
- Created createManagedListRouter factory for generic Express routes
- Created useManagedList hook for React with TanStack Query integration
- Added managedList API helpers to web/src/lib/api.ts
- Created ManagedListManager React component with drag-to-reorder using @dnd-kit
PHASE 2: US-913 Custom Task Types
- Changed TaskType from union to string in shared types
- Added TaskTypeConfig interface extending ManagedListItem with icon and color
- Created TaskTypeService using ManagedListService with 4 built-in default types
- Registered task-types routes at /api/task-types
- Updated server validation in tasks.ts and templates.ts to accept dynamic types
- Created useTaskTypes hook with helper functions (getTypeIcon, getTypeLabel, etc.)
- Updated FilterBar to use dynamic task types
- Updated TaskCard to accept and use dynamic task types
- Updated KanbanBoard and KanbanColumn to fetch and pass task types
- Updated TaskDetailPanel to use dynamic task types
- Updated CreateTaskDialog to use dynamic task types
- Updated SettingsDialog template form to use dynamic task types
- Added Task Types management section to Settings with full CRUD and customization
- Added taskTypes API namespace to web/src/lib/api.ts
All UI components now render task types dynamically from .veritas-kanban/task-types.json
Icon and color customization available in Settings with 20+ Lucide icons and 10 colors
- 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
- 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
- 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 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
- ReviewState type with decision, timestamp, summary
- ReviewPanel component with approve/changes/reject buttons
- Summary input for changes-requested and rejected
- Current review status display with clear option
- Review tab in task detail panel
- Comment count display in review panel
- Add review comments to task schema
- Inline comment input on diff lines
- Comment display with amber highlighting
- Comment counts in file tree and headers
- Remove comment with X button
- Auto-save comments with debounced update
US-301: Agent configuration
- Settings UI for enabling/disabling agents
- Default agent selection
- Shows command and args for each agent
US-302: Start agent on task
- AgentService for process management
- POST /api/agents/:taskId/start
- Spawns agent in worktree directory
- Creates attempt record in task
US-303: Real-time agent output streaming
- WebSocket subscription for agent output
- useAgentStream hook with reconnection
- Terminal-style output panel with colors
- Auto-scroll with manual override
US-304: Agent conversation log persistence
- Logs saved to .veritas-kanban/logs/
- Markdown format with task metadata
- Full stdin/stdout/stderr capture
US-305: Send follow-up message to agent
- stdin input to running process
- Message input field in UI
- Displays with 'You:' prefix
US-306: Stop agent
- POST /api/agents/:taskId/stop
- SIGTERM then SIGKILL after timeout
- Confirmation dialog
- Marks attempt as failed
US-307: Agent completion handling
- Detects process exit
- Updates attempt status (complete/failed)
- Updates task status to 'review'
- WebSocket notification