gsxdsm
feceedbf7e
FN-5803: normalize streamed sentence spacing across message boundaries
...
Ensure streamed agent text preserves sentence-boundary spacing even when providers split output across message boundaries.
- add stateful streaming delta normalizer that tracks prior text/thinking tail when partial blocks reset
- update executor and PI session subscriptions to use per-session normalizer instances for text_delta and thinking_delta events
- expand streaming-delta tests to cover cross-message/tool-call boundary spacing regressions
- add task notes documenting cross-message spacing refinement
Files changed:
.../fn-5803-streaming-cross-message-space.md | 5 ++
.../engine/src/__tests__/streaming-delta.test.ts | 86 +++++++++++++++++++++-
packages/engine/src/executor.ts | 13 ++--
packages/engine/src/pi.ts | 24 +++---
packages/engine/src/streaming-delta.ts | 44 ++++++++++-
5 files changed, 155 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-5803
Fusion-Task-Lineage: 8f88d54c-bbc0-44dd-99fc-c69738ce0ca8
2026-05-31 23:24:53 -07:00
gsxdsm
944c03d495
FN-5797: fix usage indicator show hidden button behavior
...
Prevent hidden-window controls in UsageIndicator from acting as implicit form submitters.
- Set both window-level Hide and provider-level Show hidden buttons to `type="button"`.
- Preserve hidden-window reveal behavior without submitting parent forms.
- Add a regression test covering hide/show persistence and rerender re-sync behavior.
Files changed:
.changeset/fn-5797-show-hidden-fix.md | 8 +++++
packages/dashboard/app/components/UsageIndicator.tsx | 2 ++
packages/dashboard/app/components/__tests__/UsageIndicator.test.tsx | 40 ++++++++++++++++++++++
3 files changed, 50 insertions(+)
Fusion-Task-Id: FN-5797
Fusion-Task-Lineage: 9072bb68-b86b-4ec7-8b1f-0e6b706cbb5f
2026-05-31 21:08:41 -07:00
gsxdsm
77a109958b
FN-5796: make plugin same-state transitions idempotent
...
Prevent duplicate-state plugin updates from throwing invalid transition errors.
- treat updatePluginState calls where next state equals current state as idempotent no-ops
- allow same-state updates with an explicit error payload to persist error changes and emit plugin:updated
- add regression tests for same-state no-op behavior, no extra stateChanged event emission, and error payload updates
- add a patch changeset documenting the Dependency Graph plugin fix
Files changed:
.changeset/fn-5796-plugin-state-noop.md | 7 +++++
packages/core/src/__tests__/plugin-store.test.ts | 34 ++++++++++++++++++++++++
packages/core/src/plugin-store.ts | 15 +++++++++++
3 files changed, 56 insertions(+)
Fusion-Task-Id: FN-5796
Fusion-Task-Lineage: 0da1d035-383f-456c-a212-0903dc029874
2026-05-31 20:50:09 -07:00
gsxdsm
a8c920daf9
chore(release): v0.39.0
...
Version bump via changesets.
2026-05-31 20:05:32 -07:00
gsxdsm
5930c18b4d
FN-5795: send ntfy notification when agents create tasks
...
Add agent task-created ntfy notifications with configurable settings and coverage.
- add notification plumbing to emit a dedicated event when an agent creates a task
- extend ntfy provider/settings typing and dashboard settings coverage for the new event toggle
- add regression tests for notification service, notifier integration, and ntfy provider behavior
- add a changeset and documentation updates describing the new notification capability
Files changed:
.changeset/fn-5795-task-created-notification.md | 9 +++
docs/architecture.md | 4 +-
docs/settings-reference.md | 4 +-
docs/storage.md | 2 +-
packages/core/src/types.ts | 4 +-
.../dashboard/app/components/SettingsModal.tsx | 1 +
.../components/__tests__/SettingsModal.test.tsx | 27 +++++++-
.../src/__tests__/notification-service.test.ts | 71 ++++++++++++++++++++++
packages/engine/src/__tests__/notifier.test.ts | 5 ++
.../engine/src/__tests__/ntfy-provider.test.ts | 32 ++++++++++
.../src/notification/notification-service.ts | 53 +++++++++++++++-
packages/engine/src/notification/ntfy-provider.ts | 21 +++++--
12 files changed, 220 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-5795
Fusion-Task-Lineage: 4cfa3b46-8e9c-451e-ab2d-b7d5c9bf5968
2026-05-31 19:59:32 -07:00
gsxdsm
fa428a487b
FN-5794: run worktree init for fresh merge workspaces
...
Run merge worktree initialization automatically when a merge workspace is newly created.
- detect when integration worktree creation is fresh and invoke the configured init command
- preserve existing behavior for already-initialized worktrees while improving setup reliability
- add integration tests covering init command execution paths for merge worktree setup
Files changed:
.changeset/fn-5794-merge-worktree-init.md | 5 +++
.../__tests__/merger-integration-worktree.test.ts | 16 +++++++++
packages/engine/src/merger.ts | 39 +++++++++++++++++++++-
3 files changed, 59 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-5794
Fusion-Task-Lineage: f368099f-a179-466e-b994-2a503167112c
2026-05-31 17:52:57 -07:00
gsxdsm
ffadb0c77f
FN-5792: fix GitHub auto-close reconciliation for soft-deleted tasks
...
Ensure GitHub issue auto-close reconciliation still processes soft-deleted and archived tracked tasks after restart.
- Add pagination-aware reconcile scanning in core store with combined deleted+archived coverage and hasMore metadata.
- Update dashboard GitHub tracking reconciler and route handling to consume paged reconcile batches safely.
- Expand reconcile tests (core + dashboard) with restart/periodic sweep and source-issue scenarios to lock behavior.
- Add release changeset and dashboard guide note for the reconciliation sweep behavior.
Files changed:
.changeset/fn-5792-github-tracking-sweep.md | 5 +
docs/dashboard-guide.md | 1 +
.../store-github-tracking-reconcile.test.ts | 45 ++++++++-
packages/core/src/store.ts | 32 ++++--
.../github-source-issue-reconciler.test.ts | 22 ++--
...ithub-tracking-periodic-reconcile-sweep.test.ts | 90 +++++++++++++++++
.../__tests__/github-tracking-reconciler.test.ts | 111 +++++----------------
.../dashboard/src/github-tracking-reconciler.ts | 19 ++--
.../dashboard/src/routes/register-git-github.ts | 57 +++++++++--
9 files changed, 257 insertions(+), 125 deletions(-)
Fusion-Task-Id: FN-5792
Fusion-Task-Lineage: 259f07cf-3470-47c7-b47a-86d212d44d52
2026-05-31 17:23:26 -07:00
gsxdsm
716f3964c5
FN-5790: harden room chat send handling and optimistic reconciliation
...
Prevent duplicate room sends and avoid restoring composer text when ambiguous failures still delivered the message.
- guard room composer sends with an in-flight ref to prevent double-dispatch
- treat ambiguous post-send refresh failures as delivered when recovery confirms the user message
- centralize optimistic/SSE user-message reconciliation to replace temp messages instead of duplicating them
- add and update chat room hook/component tests that cover double-send prevention and delivered-on-ambiguous-failure behavior
- add a patch changeset for @runfusion/fusion documenting the room chat reliability fix
Files changed:
.changeset/few-dingos-smile.md | 5 ++
packages/dashboard/app/components/ChatView.tsx | 8 +++
.../components/__tests__/ChatView.rooms.test.tsx | 27 ++++++++++
.../app/hooks/__tests__/useChatRooms.test.ts | 48 +++++++++++++++--
packages/dashboard/app/hooks/useChatRooms.ts | 62 +++++++++++++++-------
5 files changed, 126 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-5790
Fusion-Task-Lineage: a1ac5e4f-4cc2-4cf9-8bc1-42587d0d1d1b
2026-05-31 16:57:42 -07:00
gsxdsm
2140ab2dcf
FN-5789: normalize missing sentence spaces in streamed deltas
...
Repair provider-agnostic streaming deltas so sentence boundaries keep expected spacing in chat and agent logs.
- add shared streaming-delta normalization helpers for text/thinking events
- apply normalization at executor and PI message_update chokepoints before emitting deltas
- add focused engine tests covering punctuation-boundary repairs and no-op cases
- add a patch changeset for @runfusion/fusion describing the fix
Files changed:
.changeset/fn-5789-streaming-space-repair.md | 5 ++
.../engine/src/__tests__/streaming-delta.test.ts | 84 ++++++++++++++++++++
packages/engine/src/executor.ts | 11 ++-
packages/engine/src/pi.ts | 13 +++-
packages/engine/src/streaming-delta.ts | 91 ++++++++++++++++++++++
5 files changed, 197 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-5789
Fusion-Task-Lineage: e60ed2ae-c006-42f9-9ab0-f4e79560fb66
2026-05-31 16:48:28 -07:00
gsxdsm
7b70e7fb72
FN-5788: add group promotion gate to merge coordinator
...
Add lifecycle wiring so branch-group promotion respects group-level auto-merge gating.
- Extend merge coordinator/merger flow to apply group promotion precedence and pause/override reasons.
- Hook the group-promotion coordinator into engine lifecycle startup.
- Add reliability and coordinator coverage for branch group promotion gating behavior.
- Add release changeset and update architecture/AGENTS backstop notes.
Files changed:
.changeset/fn-5788-branch-group-promotion-gate.md | 5 +
AGENTS.md | 1 +
docs/architecture.md | 3 +-
.../src/__tests__/group-merge-coordinator.test.ts | 95 ++++++++++++++-
.../branch-group-promotion-gate.test.ts | 129 +++++++++++++++++++++
packages/engine/src/group-merge-coordinator.ts | 46 +++++---
packages/engine/src/index.ts | 2 +
packages/engine/src/merger.ts | 34 +++---
8 files changed, 283 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-5788
Fusion-Task-Lineage: 5930f662-908e-4cf0-a0d4-68b2f4360074
2026-05-31 15:59:59 -07:00
gsxdsm
06d84905ba
FN-5783: enforce branch-group autoMerge precedence for shared promotions
...
Honor group-level autoMerge precedence when promoting shared branch groups.
- add core/store helpers to preserve branch-group autoMerge overrides and resolve effective precedence against task/project settings
- gate branch-group promotion eligibility in engine merge coordination and emit promotion-gated audit metadata
- update dashboard planning/subtask flows for shared mission triage routing and add reliability/unit coverage
- include docs and changeset updates for branch-group autoMerge precedence behavior
Files changed:
.../fn-5783-branch-group-automerge-precedence.md | 5 +
AGENTS.md | 1 +
docs/settings-reference.md | 2 +-
docs/workflow-steps.md | 2 +
.../core/src/__tests__/branch-group-store.test.ts | 18 ++++
packages/core/src/__tests__/task-merge.test.ts | 18 ++++
packages/core/src/index.ts | 1 +
packages/core/src/mission-store.ts | 13 +++
packages/core/src/store.ts | 17 ++++
packages/core/src/task-merge.ts | 8 ++
.../dashboard/src/__tests__/mission-e2e.test.ts | 98 ++++++++++++++++--
.../src/__tests__/routes-planning.test.ts | 109 ++++++++++++++++++++-
packages/dashboard/src/planning.ts | 1 +
.../src/routes/register-planning-subtask-routes.ts | 28 ++++++
packages/dashboard/src/subtask-breakdown.ts | 1 +
.../branch-group-automerge-precedence.test.ts | 102 +++++++++++++++++++
packages/engine/src/group-merge-coordinator.ts | 31 +++++-
packages/engine/src/merger.ts | 30 ++++--
18 files changed, 466 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-5783
Fusion-Task-Lineage: 74327984-b14f-445c-81cd-5295ee562382
2026-05-31 15:17:11 -07:00
gsxdsm
e2101ea721
FN-5785: add group-level pull request support for branch_groups
...
Add a single group-level pull request path for branch_groups in task lifecycle workflows.
- add CLI task lifecycle logic to create one pull request per branch group
- update task lifecycle tests to cover grouped pull request behavior and edge cases
- document the pull/merge dashboard behavior update
- add a changeset for @runfusion/fusion patch release
Files changed:
.changeset/fn-5785-group-pr.md | 7 +
docs/dashboard-guide.md | 1 +
.../src/commands/__tests__/task-lifecycle.test.ts | 294 ++++++++++++++++++++-
packages/cli/src/commands/task-lifecycle.ts | 156 ++++++++++-
4 files changed, 443 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-5785
Fusion-Task-Lineage: 3100dedd-5b41-4cde-a56c-291410563568
2026-05-31 13:50:23 -07:00
gsxdsm
0c425788cb
FN-5782: wire branch groups into merge routing
...
Connect branch_group metadata through planning and merge execution for grouped integration branches.
- propagate `branchGroup` and `branchGroupName` through core store types, merge metadata, and CLI task lifecycle APIs
- add merge coordination that computes branch-group plans and routes grouped tasks via `group-merge-coordinator`
- extend finalize-plan, merger, and reliability tests to cover grouped merge routing and integration behavior
- document the architecture update and add a patch changeset for `@runfusion/fusion`
Files changed:
.changeset/fn-5782-branch-group-merge.md | 7 +
docs/architecture.md | 2 +
packages/cli/src/commands/__tests__/task-lifecycle.test.ts | 64 ++++++++-
packages/cli/src/commands/task-lifecycle.ts | 4 +
packages/core/src/__tests__/branch-group-store.test.ts | 20 +++
packages/core/src/__tests__/task-merge.test.ts | 64 +++++++++
packages/core/src/store.ts | 22 ++-
packages/core/src/task-merge.ts | 26 +++-
packages/core/src/types.ts | 2 +-
packages/engine/src/__tests__/experiment-finalize-plan.test.ts | 33 ++++-
packages/engine/src/__tests__/group-merge-coordinator.test.ts | 62 +++++++++
packages/engine/src/__tests__/reliability-interactions/branch-group-merge-routing.test.ts | 153 +++++++++++++++++++++
packages/engine/src/experiment/finalize-plan.ts | 62 +++++++--
packages/engine/src/group-merge-coordinator.ts | 51 +++++++
packages/engine/src/index.ts | 4 +
packages/engine/src/merger.ts | 47 ++++++-
16 files changed, 601 insertions(+), 22 deletions(-)
Fusion-Task-Id: FN-5782
Fusion-Task-Lineage: 0a70cfaa-2379-4955-b295-64de1f3093c8
2026-05-31 13:50:23 -07:00
gsxdsm
f1aba5b534
Merge pull request #1226 from plarson/fix/dirty-integration-merge-block
...
fix(engine): block dirty integration merge landings
2026-05-31 13:49:58 -07:00
Phil Larson
3dee395d67
fix(engine): block dirty integration merge landings
...
Refuse AI merge landing on a checked-out dirty integration worktree by default. This prevents Fusion from stashing/restoring unrelated project-root edits into main and then marking tasks done against contaminated state.
Fusion-Task-Id: FN-5780
2026-05-31 13:12:13 -07:00
gsxdsm
b6b902485e
FN-5779: restore Star on GitHub header button
...
Restore the Settings header GitHub star CTA while removing its configurability.
- keep the Star on GitHub link in Settings header with refreshed split-pill styling and alignment
- reintroduce GitHub star count fetching/caching and click-tracking helpers used by the header control
- update Settings modal header-action test expectations to include the GitHub star link
- revise the changeset note to reflect removing only the showGitHubStarButton setting/toggle
Files changed:
.changeset/FN-5777-removal.md | 4 +-
packages/dashboard/app/components/SettingsModal.css | 51 ++++++++-
packages/dashboard/app/components/SettingsModal.tsx | 118 ++++++++++++++++++++-
packages/dashboard/app/components/__tests__/SettingsModal.test.tsx | 4 +-
4 files changed, 170 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-5779
Fusion-Task-Lineage: f485a062-6110-4a79-b42d-70710e3ce5da
2026-05-31 11:55:11 -07:00
gsxdsm
793da2c749
FN-5780: inherit source GitHub tracking when refining tasks
...
Preserve GitHub linking intent when creating refinement tasks from completed work.
- Set refinement `githubTracking` from the source task state during `refineTask`
- Opt out refinements when the source task is unlinked or explicitly disabled
- Carry forward `enabled` and optional `repoOverride` for linked sources without copying source issue metadata
- Add store-level tests covering unlinked, disabled, linked, and issue-only source tracking states
- Document refinement GitHub tracking inheritance behavior in task-management docs
- Add a patch changeset for `@runfusion/fusion`
Files changed:
.changeset/fn-5780-refine-github-tracking.md | 5 ++
docs/task-management.md | 1 +
packages/core/src/__tests__/store-ops.test.ts | 71 +++++++++++++++++++++++++++
packages/core/src/store.ts | 12 +++++
4 files changed, 89 insertions(+)
Fusion-Task-Id: FN-5780
Fusion-Task-Lineage: 88c1ce01-6efd-48c1-bbdd-704a821055d7
2026-05-31 11:55:11 -07:00
gsxdsm
9f29935525
FN-5778: throttle OAuth expiry notifications per provider
...
Limit repeated oauth-token-expired alerts by enforcing a per-provider minimum notification interval.
- add a 12-hour default min notify interval to OAuthExpiryMonitor and track last notification time by provider
- skip dispatch when a provider was already notified within the configured window, even if expiry timestamps change
- clear per-provider notification timestamps when no OAuth providers are configured
- add regression coverage for 12-hour throttling and changed-expiry throttling behavior
- add a patch changeset for @runfusion/fusion documenting the notification throttle
Files changed:
.changeset/fn-5778-oauth-notify-throttle.md | 5 +++
packages/engine/src/notification/__tests__/oauth-expiry-monitor.test.ts | 40 ++++++++++++++++++++++
packages/engine/src/notification/oauth-expiry-monitor.ts | 15 ++++++++
3 files changed, 60 insertions(+)
Fusion-Task-Id: FN-5778
Fusion-Task-Lineage: a9741101-e8da-4dae-ac7f-817e564b4f23
2026-05-31 11:55:11 -07:00
gsxdsm
62bc1e4458
FN-5777: remove GitHub star setting and button
...
Remove the dashboard setting and UI entry points for the GitHub star prompt.
- Remove the Star on GitHub option from settings state types and schema definitions.
- Delete SettingsModal UI, handlers, and styles tied to the star button and related layout.
- Update SettingsModal tests and add a changeset documenting the patch release impact.
Files changed:
.changeset/FN-5777-removal.md | 7 ++
packages/core/src/settings-schema.ts | 1 -
packages/core/src/types.ts | 4 -
.../dashboard/app/components/SettingsModal.css | 51 +-------
.../dashboard/app/components/SettingsModal.tsx | 137 +--------------------
.../components/__tests__/SettingsModal.test.tsx | 5 +-
6 files changed, 13 insertions(+), 192 deletions(-)
Fusion-Task-Id: FN-5777
Fusion-Task-Lineage: 16367ba6-ad22-4ba0-a033-005ccc420c19
2026-05-31 11:55:10 -07:00
gsxdsm
69f22c0140
Merge pull request #1221 from plarson/fix/incomplete-stuck-loop-parking
...
fix(engine): requeue incomplete stuck-loop exhaustion
2026-05-31 11:54:47 -07:00
gsxdsm
93e8a5f78a
FN-5775: persist AI merge agent output in merger logs
...
Ensure AI merger runs persist agent output signals so merge activity is visible in task logs.
- Persist merger agent text, thinking, tool start, and tool result output via AgentLogger in AI merge/review sessions.
- Add regression coverage validating persisted merger agent logs and prompt/commit guidance behavior.
- Add a patch changeset for @runfusion/fusion describing AI merge log persistence.
Files changed:
.changeset/fn-5775-ai-merge-logs.md | 5 ++
packages/engine/src/__tests__/merger-ai.test.ts | 62 +++++++++++++++++++++++++
packages/engine/src/merger-ai.ts | 40 +++++++++++++++-
3 files changed, 105 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-5775
Fusion-Task-Lineage: 7e1b803f-135a-412e-81d9-bad0aa655855
2026-05-31 08:50:23 -07:00
Phil Larson
5861884456
fix(engine): requeue incomplete stuck-loop exhaustion
2026-05-31 08:35:36 -07:00
gsxdsm
b154844286
FN-5772: re-anchor nested task worktree paths
...
Fix executor worktree invariant handling by re-anchoring nested task worktree paths to the actual git top-level.
- add nested worktree root detection that only re-anchors when the top-level is a registered worktree inside the configured worktrees directory
- update executor liveness gating and verifyWorktreeInvariants to persist re-anchored task.worktree values and retry checks safely
- emit a new run-audit git mutation (worktree:reanchored) and add reliability tests/docs coverage plus a patch changeset
Files changed:
.changeset/fn-5772-worktree-reanchor.md | 7 +++
docs/architecture.md | 4 +-
packages/engine/src/__tests__/reliability-interactions/executor-liveness-gate.test.ts | 33 ++++++++++
packages/engine/src/__tests__/verify-worktree-invariants-missing.test.ts | 62 +++++++++++++++++-
packages/engine/src/__tests__/worktree-reanchor-nested-root.test.ts | 73 ++++++++++++++++++++++
packages/engine/src/executor.ts | 54 ++++++++++++++--
packages/engine/src/run-audit.ts | 1 +
packages/engine/src/worktree-pool.ts | 63 +++++++++++++++++++
8 files changed, 290 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-5772
Fusion-Task-Lineage: 475de161-7bc1-4359-bb76-20c4c07196d9
2026-05-31 08:32:01 -07:00
gsxdsm
5b4eecb5d4
FN-5768: add dual-observe workflow parity instrumentation
...
Add default-off workflow interpreter dual-observe parity instrumentation across core and engine.
- add workflow parity comparison primitives and exports in @fusion/core
- add engine parity observer seam with experimental flag and public exports
- add regression coverage for parity contracts and dual-observe reliability behavior
- document the dual-observe parity mode, events, and contract in workflow docs
- add a patch changeset for @runfusion/fusion release notes
Files changed:
.changeset/fn-5768-workflow-parity-observer.md | 9 +
docs/workflow-steps.md | 18 ++
.../core/src/__tests__/workflow-parity.test.ts | 143 ++++++++++++++
packages/core/src/index.ts | 18 ++
packages/core/src/workflow-parity.ts | 205 +++++++++++++++++++++
.../workflow-interpreter-dual-observe.test.ts | 144 +++++++++++++++
packages/engine/src/index.ts | 7 +
packages/engine/src/workflow-parity-observer.ts | 116 ++++++++++++
8 files changed, 660 insertions(+)
Fusion-Task-Id: FN-5768
Fusion-Task-Lineage: fb4f8111-f48d-482c-b1d9-9106c43c829a
2026-05-31 08:32:01 -07:00
gsxdsm
ba81d1f0ac
FN-5767: wire workflow graph executor to legacy seams
...
Complete Phase 3 interpreter parity by routing workflow graph execution through legacy seam handlers.
- Simplify workflow IR schema and built-in coding workflow to seam-based v1 nodes/edges.
- Add workflow node handler layer with default legacy seam adapters and dedicated handler/parity tests.
- Update engine exports/executor behavior for conditional traversal, retries, outcome context, and parity assertions.
- Refresh core workflow IR tests/coverage for the new shape (including seam-stage expectations without triage) and remove obsolete schema fixture test.
Files changed:
.changeset/fn-5767-interpreter-parity.md | 5 +
.github/actions/setup-node-pnpm/action.yml | 41 +---
docs/workflow-steps.md | 17 ++
.../__tests__/builtin-coding-workflow-ir.test.ts | 25 +--
packages/core/src/__tests__/workflow-ir.test.ts | 70 ------
packages/core/src/builtin-coding-workflow-ir.ts | 71 ++----
packages/core/src/index.ts | 31 +--
packages/core/src/workflow-ir-types.ts | 91 +-------
packages/core/src/workflow-ir.ts | 246 ++-------------------
.../workflow-graph-executor-handlers.test.ts | 201 +++++++++++++++++
.../workflow-graph-executor-parity.test.ts | 126 ++++++++---
.../src/__tests__/workflow-node-handlers.test.ts | 50 +++++
packages/engine/src/index.ts | 16 +-
packages/engine/src/workflow-graph-executor.ts | 205 ++++++++++++-----
packages/engine/src/workflow-node-handlers.ts | 56 +++++
15 files changed, 661 insertions(+), 590 deletions(-)
Fusion-Task-Id: FN-5767
Fusion-Task-Lineage: 0c68586e-2709-4521-a2ce-938ba1006ae0
2026-05-31 08:32:01 -07:00
gsxdsm
1edbb54fce
FN-5766: add flagged-off workflow graph executor scaffold
...
Add the Phase 2 workflow-graph interpreter scaffold and builtin coding IR wiring while keeping execution behavior unchanged by default.
- add BUILTIN_CODING_WORKFLOW_IR and builder in @fusion/core with coverage tests
- export new coding workflow IR APIs from core index
- add WorkflowGraphExecutor scaffold in @fusion/engine plus parity-focused test coverage
- document the flagged-off interpreter scaffold, parity gate, and v1 IR gap reconciliation in workflow docs
- include a changeset for published @runfusion/fusion
Files changed:
.../fn-5766-workflow-graph-executor-scaffold.md | 11 +++
docs/workflow-steps.md | 27 +++++++
.../__tests__/builtin-coding-workflow-ir.test.ts | 34 +++++++++
packages/core/src/builtin-coding-workflow-ir.ts | 60 ++++++++++++++++
packages/core/src/index.ts | 4 ++
.../workflow-graph-executor-parity.test.ts | 32 +++++++++
packages/engine/src/index.ts | 7 ++
packages/engine/src/workflow-graph-executor.ts | 82 ++++++++++++++++++++++
8 files changed, 257 insertions(+)
Fusion-Task-Id: FN-5766
Fusion-Task-Lineage: 4bbef713-a415-4d42-a20b-9ae4f3235419
2026-05-31 08:32:01 -07:00
gsxdsm
3d22a98cf2
FN-5761: add workflow IR parsing and serialization contract
...
Implement the v1 workflow IR contract in core with validation, serialization, and coverage.
- add workflow IR type definitions, parser, serializer, and structured validation errors in @fusion/core
- export workflow IR APIs from core index and add comprehensive unit tests for valid/invalid shapes and metadata parsing
- document the workflow IR contract in workflow step docs and include release tracking via changesets, including plugin-sdk DOM lib prerequisite for Windows compilation
Files changed:
.changeset/fn-5761-workflow-ir-contract.md | 5 +
.changeset/windows-release-plugin-sdk-dom-lib.md | 5 +
docs/workflow-steps.md | 24 +++
packages/core/src/__tests__/workflow-ir.test.ts | 70 +++++++
packages/core/src/index.ts | 15 ++
packages/core/src/workflow-ir-types.ts | 103 ++++++++++
packages/core/src/workflow-ir.ts | 244 +++++++++++++++++++++++
packages/plugin-sdk/tsconfig.json | 7 +-
8 files changed, 472 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-5761
Fusion-Task-Lineage: 2cd5491e-89c8-418c-a913-76d0c13b466c
2026-05-31 08:32:01 -07:00
gsxdsm
acad46cc10
FN-5764: expose mission assertion backfill through API and CLI
...
Expose mission assertion backfill controls and run paths across engine, API, and CLI surfaces.
- add mission assertion backfill gating classification and reliability coverage for assertion-linked validation recovery
- add dashboard mission routes plus legacy API coverage and e2e checks for running assertion backfill
- expose new extension tool support and update Fusion skill docs/capability references
- add a changeset for @runfusion/fusion and refresh mission documentation
Files changed:
.changeset/fn-5764-mission-backfill-assertions.md | 9 ++
docs/missions-completion-contract.md | 7 +-
docs/missions.md | 7 +-
packages/cli/skill/fusion/SKILL.md | 2 +-
.../cli/skill/fusion/references/extension-tools.md | 9 ++
.../skill/fusion/references/fusion-capabilities.md | 1 +
packages/cli/src/__tests__/extension.test.ts | 41 +++++++
packages/cli/src/extension.ts | 43 +++++++
.../dashboard/app/__tests__/api-missions.test.ts | 44 +++++++
packages/dashboard/app/api/legacy.ts | 34 ++++++
.../dashboard/src/__tests__/mission-e2e.test.ts | 127 +++++++++++++++++++++
packages/dashboard/src/mission-routes.ts | 29 +++++
.../mission-validation-trigger-gap.test.ts | 66 +++++++++++
.../workflow-step-readonly-allowlist.test.ts | 1 +
packages/engine/src/gating-classifications.ts | 1 +
15 files changed, 418 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-5764
Fusion-Task-Lineage: b16123c2-7cfe-4b17-a899-4e30044a7a49
2026-05-31 08:32:01 -07:00
gsxdsm
0ffe7f0604
FN-5762: add mission hierarchy delete tools with linked-task guards
...
Add mission delete tooling across core, dashboard routes, and CLI extension surfaces.
- Add `fn_feature_delete`, `fn_slice_delete`, and `fn_milestone_delete` tools to the CLI extension with `force` override support.
- Enforce live-task linkage guards for feature/slice/milestone deletes in mission store logic and expose conflict behavior through mission routes.
- Extend coverage and docs for delete behavior, allowlist/gating metadata, and published Fusion skill/tool references.
Files changed:
.changeset/fn-5762-feature-delete.md | 7 +
docs/missions.md | 15 +++
packages/cli/skill/fusion/SKILL.md | 2 +-
.../cli/skill/fusion/references/extension-tools.md | 27 ++++
.../skill/fusion/references/fusion-capabilities.md | 3 +
packages/cli/src/__tests__/extension.test.ts | 34 +++++
packages/cli/src/extension.ts | 106 +++++++++++++++
packages/core/src/__tests__/mission-store.test.ts | 146 ++++++++++++++++++++-
packages/core/src/mission-store.ts | 98 ++++++++++++--
.../dashboard/src/__tests__/mission-e2e.test.ts | 62 +++++++--
packages/dashboard/src/mission-routes.ts | 42 +++++-
.../workflow-step-readonly-allowlist.test.ts | 3 +
packages/engine/src/gating-classifications.ts | 3 +
13 files changed, 514 insertions(+), 34 deletions(-)
Fusion-Task-Id: FN-5762
Fusion-Task-Lineage: 9c6eceff-dcb4-4a2b-90c6-59cb0228ca6d
2026-05-31 08:32:01 -07:00
gsxdsm
4b8650cac2
Merge pull request #1205 from plarson/fix/incomplete-stuck-loop-parking
...
fix: park incomplete stuck-loop exhaustions
2026-05-30 23:01:37 -07:00
gsxdsm
194dfa9387
FN-5758: add cited-goal audit aggregation and runtime route
...
Add end-to-end goal-citation audit trail plumbing across core, engine, CLI, and dashboard.
- extend goal citation extraction with aggregation logic and new core coverage
- expose cited-goal runtime data through dashboard routes with dedicated API tests
- wire goal-citation audit details into engine diagnostics and CLI extension audit expectations
- document the new audit behavior and publish a patch changeset for @runfusion/fusion
Files changed:
.changeset/fn-5758-goal-citation-audit.md | 9 +++
docs/dashboard-guide.md | 2 +
docs/diagnostics.md | 4 ++
.../__tests__/extension-goal-tools-audit.test.ts | 6 +-
packages/cli/src/extension.ts | 3 +
.../goal-citation-audit-aggregation.test.ts | 63 ++++++++++++++++++
packages/core/src/goal-citation-extractor.ts | 54 ++++++++++++++-
packages/core/src/index.ts | 1 +
.../src/__tests__/routes-run-cited-goals.test.ts | 77 ++++++++++++++++++++++
packages/dashboard/src/routes.ts | 11 ++++
.../src/routes/register-agent-runtime-routes.ts | 49 ++++++++++++++
.../src/__tests__/goal-anchoring-audit.test.ts | 40 +++++++----
packages/engine/src/goal-anchoring-audit.ts | 4 ++
packages/engine/src/goal-injection-diagnostics.ts | 1 +
14 files changed, 308 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-5758
Fusion-Task-Lineage: b077c0b7-6ca4-489d-8c36-73d80a2afdb2
2026-05-30 22:53:24 -07:00
Phil Larson
ab38ee09e0
fix(engine): park incomplete stuck-loop exhaustions
2026-05-30 20:21:35 -07:00
gsxdsm
c0b749cee9
Merge pull request #1203 from plarson/fix/origin-main-contamination-integrated
...
fix: treat origin/main commits as integrated in contamination checks
2026-05-30 18:43:40 -07:00
gsxdsm
5396730033
FN-5755: harden mission validation recovery flow
...
Ensure mission feature assertions recover and validate consistently across startup and periodic maintenance.
- add FN-5755 changeset and AGENTS reliability backstop note
- document canonical zero-assertion auto-pass and assertion validation lifecycle updates in missions docs
- expand mission execution loop and reliability interaction tests for startup recovery, periodic replay, and idempotency
- wire self-healing maintenance to replay active mission validation recovery via runtime callback
Files changed:
.../fn-5755-mission-validation-end-to-end.md | 5 ++
AGENTS.md | 1 +
docs/missions-completion-contract.md | 15 ++--
docs/missions.md | 4 +-
.../src/__tests__/mission-execution-loop.test.ts | 88 +++++++++++++++++++++-
.../mission-validation-trigger-gap.test.ts | 42 ++++++++++-
packages/engine/src/runtimes/in-process-runtime.ts | 6 ++
packages/engine/src/self-healing.ts | 11 +++
8 files changed, 159 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-5755
Fusion-Task-Lineage: e54ac4dc-7b8c-4fc9-8cd6-18702708546f
2026-05-30 17:45:11 -07:00
gsxdsm
76e3cde532
Merge pull request #1202 from plarson/fix/skip-blocked-todo-reclaim
...
fix: skip blocked todo tasks during self-owned reclaim
2026-05-30 16:33:52 -07:00
gsxdsm
9488d66547
Merge pull request #1194 from plarson/feat/task-dependency-mutation
...
Add safe task dependency mutation
2026-05-30 16:33:13 -07:00
Phil Larson
c6b3b77832
fix: treat origin/main commits as integrated contamination base
2026-05-30 15:15:47 -07:00
gsxdsm
292bf07385
FN-5752: flush merger agent logs before disposing sessions
...
Ensure merger AI activity is persisted to task logs before sessions are torn down.
- Flush AgentLogger output in merger AI-session finally blocks for autostash conflict resolution, autostash hard-fail recovery, and rebase conflict resolution paths
- Guard flush/dispose cleanup with safe try/catch handling to avoid teardown-time logging loss
- Add a regression test asserting logger flush occurs before session disposal during AI rebase conflict resolution
- Export the rebase conflict resolver helper for targeted test coverage
- Add a patch changeset for @runfusion/fusion documenting the agent-log visibility fix
Files changed:
.changeset/fn-5752-merger-log-flush.md | 5 ++++
packages/engine/src/__tests__/merger-conflict-resolution.test.ts | 30 ++++++++++++++++++++++
packages/engine/src/merger.ts | 22 +++++++++++++++-
3 files changed, 56 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-5752
Fusion-Task-Lineage: 3c6023f0-cc9b-47e1-bfd4-69b40e011d84
2026-05-30 15:06:04 -07:00
gsxdsm
1594470144
FN-5738: make mission loop no-assertion auto-pass deterministic
...
Ensure mission validation loop advancement is deterministic when no assertions are linked and audit output is emitted once.
- update mission execution loop handling to auto-pass zero-assertion validations deterministically
- emit and guard validation_auto_passed_no_assertions audit behavior against duplicate recovery re-fire
- expand mission loop and reliability interaction tests for loop state, validator status, and replay safety
- refresh mission/architecture docs and add the FN-5738 changeset entry
Files changed:
.changeset/fn-5732a-loop-advance.md | 5 ++
AGENTS.md | 1 +
docs/architecture.md | 3 +-
docs/missions-completion-contract.md | 2 +-
docs/missions.md | 4 +-
.../src/__tests__/mission-execution-loop.test.ts | 27 ++++++++++-
.../mission-validation-trigger-gap.test.ts | 22 +++++++--
packages/engine/src/mission-execution-loop.ts | 54 +++++++++++++---------
8 files changed, 86 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-5738
Fusion-Task-Lineage: 141b73e3-fa49-468a-87b0-f36e091e716f
2026-05-30 15:04:26 -07:00
Phil Larson
a7347ad59e
fix: skip blocked todo tasks during self-owned reclaim
2026-05-30 14:50:22 -07:00
gsxdsm
20c1c3261e
FN-5741: persist merge-request handoff shadow contract
...
Introduce Phase 1 write-only persistence for merge-request handoff acceptance across core and engine paths.
- add persisted merge-request record types, schema/settings plumbing, and store write-path support
- update merger/executor/self-healing/run-audit flows to emit and consume the handoff-accepted shadow marker
- expand core/engine/roadmap tests and docs to cover the new merge-request shadow contract
- add a patch changeset for @runfusion/fusion for this bundled package update
Files changed:
.changeset/fn-5741-merge-request-shadow.md | 5 +
AGENTS.md | 1 +
docs/architecture.md | 2 +
docs/settings-reference.md | 1 +
packages/core/src/__tests__/db-migrate.test.ts | 12 +-
packages/core/src/__tests__/db.test.ts | 34 ++--
packages/core/src/__tests__/goals-schema.test.ts | 2 +-
packages/core/src/__tests__/insight-store.test.ts | 10 +-
.../src/__tests__/merge-request-record.test.ts | 97 +++++++++++
packages/core/src/__tests__/mission-store.test.ts | 2 +-
packages/core/src/__tests__/run-audit.test.ts | 2 +-
packages/core/src/__tests__/secrets-schema.test.ts | 6 +-
.../core/src/__tests__/settings-parity.test.ts | 3 +
.../core/src/__tests__/store-merge-queue.test.ts | 2 +-
packages/core/src/__tests__/task-documents.test.ts | 2 +-
packages/core/src/db.ts | 49 +++++-
packages/core/src/index.ts | 4 +-
packages/core/src/settings-schema.ts | 30 ++++
packages/core/src/store.ts | 189 ++++++++++++++++++++-
packages/core/src/types.ts | 37 ++++
.../src/__tests__/merger-merge-lifecycle.test.ts | 54 ++++++
.../merge-request-shadow-handoff.test.ts | 74 ++++++++
packages/engine/src/executor.ts | 15 +-
packages/engine/src/merger.ts | 37 ++++
packages/engine/src/run-audit.ts | 1 +
packages/engine/src/self-healing.ts | 16 +-
.../src/store/__tests__/roadmap-store.test.ts | 4 +-
27 files changed, 646 insertions(+), 45 deletions(-)
Fusion-Task-Id: FN-5741
Fusion-Task-Lineage: 3fec14c3-47ff-4f14-bc02-24021518c992
2026-05-30 14:42:50 -07:00
gsxdsm
bb0f693d79
FN-5751: fix dashboard auto-merge toggle race
...
Prevent rapid auto-merge toggles from desynchronizing dashboard settings state.
- Track auto-merge state in a ref so each toggle reads and writes the latest value
- Apply optimistic updates from the ref and roll back correctly on failed setting updates
- Add regression coverage for rapid double-toggle behavior in useAppSettings
- Add a patch changeset for @runfusion/fusion describing the dashboard blank-state fix
Files changed:
.changeset/fn-5751-auto-merge-toggle.md | 5 ++++
.../app/hooks/__tests__/useAppSettings.test.ts | 27 ++++++++++++++++++++++
packages/dashboard/app/hooks/useAppSettings.ts | 20 +++++++++++-----
3 files changed, 46 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-5751
Fusion-Task-Lineage: 1a0090ff-4015-46b8-a974-3accbbdce919
2026-05-30 14:18:15 -07:00
gsxdsm
9c4e8edf39
FN-5733: enforce mission completion-gate assertions for live Goals mission
...
Realize the mission completion-gate contract by surfacing and enforcing structured assertion coverage for milestone completion.
- add milestone rollup signaling for prose-only acceptance criteria and wire it into mission-store completion gating
- update mission execution loop reliability paths so validator-trigger continuity is preserved across completion and startup recovery
- expose the new rollup flag in dashboard mission types/API and show an autopilot warning badge in MissionManager when prose exists without structured assertions
- extend core, engine, and dashboard tests plus mission docs, and add a patch changeset for @runfusion/fusion
Files changed:
.changeset/fn-5733-mission-completion-gate.md | 10 +++
docs/missions-completion-contract.md | 11 +++
docs/missions.md | 4 +
packages/core/src/__tests__/mission-store.test.ts | 81 ++++++++++++++++++++
packages/core/src/mission-store.ts | 89 ++++++++++++++++++++++
packages/core/src/mission-types.ts | 2 +
packages/dashboard/app/api/legacy.ts | 1 +
.../dashboard/app/components/MissionManager.css | 42 +++++++++-
.../dashboard/app/components/MissionManager.tsx | 22 +++++-
.../components/__tests__/MissionManager.test.tsx | 20 ++++-
packages/dashboard/app/components/mission-types.ts | 1 +
.../src/__tests__/mission-execution-loop.test.ts | 23 ++++++
.../mission-validation-trigger-gap.test.ts | 41 ++++++++++
packages/engine/src/mission-execution-loop.ts | 21 ++++-
14 files changed, 357 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-5733
Fusion-Task-Lineage: 259418c6-5404-4773-8fd2-db8d7e9cadd3
2026-05-30 14:07:20 -07:00
Phil Larson
b1c1a33d34
Add safe task dependency mutation
2026-05-30 13:43:36 -07:00
gsxdsm
cf95d3636f
ci(release): drop macOS Intel (bun-darwin-x64) from binary matrix
...
macos-13 runners are too scarce — the darwin-x64 leg sat queued for hours
and blocked the release publish job (which needs all build legs). Ship the
CLI Apple-Silicon-only for macOS; desktop macOS DMG/ZIP stays universal.
Removed from release.yml + test-release.yml matrices, updated ci-workflow
assertions (5→4 targets) and RELEASING.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-30 10:06:51 -07:00
gsxdsm
3255965ad5
FN-5715: gate mission feature completion on assertion validation
...
Prevent mission-linked done tasks from bypassing assertion validation and recover stalled validation triggers after restart.
- require assertion-linked done features to have a passed validator result before slice/milestone completion
- keep assertion-linked features in progress when linked tasks move to done/archived until validation passes
- restart mission loop recovery when needed and re-trigger done/archived implementing features that still need validation
- add regression coverage for scheduler, mission loop recovery, mission store completion gating, and reliability trigger continuity
- document the new FN-5715 reliability backstop and recovery behavior
Files changed:
.changeset/fn-5715-mission-validation-trigger.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 1 +
docs/missions.md | 11 +-
packages/core/src/__tests__/mission-integration.test.ts | 2 +-
packages/core/src/__tests__/mission-store.test.ts | 30 +++-
packages/core/src/mission-store.ts | 19 ++-
packages/engine/src/__tests__/mission-execution-loop.test.ts | 95 +++++++++++++
packages/engine/src/__tests__/reliability-interactions/mission-validation-trigger-gap.test.ts | 151 +++++++++++++++++++++
packages/engine/src/__tests__/scheduler.test.ts | 54 ++++++++
packages/engine/src/mission-autopilot.ts | 7 +-
packages/engine/src/mission-execution-loop.ts | 25 ++++
packages/engine/src/mission-feature-sync.ts | 32 ++++-
packages/engine/src/scheduler.ts | 12 +-
14 files changed, 431 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-5715
Fusion-Task-Lineage: 98b1cbd6-6b68-40a0-b4b3-c512183adf8b
2026-05-30 09:43:02 -07:00
gsxdsm
805eae4237
fix(ci): scope node_modules cache key per job to stop save races
...
The Windows desktop build now succeeds (artifact builds + uploads), but the
job was marked failed on the post-job cache *save*: build-binaries
(windows-x64) and build-desktop-windows share runner.os/arch and thus the
same cache key, so concurrent saves hit "unable to reserve cache ... another
job may be creating this cache." Adding github.job to the key gives each job
its own cache and eliminates the race.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-30 09:09:25 -07:00
gsxdsm
f5e738be14
Merge pull request #1177 from plarson/fix/fn202-dashboard-column-filter
...
fix: respect dashboard task column filters
2026-05-30 08:40:53 -07:00
gsxdsm
884e677afa
fix(build): pin @types/node workspace-wide; make build-exe tests opt-in
...
(b) Windows desktop build flakily failed with "Property 'ok'/'status' does
not exist on type 'Response'" because the workspace resolved multiple
@types/node versions (incl. an ancient 12.20.55 from @manypkg/find-root that
predates global fetch types). plugin-sdk compiles with lib:["ES2022"] and no
DOM lib, so Response comes solely from @types/node — nondeterministic across
runners. Pin via pnpm.overrides "@types/node": "^25.5.2"; collapses the
lockfile to one version. Verified: plugin-sdk build + desktop + full
workspace typecheck all pass.
Also: build-exe-cross tests cross-compiled all 5 platforms on every CI run
(auto-enabled via Boolean(process.env.CI)) — a release-build dependency in
the normal lane. Made them opt-in (FUSION_TEST_BUILD_EXE=1) and pointed the
root test:slow-cli at the CLI slow lane instead of test:pre-release, so
everyday CI no longer depends on release builds. test:pre-release and
test-release.yml still validate binaries deliberately.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-30 08:39:38 -07:00
gsxdsm
033f74c458
FN-5714: reject linking features to non-active tasks
...
Gracefully handle feature-to-task linking when the referenced task is archived, deleted, or missing.
- enforce active-board task validation in mission store linkage path with clear error text
- return surfaced validation errors from fn_feature_link_task instead of throwing opaque failures
- add regression coverage in core and CLI extension tests for archived/non-active task references
- add changeset and sync Fusion skill reference docs with the new fn_feature_link_task behavior
Files changed:
.changeset/fn-5714-link-archived-task.md | 5 +++
.../cli/skill/fusion/references/extension-tools.md | 2 +-
.../skill/fusion/references/fusion-capabilities.md | 2 +-
packages/cli/src/__tests__/extension.test.ts | 50 ++++++++++++++++++++++
packages/cli/src/extension.ts | 35 +++++++++------
packages/core/src/__tests__/mission-store.test.ts | 17 ++++++++
packages/core/src/mission-store.ts | 9 ++++
7 files changed, 106 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-5714
Fusion-Task-Lineage: d84c45cf-0a0d-47a3-81c5-f99d16e03ecf
2026-05-30 08:39:38 -07:00