gsxdsm
729bd5e5f9
chore(release): v0.50.0
...
Version bump via changesets.
2026-06-27 18:10:19 -07:00
gsxdsm
d4137f1abc
FN-7144: complete compound engineering workflow audit
...
Adds the missing CE document-review stage and tightens workflow docs, compilation, and tests.
- Add optional advisory ce-doc-review support to the compound engineering built-in workflow.
- Register and document the compound-engineering ce-doc-review skill for markdown CE plan review.
- Preserve optional-group workflow semantics when compiling legacy steps and cover the CE workflow seams with tests.
- Update operator docs and add a published package changeset.
Files changed:
.changeset/fn-7144-compound-engineering-audit.md | 7 +++
docs/workflow-editor.md | 2 +-
docs/workflow-steps.md | 4 +-
.../core/src/__tests__/builtin-workflows.test.ts | 29 +++++++++-
packages/core/src/builtin-workflows.ts | 62 ++++++++++++++++++++--
packages/core/src/workflow-compiler.ts | 3 +-
.../__tests__/ce-workflow-step-conventions.test.ts | 8 +++
.../src/__tests__/interpreter-merge-seam.test.ts | 3 +-
.../src/__tests__/manifest.test.ts | 1 +
.../src/skills.ts | 13 +++++
.../src/skills/ce-doc-review/SKILL.md | 54 +++++++++++++++++++
11 files changed, 175 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-7144
Fusion-Task-Lineage: bedbfad4-d6e8-489e-a555-803991a1ad54
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 17:40:42 -07:00
gsxdsm
13d97b7c33
FN-7145: verify CE workflow skill loading
...
Add coverage and documentation for skill-backed workflow step loading.
- Derive compound-engineering skill-step expectations from the built-in workflow definition.
- Assert every skill-backed step requests namespaced and bare skills and uses injected CE skill paths.
- Cover missing FUSION_CE_SKILLS_DIR warnings, skill-less steps, and toolMode-independent skill loading.
- Document the skill-backed workflow execution invariant.
Files changed:
docs/workflow-steps.md | 9 ++
.../__tests__/ce-workflow-step-executor.test.ts | 112 +++++++++++++++++++--
2 files changed, 115 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-7145
Fusion-Task-Lineage: 1a344fa7-fa0c-4f04-af5a-1a90d48cd34c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 17:17:28 -07:00
gsxdsm
6f46fa17dd
FN-7138: show task column context in agent assignments
...
Agent Current Task output now includes linked task column context to distinguish active execution from parked or stale links.
- Add shared Current Task formatting for active, terminal, and unresolved task links.
- Show linked task columns in engine and CLI agent list/show surfaces.
- Cover parked, active, terminal, and missing task-link display cases with tests.
- Document the durable agent task-link invariant and release the CLI fix.
Files changed:
.changeset/fn-7138-agent-current-task-context.md | 7 ++++
docs/agents.md | 1 +
docs/architecture.md | 2 +-
packages/cli/src/__tests__/extension.test.ts | 44 ++++++++++++++++++++++
packages/cli/src/extension.ts | 35 +++++++++++++++--
packages/core/src/agent-store.ts | 30 +++++++++++++++
packages/core/src/index.ts | 2 +-
.../src/__tests__/agent-tools-delegation.test.ts | 44 +++++++++++++++++++++-
packages/engine/src/agent-tools.ts | 15 ++++++--
9 files changed, 169 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-7138
Fusion-Task-Lineage: 0ea97b4c-d4f8-4289-a5b6-e5c51b47b768
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 16:16:25 -07:00
gsxdsm
6713c99011
FN-7135: Record triage token usage by model
...
Record triage and spec-review session token usage so Command Center model analytics includes planning models.\n\n- Add fail-soft token usage recording for triage session completion, fallback disposal, pause/delete, and engine stop paths.\n- Capture spec-review subagent token deltas before unregistering or force-disposing subagent sessions.\n- Add regression coverage for primary, fallback, and spec-review model token attribution.\n- Add a patch changeset for published CLI release notes.\n\nFiles changed:\n .changeset/fn-7135-triage-token-usage.md | 7 +\n .../src/__tests__/triage-token-usage.test.ts | 206 +++++++++++++++++++++\n packages/engine/src/triage.ts | 63 +++++++\n 3 files changed, 276 insertions(+)
Fusion-Task-Id: FN-7135
Fusion-Task-Lineage: abbff18a-44e8-41fd-9012-388115914fc7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 15:06:12 -07:00
gsxdsm
a593cc7428
FN-7130: require agent-browser for browser verification
...
Browser Verification steps now explicitly request and log agent-browser usage.
- Mark the built-in browser verification workflow step as browser-required and document that it runs through agent-browser.
- Add executor helpers to inject the agent-browser skill, probe CLI availability, and log start/finish outcomes.
- Cover workflow metadata, browser verification execution logging, availability probing, and skill augmentation with tests.
- Add a patch changeset for the published Fusion package.
Files changed:
.../fn-7130-browser-verification-agent-browser.md | 7 +
docs/workflow-steps.md | 4 +-
.../__tests__/builtin-coding-workflow-ir.test.ts | 23 ++
.../core/src/__tests__/builtin-workflows.test.ts | 12 +
.../core/src/builtin-browser-verification-group.ts | 4 +
packages/core/src/types.ts | 7 +
...iltin-coding-browser-verification-group.test.ts | 8 +-
.../executor-browser-verification.test.ts | 267 +++++++++++++++++++++
packages/engine/src/executor.ts | 118 +++++++++
9 files changed, 447 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-7130
Fusion-Task-Lineage: 3a76522e-70e1-4445-ad18-b9e1b9b355fc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 14:27:06 -07:00
gsxdsm
c1613ad7f6
FN-7122: expose MCP servers as pi session tools
...
Connect configured MCP servers during pi chat and agent session startup so their discovered tools are available as namespaced custom tools.
- Add MCP session tool connection, tool-name sanitization, result mapping, and disposal handling.
- Merge discovered MCP tools into pi customTools while skipping readonly sessions and avoiding secret-bearing logs.
- Cover MCP tool wrapping and pi session integration with targeted tests.
- Document MCP forwarding behavior and promote the MCP SDK to an engine runtime dependency.
Files changed:
.changeset/fn-7122-mcp-session-tools.md | 7 +
docs/mcp.md | 2 +
packages/engine/package.json | 2 +-
.../engine/src/__tests__/mcp-session-tools.test.ts | 105 ++++++++
.../src/__tests__/pi-mcp-session-tools.test.ts | 24 ++
packages/engine/src/mcp-session-tools.ts | 262 ++++++++++++++++++++
packages/engine/src/pi.ts | 71 +++++-
pnpm-lock.yaml | 264 ++++++++++++++++++++-
8 files changed, 713 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-7122
Fusion-Task-Lineage: e7ff57e7-9bfb-41a4-9ebd-6c868bac2745
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 14:09:47 -07:00
gsxdsm
b1066c62cc
fix: bounce in-review tasks back for pre-merge optional-step fixes
...
A pre-merge optional step REVISE (Code Review / Browser Verification)
reopens the last plan step to pending and schedules a rerun bounce via
sendTaskBackForFix. The hosting graph run reports disposition "completed",
so the outer completion flow can route the task to in-review before the
setTimeout(0) bounce fires. performWorkflowRerunBounce previously handled
only in-progress/todo and threw on in-review ("cannot bounce to
in-progress"), stranding the task in-review with a pending step: the merge
gate blocks forever while self-healing only re-runs the graph (re-passing
the advisory step) and never re-launches the executor — a permanent
deadlock (observed on FN-7122, stuck >1h).
The bounce's only caller (sendTaskBackForFix) unconditionally intends
remediation, so in-review now bounces back to in-progress exactly like
in-progress (todo hop preserving step progress + worktree). Adds a
regression test asserting the in-review bounce returns "bounced" and
re-dispatches.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-27 14:02:34 -07:00
gsxdsm
39d20be05f
FN-7129: add per-step optional revision budgets
...
Add optional workflow-step revision budgets that can cap or unbound remediation loops.
- Add optional-group maxRevisions parsing, validation, exports, and docs.
- Expose numeric and unbounded revision budget controls in the workflow node editor.
- Apply per-step budgets in executor and self-healing fix loops with regression coverage.
Files changed:
.changeset/fn-7129-per-step-revision-budget.md | 7 ++
docs/dashboard-guide.md | 1 +
docs/settings-reference.md | 2 +-
docs/workflow-steps.md | 10 ++-
.../__tests__/workflow-ir-optional-group.test.ts | 29 ++++++-
packages/core/src/index.ts | 2 +
packages/core/src/workflow-ir-types.ts | 37 +++++++++
packages/core/src/workflow-ir.ts | 15 ++++
.../app/components/WorkflowNodeEditor.tsx | 87 ++++++++++++++++----
.../__tests__/WorkflowNodeEditor.test.tsx | 95 ++++++++++++++++++++++
packages/engine/src/__tests__/self-healing.test.ts | 63 ++++++++++++++
.../workflow-graph-optional-group.test.ts | 30 ++++++-
.../workflow-graph-optional-step-fix.test.ts | 53 ++++++++++++
packages/engine/src/executor.ts | 15 ++--
packages/engine/src/self-healing.ts | 64 +++++++++++----
packages/engine/src/workflow-graph-executor.ts | 6 +-
16 files changed, 469 insertions(+), 47 deletions(-)
Fusion-Task-Id: FN-7129
Fusion-Task-Lineage: dbde94e5-3c99-4f67-aed9-458563e845ae
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 13:05:50 -07:00
gsxdsm
c3c4216f76
FN-7132: classify task creation as a gated mutation
...
Classify fn_task_create as a task-agent mutation so permanent-agent policies can require approval or block task creation.
- Move fn_task_create out of the permanent-agent read-only tool set and into the shared task mutation classification.
- Add parity tests covering permanent-agent and action-gate decisions for fn_task_create.
- Preserve delegate and GitHub import tools as permanent-agent read-only coordination tools while documenting the distinction.
- Add a patch changeset for the published Fusion package.
Files changed:
.../fn-7132-task-create-mutation-classification.md | 7 +++
docs/agents.md | 6 +--
.../src/__tests__/gating-classifications.test.ts | 58 +++++++++++++++++++++-
.../src/__tests__/permanent-agent-gating.test.ts | 3 +-
packages/engine/src/gating-classifications.ts | 10 ++--
5 files changed, 75 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-7132
Fusion-Task-Lineage: 6e32ed9d-f0fa-46f2-a749-c5dbe863fb1f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 12:44:50 -07:00
gsxdsm
3d26d4e74b
FN-7127: standardize task show tool naming
...
Unify task-show references so planning, triage, docs, and telemetry use fn_task_show consistently.
- Replace legacy fn_task_get guidance and examples with fn_task_show across agent prompts, mission planning, triage, and docs.
- Keep fn_task_get as a deprecated read-only recognition alias for historical or in-flight calls.
- Update tests and changesets to cover the unified tool name and usage telemetry.
Files changed:
.changeset/FN-7118-shared-task-read-tools.md | 2 +-
.changeset/FN-7127-unify-task-show-tool-name.md | 7 ++++++
docs/cli-reference.md | 2 +-
docs/missions.md | 2 +-
.../cli/skill/fusion/references/engine-tools.md | 2 +-
packages/core/src/__tests__/usage-events.test.ts | 1 +
packages/core/src/agent-prompts.ts | 12 +++++-----
.../__tests__/milestone-slice-interview.test.ts | 2 +-
.../src/__tests__/mission-interview.test.ts | 2 +-
.../src/__tests__/planning-board-tools.test.ts | 6 ++---
.../dashboard/src/milestone-slice-interview.ts | 4 ++--
packages/dashboard/src/mission-interview.ts | 2 +-
packages/dashboard/src/planning-board-tools.ts | 10 +++++---
packages/dashboard/src/planning.ts | 2 +-
.../src/__tests__/agent-task-read-tools.test.ts | 28 +++++++++++++++-------
packages/engine/src/__tests__/triage.test.ts | 6 ++---
packages/engine/src/agent-tools.ts | 5 +++-
packages/engine/src/gating-classifications.ts | 8 +++++--
packages/engine/src/triage.ts | 12 ++++++----
19 files changed, 74 insertions(+), 41 deletions(-)
Fusion-Task-Id: FN-7127
Fusion-Task-Lineage: adf5a127-2741-4c88-97b3-aab239ab3960
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 12:25:53 -07:00
gsxdsm
59803c243d
FN-7123: use workflow settings for task models
...
Task model displays now resolve task-scoped workflow settings consistently with execution.
- Add a shared workflow settings overlay helper for stored workflow values and declaration defaults.
- Expose task effective settings through the dashboard API and consume them in TaskDetail model surfaces.
- Cover core overlay behavior, route output, and Workflow tab model rendering with regression tests.
- Document workflow model lane precedence and add a published package changeset.
Files changed:
.changeset/fn-7123-workflow-tab-project-model.md | 7 ++
docs/settings-reference.md | 14 ++-
.../__tests__/effective-settings-overlay.test.ts | 70 ++++++++++++++
packages/core/src/effective-settings-overlay.ts | 27 ++++++
packages/core/src/index.ts | 4 +
packages/dashboard/app/api/legacy.ts | 5 +
.../dashboard/app/components/TaskDetailModal.tsx | 13 ++-
...skDetailModal.models-progress-workflow.test.tsx | 46 +++++++++
.../__tests__/TaskDetailModal.test-helpers.ts | 1 +
.../__tests__/WorkflowResultsTab.test.tsx | 33 +++++++
packages/dashboard/app/test/mockApi.ts | 9 ++
.../task-effective-settings-route.test.ts | 107 +++++++++++++++++++++
.../src/routes/register-task-workflow-routes.ts | 21 ++++
packages/engine/src/effective-settings.ts | 25 ++---
14 files changed, 355 insertions(+), 27 deletions(-)
Fusion-Task-Id: FN-7123
Fusion-Task-Lineage: 5fa9d338-c886-44aa-bdba-0d361b3602d5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 12:20:42 -07:00
gsxdsm
45e27f8875
FN-7126: govern task creation with action gate
...
Task creation and delegation now honor task-agent mutation policies in action-gate evaluation.
- Classify task creation, delegation, and import tools as task_agent_mutation for action-gate policy decisions.
- Preserve permanent-agent recognition for coordination paths while documenting the split semantics.
- Update permission policy examples, regression tests, and release note metadata.
Files changed:
.changeset/fn-7126-task-create-action-gate.md | 7 +++++++
docs/agents.md | 2 +-
packages/core/src/types.ts | 2 +-
.../engine/src/__tests__/agent-action-gate.test.ts | 24 ++++++++++++++++++----
.../src/__tests__/gating-classifications.test.ts | 16 +++++++++++++--
packages/engine/src/gating-classifications.ts | 10 ++++++---
6 files changed, 50 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-7126
Fusion-Task-Lineage: 0e5d2aea-6670-4f9c-9ee8-5a135774c784
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 11:54:06 -07:00
gsxdsm
68282769e6
FN-7128: raise optional-step fix cycle budget
...
Code Review and Browser Verification now rerun through bounded fix passes until they pass.
- Raise the shared maxPostReviewFixes default and fallbacks from 1 to 3.
- Document the built-in optional-step fix cycle and release-note the operator-facing behavior.
- Update workflow graph, settings, and fallback tests for repeated optional-step remediation.
Files changed:
.changeset/fn-7128-optional-step-cycle-default.md | 7 ++
docs/settings-reference.md | 2 +-
docs/workflow-steps.md | 2 +-
.../src/__tests__/workflow-ir-settings.test.ts | 2 +-
packages/core/src/builtin-workflow-settings.ts | 8 +-
packages/core/src/types.ts | 8 +-
.../workflow-graph-optional-group.test.ts | 112 +++++++++++++++++----
.../workflow-graph-optional-step-fix.test.ts | 35 +++++++
.../workflow-settings-fallback-alignment.test.ts | 2 +-
packages/engine/src/executor.ts | 2 +-
packages/engine/src/self-healing.ts | 4 +-
11 files changed, 152 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-7128
Fusion-Task-Lineage: 8165f746-3828-453a-8ca4-8134c8d33c8f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 11:42:01 -07:00
gsxdsm
c15d1294eb
FN-7115: expose governed heartbeat workflow tools
...
Expose the missing governed workflow and promotion tools to heartbeat agent sessions.\n\n- Add workflow authoring/settings, research cancellation, and task promotion/select tools to the shared heartbeat work surface.\n- Keep task-read discovery and executor-only worktree tools correctly scoped while documenting the heartbeat lane surface.\n- Cover tool injection, permission-gate behavior, and workflow factory exposure with regression tests.\n\nFiles changed:\n .changeset/FN-7115-heartbeat-tool-injection.md | 7 ++\n docs/agents.md | 6 +-\n .../engine/src/__tests__/agent-action-gate.test.ts | 86 +++++++++++++++++++++-\n .../agent-workflow-tools-exposure.test.ts | 16 ++--\n .../src/__tests__/heartbeat-executor.test.ts | 31 +++++---\n .../src/__tests__/heartbeat-session-prompt.test.ts | 69 ++++++++++++++++-\n packages/engine/src/agent-heartbeat.ts | 22 ++++--\n 7 files changed, 207 insertions(+), 30 deletions(-)
Fusion-Task-Id: FN-7115
Fusion-Task-Lineage: 0883767b-7982-4f10-a466-1467b867dea1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 11:17:03 -07:00
gsxdsm
8f0f020caa
FN-7118: add shared task read tool factories
...
Add reusable heartbeat-safe task read tools for agents.\n\n- Add shared fn_task_list, fn_task_show, and fn_task_search factories with text-safe formatting.\n- Wire the task read tools into permanent/custom heartbeat work tooling and prompts.\n- Classify task read surfaces as read-only coordination exemptions and export the factories.\n- Cover cross-surface task read behavior with engine tests and document the agent surface.\n\nFiles changed:\n .changeset/FN-7118-shared-task-read-tools.md | 7 +\n docs/agents.md | 2 +-\n .../src/__tests__/agent-task-read-tools.test.ts | 160 ++++++++++++++++++++\n .../src/__tests__/gating-classifications.test.ts | 15 ++\n .../src/__tests__/heartbeat-executor.test.ts | 31 ++--\n .../src/__tests__/heartbeat-session-prompt.test.ts | 8 +-\n packages/engine/src/agent-heartbeat.ts | 16 +-\n packages/engine/src/agent-tools.ts | 161 ++++++++++++++++++++-\n packages/engine/src/gating-classifications.ts | 11 ++\n packages/engine/src/index.ts | 7 +\n 10 files changed, 396 insertions(+), 22 deletions(-)
Fusion-Task-Id: FN-7118
Fusion-Task-Lineage: 89a5b3a2-9295-435f-8bb9-f66f8ec73cc1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 11:08:09 -07:00
gsxdsm
5ab4a5961c
FN-7119: rescue quarantined engine and CLI tests
...
Restore quarantined scheduler/reliability coverage while preserving override column-agent model selection.
- remove rescued engine and CLI tests from quarantine configs and the ledger
- add scheduler fake updateSettings coverage so heartbeat writes do not skew call-count assertions
- preserve override column-agent runtime models during initial execution and mid-flight task edits
- update the stale user-configured command guard registry and add a patch changeset
Files changed:
.changeset/fn-7119-column-agent-model.md | 7 +++
docs/testing.md | 2 +
packages/cli/vitest.config.ts | 6 +-
.../executor-column-agent-principal.test.ts | 34 +++++++++-
.../lease-recovery-central-claim.test.ts | 5 ++
.../owning-node-unavailable-interactions.test.ts | 5 ++
.../todo-inprogress-flapping.test.ts | 5 ++
.../src/__tests__/restart.integration.test.ts | 8 +++
.../__tests__/scheduler-ephemeral-toggle.test.ts | 5 ++
.../scheduler-node-unreachable-audit.test.ts | 5 ++
.../__tests__/scheduler-overlap-starvation.test.ts | 5 ++
.../user-configured-command-no-execsync.test.ts | 12 +---
packages/engine/src/executor.ts | 18 ++++--
packages/engine/vitest.config.ts | 26 +++-----
scripts/lib/test-quarantine.json | 73 +---------------------
15 files changed, 106 insertions(+), 110 deletions(-)
Fusion-Task-Id: FN-7119
Fusion-Task-Lineage: 7dc033c8-29d1-4c0e-bfc1-b0ff0d325f43
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 10:50:33 -07:00
gsxdsm
e1dba3fcc9
FN-7113: validate workflow graph integrity before execution
...
Reject malformed workflow graphs at save and run boundaries.
- Add central IR validation for duplicate top-level node ids, unregistered extension keys, and unreachable required nodes.
- Re-validate resolved workflow IR in the graph runner before side effects and fail closed on invalid graphs.
- Expand graph integrity tests and document save/run validation behavior with a release changeset.
Files changed:
.changeset/FN-7113-workflow-graph-integrity.md | 7 +
docs/custom-workflow-reliability-acceptance-map.md | 7 +-
docs/workflow-steps.md | 20 +++
.../workflow-ir-extension-metadata.test.ts | 49 ++++++-
packages/core/src/__tests__/workflow-ir.test.ts | 106 +++++++++++++++-
packages/core/src/workflow-ir.ts | 51 +++++++-
.../__tests__/workflow-graph-task-runner.test.ts | 141 +++++++++++++++++----
packages/engine/src/workflow-graph-task-runner.ts | 46 +++++--
8 files changed, 386 insertions(+), 41 deletions(-)
Fusion-Task-Id: FN-7113
Fusion-Task-Lineage: f41e0d81-7cdf-497a-96ab-fe42504d0be4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 09:28:31 -07:00
gsxdsm
2b9e383e18
FN-7111: classify heartbeat tool parity gaps
...
Classify remaining heartbeat-agent tool gaps so permission gates enforce mutating and network behaviors consistently.
- Add shared classifications for workflow mutators, task update/promote/refine, verification/worktree acquisition, and research cancellation.
- Apply command-execution classifications in both action-gate and permanent-agent gating paths.
- Update operator docs, permission-policy examples, parity tests, and the published package changeset.
Files changed:
.changeset/FN-7111-tool-classification-parity.md | 7 ++
docs/agents.md | 8 +-
packages/core/src/types.ts | 12 ++-
.../engine/src/__tests__/agent-action-gate.test.ts | 11 ++-
.../src/__tests__/gating-classifications.test.ts | 93 +++++++++++++++++++++-
.../src/__tests__/permanent-agent-gating.test.ts | 44 ++++++++++
packages/engine/src/agent-action-gate.ts | 6 ++
packages/engine/src/gating-classifications.ts | 36 ++++++++-
packages/engine/src/permanent-agent-gating.ts | 5 ++
9 files changed, 206 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-7111
Fusion-Task-Lineage: d2f5ee71-c742-4f10-af55-fec380f08f64
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 09:28:31 -07:00
gsxdsm
1a30ddd6e8
FN-7108: broaden heartbeat agent tool access
...
Heartbeat agents now receive safe coordination and discovery tools while risky calls remain permission-gated.
- Add shared heartbeat workflow, research, and clarification tools for task-scoped and no-task runs.
- Give no-task permanent agents artifact registry access alongside existing delegation, messaging, memory, goal, and identity tools.
- Cover the expanded tool surface and action-gate behavior with heartbeat and permission-policy tests.
- Document the permission-governed heartbeat tool model and add a minor changeset.
Files changed:
.changeset/FN-7108-agent-tool-access.md | 7 ++
docs/agents.md | 9 ++-
.../src/__tests__/heartbeat-executor.test.ts | 24 +++---
.../src/__tests__/heartbeat-session-prompt.test.ts | 89 +++++++++++++++++++++-
.../src/__tests__/pi-create-fn-agent.test.ts | 67 ++++++++++++++++
packages/engine/src/agent-heartbeat.ts | 41 +++++++++-
6 files changed, 221 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-7108
Fusion-Task-Lineage: 83302055-72be-47f8-a41d-70164d12f010
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 09:28:31 -07:00
gsxdsm
c17d745665
FN-7109: notify operators when CLI agents await input
...
Notify external providers when terminal-backed CLI agents pause for tool permission or user input.
- Add a dedicated cli-agent-awaiting-input notification event to settings, schema defaults, dashboard options, and provider tests.
- Dispatch CLI-agent waiting-on-input notifications from the in-process runtime with task context and prompt-scoped dedupe keys.
- Document the operator behavior and add a published package changeset for the new notification surface.
Files changed:
.changeset/fn-7109-cli-agent-notification.md | 7 ++
docs/agents.md | 4 +
docs/settings-reference.md | 4 +-
.../cli-agent-permission-notifications.md | 13 +++
.../core/src/__tests__/global-settings.test.ts | 1 +
packages/core/src/settings-schema.ts | 1 +
packages/core/src/types.ts | 6 ++
.../SettingsModal.remote-notifications.test.tsx | 1 +
.../components/__tests__/settings-mobile.test.tsx | 2 +-
.../settings/sections/NotificationsSection.tsx | 3 +
.../src/__tests__/in-process-runtime.test.ts | 56 ++++++++++-
packages/engine/src/__tests__/notifier.test.ts | 6 +-
.../engine/src/__tests__/ntfy-provider.test.ts | 4 +
.../engine/src/__tests__/webhook-provider.test.ts | 2 +
.../engine/src/cli-agent/__tests__/runtime.test.ts | 39 +++++++-
.../__tests__/notification-service.test.ts | 56 ++++++++++-
.../src/notification/notification-service.ts | 9 +-
packages/engine/src/notification/ntfy-provider.ts | 7 ++
.../engine/src/notification/webhook-provider.ts | 2 +
packages/engine/src/notifier.ts | 1 +
packages/engine/src/runtimes/in-process-runtime.ts | 111 +++++++++++++++++++++
21 files changed, 326 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-7109
Fusion-Task-Lineage: 636c1875-92a2-46a7-847e-1f4955c0822f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 09:28:31 -07:00
gsxdsm
e687ff3700
FN-7110: assert normalized CE skill requests
...
Update CE workflow-step convention coverage for normalized skill request matching.
- Refresh the U1 test narrative around requestedSkillMatchKey normalization.
- Assert namespaced, slash, SKILL.md-suffixed, mixed-case, and dual CE skill requests resolve once.
- Keep negative coverage for requests when the CE install directory is not discoverable.
Files changed:
.../__tests__/ce-workflow-step-conventions.test.ts | 85 ++++++++++++----------
1 file changed, 47 insertions(+), 38 deletions(-)
Fusion-Task-Id: FN-7110
Fusion-Task-Lineage: 807649db-6c61-4c1e-9b04-28257992eb21
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 09:28:30 -07:00
gsxdsm
28cdd1c215
FN-7099: add project plan approval mode
...
Add a project-wide plan approval mode that can override workflow approval gates.
- Add core plan approval resolution for workflow, auto-approve-all, and require-all modes.
- Apply the resolved approval mode in triage recovery and planning finalization.
- Expose the mode in settings UI with translations, docs, tests, and a changeset.
Files changed:
.changeset/fn-7099-plan-approval-mode.md | 7 +++
docs/settings-reference.md | 3 +-
docs/storage.md | 5 +-
packages/core/src/__tests__/plan-approval.test.ts | 37 ++++++++++++++
packages/core/src/index.ts | 2 +
packages/core/src/plan-approval.ts | 21 ++++++++
packages/core/src/settings-schema.ts | 3 +-
packages/core/src/types.ts | 5 ++
.../dashboard/app/components/SettingsModal.tsx | 1 +
.../SettingsModal.scheduling-merge.test.tsx | 17 +++++++
.../__tests__/SettingsModal.test-harness.tsx | 1 +
.../components/settings/sections/MergeSection.tsx | 19 +++++++
.../MergeSection.legacy-automerge-cleanup.test.tsx | 23 ++++++++-
packages/engine/src/__tests__/triage.test.ts | 58 ++++++++++++++++++++++
packages/engine/src/triage.ts | 10 +++-
packages/i18n/locales/en/app.json | 5 ++
packages/i18n/src/resources.d.ts | 5 ++
17 files changed, 215 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-7099
Fusion-Task-Lineage: 8b276000-1df3-41e4-a94d-724aac559954
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 09:28:30 -07:00
gsxdsm
ee3a06ecfd
FN-7095: add actionable backup failure details
...
Database Backup automation failures now expose the affected database, paths, and root cause.
- Add DB-qualified error formatting for project and central backup creation, verification, schedule validation, and command failures.
- Normalize routine and cron in-process backup failures so empty or opaque errors become actionable AutomationRunResult errors.
- Cover missing database files, backup directory failures, central copy failures, corrupt backup quarantine, and runner normalization with regression tests.
- Document backup failure detail behavior and add a patch changeset.
Files changed:
.changeset/fn-7095-backup-detail.md | 7 ++
docs/storage.md | 2 +
packages/core/src/__tests__/backup.test.ts | 114 ++++++++++++++++++++-
packages/core/src/backup.ts | 112 +++++++++++++++-----
packages/engine/src/__tests__/cron-runner.test.ts | 35 +++++++
.../engine/src/__tests__/routine-runner.test.ts | 45 ++++++++-
packages/engine/src/cron-runner.ts | 20 +++-
packages/engine/src/routine-runner.ts | 20 +++-
8 files changed, 324 insertions(+), 31 deletions(-)
Fusion-Task-Id: FN-7095
Fusion-Task-Lineage: 368e3edf-20d3-4756-97be-75734dbff703
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 09:28:29 -07:00
gsxdsm
9020f5774e
test: quarantine 11 failing CI full-suite tests
...
Quarantine test files consistently failing on the non-blocking full-suite
CI on main, per the AGENTS.md deletion-ratchet policy:
Engine-default (shard 1-2): ce-workflow-step-conventions,
executor-column-agent-principal, restart.integration,
scheduler-node-unreachable-audit, scheduler-overlap-starvation,
scheduler-ephemeral-toggle, user-configured-command-no-execsync
Engine-reliability (shard 1): lease-recovery-central-claim,
owning-node-unavailable-interactions, todo-inprogress-flapping
CLI (shard 3): extension.test.ts
Each has a matching entry in scripts/lib/test-quarantine.json with the
failing CI run link and quarantinedAt date. Tests will be deleted
after 14 days unless rescued with a root-cause fix.
2026-06-26 21:49:32 -07:00
gsxdsm
d9b17dea01
FN-7086: default dirty checkout merge sync
...
Default AI merge landing to preserve legacy dirty-checkout synchronization for new and partially configured projects.
- Default resolved project merger settings to allow dirty local checkout sync while preserving explicit false values.
- Pass the resolved dirty-checkout sync policy through single-repo and workspace AI merge landing paths.
- Update settings UI defaults, type docs, regression coverage, and release notes for the new behavior.
Files changed:
.changeset/fn-7086-allow-dirty-sync-default.md | 7 ++++
packages/core/src/__tests__/store-settings.test.ts | 40 ++++++++++++++++++++++
packages/core/src/settings-schema.ts | 6 +++-
packages/core/src/store.ts | 12 +++++++
packages/core/src/types.ts | 6 ++--
.../dashboard/app/components/SettingsModal.tsx | 2 +-
packages/engine/src/merger-ai.ts | 35 +++++++++++--------
7 files changed, 89 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-7086
Fusion-Task-Lineage: 65871e7c-af0c-45b9-af54-749d56dfadd5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-26 18:11:41 -07:00
gsxdsm
ad3149093a
FN-7077: inject configured MCP servers across agent surfaces
...
Configured MCP servers now follow every agent-work lane that launches model-backed tools.
- Thread MCP server forwarding through chat, task execution, tools, PR response, cron, memory, research, and planning surfaces.
- Add regression coverage for dashboard and engine lanes that previously omitted MCP server configuration.
- Document all covered MCP surfaces and add a published package changeset.
Files changed:
.changeset/fn-7077-mcp-all-surfaces.md | 7 +
docs/mcp.md | 3 +
docs/settings-reference.md | 2 +-
packages/cli/src/commands/__tests__/serve.test.ts | 3 +-
packages/core/src/memory-compaction.ts | 4 +
.../src/__tests__/mcp-lane-forwarding.test.ts | 62 +++++++++
packages/dashboard/src/agent-generation.ts | 4 +
packages/dashboard/src/ai-refine.ts | 8 ++
.../dashboard/src/milestone-slice-interview.ts | 11 +-
packages/dashboard/src/mission-interview.ts | 9 +-
packages/dashboard/src/pr-conflict-resolver.ts | 12 +-
packages/dashboard/src/routes.ts | 10 ++
packages/dashboard/src/subtask-breakdown.ts | 8 ++
packages/engine/src/__tests__/cron-runner.test.ts | 61 +++++++++
.../src/__tests__/mcp-lane-forwarding.test.ts | 3 +-
.../__tests__/mcp-pr-response-forwarding.test.ts | 110 ++++++++++++++++
.../src/__tests__/mcp-surface-coverage.test.ts | 141 +++++++++++++++++++++
packages/engine/src/agent-heartbeat.ts | 18 +++
packages/engine/src/cli-agent-ask.ts | 4 +
packages/engine/src/cron-runner.ts | 9 +-
packages/engine/src/pr-nodes.ts | 2 +-
packages/engine/src/pr-response-run-ops.ts | 10 +-
packages/engine/src/project-engine.ts | 2 +-
.../research/providers/llm-synthesis-provider.ts | 4 +
.../src/research/providers/web-search-provider.ts | 4 +
25 files changed, 497 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-7077
Fusion-Task-Lineage: 00d36357-c3d8-4954-b647-d3aea24a967b
2026-06-26 16:14:44 -07:00
gsxdsm
4f01c4dba1
FN-7075: backfill session models for token analytics
...
Backfill resolved pi session models so token analytics can show every model bucket.\n\n- Mirror explicit model overrides onto sessions that do not expose a model snapshot.\n- Cover multi-model token grouping totals and Command Center pie/table rendering.\n- Add a patch changeset for the dashboard token breakdown fix.\n\nFiles changed:\n .changeset/tidy-token-model-buckets.md | 7 ++++++\n .../core/src/__tests__/token-analytics.test.ts | 5 ++++\n .../areas/__tests__/TokensArea.test.tsx | 5 ++++\n .../src/__tests__/pi-create-fn-agent.test.ts | 28 ++++++++++++++++++++++\n packages/engine/src/pi.ts | 10 +++++++-\n 5 files changed, 54 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-7075
Fusion-Task-Lineage: 5f026435-5c3c-4e83-aab4-c1d7a487685a
2026-06-26 14:22:13 -07:00
gsxdsm
e89a58f276
FN-7066: schedule fixes for failed optional steps
...
Route failed pre-merge optional workflow steps back through executor remediation before review/merge.
- Add a graph-executor seam that schedules bounded executor fixes for pre-merge optional REVISE results.
- Track optional-step fix attempts with the existing post-review fix budget before falling back to advisory/gate behavior.
- Cover optional Code Review / Browser Verification fix scheduling and exhausted-budget behavior with engine tests.
- Document the pre-merge remediation semantics and add a release changeset.
Files changed:
.changeset/fn-7066-optional-step-fix.md | 7 +
docs/workflow-steps.md | 11 +-
packages/engine/src/__tests__/self-healing.test.ts | 43 +++++
.../workflow-graph-optional-group.test.ts | 206 +++++++++++++++++++++
.../workflow-graph-optional-step-fix.test.ts | 89 +++++++++
packages/engine/src/executor.ts | 50 ++++-
packages/engine/src/workflow-graph-executor.ts | 29 +++
packages/engine/src/workflow-graph-task-runner.ts | 5 +-
8 files changed, 436 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-7066
Fusion-Task-Lineage: 6b584293-4f2a-4851-a0d7-3ec9e68fe31a
2026-06-26 14:17:07 -07:00
gsxdsm
a61127de3b
FN-7070: harden self-healing fake overlap seams
...
Strengthen self-healing tests so TaskStore fakes cover overlap-related seams deterministically.
- Add a focused regression for active file-scope overlap preservation in clearStaleBlockedBy().
- Teach existing self-healing fake stores to expose parsed file-scope and completion-handoff seams.
- Adjust assertions around queued, soft-delete, retry-exhausted, and finalize recovery paths to preserve overlap blockers.
Files changed:
.../invariant-stranded-in-review-recovery.test.ts | 16 +++-
.../engine/src/__tests__/project-engine.test.ts | 6 ++
.../completion-fanout-x-self-healing.test.ts | 6 ++
...view-retry-exhausted-policy-convergence.test.ts | 11 ++-
.../self-healing-interactions.test.ts | 6 ++
...ker-auto-finalize-interactions.real-git.test.ts | 8 +-
.../soft-delete-deadlock-scan-exclusion.test.ts | 6 ++
.../self-healing-fake-overlap-seam.test.ts | 93 ++++++++++++++++++++++
.../self-healing-stale-merge-fanout.test.ts | 7 ++
9 files changed, 153 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-7070
Fusion-Task-Lineage: adb51873-9d8f-418f-ba60-c8a49601a552
2026-06-26 13:46:54 -07:00
gsxdsm
74d37785d2
FN-7069: reconcile phantom task reservations
...
Harden task-store startup and maintenance against phantom committed task reservations.
- Reconcile committed reservation phantoms without freeing reserved task IDs.
- Prune orphaned child rows and emit durable run-audit evidence.
- Normalize missing legacy task.json reads to clean not-found errors.
- Cover archive/search and phantom-reservation reconciliation behavior with tests.
Files changed:
.changeset/fn-7069-phantom-task-reconcile.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 2 +
.../src/__tests__/store-archive-search.test.ts | 5 +
.../store-phantom-reservation-reconcile.test.ts | 148 +++++++++++++++++++++
packages/core/src/store.ts | 106 ++++++++++++++-
packages/engine/src/self-healing.ts | 14 ++
7 files changed, 282 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-7069
Fusion-Task-Lineage: 772aad37-db30-4310-a968-c6e5306c73bb
2026-06-26 13:39:33 -07:00
gsxdsm
0afc66b6be
FN-7068: rescue quarantined flaky tests
...
Rescue quarantined dashboard and engine tests before the deletion deadline.
- Realign the DevServerView mobile CSS test with split mobile rules and balanced at-rule extraction.
- Complete FN-5488 self-healing TaskStore fakes for overlap-scope paths.
- Remove rescued dashboard and engine tests from quarantine configs and the ledger.
Files changed:
.../__tests__/DevServerView.mobile.test.tsx | 74 ++++++++++++++++++----
packages/dashboard/vitest.config.ts | 8 +--
...in-review-merge-stall-deadlock-recovery.test.ts | 7 ++
...f-healing-fn-5488-fast-path-regressions.test.ts | 6 ++
packages/engine/vitest.config.ts | 8 +--
scripts/lib/test-quarantine.json | 18 +-----
6 files changed, 79 insertions(+), 42 deletions(-)
Fusion-Task-Id: FN-7068
Fusion-Task-Lineage: b40a551f-8981-49a1-86a3-660f08cceb94
2026-06-26 13:32:35 -07:00
gsxdsm
31d3f21e18
FN-7065: add deterministic Fusion co-author trailers
...
Fusion now applies co-author attribution through merge and worktree plumbing instead of relying on prompt-written commit messages.
- Add commit-msg hook support for deterministic Co-authored-by trailers with configured Fusion identity.
- Propagate commit attribution settings through native and worktrunk worktree backends.
- Backfill AI squash merge trailers with Fusion task metadata and co-author attribution.
- Document the settings behavior and add a patch changeset for published CLI behavior.
- Cover hook, executor, AI merge, and real-git trailer behavior with tests.
Files changed:
.changeset/fn-7065-co-author-trailer.md | 7 +++
docs/settings-reference.md | 6 +--
packages/engine/src/__tests__/merger-ai.test.ts | 43 +++++++++++++++++++
.../real-git/commit-msg-trailer.real-git.test.ts | 50 ++++++++++++++++++++++
.../engine/src/__tests__/worktree-hooks.test.ts | 15 +++++++
packages/engine/src/executor.ts | 4 ++
packages/engine/src/merger-ai.ts | 22 ++++++++--
packages/engine/src/step-session-executor.ts | 3 ++
packages/engine/src/worktree-acquisition.ts | 3 ++
packages/engine/src/worktree-backend.ts | 13 +++++-
packages/engine/src/worktree-hooks.ts | 33 +++++++++++++-
11 files changed, 190 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-7065
Fusion-Task-Lineage: 4f5cd0ff-7193-4f97-bdcd-4cd78c7669b9
2026-06-26 13:13:46 -07:00
gsxdsm
fa4ee607b7
chore(release): v0.49.0
...
Version bump via changesets.
2026-06-26 12:06:05 -07:00
gsxdsm
f685518a93
FN-7064: discover MCP servers in settings
...
Add read-only MCP discovery with settings UI controls that keep discovered secrets bound to Fusion secret references.
- Add core MCP discovery source resolution and parsing for supported global and project tool configs.
- Expose discovered MCP server candidates through the dashboard API and engine discovery service.
- Surface discovered servers in global and project MCP settings with explicit add flows and configured-state handling.
- Require discovered sensitive env/header/token descriptors to stay locked until bound or created as Fusion secret references.
- Document discovery behavior and add a published package changeset.
Files changed:
.changeset/fn-7064-mcp-auto-discovery.md | 7 ++
docs/dashboard-guide.md | 3 +-
docs/mcp.md | 53 ++++++++-
docs/settings-reference.md | 4 +-
packages/core/src/__tests__/mcp-discovery.test.ts | 74 ++++++++++++
packages/core/src/index.ts | 7 ++
packages/core/src/mcp-discovery.ts | 125 ++++++++++++++++++++
.../__tests__/SettingsModal.mcp.test.tsx | 76 +++++++++++-
.../settings/sections/McpServersCard.css | 34 +++++-
.../settings/sections/McpServersCard.tsx | 130 ++++++++++++++++++++-
.../src/__tests__/mcp-discovered-route.test.ts | 109 +++++++++++++++++
packages/dashboard/src/routes.ts | 46 ++++++++
.../src/__tests__/mcp-discovery-service.test.ts | 60 ++++++++++
packages/engine/src/index.ts | 1 +
packages/engine/src/mcp-discovery-service.ts | 65 +++++++++++
15 files changed, 782 insertions(+), 12 deletions(-)
Fusion-Task-Id: FN-7064
Fusion-Task-Lineage: ef5dc53f-f8d1-4cc8-bdaf-e98d63ee8406
2026-06-26 11:56:12 -07:00
gsxdsm
3ee47dec86
merge: integrate origin/main into feature/workflow-steps (FN-7039)
...
Resolve conflicts from 56 upstream commits:
- db.ts: renumber my migrations around main's new migration 130 (columnDwellMs) —
enable-id normalization 130→131, drop-table 131→132, SCHEMA_VERSION→132.
- index.ts / routes.ts: take main's new MCP exports/imports; keep WORKFLOW_STEP_TEMPLATES
array removed (kept the WorkflowStepTemplate type).
- merger.ts: keep the legacy post-merge execution path removed (U7c) over main's version.
- ci-workflow.test.ts (from main): add port-4040/process-supervisor allowlist markers to
the gate-script assertions that reference the checker filenames (pre-existing self-match).
Gate green (engine-core 299, ci-shape 62); boot smoke PASS; migration tests + typecheck clean.
2026-06-26 08:50:22 -07:00
gsxdsm
005322eeaa
fix(review): address PR #1788 review feedback
...
- workflow-graph-executor: wrap each post-merge walk() in try/catch so a malformed
post-merge IR / traversal error is logged and skipped, never flipping an already-
merged task to failed (non-blocking post-merge contract) [T9, real bug].
- Refresh stale FNXC comments now that graphNativePostMerge is default-ON and the
legacy merger post-merge path was removed (experimental-features, workflow-graph-
executor, workflow-graph-post-merge.test) [T6/T7/T8].
- Normalize FNXC timestamps to yyyy-MM-dd-hh:mm (TaskCard.test, taskProgress.test) [T2/T3].
- Changeset: category fix → feature to match the minor bump [T0].
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 08:40:59 -07:00
gsxdsm
2b554142f5
FN-7056: guard configured commands against execSync
...
Add a focused engine regression guard for user-configured command paths.
- Add a static Vitest registry that slices protected configured-command helpers and fails on execSync usage.
- Assert each protected command path keeps bounded async safeguards such as timeout, maxBuffer, or maxLifetimeMs.
- Document the guard and its deliberate git-plumbing exclusions in the testing guide.
Files changed:
docs/testing.md | 5 +
.../user-configured-command-no-execsync.test.ts | 288 +++++++++++++++++++++
2 files changed, 293 insertions(+)
Fusion-Task-Id: FN-7056
Fusion-Task-Lineage: b92f19cf-526e-4345-b18e-869a278e0e10
2026-06-26 04:11:04 -07:00
gsxdsm
8131d541ca
FN-7038: add live automation run output
...
Add configurable automation tool access with live manual-run streaming for schedules and routines.
- Add an automation tool allowlist model and dashboard selectors for AI prompt steps.
- Stream manual automation and routine run progress, output, step updates, and tool events over SSE.
- Surface live run transcripts in automation/routine cards and document the operator workflow.
- Cover validation, runner callbacks, API streaming, and UI behavior with targeted tests.
Files changed:
.changeset/fn-7038-automation-tools-live-output.md | 7 +
docs/dashboard-guide.md | 9 +
packages/core/src/__tests__/automation.test.ts | 27 +-
packages/core/src/automation.ts | 18 +
packages/core/src/index.ts | 4 +-
packages/core/src/types.ts | 6 +
packages/dashboard/app/api/legacy.ts | 48 +++
packages/dashboard/app/components/RoutineCard.tsx | 16 +-
packages/dashboard/app/components/ScheduleForm.tsx | 53 ++-
.../app/components/ScheduleStepsEditor.tsx | 49 ++-
.../app/components/ScheduledTasksModal.tsx | 72 +++-
packages/dashboard/app/components/ScriptsModal.css | 79 ++++
.../app/components/__tests__/RoutineCard.test.tsx | 45 +++
.../app/components/__tests__/ScheduleForm.test.tsx | 100 +++++-
.../__tests__/ScheduleStepsEditor.test.tsx | 67 +++-
.../__tests__/ScheduledTasksModal.test.tsx | 36 +-
.../src/__tests__/routes-automation.test.ts | 151 +++++++-
packages/dashboard/src/routes.ts | 400 ++++++++++++++++++++-
packages/dashboard/src/server.ts | 7 +-
packages/engine/src/__tests__/cron-runner.test.ts | 56 ++-
.../src/__tests__/pi-create-fn-agent.test.ts | 44 +++
.../engine/src/__tests__/routine-runner.test.ts | 28 ++
packages/engine/src/cron-runner.ts | 20 +-
packages/engine/src/pi.ts | 32 +-
packages/engine/src/routine-runner.ts | 39 +-
packages/i18n/locales/en/app.json | 9 +
packages/i18n/src/resources.d.ts | 21 ++
27 files changed, 1374 insertions(+), 69 deletions(-)
Fusion-Task-Id: FN-7038
Fusion-Task-Lineage: 7f5871d0-1de0-4d22-a9c9-ee9418658677
2026-06-26 02:45:29 -07:00
gsxdsm
347842faca
refactor(FN-7039): drop the legacy workflow_steps table; remove all table readers
...
Final cutover — nothing reads workflow_steps at runtime, so migration 131 drops it.
- Removed the merger post-merge execution path entirely (runPostMergeWorkflowSteps,
hasEnabledPostMergeWorkflowSteps, executePostMerge{Prompt,Script}Step, post-merge
worktree helpers + call site). Graph owns post-merge.
- Executor recovery no longer reads getWorkflowStep().gateMode; gate-ness comes from the
recorded WorkflowStepResult.status.
- Removed store CRUD (create/update/deleteWorkflowStep), materializeWorkflowSteps, and
migrateLegacyWorkflowSteps; selectTaskWorkflow now seeds default-on optional-group node
ids (consistent with create-time). KEPT the plugin step-template palette (getWorkflowStep
plugin-only resolver / listWorkflowSteps plugin-only) — never touches the table.
Removed the dashboard migrate-legacy-steps route + editor migration UI.
- SCHEMA_VERSION 130→131; migration 131 DROP TABLE IF EXISTS workflow_steps; SCHEMA_SQL
table def removed; historical migrations 77/105/109/130 guarded with tableExists().
Proof nothing stranded: the graph executes IR nodes resolved from workflowId (never
stepIds/compiled rows) — materializeWorkflowSteps writes were vestigial. Full @fusion/core
suite (6290), reliability backstop (154), boot smoke, and a seed-at-130 drop test all pass
with the table gone.
Plan U7c.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 02:29:32 -07:00
gsxdsm
59fc94bc0f
FN-7054: fix slash skill request matching
...
Normalize requested skill identifiers so slash/catalog forms load the discovered bare skill across chat and agent sessions.
- Add requested-name matching keys for slash paths, SKILL.md paths, and source-qualified skill identifiers.
- Preserve execution-skill disable/exclude behavior and not-found diagnostics while applying the new matching only to requested names.
- Cover chat/agent requested skill paths with resolver and full flow tests and document supported /skill forms.
Files changed:
.changeset/fn-7054-skill-slash-names.md | 7 ++
docs/agents.md | 2 +-
docs/dashboard-guide.md | 2 +-
.../engine/src/__tests__/agent-skills-flow.test.ts | 42 +++++++++
.../engine/src/__tests__/skill-resolver.test.ts | 101 +++++++++++++++++++++
packages/engine/src/skill-resolver.ts | 23 ++++-
6 files changed, 170 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-7054
Fusion-Task-Lineage: 8d0f5c7d-9d8b-4b16-b24e-db6d2f6a464b
2026-06-26 01:38:57 -07:00
gsxdsm
9a2e8a7260
feat(FN-7039): graph is sole post-merge owner + migration 130 normalizes enable ids
...
Makes graph-native post-merge the default and cuts the merger's legacy post-merge
path over so post-merge runs exactly once (via the graph), with migration data prep.
- experimentalFeatures.graphNativePostMerge → default ON; merger
hasEnabledPostMergeWorkflowSteps/runPostMergeWorkflowSteps become inert when on
(no double-run; proven by a new no-double-run test). Merger code kept (U7c removes it).
- Migration 130 (SCHEMA_VERSION 129→130) rewrites each task's enabledWorkflowSteps
entries that are legacy built-in pre-merge workflow_steps row ids → the optional-group
node id (browser-verification/code-review); dedupes; idempotent; identity-stable;
leaves node-ids/compiled/custom entries untouched. Table KEPT (U7c drops it).
- Investigation (real DBs): NO custom/plugin post-merge steps exist; the only post-merge
step is compound-engineering's 'document' graph node — so the merger no-op strands
nothing. Custom-step re-pointing was verified unnecessary and skipped.
Safe-to-drop in U7c still blocked by live readers: merger post-merge fns, store CRUD,
migrateLegacyWorkflowSteps/readConfig materialization (executor recovery reader is
already null-safe→advisory).
Plan U7b.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 01:30:24 -07:00
gsxdsm
194878dac9
feat(FN-7039): post-merge workflow steps run graph-native (flag-gated)
...
Adds graph-native post-merge step execution behind experimentalFeatures.graphNativePostMerge
(default OFF — byte-identical behavior until enabled). After a successful merge-attempt
(the merge seam awaits the merge Promise), the graph runs post-merge optional-group nodes
and records phase:"post-merge" results, non-blocking. The merge-region traversal hop is
inert when the flag is off, and empty for builtin:coding even flag-on (its merge exits only
reach merge-region nodes or end), so the parity oracle holds. Optional-group recording now
derives phase + log prefix from config.phase (defaults pre-merge). Adds postMergeOptionalGroupNode
factory for migration/custom workflows. Legacy merger post-merge path untouched (U7b cutover).
Plan U7a.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 01:09:45 -07:00
gsxdsm
6c94ee069c
FN-7023: forward MCP runtime config to AI lanes
...
Forward enabled MCP server configuration through AI session creation and validation paths.
- Resolve and materialize effective MCP servers with secret values at runtime for triage, execution, review, merge, evaluation, reflection, mission validation, and dashboard chat/planning lanes.
- Add runtime support guards, Claude CLI MCP config generation, and a dashboard validation route for MCP server reachability probes.
- Cover MCP forwarding, provider support behavior, settings resolution, validation, and pi extension config generation with targeted tests and docs.
Files changed:
.changeset/fn-7023-mcp-runtime-forwarding.md | 7 +
docs/agents.md | 2 +
docs/secrets.md | 1 +
docs/settings-reference.md | 6 +-
.../src/__tests__/mcp-lane-forwarding.test.ts | 79 +++++++++++
.../src/__tests__/mcp-validate-route.test.ts | 111 ++++++++++++++++
packages/dashboard/src/chat.ts | 3 +
packages/dashboard/src/planning.ts | 5 +
packages/dashboard/src/routes.ts | 90 ++++++++++++-
.../src/__tests__/mcp-lane-forwarding.test.ts | 95 ++++++++++++++
.../engine/src/__tests__/mcp-resolution.test.ts | 104 +++++++++++++++
.../src/__tests__/mcp-runtime-support.test.ts | 44 +++++++
.../src/__tests__/mcp-validation-service.test.ts | 69 ++++++++++
packages/engine/src/__tests__/pi.test.ts | 65 +++++++++
packages/engine/src/agent-reflection.ts | 3 +
packages/engine/src/agent-runtime.ts | 36 ++++-
packages/engine/src/agent-session-helpers.ts | 2 +
packages/engine/src/evaluator.ts | 3 +
packages/engine/src/executor.ts | 14 ++
packages/engine/src/index.ts | 3 +
packages/engine/src/mcp-resolution.ts | 81 ++++++++++++
packages/engine/src/mcp-runtime-support.ts | 41 ++++++
packages/engine/src/mcp-validation-service.ts | 146 +++++++++++++++++++++
packages/engine/src/merger-ai.ts | 5 +
packages/engine/src/merger.ts | 14 ++
packages/engine/src/mission-execution-loop.ts | 3 +
packages/engine/src/pi.ts | 44 +++++--
packages/engine/src/reviewer.ts | 3 +
packages/engine/src/runtime-resolution.ts | 8 +-
packages/engine/src/step-session-executor.ts | 6 +-
packages/engine/src/triage.ts | 5 +
packages/pi-claude-cli/index.ts | 20 ++-
packages/pi-claude-cli/src/mcp-config.ts | 65 ++++++++-
33 files changed, 1150 insertions(+), 33 deletions(-)
Fusion-Task-Id: FN-7023
Fusion-Task-Lineage: ea09c6c7-b3c3-4af6-9ca6-0ebbfec17139
2026-06-26 00:57:32 -07:00
gsxdsm
142bce0b93
fix(review): apply code-review fixes — dead code, step output/notes, seam-contract sync
...
From the U1-U6 code review (correctness/adversarial/reliability/maintainability):
- Delete dead code left by the runWorkflowSteps removal: parkTaskAfterWorkflowStepPause,
handleWorkflowRevisionRequest (+ createWorkflowRevisionFollowUpTask,
injectWorkflowRevisionInstructions), handleWorkflowStepFailure, the dead
partitionWorkflowRevisionFeedback export + its test, and 2 orphaned jsdocs;
reword 2 stale comments (executor.ts FN-6722, self-healing.ts jsdoc).
- Record step output/notes on graph workflow-step results: runGraphCustomNode now
emits contextPatch:{output,notes} so the Workflow tab shows real review feedback
and [pre-merge] revision logs carry detail (was always the fallback before).
- Sync the workflow-step seam contract: core (workflow-compiler SEAM_NAMES/order,
workflow-ir column map, builtin-workflow-prompts) now rejects the workflow-step
seam to match the engine's resolveSeamName, preventing a latent run-time crash on
a persisted/cloned def that core would otherwise parse.
Residual (tracked in the PR): re-introduce the FN-4343 per-step scope gate on the
graph path; the parked-failed recovery log wording; malformed-advisory->passed edge
case; recording for non-optional-group/split-branch step realizations.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 00:26:03 -07:00
gsxdsm
a7eb3c4dd8
refactor(FN-7039): delete WORKFLOW_STEP_TEMPLATES + legacy workflow-step management surface
...
U6: delete the built-in WORKFLOW_STEP_TEMPLATES catalog + its materializer
(getBuiltInWorkflowTemplate/ensureWorkflowStepForTemplate/toBuiltInWorkflowStep);
inline the browser-verification + code-review name/prompt/toolMode/gateMode into
their optional-group IR builders (node bytes unchanged); simplify
resolveEnabledWorkflowSteps to an identity-stable pass-through (no materialization,
so the optionalGroupIdSet collision guard is no longer needed). Plugin-contributed
step templates are kept as the editor palette.
U5: remove the legacy /api/workflow-steps REST surface (GET/POST/PATCH/DELETE +
/refine + /workflow-step-templates/:id/create), the dead client fns, and the
Settings management UI; GET /api/workflow-step-templates now serves plugin
templates only. The create-time optional-step toggles remain.
Scope: the workflow_steps store CRUD + table are intentionally KEPT — still consumed
by the engine (merger/recovery) and needed by U7's migration; their removal + the
table drop land in U7.
Plan U5 + U6.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-26 00:06:31 -07:00
gsxdsm
4dab2b6986
FN-7011: Exclude engine downtime from task timing
...
Exclude proven engine-process downtime from active task duration stats and badges.
- Persist a throttled engineLastActiveAt heartbeat while the scheduler is running and unpaused.
- Reconcile in-progress execution segment anchors on startup when downtime exceeds the poll threshold.
- Emit run-audit events for shifted and no-action downtime reconciliation outcomes.
- Cover core timing, dashboard badge behavior, scheduler heartbeat throttling, and self-healing audit metadata.
- Add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-7011-engine-downtime-timing.md | 7 +++
AGENTS.md | 1 +
.../src/__tests__/store-execution-timing.test.ts | 51 ++++++++++++++++++++++
packages/core/src/settings-schema.ts | 1 +
packages/core/src/store.ts | 28 ++++++++++++
packages/core/src/types.ts | 5 +++
.../app/utils/__tests__/taskTiming.test.ts | 16 +++++++
.../__tests__/scheduler-workflow-cutover.test.ts | 29 +++++++++++-
packages/engine/src/__tests__/self-healing.test.ts | 23 ++++++++++
packages/engine/src/run-audit.ts | 4 ++
packages/engine/src/scheduler.ts | 11 +++++
packages/engine/src/self-healing.ts | 21 +++++++++
12 files changed, 196 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-7011
Fusion-Task-Lineage: 44225b0a-0fa1-40be-812d-33fd5e446944
2026-06-25 23:35:31 -07:00
gsxdsm
f987470e6d
refactor(FN-7039): delete legacy runWorkflowSteps execution path; graph is sole executor
...
Removes the legacy workflow-step EXECUTION path now that the graph records results
(U2): delete runWorkflowSteps(), the workflow-step seam + runWorkflowStep primitive
(runtime-primitives, workflow-node-handlers, authoritative-driver), and the legacy
execute() step blocks. Keeps task.workflowStepResults + its store write path (the
graph's sink) and executeWorkflowStep/executeScriptWorkflowStep (reused by the graph).
- Watchdog recoverCompletedTask now re-enters via maybeExecuteWorkflowGraph so the
graph re-runs pending gates, records results, and owns the in-review/back-for-fix
transition (KTD-2).
- maybeExecuteWorkflowGraph fails CLOSED (parks) when a store lacks
getTaskWorkflowSelection AND the task has enabled pre-merge steps — closing the
FN-7039 silent-skip class without changing minimal-store implementation runs (KTD-5).
KNOWN GAP (follow-up): the FN-4343 per-step workflowStepScopeEnforcement leak check
lived only in runWorkflowSteps and is NOT yet replicated on the graph path. Merge-time
File Scope enforcement (FileScopeViolationError, squash overlap) is unaffected.
Plan U4.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-25 23:25:23 -07:00
gsxdsm
c61164853c
test(FN-7039): update stale visitedNodeIds fixtures for code-review optional-group
...
Prior WIP added a default-on code-review optional-group to builtin:coding on the
success path (execute -> browser-verification -> code-review -> review). 9 exact
visitedNodeIds expectations across 3 suites predated that node and were failing.
Updated expectations to match the real traversal (insert code-review in position).
No product code touched; no assertions weakened.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-25 22:38:12 -07:00
gsxdsm
cb1691f473
feat(FN-7039): record graph workflow-step results into task.workflowStepResults
...
Enabled optional-group nodes now upsert their outcome into the existing
task.workflowStepResults field keyed by node id, and emit [pre-merge] logs at
parity with the legacy runWorkflowSteps path. Disabled groups stay byte-inert.
Reuses the existing WorkflowStepResult type + store.updateTask path (no new
table/type/store method). Unblocks the unified progress bar for graph-run steps.
Plan U2.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-25 22:33:08 -07:00