Commit Graph

629 Commits

Author SHA1 Message Date
Fusion
50fe141f5b feat(FN-4545): complete Step 4-5 — add message-delivery recovery handler wiring
Fusion-Task-Id: FN-4545
Fusion-Task-Lineage: 95108429-618e-4a6d-9fa9-7ac2596665a2
2026-05-14 22:16:44 -07:00
Fusion
c37d3b404c fix(FN-4545): wire contamination handler into auto-recovery dispatcher
Fusion-Task-Id: FN-4545
Fusion-Task-Lineage: 95108429-618e-4a6d-9fa9-7ac2596665a2
2026-05-14 22:16:44 -07:00
Fusion
5e1a5a55bb feat(FN-4536): complete auto-recovery branch/worktree handler
Fusion-Task-Id: FN-4536
Fusion-Task-Lineage: 8d5615e4-e75d-413d-b3ab-0c4874b21fc5
2026-05-14 19:06:25 -07:00
Fusion
2cd7f43627 feat(FN-4535): add file-scope violation auto-recovery handler
Adds a new `auto-recovery-handlers/file-scope.ts` skeleton to handle file-scope invariant violations and wires it into the executor, establishing the first step of FN-4535's auto-recovery pipeline.

Fusion-Task-Id: FN-4535
2026-05-14 18:28:24 -07:00
Fusion
79eb74ca7e feat(FN-4534): add auto-recovery dispatcher and pause-site wiring
Fusion-Task-Id: FN-4534
Fusion-Task-Lineage: 2b46a5df-efc6-4305-a0f2-69991e58512c
2026-05-14 17:59:57 -07:00
Fusion
473ea373b8 feat(FN-4508): complete Step 2 — handle tip-already-merged recovery paths
Fusion-Task-Id: FN-4508
Fusion-Task-Lineage: 948a9cae-3975-4f15-bd47-2f88b379171d
2026-05-14 16:33:27 -07:00
Fusion
652e820f7d feat(FN-4398): complete remaining dashboard visibility and docs
Fusion-Task-Id: FN-4398
Fusion-Task-Lineage: 8b898b2e-3468-4fa7-8546-b8f6ba52cf46
2026-05-14 15:25:08 -07:00
Fusion
9230c80fb0 feat(FN-4398): complete Step 3 — wire retry-burned logging and caps
Fusion-Task-Id: FN-4398
Fusion-Task-Lineage: 8b898b2e-3468-4fa7-8546-b8f6ba52cf46
2026-05-14 15:25:08 -07:00
Fusion
61cfb115c0 fix(FN-4482): harden scope guard typing and prompt source
Fusion-Task-Id: FN-4482
Fusion-Task-Lineage: 5850cda2-ded5-42ac-a206-396839580748
2026-05-14 14:31:25 -07:00
Fusion
ffd274d646 feat(FN-4482): complete Step 2 — add plan-only scope leak guard
Fusion-Task-Id: FN-4482
Fusion-Task-Lineage: 5850cda2-ded5-42ac-a206-396839580748
2026-05-14 14:31:25 -07:00
Fusion
49bb2b3858 feat(FN-4455): complete Step 5 — migrate memory mode resolution and tests
Fusion-Task-Id: FN-4455
Fusion-Task-Lineage: 735091fa-9d42-4f23-9c5b-3e5889da99a6
2026-05-14 13:59:10 -07:00
Fusion
259903e56b feat(FN-4499): complete Step 4 — wire bootstrap contamination recovery
Fusion-Task-Id: FN-4499
Fusion-Task-Lineage: 3e9fee75-5c3d-4ce5-aa8b-3f2bb94e48eb
2026-05-14 13:33:01 -07:00
Fusion
3bd4539a2c fix(FN-4488): align policy typing across gate resolution
Fusion-Task-Id: FN-4488
Fusion-Task-Lineage: 3fc1ac43-490f-43f2-a27e-4fdceb64d9c4
2026-05-14 13:16:10 -07:00
Fusion
5cf13392dc feat(FN-4488): complete Step 2 — engine project-default wiring
Fusion-Task-Id: FN-4488
Fusion-Task-Lineage: 3fc1ac43-490f-43f2-a27e-4fdceb64d9c4
2026-05-14 13:16:09 -07:00
Fusion
0603b5a04c feat(FN-4367): finalize structured workflow verdict contract
Fusion-Task-Id: FN-4367
Fusion-Task-Lineage: adbfac60-5cfe-4ae9-9706-1094dfe7d676
2026-05-14 12:14:05 -07:00
Fusion
76f3dad05c chore(FN-4492): deduplicate workflow step verdict parser
Fusion-Task-Id: FN-4492
Fusion-Task-Lineage: a358eab9-8491-41ef-9713-75961eb41d5d
2026-05-14 12:10:51 -07:00
Fusion
523ac6ecda feat(FN-4367): finalize structured workflow verdict contract
Fusion-Task-Id: FN-4367
Fusion-Task-Lineage: adbfac60-5cfe-4ae9-9706-1094dfe7d676
2026-05-14 11:40:59 -07:00
gsxdsm
ae79deb8db feat(FN-4367): add structured JSON verdict output for prompt-mode workflow steps
- Add verdict (PASS/FAIL) field to core WorkflowStepResult type
- Add parseWorkflowStepOutput() engine helper for json-workflow-verdict blocks
- Update executeWorkflowStep to extract structured verdict/notes from output
- Persist verdict and notes in runWorkflowSteps result entries
- Update agent prompt Feedback Format to require JSON verdict block
- Update WS-006 (Frontend UX Design) template prompt with structured fast-bail
- Add WorkflowResultsTab verdict badge and notes rendering with CSS
- Add 11 engine tests for verdict parsing edge cases
- Add 6 dashboard tests for verdict/notes rendering
- Create replace-ws006-prompt.mjs migration script for existing DBs
- Add changeset for @runfusion/fusion patch

