Commit Graph

155 Commits

Author SHA1 Message Date
Fusion
08a4c35e23 test(FN-2249): add fast mode execution regression coverage
- Add executor regression tests for fast-mode completion paths, including tool injection, workflow-step bypass, and completion enforcement checks
- Expand dashboard API tests to verify executionMode payload behavior for createTask and updateTask requests
- Document fast-mode behavior across architecture, task management, and workflow-step docs with explicit gate bypass/enforcement details
2026-04-23 03:55:32 -07:00
Fusion
866e7cdb70 feat(FN-2260): merge fusion/fn-2260 2026-04-22 13:57:10 -07:00
Fusion
b38db611c3 feat(FN-2247): skip review and workflow gates in fast mode
- Gate executor pre-merge workflow-step execution on executionMode and bypass it for fast runs
- Omit the review_step tool from agent tool injection when tasks run in fast mode
- Add explicit executor logs and task log entries when fast mode skips validation gates
- Extend executor messaging-tool tests to cover fast vs standard tool availability
2026-04-22 10:50:22 -07:00
Fusion
a4655beb17 feat(FN-2214): merge fusion/fn-2214 2026-04-21 08:18:27 -07:00
gsxdsm
90dbbced37 fix(engine): recoverable worktree failures + prevent nested/gitlink worktrees
Fixes two classes of task failures found while investigating stuck in-review
tasks FN-2165 (worktree base ref missing) and FN-2152 (stray .tmp-fn-2152
gitlink accidentally committed via merger amend).

FN-2165 — stale baseBranch:
- resolveWorktreeStartPoint now returns null instead of throwing
  NonRetryableWorktreeError when the stored baseBranch is gone. Caller clears
  task.baseBranch and falls back to branching from the default base (HEAD) so
  the task self-heals instead of failing permanently.
- New TaskStore.clearStaleBaseBranchReferences() nulls baseBranch on any
  dependent task when its upstream branch is deleted. Wired into
  cleanupBranchForTask (archive/delete), merger branch cleanup, self-healing
  orphan-branch sweep, executor dep-abort and conflict-cleanup paths, and
  stale-branch recovery.

Nested worktrees:
- assertWorktreePathNotNested guard in tryCreateWorktree refuses to create a
  worktree inside another registered worktree (previously produced pathological
  paths like .worktrees/green-finch/.worktrees/amber-panda when rootDir pointed
  at a worktree instead of the main repo).

Context-overflow recovery (FN-2182 class):
- Reduced-prompt retry budget raised from 1 → 3 within the same session.
- Adds a fresh-session requeue path when same-session retries still overflow:
  task moves back to todo with worktree retained, bounded by
  computeRecoveryDecision / MAX_RECOVERY_RETRIES. Prevents late-step context
  exhaustion from becoming terminal.

Gitlink prevention (FN-2152 class):
- .gitignore now excludes .tmp-fn-* and .tmp-kb-* so stray worktrees at the
  repo root cannot be captured by git add -A.
- Merger amend flow now scans staged entries for 160000 gitlinks and unstages
  them with a loud warning; the project uses no submodules, so any such entry
  is a bug (this is how f8f90f26 landed in HEAD as .tmp-fn-2152).

