Commit Graph

1616 Commits

Author SHA1 Message Date
Fusion (runfusion.ai)
c51d0d9d9b feat(FN-5103): complete Step 7 — update docs and changeset
Fusion-Task-Id: FN-5103
Fusion-Task-Lineage: e4e4d9ba-4884-4feb-b18b-a30e799c3fb1
2026-05-19 01:24:55 -07:00
Fusion (runfusion.ai)
6608f2154e docs(FN-5104): complete Step 7 — document reattach contract and changeset
Fusion-Task-Id: FN-5104
Fusion-Task-Lineage: e92a26cb-a930-442a-98be-6ace9f376e73
2026-05-19 01:09:30 -07:00
Fusion (runfusion.ai)
cc6bd1e724 feat(FN-5102): complete Step 4 and 5 — verify and document
Fusion-Task-Id: FN-5102
Fusion-Task-Lineage: 13be2941-176e-4a6e-b6fc-2bb644f7444a
2026-05-18 23:50:00 -07:00
gsxdsm
b9d4bd8c1b feat(FN-5053): merge fusion/fn-5053 — align no-task heartbeat prompts
Squash-merge of fusion/fn-5053 (7 commits including retry duplicates).
Drops stale conflict in packages/core/src/index.ts (FN-5053 branch
re-exported symbols that main already exports) and packages/core/src/store.ts
(branch had a stale, narrower updateTask signature; main is authoritative).

Manual CEO recovery after the trailerless-commit attribution bug
(now fixed by FN-5090 in 92be8225e) stranded this task in in-review.

Fusion-Task-Id: FN-5053
2026-05-18 21:08:04 -07:00
Fusion (runfusion.ai)
68b5694cba feat(FN-5060): complete Step 8 — update docs and changeset 2026-05-18 19:45:58 -07:00
gsxdsm
f11695311a feat(FN-5088): merge fusion/fn-5088 2026-05-18 18:38:00 -07:00
gsxdsm
f46629ef10 feat(FN-5084): merge fusion/fn-5084 2026-05-18 17:53:00 -07:00
gsxdsm
0046fc92e2 feat(FN-4918): merge fusion/fn-4918 2026-05-18 16:23:06 -07:00
gsxdsm
6fc0f5cebc feat(FN-5063): merge fusion/fn-5063 2026-05-18 15:51:01 -07:00
gsxdsm
aad1219037 feat(FN-4967): merge fusion/fn-4967 2026-05-18 15:50:48 -07:00
gsxdsm
896ae7a931 feat(FN-5077): merge fusion/fn-5077 2026-05-18 15:01:20 -07:00
gsxdsm
6c1732d234 feat(FN-5076): merge fusion/fn-5076 2026-05-18 14:46:20 -07:00
gsxdsm
bed14fda7b feat(FN-5065): merge fusion/fn-5065 2026-05-18 14:16:22 -07:00
gsxdsm
46d09285d5 feat(FN-5058): merge fusion/fn-5058 2026-05-18 11:01:32 -07:00
Fusion (runfusion.ai)
d9214b69c9 feat(FN-4966): complete Step 7 — finalize docs and changeset
Fusion-Task-Id: FN-4966
Fusion-Task-Lineage: 8f5ea300-feaa-469c-aeed-f7304a5a1b6d
2026-05-18 08:45:18 -07:00
Fusion (runfusion.ai)
e5af1f11e3 feat(FN-5052): complete Step 8 — document autoMerge stall suppression
Fusion-Task-Id: FN-5052
Fusion-Task-Lineage: 607cd9e6-e4d0-4572-b183-8253d127209f
2026-05-18 08:44:20 -07:00
Fusion (runfusion.ai)
bfbdacdcbe feat(FN-4899): complete Step 9 — documentation and delivery
Fusion-Task-Id: FN-4899
Fusion-Task-Lineage: 2ae24667-6635-4268-a620-d6012266d8f2
2026-05-18 08:02:22 -07:00
Fusion (runfusion.ai)
be6279f656 test(FN-5047): cover merged event emission and docs
Fusion-Task-Id: FN-5047
Fusion-Task-Lineage: 9b03f2de-1b4a-45ad-b1ce-0a6217d6da77
2026-05-18 07:46:09 -07:00
Fusion (runfusion.ai)
f9c0b9399c feat(FN-5046): complete Step 6 — document terminal-only mode and add changeset
Fusion-Task-Id: FN-5046
Fusion-Task-Lineage: 0748fd0e-70c3-44b9-a599-0df5255d4d60
2026-05-18 07:31:29 -07:00
Fusion (runfusion.ai)
5a1794fc55 feat(FN-5018): wire create-pr review surface in TaskReviewTab
Wires the PR-create review surface into the task review flow, adding the UI surface to `TaskReviewTab`, `TaskDetailModal`, and `PrPanel` for reviewing PR creation as part of task review. Includes tests covering the create-PR review flow in both `TaskDetailModal` and `TaskReviewTab`.

