Commit Graph

2810 Commits

Author SHA1 Message Date
gsxdsm
7745c59e63 FN-8880: align shared-member recovery consent tests
Align recovery expectations with the shared-member consent policy.

- Hold non-opted-in shared members when project auto-merge is off.
- Cover explicit per-task auto-merge opt-in during startup and self-healing recovery.
- Document the project-off consent rule for branch-group members.

Files changed:
 AGENTS.md                                          |  2 +-
 docs/architecture.md                               |  4 +-
 packages/engine/src/__tests__/project-engine.test.ts    | 41 +++++++++++------
 packages/engine/src/__tests__/self-healing.test.ts | 51 +++++++++++++++++++---
 4 files changed, 75 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-8880

Fusion-Task-Lineage: 3118064d-59ca-4c2e-89a8-442ee8876cf8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 02:41:02 -07:00
gsxdsm
ef99dcd1b0 FN-8894: model advancing clocks in oversight tests
Ensure TaskDetailModal mutation fixtures mirror server update timestamps.

- Add an advancing-clock task fixture helper for mutation responses
- Update desktop and mobile oversight control mocks to use newer task snapshots
- Cover equal-clock merge behavior and document the fixture contract

Files changed:
 docs/testing.md                                    |  6 ++
 .../TaskDetailModal.oversight-controls.test.tsx    | 74 +++++++++++++++++++++-
 .../TaskDetailModal.oversight-mobile.test.tsx      |  3 +-
 .../__tests__/TaskDetailModal.test-helpers.ts      | 15 +++++
 4 files changed, 94 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-8894

Fusion-Task-Lineage: 614eb85a-0fbf-4f44-a08d-347f2511499b

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 02:23:54 -07:00
gsxdsm
ccf2ffe93d FN-8854: document rebase settings and configuration audits
Document the worktree rebase controls and configuration audit surfaces.

- Describe worktree rebase defaults, remote resolution, and legacy pipeline reachability
- Explain configuration revisions and Activity Log query contracts
- Add source-aligned documentation contract coverage

Files changed:
 docs/diagnostics.md                                | 22 ++++-
 docs/settings-reference.md                         | 15 ++++
 .../configuration-audit-documentation.test.ts      | 94 ++++++++++++++++++++++
 3 files changed, 130 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-8854

Fusion-Task-Lineage: 5807280f-e1da-4847-8337-1c27c8ed695f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 02:06:44 -07:00
gsxdsm
d59c1b162f FN-8855: enforce configured PR checks before merging
Add configurable Fusion-side PR check gating across merge surfaces.

- Add project required-check settings, validation, UI controls, CLI support, and operator documentation.
- Evaluate configured checks before dashboard and CLI PR merges, accepting successful, skipped, and neutral checks.
- Bind merges to the evaluated PR head SHA to prevent push-and-merge races.
- Cover required-check policy and head-SHA merge behavior with tests.

Files changed:
 .changeset/fn-8855-required-checks.md              |   7 +
 docs/dashboard-guide.md                            |   5 +
 docs/settings-reference.md                         |   1 +
 .../src/commands/__tests__/task-lifecycle.test.ts  |  30 ++++-
 packages/cli/src/commands/task-lifecycle.ts        |  17 ++-
 .../core/src/__tests__/required-checks.test.ts     |  16 +++
 packages/core/src/config/index.ts                  |   1 +
 packages/core/src/config/required-checks.ts        |  16 +++
 packages/core/src/config/settings-schema.ts        |   1 +
 packages/core/src/index.ts                         |   1 +
 packages/core/src/types.ts                         |   6 +
 packages/core/src/types/settings/settings-scope.ts |   6 +
 packages/core/src/types/task/task-tracking.ts      |   5 +
 .../settings/__tests__/section-keys.test.ts        |   1 +
 .../app/components/settings/section-keys.ts        |   1 +
 .../settings/sections/MergeSection.search.ts       |   3 +
 .../components/settings/sections/MergeSection.tsx  |  30 ++++-
 .../__tests__/MergeSection.requiredChecks.test.tsx |  50 +++++++
 .../settings-default-descriptions.test.tsx         |   1 +
 packages/dashboard/src/__tests__/github.test.ts    | 123 +++++++++++++++++
 packages/dashboard/src/github.ts                   | 149 +++++++++++++--------
 .../dashboard/src/routes/register-git-github.ts    |  38 ++++--
 .../src/routes/register-task-workflow-routes.ts    |   8 +-
 packages/i18n/locales/en/app.json                  |   4 +-
 24 files changed, 441 insertions(+), 79 deletions(-)

Fusion-Task-Id: FN-8855

Fusion-Task-Lineage: 708e9c27-72be-4925-bf09-5db421bcaa67

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 01:33:06 -07:00
gsxdsm
9c43736794 FN-8870: add structural approval and report mail
Add typed report and approval metadata to the mailbox contract.

- Define and validate structural mail kinds, report sections, and approval references.
- Let agents send validated reports while reserving approval mail for engine emission.
- Emit idempotent, fail-soft approval notifications and document the contract.

Files changed:
 .changeset/fn-8870-structural-mail-contract.md     |   7 ++
 docs/agents.md                                     |   2 +
 docs/architecture.md                               |   4 +
 .../message-metadata-structural-mail.test.ts       |  25 ++++
 packages/core/src/index.gate.ts                    |   2 +-
 packages/core/src/index.ts                         |   2 +-
 packages/core/src/types.ts                         |  30 +++++
 packages/core/src/types/messaging/messages.ts      |  21 ++++
 ...gent-tools-send-message-structural-mail.test.ts |  34 +++++
 .../src/__tests__/approval-mail-emission.test.ts   | 137 +++++++++++++++++++++
 packages/engine/src/agent-heartbeat.ts             |   3 +
 packages/engine/src/agent-tools.ts                 |  28 ++++-
 packages/engine/src/agents/approval-mail.ts        |  40 ++++++
 packages/engine/src/executor.ts                    |   3 +
 14 files changed, 334 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-8870

Fusion-Task-Lineage: 7d30b2f9-c004-4975-86b1-9600e2c8d76f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 00:41:18 -07:00
gsxdsm
0e8d743064 FN-8867: prevent false task wedge notifications
Prevent stale terminal snapshots and pause markers from notifying for progressing tasks.

- Reclassify the live task immediately before claiming wedge episodes.
- Require actual pause state for pause-derived wedge reasons.
- Cover resumed-task races and stale pause markers with notification tests.
- Document the wedge notification behavior and add a patch changeset.

Files changed:
 .changeset/fn-8867-wedge-false-terminal-alerts.md  |   7 ++
 docs/agents.md                                     |   2 +-
 docs/architecture.md                               |   2 +-
 .../__tests__/notification-service.test.ts         |   9 +-
 .../__tests__/task-wedge-notification.test.ts      | 102 +++++++++++++++++++--
 .../src/notification/notification-service.ts       |  22 +++--
 .../src/notification/task-wedge-notification.ts    |  22 ++++-
 7 files changed, 137 insertions(+), 29 deletions(-)

Fusion-Task-Id: FN-8867

Fusion-Task-Lineage: c92c7735-e8b9-4979-8028-10a0555810f1

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 00:01:44 -07:00
gsxdsm
ec52a9131a FN-8859: add native roadmap embeds to chat
Enable roadmap structures to open, preview, and embed directly from chat and dashboard views.

- Register roadmap views as native structures with chat-reference support.
- Add composer previews, in-place dashboard embedding, and drag-safe interactions.
- Document the native-structure plugin contract and add coverage across supported surfaces.

Files changed:
 .changeset/fn-8859-roadmap-native-structure-embeds.md     |   7 +
 docs/PLUGIN_AUTHORING.md                           |   1 +
 docs/dashboard-guide.md                            |   6 +-
 packages/dashboard/app/components/MessageComposer.tsx   |  16 +-
 packages/dashboard/app/components/__tests__/MessageComposer.test.tsx  | 102 ++++++++++-
 packages/dashboard/app/components/__tests__/overflowViewRegistry.test.tsx | 68 +++++++-
 packages/dashboard/app/components/dashboard/MainContent.tsx | 22 ++-
 packages/dashboard/app/components/dashboard/__tests__/MainContent.native-structure-roadmap.test.tsx | 188 +++++++++++++++++++++
 packages/dashboard/app/components/nativeStructureChatRef.ts | 4 +-
 packages/dashboard/app/components/overflowViewRegistry.tsx | 34 ++--
 packages/dashboard/app/plugins/types.ts            |  10 +-
 packages/dashboard/app/utils/__tests__/nativeStructureDrag.test.ts | 46 +++--
 packages/dashboard/app/utils/nativeStructureDrag.ts | 18 +-
 plugins/fusion-plugin-roadmap/src/dashboard-view.tsx | 7 +-
 plugins/fusion-plugin-roadmap/src/dashboard/RoadmapsView.tsx | 22 ++-
 plugins/fusion-plugin-roadmap/src/dashboard/__tests__/RoadmapsView.test.tsx | 51 ++++++
 16 files changed, 560 insertions(+), 42 deletions(-)

Fusion-Task-Id: FN-8859

Fusion-Task-Lineage: 99a7292b-2a06-4325-8131-ca74431214e3

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 23:54:40 -07:00
gsxdsm
0a2fe913c6 FN-8863: fix standalone pre-merge remediation holds
Allow standalone tasks to recover from failed pre-merge steps when project auto-merge is disabled.

- Add a remediation-specific auto-merge hold for shared members and explicit user holds.
- Restore Plan Review replans and Code Review fix handoffs for standalone tasks.
- Cover hold behavior and document the operator-consent policy.

Files changed:
 .changeset/fn-8863-remediation-auto-merge-hold.md  |   7 ++
 docs/dashboard-guide.md                            |   2 +-
 packages/core/src/__tests__/task-merge.test.ts     |  38 ++++++++
 packages/core/src/index.gate.ts                    |   1 +
 packages/core/src/index.ts                         |   1 +
 packages/core/src/merge/task-merge.ts              |  18 ++++
 ...cutor-live-branch-group-auto-merge-hold.test.ts |  27 ++++++
 .../workflow-graph-optional-step-fix.test.ts       | 106 +++++++++++++++++++++
 packages/engine/src/executor.ts                    |  16 +++-
 9 files changed, 212 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-8863

Fusion-Task-Lineage: 930bf37a-3173-4a3b-84ca-575f7f5d94b9

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 23:34:41 -07:00
gsxdsm
fb125b6f5e FN-8852: exclude heartbeat writes from revision history
Prevent liveness bookkeeping from evicting real settings changes while making revision history pageable.

