gsxdsm
011b401764
Merge pull request #1668 from plarson/fix/fn-424-plan-only-no-commit
...
fix(FN-424): allow plan-only no-commit completion
2026-06-12 22:01:03 -07:00
gsxdsm
1450d39976
Merge origin/main into fix/fn-424-plan-only-no-commit
...
Resolve conflicts from main's FN-6232 single-source triage prompt refactor:
- Drop the inline FAST_TRIAGE_SYSTEM_PROMPT const removed by main; the fast
triage prompt now lives in agent-prompts.ts (planning-fast seam).
- Migrate the PR's no-commit/operational-routing heuristic edits into the
fast block of agent-prompts.ts (standard block already carried them).
- Point triage tests at FAST_PLANNING_PROMPT/TRIAGE_POLICY_PROMPT instead of
the removed const.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-12 21:47:57 -07:00
gsxdsm
0457144111
Merge pull request #1665 from plarson/fix/insights-extract-response
...
fix(dashboard): repair insight extraction and research provider config
2026-06-12 21:36:20 -07:00
gsxdsm
9d0573a2ee
Merge pull request #1663 from plarson/fix/fn-343-merge-worktree-cleanup
...
fix: classify harmless merge worktree cleanup failures
2026-06-12 21:34:51 -07:00
gsxdsm
167f9b0542
FN-6324: allow opted-in engineer backlog auto-claim
...
Engineer backlog auto-claim now respects an explicit opt-in while keeping the default executor-only behavior.
- Add engineerBacklogAutoClaim settings and runtime overrides for backlog pickup role checks.
- Update heartbeat auto-claim filtering, logs, and no-task prompt guidance for opted-in engineer agents.
- Cover executor/default engineer/opted-in engineer routing with core and heartbeat tests.
- Document the setting and record quarantined unrelated temp-root flakes seen during verification.
Files changed:
.changeset/FN-6324-engineer-backlog-auto-claim.md | 5 ++
docs/agents.md | 3 +
docs/settings-reference.md | 1 +
.../core/src/__tests__/agent-role-policy.test.ts | 33 +++++++++-
packages/core/src/agent-role-policy.ts | 11 +++-
packages/core/src/settings-schema.ts | 1 +
packages/core/src/types.ts | 4 ++
packages/core/vitest.config.ts | 6 ++
.../src/__tests__/heartbeat-executor.test.ts | 70 ++++++++++++++++++++++
packages/engine/src/agent-heartbeat.ts | 65 +++++++++++++++-----
scripts/lib/test-quarantine.json | 20 +++++++
11 files changed, 199 insertions(+), 20 deletions(-)
Fusion-Task-Id: FN-6324
Fusion-Task-Lineage: 4d124d98-4ad1-44ce-a76c-f1db3199b3c6
2026-06-12 19:45:37 -07:00
gsxdsm
e17e8b34f8
FN-6319: quarantine flaky engine tests
...
Quarantine unrelated engine test flakes so the gate avoids known unstable fixtures.
- Add the soft-delete blocker residue reliability test to the quarantine ledger and reliability interaction exclusions.
- Add the bubblewrap sandbox backend test to the quarantine ledger and engine-core exclusions.
Files changed:
packages/engine/vitest.config.ts | 6 +++++-
scripts/lib/test-quarantine.json | 10 ++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6319
Fusion-Task-Lineage: 9a47ae20-76b8-47d8-8858-f4fe51ea807e
2026-06-12 17:47:02 -07:00
Phil Larson
285f238e92
fix(FN-424): keep audit logging non-blocking
2026-06-12 16:08:00 -07:00
Phil Larson
f331419867
fix(FN-424): simplify prompt scope parsing
2026-06-12 15:59:58 -07:00
Phil Larson
8541db3185
fix(engine): normalize dashboard research providers
2026-06-12 15:57:12 -07:00
Phil Larson
02a85818c1
fix(FN-343): address follow-up review findings
2026-06-12 15:51:15 -07:00
Phil Larson
2ac9968ea5
fix(FN-343): address PR review feedback
2026-06-12 15:51:15 -07:00
Phil Larson
14cc9d82d1
test(FN-343): cover merger temp cleanup visibility
...
Fusion-Task-Id: FN-343
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-06-12 15:50:53 -07:00
Phil Larson
b094e0c765
fix(FN-343): classify pruned temp merge worktree removals
...
Fusion-Task-Id: FN-343
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-06-12 15:50:53 -07:00
Phil Larson
af830ac770
test(FN-343): add regression for temp cleanup classification
...
Fusion-Task-Id: FN-343
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-06-12 15:45:16 -07:00
Phil Larson
e9b48bd50c
fix(FN-424): address no-commit review edge cases
2026-06-12 15:45:04 -07:00
Phil Larson
fb4a5e912a
feat(FN-424): complete Step 3 — guide operational no-commit planning
...
Fusion-Task-Id: FN-424
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-06-12 15:02:41 -07:00
Phil Larson
ab35c87114
test(FN-424): prove no-commit guard preserves worktree checks
...
Fusion-Task-Id: FN-424
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-06-12 15:00:19 -07:00
Phil Larson
35502afdb8
fix(FN-424): align no-commit regression fixtures
...
Fusion-Task-Id: FN-424
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-06-12 14:58:40 -07:00
Phil Larson
cb128f5824
test(FN-424): cover plan-only no-commit finalization
...
Fusion-Task-Id: FN-424
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-06-12 14:58:39 -07:00
gsxdsm
039d3ce440
FN-6236: move fast triage into workflow settings
...
Move fast triage prompting into the workflow/settings prompt model.
- Add a core-owned fast triage prompt and expose the workflow prompt mode type.
- Add a fast-mode builtin workflow variant and route triage prompt selection through workflow settings.
- Remove the engine-local fast triage prompt constant and update triage tests for workflow-driven fast mode.
- Document the fast triage prompt mode setting and add a patch changeset.
Files changed:
.changeset/FN-6236-fast-mode-workflow-variant.md | 7 +
docs/settings-reference.md | 2 +
packages/core/src/__tests__/agent-prompts.test.ts | 16 +-
.../builtin-workflow-settings-triage.test.ts | 5 +
packages/core/src/agent-prompts.ts | 221 +++++++++++++++++++
packages/core/src/builtin-workflow-prompts.ts | 12 +-
packages/core/src/builtin-workflow-settings.ts | 18 +-
packages/core/src/index.ts | 5 +
packages/core/src/types.ts | 4 +
.../triage-duplicate-search-regression.test.ts | 18 +-
.../triage-fast-mode-workflow-variant.test.ts | 219 +++++++++++++++++++
.../triage-planning-prompt-single-source.test.ts | 8 +-
packages/engine/src/__tests__/triage.test.ts | 64 +++---
packages/engine/src/triage.ts | 235 ++-------------------
14 files changed, 565 insertions(+), 269 deletions(-)
Fusion-Task-Id: FN-6236
Fusion-Task-Lineage: 369954d8-41e7-4d88-aa6d-e6bbca077d50
2026-06-12 14:39:51 -07:00
gsxdsm
751d94244c
FN-6294: collapse workflow merge primitives
...
Collapse built-in workflow merge-policy primitives back to the legacy merge seam until graph execution owns merge policy end-to-end.
- Treat all merge-policy primitive node kinds as a synthetic legacy merge node during graph traversal.
- Preserve shadow-stage parity by mapping the synthetic merge node into legacy stage transitions.
- Add regression coverage for success, failure, pre-merge review failure, and alternate merge-region entry points.
- Record a patch changeset for the published Fusion package.
Files changed:
.changeset/fn-6294-merge-region-collapse.md | 5 +
.../workflow-graph-executor-handlers.test.ts | 13 ++-
.../workflow-graph-merge-region-collapse.test.ts | 116 +++++++++++++++++++++
packages/engine/src/executor.ts | 14 ++-
packages/engine/src/workflow-graph-executor.ts | 63 ++++++++++-
5 files changed, 203 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-6294
Fusion-Task-Lineage: fe86b5e2-861f-448d-8db0-b0332e6ad76f
2026-06-12 14:21:18 -07:00
gsxdsm
ba610a1c0e
FN-6296: fix stuck-kill force-requeue cleanup
...
Reap hung executor surfaces before requeueing stuck-kill timeout tasks.
- terminate spawned child agents and active session surfaces before clearing execution guards
- remove stale worktrees during force-requeue while preserving concurrent recovery ownership
- add regression coverage and architecture notes for the cleanup contract
Files changed:
docs/architecture.md | 2 +
.../engine/src/__tests__/executor-recovery.test.ts | 248 ++++++++++++++++++++-
packages/engine/src/executor.ts | 61 ++++-
3 files changed, 305 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-6296
Fusion-Task-Lineage: a393e2b1-a72c-4d7b-9de2-6bf7268986d4
2026-06-12 14:08:52 -07:00
gsxdsm
283adce4d0
FN-6295: move AI merge clean rooms into worktrees
...
Move AI-merge clean-room worktrees into the configured worktrees directory while preserving legacy cleanup.
- Resolve AI-merge roots through the configured worktrees directory using a hidden .ai-merge container.
- Keep local git excludes and stale cleanup compatible with legacy .fusion/ai-merge and tmpdir locations.
- Exclude the .ai-merge container from worktree pool and self-healing one-level sweeps.
- Add regression coverage for path resolution, cleanup, orphan reap, and cap enforcement behavior.
- Update architecture and agent guidance for the relocated clean-room root.
Files changed:
AGENTS.md | 2 +-
docs/architecture.md | 4 +-
.../engine/src/__tests__/merger-ai-cleanup.test.ts | 50 +++++++++----
.../__tests__/self-healing-tempdir-sweep.test.ts | 87 +++++++++++++++++++---
.../engine/src/__tests__/worktree-paths.test.ts | 24 ++++++
.../engine/src/__tests__/worktree-pool.test.ts | 55 ++++++++++++++
packages/engine/src/merger-ai.ts | 27 +++++--
packages/engine/src/self-healing.ts | 25 +++----
packages/engine/src/worktree-paths.ts | 17 +++++
packages/engine/src/worktree-pool.ts | 10 +--
10 files changed, 247 insertions(+), 54 deletions(-)
Fusion-Task-Id: FN-6295
Fusion-Task-Lineage: d95d32c2-3253-4964-b68a-252b4cb65109
2026-06-12 12:49:34 -07:00
gsxdsm
0897b2a0bf
FN-6281: add bounded graph resume retries
...
Add a narrow persisted retry path for transient workflow-graph failures during resume after restart or unpause.
- Persist graphResumeRetryCount with schema migration, store round-tripping, manual retry reset, and task serialization coverage.
- Retry only no-progress execute-seam graph failures immediately following resume markers, then clear transient status/error and re-run within a capped budget.
- Preserve terminal graph failure handling for explicit reasons, durable task failures, completed progress, non-resume cases, and exhausted retry budgets.
- Document the resume-limbo retry contract and add a patch changeset for @runfusion/fusion.
Files changed:
.changeset/fn-6281-graph-resume-retry.md | 5 +
docs/architecture.md | 1 +
packages/core/src/__tests__/db-migrate.test.ts | 30 +--
packages/core/src/__tests__/db.test.ts | 44 ++---
packages/core/src/__tests__/goals-schema.test.ts | 2 +-
packages/core/src/__tests__/insight-store.test.ts | 10 +-
.../core/src/__tests__/manual-retry-reset.test.ts | 1 +
.../src/__tests__/merge-request-record.test.ts | 2 +-
packages/core/src/__tests__/mission-store.test.ts | 2 +-
packages/core/src/__tests__/run-audit.test.ts | 4 +-
.../core/src/__tests__/store-merge-queue.test.ts | 2 +-
.../core/src/__tests__/store-persistence.test.ts | 22 +++
packages/core/src/__tests__/task-documents.test.ts | 2 +-
packages/core/src/db.ts | 10 +-
packages/core/src/manual-retry-reset.ts | 1 +
packages/core/src/store.ts | 14 +-
packages/core/src/types.ts | 5 +
.../engine/src/__tests__/executor-recovery.test.ts | 201 +++++++++++++++++++++
packages/engine/src/executor.ts | 54 ++++++
19 files changed, 359 insertions(+), 53 deletions(-)
Fusion-Task-Id: FN-6281
Fusion-Task-Lineage: f9061445-8624-465a-9255-c3d02eac1bdb
2026-06-12 11:10:12 -07:00
gsxdsm
36ba1b9d68
FN-6292: prevent dependency-blocking file leases
...
Prevent dependency waiters from holding file-scope leases that can block their own dependencies.
- Exclude in-progress tasks with unmet scheduling dependencies from active overlap lease maps.
- Add self-healing recovery for existing dependency/lease circular waits with triple-proof auditing.
- Cover scheduler and self-healing behavior with regression tests and document the new audit events.
Files changed:
AGENTS.md | 1 +
docs/architecture.md | 5 +-
packages/engine/src/__tests__/scheduler.test.ts | 108 +++++++++++++
packages/engine/src/__tests__/self-healing.test.ts | 172 ++++++++++++++++++++-
packages/engine/src/scheduler.ts | 67 +++++---
packages/engine/src/self-healing.ts | 132 ++++++++++++++++
6 files changed, 462 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-6292
Fusion-Task-Lineage: 7c0e852d-bdb1-4775-a6b7-2b60b7583da1
2026-06-12 10:49:02 -07:00
gsxdsm
f7f2cae9d0
FN-6237: apply frontend UX criteria as workflow policy
...
Move frontend UX criteria out of triage self-instructions and into deterministic workflow policy.
- Add a shared frontend UX policy helper that matches frontend file scopes and injects the byte-equivalent checklist idempotently.
- Apply the policy during triage finalization and persist the updated PROMPT.md when applicable.
- Replace the legacy prompt-based injection instructions with a pointer to the deterministic policy.
- Cover path matching, insertion behavior, and checklist parity with focused core tests.
- Add a minor changeset for the published Fusion package.
Files changed:
.changeset/fn-6237-frontend-ux-policy.md | 5 +
.../core/src/__tests__/frontend-ux-policy.test.ts | 119 +++++++++++++++++
packages/core/src/agent-prompts.ts | 29 +---
packages/core/src/frontend-ux-policy.ts | 148 +++++++++++++++++++++
packages/core/src/index.ts | 1 +
packages/engine/src/triage.ts | 19 ++-
6 files changed, 291 insertions(+), 30 deletions(-)
Fusion-Task-Id: FN-6237
Fusion-Task-Lineage: 7ac95064-9ec6-4760-8609-20c35075aca1
2026-06-12 09:24:02 -07:00
gsxdsm
2085610e9e
FN-6246: move AI merge clean rooms into repo storage
...
Move AI merge clean-room worktrees into a repo-local ignored root while preserving legacy temp cleanup.
- Add repo-local `.fusion/ai-merge` resolution and ignore handling for AI merge worktrees.
- Sweep both repo-local clean rooms and legacy tempdir worktrees with active-session and age safeguards.
- Prune stale git worktree metadata after cleanup and classify missing clean-room errors as transient.
- Update cleanup tests, architecture docs, and changeset coverage for the relocation.
Files changed:
.changeset/fn-6246-ai-merge-cleanroom-relocation.md | 5 +
AGENTS.md | 2 +-
docs/architecture.md | 6 +-
.../merger-ai-cleanup-active-session.test.ts | 22 ++-
.../engine/src/__tests__/merger-ai-cleanup.test.ts | 48 +++++-
.../ai-merge-worktree-cleanup.test.ts | 26 ++-
.../__tests__/self-healing-tempdir-sweep.test.ts | 34 ++++
.../transient-merge-error-classifier.test.ts | 2 +
packages/engine/src/merger-ai.ts | 144 ++++++++++-------
packages/engine/src/self-healing.ts | 180 ++++++++++++---------
.../engine/src/transient-merge-error-classifier.ts | 14 +-
11 files changed, 325 insertions(+), 158 deletions(-)
Fusion-Task-Id: FN-6246
Fusion-Task-Lineage: f6fe8ef2-aa7b-4cc3-903f-b7a5cc165487
2026-06-12 06:49:29 -07:00
gsxdsm
bd1c533120
FN-6280: stabilize self-healing recovery patch test
...
Stabilize the self-healing dirty worktree recovery test by avoiding timer and async cleanup races.
- Force real timers for branch conflict reclaim tests.
- Provide explicit integration branch settings and dispatcher behavior for the recovery path.
- Use synchronous fixture setup and cleanup around the recovery patch assertion.
Files changed:
packages/engine/src/__tests__/self-healing.test.ts | 77 +++++++++++++---------
1 file changed, 46 insertions(+), 31 deletions(-)
Fusion-Task-Id: FN-6280
Fusion-Task-Lineage: ef93f14a-1d16-4cca-ac6d-3cfd7249ca21
2026-06-12 05:12:00 -07:00
gsxdsm
ec4b247a86
FN-6284: refire deferred agent assignments
...
Ensure assigned agents resume task work even when their heartbeat loop is idle.
- add deferred assignment refiring when an agent is assigned work without an active heartbeat run
- track in-process runtime activity so scheduled work is not double-started
- cover idle, active, and concurrent heartbeat assignment paths with scheduler and runtime tests
- document the deferred assignment wake-up behavior and add a changeset
Files changed:
.changeset/fn-6284-deferred-assignment-refire.md | 5 +
docs/agents.md | 2 +
docs/architecture.md | 1 +
.../src/__tests__/heartbeat-scheduler.test.ts | 174 ++++++++++++++++++++-
packages/engine/src/agent-heartbeat.ts | 109 ++++++++++++-
.../runtimes/__tests__/in-process-runtime.test.ts | 24 +++
packages/engine/src/runtimes/in-process-runtime.ts | 3 +
7 files changed, 311 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6284
Fusion-Task-Lineage: cf8a9abe-163e-45c6-961a-095891e45ea5
2026-06-12 03:00:45 -07:00
gsxdsm
6f5be09edb
FN-6276: suppress repeated queued overlap recovery logs
...
Deduplicate self-healing log entries for queued tasks that remain blocked by the same active file-scope overlap.
- Track the last active overlap blocker logged per task and skip duplicate preserved-queued log entries across self-healing passes.
- Clear the memo when blockers change, resolve, or the manager stops so legitimate future recoveries are still logged.
- Cover unchanged blockers, blocker changes, resolved blockers, stop/reset behavior, and FN-5488 stale-blockedBy preservation with regression tests.
Files changed:
packages/engine/src/__tests__/self-healing.test.ts | 123 +++++++++++++++++++++
packages/engine/src/self-healing.ts | 61 ++++++++--
2 files changed, 177 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6276
Fusion-Task-Lineage: 169d4402-ec4e-4fa9-8225-2f545c11a3f7
2026-06-11 22:25:41 -07:00
gsxdsm
d73d8f4036
FN-6241: rescue quarantined engine tests
...
Rescue quarantined engine tests by adding deterministic seams and fake-timer flushing.\n\n- Add an injectable staged-files reader for squash file-scope invariant checks while preserving the production git-backed default.\n- Update file-scope invariant tests to use the deterministic staged-files seam instead of child_process mocking.\n- Stabilize project engine reconciliation retry coverage by avoiding mixed real timers in fake-timer tests.\n- Remove the rescued engine tests from Vitest excludes and the quarantine ledger.\n\nFiles changed:\n .../__tests__/merger-file-scope-invariant.test.ts | 39 ++++++++++++----------\n .../src/__tests__/project-engine-manager.test.ts | 18 +++++-----\n packages/engine/src/merger.ts | 22 ++++++++----\n packages/engine/vitest.config.ts | 3 --\n scripts/lib/test-quarantine.json | 10 ------\n 5 files changed, 48 insertions(+), 44 deletions(-)
Fusion-Task-Id: FN-6241
Fusion-Task-Lineage: c1c0d40c-7581-4bcf-8244-688ea04d12b9
2026-06-11 22:17:55 -07:00
gsxdsm
d23c5d901f
FN-6247: refresh PR controls from live auto-merge setting
...
Keep task detail PR and review affordances synchronized with the current project auto-merge setting.
- Thread the live auto-merge value into task detail modals and list split-pane detail views.
- Prefer the live auto-merge setting over the stale fetched modal snapshot while preserving task-level overrides.
- Cover PR and review tab behavior for auto-merge on/off and document the dashboard behavior.
- Evict flaky engine gate entries and add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-6247-automerge-off-modal-stale.md | 5 +
docs/dashboard-guide.md | 1 +
packages/dashboard/app/App.tsx | 3 +-
packages/dashboard/app/components/AppModals.tsx | 2 +
packages/dashboard/app/components/ListView.tsx | 3 +
.../dashboard/app/components/TaskDetailModal.tsx | 4 +-
.../__tests__/TaskDetailModal.create-pr.test.tsx | 171 ++++++++++++++++++++-
packages/engine/vitest.config.ts | 2 -
8 files changed, 182 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6247
Fusion-Task-Lineage: 1321c03a-216d-4b15-bf4f-95621d68c9ae
2026-06-11 22:11:44 -07:00
gsxdsm
65251d2e6b
FN-6252: stop agent pauses from pausing tasks
...
Agent pause and sleep flows now leave task pause state under explicit task controls.\n\n- Remove automatic task pausing from heartbeat pauseAgent and dashboard fallback state changes.\n- Default resume task cascade to off while retaining legacy opt-in unpause cleanup.\n- Cover agent sleep, heartbeat execution, and dashboard fallback pause behavior with regression tests.\n- Document task pause ownership and add a patch changeset.\n\nFiles changed:\n .changeset/fn-6252-no-agent-task-autopause.md | 5 ++\n docs/agents.md | 2 +-\n docs/architecture.md | 4 ++\n .../src/__tests__/routes-agent-runs.test.ts | 32 +++++++++\n .../src/routes/register-agent-runtime-routes.ts | 17 -----\n .../src/__tests__/heartbeat-executor.test.ts | 75 ++++++++++++++++++++--\n packages/engine/src/agent-heartbeat.ts | 29 +++------\n 7 files changed, 121 insertions(+), 43 deletions(-)
Fusion-Task-Id: FN-6252
Fusion-Task-Lineage: f7a0ef30-0c99-4f9c-b0c1-43217d613187
2026-06-11 22:03:29 -07:00
gsxdsm
de6e493e2a
FN-6238: stabilize self-healing test and quarantine merger AI suite
...
Rescue the already-merged self-healing real-git test while quarantining a separate flaky merger AI suite.
- Call the already-merged recovery path directly in the rescued test and assert specific audit event types instead of exact total counts.
- Remove self-healing-already-merged.real-git.test.ts from the engine default quarantine list and ledger.
- Add merger-ai.test.ts to the engine default quarantine list and quarantine ledger with FN-6238 evidence.
Files changed:
.../self-healing-already-merged.real-git.test.ts | 20 +++++++++++++-------
packages/engine/vitest.config.ts | 2 +-
scripts/lib/test-quarantine.json | 10 +++++-----
3 files changed, 19 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-6238
Fusion-Task-Lineage: b04451e3-fbd3-4dee-aca2-f542d1036d20
2026-06-11 21:10:00 -07:00
gsxdsm
fb2c6e5098
FN-6235: source reviewer prompts from workflow IR
...
Deduplicate reviewer policy text by making workflow IR review seams the engine's built-in prompt source.
- Move the canonical built-in reviewer prompt into core agent prompts and export seam prompt resolution helpers.
- Resolve reviewer prompts from explicit role overrides first, then workflow IR review seams, with the built-in prompt as a fallback.
- Update prompt cache and reviewer tests to cover single-source reviewer prompt behavior.
- Add a patch changeset for the published Fusion package.
Files changed:
.../FN-6235-reviewer-prompt-single-source.md | 5 +
packages/core/src/__tests__/agent-prompts.test.ts | 8 +-
packages/core/src/agent-prompts.ts | 109 +++++++++--
packages/core/src/index.ts | 2 +
packages/core/src/workflow-ir-resolver.ts | 31 ++-
.../src/__tests__/prompt-cache-integration.test.ts | 10 +-
.../reviewer-prompt-single-source.test.ts | 160 +++++++++++++++
packages/engine/src/__tests__/reviewer.test.ts | 97 ++++-----
packages/engine/src/prompt-layers.ts | 2 +-
packages/engine/src/reviewer.ts | 217 ++-------------------
10 files changed, 370 insertions(+), 271 deletions(-)
Fusion-Task-Id: FN-6235
Fusion-Task-Lineage: 725932d1-2469-4507-a0f9-0946c83a1572
2026-06-11 21:00:23 -07:00
gsxdsm
e22afece56
FN-6233: add typed triage policy settings
...
Render triage planning thresholds from typed workflow settings instead of hard-coded prompt constants.
- Add typed triage threshold/default workflow settings, migration coverage, exports, and docs.
- Render built-in triage prompt placeholders before engine prompt execution and tests.
- Remove the duplicate standard triage prompt from engine in favor of the core workflow IR source.
- Add regression coverage for default and customized triage policy rendering.
Files changed:
.changeset/FN-6233-triage-threshold-settings.md | 7 +
docs/settings-reference.md | 19 ++
docs/workflow-steps.md | 2 +-
packages/core/src/__tests__/agent-prompts.test.ts | 16 +-
.../builtin-workflow-settings-triage.test.ts | 63 ++++
.../src/__tests__/settings-consistency.test.ts | 24 +-
.../core/src/__tests__/settings-migration.test.ts | 12 +-
.../src/__tests__/workflow-ir-settings.test.ts | 11 +-
packages/core/src/agent-prompts.ts | 20 +-
packages/core/src/builtin-workflow-settings.ts | 154 ++++++++-
packages/core/src/index.ts | 7 +-
packages/core/src/moved-settings.ts | 13 +-
.../triage-planning-prompt-single-source.test.ts | 9 +-
.../__tests__/triage-threshold-settings.test.ts | 84 +++++
packages/engine/src/__tests__/triage.test.ts | 17 +-
packages/engine/src/triage.ts | 343 +--------------------
packages/engine/vitest.config.ts | 5 +-
17 files changed, 423 insertions(+), 383 deletions(-)
Fusion-Task-Id: FN-6233
Fusion-Task-Lineage: b2a986df-fa37-4297-a359-84d8463b0867
2026-06-11 20:53:01 -07:00
gsxdsm
905d5bf849
FN-6228: prioritize project model overrides
...
Ensure saved project model settings outrank stale durable-agent runtime models across AI lanes.
- Document the updated task, heartbeat, validator, merger, and summarizer model precedence.
- Add model-resolution regression coverage for project lanes, globals, defaults, runtime fallback, and test-mode mock forcing.
- Route AI merge body summarization through the shared title-summarizer settings resolver.
- Preserve upstream triage prompt coverage for TRIAGE_POLICY_PROMPT while resolving conflicts.
Files changed:
docs/agents.md | 18 +--
docs/settings-reference.md | 32 ++--
.../core/src/__tests__/model-resolution.test.ts | 98 ++++++++++++
packages/core/vitest.config.ts | 1 +
.../src/__tests__/agent-session-helpers.test.ts | 173 +++++++++++++++++++++
.../src/__tests__/merger-ai-merge-body.test.ts | 85 +++++++++-
packages/engine/src/agent-session-helpers.ts | 4 +
packages/engine/src/merger.ts | 26 +---
8 files changed, 392 insertions(+), 45 deletions(-)
Fusion-Task-Id: FN-6228
Fusion-Task-Lineage: a6c03f2a-dde7-4037-bdcd-a1c92a8b7fae
2026-06-11 20:44:52 -07:00
gsxdsm
7763ba5fab
FN-6278: preflight reusable merge worktree cwd
...
Stabilize reusable merge worktree cwd resolution before merge-runner git spawns.
- Add a reusable merge integration root preflight that detects missing, empty, or de-registered task worktrees before using them as cwd.
- Reacquire/repair unusable reuse-task-worktree roots before merge execution and reject unusable roots during handoff.
- Cover vanished and unregistered worktree recovery paths plus focused preflight unit cases.
- Document the FN-6278 preflight behavior alongside transient merge recovery and merge integration worktree contracts.
Files changed:
docs/architecture.md | 4 +-
.../__tests__/merger-integration-worktree.test.ts | 82 ++++++++
.../merge-runner-spawn-enoent-prevention.test.ts | 233 +++++++++++++++++++++
packages/engine/src/merger-integration-worktree.ts | 71 +++++++
packages/engine/src/merger.ts | 19 +-
5 files changed, 396 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-6278
Fusion-Task-Lineage: ceecf70f-9e2d-4ffe-8c6f-a9a5b673d72d
2026-06-11 20:27:29 -07:00
gsxdsm
ac342f5012
FN-6220: harden AI merge worktree cleanup
...
Harden AI merge cleanup so temporary clean-room worktrees are removed and audited reliably.
- Canonicalize AI merge cleanup paths and prune stale git worktree metadata after removals.
- Treat already-absent or de-registered cleanup paths as idempotent success while still auditing genuine failures.
- Add regression coverage for successful, no-op, retry, thrown, orphaned, and dangling-registration cleanup paths.
- Document the inline and self-healing cleanup lifecycle for AI merge temp worktrees.
Files changed:
docs/architecture.md | 4 +-
.../engine/src/__tests__/merger-ai-cleanup.test.ts | 28 +-
.../ai-merge-worktree-cleanup.test.ts | 284 +++++++++++++++++++++
packages/engine/src/merger-ai.ts | 108 +++++---
4 files changed, 392 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-6220
Fusion-Task-Lineage: b002313c-4349-49c2-8d0f-cd1853369d84
2026-06-11 20:02:21 -07:00
gsxdsm
02ae5a9340
FN-6213: prevent keyboard from forcing mobile layout
...
Keep tablet and desktop layouts stable when the virtual keyboard shrinks viewport height.
- Gate short-height mobile detection on phone-class physical screen size.
- Reuse the shared mobile viewport helper across board, terminal, and workflow editor layout decisions.
- Cover tablet keyboard and landscape phone viewport behavior with regression tests and document the UI bug pattern.
- Preserve quarantine exclusions while resolving the squash merge conflict.
Files changed:
.../ui-bugs/tablet-keyboard-viewport-mode-flip.md | 54 +++++++++++++
packages/dashboard/app/components/Board.tsx | 4 +-
.../dashboard/app/components/SessionTerminal.tsx | 16 +---
.../app/components/WorkflowNodeEditor.tsx | 41 +++++-----
.../__tests__/SessionTerminal.mobile.test.tsx | 57 ++++++++++----
.../app/hooks/__tests__/useViewportMode.test.ts | 90 +++++++++++++++++++++-
packages/dashboard/app/hooks/useViewportMode.ts | 26 ++++++-
packages/engine/vitest.config.ts | 1 +
scripts/lib/test-quarantine.json | 5 ++
9 files changed, 239 insertions(+), 55 deletions(-)
Fusion-Task-Id: FN-6213
Fusion-Task-Lineage: 01af6489-8c34-4318-9cff-1bceb1fa5a5d
2026-06-11 19:37:25 -07:00
gsxdsm
1eb256bbf6
FN-6207: quarantine active-session cleanup pruning test
...
Quarantines the flaky active-session pruning coverage without hiding the rest of merger cleanup tests.
- Move the active-session pruning scenario into its own focused test file.
- Keep the broader merger cleanup suite in the reliability project.
- Point the quarantine ledger and engine default exclude at only the isolated flaky test.
Files changed:
.../merger-ai-cleanup-active-session.test.ts | 60 ++++++++++++++++++++++
.../engine/src/__tests__/merger-ai-cleanup.test.ts | 22 ++------
packages/engine/vitest.config.ts | 2 +-
scripts/lib/test-quarantine.json | 4 +-
4 files changed, 66 insertions(+), 22 deletions(-)
Fusion-Task-Id: FN-6207
Fusion-Task-Lineage: b5e806cb-aec8-4893-83ef-d27164250a5c
2026-06-11 19:18:05 -07:00
gsxdsm
9a71b1c7d1
FN-6242: recover transient spawn merge failures
...
Recover retry-exhausted in-review merge tasks when the merger failed before spawning its git command.
- Classify spawn ENOTDIR and spawn ENOENT errors as bounded transient merge failures.
- Requeue retry-exhausted in-review tasks for auto-merge while preserving the transient recovery budget.
- Cover the classifier and self-healing recovery paths for process-spawn failures.
- Document the transient merge recovery classes and bounded budget behavior.
Files changed:
docs/architecture.md | 1 +
packages/engine/src/__tests__/self-healing.test.ts | 101 +++++++++++++++++++++
.../transient-merge-error-classifier.test.ts | 40 ++++++++
.../engine/src/transient-merge-error-classifier.ts | 11 +++
4 files changed, 153 insertions(+)
Fusion-Task-Id: FN-6242
Fusion-Task-Lineage: 3ca0ab1b-7184-4808-85ad-3becc9c99329
2026-06-11 18:41:49 -07:00
gsxdsm
94c3cce7bc
FN-6257: make AI merge cleanup idempotent for absent worktrees
...
AI merge cleanup now tolerates already-removed worktrees without failing a landed merge.
- Treat ENOENT and de-registered worktree removal errors as successful idempotent cleanup.
- Register AI merge temp paths before worktree creation and keep raw/canonical paths active.
- Add cleanup regression coverage and include the cleanup suite in reliability tests.
- Document the idempotent cleanup telemetry contract.
Files changed:
docs/architecture.md | 2 +-
.../engine/src/__tests__/merger-ai-cleanup.test.ts | 48 +++++++-
.../ai-merge-cleanup-enoent-idempotent.test.ts | 128 +++++++++++++++++++++
packages/engine/src/merger-ai.ts | 73 +++++++++---
packages/engine/vitest.config.ts | 5 +-
5 files changed, 239 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-6257
Fusion-Task-Lineage: c669fa1e-2c92-4e2f-8726-4939a3146955
2026-06-11 18:14:45 -07:00
gsxdsm
3cb0f9f371
FN-6231: enlarge tablet modal and expose triage prompt
...
Increase tablet task detail modal height while keeping triage prompt contracts testable.\n\n- Set tablet task detail modal height to 92vh with a dynamic viewport max-height guard.\n- Add CSS regression coverage for desktop, tablet, mobile, and embedded modal height invariants.\n- Export the standard triage prompt and include it in invariant wording tests.\n\nFiles changed:\n .../dashboard/app/components/TaskDetailModal.css | 2 +\n .../__tests__/core-modals-mobile.test.tsx | 74 ++++-\n packages/engine/src/__tests__/triage.test.ts | 5 +-\n packages/engine/src/triage.ts | 333 +++++++++++++++++++++\n 4 files changed, 406 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-6231
Fusion-Task-Lineage: 58e990dd-2dbb-4c6e-869d-661b02699cef
2026-06-11 17:15:24 -07:00
gsxdsm
39b2478f01
FN-6227: handle non-empty worktree removals
...
Recover native worktree cleanup when git refuses to remove a non-empty worktree.
- Detect recoverable git worktree remove errors and fall back to filesystem removal plus admin pruning.
- Add a worktree remove fallback audit event for recovery visibility.
- Cover non-empty removal recovery with unit and real-git regression tests.
- Keep flaky-test quarantine exclusions merged with current main.
Files changed:
docs/architecture.md | 4 +-
...tree-remove-non-empty-recovery.real-git.test.ts | 139 +++++++++++++++++++++
.../engine/src/__tests__/worktree-backend.test.ts | 113 ++++++++++++++++-
packages/engine/src/run-audit.ts | 1 +
packages/engine/src/worktree-backend.ts | 57 ++++++++-
packages/engine/vitest.config.ts | 1 +
scripts/lib/test-quarantine.json | 5 +
7 files changed, 311 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6227
Fusion-Task-Lineage: 98673303-8109-4fe8-8d9f-eb867fb28bdd
2026-06-11 16:15:07 -07:00
gsxdsm
3e69d3990d
FN-6244: protect active AI merge worktrees
...
Ensure AI merge cleanup only reaps stale, inactive temp worktrees.
- Register live AI merge clean-room paths in the active session registry while merges run.
- Add a minimum temp-worktree reap age and conservative lookup-error handling to sweep and prune paths.
- Expand cleanup tests and release the repaired AI merge cleanup test from quarantine.
Files changed:
docs/architecture.md | 2 +-
.../engine/src/__tests__/merger-ai-cleanup.test.ts | 38 ++++++++++++++--
.../__tests__/self-healing-tempdir-sweep.test.ts | 52 +++++++++++++++++++---
packages/engine/src/active-session-registry.ts | 2 +-
packages/engine/src/merger-ai.ts | 29 +++++++++++-
packages/engine/src/self-healing.ts | 28 +++++++++---
packages/engine/vitest.config.ts | 1 -
scripts/lib/test-quarantine.json | 5 ---
8 files changed, 132 insertions(+), 25 deletions(-)
Fusion-Task-Id: FN-6244
Fusion-Task-Lineage: 5c8ced12-d38f-4e45-9ea0-119b3236a2cb
2026-06-11 15:54:49 -07:00
gsxdsm
c285f3fb88
FN-6218: restore pi upgrade compatibility
...
Restore Pi-upgraded workspaces to keep Fusion resources accessible and recover title generation when configured models go stale.
- Mark read-only Fusion/Pi provider settings views as project-trusted so extension loading keeps working after Pi upgrades.
- Retry task title summarization with automatic model resolution when the configured provider model is missing from the Pi registry.
- Cover provider settings trust behavior and stale summarizer fallback paths with regression tests.
- Document the read-only settings trust contract and add a patch changeset.
Files changed:
.changeset/fn-6218-pi-upgrade-regressions.md | 5 +
docs/settings-reference.md | 2 +
docs/task-management.md | 2 +
.../commands/__tests__/provider-settings.test.ts | 16 ++++
packages/cli/src/commands/provider-settings.ts | 5 +
packages/core/src/__tests__/ai-summarize.test.ts | 102 +++++++++++++++++++++
packages/core/src/ai-summarize.ts | 85 ++++++++++++-----
.../src/__tests__/pi-create-fn-agent.test.ts | 32 +++++++
packages/engine/src/pi.ts | 7 +-
9 files changed, 233 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-6218
Fusion-Task-Lineage: 3d6aca32-a56a-43a0-a57b-8e6abc839ce9
2026-06-11 09:51:49 -07:00
gsxdsm
8c16395430
fix: stop self-healing from reaping worktrees with live sessions
...
The idle-worktree sweep (cleanupOrphans) and cap-enforcement sweep only
guarded isWorktreeResumeReserved (CLI resume sessions), not in-process
active sessions. scanIdleWorktrees treats a worktree as active only while
a non-done task points at it, but the executor transiently moves tasks to
done or nulls the worktree field mid-run — so a checkout backing a live
executor/merger/step/workflow session could be removed before the work
finished. Add the activeSessionRegistry.isPathActive guard to both loops,
mirroring reapUnregisteredOrphans (FN-4811/FN-5065).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 09:21:23 -07:00
gsxdsm
1a716f2f95
FN-6232: centralize triage planning prompt resolution
...
Route standard triage prompt construction through workflow IR while keeping custom and fast-mode overrides intact.
- Export the workflow planning prompt resolver and use it as the standard triage prompt source.
- Move duplicated triage policy text into the shared core prompt definition.
- Add regression coverage for workflow-sourced planning prompts, duplicate search guidance, and prompt override behavior.
- Add a patch changeset for the published CLI bundle.
Files changed:
.changeset/FN-6232-triage-prompt-single-source.md | 5 +
packages/core/src/__tests__/agent-prompts.test.ts | 58 ++--
packages/core/src/agent-prompts.ts | 111 +++++--
packages/core/src/index.ts | 2 +
packages/core/src/workflow-ir-resolver.ts | 28 ++
.../triage-duplicate-search-regression.test.ts | 19 +-
.../triage-planning-prompt-single-source.test.ts | 179 +++++++++++
packages/engine/src/__tests__/triage.test.ts | 91 +++---
packages/engine/src/triage.ts | 352 +--------------------
9 files changed, 413 insertions(+), 432 deletions(-)
Fusion-Task-Id: FN-6232
Fusion-Task-Lineage: c70c33ed-c61b-49d2-bcea-d860899c1512
2026-06-11 09:21:23 -07:00
gsxdsm
36f5ecdaba
FN-6226: skip fast-mode workflow graph validation nodes
...
Fast execution mode now bypasses custom pre-merge workflow graph validation consistently.
- Skip custom graph prompt, script, and gate nodes for fast-mode tasks while preserving human waits and CLI-agent work.
- Add regression coverage for fast-mode custom workflow behavior and standard-mode/null-mode validation.
- Document fast-mode workflow graph bypass behavior and record the published package changeset.
- Quarantine the unrelated self-healing real-git flake from the engine core gate.
Files changed:
.changeset/FN-6226-fast-mode-workflows.md | 5 +
docs/task-management.md | 6 +-
docs/workflow-steps.md | 2 +-
.../__tests__/executor-fast-mode-workflows.test.ts | 280 +++++++++++++++++++++
packages/engine/src/executor.ts | 16 ++
packages/engine/vitest.config.ts | 1 +
scripts/lib/test-quarantine.json | 5 +
7 files changed, 313 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6226
Fusion-Task-Lineage: 68d88a7a-e157-4d18-a2c2-9065946066de
2026-06-11 09:21:23 -07:00