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.
---
[](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
gsxdsm
b269bff4d4
FN-8757: add mobile planning review shortcut
...
Add a reversible Plan preview shortcut after five answered mobile interview questions.
- Count only populated question-and-response history entries toward the threshold.
- Preserve unsent answers while switching between mobile question and plan tabs.
- Add coverage, operator documentation, and a patch changeset.
Files changed:
.changeset/fn-8757-mobile-planning-review.md | 7 ++
docs/dashboard-guide.md | 3 +
.../suite-only-flakes-observed-register.md | 14 +++
.../dashboard/app/components/PlanningModeModal.tsx | 32 +++++-
.../PlanningModeModal.planning-flow.test.tsx | 113 +++++++++++++++++++++
5 files changed, 167 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8757
Fusion-Task-Lineage: ac92a785-aafd-4c92-a1af-b089c21dbb99
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-03 02:40:07 -07:00
gsxdsm
af66b382e0
FN-8755: add undo and redo controls to file editor
...
Add localized CodeMirror history controls while preserving current editor mode during external content resets.
- Add native undo/redo commands, toolbar controls, keyboard shortcuts, and translations
- Reset history for accepted external replacements while retaining stale self-echo history
- Cover simultaneous content and read-only transitions and document editor shortcuts
Files changed:
.changeset/fn-8755-file-editor-history.md | 7 ++
docs/dashboard-guide.md | 2 +-
packages/dashboard/app/components/FileEditor.tsx | 96 ++++++++++++------
.../app/components/__tests__/FileEditor.test.tsx | 108 +++++++++++++++++++++
packages/dashboard/package.json | 3 +-
packages/i18n/locales/en/app.json | 2 +
packages/i18n/locales/es/app.json | 20 +++-
packages/i18n/locales/fr/app.json | 20 +++-
packages/i18n/locales/ko/app.json | 20 +++-
packages/i18n/locales/zh-CN/app.json | 20 +++-
packages/i18n/locales/zh-TW/app.json | 20 +++-
packages/i18n/src/resources.d.ts | 2 +
pnpm-lock.yaml | 45 ++++++---
13 files changed, 294 insertions(+), 71 deletions(-)
Fusion-Task-Id: FN-8755
Fusion-Task-Lineage: 1c0bdb9b-f866-4e01-8002-afe27f34d670
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-02 23:46:16 -07:00
gsxdsm
d39acb5c55
FN-8754: adapt List task details to available width
...
Adapt List task detail routing to the usable content width.
- Measure the List container to choose split-pane or modal detail routing.
- Preserve phone and popup-preference routing while allowing wide tablets to use the split pane.
- Add responsive routing coverage and document the behavior.
Files changed:
.changeset/fn-8754-responsive-list-detail.md | 7 +
docs/dashboard-guide.md | 4 +-
packages/dashboard/app/components/ListView.css | 25 +--
packages/dashboard/app/components/ListView.tsx | 47 +++++-
.../app/components/__tests__/ListView.test.tsx | 169 +++++++++++++++++++--
5 files changed, 216 insertions(+), 36 deletions(-)
Fusion-Task-Id: FN-8754
Fusion-Task-Lineage: 2051e7d5-a5a9-47b8-bfc2-42586b9554cc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-02 23:24:11 -07:00
gsxdsm
73fe461db5
fix: demote routine engine log noise to debug
...
Keep the default TUI for lifecycle transitions (Starting/Specifying/Worktree created/merge/move). Demote expected skips, schedule-trigger echoes, session setup bookkeeping, warm worktree reuse, and fn_run_verification command-fail detail. Pin via severity manifest and contract tests.
2026-08-02 23:18:07 -07:00
gsxdsm
b2373431e4
FN-8752: move escalation model to project selector
...
Centralize executor escalation model selection with the project-scoped provider-aware model control.
- Move escalation provider and model fields from Scheduling to Project Models
- Persist and clear escalation model pairs atomically through the shared selector
- Update search metadata, localization, documentation, and mobile coverage
Files changed:
docs/settings-reference.md | 6 +-
.../__tests__/SettingsModal.mobileClose.test.tsx | 29 +++++++
.../__tests__/SettingsModal.models-auth.test.tsx | 94 ++++++++++++++++++++++
.../search/__tests__/settings-search-index.test.ts | 17 ++++
.../app/components/settings/section-keys.ts | 4 +-
.../sections/ProjectModelsSection.search.ts | 10 +++
.../settings/sections/ProjectModelsSection.tsx | 39 +++++++++
.../settings/sections/SchedulingSection.search.ts | 18 -----
.../settings/sections/SchedulingSection.tsx | 2 -
.../settings-default-descriptions.test.tsx | 4 +-
packages/dashboard/src/shared/settings-sections.ts | 9 +++
packages/i18n/locales/en/app.json | 4 +
packages/i18n/src/resources.d.ts | 4 +
13 files changed, 213 insertions(+), 27 deletions(-)
Fusion-Task-Id: FN-8752
Fusion-Task-Lineage: f0f430d7-7976-4b65-89c5-8eab3487d26a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-02 23:12:56 -07:00
gsxdsm
fb0863f660
FN-8753: enable installed voice input in project settings
...
Make Voice Input available only after its local model and runtime are ready.
- Bundle the optional sherpa runtime with the published CLI.
- Gate the project setting on model installation and stable runtime status codes.
- Add localized recovery guidance, documentation, and coverage.
Files changed:
.changeset/fn-8753-voice-input-enable.md | 7 ++++
docs/dashboard-guide.md | 2 +-
docs/settings-reference.md | 8 +++--
packages/cli/package.json | 3 ++
packages/cli/src/__tests__/package-config.test.ts | 16 +++++++++
.../settings/__tests__/VoiceInputSection.test.tsx | 36 ++++++++++++++++----
.../settings/sections/VoiceInputSection.tsx | 30 ++++++++++++-----
packages/dashboard/package.json | 2 +-
.../routes/__tests__/register-voice-routes.test.ts | 39 ++++++++++++++++++++++
.../dashboard/src/stt/__tests__/voice-stt.test.ts | 27 ++++++++++++---
packages/dashboard/src/stt/parakeet-service.ts | 26 ++++++++++-----
packages/i18n/locales/en/app.json | 6 ++++
pnpm-lock.yaml | 6 +++-
13 files changed, 175 insertions(+), 33 deletions(-)
Fusion-Task-Id: FN-8753
Fusion-Task-Lineage: db92b148-37f0-45d2-b616-ed2e3f2d54f6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-02 23:09:48 -07:00
gsxdsm
19e9f5bc88
chore(release): require interactive confirm; drop authorized/--yes skips
...
Remove the typed authorization phrase and the --yes/-y auto-confirm path so
every real release must confirm y/N in an interactive terminal. Reject --yes
with a clear error so old muscle memory cannot skip the proceed prompt.
2026-08-02 19:58:37 -07:00
gsxdsm
da17a57bde
FN-8731: refresh task definition prompts during planning
...
Keep the visible task definition current while planning and Plan Review can revise it.
- Refresh Definition prompts when the visible tab opens and poll during active planning lifecycles.
- Preserve inline edit drafts while applying authoritative prompt updates.
- Add lifecycle and hidden-host coverage, documentation, and a patch changeset.
Files changed:
.changeset/fn-8731-definition-prompt-refresh.md | 7 ++
docs/dashboard-guide.md | 1 +
.../dashboard/app/components/TaskDetailModal.tsx | 106 ++++++++++++++++++---
.../TaskDetailModal.definition-actions.test.tsx | 91 +++++++++++++++++-
.../TaskDetailModal.popup-hidden-gating.test.tsx | 25 ++++-
5 files changed, 215 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-8731
Fusion-Task-Lineage: b5536ad7-cbe1-42ee-a6df-6e997eeeda05
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-02 19:39:57 -07:00
gsxdsm
5931e10345
FN-8730: add Midnight dashboard theme
...
Add a persisted Midnight palette with consistent first-paint behavior across dashboard surfaces.
- Register Midnight in shared theme metadata and web/Electron startup validators
- Define light and dark Midnight tokens plus selector swatches
- Cover selection and bootstrap validation, and document the new preset
Files changed:
.changeset/fn-8730-midnight-theme.md | 7 ++
docs/dashboard-guide.md | 5 +-
docs/settings-reference.md | 2 +-
packages/core/src/types/execution-and-ui.ts | 5 ++
.../dashboard/app/__tests__/midnight-theme.test.ts | 94 ++++++++++++++++++++++
.../dashboard/app/components/ThemeSelector.css | 14 ++++
.../components/__tests__/ThemeDropdown.test.tsx | 54 ++++++++++++-
packages/dashboard/app/components/themeOptions.ts | 1 +
packages/dashboard/app/index.html | 3 +-
packages/dashboard/app/public/theme-data.css | 86 +++++++++++++++++++-
packages/desktop/src/renderer/index.html | 2 +
11 files changed, 267 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-8730
Fusion-Task-Lineage: 8e2d81bc-37f1-4381-8985-01e83cad06bd
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-02 19:23:28 -07:00
gsxdsm
0e69ed9a5b
fix: stop stale-active-branch rescue spam for done squash leftovers ( #3311 )
...
## Summary
- Local `fusion/*` branches for **done** tasks kept unique tip SHAs
after squash/AI merge, so self-healing logged
`stale-active-branch-rescue-needed` on every maintenance sweep without
ever deleting them.
- **Completion fan-out** now force-deletes the task branch even when
unique commits remain (squash-safe).
- **`reclaim-stale-active-branches`** force-deletes complete-lane
leftovers (`reason=complete-column-unique-commits-force`) and no longer
emits rescue-needed for those lanes; non-complete columns still warn and
preserve unmerged work. Archived lanes still skip reclaim entirely.
Also cleaned up 116 leftover local fusion branches on this machine
(done/orphan only; 9 active kept).
## Test plan
- [x] `pnpm --filter @fusion/engine exec vitest run
src/__tests__/self-healing-completion-fanout.test.ts
src/__tests__/self-healing.test.ts -t "SelfHealingManager
reclaimStaleActiveBranches|self-healing completion
fan-out|force-deletes"`
- [ ] After merge/restart engine: confirm logs no longer spam
rescue-needed for done tasks
- [ ] Confirm active todo/in-progress fusion branches still get
rescue-needed when unique and no worktree
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Bug Fixes**
* Improved cleanup of stale task branches after completion, including
branches with unique commits remaining after squash or AI-assisted
merges.
* Completed tasks now reliably remove residual branches and worktree
metadata.
* Non-completed tasks continue to preserve recoverable branches and
display rescue warnings.
* Added clearer recovery logging and audit records for forced branch
cleanup.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-02 19:05:59 -07:00
gsxdsm
6cc687d3a3
FN-8728: retry incomplete planner runs before review
...
Retry planner attempts until a clean, changed artifact is ready for Plan Review.
- Track each planning attempt's prompt baseline and fallback provenance.
- Require a runtime-owned fallback-dispatch boundary before review handoff.
- Back off and surface actionable errors for empty, unchanged, or fallback-engaged attempts.
Files changed:
.changeset/fn-8728-planner-retry-before-review.md | 7 +
docs/architecture.md | 2 +-
packages/engine/src/__tests__/triage.test.ts | 492 ++++++++++++++++++++++
packages/engine/src/agent-runtime.ts | 8 +
packages/engine/src/agent-session-helpers.ts | 3 +
packages/engine/src/pi.ts | 14 +-
packages/engine/src/runtime-resolution.ts | 14 +-
packages/engine/src/triage.ts | 135 +++++-
8 files changed, 656 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-8728
Fusion-Task-Lineage: e7581d29-5bd6-43dc-aa0b-6594b9dd9c0d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-02 18:26:18 -07:00
gsxdsm
4fb873f465
FN-8722: fix GitHub Import sheet spacing
...
Fix standalone GitHub Import content alignment on mobile and short sheet viewports.
- Remove the standalone resize-handle gutter when the FloatingWindow sheet contract applies.
- Add fixture and browser-smoke coverage for standalone, embedded, and detail import layouts.
- Document the shared short-height sheet geometry behavior and add a patch changeset.
Files changed:
.changeset/fn-8722-github-import-mobile-spacing.md | 7 ++
docs/dashboard-guide.md | 3 +-
.../__tests__/browser-layout-smoke-fixture.test.ts | 17 +++++
.../dashboard/app/components/FloatingWindow.css | 12 ++++
.../__tests__/GitHubImportModal.test.tsx | 18 +++++
.../dashboard/scripts/browser-layout-smoke.mjs | 78 ++++++++++++++++++++++
6 files changed, 134 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8722
Fusion-Task-Lineage: cc812078-b0b5-4223-9435-ed77d80f2b47
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 20:04:41 -07:00
gsxdsm
6d176a9372
FN-8721: reconcile census, delegation routing, and archive repair
...
Align lifecycle census coverage while routing delegated work to workflow-ready lanes and safely repairing archived tasks.
- Route delegated tasks through the selected workflow's hold or entry column.
- Scope soft-deleted archive repairs by project and protect them with compare-and-set updates.
- Refresh lifecycle-column census detection, baseline, documentation, and coverage.
Files changed:
docs/testing.md | 21 +++---
.../u15-engine-dashboard-consumers.test.ts | 31 ++++++++-
.../core/src/task-store/archive-lifecycle-2.ts | 5 ++
.../core/src/task-store/async-archive-lineage.ts | 5 ++
packages/core/src/task-store/async-persistence.ts | 11 ++++
packages/core/src/task-store/async-self-healing.ts | 76 +++++++++++++++-------
.../src/__tests__/agent-tools-delegation.test.ts | 43 +++++++++++-
.../__tests__/lifecycle-column-census-ast.test.ts | 20 ++++++
.../src/__tests__/lifecycle-column-census.test.ts | 29 ++++++---
packages/engine/src/agent-tools.ts | 29 +++++++--
scripts/lib/lifecycle-column-census-ast.mjs | 21 +++++-
scripts/lib/lifecycle-column-census-baseline.json | 17 ++---
scripts/lifecycle-column-census.mjs | 3 +-
13 files changed, 245 insertions(+), 66 deletions(-)
Fusion-Task-Id: FN-8721
Fusion-Task-Lineage: ff78481f-5ecb-4d9b-b21a-a095682372ed
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 16:57:49 -07:00
gsxdsm
54c2c1e666
FN-8719: fix stale milestone validation badges
...
Keep persisted milestone validation rollups and dashboard badges synchronized after assertion changes.
- Reconcile assertion mutations and validation rollups atomically within each project.
- Prevent stale rollup and telemetry responses from overwriting newer milestone state.
- Cover repaired and removed failure states with PostgreSQL and dashboard tests.
Files changed:
.changeset/fn-8719-milestone-validation-rollup.md | 7 +
docs/missions.md | 4 +
.../__tests__/postgres/mission-store.pg.test.ts | 61 +++++++
packages/core/src/async-mission-store.ts | 142 ++++++++++------
.../dashboard/app/components/MissionManager.tsx | 108 ++++++++----
.../MissionManager.validation-rollup.test.tsx | 181 +++++++++++++++++++++
6 files changed, 416 insertions(+), 87 deletions(-)
Fusion-Task-Id: FN-8719
Fusion-Task-Lineage: c505211c-935a-4ad3-b35d-81c486e56121
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 14:38:45 -07:00
gsxdsm
3b633512d8
FN-8707: recover noisy mission validator JSON
...
Recover bounded, valid mission validator payloads amid ordinary response formatting noise.
- Extract bounded, string-aware fenced and balanced JSON candidates and prefer the final valid payload.
- Conservatively repair trailing commas and missing closing delimiters while retaining fail-closed assertion validation.
- Cover recovery and irreparable-response behavior, document the safety bounds, and add a patch changeset.
Files changed:
.../fn-8707-mission-validator-json-recovery.md | 7 +
docs/missions.md | 2 +
.../src/__tests__/mission-execution-loop.test.ts | 74 ++++++++-
packages/engine/src/mission-execution-loop.ts | 183 +++++++++++++++------
4 files changed, 204 insertions(+), 62 deletions(-)
Fusion-Task-Id: FN-8707
Fusion-Task-Lineage: 0eb5e5c0-a520-4485-9f54-0376a47a5b5e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 13:37:23 -07:00
gsxdsm
bf173dad7c
FN-8696: keep reverted tasks out of Done
...
Keep reverted tasks out of completed views and give every task-detail host a revision recovery path.
- Exclude reverted tasks from complete columns and group them in dedicated recovery lists.
- Provide Delete and Revise actions in cards, lists, docks, modals, and popped-out details.
- Add localized copy, documentation, regression coverage, and a patch changeset.
Files changed:
.changeset/fn-8696-reverted-task-resolution.md | 7 ++++
docs/dashboard-guide.md | 4 ++
packages/dashboard/app/App.tsx | 2 +
packages/dashboard/app/components/AppModals.tsx | 2 +
packages/dashboard/app/components/Board.tsx | 42 +++++++++++++++++++-
packages/dashboard/app/components/DockTaskList.tsx | 21 +++++++++-
packages/dashboard/app/components/ListView.tsx | 18 +++++++++
packages/dashboard/app/components/TaskCard.css | 4 ++
packages/dashboard/app/components/TaskCard.tsx | 9 +++++
.../dashboard/app/components/TaskDetailModal.tsx | 18 ++++++++-
.../app/components/__tests__/Board.test.tsx | 46 ++++++++++++++++++++++
.../app/components/__tests__/DockTaskList.test.tsx | 29 +++++++++++++-
.../app/components/dashboard/MainContent.tsx | 4 ++
.../app/components/overflowViewRegistry.tsx | 3 ++
.../app/components/useRightDockController.tsx | 9 +++++
.../app/utils/__tests__/taskRevert.test.ts | 16 +++++++-
packages/dashboard/app/utils/taskRevert.ts | 18 +++++++++
packages/i18n/locales/en/app.json | 3 ++
18 files changed, 249 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-8696
Fusion-Task-Lineage: 7c9550fb-ef8e-4422-8ec1-0de1665413a3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 13:30:18 -07:00
gsxdsm
529ab26ba4
FN-8695: fix dashboard assertion CRUD validation
...
Restore dashboard assertion status edits and deletes for store-generated IDs.
- Validate assertion route IDs against the MissionStore-generated format while preserving legacy IDs.
- Dispatch assertion deletes through the shared confirmation handler and surface request failures.
- Cover current ID CRUD routes and desktop/mobile deletion behavior.
Files changed:
.changeset/fn-8695-assertion-id-validation.md | 7 ++
docs/missions.md | 2 +-
.../dashboard/app/components/MissionManager.tsx | 51 ++++++++---
.../MissionManager.delete-confirm.test.tsx | 99 ++++++++++++++++++++
.../mission-assertion-id-validation.test.ts | 100 +++++++++++++++++++++
packages/dashboard/src/mission-routes.ts | 8 +-
6 files changed, 249 insertions(+), 18 deletions(-)
Fusion-Task-Id: FN-8695
Fusion-Task-Lineage: b7e2d70f-d3c7-4fdd-92f6-989cf414570b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 13:10:26 -07:00
gsxdsm
1e67e87321
FN-8702: fix Git Manager phone sheet spacing
...
Make Git Manager use the standalone phone layout only below the 768px boundary.
- Remove the hidden resize-handle gutter from Git Manager phone sheets
- Preserve embedded, tablet, and desktop Git Manager geometry
- Add responsive layout smoke fixtures and regression coverage
- Document the phone-sheet behavior and add a patch changeset
Files changed:
.changeset/fn-8702-git-manager-mobile-spacing.md | 7 +
docs/dashboard-guide.md | 5 +-
.../__tests__/browser-layout-smoke-fixture.test.ts | 23 ++++
.../dashboard/app/components/FloatingWindow.css | 12 ++
packages/dashboard/app/components/ScriptsModal.css | 10 +-
.../components/__tests__/GitManagerModal.test.tsx | 31 +++--
packages/dashboard/scripts/browser-layout-smoke.mjs| 143 +++++++++++++++++++++
7 files changed, 211 insertions(+), 20 deletions(-)
Fusion-Task-Id: FN-8702
Fusion-Task-Lineage: 52473a8a-d3a7-48d2-b768-fc2f6fcd18b9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 13:03:34 -07:00
gsxdsm
39368f4bb8
FN-8694: add content-addressed validation memoization
...
Memoizes mission validation inputs and bounds repeat failures.
- Persist validator input fingerprints and atomically admit validation runs.
- Reuse unchanged static passes while enforcing per-fingerprint failure budgets.
- Add migration coverage, execution-loop tests, and operator documentation.
Files changed:
.changeset/fn-8694-validation-memoization.md | 7 +
docs/missions.md | 6 +
docs/storage.md | 6 +
.../__tests__/postgres/mission-store.pg.test.ts | 40 +++-
packages/core/src/async-mission-store-queries.ts | 24 ++-
packages/core/src/async-mission-store.ts | 65 +++++-
packages/core/src/mission-store.ts | 10 +-
packages/core/src/mission-types.ts | 19 ++
.../0042_fn_8694_validator_input_fingerprint.sql | 9 +
packages/core/src/postgres/schema-applier.ts | 13 +-
packages/core/src/postgres/schema/project.ts | 5 +
.../src/__tests__/mission-execution-loop.test.ts | 72 ++++++-
packages/engine/src/mission-execution-loop.ts | 217 +++++++++++++++++----
13 files changed, 443 insertions(+), 50 deletions(-)
Fusion-Task-Id: FN-8694
Fusion-Task-Lineage: 92a790d5-f2fc-4e71-b9ee-8334ff38b20d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 12:40:24 -07:00
gsxdsm
7dc6c4b4ec
FN-8711: preserve credential instances in settings actions
...
Preserve selected credential-instance identity across dashboard authentication actions.
- Route named-account OAuth and API-key actions with their instance IDs.
- Retain sibling credential accounts during targeted OAuth polling.
- Document the default-versus-named credential contract and extend desktop/mobile coverage.
Files changed:
...n-8711-settings-credential-instance-contract.md | 7 ++
docs/settings-reference.md | 2 +-
.../app/__tests__/settings-moved-keys.test.ts | 2 +
.../dashboard/app/components/SettingsModal.tsx | 49 +++++++++++---
.../__tests__/SettingsModal.models-auth.test.tsx | 78 ++++++++++++++++++++++
.../components/__tests__/settings-mobile.test.tsx | 14 ++--
.../settings/sections/AuthenticationSection.tsx | 15 +++--
.../settings-default-descriptions.test.tsx | 19 ++++++
8 files changed, 165 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-8711
Fusion-Task-Lineage: f43eaa27-4d36-4a3d-acf3-caba54e31857
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 12:33:35 -07:00
gsxdsm
0512334e86
FN-8714: fix quality runner CLI argument passthrough
...
Allow dashboard aggregate quality commands through the pnpm script boundary.
- Normalize pnpm’s leading argument separator before validating runner options
- Add end-to-end aggregate and fail-fast quality-runner coverage with a deterministic fixture
- Document aggregate quality-runner invocation and failure reporting
Files changed:
docs/testing.md | 15 ++++
packages/dashboard/scripts/__tests__/quality-runner-fixture.mjs | 18 +++++
packages/dashboard/scripts/__tests__/run-quality-tests.test.ts | 88 ++++++++++++++++++++++
packages/dashboard/scripts/run-quality-tests.mjs | 23 ++++--
4 files changed, 139 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-8714
Fusion-Task-Lineage: 48dbd434-a9e6-4283-8658-cbaa254a7dc7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 12:13:52 -07:00
gsxdsm
60706ed5e4
fix: demote high-frequency TUI log lines to debug
...
Session setup, track bookkeeping, intentional skill exclusions, token-cache
metrics, zero-count recovery summaries, and expected-missing PROMPT seed reads
were flooding the default log pane. Gate them behind FUSION_DEBUG so only
state transitions and operator-actionable warnings remain visible.
2026-08-01 11:48:56 -07:00
gsxdsm
01d65805c3
FN-8693: refresh reused worktree bases before execution
...
Refresh reused execution worktrees against the current integration baseline.
- Rebase or reset clean reused worktrees before coding sessions while preserving task commits.
- Persist and audit refreshed base SHAs, and block unsafe refresh states before execution.
- Cover executor, graph, and heartbeat refresh paths with regression tests.
Files changed:
.changeset/fn-8693-stale-worktree-base.md | 7 +
docs/architecture.md | 1 +
.../src/__tests__/agent-heartbeat-worktree.test.ts | 28 ++++
.../__tests__/ce-workflow-step-executor.test.ts | 44 ++++++
.../src/__tests__/worktree-base-refresh.test.ts | 90 ++++++++++++
packages/engine/src/agent-heartbeat.ts | 35 ++++-
packages/engine/src/executor.ts | 67 ++++++++-
packages/engine/src/merger.ts | 5 +
packages/engine/src/run-audit.ts | 11 ++
packages/engine/src/workflow-graph-executor.ts | 32 ++++-
packages/engine/src/worktree-acquisition.ts | 28 +++-
packages/engine/src/worktree-base-refresh.ts | 158 +++++++++++++++++++++
12 files changed, 498 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-8693
Fusion-Task-Lineage: e39a441f-39b5-4723-b503-753e921018f3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 10:03:28 -07:00
gsxdsm
b8bde05ca6
FN-8703: render project overview before health telemetry
...
Render registered project cards immediately while optional health telemetry hydrates in the background.
- Publish completed health batches progressively and prevent stale responses from overwriting current state.
- Keep project controls usable while health metrics load and indicate per-card pending telemetry.
- Add coverage and operator documentation for progressive overview hydration.
Files changed:
.changeset/fn-8703-project-overview-load.md | 7 ++
docs/dashboard-guide.md | 3 +-
packages/dashboard/app/components/ProjectCard.tsx | 12 ++-
.../dashboard/app/components/ProjectOverview.tsx | 15 +--
.../components/__tests__/ProjectOverview.test.tsx | 101 ++++++++++++++++++++
.../app/hooks/__tests__/useProjectHealth.test.ts | 98 ++++++++++++++++++++
packages/dashboard/app/hooks/useProjectHealth.ts | 102 ++++++++++-----------
7 files changed, 277 insertions(+), 61 deletions(-)
Fusion-Task-Id: FN-8703
Fusion-Task-Lineage: eb816c9d-c808-4d52-a3f0-28bb9de5f149
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 09:53:36 -07:00
gsxdsm
b8f7f9e75c
FN-8701: standardize tool-call detail displays
...
Standardize expandable tool-call payloads across dashboard chat and log surfaces.
- Add a shared formatter and detail renderer that preserves complete browser-available arguments and results.
- Use compact previews with wrapped, scrollable expanded payloads in chat, activity, and agent logs.
- Cover formatting and rendering behavior with dashboard tests and document the display contract.
Files changed:
.changeset/fn-8701-tool-call-display.md | 7 ++
docs/dashboard-guide.md | 4 +-
.../dashboard/app/components/AgentLogViewer.tsx | 12 +++-
packages/dashboard/app/components/ChatView.css | 37 ++---------
.../app/components/StandardChatSurface.tsx | 56 +++++++---------
packages/dashboard/app/components/TaskChatTab.css | 17 -----
packages/dashboard/app/components/TaskChatTab.tsx | 31 +++++----
.../dashboard/app/components/ToolCallDetails.css | 52 +++++++++++++++
.../dashboard/app/components/ToolCallDetails.tsx | 77 ++++++++++++++++++++++
.../__tests__/AgentLogViewer.rendering.test.tsx | 8 +++
.../components/__tests__/ChatView.core.test.tsx | 24 +++++++
.../app/components/__tests__/TaskChatTab.test.tsx | 33 +++++++---
.../__tests__/TaskPlannerChatTab.test.tsx | 19 ++++++
13 files changed, 275 insertions(+), 102 deletions(-)
Fusion-Task-Id: FN-8701
Fusion-Task-Lineage: 86513f9a-31d4-45fb-97fe-1f0c73d0e5b3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 09:32:37 -07:00
gsxdsm
e8ca86d5ee
FN-8705: prioritize review and execution slot admission
...
Prioritize lifecycle-critical work whenever project capacity becomes available.
- Rank admission candidates as review/merge, execution, then planning.
- Coordinate scheduler handoffs with project and host capacity reservations.
- Cover lane priority and document the updated operator behavior.
Files changed: .changeset/fn-8705-slot-priority.md | 7 ++
docs/architecture.md | 2 +-
docs/dashboard-guide.md | 2 +-
packages/engine/src/__tests__/concurrency.test.ts | 95 +++++++++++-----------
.../engine/src/__tests__/project-engine.test.ts | 4 +-
.../starved-refinement-x-triage-poll.test.ts | 11 ++-
.../__tests__/triage-refinement-routing.test.ts | 16 ++--
.../workflow-continuation-capacity.test.ts | 3 +-
packages/engine/src/concurrency.ts | 37 +++++++--
packages/engine/src/project-engine.ts | 10 ++-
packages/engine/src/runtimes/in-process-runtime.ts | 3 +-
packages/engine/src/scheduler.ts | 40 ++++-----
packages/engine/src/triage.ts | 7 +-
13 files changed, 133 insertions(+), 104 deletions(-)
Fusion-Task-Id: FN-8705
Fusion-Task-Lineage: ef66360b-e504-4e3f-b25e-b032a719d8c0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 09:24:18 -07:00
gsxdsm
1aa1516023
FN-8692: harden mission validator assertion matching
...
Make validator assertion identity handling explicit and fail closed for ambiguous legacy responses.
- Include authoritative assertion IDs in validator prompts
- Recover only unique exact-count legacy results positionally
- Reject duplicate unknown and empty assertion IDs with regression coverage
- Document the assertion identity contract and add a patch changeset
Files changed:
.changeset/fn-8692-validator-assertion-ids.md | 7 +
docs/missions.md | 2 +-
.../src/__tests__/mission-execution-loop.test.ts | 142 ++++++++++++++++++++-
packages/engine/src/mission-execution-loop.ts | 70 ++++++++--
4 files changed, 204 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-8692
Fusion-Task-Lineage: 973c65e9-962f-472b-8d42-aef1de830d70
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 09:18:49 -07:00
gsxdsm
ac8ce148d5
FN-8691: suppress repeated task wedge notifications
...
Prevent resolved-and-rewedged tasks from flooding operator notification channels.
- Persist per-reason notification timestamps with a six-hour cooldown.
- Apply cooldown claims consistently in durable storage and in-memory fallback paths.
- Cover reason transitions, legacy state, invalid timestamps, and cooldown expiry.
Files changed:
.changeset/fn-8691-wedge-notification-cooldown.md | 7 ++
docs/architecture.md | 4 +-
.../postgres/store-wedge-resolution.pg.test.ts | 67 +++++++++++-
packages/core/src/index.ts | 1 +
packages/core/src/store.ts | 21 +++-
packages/core/src/task-store/task-mutation-ops.ts | 6 ++
packages/core/src/types.ts | 2 +
packages/core/src/types/task-core.ts | 15 +++
.../__tests__/task-wedge-notification.test.ts | 117 ++++++++++++++++++++-
.../src/notification/notification-service.ts | 30 +++++-
10 files changed, 261 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-8691
Fusion-Task-Lineage: b7460508-f9b0-488b-828c-a51e9477304d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 08:58:49 -07:00