- Exclude engineLastActiveAt from project revision snapshots and preserve its live value during rollback.
- Add validated limit/offset paging with hasMore to configuration revision stores and the API.
- Cover heartbeat filtering, rollback compatibility, and paging contracts; document the behavior and add a patch changeset.

Files changed:
 .changeset/fn-8852-config-revision-heartbeat.md    |   7 +
 docs/settings-reference.md                         |   4 +
 docs/storage.md                                    |   6 +
 .../__tests__/configuration-revision-store.test.ts | 178 ++++++++++++++++++++-
 .../configuration-revision-heartbeat.pg.test.ts    | 118 ++++++++++++++
 .../async-configuration-revision-store.ts          |  46 ++++--
 .../src/config/configuration-revision-store.ts     |   9 +-
 packages/core/src/config/global-settings.ts        |   2 +-
 packages/core/src/config/settings-schema.ts        |  20 +++
 packages/core/src/index.gate.ts                    |   2 +-
 packages/core/src/index.ts                         |   2 +-
 packages/core/src/task-store/task-mutation-ops.ts  |  24 ++-
 packages/core/src/types.ts                         |   6 +
 packages/core/src/types/settings/settings-scope.ts |   3 +
 .../register-org-portability-routes.test.ts        |  19 ++-
 .../src/routes/register-org-portability-routes.ts  |  18 ++-
 16 files changed, 437 insertions(+), 27 deletions(-)

Fusion-Task-Id: FN-8852

Fusion-Task-Lineage: 46d5ac9d-d2c0-4294-a5f7-d228fcb341c9

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 23:16:01 -07:00
gsxdsm
65bf3097ff FN-8857: invalidate stale task dispatch routes
Clear persisted effective routes whenever an eligible task node override changes.

- Add route invalidation logic that preserves checkout-bound and explicit replacement routes.
- Cover in-memory and PostgreSQL task-update scenarios, including partial snapshot replacements.
- Document the dispatch snapshot invalidation behavior and add a patch changeset.

Files changed:
 .changeset/fn-8857-stale-effective-route.md        |   7 +
 docs/architecture.md                               |   6 +-
 docs/task-management.md                            |   4 +-
 .../__tests__/effective-route-invalidation.test.ts | 101 ++++++++++++++
 .../postgres/task-node-override.pg.test.ts         |  63 +++++++++
 ...ask-update-effective-route-invalidation.test.ts | 148 +++++++++++++++++++++
 packages/core/src/index.ts                         |   5 +
 .../core/src/mesh/effective-route-invalidation.ts  |  58 ++++++++
 packages/core/src/task-store/task-update.ts        |  40 ++++++
 9 files changed, 428 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-8857

Fusion-Task-Lineage: ab6c1a40-70b4-4501-ab34-771de288da10

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 23:05:29 -07:00
gsxdsm
75796ebe6f FN-8850: capture task completion recommendations
Capture bounded, task-ready executor follow-ups at accepted completion.

- Guide executor prompts to submit recommendations or an explicit empty list at completion.
- Enforce default and disabled recommendation caps in completion handling.
- Document recommendation behavior and cover prompt and validation contracts.

Files changed:
 .../fn-8850-populate-task-recommendations.md       |  7 +++
 docs/dashboard-guide.md                            |  2 +-
 packages/core/src/agents/agent-prompts.ts          | 16 ++++--
 .../__tests__/ephemeral-task-create-gate.test.ts   |  3 +-
 .../engine/src/__tests__/executor-prompt.test.ts   | 67 ++++++++++++++++++++++
 .../executor-task-recommendations.test.ts          | 39 ++++++++++++-
 packages/engine/src/executor.ts                    | 44 ++++++++++++--
 7 files changed, 162 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-8850

Fusion-Task-Lineage: 55a99d05-33fa-464c-869c-18a9cf7e495a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 22:49:02 -07:00
gsxdsm
72623ec804 FN-8837: fix pull-request merge retry recovery
Make pull-request merge failures retry safely and report actionable terminal states.

- Persist exponential retry backoff and schedule durable retry wakeups.
- Classify policy, transient, and non-retryable GitHub merge failures correctly.
- Clear retry state on successful merges and cover notifications and recovery paths.

Files changed:
 .changeset/fn-8837-pr-merge-retries.md             |   7 +
 docs/architecture.md                               |   1 +
 .../task-update-awaiting-approval-reason.test.ts   |   9 +
 packages/core/src/store.ts                         |   2 +-
 packages/core/src/task-store/task-update.ts        |   6 +-
 packages/core/src/types/task/task-core.ts          |   7 +-
 .../src/__tests__/merge-error-recovery.test.ts     | 440 ++++++++++++++++++++-
 .../engine/src/__tests__/ntfy-provider.test.ts     |  14 +
 .../engine/src/__tests__/webhook-provider.test.ts  |  15 +
 .../__tests__/notification-service.test.ts         |  48 +++
 .../src/notification/notification-service.ts       |  15 +-
 packages/engine/src/notification/ntfy-provider.ts  |  15 +-
 .../engine/src/notification/webhook-provider.ts    |   9 +-
 packages/engine/src/project-engine.ts              | 240 +++++++++--
 14 files changed, 781 insertions(+), 47 deletions(-)

Fusion-Task-Id: FN-8837

Fusion-Task-Lineage: a39b3491-d5cb-4509-b450-3e5671e0ba2d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 22:43:45 -07:00
gsxdsm
b3504f01a4 FN-8838: refresh automated PR heads before GitHub mutations
Refresh isolated automated PR heads against their target immediately before PR creation or merge.

- Rebase and lease-publish task and group heads at every automated GitHub boundary.
- Fail closed on concurrent head updates and reconcile retained refresh worktrees.
- Add lifecycle coverage and document the configurable integration remote.

Files changed:
 .changeset/fn-8838-refresh-pr-heads.md             |   7 +
 docs/settings-reference.md                         |   6 +
 .../task-lifecycle-refresh.integration.test.ts     | 438 ++++++++++++++++
 .../src/commands/__tests__/task-lifecycle.test.ts  | 309 ++++++++++-
 packages/cli/src/commands/daemon.ts                |   4 +-
 packages/cli/src/commands/dashboard.ts             |   4 +-
 packages/cli/src/commands/serve.ts                 |   4 +-
 packages/cli/src/commands/task-lifecycle.ts        | 581 +++++++++++++++++++--
 .../src/__tests__/group-merge-coordinator.test.ts  |  43 ++
 .../engine/src/merge/group-merge-coordinator.ts    |  34 +-
 packages/engine/src/merge/pr-nodes.ts              |  35 +-
 packages/engine/src/project-engine.ts              |  16 +-
 12 files changed, 1425 insertions(+), 56 deletions(-)

Fusion-Task-Id: FN-8838
Fusion-Task-Lineage: a9b9e800-7d73-441f-bc1b-2488d244e0b1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 22:35:59 -07:00
gsxdsm
1e5d80dd4d FN-8853: record all settings changes in Activity Log
Record all meaningful settings changes in the Activity Log.

- Replace the four-key listener allowlist with safe generic setting diffs.
- Exclude engine churn, redact sensitive values, and cap displayed summaries.
- Add regression coverage, diagnostics guidance, and a patch changeset.

Files changed: .changeset/fn-8853-settings-activity-coverage.md   |   7 ++
 docs/diagnostics.md                                |   4 +
 .../src/__tests__/settings-activity-log.test.ts    | 138 +++++++++++++++++++++
 packages/core/src/task-store/lifecycle-ops.ts      |  40 +++---
 packages/core/src/task-store/settings-activity.ts  |  95 ++++++++++++++
 5 files changed, 260 insertions(+), 24 deletions(-)

Fusion-Task-Id: FN-8853

Fusion-Task-Lineage: ea072564-0bf1-4a97-8dd8-cde5844b1055

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 21:10:13 -07:00
gsxdsm
7611ce7baa FN-8841: route Plan Review no-op verdicts to terminal close
Allow validated duplicate and no-op Plan Review verdicts to complete work without implementation dispatch.

- Add terminal no-op routes to built-in coding workflows and validate reviewer evidence.
- Persist close verdicts, safely hold failed terminalizations, and guard pause races.
- Document the verdict contract and cover route, validation, and completion behavior.
- Add a patch changeset for the published Fusion package.

Files changed:
 .changeset/fn-8841-plan-review-no-op.md            |   7 +
 docs/workflow-steps.md                             |  14 +
 .../core/src/__tests__/builtin-workflows.test.ts   |  24 ++
 packages/core/src/types/task/task-review.ts        |   7 +-
 packages/core/src/types/workflow/workflow-steps.ts |   2 +-
 .../src/workflows/builtin-coding-workflow-ir.ts    |   3 +
 .../src/workflows/builtin-plan-review-group.ts     |   3 +-
 .../builtin-stepwise-coding-workflow-ir.ts         |   3 +
 packages/core/src/workflows/builtin-workflows.ts   |   5 +
 .../engine/src/__tests__/plan-review-no-op.test.ts | 289 +++++++++++++++++++
 .../workflow-step-verdict-parsing.test.ts          |  18 ++
 packages/engine/src/executor.ts                    | 318 +++++++++++++++++----
 .../src/workflows/workflow-graph-executor.ts       | 103 ++++++-
 .../src/workflows/workflow-graph-task-runner.ts    |   6 +
 14 files changed, 741 insertions(+), 61 deletions(-)

Fusion-Task-Id: FN-8841

Fusion-Task-Lineage: bde2e001-9cd0-496e-8367-36540c9ac31d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 21:04:10 -07:00
gsxdsm
f36e23848f FN-8840: recognize duplicate redirects in task titles
Recognize exact duplicate redirects in either task title or PROMPT.md while preserving conflicting decisions for operator resolution.

- Resolve duplicate markers consistently across intake, scheduling, execution, dashboard, and replication paths.
- Accept task-ID prefixes beyond FN- and expose duplicate-marker state to the UI.
- Fail closed during stale-decision recovery when prompt, title, or persisted canonical redirects disagree.
- Add regression coverage and operator documentation for title-based redirects.

