Phil Larson
f76d2f3609
fix(engine): route review via explicit external checkout metadata
2026-07-01 16:26:54 -07:00
gsxdsm
f998fe3ffc
FN-7397: pass plugin context to lifecycle hooks
...
Ensure task lifecycle plugin hooks receive a PluginContext when fired through runtime event bridges.
- Append the plugin context for task-created, task-moved, and task-completed hooks when callers only provide raw lifecycle arguments.
- Preserve existing explicit-context hook calls and add coverage for loader and runner lifecycle dispatch paths.
- Cover Compound Engineering sync completion handling so taskStore is available in onTaskCompleted.
Files changed:
.changeset/fn-7397-plugin-hook-context.md | 7 +++
packages/core/src/__tests__/plugin-loader.test.ts | 52 +++++++++++++++++++++-
packages/core/src/plugin-loader.ts | 34 +++++++++++++-
.../engine/src/__tests__/plugin-runner.test.ts | 25 ++++++++++-
.../src/__tests__/sync.test.ts | 29 +++++++++++-
5 files changed, 141 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-7397
Fusion-Task-Lineage: 7661714c-cf2a-4f4d-bec1-fc6bc11c0613
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 15:39:34 -07:00
gsxdsm
19e59ec6c8
FN-7396: separate Anthropic OAuth routing paths
...
Separate Anthropic subscription OAuth execution from raw API-key and Claude CLI routing.
- Route subscription-backed Anthropic selections through a dedicated anthropic-subscription provider instead of raw anthropic API-key storage or implicit CLI execution.
- Preserve Anthropic OAuth refresh, status, usage, and re-login banner behavior across separated and legacy credential rows.
- Add dashboard and engine coverage for OAuth subscription auth, raw API-key isolation, and explicit Claude CLI routing.
- Document the separated Anthropic subscription, API-key, and CLI surfaces and add a release changeset.
Files changed:
.../fn-7396-anthropic-oauth-cli-api-paths.md | 7 ++
docs/dashboard-guide.md | 4 +-
docs/settings-reference.md | 12 ++-
.../__tests__/OAuthReloginBanner.test.tsx | 118 +++++++++++++++++++++
.../dashboard/src/__tests__/routes-auth.test.ts | 29 +++++
packages/dashboard/src/__tests__/usage.test.ts | 109 ++++++++++++++++++-
.../dashboard/src/routes/register-auth-routes.ts | 20 +++-
packages/dashboard/src/usage.ts | 21 +++-
packages/engine/src/__tests__/auth-storage.test.ts | 65 ++++++++++++
.../src/__tests__/pi-create-fn-agent.test.ts | 55 ++++++++--
packages/engine/src/auth-storage.ts | 61 +++++++++--
packages/engine/src/pi.ts | 70 ++++++++----
12 files changed, 521 insertions(+), 50 deletions(-)
Fusion-Task-Id: FN-7396
Fusion-Task-Lineage: f5f42a40-b855-46ad-b2ae-3509e903f286
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 15:39:34 -07:00
gsxdsm
775ff5fb9c
FN-7391: route Anthropic subscription chats through Claude CLI
...
Keep Anthropic OAuth subscription credentials away from the direct /v1 provider while preserving raw API-key routing.
- Treat direct anthropic auth as raw API-key-only in auth storage and model discovery.
- Re-route persisted anthropic model selections to the Claude CLI provider when no raw Anthropic API key is configured.
- Add regression coverage for OAuth-only routing, raw API-key preservation, and provider list separation.
- Document the distinct raw API key, OAuth subscription, and Claude CLI routes.
Files changed:
.../fn-7391-anthropic-subscription-cli-routing.md | 7 ++
docs/settings-reference.md | 2 +-
.../dashboard/src/__tests__/routes-auth.test.ts | 74 ++++++++++++++
.../dashboard/src/routes/register-model-routes.ts | 27 +++++-
packages/engine/src/__tests__/auth-storage.test.ts | 108 +++++++--------------
.../src/__tests__/pi-create-fn-agent.test.ts | 100 +++++++++++++++++++
packages/engine/src/auth-storage.ts | 45 ++++-----
packages/engine/src/pi.ts | 61 ++++++++++++
8 files changed, 319 insertions(+), 105 deletions(-)
Fusion-Task-Id: FN-7391
Fusion-Task-Lineage: d1fecc2d-7f31-408c-bf65-0e65b7fd88b1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 15:39:33 -07:00
gsxdsm
d7ee6ce87f
fix: tolerate recovered CE question ids ( #1855 )
...
## Summary
- add an opt-in `allowAnswerQuestionIdDrift` flag for interactive AI
sessions
- keep strict question-id validation by default
- enable the tolerance only for Compound Engineering recovered sessions
so persisted session rows can answer after dashboard
restarts/non-deterministic rehydration
## Test Plan
- `corepack pnpm --filter @fusion/engine exec vitest run
src/__tests__/interactive-ai-session.test.ts --silent=passed-only
--reporter=dot`
- `corepack pnpm --filter @fusion/engine typecheck`
- `corepack pnpm --filter @fusion-plugin-examples/compound-engineering
build`
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Bug Fixes**
* Improved interactive session recovery so persisted answers can
continue after dashboard restarts, even if the question ID changes
during rehydration.
* Keeps strict question-ID validation by default; mismatches still fail
unless drift is explicitly allowed.
* **New Features**
* Added `allowAnswerQuestionIdDrift` option to permit accepting the
persisted question ID during recovered session answering.
* **Tests**
* Added/updated coverage for strict mismatch error behavior and the
successful completion path when drift is enabled.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-01 15:21:17 -07:00
gsxdsm
14bb7a3707
feat(FN-7360): remove legacy workflow step engine
...
The step execution engine was already gone (runWorkflowSteps deleted,
workflow_steps table dropped in migration 132). This removes what remained:
the linear step compiler (compileWorkflowToSteps/validateLinearity/
WorkflowCompileError), which survived only as a validator + step-preview
generator.
parseWorkflowIr/validateV2 (which accepts branching graphs) is now the sole
workflow validity gate at save/select/refine and in the graph task runner.
Custom branching workflows are now selectable and run on the graph
interpreter instead of being rejected as non-linear.
- core: delete workflow-compiler.ts; rework store.validateWorkflowCompilable
onto parseWorkflowIr; move MERGE_REGION_NODE_KINDS into
workflow-lifecycle-validation; retag workflow-steps-to-ir as legacy lowering
- engine: drop the compiler double-validation in workflow-graph-task-runner
- dashboard: remove POST /api/workflows/:id/compile + client wrapper; drop the
interpreterOnly response field and editor banner; no post-save compile check
- i18n: remove the orphaned workflowNodes.interpreterOnly key across locales
- tests: reframe two workflow-selection tests whose premise inverted; fix a
pre-existing red in builtin-lead-generation (completion-summary node)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-01 11:28:03 -07:00
gsxdsm
af6e671e72
FN-7385: preserve live worktrees with fresh fallback
...
Preserve active worktree owners by retrying acquisition on a fresh sibling checkout.
- Add executor fallback that detects active cleanup refusals and creates bounded sibling branches in fresh generated worktrees.\n- Cover DB-only, same-task workflow-step, existing-branch, and exhausted-suffix conflict paths with regression tests.\n- Document the live worktree conflict fallback and add a patch changeset for the published CLI package.\n\nFiles changed:\n .../fn-7385-active-worktree-fresh-fallback.md | 7 +\n docs/architecture.md | 1 +\n .../__tests__/executor-worktree-conflict.test.ts | 103 +++++++++++++-\n .../engine/src/__tests__/executor-worktree.test.ts | 153 ++++++++++++++++++---\n packages/engine/src/executor.ts | 90 ++++++++----\n 5 files changed, 312 insertions(+), 42 deletions(-)
Fusion-Task-Id: FN-7385
Fusion-Task-Lineage: 02c31656-1248-49c0-9063-0750cc8e41c6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 10:55:57 -07:00
gsxdsm
d94c3591d3
FN-7381: honor project auto plan approval
...
Honor project-level auto plan approval across fresh and recovered triage finalization.
- Merge effective workflow settings during approved-task recovery before resolving the manual plan approval gate.
- Keep release authorization and Workflow Plan Review independent from manual plan approval bypasses.
- Add regression coverage for stored workflow approval settings overridden by project auto approval.
- Document the planApprovalMode precedence and release the fix as a patch.
Files changed:
.changeset/fn-7381-auto-plan-approval.md | 7 ++++
docs/settings-reference.md | 2 +-
docs/workflow-steps.md | 2 ++
.../src/__tests__/effective-settings-merge.test.ts | 12 +++++++
.../triage-plan-review-unavailable-retry.test.ts | 27 +++++++++++++-
packages/engine/src/__tests__/triage.test.ts | 42 ++++++++++++++++++++++
packages/engine/src/triage.ts | 13 ++++---
7 files changed, 99 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-7381
Fusion-Task-Lineage: c00fd0d9-ec0a-4dc5-8d6f-b49640157365
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 10:49:58 -07:00
gsxdsm
37027632e0
FN-7378: upgrade pi SDK dependencies
...
Upgrade the bundled pi SDK packages and compatibility imports for the 0.80.3 release.
- Bump @earendil-works/pi-ai and @earendil-works/pi-coding-agent consumers to ^0.80.3.
- Update pi SDK import paths for the new compatibility and API export map layout.
- Refresh dependency contract tests and add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-7378-pi-sdk-upgrade.md | 7 ++
packages/cli/package.json | 4 +-
packages/cli/src/__tests__/package-config.test.ts | 8 +-
packages/dashboard/package.json | 2 +-
packages/engine/package.json | 4 +-
.../custom-providers-openai-completions.test.ts | 8 +-
pnpm-lock.yaml | 108 ++++++++++-----------
7 files changed, 72 insertions(+), 69 deletions(-)
Fusion-Task-Id: FN-7378
Fusion-Task-Lineage: ed8847dc-2adf-4ede-aa75-045f2e2436a0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 10:37:44 -07:00
gsxdsm
427ce04a6f
FN-7374: stop advertising Claude Sonnet 5 statically
...
Stop Fusion from statically offering Claude Sonnet 5 when account availability is unknown.
- Remove the supplemental direct Anthropic Claude Sonnet 5 model registration and static pricing row.
- Keep Claude CLI supplemental metadata from force-adding Sonnet 5 while preserving other extra Claude models.
- Update model registry, pricing, adapter, and provider tests to expect unavailable or upstream-only Sonnet 5 handling.
- Add a patch changeset for the operator-facing fix.
Files changed:
.changeset/fn-7374-anthropic-sonnet-5-404.md | 7 ++++++
packages/core/src/__tests__/model-pricing.test.ts | 20 +++++++---------
packages/core/src/anthropic-models.ts | 24 +++----------------
packages/core/src/model-pricing.ts | 11 ++-------
.../dashboard/src/__tests__/routes-auth.test.ts | 13 ++++++----
.../src/__tests__/pi-create-fn-agent.test.ts | 28 ++++++----------------
.../src/cli-agent/adapters/__tests__/pi.test.ts | 6 ++---
packages/pi-claude-cli/index.ts | 13 ++--------
.../src/__tests__/process-manager.test.ts | 4 ++--
.../pi-claude-cli/src/__tests__/provider.test.ts | 12 ++--------
10 files changed, 44 insertions(+), 94 deletions(-)
Fusion-Task-Id: FN-7374
Fusion-Task-Lineage: 9c498bb4-c4c1-4dd8-ae80-869dfb1d4c2c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 10:23:39 -07:00
gsxdsm
919420e11a
FN-7373: enforce active worktree cap
...
Enforce maxWorktrees at the task-store transition boundary so active execution worktrees cannot exceed the operator cap.
- Reject allocated moves into in-progress when existing active or pending holders already meet maxWorktrees.
- Count in-progress tasks and pending in-progress transitions while excluding the task being moved.
- Cover scheduler and hold-release paths with regression tests and document the hard-cap invariant.
- Add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-7373-max-worktrees-cap.md | 7 ++
docs/architecture.md | 2 +-
packages/core/src/__tests__/store-movement.test.ts | 80 +++++++++++++++++++++-
packages/core/src/store.ts | 50 ++++++++++++++
packages/engine/src/__tests__/hold-release.test.ts | 52 ++++++++++++++
.../__tests__/scheduler-workflow-cutover.test.ts | 53 ++++++++++++++
6 files changed, 242 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-7373
Fusion-Task-Lineage: be4a9649-f6ae-475f-9395-07433e98de5c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 10:18:32 -07:00
gsxdsm
12ee9a92d2
FN-7361: add exact tool permission overrides
...
Add exact tool-name permission overrides for permanent agent tool usage.
- Add persisted toolRules policy support with normalization, project-default inheritance, and escalation comparison.
- Enforce exact tool dispositions before category rules in engine gating and permanent-agent decisions.
- Extend the permission editor, agent/settings routes, translations, docs, and tests for fine-grained tool controls.
Files changed:
.changeset/fn-7361-tool-permissions.md | 7 +
docs/agents.md | 18 ++-
docs/settings-reference.md | 12 +-
.../agent-permission-policy-resolution.test.ts | 58 +++++++-
.../src/__tests__/agent-permission-policy.test.ts | 17 +++
...settings-schema-agent-permission-policy.test.ts | 6 +-
packages/core/src/agent-permission-policy.ts | 87 ++++++++++--
packages/core/src/index.ts | 2 +-
packages/core/src/types.ts | 19 ++-
.../dashboard/app/components/AgentDetailView.tsx | 17 +--
.../app/components/AgentPermissionPolicyEditor.css | 59 +++++++-
.../app/components/AgentPermissionPolicyEditor.tsx | 156 ++++++++++++++++++++-
.../__tests__/AgentPermissionPolicyEditor.test.tsx | 92 +++++++++++-
.../settings/sections/AgentPermissionsSection.tsx | 6 +-
.../dashboard/src/__tests__/routes-agents.test.ts | 79 +++++++++++
.../src/__tests__/routes-settings.test.ts | 21 +++
.../src/routes/register-agent-core-routes.ts | 37 +++--
.../agent-action-gate-project-default.test.ts | 34 +++++
.../engine/src/__tests__/agent-action-gate.test.ts | 43 ++++++
.../src/__tests__/gating-classifications.test.ts | 55 ++++++++
packages/engine/src/agent-action-gate.ts | 17 ++-
packages/engine/src/permanent-agent-gating.ts | 11 +-
packages/i18n/locales/en/app.json | 15 +-
packages/i18n/locales/es/app.json | 15 +-
packages/i18n/locales/fr/app.json | 15 +-
packages/i18n/locales/ko/app.json | 15 +-
packages/i18n/locales/zh-CN/app.json | 15 +-
packages/i18n/locales/zh-TW/app.json | 15 +-
28 files changed, 878 insertions(+), 65 deletions(-)
Fusion-Task-Id: FN-7361
Fusion-Task-Lineage: 006e4311-91a5-4792-9a54-feaba892129a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 09:45:30 -07:00
Phil Larson
ad8db59374
fix: tolerate recovered CE question ids
2026-07-01 09:41:20 -07:00
gsxdsm
67f93cedd9
FN-7370: show thinking effort in model log markers
...
Display configured thinking effort alongside runtime task-log model markers.
- Add a shared formatter for model marker annotations and use it for triage, executor, reviewer, and workflow-step logs.
- Teach dashboard model parsing to ignore parenthesized marker diagnostics while preserving provider/model resolution.
- Cover thinking-effort markers with engine and dashboard tests, docs, and a patch changeset.
Files changed:
.changeset/fn-7370-thinking-effort-model-logs.md | 7 +++
docs/agents.md | 2 +
packages/dashboard/app/components/TaskChatTab.tsx | 7 +--
.../app/components/__tests__/TaskChatTab.test.tsx | 6 +--
...skDetailModal.models-progress-workflow.test.tsx | 6 +--
.../__tests__/WorkflowResultsTab.test.tsx | 6 +--
.../__tests__/effective-model-resolution.test.ts | 17 ++++--
.../app/components/effective-model-resolution.ts | 23 +++++---
.../src/__tests__/executor-model-marker.test.ts | 62 ++++++++++++++++++++++
.../engine/src/__tests__/executor-test-helpers.ts | 4 ++
.../__tests__/executor-workflow-step-model.test.ts | 23 +++++++-
packages/engine/src/__tests__/pi.test.ts | 12 ++++-
packages/engine/src/__tests__/reviewer.test.ts | 37 +++++++++++++
packages/engine/src/__tests__/triage.test.ts | 20 ++++++-
packages/engine/src/executor.ts | 17 ++++--
packages/engine/src/pi.ts | 19 +++++++
packages/engine/src/reviewer.ts | 7 +--
packages/engine/src/triage.ts | 4 +-
18 files changed, 244 insertions(+), 35 deletions(-)
Fusion-Task-Id: FN-7370
Fusion-Task-Lineage: 2c94a20c-77e1-41db-8af0-76239b30e3c4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 09:30:00 -07:00
gsxdsm
24279c9aee
fix(FN-7360): trust landed task merge proof
...
Auto-merge finalization now ignores stale branch-only residue once durable merge proof exists, so squash-landed tasks do not stay stuck in review because their task branch history is noisy.
Fusion-Task-Id: FN-7360
2026-07-01 09:06:01 -07:00
gsxdsm
88bcbce0fe
fix(FN-7360): prevent contaminated task branch bases
...
Pin fresh task worktree creation to the resolved integration branch when no explicit executionStartBranch is present, so ambient root checkout state cannot leak sibling task commits into new branches.
Use task baseCommitSha for merge-finalization branch proof when available, allowing already-landed mergeConfirmed tasks to finalize even if historical branch ancestry contains foreign commits.
Fusion-Task-Id: FN-7360
2026-07-01 08:39:58 -07:00
gsxdsm
62c58402ff
fix(workflow): raise step review timeout default
2026-07-01 08:22:04 -07:00
gsxdsm
62c4aae038
FN-7358: recover Sonnet 5 chat fallbacks
...
Recover Sonnet 5 chat sends by applying configured fallback models and clearer failure context.
- Allow explicit dashboard chat model selections to use the configured fallback on retryable provider/model failures.
- Preserve selected provider/model context in no-fallback chat errors so operators can identify unavailable models.
- Expand provider not-found detection and regression coverage for Anthropic Sonnet 5 404 payloads.
- Document fallback behavior and add the published package changeset.
Files changed:
.changeset/fn-7358-sonnet-5-response-failed.md | 7 +++
docs/settings-reference.md | 2 +-
.../dashboard/src/__tests__/chat-manager.test.ts | 71 +++++++++++++++++++---
packages/dashboard/src/chat.ts | 67 +++++++++++++++++---
packages/engine/src/__tests__/pi.test.ts | 71 +++++++++++++++++++++-
.../src/__tests__/transient-error-detector.test.ts | 4 ++
packages/engine/src/pi.ts | 4 +-
packages/engine/src/transient-error-detector.ts | 4 +-
8 files changed, 208 insertions(+), 22 deletions(-)
Fusion-Task-Id: FN-7358
Fusion-Task-Lineage: 095a3218-1d4a-4ccb-a8c9-c9f81822b084
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 07:33:56 -07:00
gsxdsm
b07105dbfb
fix(workflows): address workflow node PR feedback
2026-07-01 00:51:01 -07:00
gsxdsm
3a2f3b5ade
refactor(workflow): extract node runner boundaries
2026-07-01 00:51:01 -07:00
gsxdsm
d4ce6f9319
chore(release): v0.52.0
...
Version bump via changesets.
2026-07-01 00:47:09 -07:00
gsxdsm
8079722314
fix(FN-7291): retry fallback for provider model 404s
...
Classify structured provider model-not-found payloads as model-selection failures so configured fallback models run when Claude Sonnet 5 is unavailable on an account or API surface.
2026-07-01 00:33:38 -07:00
gsxdsm
33279538f0
fix(FN-7335): log pause abort recovery details
2026-06-30 23:45:01 -07:00
gsxdsm
234248a3cd
fix(FN-7335): retry active merge pause aborts
2026-06-30 23:45:01 -07:00
gsxdsm
a3ad0c8ecf
fix(FN-7335): keep fast completion summaries
2026-06-30 23:45:01 -07:00
gsxdsm
7d2bd9794e
FN-7337: make planner chats lazy and archive-scoped
...
Task planner chats now stay out of global chat history until a user interacts and are retained until task archive.
- Load task planner chat tabs with lookup-only resume before any user send.
- Show task-planner sessions in global Chat only after messages exist, including SSE refresh handling.
- Keep interacted planner chats for done tasks while deleting task-scoped planner sessions on archive.
- Cover chat store deletion, planner tab behavior, route filtering, and chat-list refresh with regression tests.
Files changed:
.changeset/fn-7337-planner-chat-retention.md | 7 ++
docs/dashboard-guide.md | 4 +-
packages/core/src/__tests__/chat-store.test.ts | 44 +++++++++
packages/core/src/chat-store.ts | 22 +++++
packages/dashboard/app/api/legacy.ts | 35 ++++++-
.../app/components/TaskPlannerChatTab.tsx | 13 ++-
.../__tests__/TaskPlannerChatTab.test.tsx | 91 +++++++++++++-----
.../dashboard/app/hooks/__tests__/useChat.test.ts | 41 ++++++++
packages/dashboard/app/hooks/useChat.ts | 15 ++-
.../dashboard/src/__tests__/chat-routes.test.ts | 105 +++++++++++++++++++++
.../dashboard/src/routes/register-chat-routes.ts | 17 +++-
packages/dashboard/src/server.ts | 10 +-
packages/engine/src/runtimes/in-process-runtime.ts | 8 ++
13 files changed, 378 insertions(+), 34 deletions(-)
Fusion-Task-Id: FN-7337
Fusion-Task-Lineage: 7ef9ed8f-af2e-4fa9-a2b6-0e8c8a805d5e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-30 23:45:01 -07:00
gsxdsm
e2702bab6b
feat(workflows): add reviewer inline fixes
2026-06-30 18:37:10 -07:00
gsxdsm
2335a07620
FN-7291: add Claude Sonnet 5 Anthropic support
...
Adds Claude Sonnet 5 to Anthropic model catalogs, pricing, and pi execution paths.
- Register supplemental direct Anthropic model metadata for Claude Sonnet 5 with deduping.
- Surface the model through dashboard model routes and engine session creation for non-Claude-CLI pi sessions.
- Add Claude CLI provider metadata, pricing coverage, tests, and a published package changeset.
Files changed:
.changeset/fn-7291-sonnet-5-anthropic.md | 7 ++
packages/core/src/__tests__/model-pricing.test.ts | 28 +++++
packages/core/src/anthropic-models.ts | 127 +++++++++++++++++++++
packages/core/src/index.ts | 7 ++
packages/core/src/model-pricing.ts | 13 ++-
.../dashboard/src/__tests__/routes-auth.test.ts | 67 +++++++++++
packages/dashboard/src/routes.ts | 6 +-
.../dashboard/src/routes/register-model-routes.ts | 5 +-
.../src/__tests__/pi-create-fn-agent.test.ts | 67 +++++++++++
.../src/cli-agent/adapters/__tests__/pi.test.ts | 16 +++
packages/engine/src/pi.ts | 2 +
packages/pi-claude-cli/index.ts | 13 +++
.../src/__tests__/process-manager.test.ts | 4 +-
.../pi-claude-cli/src/__tests__/provider.test.ts | 31 ++++-
14 files changed, 384 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-7291
Fusion-Task-Lineage: 6494fce8-4101-47f5-9137-306408fd7920
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-30 13:20:27 -07:00
gsxdsm
7e74fe3a9b
FN-7293: honor workflow review revision overrides
...
Allow workflow review steps to opt into unbounded or capped revision retries while keeping recovery caps accurate.
- Add workflow settings for Plan Review and Code Review max revisions with display, docs, and changeset coverage.
- Resolve optional-step revision budgets through workflow settings, node overrides, and existing fallback limits.
- Track revision attempts per workflow step and hydrate slim self-healing rows before enforcing retry caps.
- Cover unbounded, capped, per-step, and slim-row recovery behavior with focused tests.
Files changed:
.changeset/fn-7293-unbounded-review-revisions.md | 7 +
docs/settings-reference.md | 12 +-
docs/workflow-editor.md | 4 +-
docs/workflow-steps.md | 3 +-
.../builtin-workflow-settings-triage.test.ts | 28 +++-
.../core/src/__tests__/builtin-workflows.test.ts | 29 ++++-
.../__tests__/workflow-settings-resolver.test.ts | 73 +++++++++++
packages/core/src/builtin-plan-review-group.ts | 6 +-
packages/core/src/builtin-workflow-settings.ts | 30 +++++
packages/core/src/index.ts | 5 +
packages/core/src/workflow-ir-types.ts | 15 ++-
packages/core/src/workflow-ir.ts | 5 +-
packages/core/src/workflow-settings-resolver.ts | 49 ++++++-
.../__tests__/WorkflowSettingsPanel.test.tsx | 52 ++++++++
.../app/components/workflow-setting-display.ts | 18 +++
packages/engine/src/__tests__/self-healing.test.ts | 143 ++++++++++++++++++++-
.../workflow-graph-optional-step-fix.test.ts | 130 ++++++++++++++++++-
packages/engine/src/executor.ts | 77 +++++++++--
packages/engine/src/self-healing.ts | 82 ++++++++++--
packages/engine/src/workflow-graph-executor.ts | 5 +-
20 files changed, 725 insertions(+), 48 deletions(-)
Fusion-Task-Id: FN-7293
Fusion-Task-Lineage: 19ee533f-ab8d-4e20-9a27-9cf0cf6dfec9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-30 13:12:27 -07:00
gsxdsm
01e04333ce
FN-7294: pass user context into workflow reviewers
...
Pass operator-authored task context into reviewer and workflow gate prompts.
- Include de-duped user comments and legacy steering in Plan Review, code review, and workflow-step prompt agents.
- Preserve reviewer comment context on reduced context-limit retry prompts and refresh comments before in-session review calls.
- Document workflow prompt-agent comment behavior, add regression coverage, and add a patch changeset.
Files changed:
.changeset/FN-7294-reviewer-comment-context.md | 7 +
docs/workflow-steps.md | 7 +
.../src/__tests__/agent-user-comments.test.ts | 81 ++++++++--
.../executor-review-step-indexing.test.ts | 165 ++++++++++++++++++++-
.../src/__tests__/reviewer-workspace.test.ts | 39 +++++
packages/engine/src/__tests__/reviewer.test.ts | 26 +++-
packages/engine/src/__tests__/triage.test.ts | 49 ++++++
packages/engine/src/agent-user-comments.ts | 42 ++++--
packages/engine/src/executor.ts | 31 +++-
packages/engine/src/reviewer.ts | 10 +-
packages/engine/src/triage.ts | 20 ++-
11 files changed, 443 insertions(+), 34 deletions(-)
Fusion-Task-Id: FN-7294
Fusion-Task-Lineage: ea5ff33e-99ba-4fdd-9257-9778849b91bb
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-30 12:56:03 -07:00
gsxdsm
658b3511c7
FN-7293: scope external evidence to per-step review
2026-06-30 12:25:43 -07:00
gsxdsm
5f67c85fea
FN-7285: add workflow icons and trim built-in labels
...
Adds workflow icon metadata while preserving readable workflow names without built-in suffixes.
- Store and validate compact plain-text workflow icons across core APIs, imports, exports, tools, and analytics.
- Render Fusion marks for built-in workflows and custom text icons beside existing workflow labels on board, switcher, detail, and editor surfaces.
- Update workflow editor creation/copy flows, docs, release notes, and tests for icon metadata and shorter built-in names.
Files changed:
.changeset/fn-7285-workflow-icons.md | 7 ++
docs/dashboard-guide.md | 12 +--
.../cli/skill/fusion/references/extension-tools.md | 2 +
.../core/src/__tests__/builtin-workflows.test.ts | 8 +-
packages/core/src/__tests__/db-migrate.test.ts | 7 +-
.../core/src/__tests__/workflow-analytics.test.ts | 15 +--
.../__tests__/workflow-definition-store.test.ts | 31 ++++++
packages/core/src/builtin-workflows.ts | 20 ++--
packages/core/src/db.ts | 11 +-
packages/core/src/index.ts | 4 +
packages/core/src/store.ts | 24 ++++-
packages/core/src/workflow-analytics.ts | 7 +-
packages/core/src/workflow-definition-types.ts | 31 ++++++
packages/dashboard/app/api/legacy.ts | 2 +
packages/dashboard/app/components/Board.tsx | 18 ++--
packages/dashboard/app/components/Column.tsx | 2 +-
packages/dashboard/app/components/TaskCard.tsx | 7 +-
.../dashboard/app/components/TaskDetailModal.tsx | 20 ++--
packages/dashboard/app/components/WorkflowIcon.css | 42 ++++++++
packages/dashboard/app/components/WorkflowIcon.tsx | 49 +++++++++
.../app/components/WorkflowNodeEditor.css | 32 ++++++
.../app/components/WorkflowNodeEditor.tsx | 113 ++++++++++++++++-----
.../dashboard/app/components/WorkflowSwitcher.css | 9 ++
.../dashboard/app/components/WorkflowSwitcher.tsx | 15 ++-
.../dashboard/app/components/WorktreeGroup.tsx | 2 +-
.../app/components/__tests__/Board.test.tsx | 12 +--
.../app/components/__tests__/Lane.test.tsx | 6 +-
.../__tests__/WorkflowNodeEditor.test.tsx | 57 +++++++++--
.../components/__tests__/WorkflowSwitcher.test.tsx | 68 ++++++++-----
.../__tests__/board-mobile-initial-render.test.tsx | 2 +-
.../__tests__/CommandCenter.test.tsx | 4 +-
.../command-center/areas/WorkflowArea.tsx | 2 +
.../areas/__tests__/WorkflowArea.test.tsx | 6 +-
.../settings/sections/GeneralSection.tsx | 6 +-
.../register-command-center-routes.test.ts | 2 +-
.../__tests__/workflow-import-export.test.ts | 32 +++++-
packages/dashboard/src/routes/board-workflows.ts | 6 +-
.../src/routes/register-workflow-routes.ts | 32 +++++-
packages/engine/src/__tests__/agent-tools.test.ts | 4 +-
packages/engine/src/agent-tools.ts | 6 +-
40 files changed, 590 insertions(+), 145 deletions(-)
Fusion-Task-Id: FN-7285
Fusion-Task-Lineage: 0fa689a2-f19d-4d1b-9a40-cc0b2181200a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-30 12:21:25 -07:00
gsxdsm
9460497dd5
FN-7292: bridge Anthropic subscription auth into runtime requests
...
Anthropic model requests now resolve subscription OAuth credentials when no raw API key is present.
- Route Anthropic runtime auth through raw API keys, legacy OAuth, subscription OAuth, models.json, and fallback resolver sources with explicit logout precedence.
- Refresh subscription OAuth using the Anthropic OAuth provider while persisting rotated tokens under the subscription storage id.
- Cover subscription alias resolution, logout behavior, fallback visibility, refresh persistence, and reload behavior with auth-storage tests.
- Add a patch changeset for the published Fusion CLI package.
Files changed:
.../fn-7292-anthropic-subscription-runtime-auth.md | 7 +
packages/engine/src/__tests__/auth-storage.test.ts | 357 +++++++++++++++++++++
packages/engine/src/auth-storage.ts | 266 ++++++++++++---
3 files changed, 577 insertions(+), 53 deletions(-)
Fusion-Task-Id: FN-7292
Fusion-Task-Lineage: c98c2f1c-8297-4473-ba66-5b6320bc0c00
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-30 12:09:09 -07:00
gsxdsm
7eca99c8b1
FN-7283: clear optional workflow steps in fast mode
...
Fast mode now treats optional workflow steps as opt-out by default while preserving manual reselection.
- Clear default-on optional workflow steps when switching task creation forms into Fast mode.
- Submit explicit empty optional-step selections in Fast mode to prevent store defaults from reappearing.
- Allow explicitly enabled optional workflow groups to run under Fast mode and during recovery.
- Document the Fast-mode optional-step contract and add regression coverage for dashboard and engine flows.
Files changed:
.changeset/FN-7283-fast-mode-optional-steps.md | 7 ++
docs/workflow-steps.md | 15 ++-
packages/dashboard/app/components/NewTaskModal.tsx | 27 +++--
.../dashboard/app/components/QuickEntryBox.tsx | 29 ++++-
packages/dashboard/app/components/TaskForm.tsx | 42 +++++--
.../app/components/__tests__/NewTaskModal.test.tsx | 58 +++++++++
.../components/__tests__/QuickEntryBox.test.tsx | 84 +++++++++++++
.../app/components/__tests__/TaskForm.test.tsx | 85 ++++++++++++-
.../__tests__/executor-fast-mode-workflows.test.ts | 134 +++++++++++++++++++++
packages/engine/src/executor.ts | 107 ++++++++++------
packages/engine/src/workflow-graph-executor.ts | 14 ++-
11 files changed, 539 insertions(+), 63 deletions(-)
Fusion-Task-Id: FN-7283
Fusion-Task-Lineage: e7028af8-3d05-4db7-8db9-a16c7f7575de
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-30 09:46:26 -07:00
gsxdsm
4441b72bbc
fix(FN-7273): prevent stale step resume regressions
2026-06-30 08:07:40 -07:00
gsxdsm
5ec04ec5cb
fix(FN-7271): keep fast coding tasks from skipping implementation
2026-06-30 07:31:59 -07:00
gsxdsm
3e0391eada
FN-7267: expose MCP tools to planning sessions
...
Expose configured MCP session tools to read-only planning and mission lanes while keeping other read-only sessions locked down.
- Add an explicit allowMcpToolsInReadonly option to createFnAgent and apply it only to connected MCP tools.
- Opt planning, streaming planning, mission, milestone, and slice interview sessions into read-only MCP tools.
- Expand regression coverage for MCP forwarding, read-only filtering, and session tool disposal behavior.
- Document the read-only MCP opt-in model and add a published package changeset.
Files changed:
.changeset/fn-7267-planning-mission-mcp.md | 7 +++
docs/mcp.md | 4 +-
.../src/__tests__/mcp-lane-forwarding.test.ts | 4 ++
.../dashboard/src/milestone-slice-interview.ts | 4 ++
packages/dashboard/src/mission-interview.ts | 4 ++
packages/dashboard/src/planning.ts | 4 ++
.../src/__tests__/mcp-surface-coverage.test.ts | 25 +++++++-
.../src/__tests__/pi-create-fn-agent.test.ts | 67 ++++++++++++++++++++++
.../src/__tests__/pi-mcp-session-tools.test.ts | 6 +-
.../workflow-step-readonly-allowlist.test.ts | 17 +++++-
packages/engine/src/pi.ts | 17 +++++-
packages/engine/src/workflow-step-tool-policy.ts | 15 ++++-
12 files changed, 163 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-7267
Fusion-Task-Lineage: 8d9cac1a-edcc-453d-bda1-9abb58de7f86
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-30 00:09:36 -07:00
gsxdsm
41ff08a158
fix(FN-7261): prevent premature fast workflow merges
...
Block the merge requester when fast workflow traversal reaches merge before implementation steps are complete, and recover stale no-op merge proof by requeuing executable work instead of looping in blocked finalization.
Fusion-Task-Id: FN-7261
2026-06-29 23:36:34 -07:00
gsxdsm
eb83c81ffb
fix(FN-7265): align per-step review workflow
2026-06-29 23:25:17 -07:00
gsxdsm
cfd9d5b32e
test(FN-7249): cover phantom worktree recovery
2026-06-29 22:30:23 -07:00
gsxdsm
9e23d6c403
fix(FN-7265): stop duplicate graph plan reviews
2026-06-29 22:29:22 -07:00
gsxdsm
5a6d110483
fix(engine): stop phantom-reservation audit churn and preserve worktree on phantom reclaim
...
reconcilePhantomCommittedReservations emitted a task:reconcile-phantom-committed-reservation audit row every maintenance tick for the same orphaned committed reservations even when zero child rows were pruned (~19k no-op writes/day). Gate the audit emission on actual pruned work; the FN-7069 contract is unchanged (committed reservation stays committed so the ID is never reused).
clearPhantomExecutorBinding unconditionally unregistered held worktree paths from activeSessionRegistry, defeating the moveTask(preserveWorktree:true) the self-healing phantom reclaim pairs it with: re-dispatch then acquired a brand-new worktree instead of reattaching (FN-7249 lost its first worktree this way). Add a preserveWorktrees option that clears only the stale in-memory executor/lock bookkeeping and leaves the session-registry path entries intact; the self-healing caller opts in. Non-self-healing callers keep the default full-clear behavior.
2026-06-29 21:56:14 -07:00
gsxdsm
095007c640
fix(FN-7262): honor step session setting
2026-06-29 21:51:13 -07:00
gsxdsm
09687f723c
fix(FN-7261): confirm AI no-op merge finalization
2026-06-29 21:38:57 -07:00
gsxdsm
be9e231004
fix(FN-7248): skip completed steps on resume
2026-06-29 19:23:38 -07:00
gsxdsm
ed21597690
FN-7251: suppress missing skill-pattern info logs
...
Suppress non-actionable missing configured skill-pattern messages while preserving resolver diagnostics.
- Filter configured skill-pattern miss diagnostics out of pi runtime logging paths.
- Keep missing configured patterns available as resolver diagnostics for programmatic visibility.
- Cover direct skill resolution and fn-agent creation logging with regression tests.
- Add a patch changeset for the published Fusion CLI package.
Files changed:
.../fn-7251-suppress-missing-skill-pattern-logs.md | 7 +++
.../src/__tests__/pi-create-fn-agent.test.ts | 21 ++++++---
.../engine/src/__tests__/skill-resolver.test.ts | 50 ++++++++++++++++++----
packages/engine/src/pi.ts | 1 +
packages/engine/src/skill-resolver.ts | 13 ++++++
5 files changed, 78 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-7251
Fusion-Task-Lineage: 3c61c349-f216-410b-9ead-24c310bb2415
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-29 19:17:37 -07:00
gsxdsm
9fd286b1d3
fix(FN-7242): keep code review remediation recovering
2026-06-29 18:41:43 -07:00
gsxdsm
90b62b7884
FN-7246: preserve explicit empty step dependencies
...
Preserve authored empty workflow step dependencies so parallel roots remain independent.
- Keep parser and TaskStep projections from dropping explicit empty dependsOn arrays.
- Treat missing dependsOn as the legacy previous-step fallback while allowing [] to mean no dependencies.
- Cover heading and JSON parsers plus parallel foreach scheduling with regression tests and docs.
Files changed:
.changeset/fn-7246-workflow-depends-on-empty.md | 7 +++++++
docs/workflow-steps.md | 4 ++--
packages/core/src/__tests__/step-parsers.test.ts | 8 ++++----
packages/core/src/step-parsers.ts | 30 +++++++++++++++++++++---------
packages/core/src/types.ts | 13 +++++++++----
packages/engine/src/__tests__/workflow-parse-steps.test.ts | 12 ++++++++++++
packages/engine/src/__tests__/workflow-step-parallel.test.ts | 30 +++++++++++++++++++++++++++++-
packages/engine/src/workflow-graph-foreach.ts | 9 +++++++--
packages/engine/src/workflow-node-handlers.ts | 6 +++++-
9 files changed, 96 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-7246
Fusion-Task-Lineage: a75687fa-5711-4509-b60f-43669323a6c0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-29 18:05:44 -07:00
gsxdsm
6f2b8ab6e5
FN-7244: retry unavailable Plan Review without replanning
...
Preserve existing task specs when Plan Review retries after reviewer outages.
- Route plan-review-unavailable triage tasks through the Plan Review/finalization path instead of the planner.
- Validate existing PROMPT.md content and fail clearly when it is missing, empty, or invalid.
- Preserve retry status across interrupted triage work and cover retry behavior with engine tests.
- Document the retry lifecycle and add a patch changeset.
Files changed:
.../fn-7244-plan-review-unavailable-retry.md | 7 +
docs/architecture.md | 2 +
docs/workflow-steps.md | 2 +
.../triage-plan-review-unavailable-retry.test.ts | 251 +++++++++
packages/engine/src/__tests__/triage.test.ts | 604 +++++++++++++++++++++
packages/engine/src/triage.ts | 108 +++-
6 files changed, 945 insertions(+), 29 deletions(-)
Fusion-Task-Id: FN-7244
Fusion-Task-Lineage: 80e790e3-d2b9-4309-beec-3dbf6a03db39
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-29 17:40:00 -07:00
gsxdsm
72e50ac8c6
fix(artifacts): support task image artifact previews ( #1821 )
...
## Summary
Task image artifacts can now complete the full loop: agents and chat
flows can register base64 image bytes, and task details can display
those artifacts with an expandable preview instead of leaving them as
undiscoverable metadata.
This keeps binary payloads on the existing managed artifact storage
path, validates that base64 payloads are real non-empty image data, and
documents the new `dataBase64` field for engine-tool callers. The task
details artifacts gallery now treats image cards as expandable while
leaving document, audio, video, and generic artifact cards on their
existing behavior.
## Validation
- `pnpm --filter @fusion/dashboard exec vitest run
app/components/__tests__/TaskDocumentsTab.test.tsx
src/routes/__tests__/artifacts-route-integration.test.ts
--silent=passed-only --reporter=dot`
- `pnpm --filter @fusion/engine exec vitest run
src/__tests__/agent-artifact-tools.test.ts --silent=passed-only
--reporter=dot`
---
[](https://github.com/EveryInc/compound-engineering-plugin )

<!-- stage-review-badge-begin -->
---
<a href="https://stagereview.app/Runfusion/Fusion/pull/1821 ">
<picture>
<source media="(prefers-color-scheme: dark)"
srcset="https://stagereview.app/assets/gh-open-in-stage-dark.svg ">
<img src="https://stagereview.app/assets/gh-open-in-stage-light.svg "
alt="Open in Stage">
</picture>
</a>
<!-- stage-review-badge-end -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added inline base64 (`dataBase64`) support for registering image
artifacts from agent tools, including task-scoped chat registration.
* Task details now allow expanding image media artifacts in a preview
lightbox with accessible keyboard interaction.
* **Bug Fixes**
* Improved verification for media streaming by validating raw binary
responses; added HTTP 200/404 coverage for image endpoints.
* **Documentation**
* Updated `fn_artifact_register` tool documentation to include the
optional `dataBase64` parameter.
* **Tests**
* Added coverage for base64 validation/error handling and lightbox
expand/close behavior (including Escape and Tab focus trapping).
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-29 17:33:50 -07:00