Commit Graph

13463 Commits

Author SHA1 Message Date
gsxdsm
f8f828357f FN-9018: refresh W33 test velocity baseline
Refresh the weekly test-velocity report with the latest captured measurements.

- Update baseline metrics, deltas, quarantine status, and #leads summary.
- Append the W33 measurement and slowest-test metadata to the velocity history.

Files changed:
 docs/test-velocity-baseline.md     |  24 ++++----
 scripts/test-velocity-history.json | 114 +++++++++++++++++++++++++++++++++++++
 2 files changed, 126 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-9018

Fusion-Task-Lineage: b4d91cfd-2d5d-4e5a-ac9a-e62c50915f49

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 19:10:03 -07:00
gsxdsm
c7451ec6b2 chore(release): v0.76.0-beta.2
Version bump via changesets.
2026-08-12 17:37:09 -07:00
gsxdsm
e7d0c37c4e test(sse): drive agent-activity durable poll via env seam instead of 2.1s real sleep
Replace the fixed ~2.1s real time-wait in the agent-activity SSE durable
integration test with a bounded FUSION_AGENT_ACTIVITY_POLL_MS env test-seam
(default 2000ms unchanged in production) and poll for the delivered frame.
Removes an FN-5048 real time-wait anti-pattern; production behavior unchanged.
2026-08-12 17:03:11 -07:00
gsxdsm
cc1041207c FN-9012: hide empty task Recommendations tabs
Show Recommendations only for completed tasks with task-owned recommendations.

- Gate tab visibility and reconciliation on matching task-detail recommendation data.
- Cover empty, populated, stale-detail, and task-switch recommendation states.
- Document the behavior and add a patch changeset.

Files changed:
 .changeset/fn-9012-recommendations-tab-visibility.md      |   7 +
 docs/dashboard-guide.md                                    |   2 +-
 packages/dashboard/app/components/TaskDetailModal.tsx      |  33 ++-
 packages/dashboard/app/components/TaskRecommendationsTab.tsx |   2 +-
 packages/dashboard/app/components/__tests__/TaskDetailModal.summary-tab.test.tsx | 305 +++++++++++++++++----
 5 files changed, 289 insertions(+), 60 deletions(-)

Fusion-Task-Id: FN-9012

Fusion-Task-Lineage: 2dd3b1c6-ab08-43e3-9c9e-c8d3d9cf4692

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 16:24:54 -07:00
gsxdsm
fc56161c9d FN-9014: add chat and mailbox message archiving
Add archived-message lifecycle support across chat and mailbox views.

- Persist archive state with a PostgreSQL migration and message-store APIs.
- Expose archive, restore, and permanent-delete messaging endpoints.
- Add archived-message views and archive-by-default actions with regression coverage.
- Document storage behavior and add a release changeset.

Files changed:
 .changeset/fn-9014-message-archive.md              |   7 ++
 docs/dashboard-guide.md                            |   7 +-
 docs/storage.md                                    |   2 +-
 .../__tests__/postgres/message-store.pg.test.ts    |  34 +++++++
 .../src/__tests__/postgres/schema-applier.test.ts  |   9 +-
 .../core/src/async-stores/async-message-store.ts   |  73 +++++++++++---
 .../migrations/0058_fn_9014_message_archive.sql    |  13 +++
 packages/core/src/postgres/schema-applier.ts       |  14 ++-
 packages/core/src/postgres/schema/project.ts       |   2 +
 packages/core/src/stores/message-store.ts          |  68 ++++++++++---
 packages/core/src/types/messaging/messages.ts      |   9 ++
 packages/dashboard/app/api/chat/messaging.ts       |  37 +++++--
 packages/dashboard/app/api/legacy.ts               |   2 +
 packages/dashboard/app/components/ChatView.tsx     |  21 +++-
 packages/dashboard/app/components/MailboxModal.tsx |  74 ++++++++++++--
 packages/dashboard/app/components/MailboxView.tsx  | 108 +++++++++++++++++++--
 .../__tests__/ChatView.core-contracts.test.tsx     |  24 +++++
 .../components/__tests__/ChatView.test-harness.tsx |   3 +
 .../app/components/__tests__/MailboxModal.test.tsx |   6 +-
 .../app/components/__tests__/MailboxView.test.tsx  |  10 +-
 .../dashboard/app/hooks/__tests__/useChat.test.ts  |  35 ++++++-
 packages/dashboard/app/hooks/useChat.ts            |  38 +++++++-
 .../__tests__/messaging-archive-routes.test.ts     |  86 ++++++++++++++++
 .../src/routes/register-messaging-scripts.ts       |  33 ++++++-
 24 files changed, 635 insertions(+), 80 deletions(-)

Fusion-Task-Id: FN-9014

Fusion-Task-Lineage: 1dbd02c3-1180-4d72-8cbc-9594e5f355dc

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 16:03:30 -07:00
gsxdsm
8699ff41e2 FN-9016: add manager evaluation tools
Enable managers to review report evaluations and record coaching follow-ups.

- Add manager-scoped evaluation read and follow-up extension tools.
- Enforce management-subtree access through action gating and regression tests.
- Document the tool surface and add a minor release changeset.

Files changed:
 .changeset/fn-9016-manager-eval-tools.md           |   7 +
 docs/agent-tool-surface-full-loop.md               |   4 +-
 docs/agents.md                                     |   8 +-
 packages/cli/skill/fusion/SKILL.md                 |   2 +-
 .../cli/skill/fusion/references/extension-tools.md |  22 ++
 .../skill/fusion/references/fusion-capabilities.md |   2 +
 .../__tests__/extension-manager-eval-tools.test.ts | 159 +++++++++++++++
 packages/cli/src/extension.ts                      | 227 +++++++++++++++++++++
 .../engine/src/__tests__/agent-action-gate.test.ts |   1 +
 .../src/__tests__/gating-classifications.test.ts   |   1 +
 .../src/__tests__/permanent-agent-gating.test.ts   |   1 +
 .../engine/src/execution/gating-classifications.ts |   8 +
 12 files changed, 438 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-9016

Fusion-Task-Lineage: 1ad7c344-0f3c-4565-aabc-acb51481431d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 15:51:22 -07:00
gsxdsm
366dfe123e FN-9015: refresh Grok runtime model example
Refresh the Grok runtime README with the current flagship model invocation.

- Update the optional Grok ACP command to use grok-4.6.
- Document why the illustrative model identifier tracks the provider default.

Files changed:
 plugins/fusion-plugin-grok-runtime/README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-9015

Fusion-Task-Lineage: 6dd04810-fe06-4462-82b9-5abb38e229c0

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 15:40:14 -07:00
gsxdsm
e144e8c195 FN-9009: align Quick Add merger model row
Make the Quick Add merger model row consistent with the other role selectors.

- Label the top-level merger selector as Merger
- Align the merger icon spacing with other model menu rows
- Cover role labels, spacing, and override navigation

Files changed:
 .changeset/fn-9009-quick-add-merger-label.md       |  7 ++++
 .../dashboard/app/components/QuickEntryBox.tsx     | 25 ++++++++++---
 .../components/__tests__/QuickEntryBox.test.tsx    | 41 +++++++++++++++++++---
 3 files changed, 65 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-9009