Files changed:
 .changeset/fn-8840-duplicate-title-redirect.md     |   7 ++
 docs/settings-reference.md                         |   2 +-
 docs/task-management.md                            |  11 +-
 .../__tests__/explicit-duplicate-marker.test.ts    |  30 ++++-
 .../src/__tests__/mesh-task-replication.test.ts    |   6 +
 .../src/duplicates/explicit-duplicate-marker.ts    |  66 ++++++++---
 packages/core/src/index.gate.ts                    |   3 +
 packages/core/src/index.ts                         |   3 +
 packages/core/src/mesh/mesh-task-replication.ts    |   2 +-
 ...-task-workflow-routes.awaiting-planning.test.ts |  78 +++++++++++--
 .../src/routes/register-task-workflow-routes.ts    |  26 ++++-
 .../executor-explicit-duplicate-recovery.test.ts   |  75 ++++++++++++
 .../__tests__/merged-intake-hold-column.test.ts    |  19 +++
 .../scheduler-explicit-duplicate-marker.test.ts    | 130 +++++++++++++++++++++
 .../self-healing-stale-duplicate-decision.test.ts  |  67 +++++++++++
 .../triage-explicit-duplicate-marker.test.ts       |  51 ++++++++
 packages/engine/src/execution/hold-release.ts      |  10 +-
 packages/engine/src/executor.ts                    |  11 +-
 packages/engine/src/scheduler.ts                   |  15 ++-
 packages/engine/src/self-healing.ts                |  55 ++++++---
 packages/engine/src/triage.ts                      |  98 +++++++++++++---
 21 files changed, 687 insertions(+), 78 deletions(-)

Fusion-Task-Id: FN-8840

Fusion-Task-Lineage: d08a3e84-1851-4fba-bfa9-507116ad6219

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 19:58:43 -07:00
gsxdsm
fe9fe88841 FN-8847: remove retired ephemeral-agent setting
Remove the obsolete ephemeral-agent compatibility setting across configuration, persistence, UI, and localization.

- Remove the setting from schemas, scoped settings, persistence helpers, and General settings UI.
- Update translations, settings documentation, and parity coverage for the retired option.
- Adjust scheduler, executor, dashboard, and PostgreSQL tests for the unconditional behavior.
- Add a patch changeset for @runfusion/fusion.

Files changed:
 .changeset/fn-8847-remove-ephemeral-setting.md     |  7 +++
 docs/settings-reference.md                         |  3 +-
 .../postgres/settings-persistence.pg.test.ts       | 14 ++++++
 .../core/src/__tests__/settings-parity.test.ts     | 20 ++++++--
 packages/core/src/config/settings-schema.ts        |  7 ---
 packages/core/src/task-store/settings-helpers.ts   | 14 ++++--
 packages/core/src/task-store/settings-ops.ts       | 11 +++--
 packages/core/src/types/settings/settings-scope.ts |  6 ---
 .../__tests__/SettingsModal.general.test.tsx       | 41 ++++-------------
 .../settings/sections/GeneralSection.tsx           | 17 -------
 .../settings-default-descriptions.test.tsx         |  6 ---
 .../src/__tests__/mission-start-routing.test.ts    | 34 ++++++--------
 ...executor-ephemeral-disabled-dispatch-gate.test.ts | 53 ++++++++--------------
 .../__tests__/scheduler-ephemeral-toggle.test.ts   | 30 +++++-------
 packages/i18n/locales/en/app.json                  |  2 -
 packages/i18n/locales/es/app.json                  |  2 -
 packages/i18n/locales/fr/app.json                  |  2 -
 packages/i18n/locales/ko/app.json                  |  2 -
 packages/i18n/locales/zh-CN/app.json               |  2 -
 packages/i18n/locales/zh-TW/app.json               |  2 -
 packages/i18n/src/resources.d.ts                   |  2 -
 21 files changed, 105 insertions(+), 172 deletions(-)

Fusion-Task-Id: FN-8847

Fusion-Task-Lineage: 8a067ec6-0ec7-4aef-a48e-604f821f35d2

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 19:13:14 -07:00
gsxdsm
b181f20859 FN-8848: show Recommendations for completed tasks
Keep the completed-task Recommendations destination available when no records exist.

- Render a localized empty state without task-creation controls.
- Preserve Recommendations selection until a task leaves the completed column.
- Cover empty states and shared detail entry points with dashboard tests.
- Document the behavior and add a patch changeset.

Files changed:
 .changeset/fn-8848-recommendations-empty-state.md  |  7 +++
 docs/dashboard-guide.md                            |  2 +-
 .../dashboard/app/components/TaskDetailModal.tsx   | 15 ++---
 .../app/components/TaskRecommendationsTab.css      |  5 ++
 .../app/components/TaskRecommendationsTab.tsx      |  5 +-
 .../TaskDetailModal.recommendations.test.tsx       | 21 +++++++
 .../__tests__/TaskDetailModal.summary-tab.test.tsx | 73 +++++++++++++++++++++-
 packages/i18n/locales/en/app.json                  |  1 +
 packages/i18n/locales/es/app.json                  |  1 +
 packages/i18n/locales/fr/app.json                  |  1 +
 packages/i18n/locales/ko/app.json                  |  1 +
 packages/i18n/locales/zh-CN/app.json               |  1 +
 packages/i18n/locales/zh-TW/app.json               |  1 +
 packages/i18n/src/resources.d.ts                   |  1 +
 14 files changed, 125 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-8848

Fusion-Task-Lineage: e200dfba-8113-4ede-a117-f94d221a8e7d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 19:03:14 -07:00
gsxdsm
168f7fb9cc FN-8834: clarify mission merge behavior and branch details
Clarify mission merge options and safely surface shared-branch status in Mission Manager.

- Reuse merge behavior guidance across mission create and edit forms.
- Add a manual mission-create link while preserving AI planning as the primary CTA.
- Guard branch-group details against stale or foreign mission data and cover the behavior with tests.
- Update localized copy, mission documentation, and the published-package changeset.

Files changed:
 .changeset/fn-8834-mission-merge-guidance.md       |   7 +
 docs/missions.md                                   |   2 +-
 packages/dashboard/app/components/MissionManager.css    |  26 ++
 packages/dashboard/app/components/MissionManager.tsx    | 169 +++++++++----
 packages/dashboard/app/components/__tests__/MissionManager.auto-merge.test.tsx   | 271 +++++++++++++++++++--
 packages/i18n/locales/en/app.json                  |   1 +
 packages/i18n/locales/es/app.json                  |   1 +
 packages/i18n/locales/fr/app.json                  |   1 +
 packages/i18n/locales/ko/app.json                  |   1 +
 packages/i18n/locales/zh-CN/app.json               |   1 +
 packages/i18n/locales/zh-TW/app.json               |   1 +
 packages/i18n/src/resources.d.ts                   |   1 +
 12 files changed, 411 insertions(+), 71 deletions(-)

Fusion-Task-Id: FN-8834

Fusion-Task-Lineage: 43b28c43-83d5-41cf-a9ec-0e91117ec091

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 10:36:36 -07:00
gsxdsm
d450dbe971 FN-8829: add task recommendations
Add persistent task recommendations that agents can create, resolve, and display in task details.

- Persist recommendation state and expose task recommendation API routes.
- Generate recommendations from executor task completions with duplicate suppression.
- Add localized dashboard recommendation tab and settings control with coverage.

Files changed:
 .changeset/fn-8829-recommendations.md              |   7 +
 docs/dashboard-guide.md                            |   1 +
 docs/settings-reference.md                         |   1 +
 .../postgres/settings-persistence.pg.test.ts       |  10 +
 .../postgres/task-recommendations.pg.test.ts       | 191 +++++++++
 .../core/src/__tests__/settings-parity.test.ts     |   2 +
 packages/core/src/config/settings-schema.ts        |   2 +
 packages/core/src/index.ts                         |   2 +-
 .../0047_fn_8829_task_recommendations.sql          |   3 +
 packages/core/src/postgres/schema-applier.ts       |  32 +-
 packages/core/src/postgres/schema/project.ts       |   2 +
 packages/core/src/store.ts                         |  12 +-
 packages/core/src/task-store/persistence.ts        |   4 +-
 packages/core/src/task-store/serialization.ts      |   1 +
 packages/core/src/task-store/settings-ops.ts       |  22 +
 packages/core/src/task-store/task-mutation-ops.ts  |  78 +++-
 packages/core/src/task-store/task-row-mappers.ts   |   2 +-
 packages/core/src/task-store/task-update.ts        |  51 ++-
 packages/core/src/types.ts                         |   4 +
 packages/core/src/types/settings/settings-scope.ts |   6 +
 packages/core/src/types/task/task-core.ts          |  18 +
 .../__tests__/App.openTasksInRightSidebar.test.ts  |   3 +-
 packages/dashboard/app/__tests__/api-tasks.test.ts |  31 ++
 packages/dashboard/app/api/legacy.ts               |   1 +
 packages/dashboard/app/api/tasks/tasks.ts          |  24 ++
 .../dashboard/app/components/TaskDetailModal.tsx   |  43 +-
 .../app/components/TaskRecommendationsTab.css      |  71 ++++
 .../app/components/TaskRecommendationsTab.tsx      | 127 ++++++
 .../__tests__/SettingsModal.general.test.tsx       |  11 +
 .../TaskDetailModal.recommendations.test.tsx       | 111 +++++
 .../app/components/settings/section-keys.ts        |   1 +
 .../settings/sections/GeneralSection.tsx           |  14 +
 .../settings-default-descriptions.test.tsx         |   1 +
 packages/dashboard/app/hooks/useModalManager.ts    |   6 +
 packages/dashboard/app/plugins/types.ts            |   7 +-
 .../__tests__/task-recommendation-routes.test.ts   | 472 +++++++++++++++++++++
 .../src/routes/register-task-workflow-routes.ts    | 263 +++++++++++-
 .../executor-task-recommendations.test.ts          | 128 ++++++
 packages/engine/src/executor.ts                    |  66 ++-
 packages/i18n/locales/en/app.json                  |  15 +-
 packages/i18n/locales/es/app.json                  |  16 +-
 packages/i18n/locales/fr/app.json                  |  16 +-
 packages/i18n/locales/ko/app.json                  |  16 +-
 packages/i18n/locales/zh-CN/app.json               |  16 +-
 packages/i18n/locales/zh-TW/app.json               |  16 +-
 packages/i18n/src/resources.d.ts                   |  12 +
 46 files changed, 1908 insertions(+), 30 deletions(-)

Fusion-Task-Id: FN-8829
Fusion-Task-Lineage: 5f60a1fb-9cf8-4577-9bfd-c20a2d402333
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-08 01:59:38 -07:00
gsxdsm
70a830d1ad FN-8830: backfill built-in workflow agent identities
Provision complete workflow-agent identities while preserving operator-owned configuration.

- Seed instructions, souls, and managed setup mirrors for canonical workflow owners.
- Repair sparse default owners and demote duplicate provenance without losing agent data.
- Cover provisioning recovery and identity preservation with PostgreSQL and engine tests.

