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
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
Relocate Settings version/update UI into the modal footer to reduce header crowding.
- Remove the version/update-check control block from the Settings modal header.
- Add a dedicated footer version container and keep the update-check action/result rendering there.
- Update Settings modal CSS for the new footer layout and mobile wrapping behavior.
- Extend mobile tests to verify footer placement and update-check button clickability.
Files changed:
packages/dashboard/app/components/SettingsModal.css | 25 +++++++--
packages/dashboard/app/components/SettingsModal.tsx | 64 +++++++++++-----------
packages/dashboard/app/components/__tests__/settings-mobile.test.tsx | 27 ++++++++-
3 files changed, 77 insertions(+), 39 deletions(-)
Fusion-Task-Id: FN-5765
Fusion-Task-Lineage: 97923f08-e787-4274-a4ce-8b615b909468
Add a Discord CTA in the Settings header alongside the existing GitHub star action.
- Add a Discord header action/link in SettingsModal next to the GitHub star button
- Update SettingsModal styles to support the additional header action
- Extend SettingsModal tests to cover rendering and behavior of the new Discord link
Files changed:
packages/dashboard/app/components/SettingsModal.css | 2 ++
packages/dashboard/app/components/SettingsModal.tsx | 13 ++++++++++++-
.../app/components/__tests__/SettingsModal.test.tsx | 14 +++++++++++++-
3 files changed, 27 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-5763
Fusion-Task-Lineage: 758eddf8-246c-41be-9742-a9d5b4b0eb17
Keep chat scroll position stable when stale top snapshots are captured during mobile message updates.
- Capture scroll anchors from the first visible message instead of always sampling the first DOM node
- Ignore stale or likely-invalid zero-position snapshots before attempting scroll restoration
- Guard bottom anchoring from interrupting user scroll unless explicitly forced and add regression coverage for stale snapshot behavior
Files changed:
packages/dashboard/app/components/ChatView.css | 11 +++++-
packages/dashboard/app/components/ChatView.tsx | 33 +++++++++++++----
packages/dashboard/app/components/__tests__/ChatView.scroll-to-top.test.tsx | 41 ++++++++++++++++++++++
3 files changed, 78 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-5757
Fusion-Task-Lineage: 4e4f6843-ba70-40da-8d16-358bdfcc7b09
Ensure active mission slices recover stranded features by linking or auto-triaging them during scheduler and self-healing reconciliation.
- Extend mission feature reconciliation to auto-triage defined features in active slices when mission autopilot/auto-advance is enabled and no linked task can be found.
- Emit a new mission:stranded-feature-triaged audit event whenever stranded features are linked or triaged, and wire reconciliation into self-healing maintenance runs.
- Add regression coverage for scheduler and reliability interactions, and document the new backstop in AGENTS and mission docs.
Files changed:
AGENTS.md | 1 +
docs/missions-completion-contract.md | 1 +
docs/missions.md | 1 +
.../mission-stranded-feature-retriage.test.ts | 160 +++++++++++++++++++++
packages/engine/src/__tests__/scheduler.test.ts | 155 ++++++++++++++++++++
packages/engine/src/run-audit.ts | 1 +
packages/engine/src/runtimes/in-process-runtime.ts | 1 +
packages/engine/src/scheduler.ts | 64 ++++++++-
packages/engine/src/self-healing.ts | 11 ++
9 files changed, 394 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-5754
Fusion-Task-Lineage: 6b29754a-2fdf-4528-aa43-af294c4210df
Fixes typecheck failure — the new task:near-duplicate-flagged
ActivityEventType was missing from the exhaustive Record maps in
ActivityFeed and ActivityLogModal.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the FN-5756 ratification addendum to the executor/merger decoupling RFC.
- Record approval for dual-run dependency satisfaction via in-review or completion_handoff_accepted marker
- Require audit diff logging when legacy and new dependency signals disagree during dual-run
- Record approval to make merge back-pressure branch-group aware by default with global safety caps retained
Files changed:
docs/rfcs/FN-5719-decouple-executor-merger.md | 4 ++++
1 file changed, 4 insertions(+)
Fusion-Task-Id: FN-5756
Fusion-Task-Lineage: 54077cc9-a4ae-4462-99b0-4c28d06652cc
Stabilize the connectivity recovery first-run App test by controlling timer-driven state transitions.
- switch the retry/recovery test to `vi.useFakeTimers()` with `try/finally` cleanup
- advance timers explicitly around initial render, retry click, and post-rerender recovery window
- preserve existing assertions while removing `waitFor` timing dependence in this flow
Files changed:
packages/dashboard/app/components/__tests__/App.test.tsx | 41 ++++++++++++++--------
1 file changed, 26 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-5724
Fusion-Task-Lineage: 0dfad0d8-ccf9-4f83-af2e-1057180fe191
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
Reduce interaction overhead in the ChatView agent-mentions test while preserving coverage.
- Switch the test to a local instance for faster click/type interactions.
- Reuse that configured user instance for both room-scope selection and mention trigger typing.
- Replace async DOM lookup with immediate assertion once the mention header is expected to be present.
Files changed:
packages/dashboard/app/components/__tests__/ChatView.test.tsx | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-5745
Fusion-Task-Lineage: f65364d0-951e-4945-bc8b-42bf99e8a5e6
Record CEO ratification outcomes in the decoupling RFC and unblock follow-on implementation.
- Update RFC status from draft to ratified with FN-5746/date context.
- Clarify the CEO ratification gate language as a completed gating artifact.
- Add explicit approval decisions for persisted merge-request record storage and Phase-1 completion handoff marker.
- Mark follow-on task FN-5723 as unblocked.
Files changed:
docs/rfcs/FN-5719-decouple-executor-merger.md | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-5746
Fusion-Task-Lineage: bb71138a-4d05-4224-a34e-213783e20a9f
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
Reduce repeated async waits in PrCreateModal tests by centralizing initial-load synchronization.
- add a renderModalLoaded helper that waits for the AI title field once per test setup
- replace repeated findByDisplayValue calls with the shared helper in slow-path tests
- switch one post-load lookup from async findBy* to sync getBy* where loading is already guaranteed
Files changed:
.../components/__tests__/PrCreateModal.test.tsx | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-5727
Fusion-Task-Lineage: bf064b14-d625-4396-91e7-02d9eb48b9eb
Reduce runtime overhead in the GitHub Copilot authentication test by replacing slower user-event timing with deterministic timer control.
- import `act` from Testing Library to flush async state transitions explicitly
- switch the Copilot login/copy/open interactions in the target test from `userEvent.click` to `fireEvent.click`
- wrap the flow in `vi.useFakeTimers()`/`vi.useRealTimers()` and advance timers directly instead of waiting with a 5s timeout
- keep existing assertions for clipboard writes, toast feedback, GitHub link opening, and login code expiry behavior
Files changed:
.../components/__tests__/SettingsModal.test.tsx | 47 ++++++++++++++--------
1 file changed, 31 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-5726
Fusion-Task-Lineage: e9ccf2d0-d5a2-4568-abf5-7d9f7e67d643
Ensure Rooms scope reliably re-anchors to bottom on re-entry without breaking scroll preservation during refetch.
- reset stale thread anchor state when entering Rooms without an active room
- treat direct↔rooms transitions as entry events and anchor messages to bottom on entry
- keep existing scroll position when room messages are refetched in-place
- add regression tests covering room re-entry anchoring and refetch scroll preservation
Files changed:
packages/dashboard/app/components/ChatView.tsx | 14 +++-
.../app/components/__tests__/ChatView.test.tsx | 88 ++++++++++++++++++++++
2 files changed, 99 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-5720
Fusion-Task-Lineage: dde8818b-f2e5-4c55-8a4c-2c54241c2e38
Add an RFC that defines a merge-request handoff seam to decouple executor completion from merger orchestration.
- Document current executor/merger coupling points and failure modes across store, scheduler, self-healing, and merger paths.
- Propose a decoupled merge-request state machine with explicit handoff ownership, queueing, lease boundaries, and autoMerge true/false flows.
- Map reliability invariants (including FN-5147 and FN-5704) to preserved/modified behavior and define phased rollout plus follow-on test strategy.
Files changed:
docs/rfcs/FN-5719-decouple-executor-merger.md | 149 ++++++++++++++++++++++++++
1 file changed, 149 insertions(+)
Fusion-Task-Id: FN-5719
Fusion-Task-Lineage: 4a13c088-48a5-4b37-a969-a8602d82da4a