Fusion-Task-Lineage: bfc915d6-7a8d-4f08-86e8-c270b5783458

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 15:19:49 -07:00
gsxdsm
b0f623b100 FN-9013: fix mission feature reconciliation
Preserve mission-store method receivers so active mission reconciliation completes reliably.

- Invoke optional listFeatures with its mission-store receiver.
- Contain reconciliation failures to individual slices and continue remaining work.
- Cover synchronous, asynchronous, fallback, and failing-slice behavior.

Files changed:
 .changeset/fn-9013-scheduler-listfeatures-receiver.md     |   7 ++
 .../mission-stranded-feature-retriage.test.ts      | 109 +++++++++++++++++++++
 packages/engine/src/scheduler.ts                   |  51 ++++++----
 3 files changed, 146 insertions(+), 21 deletions(-)

Fusion-Task-Id: FN-9013

Fusion-Task-Lineage: 2745383a-3780-4fa4-bf07-bc75419d3384

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 15:14:32 -07:00
gsxdsm
02f7b589e2 FN-9011: fix model dropdown provider toggles
Keep portaled model-provider toggles interactive when hosts use document-level outside-close handlers.

- Stop pointer and mouse events at the portaled dropdown boundary.
- Cover outside-close, multiple-instance, modal, desktop, and mobile toggle interactions.
- Add a patch changeset for the dropdown fix.

Files changed:
 .changeset/fn-9011-model-dropdown-toggle.md        |  7 ++
 .../app/components/CustomModelDropdown.tsx         | 17 ++++
 .../__tests__/CustomModelDropdown.test.tsx         | 95 +++++++++++++++++++++-
 3 files changed, 118 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-9011

Fusion-Task-Lineage: 37559d4e-27df-4ad5-8b3e-4ec28d55e2e6

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 15:08:09 -07:00
gsxdsm
6e04b31579 FN-9010: fix Quick Add model filtering
Keep the Quick Add model filter focused and functional within its portaled menu.

- Exempt form controls and the nested model dropdown from the composer focus guard.
- Add desktop and mobile regression coverage for filtering model choices.
- Add a patch changeset for the Quick Add filter fix.

Files changed:
 .changeset/fix-quick-add-model-filter.md           |   7 ++
 .../dashboard/app/components/QuickEntryBox.tsx     |  14 ++-
 .../__tests__/QuickEntryBox-model-filter.test.tsx  | 113 +++++++++++++++++++++
 3 files changed, 133 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-9010

Fusion-Task-Lineage: da86e2d8-8722-4598-b25e-786b5850971c

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 15:02:18 -07:00
gsxdsm
c4467b0a5b FN-9007: upgrade Pi runtime to 0.84.1
Upgrade the bundled Pi runtime closure to version 0.84.1.

- Pin direct and transitive Pi runtime packages to a coherent 0.84.1 closure.
- Adapt runtime interfaces and test assertions for Pi 0.84.1 behavior.
- Guard the added Pi client, protocol, and telemetry packages in desktop packaging checks.

Files changed:
 .changeset/fn-9007-pi-0-84-1.md                    |   7 +
 packages/cli/package.json                          |   4 +-
 packages/cli/src/__tests__/package-config.test.ts  |   6 +-
 packages/cli/vitest.config.ts                      |   2 +-
 packages/core/package.json                         |   2 +-
 packages/dashboard/package.json                    |   4 +-
 packages/dashboard/src/routes.ts                   |   6 +-
 packages/engine/package.json                       |   4 +-
 packages/engine/src/__tests__/pi.test.ts           |  45 ++--
 .../src/__tests__/provider-registration.test.ts    |   4 +-
 packages/engine/src/auth/auth-storage.ts           |  20 +-
 packages/engine/src/pi.ts                          |   5 +
 packages/pi-claude-cli/package.json                |   8 +-
 pnpm-lock.yaml                                     | 283 ++++++++++++---------
 pnpm-workspace.yaml                                |  14 +-
 .../__tests__/check-pi-versions-pinned.test.mjs    |  27 +-
 scripts/check-pi-versions-pinned.mjs               |   8 +
 17 files changed, 279 insertions(+), 170 deletions(-)

Fusion-Task-Id: FN-9007

Fusion-Task-Lineage: 89045e86-d4c8-4fc3-bbf6-5ba38fc786e7

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 14:07:30 -07:00
gsxdsm
508ebc3812 FN-9008: add Grok 4.6 model catalog support
Register Grok 4.6 across Fusion's shared Grok provider catalog.

- Add Grok 4.6 metadata and preserve it through provider merges
- Cover registration and extension model-list behavior
- Update Grok model references and publish a minor changeset

Files changed:
 .changeset/fn-9008-grok-4-6.md                    |  7 +++
 docs/grok-cli-contract.md                         |  4 +-
 docs/settings-reference.md                        |  2 +-
 packages/core/src/__tests__/grok-provider.test.ts | 54 +++++++++++++++++------
 packages/core/src/ai/grok-provider.ts             | 21 +++++++++
 5 files changed, 72 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-9008

Fusion-Task-Lineage: 5ee7688e-a1eb-4b57-8f72-1f69616ff456

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 13:29:34 -07:00
gsxdsm
f85f6257f6 FN-9005: add scoped workflow analytics regression coverage
Cover workflow-name analytics lookups across project-scoped, legacy, and built-in workflow selections.

- Scope existing custom-workflow analytics fixtures to their owning project
- Add PostgreSQL coverage preventing foreign or legacy workflow names from leaking into project analytics
- Verify built-in workflow labels remain resolved

Files changed:
 packages/core/src/__tests__/postgres/command-center-remaining-analytics.pg.test.ts | 73 ++++++++++++++++++++--
 1 file changed, 69 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-9005

Fusion-Task-Lineage: e2686ef0-4cbe-4993-be03-05cac6948401

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 09:26:53 -07:00
gsxdsm
b6839f4f03 FN-9004: reconcile PostgreSQL project ownership defaults
Reconcile PostgreSQL project ownership defaults and schema declarations.

- Add an idempotent migration restoring the GitHub check-state project default.
- Align Drizzle project ownership defaults and composite keys with PostgreSQL.
- Cover schema declarations and upgrade migration behavior.

Files changed:
 .changeset/fn-9004-project-ownership-defaults.md   |   7 +
 docs/storage.md                                    |   1 +
 ...ema-ownership-declarations-remaining.pg.test.ts | 170 +++++++++++++++++++++
 .../src/__tests__/postgres/schema-applier.test.ts  |   9 +-
 ...04_project_ownership_default_reconciliation.sql |  13 ++
 packages/core/src/postgres/schema-applier.ts       |  13 +-
 packages/core/src/postgres/schema/project.ts       |  47 ++++--
 7 files changed, 248 insertions(+), 12 deletions(-)

Fusion-Task-Id: FN-9004

Fusion-Task-Lineage: 43bb14f6-01b7-42be-a47c-7da1128f465e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 09:13:04 -07:00
gsxdsm
b1dad5c9be FN-9003: reconcile approval audit events with project schema
Align approval audit event declarations and reads with PostgreSQL project ownership.