Files changed:
 .changeset/fn-8830-workflow-agent-identities.md    |   7 +
 docs/agents.md                                     |  10 +
 ...nt-store-builtin-role-provisioning-pool.test.ts |  41 ++++
 .../postgres/agent-instructions.pg.test.ts         | 233 +++++++++++++++++++++
 packages/core/src/agents/agent-store.ts            | 167 ++++++++++++---
 .../src/agents/workflow-role-agent-defaults.ts     |  57 +++++
 packages/core/src/index.ts                         |   6 +
 .../src/__tests__/agent-instructions.test.ts       |  32 ++-
 8 files changed, 526 insertions(+), 27 deletions(-)

Fusion-Task-Id: FN-8830

Fusion-Task-Lineage: bdf75989-3282-4833-a8b6-8c2997af8363

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-07 23:55:08 -07:00
gsxdsm
15418d2936 FN-8831: document ephemeral agent default
Document the canonical enabled default for the routing-inert ephemeral-agent compatibility setting.

- Add the enabled default to Settings help and English localization.
- Cover the help text and canonical-default inventory with dashboard tests.
- Update operator documentation and add a patch changeset.

Files changed:
 .changeset/fn-8831-settings-default-description.md         |  7 +++++++
 docs/dashboard-guide.md                                    |  4 ++--
 .../components/__tests__/SettingsModal.general.test.tsx    | 14 ++++++++++++++
 .../app/components/settings/sections/GeneralSection.tsx    |  6 +++++-
 .../__tests__/settings-default-descriptions.test.tsx       | 12 +++++++++---
 packages/i18n/locales/en/app.json                          |  1 +
 6 files changed, 38 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-8831

Fusion-Task-Lineage: 11ab2275-cfbc-4778-ba0c-466520d2e0fc

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-07 23:31:59 -07:00
gsxdsm
36f20f835e FN-8822: prevent worktree capacity leaks
Keep live-task capacity admission visible and consistent across all lifecycle lanes.

- Report canonical active holders when worktree or concurrent-task capacity is exhausted.
- Persist deduplicated queue reasons for merge, triage, and workflow-continuation admission.
- Cover retained worktree behavior and document the capacity model.

Files changed:
 .changeset/fn-8822-worktree-capacity-leak.md       |  7 +++
 docs/architecture.md                               |  1 +
 docs/settings-reference.md                         |  4 +-
 .../src/__tests__/agent-heartbeat-worktree.test.ts | 11 ++++-
 .../engine/src/__tests__/project-engine.test.ts    |  4 ++
 ...ecutor-no-task-done-vs-worktree-reclaim.test.ts | 55 +++++++++++++++++++---
 ...admission-worktree-ledger-renamed-lanes.test.ts |  4 ++
 .../workflow-continuation-capacity.test.ts         |  8 +++-
 .../src/__tests__/worktree-acquisition.test.ts     |  6 +--
 packages/engine/src/concurrency/concurrency.ts     | 22 +++++++++
 packages/engine/src/project-engine.ts              | 34 ++++++++++++-
 packages/engine/src/runtimes/in-process-runtime.ts | 33 ++++++++++++-
 packages/engine/src/scheduler.ts                   | 53 ++++++++++-----------
 packages/engine/src/triage.ts                      | 18 +++++++
 14 files changed, 215 insertions(+), 45 deletions(-)

Fusion-Task-Id: FN-8822

Fusion-Task-Lineage: 73eda70b-2b74-4b49-a0ff-29d41fd9aab8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-07 21:43:28 -07:00
gsxdsm
e78c09c6f4 FN-8825: move secrets fingerprints into private Git metadata
Store secrets environment fingerprint metadata in private Git directories so refresh-enabled worktrees remain clean.

- Reconcile and durably migrate legacy root fingerprint sidecars before strict worktree refreshes.
- Fail closed for malformed, tracked, conflicting, or non-durable fingerprint records and protect cleanup integrity.
- Add coverage and document the private fingerprint record contract.

Files changed: .changeset/fn-8825-secrets-env-fingerprint.md      |   7 +
 docs/secrets.md                                    |   5 +-
 .../secrets-env-materialization.test.ts            |  45 ++-
 .../src/__tests__/secrets-env-writer.test.ts       | 325 ++++++++++++++-
 .../worktree-acquisition-secrets-env.test.ts       |  61 ++-
 packages/engine/src/worktree/secrets-env-writer.ts | 434 ++++++++++++++++-----
 .../engine/src/worktree/worktree-acquisition.ts    |  22 +-
 7 files changed, 799 insertions(+), 100 deletions(-)

Fusion-Task-Id: FN-8825

Fusion-Task-Lineage: eb7148bd-1da7-4448-8abf-498ddaebd4c0

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-07 21:18:24 -07:00
gsxdsm
7b010ec95f FN-8824: enforce serial mission slice advancement
Keep mission autopilot progression limited to one active, milestone-ordered slice.

- Add atomic store-level admission for the next serially eligible slice.
- Reconcile completed active slices before advancing and route scheduler activation through the shared guard.
- Cover duplicate completion signals, recovery, PostgreSQL, and API behavior; document and release the fix.

Files changed:
 .changeset/fn-8824-mission-slice-advancement.md    |   7 +
 docs/missions.md                                   |  10 +-
 .../mission-store.sync-loop-transition.test.ts     |  43 ++++++
 .../postgres/mission-autopilot.pg.test.ts          |  25 ++++
 .../core/src/async-stores/async-mission-store.ts   |  48 ++++++-
 packages/core/src/index.gate.ts                    |   1 +
 packages/core/src/index.ts                         |   1 +
 packages/core/src/missions/mission-store.ts        |  37 ++++-
 packages/core/src/missions/mission-types.ts        |  35 +++++
 packages/dashboard/src/mission-routes.ts           |   9 +-
 .../__tests__/mission-autopilot-end-to-end.test.ts |  95 ++++++++++--
 .../engine/src/__tests__/mission-autopilot.test.ts |  22 +++
 .../engine/src/__tests__/mission-scheduler.test.ts | 159 +++++++++++----------
 packages/engine/src/missions/mission-autopilot.ts  |  50 +++----
 packages/engine/src/scheduler.ts                   |  42 +-----
 15 files changed, 432 insertions(+), 152 deletions(-)

Fusion-Task-Id: FN-8824

Fusion-Task-Lineage: 22638d56-a51b-424c-aa07-871f544fb7cc

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-07 20:56:52 -07:00
gsxdsm
3dd824d04e FN-8823: respect shared member auto-merge holds
Honor project and member auto-merge consent consistently throughout shared-branch integration.

- Apply project autoMerge settings and explicit member overrides to shared-member hold decisions.
- Expose shared-member integration hold state and controls in branch-group dashboard and lifecycle APIs.
- Add regression coverage, operator documentation, and a patch changeset.

Files changed:
 .changeset/fn-8823-shared-member-consent.md        |  7 ++
 docs/dashboard-guide.md                            |  4 +-
 packages/core/src/__tests__/task-merge.test.ts     | 57 +++++++++++++++
 packages/core/src/index.gate.ts                    |  3 +
 packages/core/src/index.ts                         |  3 +
 packages/core/src/merge/task-merge.ts              | 81 ++++++++++++++++++---
 .../dashboard/app/api/tasks/tasks-lifecycle.ts     | 11 +++
 .../dashboard/app/components/BranchGroupCard.css   | 84 ++++++++++++++++++++++
 .../dashboard/app/components/BranchGroupCard.tsx   | 58 ++++++++++++++-
 packages/dashboard/app/components/ListView.tsx     | 14 +++-
 .../dashboard/app/components/TaskDetailModal.tsx   | 20 +++++-
 .../components/__tests__/BranchGroupCard.test.tsx  | 44 +++++++++++-
 .../components/__tests__/TaskDetailModal.test.tsx  | 24 ++++++-
 .../app/components/dashboard/MainContent.tsx       |  2 +-
 .../app/components/useRightDockController.tsx      |  2 +-
 packages/dashboard/app/hooks/useModalManager.ts    |  6 ++
 .../src/__tests__/routes-branch-groups.test.ts     | 42 ++++++-----
 .../src/routes/register-branch-groups-routes.ts    |  9 ++-
 ...cutor-live-branch-group-auto-merge-hold.test.ts | 21 +++---
 .../src/__tests__/group-merge-coordinator.test.ts  |  7 +-
 .../workflow-graph-executor-handlers.test.ts       | 33 ++++++---
 packages/engine/src/executor.ts                    | 27 ++++---
 packages/engine/src/project-engine.ts              |  9 ++-
 packages/engine/src/self-healing.ts                | 16 ++---
 .../src/workflow-node-runners/merge-runner.ts      | 13 ++--
 25 files changed, 503 insertions(+), 94 deletions(-)

Fusion-Task-Id: FN-8823

Fusion-Task-Lineage: 19a8ed3f-26e1-4c8e-8782-ca366718a3f2

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-07 20:27:04 -07:00
gsxdsm
cdf81a2244 fix(FN-8826): retry partial workflow progress after restart
Fusion-Task-Id: FN-8826
2026-08-07 16:55:00 -07:00
gsxdsm
fc2040ca84 FN-8821: retire ephemeral-agent routing branches
Keep the legacy ephemeral-agent setting compatible while making all workflow routing durable-principal-only.

- Preserve and expose the legacy setting as a routing-inert compatibility field.
- Remove scheduler, executor, and mission-start branches that honored the deprecated toggle.
- Add coverage for settings persistence and durable routing invariants.

Files changed:
 .changeset/fn-8821-retire-ephemeral-routing.md     |   7 +
 docs/settings-reference.md                         |   4 +-
 .../core/src/__tests__/settings-parity.test.ts     |   8 +-
 packages/core/src/config/settings-schema.ts        |  11 +-
 packages/core/src/task-store/settings-helpers.ts   |  15 +-
 packages/core/src/task-store/settings-ops.ts       |  12 +-
 packages/core/src/types/settings/settings-scope.ts |   5 +-
 .../__tests__/SettingsModal.general.test.tsx       |  23 ++
 .../settings/sections/GeneralSection.tsx           |  13 ++
 .../src/__tests__/mission-start-routing.test.ts    | 104 +++++++++
 ...ecutor-ephemeral-disabled-dispatch-gate.test.ts | 243 +++++++++++++++++++++
 .../__tests__/scheduler-ephemeral-toggle.test.ts   | 125 +++++++++++
 12 files changed, 542 insertions(+), 28 deletions(-)

Fusion-Task-Id: FN-8821

Fusion-Task-Lineage: e81ec9c0-f2b0-48f9-ae2b-9bbde4491447

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-07 02:33:35 -07:00
gsxdsm
eaadd153b1 FN-8764: route workflow stages through durable role agents
Route workflow stages through task-scoped durable role agents.

