Commit Graph

7258 Commits

Author SHA1 Message Date
Fusion (runfusion.ai)
064e42c347 feat(FN-5003): complete Step 2 — add pre-write noop guards
Fusion-Task-Id: FN-5003
Fusion-Task-Lineage: c5f1f326-934b-4cfc-8ba9-a2ac70a4f4f4
2026-05-17 22:49:55 -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
51e28fb7ca fix(desktop): re-show hidden window on dock/Finder activate + log gate flow
The close handler hides the BrowserWindow instead of destroying it, so
once closed, subsequent dock or Finder activations were no-ops because
the activate handler only created a new window when mainWindow === null.
Show + focus the existing window if it's hidden so relaunch behaves as
expected. Also add console.log breadcrumbs in DesktopLaunchGate so we
can diagnose why the chooser sometimes appears not to render.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 22:24:40 -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
3cae2a30b9 feat(FN-5000): merge fusion/fn-5000 2026-05-17 22:11:42 -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)
ceacad78a1 chore(FN-4959): complete Step 4 — regenerate fusion skill tool references
Fusion-Task-Id: FN-4959
Fusion-Task-Lineage: 59a0c481-5a2d-4a2f-9230-3a5437b687a6
2026-05-17 21:46:58 -07:00
Fusion (runfusion.ai)
716a45a96b test(FN-4959): complete Step 3 — cover priority updates on fn_task_update
Fusion-Task-Id: FN-4959
Fusion-Task-Lineage: 59a0c481-5a2d-4a2f-9230-3a5437b687a6
2026-05-17 21:46:58 -07:00
Fusion (runfusion.ai)
e0e0bc5bef feat(FN-4959): complete Step 2 — extend fn_task_update priority support
Fusion-Task-Id: FN-4959
Fusion-Task-Lineage: 59a0c481-5a2d-4a2f-9230-3a5437b687a6
2026-05-17 21:46:58 -07:00
Fusion (runfusion.ai)
53e0372bc9 test(FN-4986): complete Step 3 — update footer cluster alignment assertions
Fusion-Task-Id: FN-4986
Fusion-Task-Lineage: d7a2c969-f3ea-4f93-bcdb-f86521845fce
2026-05-17 21:34:06 -07:00
Fusion (runfusion.ai)
10d00423a4 feat(FN-4986): complete Step 2 — align footer chip cluster via first-chip anchor
Fusion-Task-Id: FN-4986
Fusion-Task-Lineage: d7a2c969-f3ea-4f93-bcdb-f86521845fce
2026-05-17 21:34:06 -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)
b8514b658e test(FN-4954): cover pool double-lease throw and fresh fallback
Fusion-Task-Id: FN-4954
Fusion-Task-Lineage: b3dd2d2f-3aa3-48f1-8a56-56e66518d139
2026-05-17 21:17:38 -07:00
Fusion (runfusion.ai)
c6453ca956 fix(FN-4954): complete Step 7 — restore green verification gates
Fusion-Task-Id: FN-4954
Fusion-Task-Lineage: b3dd2d2f-3aa3-48f1-8a56-56e66518d139
2026-05-17 21:17:38 -07:00
Fusion (runfusion.ai)
c15a74e187 fix(FN-4954): correct runtime pool invariant audit emission
Fusion-Task-Id: FN-4954
Fusion-Task-Lineage: b3dd2d2f-3aa3-48f1-8a56-56e66518d139
2026-05-17 21:17:38 -07:00
Fusion (runfusion.ai)
04b965dbef test(FN-4954): complete Step 6 — add merger/pool reliability backstop
Fusion-Task-Id: FN-4954
Fusion-Task-Lineage: b3dd2d2f-3aa3-48f1-8a56-56e66518d139
2026-05-17 21:17:38 -07:00
Fusion (runfusion.ai)
7e90bce8bb feat(FN-4954): harden pool leasing invariants and wire runtime auditing
Fusion-Task-Id: FN-4954
Fusion-Task-Lineage: b3dd2d2f-3aa3-48f1-8a56-56e66518d139
2026-05-17 21:17:38 -07:00
Fusion (runfusion.ai)
0606e3aaea feat(FN-4954): complete Step 3 — add pool double-lease audit mutation type
Fusion-Task-Id: FN-4954
Fusion-Task-Lineage: b3dd2d2f-3aa3-48f1-8a56-56e66518d139
2026-05-17 21:17:38 -07:00
Fusion (runfusion.ai)
dd234d21e6 test(FN-4954): complete Step 2 — reproduce pool rehydrate double-lease race
Fusion-Task-Id: FN-4954
Fusion-Task-Lineage: b3dd2d2f-3aa3-48f1-8a56-56e66518d139
2026-05-17 21:17:38 -07:00
Fusion (runfusion.ai)
296262b07a test(FN-4987): align session-start interaction tests with recovery contract
Fusion-Task-Id: FN-4987
Fusion-Task-Lineage: 7825b364-d7b2-45fd-8eb1-94b7a08fa7ba
2026-05-17 20:10:17 -07:00
Fusion (runfusion.ai)
d2a5ff95c2 test(FN-4987): complete Step 5 — tighten unrelated failure guard assertions
Fusion-Task-Id: FN-4987
Fusion-Task-Lineage: 7825b364-d7b2-45fd-8eb1-94b7a08fa7ba
2026-05-17 20:10:16 -07:00
Fusion (runfusion.ai)
34d196c3f0 test(FN-4987): complete Step 4 — assert exhausted retry-cap behavior
Fusion-Task-Id: FN-4987
Fusion-Task-Lineage: 7825b364-d7b2-45fd-8eb1-94b7a08fa7ba
2026-05-17 20:10:16 -07:00
Fusion (runfusion.ai)
3af35ac650 test(FN-4987): complete Step 3 — assert preserve-progress recovery semantics
Fusion-Task-Id: FN-4987
Fusion-Task-Lineage: 7825b364-d7b2-45fd-8eb1-94b7a08fa7ba
2026-05-17 20:10:16 -07:00
Fusion (runfusion.ai)
980ab593ff test(FN-4987): complete Step 2 — assert per-classification recovery contract
Fusion-Task-Id: FN-4987
Fusion-Task-Lineage: 7825b364-d7b2-45fd-8eb1-94b7a08fa7ba
2026-05-17 20:10:16 -07:00
Fusion (runfusion.ai)
a92d39339c fix(FN-4987): complete Step 1 — wire session-start auto-recovery auditor
Fusion-Task-Id: FN-4987
Fusion-Task-Lineage: 7825b364-d7b2-45fd-8eb1-94b7a08fa7ba
2026-05-17 20:10:16 -07:00
Fusion (runfusion.ai)
24076970b1 feat(FN-4926): add fn_task_list regression tests
Adds regression tests for `fn_task_list` in the pi-extensions test suite and updates an existing planning-board-tools test, both scoped to FN-4926 coverage.