Fusion-Task-Id: FN-5018
2026-05-18 06:39:22 -07:00
Fusion (runfusion.ai)
40ef729720 feat(FN-4958): complete Step 6 — add changeset
Fusion-Task-Id: FN-4958
Fusion-Task-Lineage: 2f1bc742-14e0-4fdd-a980-00051fc3323c
2026-05-18 06:20:55 -07:00
Fusion (runfusion.ai)
e0b1e6ac37 test(FN-4993): add AI parity and pr router coverage
Fusion-Task-Id: FN-4993
Fusion-Task-Lineage: 20ce6d5f-ef33-49e6-8519-648d769cc473
2026-05-18 05:57:43 -07:00
Fusion (runfusion.ai)
040a9099de feat(FN-4984): complete Step 4 - documentation updates
Fusion-Task-Id: FN-4984
Fusion-Task-Lineage: 8fdf7a19-b101-4b33-8e60-44fcbf402256
2026-05-18 04:46:56 -07:00
gsxdsm
e33159e91b feat(FN-4919): merge fusion/fn-4919 2026-05-18 04:01:51 -07:00
gsxdsm
3a3f4edbef feat(FN-4978): merge fusion/fn-4978 2026-05-18 03:46:28 -07:00
gsxdsm
88459643ff feat(FN-4951): complete Step 7 — add changeset
Fusion-Task-Id: FN-4951
Fusion-Task-Lineage: 25de66db-c8cf-463b-86f2-efff1bc22683
2026-05-18 03:10:53 -07:00
Fusion (runfusion.ai)
cfe35325b4 feat(FN-4990): complete Step 5 — finalize verification and delivery
Fusion-Task-Id: FN-4990
Fusion-Task-Lineage: 167a6011-d246-45bd-ad7a-1f2fe8b99323
2026-05-18 02:43:33 -07:00
Fusion (runfusion.ai)
f9f8ca04b9 feat(FN-4950): reinforce recycleWorktrees opt-in default copy
Fusion-Task-Id: FN-4950
Fusion-Task-Lineage: ce37aa18-a5ff-4aef-a93b-768edd07978c
2026-05-18 02:32:16 -07:00
Fusion (runfusion.ai)
a3e8c8f8b7 feat(FN-4882): add cross-node secrets sync reliability backstop with integr
Documents the secrets sync cross-node protocol in architecture.md and secrets.md, with a reliability backstop test covering the cross-node sync behavior.

Fusion-Task-Id: FN-4882
2026-05-18 02:25:21 -07:00
Fusion (runfusion.ai)
d41dc24d21 test(FN-4938): complete Step 5 — docs and verification follow-ups
Fusion-Task-Id: FN-4938
Fusion-Task-Lineage: 8b53a5da-1321-4796-9775-ff043efdcef3
2026-05-18 01:50:24 -07:00
Fusion (runfusion.ai)
c87e0fc4f2 docs(FN-4956): complete Step 6 — document layer3 scope partition
Fusion-Task-Id: FN-4956
Fusion-Task-Lineage: 7105cd5e-27f4-4e84-b2ae-e811a183803f
2026-05-18 01:30:17 -07:00
Fusion (runfusion.ai)
2242d5b2ff feat(FN-4892): complete Step 9 — document intake auto-archive heuristics
Fusion-Task-Id: FN-4892
Fusion-Task-Lineage: 6f56b468-a827-416d-ba1f-444e1326d613
2026-05-18 00:53:24 -07:00
Fusion (runfusion.ai)
28595f57e9 feat(FN-4946): complete steps 5-8 implicit refusal docs and budget coverage
Fusion-Task-Id: FN-4946
Fusion-Task-Lineage: 9a48f72f-d2cc-4950-8a00-f69053dd1163
2026-05-18 00:27:44 -07:00
Fusion (runfusion.ai)
dde2d062f0 feat(FN-4912): complete Step 10 — delivery artifacts
Fusion-Task-Id: FN-4912
Fusion-Task-Lineage: 943d0651-052a-41b5-8069-4c60f4db1ba7
2026-05-17 23:29:21 -07:00
Fusion (runfusion.ai)
307cf0c4b6 feat(FN-4908): complete Step 6 — add changeset and delivery notes
Fusion-Task-Id: FN-4908
Fusion-Task-Lineage: 97d96ea4-8618-43cc-8448-0132cd57974e
2026-05-17 23:21:35 -07:00
gsxdsm
3e944ed620 chore(changeset): add FN-4767 PR creation flow entry
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 23:02:44 -07:00
gsxdsm
02ba659dd8 feat(FN-4969): merge fusion/fn-4969 2026-05-17 22:57:15 -07:00
gsxdsm
f40accd4bc perf(cli): cut test suite from 32s to 11s wall
Two heavy CLI tests were dominating wall time:
- chat.test.ts "--once exits with timeout note" waited the real 30s
  reply-timeout floor. Added a replyTimeoutMs option to
  runChatInteractive so the test can use 200ms.
- bundled-plugin-install.test.ts "loads the real bundled dependency
  graph plugin" runs esbuild and a live PluginLoader (~18s). Gated
  behind FUSION_RUN_SLOW_TESTS=1; the install/upgrade logic is covered
  by mocked unit tests in the same file.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 22:47:53 -07:00