- Persist normalized multi-role agents and workflow principal fences with migrations.
- Route planning, execution, review, and merge workflow nodes through authorized permanent principals with capacity leasing and recovery.
- Retire ephemeral workflow-stage workers and expose role-aware agent configuration, workflow editing, and documentation.
- Preserve lifecycle-column ratchet coverage by centralizing workflow-role classification rather than adding test exemptions.

Files changed:
 .changeset/fn-8764-workflow-role-agents.md         |   7 +
 CONCEPTS.md                                        |   3 +
 docs/agents.md                                     |   6 +
 docs/architecture.md                               |   6 +
 docs/cli-reference.md                              |   2 +
 docs/dashboard-guide.md                            |   4 +
 docs/settings-reference.md                         |   6 +-
 docs/storage.md                                    |   2 +
 docs/workflow-steps.md                             |   6 +
 .../src/__tests__/extension-agent-update.test.ts   |  11 +-
 packages/cli/src/__tests__/extension.test.ts       |  18 +-
 packages/cli/src/extension.ts                      |  41 +-
 .../core/src/__tests__/agent-permissions.test.ts   |  12 +
 .../core/src/__tests__/agent-role-policy.test.ts   |   7 +
 packages/core/src/__tests__/agent-roles.test.ts    |  21 +
 .../legacy-column-collection-gating-ledger.test.ts |  19 +-
 .../src/__tests__/postgres/schema-applier.test.ts  |  16 +-
 .../core/src/__tests__/settings-parity.test.ts     |   9 +-
 .../workflow-agent-node-classification.test.ts     |  25 +
 .../src/__tests__/workflow-work-item-cas.test.ts   |  38 ++
 packages/core/src/agents/agent-permissions.ts      |  11 +-
 packages/core/src/agents/agent-role-policy.ts      |  39 +-
 packages/core/src/agents/agent-store.ts            | 190 ++++++-
 .../core/src/async-stores/async-agent-store.ts     |   6 +
 packages/core/src/config/settings-schema.ts        |   5 +-
 packages/core/src/index.gate.ts                    |   2 +-
 packages/core/src/index.ts                         |   7 +-
 .../0045_fn_8764_multi_role_workflow_agents.sql    |  20 +
 .../0046_fn_8764_workflow_principal_fence.sql      |  49 ++
 packages/core/src/postgres/schema-applier.ts       |  22 +-
 packages/core/src/postgres/schema/project.ts       |  21 +
 packages/core/src/store.ts                         |   2 +-
 .../task-store/async/async-workflow-workitems.ts   |  49 +-
 packages/core/src/task-store/row-types.ts          |   4 +
 packages/core/src/task-store/settings-helpers.ts   |  16 +-
 packages/core/src/task-store/settings-ops-2.ts     |  13 +-
 packages/core/src/task-store/settings-ops.ts       |  16 +-
 packages/core/src/task-store/task-row-mappers.ts   |   4 +
 .../src/task-store/workflow-task-create-ops.ts     |   6 +-
 .../src/task-store/workflow-workitems-ops-2.ts     |  25 +-
 packages/core/src/types.ts                         |   2 +
 packages/core/src/types/agents/agents.ts           |  45 +-
 packages/core/src/types/merge/merge-queue.ts       |  17 +
 packages/core/src/types/settings/settings-scope.ts |   9 +-
 packages/core/src/workflows/workflow-ir-types.ts   |  58 +++
 packages/core/src/workflows/workflow-ir.ts         |  19 +
 .../dashboard/app/components/AgentDetailView.css   |  14 +
 .../dashboard/app/components/AgentDetailView.tsx   |  34 +-
 .../dashboard/app/components/NewAgentDialog.tsx    |  28 +-
 .../app/components/WorkflowNodeEditor.tsx          |  19 +
 .../__tests__/AgentDetailView.core.test.tsx        |   4 +-
 .../app/components/__tests__/AgentsView.test.tsx   |   2 +-
 .../__tests__/SettingsModal.general.test.tsx       |  86 ---
 .../__tests__/SettingsModal.test-harness.tsx       |   1 -
 .../components/agent-presets/agentCreatePayload.ts |   9 +-
 .../app/components/settings/section-keys.ts        |   1 -
 .../settings/sections/GeneralSection.tsx           |   8 -
 .../settings-default-descriptions.test.tsx         |   1 -
 .../app/components/workflow-flow-mapping.ts        |   7 +
 packages/dashboard/src/mission-routes.ts           |  26 +-
 .../src/routes/__tests__/agent-core-routes.test.ts |  23 +-
 .../src/routes/register-agent-core-routes.ts       |  42 +-
 ...gister-agent-import-export-generation-routes.ts |  21 -
 .../engine/src/__tests__/agent-action-gate.test.ts |  33 ++
 .../engine/src/__tests__/agent-assignment.test.ts  | 370 -------------
 .../src/__tests__/ephemeral-worker-manager.test.ts | 575 ---------------------
 ...ecutor-ephemeral-disabled-dispatch-gate.test.ts | 223 --------
 .../__tests__/executor-fast-mode-workflows.test.ts |  58 +++
 .../engine/src/__tests__/log-severity-manifest.ts  |   1 -
 .../__tests__/log-severity-spam-contract.test.ts   |   3 -
 .../resolved-read-with-literal-filter.test.ts      |   4 -
 .../__tests__/scheduler-ephemeral-toggle.test.ts   | 175 -------
 .../__tests__/scheduler-workflow-cutover.test.ts   |  19 -
 .../src/__tests__/workflow-agent-capacity.test.ts  |  47 ++
 .../src/__tests__/workflow-agent-routing.test.ts   | 137 +++++
 .../src/__tests__/workflow-graph-foreach.test.ts   |  15 +
 .../__tests__/workflow-graph-task-runner.test.ts   |  73 +++
 .../src/__tests__/workflow-task-runtime.test.ts    |  95 ++++
 .../src/__tests__/workflow-work-scheduler.test.ts  |  20 +
 packages/engine/src/agents/agent-action-gate.ts    |  64 +++
 packages/engine/src/agents/agent-assignment.ts     | 135 -----
 packages/engine/src/agents/agent-reflection.ts     |   1 +
 .../engine/src/agents/ephemeral-worker-manager.ts  | 429 ---------------
 .../engine/src/agents/workflow-agent-capacity.ts   | 113 ++++
 .../engine/src/agents/workflow-agent-router.ts     | 185 +++++++
 packages/engine/src/execution/reviewer.ts          |  26 +-
 packages/engine/src/executor.ts                    | 501 +++++++++++++++---
 packages/engine/src/index.ts                       |   1 -
 packages/engine/src/merger.ts                      |  20 +-
 packages/engine/src/pi.ts                          |  11 +
 packages/engine/src/runtimes/in-process-runtime.ts |  37 --
 packages/engine/src/scheduler.ts                   | 114 +---
 packages/engine/src/triage.ts                      | 196 ++++++-
 .../src/workflows/workflow-graph-executor.ts       | 109 +++-
 .../engine/src/workflows/workflow-graph-loop.ts    |  13 +-
 .../src/workflows/workflow-graph-task-runner.ts    |  12 +
 .../engine/src/workflows/workflow-task-runtime.ts  | 125 ++++-
 .../src/workflows/workflow-work-scheduler.ts       |   8 +-
 98 files changed, 2722 insertions(+), 2468 deletions(-)

Fusion-Task-Id: FN-8764
Fusion-Task-Lineage: 5527fccb-342d-46f6-8108-bbf89142efec
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-07 01:36:34 -07:00
gsxdsm
297ec17f8e FN-8819: preserve useful Planning Mode choices
Planning Mode preserves useful model-provided alternatives while retaining one Other response.

- Preserve distinct choices beyond the preferred 3–5 range
- Deduplicate model-authored Other entries into the canonical free-text choice
- Cover desktop and mobile option selection flows and document the behavior

Files changed:
 .changeset/fn-8819-planning-options.md             |   7 ++
 docs/dashboard-guide.md                            |   3 +-
 .../PlanningModeModal.ui-interactions.test.tsx     | 137 ++++++++++++++++++++-
 .../__tests__/planning-infinite-interview.test.ts  |  28 +++--
 .../planning-interview-formatters.test.ts          |   5 +
 packages/dashboard/src/planning.ts                 |  44 ++++---
 6 files changed, 192 insertions(+), 32 deletions(-)

Fusion-Task-Id: FN-8819

Fusion-Task-Lineage: f748f4b7-3865-4a97-a8b0-d614e0b4cc0a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-06 20:42:30 -07:00
gsxdsm
c3f4af67d6 FN-8818: enforce planning response choices
Ensure Planning Mode always presents four distinct suggested responses and one Other choice.

- Normalize model and restored awaiting-input questions with localized fallback options
- Deduplicate rendered options and cover restored-session and UI selection behavior
- Document the response-choice contract and add a patch changeset

Files changed:
 .changeset/fn-8818-planning-response-choices.md    |   7 +
 docs/dashboard-guide.md                            |   2 +-
 .../dashboard/app/components/PlanningModeModal.tsx |  39 ++--
 .../PlanningModeModal.ui-interactions.test.tsx     |  37 +++-
 .../planning-answered-question-reemit.test.ts      |  11 +-
 .../__tests__/planning-infinite-interview.test.ts  |  59 +++++-
 packages/dashboard/src/planning.ts                 | 205 +++++++++++++++++----
 7 files changed, 298 insertions(+), 62 deletions(-)

Fusion-Task-Id: FN-8818

Fusion-Task-Lineage: d515c293-c5ab-437b-86c9-734207321ded

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-06 16:19:33 -07:00
gsxdsm
3ed31e9907 FN-8815: retry execution after first tool failure
Retry executor work after the first terminal tool-call failure by default.

- Set the default tool-failure threshold to one while preserving explicit project overrides.
- Expose and document the first-error default in Settings, translations, and the settings reference.
- Cover threshold resolution, save lifecycle, and executor retry behavior.

Files changed: .changeset/fn-8815-retry-first-tool-failure.md     |  7 +++
 docs/settings-reference.md                         |  4 +-
 .../core/src/__tests__/settings-defaults.test.ts   |  6 +-
 packages/core/src/config/settings-schema.ts        | 10 ++-
 packages/core/src/tasks/in-review-stall.ts         | 15 ++++-
 packages/core/src/types/settings/settings-scope.ts | 10 ++-
 .../dashboard/app/components/SettingsModal.tsx     |  7 ++-
 .../SettingsModal.scheduling-merge.test.tsx        | 61 +++++++++++++++++-
 .../settings/sections/SchedulingSection.search.ts  |  2 +-
 .../settings/sections/SchedulingSection.tsx        |  4 +-
 .../settings-default-descriptions.test.tsx         | 12 ++++
 .../__tests__/executor-tool-failure-retry.test.ts  | 73 +++++++++++++++++++---
 packages/i18n/locales/en/app.json                  |  2 +-
 packages/i18n/src/resources.d.ts                   | 17 +++--
 14 files changed, 200 insertions(+), 30 deletions(-)