Tests: new coverage for baseBranch fallback, nested-worktree guard, and
clearStaleBaseBranchReferences. Full engine + core + dashboard + cli suites
pass (15349 tests).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 08:30:24 -07:00
Fusion
19d62b41f5 refactor(FN-2162): rename kb-agent identifiers to fn-agent
- Rename core loader, dashboard server chat/planning routes, and frontend agent IDs/storage keys from kb-agent to fn-agent naming
- Update dashboard hooks and components (agent list, chat view, quick chat) to use the new fn agent key prefixes consistently
- Refresh engine, dashboard, core, and CLI tests/mocks to remove remaining kb-agent route and temp prefix references
- Update storage/gap-analysis docs to reflect fn agent key names and add a @gsxdsm/fusion patch changeset for the rename
2026-04-19 20:48:14 -07:00
Fusion
6714f7654b refactor(FN-2161): standardize on createFnAgent naming
- Rename engine export and call sites to use createFnAgent consistently across runtime flows
- Update core lazy engine loader and dashboard agent-generation/planning/chat paths to reference createFnAgent
- Refresh affected unit and integration tests, including renaming pi-create-kb-agent.test.ts to pi-create-fn-agent.test.ts
- Update AGENTS.md documentation references to match the new createFnAgent name
2026-04-19 20:48:14 -07:00
Fusion
20b9eacc14 feat(FN-2133): standardize project memory path guidance to .fusion/memory/
- Update executor, reviewer, core prompt templates, and path-boundary messaging to reference the .fusion/memory/ directory instead of a single MEMORY.md file
- Broaden worktree boundary checks in pi path validation to allow .fusion/memory/ directory access from task worktrees
- Align memory backend metadata and dashboard backend labels to display file backend storage as .fusion/memory/
- Refresh core/engine tests to assert the new directory-based memory wording and boundary behavior
2026-04-19 10:13:34 -07:00
gsxdsm
ddde8f9c71 feat(FN-2136): merge fusion/fn-2136 2026-04-19 10:13:34 -07:00
gsxdsm
bbc0ce89be feat(FN-2119): merge fusion/fn-2119 2026-04-19 10:13:34 -07:00
gsxdsm
bbeb7183e4 feat(FN-2110): merge fusion/fn-2110 2026-04-19 10:13:33 -07:00
gsxdsm
cae24ce600 feat(FN-2088): merge fusion/fn-2088 2026-04-18 23:22:26 -07:00
Fusion
049f356f88 feat(FN-2087): finalize canonical memory path migration
- Remove legacy .fusion/memory.md fallback references and normalize prompts/docs to .fusion/memory/MEMORY.md
- Stop legacy mirror writes and fallback reads in core memory backend and project memory flows
- Update engine worktree boundary checks and tests for canonical memory file handling
- Align dashboard memory/settings surfaces and route tests with canonical memory behavior
- Add model-favorites persistence test coverage for mission interview and new agent dialogs
2026-04-18 22:47:17 -07:00
Fusion
53cad3ba9d fix(FN-2078): adopt canonical .fusion/memory paths
- Update core and engine prompt text to reference .fusion/memory/ with MEMORY.md and daily-note guidance
- Allow worktree tool boundary access to .fusion/memory/ files while preserving legacy .fusion/memory.md compatibility
- Revise memory compaction/insight extraction messaging and related type/docs comments to use canonical memory paths
- Refresh dashboard and test expectations across core/engine/dashboard/docs for the new memory path wording
2026-04-18 22:02:46 -07:00
gsxdsm
5a831a67bc fix(FN-2116): use sqlite-backed agent storage 2026-04-18 17:25:17 -07:00
gsxdsm
eb04fd148d feat(FN-2052): merge fusion/fn-2052 2026-04-18 10:43:23 -07:00
gsxdsm
f35ea101c1 fix(FN-1572): stabilize fusion agent execution 2026-04-17 12:13:39 -07:00
gsxdsm
39cbfaba02 fix(FN-000): simplify qmd memory settings 2026-04-17 08:16:36 -07:00
gsxdsm
4a576c028c fix(FN-1952): bound recovery and task log growth 2026-04-16 19:32:35 -07:00
Fusion
06cade0228 test(FN-1893): add comprehensive QMD test coverage
- Add QMD route success tests in dashboard routes
- Expand QMD prompt completeness tests in executor
- Add QMD bootstrap and instruction completeness tests in triage
- Add QMD convenience function integration tests in memory-backend and project-memory
2026-04-15 23:09:02 -07:00
Fusion
c8a0876f45 feat(FN-1737): auto-delete child/task-worker agents and hide system agents by default
- Auto-delete spawned child agents when their parent task terminates (reportsTo cleanup)
- Auto-delete task-worker agents when their owned task completes
- Add includeSystem filter to AgentStore.list() and REST API
- Hide system agents by default on the agents page (show only user-facing agents)
- Wire includeSystem toggle through the API layer and AgentsView component
- Add changeset for @gsxdsm/fusion patch release
- Add comprehensive tests for agent cleanup and includeSystem filtering
2026-04-15 20:36:42 -07:00
gsxdsm
dc39fa82d5 feat(FN-1678): merge fusion/fn-1678 2026-04-15 09:31:03 -07:00
Fusion
8b631a98df feat(FN-1854): send tasks back to in-progress when verification fails
- Add sendTaskBackForFix() method that encapsulates the 'verification failed
  — send back to in-progress' pattern
- Replace all 4 hard failure locations with sendTaskBackForFix() calls
- Update failure feedback template to mention 'sent back to in-progress'
- Update test assertions for workflow step failure cases
- Rename test that verifies passing workflow step behavior
- Add new test for verification failure send-back flow
- Add addTaskComment mock to store factories for testing

The task executor now sends tasks back to in-progress (instead of 'in-review'
with 'failed' status) when workflow step verification fails and retries are
exhausted. This allows the executor to attempt to fix the issues on the
next pass, mirroring the existing deterministic verification failure behavior
in project-engine.ts.
2026-04-15 08:28:51 -07:00
Fusion
f2259282ea feat(FN-1761): fix lint errors in executor.test.ts and restart.integration.test.ts
- executor.test.ts: remove unused imports (Column, StuckTaskDetector),
  replace Function type with EventListener, add MockTaskStore interface