Fusion-Task-Id: FN-4367
Fusion-Task-Lineage: adbfac60-5cfe-4ae9-9706-1094dfe7d676
2026-05-14 11:40:59 -07:00
Fusion
cf56d959c8 feat(FN-4485): stabilize verification gates for delivery
Commits merged:
- fix(FN-4485): stabilize verification gates for delivery

Files changed:
packages/core/src/__tests__/db-migrate.test.ts |  2 +-
 packages/engine/src/executor.ts                | 82 --------------------------
 2 files changed, 1 insertion(+), 83 deletions(-)

Fusion-Task-Id: FN-4485

Fusion-Task-Lineage: 034088dc-ebc4-4e12-8314-39419d41b23f
2026-05-14 11:35:55 -07:00
Fusion
e01d2ef04f feat(FN-4485): complete Step 2 — tighten branch conflict classifier
Fusion-Task-Id: FN-4485
Fusion-Task-Lineage: 034088dc-ebc4-4e12-8314-39419d41b23f
2026-05-14 11:23:43 -07:00
Fusion
f35edfbfb6 feat(FN-4367): finalize structured workflow verdict contract
Fusion-Task-Id: FN-4367
Fusion-Task-Lineage: adbfac60-5cfe-4ae9-9706-1094dfe7d676
2026-05-14 11:19:08 -07:00
gsxdsm
335079e0e3 feat(FN-4367): add structured JSON verdict output for prompt-mode workflow steps
- Add verdict (PASS/FAIL) field to core WorkflowStepResult type
- Add parseWorkflowStepOutput() engine helper for json-workflow-verdict blocks
- Update executeWorkflowStep to extract structured verdict/notes from output
- Persist verdict and notes in runWorkflowSteps result entries
- Update agent prompt Feedback Format to require JSON verdict block
- Update WS-006 (Frontend UX Design) template prompt with structured fast-bail
- Add WorkflowResultsTab verdict badge and notes rendering with CSS
- Add 11 engine tests for verdict parsing edge cases
- Add 6 dashboard tests for verdict/notes rendering
- Create replace-ws006-prompt.mjs migration script for existing DBs
- Add changeset for @runfusion/fusion patch