Fusion-Task-Id: FN-8815

Fusion-Task-Lineage: 909181e7-2da5-4a27-92ee-4182732d9695

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-06 08:35:36 -07:00
gsxdsm
4f4aef7173 FN-8811: preserve explicit shared-member review holds
Keep shared branch-group integration moving unless an operator explicitly holds the task.

- Track auto-merge provenance and distinguish explicit user holds from inherited mission policy.
- Preserve manual holds across workflow recovery, merge coordination, API updates, and dashboard status.
- Add regression coverage, document the behavior, and quarantine the observed flaky test.

Files changed:
 .changeset/fn-8811-shared-member-review-hold.md    |   7 ++
 docs/architecture.md                               |   4 +-
 docs/dashboard-guide.md                            |   1 +
 .../mission-store.sync-auto-merge.test.ts          |   7 +-
 .../__tests__/postgres/mission-store.pg.test.ts    |   1 +
 .../__tests__/postgres/store-movement.pg.test.ts   |  20 ++++
 packages/core/src/__tests__/task-merge.test.ts     |  14 +++
 .../core/src/async-stores/async-mission-store.ts   |   6 +-
 packages/core/src/index.gate.ts                    |   1 +
 packages/core/src/index.ts                         |   1 +
 packages/core/src/merge/task-merge.ts              |  20 +++-
 packages/core/src/missions/mission-store.ts        |   6 +-
 packages/core/src/task-store/serialization.ts      |   2 +-
 packages/core/src/task-store/task-creation.ts      |   8 +-
 packages/core/src/types/task/task-core.ts          |  12 ++-
 .../components/__tests__/TaskDetailModal.test.tsx  |  63 ++++++++++++
 .../dashboard/src/__tests__/routes-tasks.test.ts   |  47 +++++++++
 .../src/routes/register-task-workflow-routes.ts    |  15 ++-
 ...cutor-live-branch-group-auto-merge-hold.test.ts |  87 +++++++++++++++++
 .../src/__tests__/group-merge-coordinator.test.ts  |  99 ++++++++++++++++++-
 .../engine/src/__tests__/project-engine.test.ts    |  57 ++++++++++-
 .../self-healing-paused-abort-recovery.test.ts     |  52 +++++++++-
 packages/engine/src/__tests__/self-healing.test.ts | 106 +++++++++++++++++++++
 .../workflow-graph-executor-handlers.test.ts       |  23 +++++
 packages/engine/src/executor.ts                    |  37 ++++++-
 packages/engine/src/project-engine.ts              |  25 +++--
 packages/engine/src/self-healing.ts                |  71 ++++++++++++--
 .../src/workflow-node-runners/merge-runner.ts      |  24 ++++-
 .../src/workflows/workflow-graph-executor.ts       |   4 +
 .../src/workflows/workflow-graph-task-runner.ts    |   6 ++
 .../engine/src/workflows/workflow-node-handlers.ts |   5 +-
 packages/engine/vitest.config.ts                   |  11 ++-
 scripts/lib/test-quarantine.json                   |   5 +
 33 files changed, 789 insertions(+), 58 deletions(-)

Fusion-Task-Id: FN-8811

Fusion-Task-Lineage: 5c1609bf-3132-4988-a254-fedec6c0e33d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-05 17:39:15 -07:00
gsxdsm
00fdbe1bef FN-8808: bind dashboard secrets to selected project
Bind dashboard secret operations to the explicitly selected project.

- Include project identity in secrets and sync-passphrase requests.
- Reject missing project IDs before fallback project-store resolution.
- Prevent stale cross-project UI responses and document recovery guidance.

Files changed:
 .changeset/fn-8808-secrets-project-binding.md      |   7 +
 docs/secrets.md                                    |   6 +
 packages/dashboard/app/components/SecretsView.tsx  | 134 ++++++++++++++-----
 .../dashboard/app/components/SettingsModal.tsx     |   2 +-
 .../__tests__/SecretsView.mobile.test.tsx          |   9 ++
 .../app/components/__tests__/SecretsView.test.tsx  | 137 ++++++++++++++++++++
 .../__tests__/SettingsModal.mcp.test.tsx           |  69 +++++++++-
 .../__tests__/SettingsModal.test-harness.tsx       |   8 +-
 .../app/components/dashboard/MainContent.tsx       |   2 +-
 .../app/components/overflowViewRegistry.tsx        |   2 +-
 .../settings/sections/McpServersCard.tsx           |  58 +++++++--
 .../settings/sections/SecretsSection.tsx           |   5 +-
 .../__tests__/register-secrets-routes.test.ts      | 142 +++++++++++++++++++--
 .../src/routes/register-secrets-routes.ts          |  53 +++++---
 14 files changed, 551 insertions(+), 83 deletions(-)

Fusion-Task-Id: FN-8808

Fusion-Task-Lineage: dd224dbe-46a5-49a6-b6e9-5d5bbe4e742e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-05 15:41:56 -07:00
gsxdsm
ec10411c4c FN-8795: persist structured workflow review findings
Persist normalized actionable findings from review workflow nodes.

- Normalize bounded finding IDs, text, locations, and severities in workflow results.
- Surface individual findings for Review-tab selection and same-task revision.
- Preserve findings through workflow retries and document the advisory contract.

Files changed:
 .changeset/fn-8795-structured-review-findings.md   |  7 +++
 docs/dashboard-guide.md                            |  2 +-
 docs/workflow-steps.md                             |  4 +-
 .../src/__tests__/workflow-step-results.test.ts    | 32 +++++++++++++-
 packages/core/src/index.gate.ts                    |  4 ++
 packages/core/src/index.ts                         |  6 ++-
 packages/core/src/types.ts                         |  4 ++
 packages/core/src/types/task/task-review.ts        |  5 +++
 packages/core/src/types/workflow/workflow-steps.ts | 20 +++++++++
 .../core/src/workflows/workflow-step-results.ts    | 50 +++++++++++++++++++++-
 .../dashboard/app/components/TaskReviewTab.tsx     | 12 +++++-
 .../src/routes/register-task-workflow-routes.ts    | 26 ++++++++++-
 .../workflow-malformed-verdict-gate.test.ts        | 12 ++++++
 packages/engine/src/executor.ts                    | 46 +++++++++++++++++---
 .../src/workflows/workflow-graph-executor.ts       | 11 +++++
 15 files changed, 227 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-8795
Fusion-Task-Lineage: 09003b01-3f9a-4387-b6a7-f29066ce52f6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-05 00:00:03 -07:00
gsxdsm
e75c788db2 FN-8794: add workflow review-kind markers
Classify workflow review nodes so review feedback can target their persisted results.

- validate and type explicit plan/code review-kind markers in workflow IR
- expose review-kind selection in the workflow editor and document the authoring contract
- persist markers through task workflow routes and graph execution with regression coverage

Files changed:
 .changeset/fn-8794-review-kind.md                  |   7 +
 docs/dashboard-guide.md                            |   4 +
 docs/workflow-steps.md                             |  10 +
 .../__tests__/workflow-ir-optional-group.test.ts   |  17 ++
 packages/core/src/__tests__/workflow-ir.test.ts    |  83 +++++++++
 packages/core/src/index.gate.ts                    |   2 +-
 packages/core/src/index.ts                         |   2 +-
 packages/core/src/types.ts                         |   2 +
 packages/core/src/types/workflow/workflow-steps.ts |   8 +
 .../src/workflows/builtin-code-review-group.ts     |   1 +
 .../src/workflows/builtin-plan-review-group.ts     |   1 +
 packages/core/src/workflows/workflow-ir-types.ts   |   5 +
 packages/core/src/workflows/workflow-ir.ts         |  24 +++
 .../app/components/WorkflowNodeEditor.tsx          |  17 ++
 .../__tests__/WorkflowNodeEditor.test.tsx          | 206 +++++++++++++++++++++
 .../dashboard/src/__tests__/routes-tasks.test.ts   | 166 ++++++++++++++++-
 .../src/routes/register-task-workflow-routes.ts    |  82 ++++++--
 .../workflow-graph-optional-group.test.ts          | 177 +++++++++++++++++-
 .../src/workflows/workflow-graph-executor.ts       |  20 +-
 19 files changed, 801 insertions(+), 33 deletions(-)

Fusion-Task-Id: FN-8794

Fusion-Task-Lineage: a7752469-59bc-406f-82e8-6ffde6c392ef

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-04 23:36:32 -07:00
gsxdsm
26219b8d34 FN-8799: suppress alerts during automatic task recovery
Prevent terminal task alerts while persisted automatic recovery owns a failed task.

- Classify scheduled and transient merge recovery ownership before wedge notification claims.
- Re-read live task state before claims and deferred failure delivery to avoid recovery races.
- Add recovery suppression coverage, architecture documentation, and a patch changeset.

Files changed:
 .changeset/fn-8799-recovery-notifications.md       |  7 ++
 docs/architecture.md                               |  2 +
 .../src/errors/transient-merge-error-classifier.ts | 18 +++++
 .../__tests__/notification-service.test.ts         | 78 ++++++++++++++++++-
 .../__tests__/task-wedge-notification.test.ts      | 26 ++++++-
 .../src/notification/notification-service.ts       | 90 ++++++++++++----------
 .../src/notification/task-wedge-notification.ts    | 37 +++++++--
 packages/engine/src/project-engine.ts              |  4 +-
 8 files changed, 210 insertions(+), 52 deletions(-)

Fusion-Task-Id: FN-8799

Fusion-Task-Lineage: f8296e81-6b84-4697-8b20-63823f09d584

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-04 22:17:06 -07:00
gsxdsm
4167841e3c FN-8792: resume Plan Review after approval
Approved plans now seed their canonical Plan Review continuation so dispatch can proceed.

- Add an engine handoff that atomically seeds approved Plan Review work without duplicating active continuations.
- Invoke the handoff under the dashboard approval lifecycle lock and cover approval, duplicate, and lifecycle-fence cases.
- Document the lifecycle guarantee and add a patch changeset.

Files changed:
 .changeset/fn-8792-plan-approval-dispatch.md       |   7 +
 docs/architecture.md                               |   6 +-
 .../dashboard/src/__tests__/routes-github.test.ts  | 167 ++++++++++++++++++++-
 .../src/routes/register-task-workflow-routes.ts    |  17 +++
 .../__tests__/plan-approval-hold-invariant.test.ts |  70 +++++++++
 packages/engine/src/index.ts                       |   4 +
 packages/engine/src/plan-review-continuation.ts    |  38 +++++
 7 files changed, 304 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-8792

