Commit Graph

1879 Commits

Author SHA1 Message Date
gsxdsm
0fb17a07be Merge fusion/fn-1446 into main (dashboard perf + FN-1446 planning work) 2026-04-10 20:17:57 -07:00
gsxdsm
39a0f783bf perf(dashboard): slim task list + auto-archive stale done tasks
GET /api/tasks was returning ~69 MB of JSON per call (67.9 MB of agent
logs across 1199 tasks), causing the dashboard to hang for 2+ minutes.

- core: extend listTasks() with slim and includeArchived options
- dashboard: GET /api/tasks now uses slim mode and excludes archived
  by default; ?includeArchived=1 opts in
- frontend: lazy-load archived tasks when the archived column is first
  expanded via new useTasks.loadArchivedTasks()
- engine: self-healing maintenance now auto-archives done tasks older
  than 48h (data stays in SQLite, column flips done -> archived)
- tests: slim mode + includeArchived coverage in store.test.ts;
  routes.test.ts assertion updated for new args

Also bundles in-progress test-setup noise filters and pre-existing
QuickEntryBox/routes test work that was already modified locally.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 20:16:20 -07:00
gsxdsm
ffa0edc7b2 fix(FN-1446): improve test reliability and git command TTY handling
- Fix QuickEntryBox focus restoration after task creation with proper submission state tracking
- Improve QuickEntryBox tests by using explicit promise resolution and proper afterEach cleanup with act() wrappers
- Fix TaskCard tests to use proper act() wrappers for async operations
- Add stdio: 'pipe' to all git execSync calls to prevent TTY interaction issues in CI environments
- Add test log suppression for noisy subagent and pi-claude-cli output in vitest setup
2026-04-10 19:49:05 -07:00
gsxdsm
e2fe909d25 feat(FN-1446): wire planning + subtask prompt override resolution with regression tests 2026-04-10 19:32:22 -07:00
gsxdsm
616796ad60 feat(FN-1559): enforce feature status invariants at API boundary
- Guard PATCH /api/missions/features/:featureId to reject status
  transitions to execution states (triaged, in-progress, done, blocked)
  when feature has no taskId