- Model composite project-scoped audit event identities in the schema
- Scope public audit history reads and cover project isolation behavior
- Document the storage contract and add a patch changeset

Files changed:
 .changeset/fn-9003-approval-audit-project-scope.md |   7 +
 docs/storage.md                                    |   2 +-
 ...oval-request-audit-project-isolation.pg.test.ts | 183 +++++++++++++++++++++
 .../async-stores/async-approval-request-store.ts   |   5 +-
 packages/core/src/postgres/schema/project.ts       |   9 +-
 5 files changed, 202 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-9003

Fusion-Task-Lineage: 5a9caac3-7c2f-4584-8844-4ac711cc48bb

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 08:38:35 -07:00
gsxdsm
52facd1461 FN-9000: scope runtime records to their projects
Scope runtime data access to the owning project while preserving explicit unbound compatibility.

- Thread optional project identifiers through project-table reads and mutations.
- Isolate chat, approvals, artifacts, secrets, audit, branch groups, plugin analytics, and verification cache records.
- Add PostgreSQL coverage and a patch changeset documenting multi-project isolation.

Files changed:
 .../fn-9000-project-ownership-runtime-scope.md     |   7 +
 docs/storage.md                                    |   3 +-
 .../project-ownership-runtime-scope.pg.test.ts     | 155 +++++++++++++++++++++
 packages/core/src/agents/approval-request-store.ts |  20 ++-
 .../async-stores/async-approval-request-store.ts   |  30 ++--
 packages/core/src/async-stores/async-chat-store.ts | 105 +++++++++++---
 .../core/src/async-stores/async-secrets-store.ts   |  58 +++++---
 packages/core/src/chat/chat-store.ts               |  22 +--
 .../src/plugins/plugin-activation-analytics.ts     |  12 +-
 packages/core/src/secrets/secrets-store.ts         |  12 +-
 packages/core/src/store.ts                         |   6 +-
 .../src/task-store/async/async-archive-lineage.ts  |  16 ++-
 packages/core/src/task-store/async/async-audit.ts  |  18 ++-
 .../src/task-store/async/async-branch-groups.ts    |  50 ++++---
 .../task-store/async/async-comments-attachments.ts |  35 +++--
 .../core/src/task-store/branch-and-pr-entities.ts  |  15 +-
 packages/core/src/task-store/branch-group-ops.ts   |   2 +-
 packages/core/src/task-store/task-artifacts-ops.ts |   2 +-
 packages/core/src/task-store/task-id-integrity.ts  |   2 +-
 packages/core/src/task-store/task-mutation-ops.ts  |  14 +-
 .../core/src/task-store/workflow-definitions.ts    |   7 +
 packages/dashboard/src/server.ts                   |   2 +-
 22 files changed, 472 insertions(+), 121 deletions(-)

Fusion-Task-Id: FN-9000

Fusion-Task-Lineage: 9842e9e9-ec50-4459-8534-dfdaa2cdf35e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 07:43:29 -07:00
gsxdsm
0ed0e53d56 FN-9002: model project-owned schema identities
Align project schema declarations with the existing ownership partition.

- Model eight project-owned tables with project-leading identities and defaults.
- Preserve composite foreign-key and project-scoped uniqueness metadata.
- Add PostgreSQL declaration coverage and document deferred runtime predicates.

Files changed:
 ...n-9002-project-schema-ownership-declarations.md |   7 +
 docs/storage.md                                    |   1 +
 ...roject-schema-ownership-declarations.pg.test.ts | 245 +++++++++++++++++++++
 .../core/src/async-stores/async-secrets-store.ts   |  26 +--
 packages/core/src/postgres/schema/project.ts       |  44 +++-
 5 files changed, 298 insertions(+), 25 deletions(-)

Fusion-Task-Id: FN-9002

Fusion-Task-Lineage: b6f45d1c-d7d9-4a96-b86e-6d120df3f756

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-12 07:09:55 -07:00
gsxdsm
36691e54d2 chore(release): v0.76.0-beta.1
Version bump via changesets.
2026-08-12 00:17:27 -07:00
gsxdsm
695269a3d1 fix(FN-8979): classify mission removal as minor 2026-08-12 00:12:07 -07:00
gsxdsm
1993bc7758 fix(FN-8847): classify compatibility removal as minor 2026-08-12 00:12:02 -07:00
gsxdsm
5e6719349d FN-9001: test cross-route model cache invalidation
Add route-level coverage for shared model registry invalidation.

- Exercise credential mutations across auth and model registrars
- Cover stale in-flight refreshes, cache isolation, and rename behavior
- Ratchet model routes away from direct registry refresh calls

Files changed:
 ...r-model-routes-cross-route-invalidation.test.ts | 199 +++++++++++++++++++++
 1 file changed, 199 insertions(+)

Fusion-Task-Id: FN-9001

Fusion-Task-Lineage: c5974546-6cc6-4ea5-99e9-2e3e9077e490

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 22:40:54 -07:00
gsxdsm
d9a0ed7837 fix(FN-8998): prevent planning lock reentry stalls 2026-08-11 21:44:22 -07:00
gsxdsm
11334b1249 FN-8998: scope workflow definitions by project
Keep custom workflows isolated within their owning project.

- Model workflows with a project-scoped composite key and scope definition mutations.
- Preserve globally safe ID occupancy while isolating analytics name lookups.
- Add PostgreSQL coverage and document the project partition contract.

Files changed:
 .changeset/fn-8998-workflows-project-partition.md  |   7 +
 docs/storage.md                                    |   1 +
 .../workflows-project-isolation.pg.test.ts         | 146 +++++++++++++++++++++
 .../core/src/async-stores/async-workflow-store.ts  |  19 ++-
 packages/core/src/board/workflow-analytics.ts      |   7 +-
 packages/core/src/postgres/schema/project.ts       |  17 ++-
 .../core/src/task-store/workflow-definitions.ts    |  25 ++--
 packages/core/src/task-store/workflow-ops.ts       |  27 +++-
 8 files changed, 224 insertions(+), 25 deletions(-)

Fusion-Task-Id: FN-8998

Fusion-Task-Lineage: b6e8a100-de4d-4ff9-98df-4504d9050740

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 20:25:59 -07:00
gsxdsm
9c5176f55e FN-8997: enforce project ownership for project tables
Enforce project-scoped ownership for chat and workflow records.

- Add project ownership columns, migration backfill, and schema validation.
- Scope chat-room and workflow CRUD operations to the active project.
- Add PostgreSQL regression coverage, storage documentation, and a release changeset.

Files changed: .../fn-8997-project-ownership-declaration-drift.md |   7 ++
 docs/storage.md                                    |   1 +
 .../project-ownership-declaration-drift.pg.test.ts |  42 +++++++++
 .../src/__tests__/postgres/schema-applier.test.ts  |   9 +-
 packages/core/src/async-stores/async-chat-store.ts | 100 ++++++++++++---------
 packages/core/src/chat/chat-store.ts               |  38 ++++----
 ...fn_8997_project_ownership_declaration_drift.sql |  17 ++++
 packages/core/src/postgres/schema-applier.ts       |  12 ++-
 packages/core/src/postgres/schema/project.ts       |  43 +++++++--
 packages/core/src/task-store/project-store-ops.ts  |   7 +-
 .../core/src/task-store/workflow-definitions.ts    |   4 +-
 packages/core/src/task-store/workflow-ops.ts       |  13 +--
 .../src/task-store/workflow-task-create-ops.ts     |   2 +-
 13 files changed, 210 insertions(+), 85 deletions(-)