Fusion-Task-Lineage: 0645c48d-ec92-475d-9e29-73cc22c12df8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-04 19:31:06 -07:00
gsxdsm
b9c5df04af FN-8791: prevent NUL-containing chat checkpoints from crashing
Prevent malformed tool output from breaking chat checkpoint persistence.

- Sanitize NUL characters at chat JSONB persistence boundaries without mutating clean values.
- Observe rejected best-effort checkpoint writes so streaming sessions do not emit unhandled rejections.
- Add PostgreSQL, dashboard, and sanitizer regression coverage with operator-facing release notes.

Files changed:
 .changeset/fn-8791-chat-nul-checkpoint.md          |  7 ++
 .../reliability/chat-jsonb-nul-sanitization.md     | 44 +++++++++++
 packages/core/src/__tests__/nul-sanitize.test.ts   | 21 ++++-
 .../chat-store-content-search-edit.pg.test.ts      | 91 +++++++++++++++++++++-
 packages/core/src/async-stores/async-chat-store.ts | 61 ++++++++++-----
 packages/core/src/postgres/nul-sanitize.ts         | 17 ++--
 .../dashboard/src/__tests__/chat-manager.test.ts   | 90 +++++++++++++++++++++
 packages/dashboard/src/chat.ts                     | 21 ++++-
 8 files changed, 322 insertions(+), 30 deletions(-)

Fusion-Task-Id: FN-8791

Fusion-Task-Lineage: 51e13634-04cc-4827-b72f-f33e40760940

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-04 19:15:20 -07:00
gsxdsm
1dc636b8b4 FN-8785: deduplicate queued dependency and scope logs
Persist queue episodes atomically so repeated scheduler and self-healing passes do not duplicate diagnostics.

- Add a queued-episode signature with PostgreSQL migration and task serialization support.
- Route dependency and file-scope queue transitions through the atomic deduplication API.
- Cover repeated and concurrent queue transitions, and update scheduler mocks for the new store API.

Files changed:
 .changeset/fn-8785-queued-log-deduplication.md     |   7 +
 docs/architecture.md                               |   1 +
 .../postgres/queued-episode-transition.pg.test.ts  | 158 +++++++++++++++++++++
 .../src/__tests__/postgres/schema-applier.test.ts  |   9 +-
 .../core/src/postgres/migrations/0000_initial.sql  |   1 +
 .../0044_fn_8785_queued_episode_signature.sql      |   3 +
 packages/core/src/postgres/schema-applier.ts       |  12 +-
 packages/core/src/postgres/schema/project.ts       |   1 +
 packages/core/src/store.ts                         |   5 +-
 packages/core/src/task-store/audit-ops.ts          |  80 +++++++++++
 packages/core/src/task-store/persistence.ts        |   2 +
 packages/core/src/task-store/serialization.ts      |   1 +
 packages/core/src/types/task/task-core.ts          |   5 +
 ...executor-outer-dispatch-dependency-gate.test.ts |  39 +++--
 .../engine/src/__tests__/executor-test-helpers.ts  |   7 +
 .../__tests__/scheduler-overlap-starvation.test.ts |  43 +++++-
 .../__tests__/scheduler-workflow-cutover.test.ts   |  35 +++--
 .../self-healing-completion-fanout.test.ts         |  37 +++++
 packages/engine/src/__tests__/self-healing.test.ts |  25 +++-
 packages/engine/src/executor.ts                    |  16 ++-
 packages/engine/src/scheduler.ts                   |  26 ++--
 packages/engine/src/self-healing.ts                | 117 +++++----------
 22 files changed, 491 insertions(+), 139 deletions(-)

Fusion-Task-Id: FN-8785
Fusion-Task-Lineage: 8d68c243-f24e-4db4-bd1d-b7eda01309f6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-04 11:52:15 -07:00
gsxdsm
750b4bedbc FN-8788: retain Kimi K3 quarantine through deadline
Document the decision to preserve Kimi K3 quarantine coverage until its deletion-ratchet deadline.

- Retain the supplemental route test, Vitest exclusion, and ledger entry through 2026-08-15.
- Clarify that early removal requires regression evidence and a root-cause fix.

Files changed:
 docs/testing.md | 3 +++
 1 file changed, 3 insertions(+)

Fusion-Task-Id: FN-8788

Fusion-Task-Lineage: e1644a4b-1632-4cf7-a0a9-42ecc2b027a9

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-04 11:45:20 -07:00
gsxdsm
07dccbe2bd FN-8783: parallelize static merge-gate validators
Run independent static merge-gate policy validators concurrently without weakening gate ordering.

- Add a fail-closed concurrent static-validator runner with coverage for inventory and failures.
- Preserve curated engine, PostgreSQL, unit, and CI-shape gate contracts.
- Document the gate composition and warm-cache performance policy.

Files changed:
 docs/testing.md                                    |  13 ++-
 package.json                                       |   3 +-
 packages/cli/src/__tests__/ci-workflow.test.ts     |  21 ++--
 packages/engine/vitest.config.ts                   |  36 +++++--
 .../__tests__/engine-vitest-gate-policy.test.mjs   |  90 +++++++++++++----
 scripts/__tests__/run-static-gate-checks.test.mjs  | 100 +++++++++++++++++++
 scripts/run-static-gate-checks.mjs                 | 106 +++++++++++++++++++++
 7 files changed, 332 insertions(+), 37 deletions(-)

Fusion-Task-Id: FN-8783