- 'defined' status remains always allowed (initial state)
- Non-status field updates (title, description) are unaffected
- Add 6 new tests covering guard behavior and edge cases
- All 147 mission-e2e tests passing
2026-04-10 19:18:20 -07:00
gsxdsm
d79d2eef47 feat(FN-1559): recover orphaned features in autopilot reconciliation
- Add tryRelinkOrphanedFeature() to find and link matching tasks
- Normalize titles (trim, lowercase, collapse whitespace) for matching
- Only relink when exactly one task matches (ambiguous = no action)
- Sync feature status from task state on successful relink
- Normalize to 'defined' when no safe relink exists
- Add 7 tests for orphaned feature relink scenarios
- All 57 tests passing
2026-04-10 19:14:23 -07:00
gsxdsm
b3f057a281 fix: improve merge verification and dashboard behavior 2026-04-10 18:30:23 -07:00
gsxdsm
43802b165c feat(FN-1480): merge fusion/fn-1480 2026-04-10 18:09:00 -07:00
gsxdsm
f9d65f5447 feat(FN-1558): add dedicated Instructions tab in Agent Detail view
- Add InstructionsTab component for editing agent system instructions directly in the dashboard
- Include validation (character count, preview section) and reset to default functionality
- Add 82 regression tests covering Instructions tab editing flows
- Update agents.md documentation with Instructions tab usage guide
- Add changeset for @gsxdsm/fusion package
2026-04-10 13:30:37 -07:00
gsxdsm
c1bb1adce8 feat(FN-1269): add Routine Engine Integration and fix PROMPT_KEY_CATALOG
- Add Routine Engine Integration documentation to project memory
- Fix PROMPT_KEY_CATALOG by adding missing executor role to agent-generation-system and workflow-step-refine entries
- Update test to expect 6 executor keys instead of 4
2026-04-10 13:22:29 -07:00
gsxdsm
bf7b7ad701 fix(FN-1564): remove duplicate Retry button in task detail modal
- Fix duplicate Retry button appearing in task detail modal header
- Add test coverage for Retry button visibility conditions
- Clean up conditional logic for Retry button rendering
2026-04-10 13:02:51 -07:00
gsxdsm
a43ec905b8 feat(FN-1434): add prompt overrides for agent generation
- Add prompt-overrides module with template resolution and instruction injection
- Wire prompt overrides into agent generation flow via POST /api/agents route
- Support template-based prompt customization with role-based assignments
- Add agent generation tests and routes tests
- Document new prompt override settings in settings reference
2026-04-10 12:49:38 -07:00
gsxdsm
4137dbd223 feat(FN-1540): add lint as inline quality gate in task prompts
- Add ESLint configuration (eslint.config.mjs) for TypeScript/JavaScript linting
- Update executor prompts to include lint instruction before code submission
- Add lint check to triage prompt validation workflow
- Update agent prompts to emphasize lint compliance as quality requirement
- Add lint tool to agent toolset with file-level rule disabling capability
- Include lint in CI workflow with non-blocking status
- Update tests to verify lint-inclusive prompt behavior
- Add documentation for lint integration in contributing.md
- Add changeset for @gsxdsm/fusion minor release
2026-04-10 12:48:27 -07:00
gsxdsm
2ece64dd70 refactor(FN-1563): decouple CLI commands from UI dependencies
- Extract task lifecycle helpers (checkForExistingSession, resolveProjectPath) to shared modules
- Extract port selection logic to dedicated port-prompt module
- Remove direct imports from @fusion/dashboard in serve.ts
- Add architectural boundary comments for future maintainability
- Update tests to reflect new module structure
- Add memory note documenting the architectural decision
2026-04-10 12:47:46 -07:00
gsxdsm
487ed993d5 feat(FN-1555): remove quick-entry textarea expand/fullscreen affordance
- Remove expand/compress chevron button from QuickEntryBox
- Remove isExpanded state and resize logic
- Remove fullscreen toggle functionality
- Remove related test cases for expand/collapse behavior
2026-04-10 12:34:38 -07:00
gsxdsm
04babf2a92 feat(FN-1411): implement plugin management API routes with project scoping
- Add GET /api/plugins and GET /api/plugins/:id for listing and retrieving plugins
- Add POST /api/plugins with mode discriminator (register/install) for plugin registration and installation
- Add POST /api/plugins/:id/enable and /disable for plugin lifecycle management
- Add PATCH /api/plugins/:id/settings for updating plugin configuration
- Add DELETE /api/plugins/:id for plugin uninstallation
- All endpoints support projectId scoping via getScopedStore() for multi-project support
- Add comprehensive test suite covering all plugin routes with project context mocking
- Document plugin API endpoints in dashboard README
2026-04-10 12:34:13 -07:00
gsxdsm
f62e4623de feat(FN-1539): add deterministic merge verification runner
- Add verification runner that executes testCommand then buildCommand before merge completion
- Verification runs on all merge paths (AI resolve, auto-resolve, -X theirs)
- If verification fails, merge is aborted and task stays out of done
- Add comprehensive tests for merger verification logic
- Fix routine-store test variable reference bug (created.id vs routine.id)
- Add changeset for @gsxdsm/fusion patch release
2026-04-10 12:20:56 -07:00
gsxdsm
15b27253b4 feat(FN-1269): complete routine engine integration with RoutineRunner and RoutineScheduler
- Add RoutineRunner class for routine execution via heartbeat system
- Add RoutineScheduler class for cron-based routine polling
- Add triggerManual and triggerWebhook methods for API and webhook triggers
- Wire RoutineScheduler into InProcessRuntime lifecycle
- Add routine trigger and webhook API endpoints
- Fix type mismatches between PROMPT and actual FN-1519 types
2026-04-10 12:11:55 -07:00
gsxdsm
6f3bb57d35 feat(FN-1556): merge fusion/fn-1556 2026-04-10 12:11:27 -07:00
gsxdsm
7ad9bf6f6d feat(FN-1464): merge fusion/fn-1464 2026-04-10 12:07:01 -07:00
gsxdsm
82fc649db6 fix: resolve database-is-locked error in completeRoutineExecution
completeRoutineExecution was reading from the DB outside the per-routine
lock then calling recordRun which acquires the lock internally. This
allowed concurrent operations on the same routine to hit SQLite
simultaneously. Inlined the logic inside a single withRoutineLock call
so the read and write are serialized.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 11:32:48 -07:00
gsxdsm
afc70f15e6 fix: add agentId to routine-store test createRoutine calls
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 11:30:48 -07:00
gsxdsm
d8d961c800 fix: align routine system with actual RoutineStore/Routine APIs to prevent CLI crash
The RoutineRunner and RoutineScheduler were written against a different
interface than what RoutineStore actually implements, causing TypeError
crashes as soon as any routine became due. This adds the missing
agentId/catchUpLimit fields to the Routine type and DB schema, adds
startRoutineExecution/completeRoutineExecution/cancelRoutineExecution
methods to RoutineStore, and fixes all property name mismatches
(lastExecutedAt→lastRunAt, trigger.cron→trigger.cronExpression,
policy value alignment) in the runner, scheduler, and tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 11:26:19 -07:00
gsxdsm
cf43e0413e fix: resolve dashboard performance bottlenecks causing sporadic hangs
The dashboard was sporadically hanging for several seconds during task
creation and settings loading due to multiple compounding issues:

