- Add enginePaused field to Settings type with soft-pause semantics (drain queue, don't kill agents)
- Gate scheduler, triage, auto-merge, and periodic merge retry on enginePaused
- Add Pause and Stop buttons to dashboard Header replacing single toggle
- Wire enginePaused state through App with optimistic toggle and unpause resume logic
- Add tests for scheduler, triage, dashboard CLI, Header, and App covering pause behavior
- Add searchable text input to TaskDetailModal dependency dropdown with filtering by id, title, and description
- Add matching search input to InlineCreateCard dependency dropdown
- Add sticky .dep-dropdown-search CSS with focus styling
- Reset search term when dropdown closes and reopens
- Add tests for search filtering, case-insensitive matching, empty state, and reset behavior
- Sort availableTasks in TaskDetailModal by createdAt descending (newest first)
- Add test verifying dropdown items appear in newest-first order
- Exclude current task from dropdown list as before
- Add globalPause setting to core Settings type with default false
- Guard scheduler, triage, and auto-merge queue to skip work when globalPause is active
- Add pause/play toggle button in dashboard Header with optimistic UI and rollback on failure
- Add tests for scheduler, triage, Header, and App global pause behavior
- Include minor changeset for the new feature
- Show 'Sign in to at least one provider to get started' message when all OAuth providers are unauthenticated
- Provider rows remain visible below the hint for easy sign-in
- Hide hint automatically when at least one provider is authenticated
- Add tests for both hint-visible and hint-hidden states
- Replace scroll-direction tracking with proximity-to-bottom check (40px threshold)
- Remove lastScrollTopRef in favor of comparing scrollTop + clientHeight to scrollHeight
- Update existing tests to use container geometry instead of scroll direction
- Add test for scrolling down but not near bottom (stays disabled)
- Add test for exact-bottom edge case (re-enables auto-scroll)
- Add initialSection prop to SettingsModal to allow opening to a specific tab
- Export SectionId type from SettingsModal for use by parent components
- Check auth status on App mount and auto-open Settings to Authentication tab when all providers are unauthenticated
- Reset initialSection on modal close so subsequent manual opens default to General
- Add comprehensive tests for auto-open behavior and initialSection prop
- Extend AgentLogEntry with agent field and new event types (thinking, tool_end)
- Expand AgentLogger with thinking, tool_end callbacks and agent role support
- Wire new logging callbacks in createKbAgent and all agent call-sites (executor, merger, reviewer, triage, pi)
- Update AgentLogViewer with agent role badges and rendering for new entry types
- Export AgentRole and AgentLogType from core package and add tests for new functionality
- Add defaultThinkingLevel to core Settings types and exports
- Thread thinking level through engine executor, merger, reviewer, triage, and pi
- Add effort dropdown to Model settings UI in SettingsModal
- Add tests for thinking effort dropdown in SettingsModal
- Rename npm packages from @kb/* to @hai/* and update all workspace references
- Rename CLI binary from kb to hai and config directory from .kb to .hai
- Update dashboard UI branding, titles, and references from kb to hai
- Update all test files, CI workflows, and documentation to reflect new naming
- Run comprehensive grep verification to ensure no stale kb references remain
- Enhance CSS custom properties and add form control styling
- Polish settings layout, sidebar, and auth card styles
- Add checkbox styling, modal refinements, and migrate inline styles from SettingsModal
- Add structural test assertions for new CSS classes in SettingsModal
- Expand styles.css with ~170 new lines of maintainable, token-based CSS
- Add columnMovedAt field to task types
- Set columnMovedAt on task creation and column moves in store
- Sort tasks by columnMovedAt descending in Board component
- Add store tests for columnMovedAt behavior
- Extend Settings type with model provider and model name fields
- Add backend API endpoint to list available models
- Add frontend API client for fetching models
- Add model settings section to SettingsModal with provider/model dropdowns
- Update engine executor to use the selected model from settings
- Add paused field to Task data model and store with pauseTask method
- Update triage, scheduler, and executor to respect paused flag and terminate paused tasks
- Add REST API endpoints and CLI commands for pause/unpause operations
- Add dashboard UI visual indicator and toggle for paused state
- Update README with pause/unpause CLI command documentation
- Add backend auth API endpoints (GET/PUT) with validation in routes.ts
- Create frontend API client functions for fetching and updating auth config
- Add Authentication Settings section to SettingsModal with token input form
- Add comprehensive tests for routes, API client, and SettingsModal components
- Wire up auth settings routes in dashboard server
- Replace proximity-based auto-scroll with scroll-direction detection
- Track last scroll position via ref to determine up/down direction
- Scrolling up disables auto-scroll, scrolling down re-enables it
- Add tests for auto-scroll default behavior and direction toggling
- Add includeTaskIdInCommit boolean to Settings type with default true
- Refactor merger to dynamically build system prompt based on setting
- Update fallback commit message to respect the toggle
- Add checkbox to Settings UI under Merge section
- Add unit tests for merger and SettingsModal behavior
- Add logo.svg image element to Header component before the h1 title
- Add header-logo CSS class with sizing and flex-shrink styles
- Update header-left alignment from baseline to center
- Add Header component tests covering logo rendering and position
- Extend AgentLogEntry type with optional detail field for tool metadata
- Thread tool args through engine executor callbacks to populate detail
- Render tool detail (name, args) in AgentLogViewer component
- Add unit tests for store, executor, and AgentLogViewer changes
- Add taskPrefix field to Settings type and use it in allocateId
- Update store listTasks and handleFsChange to support any task prefix
- Update triage duplicate regex to match configurable prefix
- Add Task Prefix input to dashboard SettingsModal UI
- Add tests for prefix-aware task allocation and settings modal
- Add agent log persistence layer with JSONL append/read and event emission in core store
- Add server-side SSE log streaming endpoint and REST route for fetching logs
- Create AgentLogViewer component and useAgentLogs hook for real-time log display
- Integrate log viewer into TaskDetailModal
- Fix pre-existing build and test errors
- Add dependencies field support to store updateTask method
- Wire dependencies through PATCH route and client API
- Add dependency editing UI (add/remove) to TaskDetailModal
- Pass tasks prop from App to TaskDetailModal for dependency picker
- Add tests for dependency CRUD in modal and API layer
- Extract uploadFile helper from file input handler for reuse
- Add clipboard paste listener to upload pasted images automatically
- Add drag-over and drop handlers on modal for drag-and-drop image upload
- Add comprehensive tests for paste upload, non-image paste skip, uploading state, and drop upload
- Add blockedBy field to Task type and core store
- Update scheduler to set blockedBy when deferring tasks due to file-scope overlap
- Render file-scope overlap badge on TaskCard in dashboard
- Add tests for blockedBy store logic, scheduler deferral, and TaskCard badge
- Simplify and refactor existing executor, triage, and CLI command code
- Add position: relative and z-index: 1 to .card-meta so dep tooltip renders above .card-title
- Change tooltip background from var(--bg-card) to var(--surface) for correct theming
- Add test asserting data-tooltip attribute contains dependency IDs as readable string
- Expand MIME type support for text file uploads
- Add --attach flag to CLI task create command
- Surface attachments to triage agent with image content support
- Reference attachments in executor prompt for task execution context
- Add drag-and-drop file upload on dashboard task cards
- Add focusout listener that cancels InlineCreateCard when focus leaves with empty input
- Preserve card when focus moves between elements inside the card
- Treat whitespace-only input as empty for cancel purposes
- Add comprehensive tests for blur-to-cancel behavior
- Update board grid to use minmax(260px, 1fr) for minimum column widths
- Replace overflow: hidden with overflow-x: auto for horizontal scrolling
- Add min-width: 260px to column class for consistent sizing
- Add Board test verifying id='board' attribute for scroll targeting
- Update TaskCard and TaskDetailModal to display description as fallback instead of repeating the task ID
- Remove unused hooks (useFlashOnIncrease), routes, assets, and dead CSS
- Clean up engine modules (executor, scheduler, triage, worktree-names) removing unused code
- Update and add tests for title fallback behavior in TaskDetailModal
- Fix pre-existing type error in test helper (types.ts)
- Set task status to 'failed' on execution failure in engine executor
- Add failed indicator styling on TaskCard component
- Add POST /tasks/:id/retry API endpoint and client function
- Add retry button in TaskDetailModal for failed tasks
- Add tests for failed indicator, retry endpoint, and modal behavior
- Add recycleWorktrees toggle to the Worktrees section in SettingsModal
- Wire checkbox state to settings store
- Add unit tests for recycleWorktrees setting behavior
- Exclude checkbox inputs from full-width text input styles using :not([type="checkbox"])
- Add dedicated checkbox styling with proper size, accent color, and cursor
- Add test verifying groupOverlappingFiles input renders as a checkbox
- Set status to queued in scheduler for file-scope-deferred tasks
- Normalize queued badge display in TaskCard component
- Add TaskCard unit tests for queued status rendering
- Add scheduler tests for file-scope-deferred task queuing
- Move logo.svg to correct public directory
- Fix prompt heading to use only task ID when title is absent, preventing description duplication
- Strip leading markdown heading from TaskDetailModal since the modal has its own header
- Add store tests covering prompt generation for tasks with and without titles
- Update TaskDetailModal tests to verify heading stripping and single description rendering
- Add paste handler to extract and preview images from clipboard
- Track pending images with object URL previews and cleanup on unmount
- Upload pasted images as attachments on task creation
- Add styled image preview strip with remove button
- Add CSS for preview thumbnails with hover-to-delete overlay
- Add sidebar navigation structure with section links to SettingsModal
- Implement sidebar and form layout styles in styles.css
- Add SettingsModal sidebar navigation tests for section switching
- Update SettingsModal component with multi-section support
- Add core types and store methods for attachment CRUD operations
- Add dashboard API routes for upload, download, and delete of attachments
- Add attachment UI in TaskDetailModal with upload and management controls
- Add CLI 'attach' command for attaching files to tasks
- Update documentation with attachment feature usage details
- Add markdown-body base styles in dashboard styles.css
- Remove backdrop and enable scroll on task detail prompt rendering
- Add TaskDetailModal unit tests with vitest jsdom environment
- Update vitest config with globals and jsdom support
- Clean up unused test files and legacy concurrency module
- Add agent-active CSS with animated purple border glow using in-progress theme color
- Apply agent-active class conditionally in TaskCard component
- Add TaskCard agent-active unit tests
- Move TaskCard tests to __tests__ directory