- restart.integration.test.ts: replace require() with ESM import,
  replace Function types with proper function signatures
- All tests pass
2026-04-15 03:00:54 -07:00
gsxdsm
b4917afdf9 feat(FN-1828): merge fusion/fn-1828 2026-04-14 13:30:02 -07:00
gsxdsm
f4c6250906 feat(FN-1514): add regression tests for skillSelection across executor, step-session, and triage
- Add executor skillSelection regression tests covering model override resolution
- Add step-session skillSelection tests for per-step agent creation
- Add triage skillSelection tests for spec generation with projectRootDir
- Verify skillSelection context propagation across all execution paths
2026-04-14 09:51:12 -07:00
gsxdsm
5b0b0591b3 feat(FN-1772): add backend-aware memory instruction context API
- Add MemoryBackendContext interface for backend-aware memory integration
- Implement getMemoryInstructions() method with backend-specific logic in project-memory.ts
- Add QMD memory backend type detection and instruction context for QMD-backed projects
- Update memory-plugin-contract.md with backend-variant instruction requirements (section 3.8.7)
- Update settings reference for memoryBackendType with custom backend support
- Add comprehensive regression tests for backend-variant memory instruction behavior
- Add changeset for @gsxdsm/fusion package
2026-04-13 22:03:42 -07:00
gsxdsm
4e38c5f7de feat(FN-1719): rebuild eslint baseline and add memory lessons
- Rebuild eslint config with context-aware flat config for better TypeScript/JSX handling
- Add memory lessons for lint/type/test baseline restoration
- Skip pre-existing flaky stream test (flushes a final complete event)
- Fix api.ts require import path
- Add ProjectEngineManager.startReconciliation mock to tests for main compatibility
2026-04-13 18:21:31 -07:00
gsxdsm
322a2629e7 fix(engine): keep executor prompts scoped to worktrees 2026-04-13 00:03:16 -07:00
gsxdsm
afafd26e92 fix(FN-1619): convert remaining engine execSync calls to async execAsync
- Replace blocking execSync calls with async execAsync in executor.ts for user-configured commands
- Convert self-healing.ts worktree status checks to async to avoid blocking the event loop
- Update step-session-executor.ts to use async worktree operations
- Refactor worktree-pool.ts for fully async worktree creation, cleanup, and listing
- Convert pi.ts agent session handling to async execution
- Update all corresponding tests with async/await patterns
- Add changeset for @gsxdsm/fusion patch release
2026-04-12 17:21:24 -07:00
gsxdsm
551caf0e9b feat(FN-1643): add context-limit recovery for step-session execution
- Add context-overflow detection and recovery in step-session executor with same parity as single-session
- Implement step resumption from overflow checkpoints with accumulated context replay
- Add overflow state tracking and recovery logging for diagnostics
- Harden single-session executor overflow recovery with improved state management
- Update appendAgentLog parameter signatures across executors
- Add comprehensive tests for context overflow scenarios in both execution modes
- Add memory entry documenting the unified context-limit recovery approach
2026-04-12 15:50:09 -07:00
gsxdsm
428b8f7b17 Harden architecture hot paths 2026-04-12 15:13:27 -07:00
gsxdsm
a72ad6a367 feat(FN-1599): merge fusion/fn-1599 2026-04-12 06:50:53 -07:00
gsxdsm
bddf86346e fix: suppress execution output on stdout 2026-04-11 21:13:16 -07:00
gsxdsm
5ec72ba3f2 Harden dashboard worktree shutdown handling 2026-04-11 20:28:34 -07:00
gsxdsm
ed49b73f66 fix(engine): run user commands via async exec to avoid blocking event loop
The merger's test/build verification, executor's worktreeInitCommand,
setupScript, and script-mode workflow steps all used execSync, which
blocks Node's event loop until the child process exits. A hanging
pnpm test could freeze the entire engine (no logs, heartbeats, or
other task progress) for the full 5-minute timeout.

Switch these call sites to promisify(exec) with awaited calls so the
engine keeps running while user-configured commands execute. Short
internal git plumbing (rev-parse, branch -d, worktree remove) still
uses execSync since those commands are bounded and measured in ms.

Document the rule in AGENTS.md under a new "Engine process rules"
section so future agents don't reintroduce blocking behavior.