- checkForChanges() polled every 1s with SELECT * FROM tasks + full
  JSON.stringify comparison, blocking the Node.js event loop. Now uses
  incremental polling (only changed tasks via updatedAt filter).
- allocateId() called readConfig() which always ran listWorkflowSteps(),
  adding unnecessary DB queries while holding the serialization lock.
  Now uses readConfigFast() that skips workflow steps.
- Task creation triggered listWorkflowSteps() up to 3 times per request.
  Added in-memory cache with invalidation on create/update/delete.
- Route handlers used getSettings() (slow path) where getSettingsFast()
  suffices (POST /tasks, GET /config).
- SSE effect in useTasks had searchQuery and refreshTasks in its
  dependency array, causing EventSource teardown/rebuild on every search
  change. Moved to refs since the EventSource URL doesn't use searchQuery.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 11:01:15 -07:00
gsxdsm
4d10385f4c feat(FN-1499): add workflow step revision loop signaling
- Add WorkflowStepSignal type with 'needs-revision' support for iterative QA loops
- Extend executeWorkflowStep() to detect needs-revision signals and trigger revision sessions
- Add revision loop limit (5 iterations max) to prevent infinite loops
- Track revisionAttempts in workflow step results
- Add comprehensive tests for revision signaling, loop behavior, and limit enforcement
- Document workflow step revision behavior in docs/workflow-steps.md
2026-04-10 10:50:11 -07:00
gsxdsm
a95e965780 feat(FN-1548): merge fusion/fn-1548 2026-04-10 10:49:27 -07:00
gsxdsm
3870d0c9d8 feat(FN-1544): add viewport-gated loading and lightweight memo comparison
- Add viewport-gated fetching to TaskCard component so only visible cards load their data
- Implement lightweight memo comparison to prevent unnecessary re-renders
- Add lazy enable gates to useSessionFiles and useTaskDiffStats hooks with caching
- Add comprehensive tests for useSessionFiles and useTaskDiffStats hooks
- Document viewport-gated loading patterns in memory and dashboard-load performance docs
2026-04-10 10:44:48 -07:00
gsxdsm
4cb378477c feat(FN-1369): add mission planning context propagation to tasks
- Add buildEnrichedDescription() for hierarchical mission context during triage
- Propagate mission → milestone → slice → feature context to task descriptions
- Add planningNotes and verification fields to milestones and slices
- Track planState on slices (not_started, planned, needs_update)
- Add apply/skip interview endpoints for milestone and slice planning
- Fix error mapping for rate limit and apply interview routes
- Add comprehensive integration tests for context enrichment
- Add AGENTS.md documentation for Mission Planning Context feature
2026-04-10 10:44:03 -07:00
gsxdsm
583285fa65 feat(FN-1463): fix settings tab highlight alignment on mobile
- 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
2026-04-10 10:38:29 -07:00
gsxdsm
c78ffaab5c feat(FN-1547): verify and lock Kimi usage endpoint configuration with regression tests
- Verify underscore endpoint (/v1/coding_plan/usage) as primary (Codexbar-validated)
- Add hyphen endpoint (/v1/coding-plan/usage) as legacy fallback
- Short-circuit 401/403 errors immediately without fallback attempts
- Fallback to alternate endpoint on 404, return sanitized url.not_found error on final 404
- Add regression tests for all error scenarios
2026-04-10 10:36:42 -07:00
gsxdsm
8295872158 fix(FN-1367): add parseTargetInterviewResponse for milestone/slice parsing
- 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
2026-04-10 10:19:06 -07:00
gsxdsm
1c4573ca92 fix(FN-1537): stabilize CI workflows and fix version tests
- 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
2026-04-10 09:42:51 -07:00
gsxdsm
92b67d8660 fix(FN-1458): add safe-area-inset padding to mobile header floating search
- 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
2026-04-10 09:39:59 -07:00
gsxdsm
c2d0ac572d test(FN-1414): add run-audit integration tests for core and engine
- Add core run-audit integration regression tests covering task activity logging
- Add engine run-audit integration tests covering executor lifecycle and mutations
- Stabilize run-audit ordering with inline comments for deterministic behavior
- Update memory with run-audit testing learnings and patterns
- Fix test naming and use valid GitMutationType in tests
2026-04-10 09:21:38 -07:00
gsxdsm
6db8edc297 feat(FN-1541): disable CI workflow auto-trigger
- 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
2026-04-10 09:20:30 -07:00
gsxdsm
60b9f8614c feat(FN-1442): replace emoji scope icons with theme-aware Lucide icons
- Replace emoji icons (🌐, 📁) with Lucide Globe and Folder icons in Settings sidebar scope indicators
- Icons now automatically adapt to light/dark theme colors for better visual consistency
- Update SettingsModal tests to validate Lucide icon rendering
- Add mobile-specific tests for settings scope indicators
2026-04-10 09:19:16 -07:00
gsxdsm
f962be933d feat(FN-1461): fix stuck-task retry for step-session mode
- 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
2026-04-10 08:58:37 -07:00
gsxdsm
ec7d0357f6 feat(FN-1534): fix theme-data.css URL resolution and link reuse
- 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
2026-04-10 08:53:22 -07:00
gsxdsm
71782efa9c feat(FN-1441): correct Models settings scope to mixed and update renderScopeBanner
- 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
2026-04-10 08:52:31 -07:00
gsxdsm
a540519472 feat(FN-1525): add fresh-session and compact-and-retry options for merger agent
- 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
2026-04-10 08:48:21 -07:00
gsxdsm
74badb774d feat(FN-1535): fix theme-data.css URL resolution for file:// contexts
- 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
2026-04-10 08:37:28 -07:00
gsxdsm
2e175118aa test(FN-1415): add API tests for agent runs and fix validation behavior
- 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
2026-04-10 08:27:56 -07:00
gsxdsm
9830ea96c6 fix(ci): fix test failures from recent feature additions
- 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>
2026-04-10 08:01:03 -07:00
gsxdsm
71cad2ff53 feat(FN-1439): render dependency titles in Task Detail modal
- 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
2026-04-10 07:40:55 -07:00
gsxdsm
3be0e0d1ec feat(FN-1405): add run-audit and timeline API endpoints with typed client
- 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
2026-04-10 07:36:22 -07:00
gsxdsm
91d4c113e1 feat(FN-1532): add performance indexes for dashboard boot queries
- 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
2026-04-10 07:26:13 -07:00
gsxdsm
29a2984a04 fix(engine): recover orphaned tasks at startup
Run self-healing startup recovery after resumeOrphaned so stale in-progress tasks do not wait for the maintenance interval.
2026-04-10 07:20:05 -07:00
gsxdsm
d293f099df fix(engine): recover orphaned tasks at startup 2026-04-10 07:19:26 -07:00
gsxdsm
f7fde6a2d3 feat(FN-1438): enable description expansion in task creation forms
- 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
2026-04-10 07:08:13 -07:00
gsxdsm
ccdc836177 feat(FN-1354): add auto-summarize task titles feature
- 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
2026-04-10 07:04:15 -07:00