Commit Graph

1444 Commits

Author SHA1 Message Date
semih
9cad8ff716 fix(executor): contamination detector reads origin/<baseBranch>, not stale local main
v0.29.0's classifyForeignCommits() defaults mainRef="main" — the LOCAL main branch.
For Fusion setups where main is never auto-updated (e.g. Fusion writes only to
origin/dev with humans merging dev→main on a separate branch), local main drifts
behind quickly. Each task created after the drift fails with:

  Branch fusion/fn-XXX contains N foreign task-attributed commits since base SHA
  [recovery] contamination classification: already-upstream=[none] unique=[14 SHAs]

All "unique" SHAs are legitimate merged dev commits that ARE on origin/main and
origin/dev — the detector just can't see that because it's comparing against
stale local main.

Resolution order at the call site:
1. origin/<baseBranch> (settings: baseBranch + worktreeRebaseRemote remote name)
2. origin/main (matches the audit script's default)
3. "main" (legacy default — preserves behavior for projects without those settings)

Logs the resolved mainRef so future drift is observable.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 12:00:14 +03:00
semih
84b4932331 feat(executor): add sandbox-tester pre-merge gate (opt-in)
Wraps finalizeAlreadyReviewedTask so that before mergeTask runs, a Claude
subprocess with the .fusion/agents/sandbox-tester persona spins an OpenSandbox
sandbox, exercises the change in a real browser, and returns a verdict:

- APPROVE → merge proceeds
- REVISE → task bounced to in-progress with the smoke report logged
- SKIP   → no UI surface changed; merge proceeds

Gate is OPT-IN via env var FUSION_SANDBOX_GATE_ENABLED=true. Disabled by
default — existing tasks merge through the unchanged path. Errors and
timeouts default to APPROVE to avoid blocking on infrastructure flakes.

Persona file (project-side, not in this repo):
  project/sase/.fusion/agents/sandbox-tester/{soul,instructions}.md

MCP wiring (already in place):
  ~/.claude.json has the opensandbox stdio MCP server registered.
  pi-claude-cli's --mcp-config layers without --strict-mcp-config so the
  user-config opensandbox tools are visible to the subprocess.

Self-healing's mergeTask recovery path (self-healing.ts:1508) is intentionally
NOT gated — that path covers tasks already vetted that got stuck post-fn_task_done;
re-running sandbox there would thrash resources on recovery cycles.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 11:18:04 +03:00
Fusion
4adc1822c3 feat(FN-4559): complete remaining recovery, tests, and docs
Fusion-Task-Id: FN-4559
Fusion-Task-Lineage: 9276f683-657c-4604-aaef-143da488b287
2026-05-15 00:50:11 -07:00
Fusion
e2dc95b418 feat(FN-4559): complete Step 2 — recover finalize callsites and commitSha propagation
Fusion-Task-Id: FN-4559
Fusion-Task-Lineage: 9276f683-657c-4604-aaef-143da488b287
2026-05-15 00:50:11 -07:00
Fusion
b46cf42a67 feat(FN-4559): complete Step 1 — shared detector and finalize classification
Fusion-Task-Id: FN-4559
Fusion-Task-Lineage: 9276f683-657c-4604-aaef-143da488b287
2026-05-15 00:50:11 -07:00
Fusion
216d76db86 feat(FN-4569): add fn_feature_update mission tool
Fusion-Task-Id: FN-4569
Fusion-Task-Lineage: c6736466-c317-4d6c-b1a6-225554e8fc0f
2026-05-15 00:36:38 -07:00
Fusion
a671b5a3cb feat(FN-4565): align self-healing assertion with FN-4563 unusable-worktree
Test-only update aligning a self-healing assertion's wording with the FN-4563 unusable-worktree terminology, touching only the reliability-interaction test file.

Fusion-Task-Id: FN-4565
2026-05-14 23:41:25 -07:00
Fusion
8b0c75b52e feat(FN-4563): complete Step 2 — broaden self-healing rationale
Fusion-Task-Id: FN-4563
Fusion-Task-Lineage: a0caaa7b-8e87-4ae1-8c51-b46e4ac61d59
2026-05-14 23:24:18 -07:00
Fusion
60a15288e6 feat(FN-4564): complete Step 4 — sync self-healing missing-worktree docstring
Fusion-Task-Id: FN-4564
Fusion-Task-Lineage: 1a0c186a-1eb1-496a-aa8d-1bdf2254bb20
2026-05-14 23:18:47 -07:00
Fusion
c65f1b80f4 test(FN-4564): complete Step 3 — add self-healing rebound coverage
Fusion-Task-Id: FN-4564
Fusion-Task-Lineage: 1a0c186a-1eb1-496a-aa8d-1bdf2254bb20
2026-05-14 23:18:47 -07:00
Fusion
869da6f680 test(FN-4564): complete Step 2 — cover all worktree error variants
Fusion-Task-Id: FN-4564
Fusion-Task-Lineage: 1a0c186a-1eb1-496a-aa8d-1bdf2254bb20
2026-05-14 23:18:47 -07:00
Fusion
9a339f1904 feat(FN-4564): complete Step 1 — widen worktree session failure classifier
Fusion-Task-Id: FN-4564
Fusion-Task-Lineage: 1a0c186a-1eb1-496a-aa8d-1bdf2254bb20
2026-05-14 23:18:47 -07:00
Fusion
3f651fe2ba test(FN-4538): cover reconcile and churn overlap scenarios
Fusion-Task-Id: FN-4538
Fusion-Task-Lineage: 332b4c78-b67f-45d0-9181-0bb539b662c1
2026-05-14 22:24:50 -07:00
Fusion
8d9f9ad511 test(FN-4538): add overlap-blocked regression coverage
Fusion-Task-Id: FN-4538
Fusion-Task-Lineage: 332b4c78-b67f-45d0-9181-0bb539b662c1
2026-05-14 22:24:50 -07:00
Fusion
4d0603ff2d feat(FN-4538): complete Step 3 — preserve overlap block in self-healing
Fusion-Task-Id: FN-4538
Fusion-Task-Lineage: 332b4c78-b67f-45d0-9181-0bb539b662c1
2026-05-14 22:24:50 -07:00
Fusion
083f53a523 feat(FN-4538): complete Step 2 — preserve overlap blockers in scheduler
Fusion-Task-Id: FN-4538
Fusion-Task-Lineage: 332b4c78-b67f-45d0-9181-0bb539b662c1
2026-05-14 22:24:50 -07:00
Fusion
f5c7019d28 fix(FN-4545): satisfy lint for room message retry context
Fusion-Task-Id: FN-4545
Fusion-Task-Lineage: 95108429-618e-4a6d-9fa9-7ac2596665a2
2026-05-14 22:16:44 -07:00
Fusion
32587f7569 fix(FN-4545): wire retry-burn logging and complete handler coverage
Fusion-Task-Id: FN-4545
Fusion-Task-Lineage: 95108429-618e-4a6d-9fa9-7ac2596665a2
2026-05-14 22:16:44 -07:00
Fusion
38341e9684 feat(FN-4545): complete Step 10 — documentation and delivery artifacts
Fusion-Task-Id: FN-4545
Fusion-Task-Lineage: 95108429-618e-4a6d-9fa9-7ac2596665a2
2026-05-14 22:16:44 -07:00
Fusion
bc9e560adb test(FN-4545): add reliability interaction coverage
Fusion-Task-Id: FN-4545
Fusion-Task-Lineage: 95108429-618e-4a6d-9fa9-7ac2596665a2
2026-05-14 22:16:44 -07:00
Fusion
8268f609f9 test(FN-4545): add unit coverage for contamination and delivery handlers
Fusion-Task-Id: FN-4545
Fusion-Task-Lineage: 95108429-618e-4a6d-9fa9-7ac2596665a2
2026-05-14 22:16:44 -07:00
Fusion
bf3b6d4bd4 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
9f6f1cfc79 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
1610c4cba6 feat(FN-4545): complete Step 2 — add contamination auto-recovery handler
Fusion-Task-Id: FN-4545
Fusion-Task-Lineage: 95108429-618e-4a6d-9fa9-7ac2596665a2
2026-05-14 22:16:44 -07:00
Fusion
b8b6eb7e71 feat(FN-4545): complete Step 1 — extend auto-recovery failure taxonomy
Fusion-Task-Id: FN-4545
Fusion-Task-Lineage: 95108429-618e-4a6d-9fa9-7ac2596665a2
2026-05-14 22:16:44 -07:00
Fusion
cfedb27921 feat(FN-4546): complete Step 5 — document and audit stale active reclaim
Fusion-Task-Id: FN-4546
Fusion-Task-Lineage: f10f8fcb-b26d-4ee8-b83e-b741de01983b
2026-05-14 22:16:44 -07:00
Fusion
a1a8874bca test(FN-4546): complete Step 3 — add stale-active-branch reclaim regression tests
Fusion-Task-Id: FN-4546
Fusion-Task-Lineage: f10f8fcb-b26d-4ee8-b83e-b741de01983b
2026-05-14 22:16:44 -07:00
Fusion
d26585ef73 feat(FN-4546): complete Step 2 — reclaim stale active branches
Fusion-Task-Id: FN-4546
Fusion-Task-Lineage: f10f8fcb-b26d-4ee8-b83e-b741de01983b
2026-05-14 22:16:44 -07:00
Fusion
5a0b06cf9b feat(FN-4550): remove duplicate Case 6 skip coverage
Removes a duplicate "Case 6" skip from the merge-strategy overlap test file, cleaning up the test coverage without changing behavior.

Fusion-Task-Id: FN-4550

Fusion-Task-Lineage: 3b254a66-bd47-4699-a788-3a57178a2884
2026-05-14 20:21:09 -07:00
gsxdsm
c120de65ec fix: avoid same-column task move errors and keep durable agents active 2026-05-14 19:26:58 -07:00
Fusion
71bd971c55 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
c8804a4cd4 feat(FN-4536): complete Step 2 — add branch worktree handler skeleton
Fusion-Task-Id: FN-4536
Fusion-Task-Lineage: 8d5615e4-e75d-413d-b3ab-0c4874b21fc5
2026-05-14 19:06:25 -07:00
Fusion
e79c8313c0 feat(FN-4452): complete Step 3 — surface stale paused reviews in self-healing
Fusion-Task-Id: FN-4452
Fusion-Task-Lineage: 7d8b1c13-883b-4815-94ee-fdf18ad24e5f
2026-05-14 18:35:30 -07:00
Fusion
ade51f8eb6 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
816575c4a9 chore(FN-4527): complete Steps 4-5 — verify gates and add changeset
Fusion-Task-Id: FN-4527
Fusion-Task-Lineage: de75c453-dc86-43d2-9cc5-50b20ee7014d
2026-05-14 18:07:05 -07:00
Fusion
65b3b507d0 test(FN-4534): fix auto-recovery audit assertion typing
Fusion-Task-Id: FN-4534
Fusion-Task-Lineage: 2b46a5df-efc6-4305-a0f2-69991e58512c
2026-05-14 17:59:57 -07:00
Fusion
44d9d0392d 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
60442c6e87 feat(FN-4518): complete Step 4 — carry rebase base through self-healing
Fusion-Task-Id: FN-4518
Fusion-Task-Lineage: 48749dec-b2c9-484b-a13e-ffacc1fa9014
2026-05-14 17:04:17 -07:00
Fusion
b819b19907 feat(FN-4518): complete Step 2 — persist rebase merge base SHA
Fusion-Task-Id: FN-4518
Fusion-Task-Lineage: 48749dec-b2c9-484b-a13e-ffacc1fa9014
2026-05-14 17:04:17 -07:00
Fusion
1b0a2ba32c test(FN-4518): cover rebase base SHA persistence in merger details
Fusion-Task-Id: FN-4518
Fusion-Task-Lineage: 48749dec-b2c9-484b-a13e-ffacc1fa9014
2026-05-14 17:04:16 -07:00
Fusion
9fe81424bd feat(FN-4508): complete Step 7 — docs and compatibility updates
Fusion-Task-Id: FN-4508
Fusion-Task-Lineage: 948a9cae-3975-4f15-bd47-2f88b379171d
2026-05-14 16:33:27 -07:00
Fusion
88ce836f35 test(FN-4508): complete Step 5 — add reliability interaction backstops
Fusion-Task-Id: FN-4508
Fusion-Task-Lineage: 948a9cae-3975-4f15-bd47-2f88b379171d
2026-05-14 16:33:27 -07:00
Fusion
f0e6b0952c test(FN-4508): add stale-resolved and ghost-branch recovery regressions
Fusion-Task-Id: FN-4508
Fusion-Task-Lineage: 948a9cae-3975-4f15-bd47-2f88b379171d
2026-05-14 16:33:27 -07:00
Fusion
067c10e388 fix(FN-4508): complete Step 3 — invalidate stale-resolved cache metadata
Fusion-Task-Id: FN-4508
Fusion-Task-Lineage: 948a9cae-3975-4f15-bd47-2f88b379171d
2026-05-14 16:33:27 -07:00
Fusion
0ea26930ca 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
19bab99986 feat(FN-4508): complete Step 1 — harden inspectBranchConflict ghost/tip guards
Fusion-Task-Id: FN-4508
Fusion-Task-Lineage: 948a9cae-3975-4f15-bd47-2f88b379171d
2026-05-14 16:33:27 -07:00
Fusion
eb9a838d12 feat(FN-3977): complete Step 2 — scheduler overlap bottleneck warnings
Fusion-Task-Id: FN-3977
Fusion-Task-Lineage: c84f2ce0-3726-49b2-ad84-6703edbfecf1
2026-05-14 15:49:55 -07:00
Fusion
85c6869fa6 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
53de550792 test(FN-4398): complete Step 4 — add retry storm integration coverage
Fusion-Task-Id: FN-4398
Fusion-Task-Lineage: 8b898b2e-3468-4fa7-8546-b8f6ba52cf46
2026-05-14 15:25:08 -07:00
Fusion
0999b2573d 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