Fusion-Task-Id: FN-4367
Fusion-Task-Lineage: adbfac60-5cfe-4ae9-9706-1094dfe7d676
2026-05-14 11:19:08 -07:00
Fusion
21a85fd261 feat(FN-4367): finalize structured workflow verdict contract
Fusion-Task-Id: FN-4367
Fusion-Task-Lineage: adbfac60-5cfe-4ae9-9706-1094dfe7d676
2026-05-14 11:17:23 -07:00
gsxdsm
8064eee6ee feat(FN-4367): add structured JSON verdict output for prompt-mode workflow steps
- Add verdict (PASS/FAIL) field to core WorkflowStepResult type
- Add parseWorkflowStepOutput() engine helper for json-workflow-verdict blocks
- Update executeWorkflowStep to extract structured verdict/notes from output
- Persist verdict and notes in runWorkflowSteps result entries
- Update agent prompt Feedback Format to require JSON verdict block
- Update WS-006 (Frontend UX Design) template prompt with structured fast-bail
- Add WorkflowResultsTab verdict badge and notes rendering with CSS
- Add 11 engine tests for verdict parsing edge cases
- Add 6 dashboard tests for verdict/notes rendering
- Create replace-ws006-prompt.mjs migration script for existing DBs
- Add changeset for @runfusion/fusion patch

Fusion-Task-Id: FN-4367
Fusion-Task-Lineage: adbfac60-5cfe-4ae9-9706-1094dfe7d676
2026-05-14 11:17:23 -07:00
Fusion
09ad2b4edf feat(FN-4367): finalize structured workflow verdict contract
Fusion-Task-Id: FN-4367
Fusion-Task-Lineage: adbfac60-5cfe-4ae9-9706-1094dfe7d676
2026-05-14 11:15:47 -07:00
gsxdsm
db78679758 feat(FN-4367): add structured JSON verdict output for prompt-mode workflow steps
- Add verdict (PASS/FAIL) field to core WorkflowStepResult type
- Add parseWorkflowStepOutput() engine helper for json-workflow-verdict blocks
- Update executeWorkflowStep to extract structured verdict/notes from output
- Persist verdict and notes in runWorkflowSteps result entries
- Update agent prompt Feedback Format to require JSON verdict block
- Update WS-006 (Frontend UX Design) template prompt with structured fast-bail
- Add WorkflowResultsTab verdict badge and notes rendering with CSS
- Add 11 engine tests for verdict parsing edge cases
- Add 6 dashboard tests for verdict/notes rendering
- Create replace-ws006-prompt.mjs migration script for existing DBs
- Add changeset for @runfusion/fusion patch

Fusion-Task-Id: FN-4367
Fusion-Task-Lineage: adbfac60-5cfe-4ae9-9706-1094dfe7d676
2026-05-14 11:15:47 -07:00
Fusion
95cd678c52 fix(FN-4429): resolve lint and test gate regressions
Fusion-Task-Id: FN-4429
Fusion-Task-Lineage: b010437b-0e58-43f6-81b3-40dcebbf0873
2026-05-14 10:31:50 -07:00
Fusion
40fee0c128 fix(FN-4429): harden step-session abort path on user cancel
Fusion-Task-Id: FN-4429
Fusion-Task-Lineage: b010437b-0e58-43f6-81b3-40dcebbf0873
2026-05-14 10:31:50 -07:00
Fusion
78612dee95 fix(FN-4429): guard step-session paused abort user cancel
Fusion-Task-Id: FN-4429
Fusion-Task-Lineage: b010437b-0e58-43f6-81b3-40dcebbf0873
2026-05-14 10:31:50 -07:00
Fusion
1fdda7db32 fix(FN-4429): complete Step 2 — hard-cancel executor on user move
Fusion-Task-Id: FN-4429
Fusion-Task-Lineage: b010437b-0e58-43f6-81b3-40dcebbf0873
2026-05-14 10:31:49 -07:00
Fusion
951d8f6fe9 feat(FN-4371): complete Step 2 — executor no-commits guard flag
Fusion-Task-Id: FN-4371
Fusion-Task-Lineage: 4175ba4c-b7cb-4f3a-87c5-75e51f06c0ff
2026-05-14 09:59:15 -07:00
Fusion
d8255c2bb0 fix(FN-4476): handle fully-subsumed branch conflicts across reclaim paths
Fusion-Task-Id: FN-4476
Fusion-Task-Lineage: 8673c1d9-f47e-4d02-89e6-646040b9be32
2026-05-14 08:49:37 -07:00
Fusion
a8e05b5757 feat(FN-4368): complete Step 3 — advisory workflow failures never block
Fusion-Task-Id: FN-4368
Fusion-Task-Lineage: ac9b12e6-2101-4b51-89a0-6422fd7850ed
2026-05-14 07:21:45 -07:00
Fusion
af3550bb64 feat(FN-4366): enforce readonly tool allowlist for workflow steps
Added a readonly tool allowlist enforcement for workflow steps, blocking execution of state-mutating tools (`fn_task_update`, `fn_task_move`, etc.) during workflow step runs. The policy is wired into the executor and merger execution paths, with tests covering allowlist enforcement and a documentati