Tests: update child_process mocks in merger.test, executor.test, and
restart.integration.test to route the new async exec through the
existing execSync mock and expose promisify.custom so destructuring
{ stdout, stderr } matches real child_process.exec semantics.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-11 18:28:05 -07:00
gsxdsm
d8a07f7543 feat(FEAT-001): add loop state columns and validator run tables for mission execution loop
This commit adds the schema migration and types for the mission execution loop validation system:
- Adds loop state tracking columns to mission_features table (loopState, implementationAttemptCount, validatorAttemptCount, lastValidatorRunId, lastValidatorStatus, generatedFromFeatureId, generatedFromRunId)
- Creates mission_validator_runs table for tracking validation runs
- Creates mission_validator_failures table for assertion failure records
- Creates mission_fix_feature_lineage table for tracking fix feature relationships
- Adds workflowStepRetries column to tasks table for retry tracking
- Adds FEATURE_LOOP_STATES and VALIDATOR_RUN_STATUSES enums
- Updates TaskStore to support workflowStepRetries field
- Updates TaskExecutor to handle workflow step failures with retry logic

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-04-11 17:06:41 -07:00
gsxdsm
2200971d23 feat(FN-1553): reduce memory bloat with selective save behavior
- Update project memory instructions to encourage selective writes instead of unconditional appends
- Instruct agents to consolidate existing entries rather than add duplicates
- Add guidance to skip memory updates when no durable learnings were discovered
- Clarify what qualifies as durable learnings vs task-specific trivia
- Update user-facing memory documentation to reflect new selective behavior
- Add test coverage for selective memory write instructions
2026-04-11 00:38:42 -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
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
d9ccd30085 feat(FN-1462): fix compact-and-retry path to not mark task as failed on successful recovery
- 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
2026-04-10 03:05:41 -07:00
gsxdsm
03f010cf60 feat(FN-1430): add worktree execution boundaries to prevent out-of-scope modifications
- Add worktree-aware path boundaries in agent factory to prevent cross-task contamination
- Sync core agent prompts with worktree boundary guidance for consistent enforcement
- Add boundary guidance to executor prompts so agents understand their scope
- Fix TypeScript types for worktree boundary wrapping
- Add comprehensive tests for boundary wrapping behavior
- Create changeset for @gsxdsm/fusion (minor)
2026-04-09 23:59:45 -07:00
gsxdsm
3166a36127 fix(engine): recover stuck in-review merges 2026-04-09 22:30:41 -07:00
gsxdsm
de347ea742 fix: recover tasks stuck in review after pause 2026-04-09 22:14:44 -07:00
gsxdsm
e404444439 feat(FN-1259): add review handoff mechanism for user assignment
- Add assigneeUserId field to Task type and SQLite schema for human assignment
- Add reviewHandoffPolicy setting to control automatic handoff behavior
- Implement handoff detection in executor: detect user assignment during review and auto-transition task
- Add dashboard API routes for user assignment, handoff queries, and completion
- Add frontend API functions: getHandoffTask, assignTaskToUser, completeHandoff
- Add comprehensive tests for store methods, API routes, and executor handoff logic
- Update memory documentation with review handoff pattern
2026-04-09 21:06:19 -07:00
gsxdsm
07ae3fad40 feat(FN-1429): enforce always-green test-suite instructions for executor agents
- Add explicit always-green test suite instructions to executor agent prompts
- Update executor to enforce test-suite validation before task completion
- Add tests for agent prompt generation and executor behavior
- Ensure test failures block merge-ready state rather than allowing broken builds
2026-04-09 19:33:44 -07:00
gsxdsm
1937b0090a test: fix assertions broken by runContext propagation
store.logEntry, assignTask, and checkoutTask now receive an extra
runContext argument. Updated test assertions in executor.test.ts,
agent-heartbeat.test.ts, and restart.integration.test.ts to match
the current call signatures using expect.objectContaining where
appropriate.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 18:31:54 -07:00
gsxdsm
b0f543b632 feat(FN-1381): add Send Back dropdown for in-progress tasks
- Add Send Back dropdown to TaskCard showing for in-progress tasks with available target columns
- Thread onMoveTask prop through Column component to BoardView
- Terminate agent sessions when tasks move away from in-progress column
- Add executor tests for move-away session termination
- Add TaskCard send-back UI tests with dropdown visibility and interaction verification
2026-04-09 13:00:37 -07:00
gsxdsm
561a135355 fix: use null instead of undefined to clear worktree/branch in executor updateTask calls
The store's updateTask treats `undefined` as "no change" and `null` as
"clear field". Six places in executor.ts passed `undefined` when intending
to clear worktree/branch, leaving stale references that caused tasks to
get stuck in in-progress with no active session after stuck-kills, pauses,
and transient error retries.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 08:43:14 -07:00
gsxdsm
7881a09a07 fix(FN-1285): harden async listener error guards
- Wrap TaskExecutor task:updated async listener logic in a top-level guard and log uncaught listener failures
- Add explicit catch handling for ProjectManager activity logging and dashboard stuck-detector settings-triggered checkNow calls
- Document async EventEmitter guard conventions in scheduler and hybrid executor listener wiring
- Add regression tests for executor and dashboard listener guards and include a patch changeset for @gsxdsm/fusion
2026-04-08 11:49:33 -07:00