Commit Graph

5726 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
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
1636a135e1 feat(FN-4563): complete Step 6 — update delivery docs
Fusion-Task-Id: FN-4563
Fusion-Task-Lineage: a0caaa7b-8e87-4ae1-8c51-b46e4ac61d59
2026-05-14 23:24:18 -07:00
Fusion
f8520fb479 feat(FN-4563): complete Step 4 — add changeset
Fusion-Task-Id: FN-4563
Fusion-Task-Lineage: a0caaa7b-8e87-4ae1-8c51-b46e4ac61d59
2026-05-14 23:24:18 -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
b86248ec48 feat(FN-4564): complete Step 6 — add changeset and delivery notes
Fusion-Task-Id: FN-4564
Fusion-Task-Lineage: 1a0c186a-1eb1-496a-aa8d-1bdf2254bb20
2026-05-14 23:18:47 -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
5efb7b1ea8 test(FN-4538): align roadmap schema version assertion
Fusion-Task-Id: FN-4538
Fusion-Task-Lineage: 332b4c78-b67f-45d0-9181-0bb539b662c1
2026-05-14 22:24:51 -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