Fusion-Task-Id: FN-4366
2026-05-14 06:24:03 -07:00
Fusion
95d742abb3 feat(FN-4468): add workflow step gateMode advisory gating
Adds an "advisory" `gateMode` option for workflow steps: steps in advisory mode log findings but no longer block merge completion, while steps that must block can still be configured as blocking. The change covers the workflow step types and schema, executor gating logic, dashboard UI in WorkflowSte

Fusion-Task-Id: FN-4468
2026-05-14 05:35:12 -07:00
Fusion
3063c68932 fix(FN-4086): suppress execute dispatch during todo recovery hop
Fusion-Task-Id: FN-4086
Fusion-Task-Lineage: b2338fbc-960c-4540-9c19-216462525f0c
2026-05-14 04:54:25 -07:00
Fusion
fc68c6b28e fix(FN-4086): clarify recovered-task origin state logging
Fusion-Task-Id: FN-4086
Fusion-Task-Lineage: b2338fbc-960c-4540-9c19-216462525f0c
2026-05-14 04:54:25 -07:00
Fusion
151503c40e feat(FN-4086): complete Step 2 — add stranded todo recovery pass
Fusion-Task-Id: FN-4086
Fusion-Task-Lineage: b2338fbc-960c-4540-9c19-216462525f0c
2026-05-14 04:54:25 -07:00
Fusion
406632df7c feat(FN-4428): add contamination auto-recovery executor flow
Fusion-Task-Id: FN-4428
Fusion-Task-Lineage: ea174f50-49ac-4105-b6cf-db3bab0984fd
2026-05-14 02:28:57 -07:00
gsxdsm
86f8caf14e chore(FN-4428): import dependency content from fusion/fn-4410
Squash-imported the working tree of fusion/fn-4410 as a single commit so this branch carries the dep's content without inheriting its individual commits. If the dep is later squash-merged to main, this commit's patch-id should match the merge and rebase cleanly.

Fusion-Task-Id: FN-4428
Fusion-Task-Lineage: ea174f50-49ac-4105-b6cf-db3bab0984fd
2026-05-14 02:28:56 -07:00
Fusion
2e7f76b7a1 feat(FN-4393): complete Step 3 — branch memory inclusion by mode
Fusion-Task-Id: FN-4393
Fusion-Task-Lineage: 3615215d-9caa-4402-9258-a5a5de137dd6
2026-05-13 23:41:35 -07:00
Fusion
48f18511d8 feat(FN-4388): complete Step 1 — engine cache metrics logs
Fusion-Task-Id: FN-4388
Fusion-Task-Lineage: 7497a0a1-5edb-4778-b339-118d1fd668f7
2026-05-13 22:41:29 -07:00
Fusion
4e6440a126 feat(FN-4389): complete Step 8 — run verification and fix regressions
Fusion-Task-Id: FN-4389
Fusion-Task-Lineage: 366f9d57-c476-448f-96c0-6e753fc8b090
2026-05-13 22:03:38 -07:00
Fusion
e246076a76 fix(FN-4343): isolate workflow-step scope checks to post-step delta
Fusion-Task-Id: FN-4343
Fusion-Task-Lineage: b880b71a-9250-4d9e-bdac-8298a73058f7
2026-05-13 20:03:31 -07:00
Fusion
a3b505e2cb feat(FN-4343): complete Step 3 — enforce workflow step scope invariants
Fusion-Task-Id: FN-4343
Fusion-Task-Lineage: b880b71a-9250-4d9e-bdac-8298a73058f7
2026-05-13 20:03:31 -07:00
Fusion
540c5e16d8 feat(FN-4343): complete Step 2 — dual-signal frontend ux auto-skip
Fusion-Task-Id: FN-4343
Fusion-Task-Lineage: b880b71a-9250-4d9e-bdac-8298a73058f7
2026-05-13 20:03:31 -07:00
gsxdsm
b78b6ae70e fix(FN-4417): prefer local main over origin/main in contamination base
Follow-up to a2b494ddc. The previous fix correctly stopped using
task.baseCommitSha for the contamination check, but the new
resolveContaminationBaseRef tried origin/main first and fell back to
local main only if the origin/main lookup failed. On dev machines that
have not pushed recently, origin/main is a tracking ref that can lag
local main by hundreds of commits. `git merge-base HEAD origin/main`
then resolves successfully and returns the last common ancestor between
the (force-reset-to-local-main) branch and the stale origin/main ref,
which is exactly the same stale SHA the prior bug surfaced. Every
commit on local main since that point is then flagged as foreign
contamination.