gsxdsm
1f0bb7e018 fix(core): skip real keychain in tests to stop 15s keytar hangs
MasterKeyManager.loadKeytar() now bails out early when
FUSION_MASTER_KEY_DISABLE_KEYCHAIN=1, and the core vitest setup sets that
flag for every worker. Eight tests across master-key/secrets-store/
secrets-sync-passphrase were timing out at exactly the 15s testTimeout
because they constructed MasterKeyManager without injecting a fake
KeytarLike, which made loadKeytar() reach the real OS keychain.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 22:45:29 -07:00
gsxdsm
75a712771e feat(desktop): Connection → Change Launch Mode menu item
Adds a "Connection" submenu with a "Change Launch Mode…" item that lets
users switch between Run Locally and Connect to Remote after the initial
chooser. The menu sends shell:reset-desktop-mode-request to the renderer;
the dashboard's DesktopLaunchGate listens, calls the new
shell:resetDesktopMode IPC (clears hasCompletedModeSelection, stops the
embedded runtime), strips the cached serverBaseUrl/shellMode query params,
and reloads so the gate re-prompts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 22:16:27 -07:00
gsxdsm
b143f6c88b feat(dashboard): desktop launch gate for run-local vs connect-remote
Wrap <App /> in a DesktopLaunchGate that runs only inside the Electron shell.
On first run it shows a chooser (Run Locally / Connect Remote). On "local"
it calls setDesktopMode("local") so main starts the embedded runtime, polls
shell:getState until localRuntime.state === "running", then reloads with
?serverBaseUrl=http://127.0.0.1:<port> so the dashboard's API calls route
to the embedded server (file:// origins can't resolve relative /api). On
"remote" it opens the existing connection manager. Replaces the dead-end
"can't reach backend" landing in the packaged desktop app.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 22:10:58 -07:00
gsxdsm
e5af9c93ae fix(desktop): packaged macOS app launched with no window / blank white screen
In packaged Electron builds, `process.argv[1]` is undefined (Electron loads
the main script via package.json `main`, not via argv), so the bottom-of-file
guard never invoked `run()` and the app started without creating a window.
Also build the dashboard client with `--base ./` so its `file://`-loaded
index.html resolves `./assets/*` from inside the asar instead of the
filesystem root, which was producing a blank white window.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 22:01:51 -07:00
Fusion (runfusion.ai)
56a7178aca feat(FN-4959): complete Step 5 — add changeset for fn_task_update priority
Fusion-Task-Id: FN-4959
Fusion-Task-Lineage: 59a0c481-5a2d-4a2f-9230-3a5437b687a6
2026-05-17 21:46:58 -07:00
Fusion (runfusion.ai)
d856788d55 feat(FN-4954): complete Step 8 — documentation and changeset
Fusion-Task-Id: FN-4954
Fusion-Task-Lineage: b3dd2d2f-3aa3-48f1-8a56-56e66518d139
2026-05-17 21:17:38 -07:00
Fusion (runfusion.ai)
5233bc9347 feat(FN-4890): complete Step 8 — docs, defaults, and reliability coverage
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:36:13 -07:00
Fusion (runfusion.ai)
17fafa1bb8 feat(FN-4942): complete Step 3 — add changeset and docs clarification
Fusion-Task-Id: FN-4942
Fusion-Task-Lineage: 20865705-e5ec-4261-932c-4d47c2d8dc12
2026-05-17 19:04:18 -07:00
Fusion (runfusion.ai)
287673c261 fix(FN-4949): defer stale active branch reclaim during live executor work
- Add stale-branch reclaim guards for active executor sessions, recent execution starts, and worktrees with uncommitted changes
- Emit branch:stale-active-reclaim-deferred run-audit telemetry with deferral metadata for self-healing decisions
- Cover reclaim deferral and legitimate reclaim behavior with reliability interaction tests
- Document the new stale active branch deferral contract in AGENTS.md
- Add a patch changeset for the published CLI package

Fusion-Task-Id: FN-4949
2026-05-17 18:37:48 -07:00
Fusion (runfusion.ai)
c161e626e2 feat(FN-4948): complete Steps 7-8 — finalize verification and release artifacts
Fusion-Task-Id: FN-4948
Fusion-Task-Lineage: dc622643-4c3e-4217-9219-a6a6e5424427
2026-05-17 17:29:31 -07:00
Fusion (runfusion.ai)
a2caac36e9 test(FN-4887): complete Step 4-5 — add interaction coverage and docs
Fusion-Task-Id: FN-4887
Fusion-Task-Lineage: 559690d8-cea6-4323-a522-9ebb6aa25731
2026-05-17 17:07:01 -07:00
Fusion (runfusion.ai)
24f5c238a3 fix(FN-4930): make promptSessionAndCheck transcript diagnostics recursion-safe
Fusion-Task-Id: FN-4930
Fusion-Task-Lineage: 5fb64145-a526-4aec-846e-5771b5844b18
2026-05-17 16:33:19 -07:00