- Fix settings modal tab alignment on mobile by switching .settings-nav-item to flexbox
- Add align-items: center to .settings-sidebar for icon+label vertical alignment
- Add justify-content: center and gap: 4px to .settings-nav-item
- Remove deprecated text-align: center from .settings-nav-item
- Add regression tests for new CSS properties in settings-mobile tests
- Add parseTargetInterviewResponse function to extract structured data from milestone/slice interview responses
- Parses target descriptions, sizing, priorities, and dependencies from AI interview output
- Handles malformed JSON gracefully with error fallbacks
- Update GitHub Actions workflows to use Node.js 24 (actions/setup-node@v5)
- Add private packages to .changeset/config.json ignore array
- Fix version string tests to read dynamically from package.json
- Add FN-1537 documentation to .fusion/memory.md
- Add safe-area-inset padding to mobile header-floating-search to prevent viewport overlap
- Add regression tests in Header.test.tsx for mobile search safe-area handling
- Add regression tests in mobile-header-controls.test.tsx for viewport safety
- Document the fix in .fusion/memory.md
- Remove automatic triggers (push and pull_request to main)
- Keep workflow available via workflow_dispatch for manual CI runs
- Preserve workflow file for future re-enablement
- Add step-scoped tracking key support in StuckTaskDetector for step-session mode
- Update tracking keys to include step session IDs when runStepsInNewSessions is enabled
- Add tests for step-scoped tracking behavior in executor and stuck-task-detector
- Ensure stuck task detection works correctly with per-step retry recovery
- Fix URL resolution in theme-data.css so it loads correctly from index.html
- Reuse theme data link element across theme updates instead of recreating it
- Update useTheme hook to properly manage theme link lifecycle
- Add comprehensive tests for useTheme hook URL handling
- Update theming documentation with URL resolution details
- Correct Models section scope from project to mixed since it contains both global settings (provider/model) and project overrides
- Update renderScopeBanner to support mixed scope type with globe+folder icon
- Add scope-banner-mixed CSS class for consistent styling of mixed-scope banners
- Update SettingsModal tests to cover mixed scope behavior
- Add freshSession option to MergeOptions to start clean agent sessions instead of resuming
- Add compactSession option for compacting session history before retry attempts
- Implement RetryStrategy type with freshSession and compactSession variants
- Add retryWithStrategy() method that attempts merge, then retries with configured strategy on failure
- Add comprehensive tests for retry logic covering success, simple retry, and compact-and-retry paths
- Update memory documentation with merger retry strategy guidance
- Fix CSS URL resolution in memory when loading with file:// protocol
- Add DASHBOARD_URL re-export from renderer module for backward compatibility
- Update main.test.ts to use correct renderer mock reference (rendererMocks vs mocks)
- Document the URL resolution bug fix in memory
- Add comprehensive test suite for agent runs API endpoints (routes, wrappers)
- Fix run-audit API wrapper tests to match correct validation behavior
- Add test coverage for wake context validation and on-demand run creation
- Update project memory with API test learnings
- Add ChatStore mock to all dashboard route tests that mock @fusion/core,
since server.ts now instantiates ChatStore(store.getFusionDir(), ...)
- Add getFusionDir to createMockStore in server.test.ts
- Gate AI session cleanup scheduling behind shouldScheduleAiSessionCleanup()
(returns false in test env) to prevent open handle warnings
- Fix desktop tests: DASHBOARD_URL is now exported as a function alias,
update assertions to call DASHBOARD_URL() instead of using as string
- Add node:os mocks to system-metrics.test.ts for deterministic results
- Replace hardcoded maxWorkers=16 with availableParallelism()-based
calculation in all vitest configs to prevent OOM on 2-core CI runners
- Add --workspace-concurrency=2 to pnpm test commands
- Fix TaskCard tests: update mission badge title assertions to full titles
- Remove unused /api/mesh/state route
- Fix plugin-auto-label: add isError field, async onTaskCreated, "tests" keyword
- Fix plugin-ci-status: add module-level logger, tighten test assertions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Display task dependency titles alongside IDs in the Task Detail modal dependencies section
- Add truncation styling for long dependency titles with hover tooltip for full text
- Add comprehensive tests for dependency label rendering with various title lengths
- Update styles.css with dependency label truncation classes
- Add run-audit routes in routes.ts for starting/canceling/stream/querying agent run audits
- Add timeline routes for streaming agent run timeline events
- Create typed API client wrappers in api.ts for frontend consumption
- Add comprehensive route-level verification tests for run-audit and timeline endpoints
- Fix TypeScript errors in run-audit routes
- Document run-audit endpoints in README
- Add composite indexes for dashboard boot query paths
- Optimize taskList queries with (column, updatedAt) and (column, status, updatedAt) indexes
- Optimize activityLog queries with (timestamp DESC, taskId) index
- Add idempotent CREATE INDEX IF NOT EXISTS pattern for migrations
- Document index patterns in memory.md for future schema changes
- Update schema version assertions in db.test.ts and task-documents.test.ts
- Add changeset for dashboard load performance improvement
- Fix textbox role selector to avoid matching the expand button in TaskForm
- Enable description expansion in create mode for better task input experience
- Update tests in NewTaskModal and TaskForm to cover the new behavior
- Add /api/ai/summarize-title endpoint for AI-generated task titles
- Integrate title summarization into task creation flow when autoSummarizeTitles is enabled
- Add debug logging and error checking to summarizeTitle in ai-summarize.ts
- Add error logging to route handler and task store for failed summaries
- Add comprehensive integration tests for the summarize-title API endpoint
- Add memory entry documenting the auto-summarize titles bug fix
- Add PluginLifecycleEvent type and relay infrastructure in sse.ts
- Emit plugin lifecycle events (install, uninstall, enable, disable) via dashboard SSE
- Wire up plugin events in server.ts to broadcast to connected clients
- Add comprehensive tests for SSE plugin event relay and server integration
- Add .fusion/memory.md with plugin lifecycle documentation
- Add RoutineCard component with status display and run history
- Add RoutineEditor form with trigger, agent, policy, and model fields
- Integrate Routines tab into ScheduledTasksModal alongside Scheduled Tasks
- Add CSS styles for routine components
- Add comprehensive tests for RoutineCard, RoutineEditor, and ScheduledTasksModal
- Add return statement after successful context compaction and resume
- When compact-and-resume succeeds (promptWithFallback completes without error),
executor now returns early instead of falling through to failure path
- This allows the finally block to clean up without marking the task as failed
- Add logging for recovery success and failure paths
- Add regression tests for context limit error detection
- Pattern is conservative: requires both 'context window' and 'exceeds' present
- Add in-memory cache to GlobalSettingsStore for fast settings reads
- Add getSettingsFast() to TaskStore that uses the cached settings
- Update GET /settings route to use getSettingsFast() for faster responses
- Add invalidateCache() method for testing and external process scenarios
- Document write-through cache pattern in .fusion/memory.md
- Add new regex pattern /context\s+window\s+exceeds/i to match provider JSON error
envelope variant: "context window exceeds limit (2013)"
- Add 4 new test cases for the variant pattern
- Pattern is conservative: requires both "context window" and "exceeds" present
- Add search query propagation so remote nodes receive and use query filters
- Update api-node.ts to accept and forward search query parameters
- Add useRemoteNodeData query key dependency for proper re-fetching on filter changes
- Add api-node.test.ts with tests for search query propagation
- Add comprehensive tests for App component including remote data filtering
- Document search query propagation pitfall in .fusion/memory.md
- Add sanitization for Kimi API 404 url.not_found error messages in usage.ts
- Replace technical error codes with user-friendly messages to avoid leaking internal API details
- Add regression test covering error sanitization with mock usage data
- Add shared RunAuditService in packages/engine/src/run-audit.ts for tracking agent run state transitions
- Instrument HeartbeatMonitor to log run mutations (create, complete, error, skip) with timestamps and context
- Instrument TaskExecutor to log run mutations during task execution lifecycle
- Instrument Merger to log run mutations during merge workflow
- Add run-audit pattern documentation to project memory
- Fix: remove audit calls from non-run recovery methods to avoid false positives
- Replace inline styles in WorkflowResultsTab with semantic CSS classes
- Add .workflow-results-tab, .workflow-results-header, .workflow-step-card, .workflow-step-header, and .workflow-step-output CSS rules to styles.css
- Add tests for WorkflowResultsTab component with mocked workflow step data
- Add routineStore to ServerOptions for dependency injection
- Implement CRUD API routes for routines (create, list, get, update, delete)
- Add frontend API functions for routine management
- Include comprehensive route tests for all routine endpoints
- Update memory documentation with webhook HMAC testing pattern
- Add scripts/dev-with-memory.mjs entrypoint script
- Configure memory monitoring and optimization for development mode
- Update package.json scripts to include memory-aware dev option
- Add ChatView component with sidebar navigation and message thread layout
- Add useChat hook with SSE streaming state management for real-time updates
- Add chat API functions for sessions and messages (create, list, send, stream)
- Add mobile-responsive CSS styles for chat interface
- Add tests for useChat hook and ChatView component
- Integrate chat into task view and navigation (Header, MobileNavBar)
- Add comprehensive Budget Governance documentation to AGENTS.md
- Document AgentBudgetConfig and AgentBudgetStatus interfaces
- Document budget reset behavior and API endpoints
- Add Dashboard Configuration section for budget settings UI
- Add Agent Budget API routes tests (GET/POST /api/agents/:id/budget)
- Test budget status computation with threshold and over-budget scenarios
- Test budget reset functionality with token counter clearing
- Remove extra closing brace in routes.test.ts