Fusion-Task-Id: FN-8997

Fusion-Task-Lineage: 01cd71b1-8f86-41e5-abdb-5ab00ff91c83

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 19:34:01 -07:00
gsxdsm
5ce3a973e6 FN-8902: bound and cache model registry refreshes
Bound model-catalog refreshes so requests retain available models when providers stall.

- Add timeout-bounded, single-flight engine registry refreshes with fallback model retention.
- Cache refresh outcomes per registry and invalidate them after all credential mutations, including default-instance changes.
- Cover refresh cache and route behavior, and document the resilience contract.

Files changed:
 .changeset/fn-8902-models-refresh-bounding.md      |   7 +
 docs/dashboard-guide.md                            |   6 +
 .../__tests__/model-registry-refresh-cache.test.ts |  77 +++++++
 .../register-model-routes-refresh-bounding.test.ts | 246 +++++++++++++++++++++
 .../dashboard/src/model-registry-refresh-cache.ts  | 153 +++++++++++++
 packages/dashboard/src/routes.ts                   |   5 +
 .../dashboard/src/routes/register-auth-routes.ts   |  24 +-
 .../dashboard/src/routes/register-model-routes.ts  |  12 +-
 .../src/__tests__/model-registry-refresh.test.ts   |  33 +++
 packages/engine/src/auth/model-registry-refresh.ts | 125 +++++++----
 packages/engine/src/index.ts                       |   3 +
 11 files changed, 642 insertions(+), 49 deletions(-)

Fusion-Task-Id: FN-8902

Fusion-Task-Lineage: 9f0eaf34-6d28-49aa-b065-274be14ea500

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 19:00:44 -07:00
gsxdsm
7b4b2b547b FN-8996: guard engine test module specifiers
Ensure engine test dependencies remain valid after module moves.

- Expand the engine test specifier guard to validate Vitest APIs and imports.
- Repair moved worktree, branch-conflict, and lifecycle module references in tests.
- Preserve worktree recovery coverage and document the harness contract.

Files changed:
 docs/testing.md                                    |  21 ++-
 .../worktrunk-self-healing.test.ts                 |  14 +-
 .../__tests__/vi-mock-specifiers-resolve.test.ts   | 149 ++++++++++++++++-----
 .../__tests__/workflow-graph-step-rerun.test.ts    |  14 +-
 ...-sync-role-conversion-inert-live-e2e.pg.test.ts |   2 +-
 .../__tests__/worktree-acquisition-pinned.test.ts  |  52 ++++++-
 .../__tests__/worktree-admin-entry-prune.test.ts   |  12 +-
 7 files changed, 212 insertions(+), 52 deletions(-)

Fusion-Task-Id: FN-8996

Fusion-Task-Lineage: dd93b4a8-cf45-42e2-9823-e5c2e6f84f82

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 18:46:48 -07:00
gsxdsm
fb5df0fc46 FN-8993: guard knowledge graph directory setting
Classify the knowledge graph output directory as an intentionally non-surfaced setting.

- Allowlist the CLI/engine-owned knowledgeGraphDir default with its rationale.
- Add regression coverage that preserves its Settings-description guard classification.

Files changed:
 .../settings-default-descriptions.test.tsx         | 33 ++++++++++++++++++++++
 1 file changed, 33 insertions(+)

Fusion-Task-Id: FN-8993

Fusion-Task-Lineage: 34d82e65-5d1d-4805-8630-f3393de8e998

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 18:40:35 -07:00
gsxdsm
3b1c7881a8 FN-8988: partition agent ratings by project
Isolate PostgreSQL agent ratings within each project while preserving compatibility behavior.

- Add migration 0055 to enforce the (project_id, id) rating identity key and repair drifted composite keys.
- Scope rating CRUD operations to bound projects and document the storage contract.
- Cover cross-project rating isolation and drifted-key migration repair.

Files changed:
 .changeset/fn-8988-agent-ratings-project-partition.md     |   7 ++
 docs/storage.md                                            |   1 +
 packages/core/src/__tests__/postgres/agent-ratings-project-isolation.pg.test.ts | 105 +++++++++++++++++++++
 packages/core/src/__tests__/postgres/schema-applier.test.ts |  66 ++++++++++++-
 packages/core/src/agents/agent-store.ts                    |  18 +++-
 packages/core/src/async-stores/async-agent-store.ts        |  11 ++-
 packages/core/src/postgres/migrations/0055_fn_8988_agent_ratings_project_partition.sql |  74 +++++++++++++++
 packages/core/src/postgres/schema-applier.ts                |  12 ++-
 packages/core/src/postgres/schema/project.ts                |   5 +
 9 files changed, 293 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-8988

Fusion-Task-Lineage: 5d3e5e60-1589-4641-8695-1786f1c15c5d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 18:35:43 -07:00
gsxdsm
12eeeaf046 FN-8901: restore duplicate conflict responses
Require matching named proposal claims before a deterministic duplicate can be reused.

- Restore 409 duplicate responses for ordinary or unrelated proposal intake.
- Preserve duplicate reuse for matching trusted recommendation claims.
- Cover active and terminal canonical task cases.
- Add a patch changeset for the intake fix.

Files changed:
 .changeset/fn-8901-deterministic-duplicate-409.md  |  7 ++++
 .../__tests__/routes-tasks-near-duplicate.test.ts  | 47 ++++++++++++++++++++++
 .../src/routes/register-task-workflow-routes.ts    | 11 ++++-
 3 files changed, 64 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-8901

Fusion-Task-Lineage: f9a41ceb-46aa-4589-9fdc-7f1cc35a01e1

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 18:21:24 -07:00
gsxdsm
167e17c697 fix(engine): resume planned mission follow-ups 2026-08-11 17:53:40 -07:00
gsxdsm
b095ddeb69 fix: exclude gitignored desktop deploy staging from workspace package-graph check
The check-workspace-package-graph validator globs the filesystem for package
manifests but only excluded node_modules/dist. On any machine that had run a
desktop packaging build (pnpm deploy), the gitignored electron-builder staging
dir packages/desktop/deploy/ carries a copy of desktop's package.json and
tripped the unglobbed-package violation, breaking pretest/gate locally while CI
(clean checkout, no deploy dir) stayed green. Exclude the staging path alongside
node_modules/dist since a gitignored dir is absent from the isolated worktree
this validator guards.
2026-08-11 17:04:28 -07:00
gsxdsm
0e4c0c713e FN-8995: reconcile durable-write inventory drift
Keep the durable-write inventory synchronized while preserving reviewed lifecycle verdicts.

- Add fail-closed manifest regeneration and regression coverage.
- Reconcile current call-site structure while retaining equivalent verdicts through module moves.
- Clarify durable wedge-notification writer classification and regeneration guidance.

