- 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
- Guard against undefined dependencies with fallback to empty array in worktreeGrouping
- Handle missing task title in InlineCreateCard by falling back to description or id
- Update package-lock.json
- Remove create task button from global Header component
- Add create task button to Column header for triage column
- Update InlineCreateCard to support triage column context
- Thread onCreateTask callback through Board and Column components
- Simplify App.tsx wiring for task creation flow
- Remove CreateTaskModal component and its modal-based task creation flow
- Add InlineCreateCard component for inline task creation directly in the Todo column
- Update Column component to support inline card creation
- Simplify App.tsx by removing modal state management
- Add supporting styles for inline card creation UI
- Create InlineCreateCard component with auto-focused input, dependency
dropdown, Enter to submit, Escape to cancel
- Update Column to render InlineCreateCard at top of Todo column body
- Update Board to pass through inline-create props to Todo column
- Update App to use isCreating state instead of createModalOpen
- Add CSS styles for inline create card, dependency dropdown
- Delete CreateTaskModal component
- Add status field to Task type and store with persistence support
- Set status at engine lifecycle points (triage, scheduler, executor, merger)
- Render status badge on dashboard TaskCard component
- Make Task.title optional and description required in types and TaskCreateInput
- Update CLI task create to prompt for description instead of title, with updated help text
- Update REST API and dashboard CreateTaskModal to require description instead of title
- Handle optional/missing title across TaskCard, TaskDetailModal, and engine components
- Add description validation in TaskStore and update generateSpecifiedPrompt