Commit Graph

1624 Commits

Author SHA1 Message Date
Fusion (runfusion.ai)
6d68c2d73b feat(FN-5151): complete Step 7 — document composer autosize alignment
Fusion-Task-Id: FN-5151
Fusion-Task-Lineage: 17ebfc3f-6b6d-44a6-8243-7e8b8b140057
2026-05-19 10:39:56 -07:00
Fusion (runfusion.ai)
ba1604835b feat(FN-5144): add create PR metadata and preflight routes
- Add dashboard routes to generate PR title/body metadata for task branches
- Add PR preflight diagnostics for base branch resolution, remote branch checks, commit summaries, changed files, conflicts, and gh auth state
- Cover the new Create PR route contracts and metadata preflight behavior with dashboard tests
- Add a changeset for the published @runfusion/fusion package

Fusion-Task-Id: FN-5144
2026-05-19 10:25:37 -07:00
Fusion (runfusion.ai)
bb3403370b feat(FN-5147): document autoMerge-off in-review invariant
Fusion-Task-Id: FN-5147
Fusion-Task-Lineage: 2a0e5bd4-b2ea-498c-95ef-85126819e824
2026-05-19 10:07:44 -07:00
Fusion (runfusion.ai)
012fb17db1 feat(FN-5141): complete Step 7 — add changeset and delivery docs
Fusion-Task-Id: FN-5141
Fusion-Task-Lineage: 2f90daca-c147-4807-b780-09f8f54580ae
2026-05-19 08:38:34 -07:00
Fusion (runfusion.ai)
041eb4bad9 feat(FN-5146): complete Step 6 — add changeset and delivery docs
Fusion-Task-Id: FN-5146
Fusion-Task-Lineage: 55a9837f-d0e1-475b-9f7f-45262141352e
2026-05-19 07:57:38 -07:00
Fusion (runfusion.ai)
7652bbf29e feat(FN-5136): lock quick entry submit before duplicate check
Adds duplicate-submission guard to the Quick Entry box, locking the submit action before the duplicate check resolves and preventing concurrent or double submissions from creating duplicate tasks. Includes tests covering the lock/unlock flow and duplicate-skip behavior.

Fusion-Task-Id: FN-5136
2026-05-19 07:35:24 -07:00
Fusion (runfusion.ai)
a6747c1dfd feat(FN-5115): complete Step 8 — document pause normalization delivery
Fusion-Task-Id: FN-5115
Fusion-Task-Lineage: 5c3d9d42-9dcd-4ebb-ba10-8a4b14d541dd
2026-05-19 06:51:26 -07:00
Fusion (runfusion.ai)
dd78e42f75 fix(FN-5093): complete Step 7-8 — verification fixes and changeset
Fusion-Task-Id: FN-5093
Fusion-Task-Lineage: fe96617a-88f8-4a3c-b96c-c516d2206331
2026-05-19 03:54:49 -07:00
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