Files changed:
 .../merge-orphan-body-durable-write-fences.md      |    18 +-
 .../__tests__/_merge-durable-write-callsites.ts    |    84 +-
 .../merge-orphan-durable-write-inventory.json      | 15414 +++++++++----------
 ...ge-orphan-durable-write-inventory-drift.test.ts |    88 +-
 4 files changed, 7836 insertions(+), 7768 deletions(-)

Fusion-Task-Id: FN-8995
Fusion-Task-Lineage: df3d27ca-6614-418d-b09f-e1dd9f49f910
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 15:29:44 -07:00
gsxdsm
5134a55b77 FN-8958: fence orphaned merge-body writes
Prevent cancelled merge generations from writing stale task state.

- Add a signal-aware merge write fence with orphan audit reporting.
- Fence merge finalization, post-push metadata, and recovery-branch task logs.
- Cover durable write callsites and cancellation behavior with tests and guidance.

Files changed:
 .changeset/fn-8958-orphan-merge-write-fence.md     |   7 +
 AGENTS.md                                          |   1 +
 .../reliability/orphan-merge-body-write-fence.md   |  68 ++
 .../__tests__/_merge-durable-write-callsites.ts    |   4 +
 .../merge-orphan-durable-write-inventory.json      | 982 +++++++++++----------
 .../merge-orphan-body-durable-writes.test.ts       |  38 +-
 .../engine/src/__tests__/merge-write-fence.test.ts |  39 +
 .../engine/src/merge/auto-merge-finalization.ts    |   9 +
 packages/engine/src/merge/merge-write-fence.ts     |  92 ++
 packages/engine/src/merge/merger-ai.ts             | 173 ++--
 10 files changed, 875 insertions(+), 538 deletions(-)

Fusion-Task-Id: FN-8958
Fusion-Task-Lineage: 5f398c44-4320-4f0c-be15-707184f66aa8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 15:20:19 -07:00
gsxdsm
43141467fb FN-8955: harden reviewer verdict extraction
Recover structured reviewer verdicts from prose containing malformed brace or quote characters.

- Scan and recover JSON verdict candidates after parser desynchronization.
- Prevent unreadable structured verdicts from being treated as prose approvals.
- Cover malformed prose and multi-finding verdict recovery across review gates.

Files changed:
 .changeset/fn-8955-verdict-extractor.md            |  7 ++
 docs/workflow-steps.md                             |  4 +-
 packages/engine/src/__tests__/reviewer.test.ts     | 65 +++++++++++++++
 .../workflow-malformed-verdict-gate.test.ts        | 14 ++++
 .../workflow-step-verdict-parsing.test.ts          | 86 ++++++++++++++++++--
 packages/engine/src/execution/reviewer.ts          | 92 ++++++++++++++++++++--
 .../engine/src/executor/workflow-step-verdict.ts   | 16 ++--
 7 files changed, 267 insertions(+), 17 deletions(-)

Fusion-Task-Id: FN-8955

Fusion-Task-Lineage: 84107fd2-b7f3-4162-9e8c-2ec24600d9d5

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 15:01:52 -07:00
gsxdsm
f2c729bf77 FN-8994: add workspace package graph validation
Prevent cold workspace installs from failing on missing or unglobbed local packages.

- Validate workspace-protocol dependencies and overrides against glob-covered packages.
- Add static-gate coverage and regression tests for missing plugin packages.
- Document the workspace package graph check.

Files changed:
 docs/testing.md                                    |   4 +-
 package.json                                       |   9 +-
 scripts/__tests__/check-workspace-package-graph.test.mjs | 103 +++++++++++++++
 scripts/check-workspace-package-graph.mjs          | 138 +++++++++++++++++++++
 4 files changed, 249 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-8994

