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
semih
8db66f14e7
Merge upstream/main — v0.28.1 → v0.29.0 (721 commits)
2026-05-15 11:17:48 +03:00
gsxdsm
1a6309b446
Move FileEditor disclosure toggle into FileBrowserModal toolbar row
2026-05-15 01:05:09 -07:00
Fusion
d889eca648
test(FN-4570): complete Step 5 — cover TaskDetailModal merge-active suppression
...
Fusion-Task-Id: FN-4570
Fusion-Task-Lineage: 08deec6d-a54a-4296-9443-3101662314f2
2026-05-15 01:02:57 -07:00
Fusion
5a09f8fba3
test(FN-4570): complete Step 4 — add TaskCard merge-blocker regression
...
Fusion-Task-Id: FN-4570
Fusion-Task-Lineage: 08deec6d-a54a-4296-9443-3101662314f2
2026-05-15 01:02:57 -07:00
Fusion
b94d686d91
test(FN-4570): complete Step 3 — cover merge-active stall suppression
...
Fusion-Task-Id: FN-4570
Fusion-Task-Lineage: 08deec6d-a54a-4296-9443-3101662314f2
2026-05-15 01:02:56 -07:00
Fusion
125de2fffa
feat(FN-4570): complete Step 2 — centralize merge-active stall suppression
...
Fusion-Task-Id: FN-4570
Fusion-Task-Lineage: 08deec6d-a54a-4296-9443-3101662314f2
2026-05-15 01:02:56 -07:00
Fusion
a72808f4a5
feat(FN-4572): add viewport zoom regression assertions to PWA test
...
Adds viewport zoom regression assertions to the PWA test suite, covering the behavior fixed in FN-4572.
Fusion-Task-Id: FN-4572
2026-05-15 01:00:31 -07: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
54ed639e3d
feat(FN-4566): unify task card tracking retry timing chips
...
Unified the task card tracking retry timing chips in the dashboard, refactoring the display logic and styling for consistency across task states. The CSS was significantly simplified while tests were expanded to cover the new chip behavior.
Fusion-Task-Id: FN-4566
2026-05-15 00:48:45 -07:00
Fusion
3523788fed
feat(FN-4569): sync fusion extension tool docs
...
Fusion-Task-Id: FN-4569
Fusion-Task-Lineage: c6736466-c317-4d6c-b1a6-225554e8fc0f
2026-05-15 00:36:38 -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
6ae22b69a1
test(FN-4567): complete Step 3 — add toolbar collapse and mobile row regressions
...
Fusion-Task-Id: FN-4567
Fusion-Task-Lineage: 717443b5-35e6-49b6-960a-4072f76994bb
2026-05-15 00:30:18 -07:00
Fusion
02a8acf41e
feat(FN-4567): complete Step 2 — keep mobile toolbar on one row
...
Fusion-Task-Id: FN-4567
Fusion-Task-Lineage: 717443b5-35e6-49b6-960a-4072f76994bb
2026-05-15 00:30:18 -07:00
Fusion
2e2726d67d
feat(FN-4567): complete Step 1 — enforce hidden toolbar actions
...
Fusion-Task-Id: FN-4567
Fusion-Task-Lineage: 717443b5-35e6-49b6-960a-4072f76994bb
2026-05-15 00:30:18 -07:00
Fusion
0571d4a8af
feat(FN-4525): enforce shared chip heights across TaskCard columns
...
Completes Step 5 of FN-4525 by enforcing consistent chip heights in TaskCard components, adding CSS rules in both the component and global stylesheets with corresponding test coverage.
Fusion-Task-Id: FN-4525
2026-05-14 23:48:28 -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
2ca7fede2f
feat(FN-4560): complete Step 4 — unify toolbar disclosure and sizing
...
Fusion-Task-Id: FN-4560
Fusion-Task-Lineage: 90f0af13-2ec7-4ea5-9ebc-af3941465975
2026-05-14 23:05:29 -07:00
Fusion
0688333641
feat(FN-4560): complete Step 1 — restructure file editor toolbar layout
...
Fusion-Task-Id: FN-4560
Fusion-Task-Lineage: 90f0af13-2ec7-4ea5-9ebc-af3941465975
2026-05-14 23:05:29 -07:00
Fusion
7ec685fcfa
feat(FN-4462): complete Step 4 — mirror stall badge copy in detail modal
...
Fusion-Task-Id: FN-4462
Fusion-Task-Lineage: 15fc09f5-1363-429e-b131-9c9fdabee532
2026-05-14 22:57:48 -07:00
Fusion
98ef249bce
feat(FN-4462): complete Step 3 — emphasize retries-exhausted badge tone
...
Fusion-Task-Id: FN-4462
Fusion-Task-Lineage: 15fc09f5-1363-429e-b131-9c9fdabee532
2026-05-14 22:57:47 -07:00
Fusion
d4801b640f
feat(FN-4462): complete Step 2 — render retry-exhausted badge text
...
Fusion-Task-Id: FN-4462
Fusion-Task-Lineage: 15fc09f5-1363-429e-b131-9c9fdabee532
2026-05-14 22:57:47 -07:00
Fusion
738cd54eb1
feat(FN-4462): complete Step 1 — per-code stall copy and counter
...
Fusion-Task-Id: FN-4462
Fusion-Task-Lineage: 15fc09f5-1363-429e-b131-9c9fdabee532
2026-05-14 22:57:47 -07:00
Fusion
dd934208c8
feat(FN-4538): complete Step 5 — show overlap blockers in dashboard
...
Fusion-Task-Id: FN-4538
Fusion-Task-Lineage: 332b4c78-b67f-45d0-9181-0bb539b662c1
2026-05-14 22:24:51 -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
1e9de7f2e8
feat(FN-4538): complete Step 1 — add overlapBlockedBy persistence
...
Fusion-Task-Id: FN-4538
Fusion-Task-Lineage: 332b4c78-b67f-45d0-9181-0bb539b662c1
2026-05-14 22:24:50 -07:00
Fusion
f99c611d64
test(FN-4557): add type regression test for desktop node-pty shim
...
Fusion-Task-Id: FN-4557
Fusion-Task-Lineage: 53e20d45-b7e9-43d6-bf6f-2a5a3b568d4a
2026-05-14 22:16:44 -07:00
Fusion
2f8074e8f1
fix(FN-4557): replace loose node-pty ambient shim in @fusion/desktop with accurate IPty surface
...
Fusion-Task-Id: FN-4557
Fusion-Task-Lineage: 53e20d45-b7e9-43d6-bf6f-2a5a3b568d4a
2026-05-14 22:16:44 -07:00
Fusion
f975d42c2a
feat(FN-4556): remove basic-setup dependency from dashboard
...
Removed the `basic-setup` dependency from `@fusion/dashboard` and regenerated the pnpm lockfile, completing the FN-4556 cleanup.
Fusion-Task-Id: FN-4556
2026-05-14 22:16:44 -07:00
Fusion
73c17f3492
feat(FN-4554): complete Step 6 — docs and changeset
...
Fusion-Task-Id: FN-4554
Fusion-Task-Lineage: 12d517c5-1954-4b27-8c63-c7f0dde93d3f
2026-05-14 22:16:44 -07:00
Fusion
4ca862ba5b
test(FN-4554): cover onboarding copilot device-code panel
...
Fusion-Task-Id: FN-4554
Fusion-Task-Lineage: 12d517c5-1954-4b27-8c63-c7f0dde93d3f
2026-05-14 22:16:44 -07:00
Fusion
91e6d3767f
fix(FN-4554): prefer deviceCode over duplicate instructions
...
Fusion-Task-Id: FN-4554
Fusion-Task-Lineage: 12d517c5-1954-4b27-8c63-c7f0dde93d3f
2026-05-14 22:16:44 -07:00
Fusion
6d072f47f6
feat(FN-4554): complete Step 4 — surface copilot device code in UI
...
Fusion-Task-Id: FN-4554
Fusion-Task-Lineage: 12d517c5-1954-4b27-8c63-c7f0dde93d3f
2026-05-14 22:16:44 -07:00
Fusion
90dcc0cd2d
feat(FN-4554): complete Step 3 — add deviceCode API type
...
Fusion-Task-Id: FN-4554
Fusion-Task-Lineage: 12d517c5-1954-4b27-8c63-c7f0dde93d3f
2026-05-14 22:16:44 -07:00
Fusion
ed2f52eaaf
feat(FN-4554): complete Step 2 — server device-code handling
...
Fusion-Task-Id: FN-4554
Fusion-Task-Lineage: 12d517c5-1954-4b27-8c63-c7f0dde93d3f
2026-05-14 22:16:44 -07:00
Fusion
3926fac91b
test(FN-4555): complete Step 4 — expand unread indicator coverage
...
Fusion-Task-Id: FN-4555
Fusion-Task-Lineage: 37b27183-4087-4199-bac6-7d299261764d
2026-05-14 22:16:44 -07:00
Fusion
4ba253558c
feat(FN-4555): complete Step 2-3 — broaden unread detection and add room replies
...
Fusion-Task-Id: FN-4555
Fusion-Task-Lineage: 37b27183-4087-4199-bac6-7d299261764d
2026-05-14 22:16:44 -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