gsxdsm
99b80ad748
feat(dashboard): add opt-in auto-update and harden restart supervision
...
Add the `autoUpdateAndRestart` global setting (default off, Settings ->
General next to Release channel). When enabled, the dashboard host installs
available updates on the selected channel by itself and requests the
supervised in-place restart. Supervised hosts only: without a parent to
respawn, installing would leave a running process whose code no longer
matches its own install.
Fix two ways the restart affordance could silently do nothing:
- The supervisor now stamps FUSION_SUPERVISOR_PID and supervision is only
counted when that pid is the real parent. FUSION_RESTART_SUPERVISED is
inherited by every process Fusion spawns, so `fn dashboard` launched from
an agent terminal skipped its own supervisor while still advertising
restart support -- a restart request then killed it for good.
- Settings and the update banner probe /system/info on mount and treat
capability as advisory: the button always issues the request and shows the
server's actual refusal instead of sitting disabled after a failed probe.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-07-25 22:52:53 -07:00
gsxdsm
3597d06380
FN-8578: pin verified Parakeet v3 model asset
...
Enable secure downloads of the upstream Parakeet v3 voice model.
- Pin the archive URL, filename, SHA-256, expected files, and nested extraction layout.
- Accept the archive's BSD tar timestamp format while preserving safe extraction checks.
- Cover download gates and installation behavior, and document the verified model asset.
Files changed:
.changeset/fn-8578-parakeet-v3-asset-pin.md | 7 ++++
docs/dashboard-guide.md | 2 +-
docs/settings-reference.md | 8 ++--
.../src/stt/__tests__/model-manager.test.ts | 46 ++++++++++++++++++++++
.../dashboard/src/stt/__tests__/voice-stt.test.ts | 33 +++++++++++++++-
packages/dashboard/src/stt/model-manager.ts | 13 +++---
packages/dashboard/src/stt/types.ts | 18 +++++++--
7 files changed, 114 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-8578
Fusion-Task-Lineage: ab397190-fa0c-491e-b0f8-0ab6641be95a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-25 08:21:00 -07:00
gsxdsm
2a2b157cb9
FN-8585: fix dashboard composer test source reads
...
Stabilize dashboard composer tests when Vitest launches from the workspace root.
- Resolve dashboard test source fixtures relative to the app directory.
- Migrate affected component tests away from cwd-relative CSS reads.
- Enforce the fixture convention in test hooks and document it.
Files changed:
docs/testing.md | 4 +++
package.json | 6 ++--
.../__tests__/AuthTokenRecoveryDialog.test.tsx | 3 +-
.../components/__tests__/ChatView.mobile.test.tsx | 5 +--
.../__tests__/EngineControlMenu.test.tsx | 11 ++----
.../components/__tests__/FloatingWindow.test.tsx | 5 +--
.../app/components/__tests__/ListView.test.tsx | 5 +--
.../__tests__/MissionInterviewModal.test.tsx | 3 +-
.../app/components/__tests__/MobileNavBar.test.tsx | 3 +-
.../app/components/__tests__/NewTaskModal.test.tsx | 3 +-
.../__tests__/PlanningModeModal.initial.test.tsx | 3 +-
.../PlanningModeModal.ui-interactions.test.tsx | 7 ++--
.../components/__tests__/PrCreateModal.test.tsx | 3 +-
.../__tests__/QuickChat.persist.test.tsx | 3 +-
.../components/__tests__/QuickEntryBox.test.tsx | 3 +-
.../components/__tests__/ReportActionMenu.test.tsx | 9 ++---
.../app/components/__tests__/ReportModal.test.tsx | 3 +-
.../__tests__/ShadcnColorPicker.test.tsx | 3 +-
.../components/__tests__/TerminalModal.test.tsx | 3 +-
.../components/__tests__/ThemeDropdown.test.tsx | 9 ++---
.../__tests__/WorkflowNodeEditor.test.tsx | 5 +--
.../WorkflowOptionalStepsDropdown.test.tsx | 3 +-
.../components/__tests__/WorkflowSwitcher.test.tsx | 5 +--
.../app/components/__tests__/board-mobile.test.tsx | 4 +--
.../__tests__/CommandCenterControls.test.tsx | 6 ++--
.../__tests__/SystemControlsArea.test.tsx | 5 +--
.../__tests__/SystemStatsArea.test.tsx | 3 +-
.../command-center/areas/__tests__/areas.test.tsx | 3 +-
.../__tests__/KeyboardShortcutsSection.test.tsx | 3 +-
.../app/test/__tests__/cssFixture.test.ts | 35 +++++++++++++++++++
packages/dashboard/app/test/cssFixture.ts | 12 +++++++
.../check-no-cwd-relative-dashboard-test-reads.mjs | 39 ++++++++++++++++++++++
32 files changed, 162 insertions(+), 55 deletions(-)
Fusion-Task-Id: FN-8585
Fusion-Task-Lineage: 83a35fb6-a29d-4e97-b282-1054c68b8cc9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-25 06:22:23 -07:00
gsxdsm
32adc0a153
FN-8573: add voice dictation controls to composers
...
Add shared voice dictation support across chat, planning, and task-creation composers.
- Add browser speech-recognition and composer insertion hooks.
- Provide a reusable mic button with accessible recording states.
- Integrate and test dictation across all supported composer surfaces.
- Document the feature and add a package changeset.
Files changed:
.changeset/fn-8573-voice-dictation-mic.md | 7 +
docs/dashboard-guide.md | 6 +
packages/dashboard/app/components/ChatView.tsx | 44 +++-
.../dashboard/app/components/ComposeChatPanel.tsx | 8 +-
packages/dashboard/app/components/MicButton.css | 5 +
packages/dashboard/app/components/MicButton.tsx | 20 ++
.../dashboard/app/components/PlanningModeModal.tsx | 82 ++++--
.../dashboard/app/components/QuickEntryBox.tsx | 4 +
.../app/components/StandardChatSurface.tsx | 108 +++++---
packages/dashboard/app/components/TaskChatTab.tsx | 4 +
packages/dashboard/app/components/TaskComments.tsx | 66 ++---
packages/dashboard/app/components/TaskForm.tsx | 18 +-
.../app/components/TaskPlannerChatTab.tsx | 7 +
.../app/components/__tests__/MicButton.test.tsx | 28 +++
.../components/__tests__/QuickEntryBox.test.tsx | 5 +
.../app/components/__tests__/TaskForm.test.tsx | 5 +
.../app/components/__tests__/insertAtCaret.test.ts | 25 ++
.../__tests__/voice-dictation-composers.test.tsx | 230 +++++++++++++++++
packages/dashboard/app/components/insertAtCaret.ts | 20 ++
.../hooks/__tests__/useComposerDictation.test.tsx | 58 +++++
.../app/hooks/__tests__/useVoiceDictation.test.tsx | 158 ++++++++++++
.../dashboard/app/hooks/useComposerDictation.ts | 112 +++++++++
.../dashboard/app/hooks/useVoiceDictation.ts | 277 +++++++++++++++++++++
23 files changed, 1204 insertions(+), 93 deletions(-)
Fusion-Task-Id: FN-8573
Fusion-Task-Lineage: 905ae982-3e63-494f-aba8-e3665f00cdda
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-25 05:15:02 -07:00
gsxdsm
11db36187f
FN-8572: add voice input settings and model controls
...
Add project-scoped voice dictation controls with observable local model management.
- Add the Voice Input settings section with opt-in enablement and runtime-safe status handling.
- Add Parakeet v3 model download, removal, progress polling, search, documentation, and regression coverage.
- Add a minor release changeset for Voice Input settings.
Files changed:
.changeset/fn-8572-voice-input-settings.md | 7 ++
docs/dashboard-guide.md | 4 +
docs/settings-reference.md | 1 +
.../dashboard/app/components/SettingsModal.tsx | 7 +-
.../VoiceInputSection.modal-visibility.test.tsx | 19 +++
.../settings/__tests__/VoiceInputSection.test.tsx | 137 +++++++++++++++++++++
.../settings/__tests__/section-keys.test.ts | 1 +
.../search/__tests__/settings-search-index.test.ts | 1 +
.../app/components/settings/search/entries.ts | 2 +
.../app/components/settings/section-keys.ts | 2 +
.../settings/sections/VoiceInputSection.css | 48 ++++++++
.../settings/sections/VoiceInputSection.search.ts | 14 +++
.../settings/sections/VoiceInputSection.tsx | 128 ++++++++++++++++++++
13 files changed, 370 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8572
Fusion-Task-Lineage: 2d2ad0df-3765-4d19-a6f3-7c2b5ca5df95
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-25 02:51:28 -07:00
gsxdsm
9a2aea6120
FN-8571: add Parakeet STT transcription backend
...
Add a configurable sherpa-onnx Parakeet v3 speech-to-text service and dashboard API.
- Add model download, validation, caching, and lifecycle management for the bundled STT runtime.
- Register multipart-safe voice transcription routes with request-size handling and service-backed responses.
- Expose STT settings, documentation, release metadata, and focused integration coverage.
Files changed:
.changeset/fn-8571-voice-stt-backend.md | 7 +
docs/settings-reference.md | 12 +
.../core/src/__tests__/settings-parity.test.ts | 10 +
packages/core/src/index.ts | 2 +-
packages/core/src/settings-schema.ts | 2 +
packages/core/src/types.ts | 2 +
packages/core/src/types/settings-scope.ts | 19 ++
packages/dashboard/package.json | 3 +
.../voice-body-parser-integration.test.ts | 67 ++++++
packages/dashboard/src/routes.ts | 2 +
packages/dashboard/src/routes/README.md | 74 +++---
.../routes/__tests__/register-voice-routes.test.ts | 159 ++++++++++++
.../src/routes/create-api-routes-mount-sequence.ts | 2 +-
.../dashboard/src/routes/register-voice-routes.ts | 92 +++++++
packages/dashboard/src/server.ts | 21 +-
.../src/stt/__tests__/model-manager.test.ts | 171 +++++++++++++
.../dashboard/src/stt/__tests__/voice-stt.test.ts | 48 ++++
packages/dashboard/src/stt/model-manager.ts | 268 +++++++++++++++++++++
packages/dashboard/src/stt/parakeet-service.ts | 77 ++++++
packages/dashboard/src/stt/types.ts | 14 ++
pnpm-lock.yaml | 65 +++++
21 files changed, 1086 insertions(+), 31 deletions(-)
Fusion-Task-Id: FN-8571
Fusion-Task-Lineage: b11e0cea-9c9c-41d4-a141-c47e5ed56dba
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-25 02:17:31 -07:00
gsxdsm
b31bee03a8
FN-8576: add global quiet flag to CLI
...
Add a global quiet mode that suppresses informational CLI stdout without hiding requested results.
- Parse --quiet/-q and FUSION_QUIET with command and output exemptions.
- Route result output and interactive prompts around the reversible stdout gate.
- Document the flag and cover quiet output, prompts, and argument parsing.
Files changed:
.changeset/fn-8576-cli-quiet-flag.md | 7 ++
docs/cli-reference.md | 8 ++
packages/cli/src/__tests__/bin.test.ts | 15 +++
packages/cli/src/__tests__/cli-quiet-mode.test.ts | 63 +++++++++++++
.../__tests__/cli-quiet-prompt-surfaces.test.ts | 33 +++++++
packages/cli/src/bin.ts | 39 ++++++--
packages/cli/src/commands/experiment-finalize.ts | 3 +-
packages/cli/src/commands/git.ts | 17 ++--
packages/cli/src/commands/goals.ts | 4 +-
packages/cli/src/commands/mission.ts | 8 +-
packages/cli/src/commands/node.ts | 4 +-
packages/cli/src/commands/onboard.ts | 4 +-
packages/cli/src/commands/org-import.ts | 5 +-
packages/cli/src/commands/plugin.ts | 14 ++-
packages/cli/src/commands/port-prompt.ts | 4 +-
packages/cli/src/commands/project.ts | 6 +-
packages/cli/src/commands/research.ts | 3 +-
packages/cli/src/commands/task.ts | 101 +++++++++++---------
packages/cli/src/commands/update.ts | 3 +-
packages/cli/src/commands/workflow.ts | 13 +--
packages/cli/src/output.ts | 104 +++++++++++++++++++++
packages/cli/src/project-resolver.ts | 20 ++--
22 files changed, 388 insertions(+), 90 deletions(-)
Fusion-Task-Id: FN-8576
Fusion-Task-Lineage: 2493d6d5-bbd9-4fc2-b903-950457ef30b0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-25 00:54:46 -07:00
gsxdsm
0056d75314
FN-8569: surface unrecoverable report health
...
Classify parked direct reports as operator-actionable even when their stored state appears live.
- Add a reusable Reports Health classifier that prioritizes pause markers.
- Clear stale pause markers during live-state resumes without removing diagnostic errors.
- Cover desynchronized report states and document the health invariant.
Files changed:
.../fn-8569-reports-health-error-unrecoverable.md | 7 +++
docs/architecture.md | 1 +
.../agent-store-pause-marker-clear.test.ts | 65 +++++++++++++++++++
packages/core/src/agent-store.ts | 12 ++++
.../src/__tests__/heartbeat-executor.test.ts | 27 ++++++--
.../engine/src/__tests__/reports-health.test.ts | 73 ++++++++++++++++++++++
packages/engine/src/agent-heartbeat.ts | 36 ++++++-----
packages/engine/src/index.ts | 6 ++
packages/engine/src/reports-health.ts | 70 +++++++++++++++++++++
9 files changed, 278 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-8569
Fusion-Task-Lineage: 37c798a0-1f2b-4221-a0c6-ccbff8d72696
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-24 23:57:49 -07:00
gsxdsm
3c3acbf769
docs(settings): record why global settings are not all in postgres
...
Global settings are already split three ways -- values in settings.json, the
revision journal in postgres, and globalMaxConcurrent/defaultProjectId in
central tables -- so the recurring "finish the cutover" proposal keeps getting
re-litigated from scratch.
Write down the two hard constraints (startup-factory reads
embeddedPostgresMaxConnections to start postgres; createFusionAuthStorage is
synchronous and host-agnostic), the recovery argument, and the one real
motivation for a partial move (multi-node policy consistency), plus the
machine-tier vs operator-policy-tier rule for placing new keys.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-07-24 22:46:27 -07:00
gsxdsm
8dc6598aa0
feat(auth): let operators choose which Anthropic credential wins
...
An operator can hold a raw Anthropic API key and a Claude subscription OAuth
login at once, and the raw key always won silently. A stale or revoked saved
key therefore shadowed a working subscription and failed every direct Anthropic
call with 401 invalid x-api-key, while both Settings cards still read Active.
Add the global anthropicAuthPreference setting ("api-key" default, preserving
the historical precedence, or "subscription"), read in resolveAnthropicRuntimeApiKey
straight from ~/.fusion/settings.json so it applies without a restart and needs
no settings plumbing through createFusionAuthStorage. Neither value removes a
source: with one credential configured, resolution reaches it either way.
Settings -> Authentication now names the credential in use on the two Anthropic
cards and renders the control, but only when both are actually connected.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-07-24 22:32:39 -07:00
gsxdsm
8156308695
feat(quick-add): show a visible Start button for waiting-column workflows
...
Replace the hidden long-press/right-click Start menu on Quick Add's Save with a
visible Start button in the action row, rendered only for workflows whose first
visible lane is a hold column (or Coding (Ideas)). Eligibility, the workflow
snapshot, the create-time column override, and the hold-first follow-up move are
unchanged; ineligible workflows render no Start chip or shell.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-07-24 22:32:30 -07:00
gsxdsm
4b4df1ff30
FN-8565: restore tablet task modal resizing
...
Restore resizable Task Detail and New Task windows on 768px touch tablets.
- Classify known touch tablets separately from phone sheets
- Restore bounded modal geometry and resize grips with keyboard support
- Add regression coverage, documentation, and a patch changeset
Files changed:
.changeset/fn-8565-tablet-task-modal-resize.md | 7 +++
docs/dashboard-guide.md | 5 ++
.../task-detail-modal-tablet-width.test.ts | 15 +++++
packages/dashboard/app/components/NewTaskModal.css | 18 +++++-
packages/dashboard/app/components/NewTaskModal.tsx | 44 +++++++++++++-
.../dashboard/app/components/TaskDetailModal.css | 30 ++++++++++
.../dashboard/app/components/TaskDetailModal.tsx | 40 +++++--------
.../app/components/__tests__/NewTaskModal.test.tsx | 68 +++++++++++++++++++++-
...etailModal.responsive-and-dependencies.test.tsx | 51 ++++++++++++++++
.../hooks/__tests__/useModalResizePersist.test.tsx | 53 ++++++++++++++++-
.../dashboard/app/hooks/useModalResizePersist.ts | 58 +++++++++++++++---
11 files changed, 352 insertions(+), 37 deletions(-)
Fusion-Task-Id: FN-8565
Fusion-Task-Lineage: 7d9bbeb9-0e6a-4ad9-8b4d-e9f3d8aef650
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-24 19:20:16 -07:00
gsxdsm
a9d5b06013
FN-8562: add tags to chat conversations
...
Enable project-scoped reusable tags for Direct chat sessions.
- Add tag storage, migrations, and scoped assignment APIs.
- Add chat sidebar tag creation, assignment, and filtering controls.
- Document tag behavior and cover schema and chat interactions.
- Establish the session project/id candidate key before creating scoped tag foreign keys.
Files changed:
.changeset/fn-8562-chat-conversation-tags.md | 7 ++
docs/dashboard-guide.md | 4 +
docs/storage.md | 2 +
.../src/__tests__/postgres/schema-applier.test.ts | 8 +-
packages/core/src/async-chat-store.ts | 117 ++++++++++++++++++++-
packages/core/src/chat-store.ts | 32 ++++++
packages/core/src/chat-types.ts | 14 +++
packages/core/src/index.gate.ts | 3 +
packages/core/src/index.ts | 3 +
.../postgres/migrations/0036_chat_session_tags.sql | 64 +++++++++++
packages/core/src/postgres/schema-applier.ts | 16 ++-
packages/core/src/postgres/schema/project.ts | 34 ++++++
packages/dashboard/app/api.ts | 1 +
packages/dashboard/app/api/chat.ts | 18 ++++
packages/dashboard/app/components/ChatView.css | 17 +++
packages/dashboard/app/components/ChatView.tsx | 70 +++++++++++-
.../__tests__/ChatView.core-interactions.test.tsx | 27 +++++
.../dashboard/app/hooks/__tests__/useChat.test.ts | 1 +
packages/dashboard/app/hooks/useChat.ts | 52 ++++++++-
.../dashboard/src/routes/register-chat-routes.ts | 70 ++++++++++++
20 files changed, 550 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-8562
Fusion-Task-Lineage: 4efe798c-0865-451a-adbd-6b85f9f8b149
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-24 18:09:32 -07:00
gsxdsm
03cfc2dfc8
FN-8561: add lifecycle dates to task cards
...
Show localized creation and completion dates directly on task cards.
- Render compact, locale-aware lifecycle timestamps with accessible full-date titles.
- Persist archive timestamps for completed archived-task fallbacks and add coverage.
- Add translated labels, documentation, and a minor release changeset.
Files changed:
.changeset/fn-8561-task-card-dates.md | 7 +++
docs/dashboard-guide.md | 1 +
.../__tests__/archive-entry-serialization.test.ts | 35 ++++++++++++++
packages/core/src/task-store/serialization.ts | 8 ++++
packages/core/src/types/task-core.ts | 5 ++
packages/dashboard/app/components/TaskCard.css | 27 +++++++++++
packages/dashboard/app/components/TaskCard.tsx | 55 ++++++++++++++++++++++
.../__tests__/TaskCard.host-inventory.test.tsx | 21 +++++++++
.../app/components/__tests__/TaskCard.test.tsx | 17 +++++++
.../dashboard/app/i18n/__tests__/format.test.ts | 19 +++++++-
packages/dashboard/app/i18n/format.ts | 38 +++++++++++++++
packages/i18n/locales/en/app.json | 4 ++
packages/i18n/locales/es/app.json | 4 ++
packages/i18n/locales/fr/app.json | 4 ++
packages/i18n/locales/ko/app.json | 4 ++
packages/i18n/locales/zh-CN/app.json | 4 ++
packages/i18n/locales/zh-TW/app.json | 4 ++
17 files changed, 256 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8561
Fusion-Task-Lineage: 474b949b-d8e7-469a-b564-00acae66e58a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-24 11:15:43 -07:00
gsxdsm
c5a8421533
FN-8560: forward desktop test telemetry flags
...
Desktop test execution now preserves CI reporter and JSON output flags.
- Forward caller-selected Vitest reporters and output files through the desktop test wrapper.
- Add coverage for reporter syntax and shard timing command forwarding.
- Document desktop timing artifact requirements.
Files changed:
docs/testing.md | 7 ++++-
packages/desktop/scripts/__tests__/test-args.test.ts | 36 ++++++++++++++++++++++
packages/desktop/scripts/test-args.ts | 13 ++++++++
packages/desktop/scripts/test.ts | 3 +-
scripts/__tests__/ci-test-shard.test.mjs | 9 ++++++
5 files changed, 66 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8560
Fusion-Task-Lineage: 2a89b28d-39f6-4949-aec2-1123c36126cf
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-24 05:30:45 -07:00
gsxdsm
973c978f91
FN-8557: preserve terminal geometry on tablets
...
Keep floating terminal controls available on touch tablets across responsive and keyboard viewport changes.
- Classify known tablet screens separately from phone fallbacks.
- Restore tablet floating and docked geometry at the 768px breakpoint with larger touch resize targets.
- Cover keyboard-shrunken and breakpoint tablet interactions, and document the responsive behavior.
Files changed:
docs/dashboard-guide.md | 2 +-
.../dashboard/app/components/TerminalModal.css | 76 +++++++++--
.../dashboard/app/components/TerminalModal.tsx | 33 ++---
.../components/__tests__/TerminalModal.test.tsx | 150 +++++++++++++++++++++
.../app/hooks/__tests__/useViewportMode.test.ts | 14 ++
packages/dashboard/app/hooks/useViewportMode.ts | 33 ++++-
6 files changed, 277 insertions(+), 31 deletions(-)
Fusion-Task-Id: FN-8557
Fusion-Task-Lineage: cd334682-e70a-4531-ab53-c5c0898f0bf1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-24 00:59:42 -07:00
gsxdsm
faeb491ea4
fix(dashboard): harden terminal paste contract and manual-start button per review
...
Review follow-up to 907e8d03e (ce-code-review, 8 personas):
- Ctrl/Cmd+V with no clipboard API (or after a denied read) now returns
false WITHOUT preventDefault: xterm skips key handling and the browser's
default paste fires xterm's helper-textarea listener once. Returning true
made non-mac xterm inject \x16 and cancel the native paste (verified
against xterm 5.5.0 _keyDown).
- A denied clipboard read sets a sticky ref so later pastes use the native
path instead of being preventDefaulted into zero delivery.
- Custom-path delivery goes through terminal.paste() to restore bracketed
paste and newline normalization.
- 'Start terminal' surfaces createTab failures in the error banner and
disables while a create is in flight (no duplicate PTY sessions).
- normalizeActiveTab() extracted so storage-read and server-validation
share one all-inactive tie-break; failure-path regression test added.
- Rewrote docs/solutions/ui-bugs/xterm-async-font-remeasure-paste-dedupe.md
to the current paste contract (was prescribing the pre-#1902 behavior).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-23 19:46:02 -07:00
gsxdsm
dfb9ca6630
FN-8543: enforce bounded generated-fix remediation
...
Keep generated fix chains within their root retry budget and preserve intervention stops.
- Track retry counts and stop reasons on the canonical root feature.
- Persist project-isolated lineage stops across generated-fix removal and archive paths.
- Serialize stop recording with generated-fix admission and expose conflict-safe mission resume behavior.
Files changed:
.changeset/fn-8543-bounded-fix-lineage.md | 7 +
docs/missions.md | 6 +-
.../__tests__/postgres/mission-store.pg.test.ts | 72 +++++++
packages/core/src/async-mission-store-queries.ts | 91 ++++++++-
packages/core/src/async-mission-store.ts | 206 ++++++++++++++++++---
packages/core/src/index.ts | 2 +-
packages/core/src/mission-store.ts | 10 +
packages/core/src/mission-types.ts | 7 +
.../0035_fn_8543_mission_lineage_stop.sql | 31 ++++
packages/core/src/postgres/schema-applier.ts | 18 +-
packages/core/src/postgres/schema/project.ts | 21 +++
.../core/src/task-store/archive-lifecycle-2.ts | 15 +-
.../core/src/task-store/async-archive-lineage.ts | 10 +-
packages/dashboard/src/mission-routes.ts | 14 +-
packages/engine/src/mission-execution-loop.ts | 30 ++-
15 files changed, 495 insertions(+), 45 deletions(-)
Fusion-Task-Id: FN-8543
Fusion-Task-Lineage: 24c03d63-5914-4072-aa17-16862432fc78
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 16:12:44 -07:00
Victor Canô
0c085bf444
fix(engine): pushAfterMerge no longer strands approved merges when the remote diverges ( #2407 )
...
## Problem
With `pushAfterMerge` enabled (and `mergeStrategy` other than
`pull-request`), if `origin/<integration-branch>` advances externally
between the local squash-merge and the push, the divergence path opens a
clean-room `git pull --rebase` and an AI agent resolves and stages the
conflicts — but the flow could end there: no `git rebase --continue`, no
push, and no surfaced error.
Because finalize runs *before* the push, the task is already `done`, so
a reviewed, approved merge is silently left container-only, and every
subsequent merge on the project stalls the same way. Separately, an
abort mid-push (`MergeAbortedError`) was swallowed with only a
process-log warning — no task-log entry, no run-audit event.
## Change
- **Deterministic regression coverage** for the conflicting-divergence
path (real-git fixture) proving the rebase runs to completion and the
push lands (refs converge), plus abort/termination scenarios.
- **Recovery-branch safety net:** before the clean-room rebase starts,
the pre-rebase local squash is force-pushed to a per-task remote branch
`fusion/<task-id>-stranded`, so approved content is never container-only
— even across process death or abort. Deleted after a successful target
push; retained on failure/abort as the recovery source.
- **Never-silent outcomes:** every non-pushed outcome (failure or abort)
writes a durable task-log entry and a `push:origin` run-audit event. The
audit contract now documents `push:origin` as polymorphic (dashboard
Smart Push vs. automated post-merge push) and enumerates the automated
path's outcomes, including the new `"aborted"` shutdown case.
- **Cleanup hardening:** `isRebaseInProgress` now probes Git's
worktree-specific `rebase-merge`/`rebase-apply` state directories
(async, timeout-guarded) so a completed rebase can't receive a spurious
second `--continue`; unfinished rebases are cleaned up.
Out of scope by design: withholding the "merge confirmed" state until
the push succeeds — the `FNXC:MergePush` invariant ("a push problem can
never park or roll back a landed merge") is deliberate; the recovery
branch + surfacing satisfy the data-preservation intent without breaking
it.
## Files
`packages/engine/src/merger-ai.ts`, `packages/engine/src/merger.ts`,
`packages/engine/src/run-audit.ts`, new/updated tests under
`packages/engine/src/__tests__/`, `docs/settings-reference.md`,
`docs/dashboard-guide.md`, `AGENTS.md`, and a labeled changeset.
## Validation
`tsc --noEmit` clean; engine divergence + merger suites pass (41 tests);
rebased onto current `main` with no conflicts.
---
_Developed with Claude Code, under human supervision and review._
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Bug Fixes**
* Prevented approved post-merge pushes from becoming stranded when the
remote diverges by using a recovery-branch workflow and safer cleanup.
* Improved behavior and reporting when pushes are aborted or fail after
merge, including clearer non-fatal status and audit outcomes.
* **Documentation**
* Expanded push-after-merge and dashboard Smart Push documentation with
recovery-branch and `push:origin`/`push:recovery-branch` outcome
semantics.
* **Tests**
* Added end-to-end regression tests for divergent/conflicting AI
push-after-merge flows, including abort and worktree cleanup
verification.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Victor Cano <victortroz@gmail.com >
Co-authored-by: Claude <noreply@anthropic.com >
2026-07-23 15:55:03 -07:00
gsxdsm
e5caea542a
FN-8544: gate mission remediation behind autopilot
...
Keep mission validation report-only until an operator explicitly enables autopilot.
- Gate validator-created remediation features and task dispatch behind mission autopilot.
- Audit attributed status and autopilot transitions atomically across mission stores.
- Expose mission autonomy controls and document the opt-in lifecycle.
Files changed:
.changeset/fn-8544-mission-autonomy-audit.md | 7 ++
docs/missions.md | 10 +-
packages/cli/src/extension.ts | 26 ++++-
.../__tests__/postgres/mission-store.pg.test.ts | 27 +++++
packages/core/src/async-mission-store.ts | 70 +++++++++++--
packages/core/src/index.gate.ts | 3 +
packages/core/src/index.ts | 3 +
packages/core/src/mission-store.ts | 113 +++++++++++++--------
packages/core/src/mission-types.ts | 22 ++++
.../dashboard/app/components/MissionManager.tsx | 1 +
packages/dashboard/src/mission-routes.ts | 25 +++--
.../src/__tests__/agent-mission-tools.test.ts | 17 +++-
.../src/__tests__/mission-execution-loop.test.ts | 21 ++++
packages/engine/src/agent-heartbeat.ts | 4 +-
packages/engine/src/agent-tools.ts | 30 +++++-
packages/engine/src/executor.ts | 5 +-
packages/engine/src/mission-autopilot.ts | 51 +++++-----
packages/engine/src/mission-execution-loop.ts | 49 ++++++---
packages/engine/src/triage.ts | 5 +-
19 files changed, 377 insertions(+), 112 deletions(-)
Fusion-Task-Id: FN-8544
Fusion-Task-Lineage: 23a69923-5a19-407e-9fe2-8973c166ee9a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 15:25:09 -07:00
gsxdsm
e7c9b2ac80
FN-8542: separate milestone acceptance from feature validation
...
Keep feature validation scoped to linked feature assertions while evaluating milestone acceptance at rollup.
- Add assertion scope and origin provenance with database migration support
- Synchronize milestone acceptance prose to a canonical milestone assertion
- Prevent milestone assertions from affecting feature verdicts and document the completion contract
- Cover scoped validation and milestone rollup behavior with core and engine tests
Files changed:
.changeset/fn-8542-feature-validation-scope.md | 7 +
docs/missions-completion-contract.md | 25 +-
docs/missions.md | 6 +-
.../mission-store.sync-loop-transition.test.ts | 53 +++++
packages/core/src/async-mission-store-queries.ts | 17 +-
packages/core/src/async-mission-store.ts | 58 ++++-
packages/core/src/mission-store.ts | 118 +++++++++-
packages/core/src/mission-types.ts | 25 ++
.../core/src/postgres/migrations/0000_initial.sql | 2 +
.../0034_milestone_assertion_provenance.sql | 30 +++
packages/core/src/postgres/schema-applier.ts | 24 +-
packages/core/src/postgres/schema/project.ts | 1 +
.../src/__tests__/mission-execution-loop.test.ts | 161 ++++++++++++-
packages/engine/src/mission-execution-loop.ts | 262 ++++++++++++++++-----
14 files changed, 700 insertions(+), 89 deletions(-)
Fusion-Task-Id: FN-8542
Fusion-Task-Lineage: cf112d31-376a-456e-be08-225eab5de393
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 14:39:44 -07:00
gsxdsm
2978ec4973
FN-8551: add accessible agent heartbeat controls
...
Add per-agent and project-wide heartbeat enablement controls.
- Add preserved runtime configuration helpers and heartbeat controls across agent list, board, and org-chart views.
- Add bulk enable/disable actions, accessible labels, localized copy, documentation, and release metadata.
- Cover heartbeat mutations through dashboard, route, scheduler, and layout smoke tests.
Files changed:
.changeset/fn-8551-agent-heartbeat-controls.md | 7 +
docs/dashboard-guide.md | 2 +
packages/dashboard/app/api/agents.ts | 12 ++
packages/dashboard/app/api/legacy.ts | 2 +
.../dashboard/app/components/AgentDetailView.tsx | 14 +-
packages/dashboard/app/components/AgentsView.css | 11 ++
packages/dashboard/app/components/AgentsView.tsx | 186 ++++++++++++++++-----
.../AgentDetailView.advanced-settings.test.tsx | 29 ++++
.../__tests__/AgentDetailView.test-helpers.ts | 2 +
.../app/components/__tests__/AgentsView.test.tsx | 68 ++++++++
.../dashboard/scripts/browser-layout-smoke.mjs | 54 ++++++
.../src/routes/__tests__/agent-core-routes.test.ts | 69 ++++++++
.../src/__tests__/heartbeat-scheduler.test.ts | 21 +++
packages/i18n/locales/en/app.json | 19 ++-
packages/i18n/locales/es/app.json | 19 ++-
packages/i18n/locales/fr/app.json | 19 ++-
16 files changed, 484 insertions(+), 50 deletions(-)
Fusion-Task-Id: FN-8551
Fusion-Task-Lineage: 2d4c8a15-a444-47b6-b57c-f41fc4163155
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 14:32:58 -07:00
gsxdsm
3d0ce2ed3a
FN-8545: enforce mission lineage task admission
...
Protect feature bootstrap task creation with mission-lineage admission rules.
- Restrict supervised agents to linked autonomous mission features
- Atomically claim defined feature tasks and preserve duplicate ownership
- Lock defined feature claims to prevent concurrent bootstrap inserts
- Document admission behavior and add PostgreSQL and delegation coverage
Files changed:
.changeset/fn-8545-mission-admission.md | 7 +
docs/agents.md | 6 +
docs/missions.md | 12 +-
.../__tests__/postgres/mission-store.pg.test.ts | 119 ++++++++++++
packages/core/src/async-mission-store.ts | 203 +++++++++++++++++++--
packages/core/src/duplicate-guard.ts | 14 +-
packages/core/src/mission-store.ts | 15 ++
packages/core/src/task-store/task-creation.ts | 152 ++++++++++-----
.../src/__tests__/agent-tools-delegation.test.ts | 152 ++++++++++++++-
packages/engine/src/agent-tools.ts | 151 ++++++++++++++-
10 files changed, 753 insertions(+), 78 deletions(-)
Fusion-Task-Id: FN-8545
Fusion-Task-Lineage: c6e1b46d-f434-4b07-93bc-27e1f6b491b1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 14:21:29 -07:00
gsxdsm
15b5441afc
FN-8548: keep GitHub import actions on one mobile row
...
Keep all selected GitHub issue actions touch-safe and visible on a single mobile row.
- Group detail action controls separately from the comment composer and make their mobile tracks shrinkable.
- Add responsive browser-smoke coverage at 320px, 390px, and 412px plus modal structure tests.
- Document the mobile behavior and add a patch changeset.
Files changed:
.changeset/fn-8548-mobile-github-import-actions.md | 7 +
docs/dashboard-guide.md | 8 +-
.../dashboard/app/components/GitHubImportModal.css | 42 +++++-
.../dashboard/app/components/GitHubImportModal.tsx | 80 ++++++------
.../__tests__/GitHubImportModal.test.tsx | 50 ++++++++
packages/dashboard/app/styles.css | 11 +-
.../dashboard/scripts/browser-layout-smoke.mjs | 142 ++++++++++++++++++++-
7 files changed, 290 insertions(+), 50 deletions(-)
Fusion-Task-Id: FN-8548
Fusion-Task-Lineage: 8fab6a1d-0ca9-4246-9707-e1fc84ca58e5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 13:28:19 -07:00
gsxdsm
e734ed8a48
FN-8541: expose actionable validator diagnostics
...
Surface normalized, secret-safe validator evidence and assertion verdicts across mission events and remediation work.
- Normalize, redact, bound, and render per-assertion validation diagnostics in shared core APIs.
- Attach verdict-driven diagnostics to failure events and generated fixes while suppressing duplicate triage noise.
- Display validator evidence in Mission activity and document the operator workflow.
- Add core and engine coverage for evidence, mixed blocked verdicts, and triage behavior.
Files changed:
.changeset/fn-8541-validator-diagnostics.md | 7 ++
docs/missions.md | 17 +++
.../mission-store.validation-diagnostics.test.ts | 65 ++++++++++
packages/core/src/async-mission-store.ts | 8 +-
packages/core/src/index.gate.ts | 10 ++
packages/core/src/index.ts | 10 ++
packages/core/src/mission-store.ts | 10 +-
packages/core/src/mission-types.ts | 136 +++++++++++++++++++++
.../dashboard/app/components/MissionManager.css | 21 ++++
.../dashboard/app/components/MissionManager.tsx | 56 +++++++++
packages/dashboard/app/components/mission-types.ts | 3 +
.../src/__tests__/mission-execution-loop.test.ts | 44 +++++++
.../mission-validator-behavioral-posture.test.ts | 37 +++++-
packages/engine/src/mission-execution-loop.ts | 117 +++++++++++++-----
14 files changed, 501 insertions(+), 40 deletions(-)
Fusion-Task-Id: FN-8541
Fusion-Task-Lineage: b226fc34-f35c-4ce5-bcb5-e418529caaa7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 13:21:10 -07:00
gsxdsm
0d355f371c
FN-8547: add local OpenAI-compatible provider onboarding
...
Add guided onboarding for OpenAI-compatible local model providers.
- Add custom/local provider prompts and atomic models registry updates.
- Preserve registry fields, validate endpoint configuration, and support Qwen thinking compatibility.
- Document setup and cover registry persistence with onboarding tests.
Files changed:
.changeset/fn-8547-local-provider-onboarding.md | 7 +
docs/cli-reference.md | 13 ++
docs/settings-reference.md | 35 ++++-
packages/cli/src/commands/__tests__/onboard.test.ts | 55 ++++++-
packages/cli/src/commands/onboard.ts | 161 ++++++++++++++++++++-
5 files changed, 261 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-8547
Fusion-Task-Lineage: 740221de-fce8-43ae-a095-13b8abf1904a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 12:31:55 -07:00
gsxdsm
84d7306bd3
FN-8546: fix ideation candidate discovery
...
Expose persisted ideation candidate identities so agents can select a candidate for convergence.
- Render candidate IDs, provenance, source references, and content in show and diverge responses.
- Cover discover-to-converge behavior, duplicate content, empty sessions, and missing sessions.
- Document the direct candidate-ID convergence workflow and add a patch changeset.
Files changed:
.changeset/fn-8546-ideation-candidate-ids.md | 7 ++
docs/agent-tool-surface-full-loop.md | 4 +-
docs/ideation/persisted-diverge-converge.md | 6 +-
.../src/__tests__/agent-ideation-tools.test.ts | 93 +++++++++++++++++++---
packages/engine/src/agent-tools.ts | 23 +++++-
5 files changed, 116 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-8546
Fusion-Task-Lineage: 7232701f-5c6b-40fc-8d46-d65b97af9c0a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 12:26:02 -07:00
gsxdsm
c4292b25ef
FN-8539: make Planning Mode selection-driven
...
Make Planning Mode refine repository-grounded plans through successive operator choices.
- Offer concrete directions and Other for vague planning openers
- Rebuild running plans around selected options, multi-selections, and Other responses
- Add selection-loop coverage and operator documentation
Files changed:
.changeset/fn-8539-option-driven-planning.md | 7 ++
docs/dashboard-guide.md | 2 +-
.../__tests__/planning-infinite-interview.test.ts | 131 ++++++++++++++++++++-
.../planning-interview-formatters.test.ts | 37 ++++--
packages/dashboard/src/planning.ts | 34 +++---
5 files changed, 185 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-8539
Fusion-Task-Lineage: 585bae1e-6d9e-4733-b787-77b70a7d1259
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 12:08:58 -07:00
gsxdsm
3f976e3dca
FN-8538: give Planning Mode a dedicated collaborative prompt
...
Planning Mode now uses a standalone collaborative prompt rather than inherited task-triage instructions.
- Resolve the Planning Mode default independently of workflows and triage assignments.
- Preserve explicit full-system prompt overrides and update prompt-setting documentation.
- Cover dedicated prompt behavior and add the published-package changeset.
Files changed:
.changeset/fn-8538-planning-prompt.md | 7 +++
docs/dashboard-guide.md | 3 +-
.../core/src/__tests__/prompt-overrides.test.ts | 7 +++
packages/core/src/prompt-overrides.ts | 8 ++-
packages/dashboard/app/utils/builtinPrompts.ts | 8 ++-
.../__tests__/planning-infinite-interview.test.ts | 60 +++++++++++++++++++++-
.../__tests__/planning-prompt-resolution.test.ts | 47 ++++++++++-------
packages/dashboard/src/planning.ts | 46 +++++------------
8 files changed, 130 insertions(+), 56 deletions(-)
Fusion-Task-Id: FN-8538
Fusion-Task-Lineage: 36e0665d-7995-4bc5-9c73-948f7f4e9131
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 11:41:15 -07:00
gsxdsm
b4856e3c1e
fix: separate Docker app root from project mount so -v host mounts work ( #2414 )
...
The runner stage installed the application at /project, which was also the
documented bind-mount point — mounting a host project there shadowed the CLI
and the container exited with MODULE_NOT_FOUND on packages/cli/dist/bin.js.
- Install the app under /app and run the entrypoint by absolute path.
- Reserve /workspace (empty in the image, container workdir) as the project
mount point.
- Update docs/docker.md: mount at /workspace, and document that embedded
Postgres/global state lives in /home/node/.fusion with a named-volume
example so persistence actually captures it.
Verified: image builds; `docker run -v host:/workspace` boots, embedded
Postgres initializes, /api/health returns ok.
Fixes #2414
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-23 09:50:24 -07:00
gsxdsm
42fe154abe
FN-8533: add mobile planning comment actions
...
Make contextual plan comments reachable from the mobile action rail and restore focus after editing.
- Add responsive desktop and mobile comment triggers with contextual styling and documentation.
- Preserve the selected quote and restore the remounted trigger after canceling or adding a comment.
- Cover action placement, focus restoration, and browser interaction behavior.
Files changed:
.changeset/fn-8533-mobile-planning-comments.md | 7 ++
docs/dashboard-guide.md | 2 +-
.../dashboard/app/components/PlanningModeModal.css | 20 ++++
.../dashboard/app/components/PlanningModeModal.tsx | 44 ++++++-
.../__tests__/PlanningModeModal.css.test.ts | 10 ++
.../PlanningModeModal.planning-flow.test.tsx | 40 +++++--
.../PlanningModeModal.ui-interactions.test.tsx | 5 +
.../dashboard/app/planning-browser-e2e-fixture.tsx | 3 +-
.../src/__tests__/planning-browser-e2e.test.ts | 133 +++++++++++++++++++--
packages/dashboard/vitest.config.ts | 11 +-
scripts/lib/test-quarantine.json | 5 -
11 files changed, 242 insertions(+), 38 deletions(-)
Fusion-Task-Id: FN-8533
Fusion-Task-Lineage: e0d561be-ecc8-456e-807e-a1dc677b5d9c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 09:33:25 -07:00
gsxdsm
d2e41e490f
FN-8534: honor workflow planning-model precedence
...
Honor selected workflow planning models for Planning Mode sessions.
- Resolve selected workflow planning lanes against the project baseline.
- Route complete request and workflow pairs through canonical planning-model resolution.
- Cover new and draft planning sessions, test mode, and settings documentation.
Files changed:
.changeset/fn-8534-planning-workflow-model.md | 7 ++
docs/settings-reference.md | 2 +
.../__tests__/workflow-settings-resolver.test.ts | 73 ++++++++++++++++
packages/core/src/index.gate.ts | 1 +
packages/core/src/index.ts | 1 +
packages/core/src/workflow-settings-resolver.ts | 80 +++++++++++-------
.../src/__tests__/routes-planning.test.ts | 97 ++++++++++++++++++++++
.../src/routes/register-planning-subtask-routes.ts | 48 ++++++++---
8 files changed, 267 insertions(+), 42 deletions(-)
Fusion-Task-Id: FN-8534
Fusion-Task-Lineage: e6b5b546-b9f1-49c5-b680-90f24e856458
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 08:53:06 -07:00
gsxdsm
ebbb5948ab
FN-8529: add contextual plan review comments
...
Enable operators to submit selected-plan suggestions through the existing Planning Mode revision flow.
- Capture text selections, batch suggestions, and retain retryable comment submissions in the Planning Mode UI.
- Validate bounded comment payloads and format them for the existing planning session update path.
- Document the workflow and add coverage for ordering, retry behavior, and selection boundaries.
Files changed:
.changeset/fn-8529-planning-comments.md | 7 +
docs/dashboard-guide.md | 4 +
packages/dashboard/app/api/legacy.ts | 1 +
packages/dashboard/app/api/planning.ts | 9 +-
.../dashboard/app/components/PlanningModeModal.css | 86 ++++++++++++
.../dashboard/app/components/PlanningModeModal.tsx | 144 ++++++++++++++++++++-
.../PlanningModeModal.planning-flow.test.tsx | 39 ++++++
.../PlanningModeModal.ui-interactions.test.tsx | 10 ++
.../__tests__/planning-infinite-interview.test.ts | 62 +++++++++
packages/dashboard/src/planning.ts | 76 ++++++++++-
.../src/routes/register-planning-subtask-routes.ts | 27 +++-
11 files changed, 455 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-8529
Fusion-Task-Lineage: c7064d76-effd-4597-a2b4-03f344dd59b9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-23 00:56:47 -07:00
Victor Canô
64661c3ae1
feat(dashboard): stable theme token contract and plugin overlay layering ( #2415 )
...
## Summary
Gives dashboard integrators (plugin views, embedded panels, theming
tools) a supported way to match the dashboard's look and to layer
overlay UI correctly — instead of scraping computed styles and guessing
z-index values. This implements the CSS-token bridge slice of
`docs/proposals/2026-07-01-dashboard-theme-plugin-system.md`.
Two additions, both inert unless used:
1. **Documented theme-token contract.** A "Theme tokens" section in
`docs/dashboard-guide.md` (referenced from `docs/PLUGIN_AUTHORING.md`)
declares the stable set of CSS custom properties — colors, surfaces,
status colors — that integrators may read. Tokens resolve to raw color
strings (e.g. `#161b22`) in every theme, including the newer ones. A
sync test (`theme-token-contract-docs.test.ts`) parses the doc's token
table and asserts each documented token has a real definition in the
dashboard CSS, so the contract cannot silently drift from the code.
2. **Overlay layering surface.** Overlay-style UI (palettes, pickers,
floating panels) currently has no supported way to sit above the
floating-window stack — the effective max z-index is runtime state
inside `floatingWindowStack.ts`. This PR exposes it:
- `--fusion-max-z` on `:root` — kept in sync by `floatingWindowStack`
(written at module load and after every `nextFloatingZ()` claim), so it
always reflects the true top of the dashboard-managed stack. Boot/floor
value is `11001`, chosen to clear the highest statically-declared layer
(the body-portaled model-combobox dropdown at `z-index: 11000`).
- `#plugin-overlay-root` — an empty, `pointer-events: none` sibling of
`#root` stacked at `calc(var(--fusion-max-z) + 1)`. React never renders
into it, so it is hydration-safe; integrators portal into it and
re-enable pointer events on their own elements.
- The layer bands (base UI / floating windows / toasts / dropdown /
overlay root) are documented in `styles.css` and the guide, and a guard
test (`dashboard-max-z-guard.test.ts`) scans the structural + component
CSS and fails if any static `z-index` is ever introduced above the floor
— keeping the contract honest as the codebase evolves.
## Behavior
No visual or behavioral change for existing users: `floatingWindowStack`
still returns the same values from `nextFloatingZ()`; the overlay root
is empty and click-through; tokens were already defined — this only
documents and guards them.
## Tests
- `theme-token-contract-docs.test.ts` — docs ↔ CSS sync
(non-tautological: anchored matching against real definitions).
- `floatingWindowStack.max-z.test.ts` — `--fusion-max-z` boot value and
live tracking as the stack claims z-indexes.
- `dashboard-max-z-guard.test.ts` — no static dashboard z-index above
the floor (decorative `public/theme-data.css` INT_MAX scanline overlay
deliberately excluded; it's non-interactive grain, documented in the
test).
- Changeset included (`minor`, `category: feature`). Typecheck clean.
## Open question for maintainers
The token is named `--fusion-max-z`. The existing scale uses `--z-*`
names (`--z-dropdown`, `--z-modal`) on a lower band — happy to rename to
`--z-max` / `--z-plugin-overlay` or anything that fits your convention;
the name is the only bikeshed here, the sync mechanism is independent of
it.
## AI assistance disclosure
Parts of this change were authored with AI assistance (Anthropic's
Claude); the commit carries a `Co-authored-by` trailer accordingly.
Everything was human-reviewed before submission, and the test suite and
typecheck were run locally against the current `main`.
If squash-merging with a rewritten message, please keep the attribution:
```
Co-authored-by: Claude <noreply@anthropic.com >
```
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **New Features**
- Added stable dashboard theme tokens for consistent plugin/integration
styling.
- Introduced a dedicated plugin overlay mount point with click-through
defaults and an overlay stacking ceiling.
- Overlay z-index now stays in sync with floating window layering
automatically.
- **Documentation**
- Added an explicit stable “theme token contract” and “overlay layering
contract,” including interaction and z-index usage rules and deprecation
expectations.
- **Bug Fixes**
- Improved reliability of plugin overlay stacking so overlay content
renders above intended dashboard layers.
- **Tests**
- Added guards validating CSS z-index ceilings and enforcing the
documented theme token contract.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Co-authored-by: Claude <noreply@anthropic.com >
2026-07-22 23:04:33 -07:00
gsxdsm
4ef94e667d
FN-8523: gate retained SQLite scans by completion marker
...
Keep completed SQLite migration sources inert across PostgreSQL startups.
- Gate core, central identity, and plugin reads on independent completion markers.
- Preserve PostgreSQL project identity before recording a legacy-central migration as complete.
- Cover completed backup and pending-core central-marker startup paths.
Files changed:
.changeset/fn-8523-skip-completed-sqlite-rescan.md | 7 ++
docs/storage.md | 2 +
.../src/__tests__/postgres/sqlite-migrator.test.ts | 15 +++
.../postgres/startup-factory-integration.test.ts | 111 ++++++++++++++++++++-
packages/core/src/postgres/sqlite-migrator.ts | 28 ++++--
packages/core/src/postgres/startup-factory.ts | 86 +++++++++++-----
6 files changed, 212 insertions(+), 37 deletions(-)
Fusion-Task-Id: FN-8523
Fusion-Task-Lineage: 1a05b90d-23df-4423-8346-abd6ef35f4df
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 22:57:41 -07:00
gsxdsm
e16204deef
FN-8522: fix Windows embedded PostgreSQL crash recovery
...
Harden Windows embedded PostgreSQL startup and recover once from owned-cluster DLL initialization crashes.
- Provide child-only native PATH hardening and non-blocking runner-log monitoring.
- Detect the ordered 0xC0000142 shutdown sequence and restart only owned clusters on their resolved port.
- Add lifecycle coverage and operator diagnostics for recovery behavior.
Files changed:
.../fn-8522-windows-embedded-postgres-recovery.md | 7 ++
docs/diagnostics.md | 10 ++
docs/storage.md | 6 +
.../__tests__/postgres/embedded-lifecycle.test.ts | 87 ++++++++++++++
.../postgres/embedded-windows-elevated.test.ts | 49 ++++++++
packages/core/src/postgres/embedded-lifecycle.ts | 128 ++++++++++++++++++---
.../core/src/postgres/embedded-windows-elevated.ts | 119 +++++++++++++++++--
7 files changed, 382 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-8522
Fusion-Task-Lineage: f256e421-d82e-4afb-9f81-b5c18f1c7100
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 22:43:51 -07:00
gsxdsm
de5d446b5c
FN-8526: add custom workflow column descriptions
...
Enable custom workflow authors to define and display descriptions for board columns.
- Persist optional descriptions in workflow column definitions and API responses.
- Add editor controls and board tooltips for column descriptions.
- Cover validation, API, and dashboard behavior with tests and documentation.
Files changed:
.changeset/fn-8526-workflow-column-descriptions.md | 7 +++
docs/dashboard-guide.md | 4 ++
.../src/__tests__/workflow-ir-validation.test.ts | 30 +++++++++++
packages/core/src/workflow-ir-types.ts | 4 ++
packages/core/src/workflow-ir.ts | 9 ++++
packages/dashboard/app/api/board-workflows.ts | 2 +
packages/dashboard/app/components/Board.tsx | 3 ++
packages/dashboard/app/components/Column.tsx | 14 +++--
.../app/components/WorkflowColumnPanel.tsx | 31 ++++++++++++
.../app/components/WorkflowNodeEditor.css | 41 +++++++++++++++
.../app/components/__tests__/Column.test.tsx | 19 +++++++
.../__tests__/WorkflowColumnPanel.test.tsx | 38 ++++++++++++++-
.../app/components/__tests__/WorkflowNodeEditor.test.tsx | 19 +++++++
.../app/components/workflow-flow-mapping.ts | 1 +
packages/dashboard/app/styles.css | 8 +++
.../src/__tests__/board-workflows.test.ts | 59 ++++++++++++++++++++++
packages/dashboard/src/routes/board-workflows.ts | 3 ++
17 files changed, 288 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-8526
Fusion-Task-Lineage: df26b7c0-301c-4875-b100-d63d0cfecf85
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 22:37:51 -07:00
gsxdsm
28e8c0abc9
FN-8524: cover workspace manifests in Docker builds
...
Ensure the builder install layer includes every selected workspace manifest.
- Copy the five omitted plugin manifests before frozen installation.
- Validate pre-install Dockerfile coverage against pnpm workspace entries.
- Document the manifest coverage requirement and focused test command.
Files changed:
Dockerfile | 8 +-
docs/docker.md | 3 +-
.../dockerfile-workspace-manifests.test.mjs | 111 +++++++++++++--------
3 files changed, 78 insertions(+), 44 deletions(-)
Fusion-Task-Id: FN-8524
Fusion-Task-Lineage: 16a4d9df-ff08-4051-9e53-0da414ef6a85
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 22:04:32 -07:00
gsxdsm
059b9549a9
FN-8521: separate runtime installation from toggles
...
Keep built-in runtime installation distinct from project-scoped enablement.
- Show enable/disable toggles only for installed runtime plugins.
- Prevent toggles from registering or reinstalling uninstalled runtimes.
- Update plugin lifecycle documentation and regression coverage.
Files changed:
.../fn-8521-separate-plugin-install-toggle.md | 7 ++
docs/dashboard-guide.md | 2 +-
docs/plugin-management.md | 2 +-
.../dashboard/app/components/PluginManager.tsx | 74 ++++------------------
.../components/__tests__/PluginManager.test.tsx | 30 ++++++---
.../__tests__/PluginManager.toggle.test.tsx | 51 +++++++--------
6 files changed, 67 insertions(+), 99 deletions(-)
Fusion-Task-Id: FN-8521
Fusion-Task-Lineage: 0de225f4-1d9c-411e-b5cc-851d3579a2ec
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 20:55:27 -07:00
gsxdsm
0e2aa49f8d
FN-8520: hide uninstalled runtimes from Settings
...
Keep Settings runtime navigation synchronized with installed runtime plugins.
- Filter runtime sections to installed plugins while preserving disabled installed runtimes
- Refresh runtime navigation after plugin lifecycle events and direct plugin mutations
- Add Settings coverage and document runtime visibility behavior
Files changed:
.changeset/fn-8520-runtime-sidebar.md | 7 +++
docs/dashboard-guide.md | 2 +-
.../dashboard/app/components/PluginManager.tsx | 10 +++-
.../dashboard/app/components/SettingsModal.tsx | 70 +++++++++++++++++++++-
.../__tests__/SettingsModal.general.test.tsx | 58 ++++++++++++++++++
.../__tests__/SettingsModal.test-harness.tsx | 2 +
.../components/__tests__/settings-mobile.test.tsx | 1 +
.../settings/sections/PluginsSection.tsx | 6 +-
8 files changed, 149 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-8520
Fusion-Task-Lineage: 914ae503-e1b0-4051-bc01-4da950bf55b3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 20:38:25 -07:00
Fusion
96a9da7979
FN-8505: notify operators of terminal task wedges
...
Deliver durable, actionable notifications when terminal task recovery wedges.
- Persist and deduplicate terminal wedge notification episodes across task updates and service restarts.
- Classify terminal failure and self-healing escalation states, then deliver actionable ntfy and mailbox alerts.
- Align PostgreSQL baseline and upgrade migration registration for the durable wedge field.
Files changed:
.changeset/fn-8505-task-wedge-notifications.md | 7 +
docs/agents.md | 4 +
docs/architecture.md | 4 +
.../core/src/postgres/migrations/0000_initial.sql | 2 +
.../migrations/0033_fn-8505_wedge_notification.sql | 5 +
packages/core/src/postgres/schema-applier.ts | 29 +++-
packages/core/src/postgres/schema/project.ts | 1 +
packages/core/src/store.ts | 22 ++-
packages/core/src/task-store/persistence.ts | 2 +
packages/core/src/task-store/serialization.ts | 1 +
packages/core/src/task-store/task-row-mappers.ts | 2 +-
packages/core/src/task-store/task-update.ts | 5 +
packages/core/src/types.ts | 14 ++
packages/core/src/types/workflow-steps.ts | 2 +
.../src/__tests__/notification-service.test.ts | 20 +++
packages/engine/src/__tests__/notifier.test.ts | 26 +++-
packages/engine/src/__tests__/self-healing.test.ts | 9 +-
.../__tests__/notification-service.test.ts | 34 ++++-
.../__tests__/task-wedge-notification.test.ts | 134 +++++++++++++++++
.../src/notification/notification-service.ts | 108 +++++++++++++-
packages/engine/src/notification/ntfy-provider.ts | 11 ++
.../src/notification/task-wedge-notification.ts | 160 +++++++++++++++++++++
packages/engine/src/notifier.ts | 3 +
packages/engine/src/self-healing.ts | 17 +++
24 files changed, 610 insertions(+), 12 deletions(-)
Fusion-Task-Id: FN-8505
Fusion-Task-Lineage: eee85220-18ba-475d-9d01-dc96e2b923e6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 20:07:48 -07:00
gsxdsm
fd9e4b2a30
FN-8509: create Coding Ideas Start tasks in Todo
...
Coding Ideas Start now atomically creates tasks in the validated Todo column.
- Resolve Todo only from captured, visible Coding Ideas workflow metadata.
- Preserve explicit Start destinations through Board and List create hosts without a follow-up move.
- Add regression coverage, documentation, and a patch changeset.
Files changed:
.changeset/fn-8509-coding-ideas-start-todo.md | 7 +++++
docs/dashboard-guide.md | 4 +--
packages/dashboard/app/components/Column.tsx | 8 +++++-
packages/dashboard/app/components/ListView.tsx | 5 ++++
.../dashboard/app/components/QuickEntryBox.tsx | 17 +++++++-----
.../app/components/__tests__/Column.test.tsx | 16 ++++++++++-
.../app/components/__tests__/ListView.test.tsx | 31 +++++++++++++++++++++-
.../components/__tests__/QuickEntryBox.test.tsx | 31 ++++++++++------------
.../app/utils/__tests__/quickAddStart.test.ts | 25 ++++++++++++++++-
packages/dashboard/app/utils/quickAddStart.ts | 21 ++++++++++++++-
10 files changed, 134 insertions(+), 31 deletions(-)
Fusion-Task-Id: FN-8509
Fusion-Task-Lineage: 951599a0-f277-4499-aaea-90371ddeda72
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 19:08:47 -07:00
gsxdsm
1cd06746fe
FN-8502: add photo and file attachments to Chat and Quick Add
...
Enable supported photo and file attachment workflows across Quick Add and Chat.
- Expand Quick Add and Chat picker, paste, and drag/drop attachment intake.
- Preserve pending attachments until direct and room sends are accepted, with accessible previews and retry support.
- Align Chat MIME and size validation with task attachments, including video, Markdown, and TOML support.
- Add regression coverage for attachment previews, delivery behavior, and accepted MIME types.
Files changed:
.changeset/fn-8502-chat-quick-add-attachments.md | 7 ++
docs/dashboard-guide.md | 5 +-
... quick-entry-attachment-preview-modal.test.tsx} | 50 ++++++--
packages/dashboard/app/components/ChatView.tsx | 80 +++++++++++--
.../dashboard/app/components/InlineCreateCard.tsx | 6 +-
.../app/components/PendingAttachmentPreviews.css | 60 ++++++++++
...ePreviews.tsx => PendingAttachmentPreviews.tsx} | 68 ++++++-----
.../app/components/PendingImagePreviews.css | 35 ------
.../dashboard/app/components/QuickEntryBox.tsx | 127 +++++++++++++--------
packages/dashboard/app/components/TaskForm.tsx | 6 +-
.../__tests__/ChatView.core-interactions.test.tsx | 61 ++++++++--
.../__tests__/ChatView.mobile-render.test.tsx | 20 +++-
.../components/__tests__/ChatView.rooms.test.tsx | 27 ++++-
.../components/__tests__/QuickEntryBox.test.tsx | 59 ++++++++--
packages/dashboard/app/hooks/useChat.ts | 41 ++++++-
.../src/__tests__/chat-attachment-content.test.ts | 17 +++
packages/dashboard/src/chat-attachment-content.ts | 4 +-
.../dashboard/src/routes/chat-attachment-config.ts | 16 +++
.../src/routes/register-chat-room-routes.ts | 9 +-
.../dashboard/src/routes/register-chat-routes.ts | 11 +-
20 files changed, 534 insertions(+), 175 deletions(-)
Fusion-Task-Id: FN-8502
Fusion-Task-Lineage: 0205187c-7e5b-45f8-a71d-fcfd9fb01e65
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 18:46:46 -07:00
gsxdsm
227281dc32
FN-8503: preserve unbounded Code Review retries
...
Keep Code Review remediation retry policies accurate across graph execution and recovery.
- Preserve unlimited retry presentation when Code Review has no configured cap
- Enforce finite Code Review caps during failed-step recovery
- Validate non-negative revision settings and document the active retry policy
Files changed:
.../fn-8503-unbounded-code-review-retries.md | 7 ++
docs/workflow-steps.md | 2 +-
.../core/src/__tests__/builtin-workflows.test.ts | 8 +-
packages/core/src/builtin-workflow-settings.ts | 4 +
.../workflow-graph-optional-step-fix.test.ts | 135 +++++++++++++++++++++
packages/engine/src/executor.ts | 51 ++++++--
6 files changed, 193 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-8503
Fusion-Task-Lineage: 7bd555d1-23e5-42ea-b6f5-0b9fe4da7f94
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 18:32:36 -07:00
gsxdsm
f120e6c879
FN-8506: run static checks in verify:fast
...
Run canonical pretest validators before test-free verification work.
- Derive read-only static check steps from the root pretest script.
- Test fail-fast static-check planning and execution.
- Document the expanded verify:fast gate and correct changeset metadata.
Files changed:
.changeset/mobile-board-pointercancel-settle.md | 2 +-
docs/testing.md | 5 +-
scripts/__tests__/verify-fast.test.mjs | 105 ++++++++++++++++++++++--
scripts/verify-fast.mjs | 86 ++++++++++++++++---
4 files changed, 174 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-8506
Fusion-Task-Lineage: 87f74fda-1fd0-4e08-9bfe-51e0c4c9a31d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 18:26:33 -07:00
gsxdsm
da616e1cf9
FN-8498: add Quick Add Start menu
...
Add gesture-only Quick Add Start promotion for eligible hold-based workflows.
- Open a Start menu with right-click or touch/pen long-press while preserving ordinary Save and Enter behavior.
- Validate and snapshot workflow routing before creating, then move matching tasks through host callbacks.
- Cover workflow guards, promotion outcomes, and Board/List callback wiring.
Files changed: .changeset/fn-8498-quick-add-start-menu.md | 7 ++
docs/dashboard-guide.md | 4 +
packages/dashboard/app/components/Column.tsx | 1 +
packages/dashboard/app/components/ListView.tsx | 1 +
.../dashboard/app/components/QuickEntryBox.css | 30 +++++
.../dashboard/app/components/QuickEntryBox.tsx | 115 ++++++++++++++++-
.../app/components/__tests__/Column.test.tsx | 10 +-
.../app/components/__tests__/ListView.test.tsx | 12 ++
.../components/__tests__/QuickEntryBox.test.tsx | 137 +++++++++++++++++++++
.../app/utils/__tests__/quickAddStart.test.ts | 38 ++++++
packages/dashboard/app/utils/quickAddStart.ts | 51 ++++++++
11 files changed, 400 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-8498
Fusion-Task-Lineage: 30d8e7d4-59f1-4c4f-9224-1a9d8c27141b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 16:31:24 -07:00
gsxdsm
9002fca9de
FN-8497: reduce merge gate wall time
...
Keep merge-gate coverage focused while running its independent test lanes concurrently.
- Limit PostgreSQL gate coverage to lifecycle and transactional-handoff canaries.
- Run engine and PostgreSQL gate lanes concurrently while preserving failure propagation.
- Enforce canary coverage policy and refresh velocity documentation and history.
Files changed:
docs/test-velocity-baseline.md | 16 +--
docs/testing.md | 5 +-
package.json | 2 +-
packages/core/package.json | 2 +-
.../__tests__/engine-vitest-gate-policy.test.mjs | 79 +++++++++++++-
scripts/test-velocity-history.json | 115 +++++++++++++++++++++
6 files changed, 204 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-8497
Fusion-Task-Lineage: 8777959c-6d8c-4686-a975-d91af2c169ea
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 15:47:24 -07:00
gsxdsm
3cd023fa43
FN-8491: add declarative plugin MCP server registrations
...
Enable plugins to declare per-project MCP server registrations.
- Add plugin MCP server contribution types, loading, and resolution across core and engine runtimes.
- Expose resolved plugin registrations through project configuration APIs and MCP settings UI.
- Document the declarative contribution API and add release metadata and regression coverage.
Files changed:
.changeset/plugin-mcp-servers.md | 7 ++
docs/PLUGIN_AUTHORING.md | 17 +++++
docs/mcp.md | 4 ++
docs/settings-reference.md | 4 ++
packages/core/src/__tests__/mcp-config.test.ts | 33 +++++++++
.../__tests__/plugin-contribution-types.test.ts | 16 +++++
.../__tests__/plugin-loader-single-load.test.ts | 23 +++++++
packages/core/src/index.gate.ts | 3 +
packages/core/src/index.ts | 3 +
packages/core/src/mcp-config.ts | 37 ++++++++--
packages/core/src/plugin-loader.ts | 24 +++++++
packages/core/src/plugin-mcp-servers.ts | 78 ++++++++++++++++++++++
packages/core/src/plugin-types.ts | 15 ++++-
packages/core/src/types.ts | 2 +-
.../__tests__/SettingsModal.mcp.test.tsx | 34 +++++++++-
.../settings/sections/McpServersCard.tsx | 52 ++++++++++-----
.../settings/sections/ProjectMcpSection.tsx | 31 ++++++++-
.../register-config-mcp-pi-settings-routes.test.ts | 18 ++++-
packages/dashboard/src/routes/context.ts | 71 +++++++++++++++++++-
.../register-config-mcp-pi-settings-routes.ts | 30 ++++++++-
.../engine/src/__tests__/mcp-resolution.test.ts | 20 ++++++
packages/engine/src/mcp-resolution.ts | 15 ++++-
packages/engine/src/plugin-runner.ts | 38 +++++++++++
packages/engine/src/runtimes/in-process-runtime.ts | 23 +++++++
packages/plugin-sdk/src/index.ts | 1 +
25 files changed, 563 insertions(+), 36 deletions(-)
Fusion-Task-Id: FN-8491
Fusion-Task-Lineage: be7e22fa-5776-4b3d-9fd1-a873799e6427
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 15:25:20 -07:00
gsxdsm
875d057d16
FN-8495: refresh W29 test velocity baseline
...
Refresh the weekly test velocity publication with the latest measurements.
- Record updated gate, boot smoke, and changed-only test timings.
- Append the W29 velocity history entry and update the published summary.
- Point testing guidance to the canonical weekly velocity workflow.
Files changed:
docs/test-velocity-baseline.md | 16 +++---
docs/testing.md | 10 +---
scripts/test-velocity-history.json | 115 +++++++++++++++++++++++++++++++++++++
3 files changed, 124 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-8495
Fusion-Task-Lineage: db432471-13a2-41b1-a951-f735c96456e9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 15:14:34 -07:00
gsxdsm
53e3063e9f
FN-8490: load skills for foreach step-execute sessions
...
Honor skill-executor configuration for implementation sessions created by foreach templates.
- Propagate validated step-execute skill names through workflow seam context.
- Load namespaced and bare skills with configured discovery paths for pinned step sessions.
- Add regression coverage, workflow documentation, and a minor changeset.
Files changed:
.changeset/fn-8490-step-execute-skill.md | 7 ++
docs/workflow-steps.md | 4 +-
.../__tests__/step-execute-skill-loading.test.ts | 128 +++++++++++++++++++++
packages/engine/src/executor.ts | 62 +++++++++-
packages/engine/src/workflow-node-handlers.ts | 21 ++++
5 files changed, 219 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-8490
Fusion-Task-Lineage: aa1ff02d-3139-45f2-8853-f53c0aef0f2f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-22 15:07:59 -07:00