Fusion-Task-Id: FN-4926

Fusion-Task-Lineage: 9a6a82cb-4b17-4471-a386-7c4b7d275c40
2026-05-17 20:09:36 -07:00
Fusion (runfusion.ai)
32cadc9f42 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:39:00 -07:00
Fusion (runfusion.ai)
6356ac4a2d fix(FN-4890): isolate stall verification from self-rebound transitions
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:38:59 -07:00
Fusion (runfusion.ai)
70169972ed test(FN-4890): cover board-stall verification and cooldown
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:38:59 -07:00
Fusion (runfusion.ai)
a6898c5ba4 feat(FN-4890): complete Step 5 — board-health recovery levers
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:38:59 -07:00
Fusion (runfusion.ai)
1d2d3d1b0d feat(FN-4890): complete Step 3 — paused-scope decay auto-rebound
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:38:58 -07:00
Fusion (runfusion.ai)
eeb5fe8e2d 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:37:55 -07:00
Fusion (runfusion.ai)
c49e684e4e fix(FN-4890): isolate stall verification from self-rebound transitions
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:37:55 -07:00
Fusion (runfusion.ai)
2ff1458e77 test(FN-4890): cover board-stall verification and cooldown
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:37:53 -07:00
Fusion (runfusion.ai)
6b83cf0020 feat(FN-4890): complete Step 5 — board-health recovery levers
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:37:52 -07:00
Fusion (runfusion.ai)
8226d170a2 feat(FN-4890): complete Step 3 — paused-scope decay auto-rebound
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:37:52 -07:00
Fusion (runfusion.ai)
dcb055df6b test(FN-4992): add merged PR auto-transition interaction coverage
Fusion-Task-Id: FN-4992
Fusion-Task-Lineage: 133d5e6a-0612-4f67-9105-3b7dbabd5ec0
2026-05-17 19:37:02 -07:00
Fusion (runfusion.ai)
0fd9d4094d test(FN-4992): add changes-requested reliability interaction coverage
Fusion-Task-Id: FN-4992
Fusion-Task-Lineage: 133d5e6a-0612-4f67-9105-3b7dbabd5ec0
2026-05-17 19:37:02 -07:00
Fusion (runfusion.ai)
8ecba01c76 fix(FN-4890): stabilize board-health integration and blocker release coverage
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:36:14 -07:00
Fusion (runfusion.ai)
e659dd5f14 fix(FN-4890): preserve active todo blockers in stale-blocked sweep
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:36:14 -07:00
Fusion (runfusion.ai)
36de8ce0c0 fix(FN-4890): tighten incident replay and stale blocker release
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:36:14 -07:00
Fusion (runfusion.ai)
25eae69487 test(FN-4890): complete Step 6 — add FN-4890 incident replay assertion
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:36:14 -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)
e40aecf77d fix(FN-4890): isolate stall verification from self-rebound transitions
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:36:13 -07:00
Fusion (runfusion.ai)
5f6dddf863 test(FN-4890): cover board-stall verification and cooldown
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:36:13 -07:00
Fusion (runfusion.ai)
dfeb379a14 test(FN-4890): strengthen board-stall sweep assertions
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:36:13 -07:00
Fusion (runfusion.ai)
38dc36b9ba fix(FN-4890): wire board-stall alerts through notifier hook
Fusion-Task-Id: FN-4890
Fusion-Task-Lineage: d1ae6585-7df0-481f-83c3-c7cdd45daf4f
2026-05-17 19:36:12 -07:00