- Add step completion progress bar to TaskCard component
- Color progress fill dynamically based on column status
- Add card-progress, card-progress-bar, card-progress-fill, and card-progress-label styles
- Show completed/total step count label beside progress bar
- Add serialized merge queue preventing concurrent git merge operations
- Startup sweep enqueues existing in-review tasks when autoMerge is enabled
- Periodic retry interval catches failed merges on each poll cycle
- All three paths (event-driven, startup, periodic) use the same queue
- Reset task status on merge failure so tasks don't appear stuck
- Re-check autoMerge setting before each dequeue
- Fix worktreeGrouping to place queued tasks in Up Next group only
- Add unit tests for worktreeGrouping utility (120+ lines)
- Clean up InlineCreateCard component styling
- Remove unused code from triage engine
- Fix TaskCard status display
- Replace input with auto-resizing textarea in InlineCreateCard
- Add dynamic height adjustment on content change
- Style textarea with no resize handle, hidden overflow, and proper line-height
- Set task status to 'specifying' when triage specification begins
- Clear status back to null before moving task to todo on success
- Clear status on specification error with safe catch
- Add 'specifying' to active statuses in dashboard TaskCard
- Add autoMerge boolean to Settings model with default false
- Add auto-merge toggle UI to the In Review column header
- Implement server-side auto-merge behavior in dashboard command
- Fix pre-existing build errors in types, executor, and dashboard server
- Update README with auto-merge documentation
- Add groupOverlappingFiles toggle to Settings types and store with default enabled
- Parse File Scope sections from PROMPT.md to extract per-task file lists
- Implement overlap detection in scheduler to group tasks sharing files
- Add groupOverlappingFiles toggle to the Settings UI modal
- Update README and remove obsolete triage overlap logic
Triage prompt now explicitly:
- Checks for test framework before writing spec
- Creates a prerequisite task if no test framework exists
- Adds it as a dependency on the current task
- Forbids typecheck-only or manual-only testing steps
- Close TaskDetailModal before awaiting merge result
- Show interim 'Merging...' toast for immediate feedback
- Convert handleMerge from async/await to fire-and-forget promise chain
- Display success/error toast after merge completes in background
- Add react-markdown and remark-gfm dependencies
- Replace pre element with ReactMarkdown in TaskDetailModal
- Add markdown prose styles optimized for dark theme
- Regenerate pnpm-lock.yaml to resolve merge conflicts
- Add rate limiting middleware to dashboard API endpoints
- Install lucide-react and replace emoji usage with Lucide icons across dashboard components
- Add rate limiter unit tests
- Document API rate limiting in README
- Refactor engine executor/triage and remove unused reviewer module
- Add maxWorktrees field to Settings type with default of 4
- Enforce worktree limit in scheduler counting in-progress and in-review tasks
- Add maxWorktrees input to SettingsModal with min/max validation
- Expose maxWorktrees in config API route
- Read maxWorktrees from stored settings in dashboard command
- Add maxWorktrees field to Settings interface with default of 4
- Enforce worktree limit in Scheduler.schedule() alongside maxConcurrent
- Wire setting through dashboard startup from persisted settings
- Include maxWorktrees in /api/config response
- Add Max Worktrees input to Settings Modal UI
- Backward compatible: existing configs without maxWorktrees use default
- System prompt explains review_step tool with review level table
- Execution prompt injects real task ID in all CLI examples
- Execution prompt parses review level from PROMPT.md and tells agent exactly when to call review_step
- Removed {TASK_ID} placeholders that agent saw as literal text
- reviewer.ts: spawns separate pi agent with read-only tools
and reviewer system prompt (taskplane's review format/verdicts)
- Executor registers review_step as a custom tool on the worker session
- Worker calls review_step(step, type, step_name) at step boundaries
based on review level (0=none, 1=plan, 2=plan+code, 3=full)
- Reviewer returns APPROVE/REVISE/RETHINK with structured feedback
- REVISE feedback returned inline to worker for immediate action
- Review calls logged to task via hai task log
- Extend config schema and store helpers to support settings persistence
- Add GET/PUT /settings REST API endpoints in dashboard routes
- Create SettingsModal component with frontend API wiring
- Add settings trigger button to Header and integrate into App
- Add CSS styles for settings modal and header actions
- Clear status and worktree in moveTask when target column is done
- Clear transient status in completeTask before moving task to done
- Ensures done tasks don't retain stale status or worktree references