Fusion-Task-Lineage: d5d3c9e1-b3c4-45ff-a3e7-f9555585cd70

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-04 09:21:07 -07:00
gsxdsm
9e4a0817db feat: restart the development engine on source changes (#3329)
## Summary

Add an opt-in source-development loop that restarts the dashboard and
engine when runtime TypeScript or JSON changes. Use `pnpm dev:watch`;
`pnpm dev:hmr` now combines Vite UI HMR with the same supervised
API/engine restart path.

The watcher filters tests, fixtures, generated declarations, build
output, and task state. It coalesces bursts with a two-second maximum
wait, waits for the child to acknowledge its IPC listener, and rebuilds
runtime dist artifacts before a source-triggered respawn.

## Safety model

- Close scheduler, triage, heartbeat, mission, routine, self-healing,
and merge admission before checking for active work.
- Let already-running agents reach a safe boundary; do not mutate
durable pause settings.
- Enter the existing graceful exit-code-86 shutdown and supervised
respawn path.
- Retry failed liveness reads and declined restart requests instead of
dropping the pending change.
- Keep ordinary `pnpm dev` behavior unchanged; inherited watch state
does not break nested non-dashboard development commands.

A development restart intentionally replaces the dashboard process, so
transient dashboard connections and project dev-server children
reconnect or restart with it. Agent work is the protected boundary.

## Validation

- `pnpm lint`
- `pnpm test:gate` (753 tests passed across engine, core, PostgreSQL
gate, and CI-shape suites)
- Focused CLI watcher/restart/supervision suites: 40 tests passed
- Focused engine drain/manager suites: 52 tests passed
- `pnpm --filter @runfusion/fusion typecheck`
- `pnpm --filter @fusion/engine typecheck`
- `pnpm verify:fast` (13 steps passed, including CLI build and real
health boot smoke)
- Manual unsupported-command probe confirms explicit `--watch` fails
clearly outside the dashboard command

## Post-Deploy Monitoring & Validation

- Watch for `[fusion:dev] source changed`, `source restart deferred`,
`active work drained`, and `restart requested` logs during the first
watched development session.
- Healthy behavior is one exit-86 respawn per edit batch, no interrupted
active agents, refreshed dist artifacts, and a healthy dashboard after
respawn.
- Investigate repeated restart loops, watcher attachment warnings,
declined restart retries, or liveness-read failures.
- Immediate mitigation is to use ordinary `pnpm dev` without `--watch`;
no production runtime behavior or durable setting needs rollback.
- Validation owner: Fusion maintainers during the first source edit
after merge.

---

[![Compound
Engineering](https://img.shields.io/badge/Built_with-Compound_Engineering-6366f1)](https://github.com/EveryInc/compound-engineering-plugin)


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added `pnpm dev:watch` to automatically restart development runtime
processes when source files change.
* Development restarts now wait for active work to finish, preventing
new work from starting during the transition.
* Enhanced `pnpm dev:hmr` with graceful runtime source restarts while
keeping the dashboard available.
  * Rapid source changes are grouped to avoid unnecessary restarts.

* **Documentation**
* Updated development setup and contribution guides with the new watch
workflow.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 08:57:30 -07:00
gsxdsm
c10a880fc9 FN-8777: scope voice dictation to selected projects
Keep voice dictation sessions and requests isolated to the active dashboard project.

- Append the encoded project ID to voice status, session, transcription, and cleanup requests.
- Add real-route and composer coverage for scoped sessions and project changes.
- Document the project boundary and add a patch changeset.

Files changed:
 .changeset/fn-8777-voice-entry-e2e.md              |   7 +
 docs/dashboard-guide.md                            |   5 +
 .../__tests__/voice-dictation-composers.test.tsx   |  19 ++-
 .../app/hooks/__tests__/useVoiceDictation.test.tsx | 149 ++++++++++++++++++++-
 packages/dashboard/app/hooks/useVoiceDictation.ts  |  44 ++++--
 .../routes/__tests__/register-voice-routes.test.ts |  28 ++++
 6 files changed, 238 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-8777

Fusion-Task-Lineage: 65390f79-3e29-4759-88c6-275b1c9f17d4

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-04 01:24:30 -07:00
gsxdsm
3b2c6f4c12 FN-8772: refresh W32 test-velocity baseline
Refresh the weekly test-velocity baseline with the latest measurements.

- Record current gate, boot-smoke, and changed-only test timings
- Update slowest-test attribution and quarantine counts
- Append the captured snapshot to the velocity history

Files changed:
docs/test-velocity-baseline.md     |  67 +++++++++++-----------
scripts/test-velocity-history.json | 112 +++++++++++++++++++++++++++++++++++++
2 files changed, 145 insertions(+), 34 deletions(-)

Fusion-Task-Id: FN-8772

Fusion-Task-Lineage: 84d73aef-f0ca-4322-a21b-447f230bb203

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-03 20:18:28 -07:00
gsxdsm
bb17baaacf FN-8768: recover planning handoffs after dependency reseeds
Prevent dependency reseeds from leaving completed planning work without a dispatchable continuation.

- Serialize dependency invalidation with workflow claims and retire only pending continuations.
- Persist dispatch-deduplication state and recover legacy reseeded planning handoffs safely.
- Add PostgreSQL migration, integration coverage, architecture guidance, and a patch changeset.

Files changed:
 .changeset/fn-8768-planning-reseed.md              |   7 ++
 docs/architecture.md                               |  10 +-
 .../core/src/__test-utils__/pg-test-harness.ts     |   8 ++
 .../__tests__/postgres/backend-resolver.test.ts    |   5 +
 .../src/__tests__/postgres/schema-applier.test.ts  |  17 ++-
 .../postgres/task-dependency-mutation.pg.test.ts   |  42 ++++++-
 .../__tests__/task-update-lanes-resolved.test.ts   |  20 +++-
 packages/core/src/postgres/advisory-locks.ts       | 122 +++++++++++++++++++++
 packages/core/src/postgres/backend-resolver.ts     |  13 ++-
 packages/core/src/postgres/data-layer.ts           |   4 +
 packages/core/src/postgres/embedded-lifecycle.ts   |   6 +
 .../migrations/0043_fn8768_dispatch_dedupe.sql     |  17 +++
 packages/core/src/postgres/schema-applier.ts       |  13 ++-
 packages/core/src/postgres/schema/project.ts       |  15 +++
 packages/core/src/store.ts                         |  56 +++++++++-
 packages/core/src/task-store/audit-ops.ts          |  49 +++++++++
 .../core/src/task-store/branch-and-pr-entities.ts  |  30 +++++
 packages/core/src/task-store/project-store-ops.ts  |  55 ++++++++--
 packages/core/src/task-store/task-update.ts        |  30 ++++-
 packages/core/src/task-store/update-task-deps.ts   |  30 ++++-
 packages/engine/src/__tests__/triage.test.ts       |  66 ++++++++++-
 packages/engine/src/execution/hold-release.ts      |  45 ++++++++
 packages/engine/src/scheduler.ts                   |   3 +-
 packages/engine/src/triage.ts                      |  87 ++++++++++++++-
 24 files changed, 713 insertions(+), 37 deletions(-)

Fusion-Task-Id: FN-8768

Fusion-Task-Lineage: 539ef649-5a13-4eaa-a695-bc68370fed22

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-03 19:31:03 -07:00
gsxdsm
7824150715 FN-8769: protect default-branch mission merges
Keep mission group members behind manual release controls when their target is the default branch.

- Create deterministic intermediate branches for project-default mission groups.
- Gate default-branch group routing and auto-merge exemptions behind the normal manual-release flow.
- Cover intermediate and default-branch group behavior with core and engine tests.

Files changed:
 ...fn-8769-default-branch-group-auto-merge-gate.md |   7 ++
 docs/architecture.md                               |   2 +-
 docs/missions.md                                   |   2 +-
 .../mission-store.sync-auto-merge.test.ts          |   4 +-
 packages/core/src/__tests__/task-merge.test.ts     |  16 ++-
 .../core/src/async-stores/async-mission-store.ts   |  12 ++-
 packages/core/src/merge/task-merge.ts              |  23 +++-
 packages/core/src/missions/mission-store.ts        |  11 +-
 ...cutor-live-branch-group-auto-merge-hold.test.ts |  16 ++-
 .../src/__tests__/group-merge-coordinator.test.ts  | 118 ++++++++++++++++++++-
 .../engine/src/__tests__/project-engine.test.ts    |  16 ++-
 packages/engine/src/executor.ts                    |   4 +-
 .../engine/src/merge/group-merge-coordinator.ts    |  13 +++
 packages/engine/src/project-engine.ts              |  15 ++-
 14 files changed, 235 insertions(+), 24 deletions(-)

Fusion-Task-Id: FN-8769

Fusion-Task-Lineage: dff96c8e-ca96-437c-94bf-9691bdf572e9

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-03 16:48:25 -07:00
gsxdsm
78543233aa fix(planning): allow repeated task creation
Advance the durable creation epoch for each explicit Planning Mode action while preserving idempotency for transport retries. Recover soft-deleted task links with a fresh claim key and cover live, deleted, and retry paths.
2026-08-03 12:15:19 -07:00
gsxdsm
5b2b31d2c9 FN-8762: extract Todo Lists into bundled plugin
Move Todo Lists into a bundled, project-enabled plugin package.

- Move Todo UI, client API, and server routes into the plugin package.
- Register and bundle Todo as an enabled plugin dashboard view rather than a static host feature.
- Preserve Todo route validation and server-error semantics, including task assignment agent lookup.
- Keep disabled and legacy Todo views out of project navigation and main content.

Files changed:
 .changeset/fn-8762-todos-plugin.md                 |   7 +
 AGENTS.md                                          |   3 +-
 docs/PLUGIN_AUTHORING.md                           |   4 +
 docs/dashboard-guide.md                            |   4 +
 docs/todo-view.md                                  | 151 +----
 .../cli/src/plugins/staged-bundled-plugin-ids.ts   |   1 +
 packages/cli/tsup.config.ts                        |   8 +
 .../core/src/board/mobile-nav-primary-items.ts     |   2 -
 .../__tests__/bundled-plugin-install.test.ts       |   2 +
 .../core/src/plugins/bundled-plugin-install.ts     |   1 +
 packages/dashboard/app/App.tsx                     |  18 +-
 .../app/__tests__/lazy-loaded-views-docs.test.ts   |   9 +-
 packages/dashboard/app/api/legacy.ts               |  15 -
 packages/dashboard/app/api/system/index.ts         |   1 -
 packages/dashboard/app/api/system/todo.ts          |  85 ---
 packages/dashboard/app/components/Header.tsx       |  23 +-
 .../dashboard/app/components/LeftSidebarNav.tsx    |   1 -
 packages/dashboard/app/components/MobileNavBar.tsx |   4 -
 .../dashboard/app/components/SettingsModal.tsx     |   2 -
 .../app/components/__tests__/App.test.tsx          |   7 -
 .../app/components/__tests__/Header.test.tsx       |  42 --
 .../app/components/__tests__/RightDock.test.tsx    |  18 +-
 ...skDetail.mobile-transition.board-panel.test.tsx |   1 -
 .../__tests__/TaskDetail.swipe-back.test.tsx       |   1 -
 .../__tests__/TodoView.mobile-css.test.ts          |  66 ---
 .../app/components/__tests__/TodoView.test.tsx     | 649 ---------------------
 .../__tests__/navigation-history.test.tsx          |   3 -
 .../__tests__/overflowViewRegistry.test.tsx        | 118 +---
 .../app/components/dashboard/MainContent.tsx       |  27 +-
 .../dashboard/app/components/dashboard/types.ts    |   6 +-
 .../app/components/overflowViewRegistry.tsx        |  21 +-
 .../app/hooks/__tests__/useTodoLists.test.ts       | 291 ---------
 .../app/hooks/__tests__/useViewState.test.ts       |  11 +
 packages/dashboard/app/hooks/useAppSettings.ts     |   5 -
 packages/dashboard/app/hooks/useViewState.ts       |   5 +
 .../__tests__/registerBundledPluginViews.test.tsx  |  14 +
 packages/dashboard/app/plugins/bundled-todos.d.ts  |   5 +
 .../app/plugins/registerBundledPluginViews.ts      |  18 +
 packages/dashboard/app/plugins/types.ts            |   4 +
 .../src/__tests__/todo-documentation.test.ts       |  68 ---
 .../dashboard/src/__tests__/todo-routes.test.ts    | 577 ------------------
 packages/dashboard/src/registry-manifest.json      | 101 +++-
 packages/dashboard/src/routes.ts                   |   1 -
 .../src/routes/plugin-bundled-runtimes.ts          |   1 +
 .../src/routes/register-integrated-routers.ts      |   2 -
 packages/dashboard/src/shared/dashboard-views.ts   |   6 -
 packages/dashboard/src/todo-routes.ts              | 342 -----------
 packages/dashboard/vite.config.ts                  |   8 +
 packages/dashboard/vitest.config.ts                |   8 +
 packages/desktop/scripts/workspace-tools.ts        |   1 +
 plugins/fusion-plugin-todos/README.md              |  20 +
 plugins/fusion-plugin-todos/manifest.json          |   6 +
 plugins/fusion-plugin-todos/package.json           |  38 ++
 .../fusion-plugin-todos/src/dashboard-interop.d.ts |  12 +
 plugins/fusion-plugin-todos/src/dashboard-view.tsx |   4 +
 .../src/dashboard/LoadingSpinner.tsx               |   1 +
 .../src/dashboard}/TodoView.css                    |   0
 .../src/dashboard}/TodoView.tsx                    |  16 +-
 plugins/fusion-plugin-todos/src/dashboard/api.ts   |  15 +
 .../src/dashboard/projectStorage.ts                |   3 +
 .../fusion-plugin-todos/src/dashboard/swrCache.ts  |   6 +
 .../src/dashboard/useConfirm.ts                    |   1 +
 .../src/dashboard}/useTodoLists.ts                 |   4 +-
 plugins/fusion-plugin-todos/src/index.ts           |   4 +
 .../fusion-plugin-todos/src/todo-routes.test.ts    |  46 ++
 plugins/fusion-plugin-todos/src/todo-routes.ts     | 156 +++++
 plugins/fusion-plugin-todos/tsconfig.json          |  28 +
 plugins/fusion-plugin-todos/vitest.config.ts       |   9 +
 pnpm-lock.yaml                                     |  64 +-
 pnpm-workspace.yaml                                |   1 +
 70 files changed, 671 insertions(+), 2531 deletions(-)

Fusion-Task-Id: FN-8762
Fusion-Task-Lineage: 3beb502c-3793-451b-b357-50c243395410
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-03 09:04:45 -07:00
gsxdsm
f1ed5ac613 FN-8759: preserve planning interview context in created tasks
Retain complete Planning Mode decisions throughout task creation.

- Add a canonical handoff formatter that embeds ordered interview Q&A without duplicates.
- Apply the handoff to single-task, API, and multi-task planning creation paths.
- Cover selected, custom, and commented answers; document the retained context and add a patch changeset.

Files changed:
 .changeset/fn-8759-planning-session-qa.md          |  7 ++++
 docs/dashboard-guide.md                            |  3 +-
 .../planning-interview-formatters.test.ts          | 45 +++++++++++++++++++++-
 .../planning-question-regeneration.test.ts         | 35 +++++++++++++++++
 .../src/__tests__/routes-planning.test.ts          | 28 +++++++++++++-
 packages/dashboard/src/planning.ts                 | 42 ++++++++++++++------
 .../src/routes/register-planning-subtask-routes.ts | 10 ++---
 7 files changed, 150 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-8759
Fusion-Task-Lineage: c07e1714-cd0e-4701-9448-b77db773211d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-03 03:23:14 -07:00