Fusion-Task-Lineage: 17dbe062-79aa-4417-ae38-43df881e9fa4

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 14:56:14 -07:00
gsxdsm
778292b484 refactor: package code organization wave 19 (self-healing pure peels) (#3403)
## Summary
Starts **U5** of the package code-organization program after wave 18
(executor peels) landed.

Peels pure free-function clusters out of `self-healing.ts` into
`packages/engine/src/self-healing/` without behavior changes. Public
imports from `./self-healing.js` remain stable via re-exports.

### Peels
| Symbol | New home |
|--------|----------|
| `autoRecoverWorktreeSessionStartFailure` |
`self-healing/auto-recover-worktree-session.ts` |
| `archiveAsGhostBug` | `self-healing/archive-ghost-bug.ts` |
| `hasStepProgress` / work-complete helpers |
`self-healing/step-progress.ts` |

### Line count
- `self-healing.ts`: ~15456 → ~15231 (baseline ratcheted to post-peel
live; main had already drifted past the prior grandfathered ceiling via
organic growth)
- New modules each well under 2,000 lines

## Test plan
- [x] `pnpm --filter @fusion/engine exec tsc --noEmit`
- [x] `self-healing-trait-rekey.test.ts` (autoRecover requeue)
- [x] `self-healing-paused-abort-recovery.test.ts`
- [x] `self-healing-model-unavailable-recovery.test.ts`
- [ ] CI gate

## Follow-ups
U5 Slice B: domain method clusters (startup, in-review, merge-status,
workspace, surfacing) into additional `self-healing/*.ts` modules.

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

* **Bug Fixes**
* Improved automatic recovery when worktree sessions fail to start,
including stale or incomplete session data.
* Tasks can be safely requeued while preserving progress, or escalated
after retry limits are reached.
* Improved handling of completed work and failures where task completion
was not recorded.
* Preserved valid task branches during recovery and provided more
reliable fallback requeue behavior.
* Ghost bugs are automatically archived with recovery details and
activity history.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-11 11:29:30 -10:00
gsxdsm
9622a62425 fix(engine): preserve manual handoff holds during recovery (#3422)
## Summary
Supersedes #3421 — fork head not writable for main-merge. Same change
rebased onto current main so lifecycle-column lint stays green.

## Test plan
- [x] merges cleanly onto main
- [ ] CI green

Co-authored-by: BESA-Franz <49682134+BESA-Franz@users.noreply.github.com>
2026-08-11 11:29:23 -10:00
Phil Larson
210c22c485 fix(ci): classify workflowRole as role vocabulary (#3408)
## Summary
- Classify workflow work-item `workflowRole` comparisons as role
vocabulary in the lifecycle-column census.
- Add a regression test so triage role comparisons cannot raise a
phantom lifecycle-column guard.

## Test Plan
- `node --test scripts/__tests__/lifecycle-census*.test.mjs`
- `corepack pnpm check:lifecycle-columns`
- `corepack pnpm lint`
- `corepack pnpm check:changesets --strict`


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

* **Bug Fixes**
* Improved classification of workflow role comparisons, including
`workflowRole === "triage"`, so they are recognized separately from
lifecycle-column comparisons.
* Ensured workflow role values are correctly identified as role
vocabulary rather than lifecycle-column values.

* **Tests**
* Added automated coverage to verify accurate workflow role and column
identification across comparison patterns.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-11 11:28:54 -10:00
ischindl
d4db29f3e6 fix(dashboard): surface mergeTaskSnapshot on useTasks mocks to fix task-detail tests (#3409)
## Problem
`app/components/__tests__/navigation-history.test.tsx`,
`TaskDetail.swipe-back.test.tsx`, and
`TaskDetail.mobile-transition.board-panel.test.tsx` fail to load.

FN-8796 (`132026545`, "stabilize task-detail lifecycle snapshots") added
`mergeTaskSnapshot` to `hooks/useTasks.ts`, which
`App.tsx`/`MainContent.tsx` now import. The curated test suites that
`vi.mock("../../hooks/useTasks")` still only expose `useTasks`, so the
fixture throws at import time:

```
No "mergeTaskSnapshot" export is defined on the useTasks mock
```

Confirmed on `origin/main`: `mergeTaskSnapshot` is present in
`useTasks.ts` and imported by `App.tsx`, while these tests' `vi.mock`
shims don't surface it.

## Fix
Update the mocks to surface every export the rendered components import,
using a partial `importOriginal` mock so `mergeTaskSnapshot` keeps its
real implementation (a `vi.fn()` returning `undefined` would make
`App.tsx:2179` `liveTask.id` throw):

```ts
vi.mock("../../hooks/useTasks", async (importOriginal) => {
  const actual = await importOriginal();
  return { ...actual, useTasks: (_options?: any) => mockUseTasks() };
});
```

## Verification
- `FUSION_DASHBOARD_DEEP=1 vitest run navigation-history swipe-back
board-panel` → **14 files, 116 tests passed**
- Pre-existing on `origin/main`, fixes a regression introduced by
FN-8796.

## Scope
Tests + a one-line docs note only. No production behavior change.

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

- **Documentation**
- Documented improved worktree recovery behavior, including safer
handling of incomplete, inactive, and unregistered directories.
- Added guidance for recovery across different storage locations and
bounded cleanup of recognized entries.
- Clarified protections that prevent internal recovery containers from
being treated as worktrees.

- **Tests**
- Improved dashboard test coverage and reliability for task detail
rendering, mobile transitions, swipe-back navigation, and navigation
history.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Fusion <noreply@runfusion.ai>
Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
2026-08-11 11:28:50 -10:00
Phil Larson
ca134c2554 test(engine): align failed notification fixture with recovery ownership (#3418)
## Summary
- make the already-merged recovery fixture explicit that no maintenance
sweep owns terminal-failure recovery
- preserve the fail-open `task-wedged` notification assertion when no
landed commit is found

## Test plan
- `corepack pnpm --filter @fusion/engine exec vitest run
--silent=passed-only --reporter=dot src/__tests__/self-healing.test.ts`
(460 passed)
- `corepack pnpm --filter @fusion/engine typecheck`
- `node scripts/run-static-gate-checks.mjs` (12 passed)
- `corepack pnpm --filter @fusion/engine test:core` (422 passed)
- `corepack pnpm --filter @fusion/core test:unit-gate` (184 passed)
- `corepack pnpm --filter @runfusion/fusion test:ci-shape` (71 passed)
- `corepack pnpm test:gate` reaches the PostgreSQL harness but cannot
authenticate locally (`empty password returned by client`) before
product assertions


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

* **Tests**
* Updated failure-notification test conditions to cover scenarios
without automatic maintenance processing.
* Added coverage confirming terminal-failure notifications fail open
when no maintenance sweep owns the task.
* Bypassed production debounce timing to make the test behavior
deterministic.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-11 11:28:46 -10:00
gsxdsm
66c51038a5 fix(engine): bind self-owned worktree liveness probe (#3419)
## Summary
Supersedes #3416 — the fork head is not writable from maintainers, so
this branch carries the same fix merged onto current `main`.

## Changes
- Bind the self-owned worktree liveness probe in task-executor pure
facades (from #3416).
- Merge current main so the lifecycle-column census baseline stays
green.

## Test plan
- [x] `pnpm check:lifecycle-columns` clean after merge
- [ ] CI green

Closes context from #3416.

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

## Summary by CodeRabbit

* **Bug Fixes**
* Fixed cleanup for self-owned worktrees so it no longer crashes before
checking whether an active session is present.
* Improved safety during worktree reconciliation by correctly verifying
that the worktree is still active before removal.

* **Documentation**
  * Added a changeset documenting the worktree cleanup fix.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: BESA-Franz <49682134+BESA-Franz@users.noreply.github.com>
2026-08-11 11:28:42 -10:00
gsxdsm
a6ce7f89ef FN-8987: expose release-gate verdicts for Promote visibility
Expose server-evaluated release-gate state so Promote controls accurately reflect approval readiness.

- Attach transient release-gate verdicts to task API responses.
- Preserve only fresh REST verdicts across task snapshots and render them in task cards.
- Align hold-release gating and document the Promote-state contract.

Files changed:
 .changeset/fn-8987-release-gate-verdict.md         |   7 +
 docs/dashboard-guide.md                            |   4 +
 docs/solutions/workflow-learnings/project-union-versus-per-task-lanes.md |   1 +
 docs/workflow-steps.md                             |   4 +
 packages/core/src/index.gate.ts                    |   2 +-
 packages/core/src/index.ts                         |   2 +-
 packages/core/src/types.ts                         |   2 +
 packages/core/src/types/task/task-core.ts          |  20 +++
 packages/dashboard/app/components/TaskCard.tsx     |   3 +-
 packages/dashboard/app/components/__tests__/TaskCard.test.tsx |  31 ++++
 packages/dashboard/app/hooks/__tests__/useTasks.test.ts |  26 ++++
 packages/dashboard/app/hooks/useTasks.ts           | 135 +++++++++++++++--
 packages/dashboard/app/utils/__tests__/releaseGate.contract.test.ts |  29 ++++
 packages/dashboard/app/utils/__tests__/releaseGate.test.ts |  49 ++++++
 packages/dashboard/app/utils/releaseGate.ts        |  26 ++++
 packages/dashboard/app/utils/reviewBudgetApproval.ts |   9 ++
 packages/dashboard/src/routes/register-task-workflow-routes.ts |  20 ++-
 packages/engine/src/__tests__/release-gate-verdict.test.ts |  40 +++++
 packages/engine/src/execution/hold-release.ts      | 166 +++++++++------------
 packages/engine/src/index.ts                       |   3 +
 20 files changed, 469 insertions(+), 110 deletions(-)

Fusion-Task-Id: FN-8987

Fusion-Task-Lineage: 6f1742bc-2b2b-4a32-9be5-92160335d90d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 14:22:14 -07:00
Phil Larson
6cc15fd73d fix(ci): restore clean-main CLI and lifecycle gates (#3420)
## Summary
- Complete the isolated `@fusion/core` mock used by the
experiment-finalize extension suite
- Classify three intentional physical/synthetic lifecycle literals
introduced on current main
- Re-record the strict lifecycle census baseline with zero unexamined
guards

## Test plan
- `pnpm --filter @runfusion/fusion exec vitest run
src/__tests__/extension-experiment-finalize.test.ts --silent=passed-only
--reporter=dot`
- `pnpm --filter @fusion/core exec vitest run
src/__tests__/task-intake-owner-resolver.test.ts --silent=passed-only
--reporter=dot`
- `pnpm --filter @fusion/engine exec vitest run --project engine-default
src/__tests__/mission-feature-sync-lanes.test.ts --silent=passed-only
--reporter=dot`
- `pnpm check:lifecycle-columns`
- `node scripts/check-mock-completeness.mjs`


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

- **Bug Fixes**
- Improved mission reconciliation previews for task links, specification
alignment, and lifecycle updates.
- Prevented stale or superseded validation runs from overwriting current
feature status or ownership.
- Improved blocked-feature diagnostics and archived-task handling across
workflow configurations.

- **Documentation**
- Clarified validation, assignment checks, and mission synchronization
behavior.

- **Tests**
- Expanded coverage for reconciliation previews and validator ownership
scenarios.

- **Chores**
  - Updated lifecycle baseline data for known archived-task cases.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-11 10:57:36 -10:00
gsxdsm
9f24a517cf FN-8956: track resolved review findings
Add durable, scoped resolution states for workflow review findings.

- Persist reviewer-applied and superseded finding receipts without making them actionable.
- Scope supersession claims to a named prior workflow result, preserving duplicate IDs in other review lanes.
- Render informational resolution badges and reject resolved items from revision requests.

Files changed: .changeset/fn-8956-review-finding-resolution.md    |   7 +
 docs/dashboard-guide.md                            |   2 +-
 docs/workflow-steps.md                             |   8 +-
 .../src/__tests__/review-severity-gate.test.ts     |  25 ++++
 .../src/__tests__/workflow-step-results.test.ts    |  45 +++++-
 packages/core/src/index.gate.ts                    |   6 +
 packages/core/src/index.ts                         |   6 +
 packages/core/src/types.ts                         |   2 +
 packages/core/src/types/task/task-review.ts        |   4 +
 packages/core/src/types/workflow/workflow-steps.ts |  15 +-
 .../src/workflows/builtin-code-review-group.ts     |   2 +-
 .../src/workflows/builtin-plan-review-group.ts     |   2 +-
 .../core/src/workflows/review-severity-gate.ts     |  37 ++++-
 .../core/src/workflows/workflow-step-results.ts    |  54 ++++++-
 packages/dashboard/app/api/agents/run-audit.ts     |   1 +
 .../dashboard/app/components/TaskReviewTab.css     |  22 +++
 .../dashboard/app/components/TaskReviewTab.tsx     |  36 +++--
 .../components/__tests__/TaskReviewTab.test.tsx    |  46 ++++++
 .../dashboard/src/__tests__/routes-tasks.test.ts   |  48 ++++++
 .../src/routes/register-task-workflow-routes.ts    |  14 +-
 .../__tests__/review-finding-supersession.test.ts  | 163 +++++++++++++++++++++
 .../__tests__/review-findings-injection.test.ts    |  22 +++
 .../workflow-step-verdict-parsing.test.ts          |  16 +-
 .../engine/src/executor/execute-workflow-graph.ts  | 129 ++++++++--------
 .../engine/src/executor/execute-workflow-step.ts   |  25 +++-
 .../engine/src/executor/run-graph-custom-node.ts   |   7 +
 .../executor/workflow-step-failure-injection.ts    |   8 +-
 .../engine/src/executor/workflow-step-verdict.ts   |  17 ++-
 .../src/workflows/workflow-graph-executor.ts       |  15 ++
 packages/i18n/locales/en/app.json                  |   4 +-
 packages/i18n/locales/es/app.json                  |   4 +-
 packages/i18n/locales/fr/app.json                  |   4 +-
 packages/i18n/locales/ko/app.json                  |   4 +-
 packages/i18n/locales/pt-BR/app.json               |   4 +-
 packages/i18n/locales/zh-CN/app.json               |   4 +-
 packages/i18n/locales/zh-TW/app.json               |   4 +-
 36 files changed, 703 insertions(+), 109 deletions(-)

Fusion-Task-Id: FN-8956

Fusion-Task-Lineage: 80568280-85aa-4a49-a60a-99b75f88f486

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 13:34:27 -07:00
gsxdsm
6ae9299576 FN-8953: defer terminal wedge alerts during recovery
Hold terminal wedge alerts until their recovery window has elapsed.

- Persist and settle pending wedge notifications across restarts.
- Clear pending alerts on task progress and reconcile expired holds during self-healing.
- Expose the settle window in notification settings with coverage for store and notification flows.

Files changed:
 .changeset/fn-8953-wedge-settle-window.md          |   7 +
 AGENTS.md                                          |   1 +
 docs/architecture.md                               |   3 +-
 docs/settings-reference.md                         |   1 +
 .../core/src/__tests__/store-wedge-pending.test.ts |  56 +++++
 packages/core/src/config/settings-schema.ts        |   1 +
 packages/core/src/store.ts                         |  46 ++++
 packages/core/src/types/settings/settings-scope.ts |   2 +
 packages/core/src/types/task/task-core.ts          |  15 ++
 .../app/components/settings/save-split.ts          |   1 +
 .../sections/NotificationsSection.search.ts        |   9 +
 .../settings/sections/NotificationsSection.tsx     |  15 ++
 .../settings-default-descriptions.test.tsx         |   1 +
 ...self-healing-pending-wedge-notification.test.ts | 148 ++++++++++++
 .../__tests__/notification-service.test.ts         |   7 +-
 .../__tests__/task-wedge-notification.test.ts      | 258 ++++++++++++++++++++-
 .../src/notification/notification-service.ts       | 260 +++++++++++++++++++++
 packages/engine/src/self-healing.ts                |  38 +++
 packages/i18n/locales/en/app.json                  |   2 +
 19 files changed, 850 insertions(+), 21 deletions(-)

Fusion-Task-Id: FN-8953

Fusion-Task-Lineage: fd5b5827-c69d-409f-86d5-01ff23405ee3

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 12:34:47 -07:00
gsxdsm
dfd88e7540 fix: resume capacity-parked workflow continuations
The planning-continuation drain skipped every due `kind: "task"` row whose
`waitReason` was not "planning", on the premise that such rows "belong to a
different drain". No such drain exists: `listDueWorkflowWorkItems` has exactly
two callers, this pass and the self-healing reclaim sweep, and the sweep
deliberately leaves `runnable`/`retrying` rows alone as "the dispatcher's own
queue". A capacity-parked continuation was therefore owned by nobody — skipped
here every poll with no state change and no audit row, and passed over there by
design.

Observed on the Fusion board: eight cards sat runnable for up to 8h with the
engine unpaused, 0 tasks in progress, and 4 of 10 worktrees used. Three carried
`waitReason: "capacity"` from the capacity-suspend path; five carried NULL. The
09:04 reclaim sweep had just moved them held -> runnable, handing them to this
drain and simultaneously putting them out of its own reach, so the auto-resume
fix tightened the strand it repaired.

Dispatch stays admission-gated by `admitPlanningContinuation`, so a
capacity-parked card resumes only when a slot is genuinely free.

Also repairs two stale path allowlists in planning-claim-single-writer.ts: the
mission stores and replan-target.ts moved into subdirectories, leaving that
ratchet red on main and accusing the two modules it exists to exclude.

Verified: the patched classifier returns `actionable` for all 8 live stranded
rows; gate + lint green.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 10:36:26 -07:00
gsxdsm
eef68fe0b9 FN-8933: capture semantic memory from completed work
Add inferred graph relationships and detached recall capture across completed-work memory surfaces.

- Validate and persist deterministic inferred semantic edges with audit outcomes.
- Capture completed tasks, research findings, and insights as bounded recall entries.
- Wire memory semantics through engine, research APIs, and coverage tests.

Files changed:
 .changeset/fn-8933-memory-semantics-capture.md     |   7 +
 AGENTS.md                                          |   1 +
 docs/knowledge-graph.md                            |  10 +-
 .../src/__tests__/memory/recall-capture.test.ts    | 111 +++++++++++++
 .../__tests__/postgres/insight-store.pg.test.ts    |  25 +++
 .../postgres/research-execution.pg.test.ts         |  38 +++++
 .../__tests__/research-feature-promotion.test.ts   |  39 +++++
 .../core/src/async-stores/async-insight-store.ts   |  23 ++-
 packages/core/src/index.ts                         |   1 +
 .../__tests__/graph-builder-incremental.test.ts    |  28 ++++
 .../__tests__/inferred-edge-writer.test.ts         |  74 +++++++++
 packages/core/src/knowledge-graph/graph-builder.ts |  27 ++-
 .../src/knowledge-graph/graph-serialization.ts     |   2 +-
 packages/core/src/knowledge-graph/graph-store.ts   |  12 ++
 packages/core/src/knowledge-graph/graph-types.ts   |   2 +-
 packages/core/src/knowledge-graph/index.ts         |   1 +
 .../src/knowledge-graph/inferred-edge-writer.ts    |  96 +++++++++++
 packages/core/src/memory/index.ts                  |   1 +
 packages/core/src/memory/recall-capture.ts         | 184 +++++++++++++++++++++
 .../src/research/research-feature-promotion.ts     |  23 ++-
 packages/core/src/task-store/task-store-helpers.ts |  13 +-
 .../src/__tests__/research-routes.test.ts          |  80 ++++++++-
 packages/dashboard/src/research-routes.ts          |  27 ++-
 .../src/__tests__/agent-mission-tools.test.ts      |  60 ++++++-
 .../src/__tests__/in-process-runtime.pg.test.ts    |  28 +++-
 .../memory-consolidation-heartbeat-hook.test.ts    |   8 +-
 .../__tests__/memory-consolidation-ports.test.ts   |  17 +-
 .../src/__tests__/memory-semantics-pass.test.ts    | 115 +++++++++++++
 .../engine/src/__tests__/project-engine.test.ts    |  65 +++++++-
 packages/engine/src/agent-heartbeat.ts             |  14 +-
 packages/engine/src/agent-tools.ts                 |  12 +-
 packages/engine/src/agents/agent-reflection.ts     |   9 +-
 packages/engine/src/memory/index.ts                |   1 +
 .../src/memory/memory-consolidation-adapters.ts    |  18 +-
 packages/engine/src/memory/memory-consolidation.ts |  13 +-
 packages/engine/src/memory/memory-semantics.ts     |  67 ++++++++
 packages/engine/src/project-engine.ts              |   3 +
 .../engine/src/research/research-orchestrator.ts   |  20 ++-
 packages/engine/src/runtimes/in-process-runtime.ts |  12 ++
 packages/engine/src/util/run-audit.ts              |  11 ++
 40 files changed, 1250 insertions(+), 48 deletions(-)

Fusion-Task-Id: FN-8933

Fusion-Task-Lineage: b75a6b23-906f-4255-92f1-7684beb742b8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 05:45:36 -07:00
gsxdsm
f1fe399184 FN-8991: add runtime skill-loader drift gate
Enforce the intentional Claude-to-Grok runtime skill-loader clone relationship across verification lanes.

- Add an exact rename-diff validator with fixture and live-loader coverage.
- Run the validator in pretest, fast verification, and static merge-gate checks.
- Document the loader duplication contract and expanded static-validator inventory.

Files changed:
 AGENTS.md                                          |   2 +
 docs/testing.md                                    |   4 +-
 package.json                                       |   7 +-
 .../check-runtime-skill-loader-drift.test.mjs      | 113 +++++++++++++++++++++
 scripts/__tests__/run-static-gate-checks.test.mjs  |   1 +
 scripts/__tests__/verify-fast.test.mjs             |   1 +
 scripts/check-runtime-skill-loader-drift.mjs       | 113 +++++++++++++++++++++
 7 files changed, 236 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-8991

Fusion-Task-Lineage: a3b67752-0043-4336-9a2a-ff391672b31f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 05:23:02 -07:00
gsxdsm
5a1853cac6 FN-8934: add memory pre-steering across agent prompts
Add bounded memory-first guidance and consolidation observability across agent workflows.

- Apply mode-aware memory pre-steering to execution, triage, reviewer, heartbeat, and merger prompts.
- Export and test shared memory nudges while documenting memory inclusion settings.
- Expose agent memory consolidation history through dashboard API and detail UI.

Files changed:
 .changeset/fn-8934-memory-pre-steering.md          |  7 ++
 docs/agents.md                                     |  4 +
 docs/settings-reference.md                         |  2 +
 .../core/src/__tests__/memory-pre-steering.test.ts | 28 +++++++
 packages/core/src/__tests__/project-memory.test.ts | 22 ++++++
 packages/core/src/index.gate.ts                    |  7 ++
 packages/core/src/index.ts                         |  7 ++
 packages/core/src/memory/index.ts                  |  1 +
 packages/core/src/memory/memory-pre-steering.ts    | 41 ++++++++++
 packages/core/src/memory/project-memory.ts         | 19 +++++
 packages/dashboard/app/api/agents/agents.ts        | 12 +++
 packages/dashboard/app/api/legacy.ts               |  2 +
 .../dashboard/app/components/AgentDetailView.css   | 41 ++++++++++
 .../dashboard/app/components/AgentDetailView.tsx   | 56 +++++++++++++-
 ...etailView.memory-consolidation-history.test.tsx | 58 +++++++++++++++
 .../__tests__/AgentDetailView.test-helpers.ts      |  3 +
 .../register-agent-memory-consolidations.test.ts   | 87 ++++++++++++++++++++++
 .../register-agent-reflection-rating-routes.ts     | 36 +++++++++
 .../memory-pre-steering-injection.test.ts          | 50 +++++++++++++
 packages/engine/src/__tests__/reviewer.test.ts     | 18 +++++
 packages/engine/src/__tests__/triage.test.ts       | 18 ++++-
 packages/engine/src/agent-heartbeat.ts             | 14 +++-
 .../engine/src/agents/agent-heartbeat-prompts.ts   |  2 +
 packages/engine/src/agents/agent-instructions.ts   | 16 ++--
 packages/engine/src/execution/reviewer.ts          | 31 +++++---
 packages/engine/src/executor/execution-prompt.ts   |  6 +-
 packages/engine/src/merger.ts                      |  9 ++-
 packages/engine/src/triage.ts                      | 12 ++-
 28 files changed, 577 insertions(+), 32 deletions(-)

Fusion-Task-Id: FN-8934

Fusion-Task-Lineage: a062cc6b-1277-4d36-9926-b3ecba4945eb

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-11 04:57:14 -07:00