Observed: after restarting the engine with a2b494ddc, FN-4315/FN-4403
still failed with `since base e787036b80cc...`. Local main was 166
commits ahead of origin/main; e787036 was the last shared commit.

Fix: reorder the shell fallback to prefer `main` over `origin/main`.
Local main is the canonical integration target for Fusion's merger,
and origin/main is only useful as a fallback when local main does not
exist (rare in a worktree).

Test updated: `resolveContaminationBaseRef returns the current
merge-base...` now asserts local `main` appears before `origin/main` in
the issued command so the shell `||` resolves to local main first.

Fusion-Task-Id: FN-4417
2026-05-13 19:07:31 -07:00
gsxdsm
a2b494ddc0 fix(FN-4417): stop false-positive branch contamination from stale baseCommitSha
The contamination check at executor.ts was reusing task.baseCommitSha as
its reference SHA. That field is intentionally preserved across resumed
sessions for stable diff math, which means it can lag behind main by
many commits. Passing it to assertCleanBranchAtBase caused every
legitimately-merged commit on main since the stale SHA to be reported
as a foreign task-attributed contamination commit, pausing the task
with pausedReason=branch-cross-contamination.

FN-4403 was the trigger case: a pooled worktree was force-reset to
current main by WorktreePool.prepareForTask (correctly), then the
executor immediately ran assertCleanBranchAtBase(rootDir, branch,
staleBaseCommitSha, taskId) and flagged 157 commits across ~39
unrelated FN-* tasks as contamination. FN-4417 itself then hit the
same bug when it tried to start, blocking the board.

Two fixes, both in packages/engine/src/executor.ts:

1. New resolveContaminationBaseRef(worktreePath) computes a fresh
   merge-base against origin/main or main and is used in place of
   resolveDiffBaseRef for the contamination check. It never reads
   task.baseCommitSha and never falls back to HEAD~1 (which on a
   force-reset pooled branch would be a main commit and re-introduce
   the same false positive at smaller scale). Returns undefined on
   git failure so the caller treats it as check skipped.

2. captureBaseCommitSha gains an explicit { isResume: boolean }
   parameter and only preserves an existing baseCommitSha when
   isResume is true. On fresh/pool acquisitions the branch was just
   force-reset to current main, so the stored value is stale by
   definition. Always recapture in that case. Diff-base stability
   across resumed sessions (FN-4309/FN-4383) is preserved by passing
   isResume: true on resume; the existing executor call site is
   already gated on non-resume and passes false.

Tests:
- executor-base-commit-capture.test.ts: updated to thread isResume
  through assertions and added a FN-4417 regression case that verifies
  a stale-but-ancestor baseCommitSha is recaptured (not preserved) on
  non-resume.
- executor-base-commit-capture.real-git.test.ts: FN-4309/FN-4383
  multi-session test now explicitly passes isResume: true on the
  second capture, matching the real resume code path.
- executor-contamination-base.test.ts (new): three focused tests for
  resolveContaminationBaseRef covering fresh-merge-base resolution,
  graceful failure when neither origin/main nor main resolves, and a
  structural guard that the function arity is 1 (no baseCommitSha
  parameter, so the bug cannot regress through that surface).

Verified: 4265 engine tests pass; tsc clean.

Fusion-Task-Id: FN-4417
2026-05-13 18:44:41 -07:00
Fusion
d39430b344 feat(FN-4409): add branch contamination assertions in worktree flows
Fusion-Task-Id: FN-4409
Fusion-Task-Lineage: c608c942-fec7-4489-9970-b8dc314f8be2
2026-05-13 17:44:46 -07:00
Fusion
ac2f779e1e fix(FN-4397): add branch-conflict tripwire and tighten stale detection
Fusion-Task-Id: FN-4397
Fusion-Task-Lineage: 1ffac4f7-adf5-4115-b588-108d75eadde7
2026-05-13 16:58:35 -07:00