Commit Graph

13600 Commits

Author SHA1 Message Date
gsxdsm
2c3a47368f FN-9136: Characterize PostgreSQL fork database reuse
Characterize safe per-fork PostgreSQL database reuse while documenting why the production experiment remains reverted.

- add a bounded pool primitive with reset, verification, discard, and ownership fencing
- cover recycling, poison handling, capacity, and reclaim namespace behavior
- align PostgreSQL campaign documentation with the dead-fork leak rejection

Files changed:
 .../test-failures/postgres-ddl-admission-bound.md  |   4 +-
 .../suite-only-flakes-observed-register.md         |   4 +-
 docs/testing.md                                    |   4 +-
 .../core/src/__test-utils__/pg-fork-db-pool.ts     | 184 +++++++++++++++++++++
 .../__tests__/pg-fork-db-pool-ownership.test.ts    |  36 ++++
 .../core/src/__tests__/pg-fork-db-pool.test.ts     |  60 +++++++
 6 files changed, 287 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-9136

Fusion-Task-Lineage: 9e14e0eb-d957-4207-977e-2d913e78750f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 22:06:38 -07:00
gsxdsm
1a3e68de5d FN-9139: add bounded PostgreSQL pre-admission measurement
Establish an inert PostgreSQL setup signal and repeatable evidence tooling without changing harness behavior.

- add explicit setup participation semantics and inertness coverage
- survey Vitest setup boundaries with isolated report-only fixtures
- bound interleaved campaigns by process group and campaign deadline
- reject missing backend samples and enable candidate diagnostics
- document the rejected boundary result and successor protocol

Files changed:
 .../test-failures/postgres-ddl-admission-bound.md  |  15 ++
 docs/testing.md                                    |  10 ++
 packages/core/package.json                         |   2 +-
 .../src/__test-utils__/pg-setup-participation.ts   |  22 +++
 .../src/__tests__/pg-setup-participation.test.ts   |  21 +++
 .../__tests__/vitest-setup-pg-inertness.test.ts    |  10 ++
 packages/core/vitest.pg.config.ts                  |  10 ++
 .../__tests__/pg-preadmission-campaign.test.mjs    |  63 +++++++
 scripts/__tests__/pg-setup-boundary-probe.test.mjs |  92 ++++++++++
 scripts/pg-preadmission-campaign.mjs               | 194 +++++++++++++++++++++
 scripts/pg-setup-boundary-probe.mjs                | 182 +++++++++++++++++++
 11 files changed, 620 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-9139

Fusion-Task-Lineage: 2cf8ccbf-37f9-4fdc-8e8f-326df823e1cd

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 21:09:58 -07:00
gsxdsm
8bb56a2185 FN-9134: add drift-resistant PostgreSQL DDL lane metric
Add a report-only acceptance metric and terminal evidence for PostgreSQL DDL structural experiments.

- require seven ordered control/candidate pairs with green Vitest summaries and zero leaked databases
- reject missing tests, failed summaries, nonzero exits, and unhandled runner errors
- document the no-improvement campaign result and retain the next candidate direction
- cover timing statistics, ordering, leak rejection, and runner-log validation

Files changed:
 .../test-failures/postgres-ddl-admission-bound.md  |   8 ++
 .../suite-only-flakes-observed-register.md         |   2 +-
 docs/testing.md                                    |  24 ++++
 scripts/__tests__/pg-ddl-lane-metric.test.mjs      |  62 +++++++++
 scripts/pg-ddl-lane-metric.mjs                     | 139 +++++++++++++++++++++
 5 files changed, 234 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-9134

Fusion-Task-Lineage: 3466ebf8-7125-475b-9574-6c4c92198bb3

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 20:17:12 -07:00
gsxdsm
ae507afc37 FN-9131: Add PostgreSQL harness budget characterization
Characterize cluster-shared PostgreSQL connection admission while keeping regressive harness wiring disabled.

- add advisory-lock slot budgeting, bootstrap gating, and local allocation accounting
- cover budget arithmetic, queueing, degradation, and PostgreSQL lock behavior
- document loaded-lane failures and the terminal-negative lifecycle boundary
- clarify that the active harness neither admits nor clamps against the experimental budget

Files changed:
 .../test-failures/pg-harness-connection-budget.md  |  21 +
 .../suite-only-flakes-observed-register.md         |   2 +
 docs/testing.md                                    |   6 +
 .../__tests__/pg-connection-budget.test.ts         | 146 ++++++
 .../src/__test-utils__/pg-connection-budget.ts     | 492 +++++++++++++++++++++
 .../core/src/__test-utils__/pg-test-harness.ts     |   8 +
 .../postgres/pg-connection-budget.pg.test.ts       |  36 ++
 7 files changed, 711 insertions(+)

Fusion-Task-Id: FN-9131

Fusion-Task-Lineage: c83611ad-95f9-44ef-a0fd-1f182a26725d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 19:29:05 -07:00
Phil Larson
0159ef8784 fix: preserve gridlock notification cooldown (#3469)
## Summary
- preserve the gridlock notification wall-clock cooldown across
transient detector clears
- add a regression test for clear-then-rediscover behavior during the
cooldown
- document the cooldown contract and add a patch changeset

## Test plan
- `corepack pnpm --filter @fusion/engine exec vitest run
src/__tests__/notifier.test.ts --project=engine-default
--reporter=verbose -t 'suppresses the same gridlock after a transient
resolution during cooldown'`
- `corepack pnpm --filter @fusion/engine typecheck`
- `corepack pnpm build`
- `corepack pnpm changeset status --output
/tmp/fusion-gridlock-changeset-status.json`


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

- **Bug Fixes**
- Gridlock notifications now remain suppressed during the 15-minute
cooldown, even if the condition temporarily clears and reappears.
- Prevents repeated notifications caused by transient detector-state
changes.

- **Documentation**
- Updated gridlock notification behavior documentation to reflect the
persistent cooldown.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-16 17:46:23 -07:00
gsxdsm
c709ed06d9 FN-9135: retain plugin runner quarantine through deadline
Preserve the quarantined plugin-runner coverage while recording the inconclusive reproduction campaign.

- Record two loaded-suite runs at each of 2, 6, and 8 workers.
- Keep all 82 plugin-runner tests, the ledger entry, and the default-lane exclusion through 2026-08-30.
- Clarify that opt-in strict checks do not block normal PR lanes.

Files changed:
 .../test-failures/suite-only-flakes-observed-register.md    | 13 ++++++++++++-
 docs/testing.md                                             |  3 +++
 2 files changed, 15 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-9135

Fusion-Task-Lineage: 239425e5-7393-4b8a-a114-0a14f0065847

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 17:38:53 -07:00
gsxdsm
f2d68939be FN-9138: guard same-millisecond approval audit ID collisions
Validate that lifecycle guards prevent duplicate deterministic approval audit IDs during concurrent writes.

- Add database-free coverage for losing and successful guarded approval transitions.
- Add PostgreSQL overlap probes for decisions, completions, and physical ID uniqueness.
- Document the deterministic audit identity and lifecycle ordering guarantees.

Files changed:
 docs/storage.md                                    |   2 +-
 .../approval-request-audit-id-race.test.ts         | 115 ++++++++++++++++++
 .../postgres/approval-request-lifecycle.pg.test.ts | 132 ++++++++++++++++++++-
 .../async-stores/async-approval-request-store.ts   |  10 ++
 4 files changed, 253 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-9138

Fusion-Task-Lineage: ccfc084f-2cd8-4549-8a42-242167139b8d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 17:07:40 -07:00
gsxdsm
fca8dd9841 FN-9137: Define approval request ordering semantics
Clarify and verify deterministic newest-first approval request listing across storage paths.

- Document created-at descending order with request-ID descending tie resolution.
- Align dedupe ordering commentary across async and legacy SQL stores.
- Add PostgreSQL coverage for ties, pagination, filters, project binding, and audit isolation.

Files changed:
 .../approval-request-list-ordering.pg.test.ts      | 184 +++++++++++++++++++++
 packages/core/src/agents/approval-request-store.ts |  11 ++
 .../async-stores/async-approval-request-store.ts   |   9 +-
 3 files changed, 202 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-9137

Fusion-Task-Lineage: b87867aa-fdf3-49bf-a037-7d74163a093d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 16:19:42 -07:00
gsxdsm
1d7dd3e7b8 FN-9133: Use bounded PostgreSQL DDL for reliability fixtures
Reliability fixtures now manage PostgreSQL databases through owned, deadline-bounded maintenance connections.

- Replace psql child-process DDL with postgres.js maintenance clients and forced cleanup.
- Remove redundant pre-create drops and preserve idempotent teardown behavior.
- Add a live-connection cleanup contract test and document audit measurements and policy.

Files changed:
 .../postgres-reliability-helper-ddl-audit.md       | 48 +++++++++++
 docs/testing.md                                    |  2 +-
 packages/engine/package.json                       |  5 +-
 .../_helpers-pg-ddl-contract.pg.test.ts            | 66 +++++++++++++++
 .../__tests__/reliability-interactions/_helpers.ts | 93 +++++++++++++---------
 pnpm-lock.yaml                                     |  3 +
 6 files changed, 176 insertions(+), 41 deletions(-)

Fusion-Task-Id: FN-9133

Fusion-Task-Lineage: 5a7f511d-abb4-4468-a97a-04331f60d245

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 16:11:21 -07:00
gsxdsm
2160f7500c FN-9132: order approval audits by lifecycle on timestamp ties
Ensure approval audit histories preserve lifecycle chronology when events share a timestamp.

- rank tied audit events by the declared approval lifecycle before audit ID
- cover tied and distinct timestamps through module and public store surfaces
- document the diagnosed satellite assertion and add a patch changeset

Files changed:
 .changeset/fn-9132-approval-audit-order.md         |  7 +++
 .../suite-only-flakes-observed-register.md         | 27 +++++++++++
 ...oval-request-audit-project-isolation.pg.test.ts |  2 +-
 .../postgres/approval-request-lifecycle.pg.test.ts | 53 +++++++++++++++++++++-
 .../async-stores/async-approval-request-store.ts   | 17 +++++--
 5 files changed, 100 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-9132

Fusion-Task-Lineage: 2f49e896-69bf-48c8-b813-4b1b2b72fc65

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 16:04:18 -07:00
gsxdsm
a453245715 FN-9130: Add guarded PostgreSQL DDL admission infrastructure
Document and test PostgreSQL DDL admission experiments while preserving the direct harness after measured regressions.

- add advisory-slot admission with local slot accounting, degradation telemetry, and fail-closed reentrancy
- cover cross-fork bounds, session loss, timeouts, spawned nested work, and cleanup invariants
- make concurrent lifecycle coverage settle all creates and clean up every successful database in finally
- record loaded-core measurements and retain the existing PostgreSQL worker cap

Files changed:
 .../test-failures/postgres-ddl-admission-bound.md  |  34 ++
 .../suite-only-flakes-observed-register.md         |   2 +-
 docs/testing.md                                    |   8 +
 .../core/src/__test-utils__/pg-ddl-admission.ts    | 351 +++++++++++++++++++++
 .../core/src/__test-utils__/pg-test-harness.ts     |  44 ++-
 .../core/src/__tests__/pg-ddl-admission.test.ts    | 294 +++++++++++++++++
 .../postgres/pg-harness-ddl-concurrency.pg.test.ts |  56 ++++
 packages/core/vitest.pg.config.ts                  |   5 +
 8 files changed, 778 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-9130

Fusion-Task-Lineage: e28777cd-cd7c-4598-9db6-c4622cb9fa33

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 15:57:36 -07:00
gsxdsm
b31be1ba7c FN-9126: Record project-identity flake reproduction
Document the second sighting of the project-identity PostgreSQL timeout and hand off structural diagnosis.

- Record the sterile 27-worker reproduction against the integration SHA
- Preserve pass, failure, and skip counters for both PostgreSQL-directory runs
- Mark quarantine as policy-forbidden and assign root-cause follow-up to FN-9131

Files changed:
 .../solutions/test-failures/suite-only-flakes-observed-register.md | 7 +++++++
 1 file changed, 7 insertions(+)

Fusion-Task-Id: FN-9126

Fusion-Task-Lineage: 9e31b00f-268b-46fa-af7a-58973c93d8fc

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 14:07:57 -07:00
gsxdsm
3c235ce275 FN-9129: fence revision attribution assertions by identity
Make settings revision attribution tests select only immutable revisions owned by each test.

- Resolve reset-ordering failures by querying revision IDs from unique targets and payloads.
- Prove late background system writes cannot contaminate actor assertions.
- Document the loaded-lane diagnosis, evidence, and remediation.

Files changed:
 .../suite-only-flakes-observed-register.md         |  26 ++++++
 .../settings-revision-attribution.test.ts          | 104 ++++++++++++++++-----
 2 files changed, 107 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-9129

Fusion-Task-Lineage: ae336ed2-0870-400c-9599-37adb588e283

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 13:47:12 -07:00
gsxdsm
1c9e4dfccd FN-9127: instrument PostgreSQL teardown diagnostics
Add opt-in evidence capture for loaded PostgreSQL teardown stalls without changing teardown behavior.

- Add bounded phase and hook watchdogs with capped pg_stat_activity snapshots.
- Instrument the shared PostgreSQL test harness and cover diagnostic behavior with focused tests.
- Document the diagnostic workflow, measured flake campaign, and corrected mission-store gate scope.

Files changed:
 .../suite-only-flakes-observed-register.md         |  12 ++
 docs/testing.md                                    |  19 ++
 .../src/__test-utils__/pg-teardown-diagnostics.ts  | 237 +++++++++++++++++++++
 .../core/src/__test-utils__/pg-test-harness.ts     | 120 ++++++++---
 .../src/__tests__/pg-teardown-diagnostics.test.ts  | 162 ++++++++++++++
 .../__tests__/postgres/mission-store.pg.test.ts    |   8 +-
 6 files changed, 526 insertions(+), 32 deletions(-)

Fusion-Task-Id: FN-9127
Fusion-Task-Lineage: 2488b7c0-f12f-4560-9a99-41aaca9d1526
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 12:59:23 -07:00
gsxdsm
5e5422de6e FN-9128: isolate schema-applier PostgreSQL fixtures
Use shared PostgreSQL harness fixtures to reduce repeated schema DDL while preserving migration coverage.

- replace private database lifecycle helpers with shared empty and baselined fixtures
- add regression coverage for fixture-state selection and idempotent schema application
- document PostgreSQL bootstrap guidance and the resolved flake investigation

Files changed:
 .../suite-only-flakes-observed-register.md         |  13 +-
 docs/testing.md                                    |   3 +
 .../postgres/schema-applier-isolation.test.ts      |  54 +++++++
 .../src/__tests__/postgres/schema-applier.test.ts  | 160 +++++++--------------
 4 files changed, 119 insertions(+), 111 deletions(-)

Fusion-Task-Id: FN-9128

Fusion-Task-Lineage: 036c9011-8973-4211-a77a-42bf0eb9fa5e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 12:27:35 -07:00
gsxdsm
beb8ae67db FN-9125: document flake findings and quarantine plugin runner
Classify the suite-only failures by actual PostgreSQL dependency and preserve unresolved evidence for follow-up.

- Record non-reproduction results and assign PostgreSQL investigations to focused follow-up tasks.
- Quarantine the independent in-memory plugin runner test under the deletion ratchet.
- Document evidence requirements for future PostgreSQL flake diagnosis.

Files changed:
 .../suite-only-flakes-observed-register.md         | 32 ++++++++++++++++++++--
 docs/testing.md                                    |  4 +++
 packages/engine/vitest.config.ts                   | 10 +++++++
 scripts/lib/test-quarantine.json                   |  8 +++++-
 4 files changed, 51 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-9125

Fusion-Task-Lineage: 1dc80163-a0dc-4241-bab1-75a2cafb9abe

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 11:46:39 -07:00
gsxdsm
7380be699c chore(release): v0.77.0-beta.1
Version bump via changesets.
2026-08-16 08:39:57 -07:00
gsxdsm
821e036c9d fix: route all AI lanes through runtime resolution so CLI-runtime models work everywhere
createFnAgent now delegates to createResolvedAgentSession — deriving the CLI
runtime hint (cursor/claude/grok/omp/hermes), mock/test-mode forcing, and
session:runtime-resolved visibility — using a host-registered default
PluginRunner keyed by project root (published by InProcessRuntime at plugin
init). DefaultPiRuntime re-enters via a __rawPiSession marker so the seam's
own pi bridge cannot recurse, and the raw constructor survives as
createPiAgentSessionRaw for that bridge and pi-internal tests.

Mission and milestone/slice interviews additionally pass their request-scoped
pluginRunner through the seam and prompt via the engine promptWithFallback
dispatcher (plugin CLI runtime sessions have no session.prompt()). This fixes
"Configured model cursor-cli/auto ... was not found in the pi model registry"
in mission planning while chat on the same model worked, and closes the same
gap for every remaining bare createFnAgent lane.

Also updates the pi skill-filtering test that still asserted pre-FN-9114
allow-list narrowing; requested skill names are ensure-present since FN-9114.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-16 08:32:46 -07:00
gsxdsm
385059f5ca FN-9124: Move mission planning CTA to top of list
Place the primary mission-planning action consistently above mission content across desktop and mobile layouts.

- move the Plan New Mission and Create actions above the mission list
- increase the mission CTA height with shared design tokens and remove duplicate empty-state controls
- document and test placement, sizing, create-mode, empty-state, and responsive behavior

Files changed:
 .changeset/fn-9124-mission-cta-top.md              |   7 ++
 docs/missions.md                                   |   2 +-
 .../dashboard/app/components/MissionManager.css    |  42 +++----
 .../dashboard/app/components/MissionManager.tsx    |  89 +++++++-------
 .../dashboard/app/components/PlanningModeModal.css |  14 +--
 .../dashboard/app/components/PlanningModeModal.tsx |  12 +-
 .../__tests__/MissionManager.mobile-css.test.ts    |  33 +++--
 .../MissionManager.plan-cta-placement.test.tsx     | 134 +++++++++++++++++++++
 8 files changed, 238 insertions(+), 95 deletions(-)

Fusion-Task-Id: FN-9124

Fusion-Task-Lineage: 09ad7695-80ed-46af-a1c1-f334952c37ec

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 08:05:11 -07:00
gsxdsm
53acaf96c3 FN-9123: Repair script test contract drift
Repair script-test contracts to match the current repository policies and live workflow coverage.

- Align static-gate and pretest mirrors with authoritative validator chains.
- Update the merger-rule floor and parameterized flake registration.
- Repoint workflow reliability evidence to the surviving dispatch test.

Files changed:
 .../test-failures/suite-only-flakes-observed-register.md       |  4 +++-
 scripts/__tests__/agents-md-invariants.test.mjs                | 10 ++++++++--
 scripts/__tests__/engine-vitest-gate-policy.test.mjs           |  6 ++++++
 scripts/__tests__/run-static-gate-checks.test.mjs              |  7 +++++++
 scripts/__tests__/verify-fast.test.mjs                         |  6 ++++++
 scripts/lib/workflow-reliability-release-check.json            |  4 ++--
 6 files changed, 32 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-9123

Fusion-Task-Lineage: 1a3dad24-69e3-423e-a159-56fd3f1085a3

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 04:05:45 -07:00
gsxdsm
fe910fcce7 FN-9122: align merge gate timing and policy baselines
Re-establish a trustworthy W33 merge-gate timing baseline without weakening blocking coverage.

- Document the controlled W33 re-measurement and future regression protocol.
- Align static-validator test ledgers with all 15 canonical gate checks.
- Correct gate composition, engine-core inventory, and bundle metrics in testing guidance.

Files changed:
 .../merge-gate-w33-walltime-regression.md          | 82 ++++++++++++++++++++++
 docs/testing.md                                    | 12 ++--
 .../__tests__/engine-vitest-gate-policy.test.mjs   | 12 ++++
 scripts/__tests__/run-static-gate-checks.test.mjs  |  2 +
 scripts/__tests__/verify-fast.test.mjs             |  8 +++
 5 files changed, 111 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-9122

Fusion-Task-Lineage: 47ace0d7-902d-4ea5-848d-3d2386867c42

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 03:49:28 -07:00
gsxdsm
e7e33dae87 FN-9121: prevent deferred autofocus from stealing picker input
Keep Create Room member searches focused when deferred modal autofocus runs.

- Preserve focus when it is already inside the Create Room modal.
- Cover deferred autofocus with real member-search keyboard input.
- Exercise picker search state transitions with user-level typing.

Files changed:
 .../dashboard/app/components/CreateRoomModal.tsx   | 14 +++++++--
 .../components/__tests__/CreateRoomModal.test.tsx  | 33 ++++++++++++++++++++--
 2 files changed, 42 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-9121

Fusion-Task-Lineage: 088ddc4f-0e2f-4ba0-ba12-ffe396654e1f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 02:34:13 -07:00
gsxdsm
111c6c96cc FN-9117: Preserve Planning Mode answers across session hydration
Keep visible Planning Mode controls bound to the current turn during asynchronous refreshes.

- preserve active question and plan-review workspaces during same-session hydration
- submit from live session state and retain dirty answers across response identity changes
- add desktop and mobile regression coverage for deferred hydration and stale Stop polling
- document the ownership race and add a patch changeset

Files changed:
 .changeset/fn-9117-planning-turn-ownership.md      |   7 +
 .../suite-only-flakes-observed-register.md         |  24 ++++
 .../dashboard/app/components/PlanningModeModal.tsx | 141 ++++++++++++---------
 .../PlanningModeModal.planning-flow.test.tsx       | 132 +++++++++++++++++++
 .../PlanningModeModal.ui-interactions.test.tsx     |  20 +++
 5 files changed, 265 insertions(+), 59 deletions(-)

Fusion-Task-Id: FN-9117

Fusion-Task-Lineage: 18d63f63-b532-49eb-a6d1-241e31c5b2c7

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 02:26:42 -07:00
gsxdsm
3272affbb3 FN-9120: Fence Create Room agent roster loads
Keep Create Room picker state accurate across overlapping agent roster requests.

- Track explicit idle, loading, loaded, and failed picker phases.
- Ignore stale close, reopen, project-change, and unmount request completions.
- Reconcile selected members and cover ordering, failure, empty, duplicate, desktop, and mobile states.
- Document the loaded-lane flake investigation and add a patch changeset.

Files changed:
 .changeset/fn-9120-create-room-picker.md           |   7 ++
 .../suite-only-flakes-observed-register.md         |  17 +++
 .../dashboard/app/components/CreateRoomModal.tsx   |  50 ++++++--
 .../components/__tests__/CreateRoomModal.test.tsx  | 126 ++++++++++++++++-----
 4 files changed, 165 insertions(+), 35 deletions(-)

Fusion-Task-Id: FN-9120

Fusion-Task-Lineage: 5c9ff011-7653-40ab-a7c1-e3464ca3eaf5

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 01:50:38 -07:00
gsxdsm
7527d2651f FN-9116: fence planning reconciliation by turn ownership
Prevent stale Planning Mode snapshots and recovery callbacks from replacing a newer interview turn.

- track session-load and turn epochs across response reconciliation, polling, streaming, and automatic retry
- fence loading-poll fetches at launch so accepted SSE questions and newer responses retain ownership
- add desktop and mobile race-ordering coverage and document the resolved suite-only flake
- publish a patch changeset for the operator-visible recovery fix

Files changed:
 .changeset/fn-9116-planning-reconciliation.md      |   7 +
 .../suite-only-flakes-observed-register.md         |  19 +
 .../dashboard/app/components/PlanningModeModal.tsx | 109 ++++-
 .../PlanningModeModal.planning-flow.test.tsx       | 502 ++++++++++++++++++++-
 4 files changed, 614 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-9116

Fusion-Task-Lineage: b861176e-9104-4caf-8b6c-e645972aa5f6

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-16 00:59:48 -07:00
gsxdsm
dd1e0f22e1 chore(release): v0.77.0-beta.0
Version bump via changesets.
2026-08-16 00:32:50 -07:00
gsxdsm
37daefed25 FN-9118: Align skill tooltip tests with stored IDs
Validate AgentDetailView skill badges against stable persisted identifiers and discovery states.

- replace environment-sensitive skill path assertions with fixed stored-ID fixtures
- cover discovered path, discovered slug, and undiscovered skill badge states
- document that tooltips preserve persisted IDs while badge labels remain humanized

Files changed:
 .../dashboard/app/components/AgentDetailView.tsx   |  4 +++
 .../__tests__/AgentDetailView.core.test.tsx        | 39 ++++++++++++++++------
 2 files changed, 33 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-9118

Fusion-Task-Lineage: 1cbe21ad-5a3c-4131-9352-2138d892e88d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 23:49:13 -07:00
gsxdsm
9a9e591b72 FN-9115: clarify and expand agent skill selection
Clarify automatic skill availability while making forced-reading selections easier to manage.

- Replace the skill picker with a searchable multi-select checkbox list and explicit loading, error, empty, and unavailable states.
- Label forced, disabled, and undiscovered skills consistently across agent detail and list views, including a clear None state.
- Update localized guidance, documentation, regression coverage, and the published package changeset.

Files changed:
 .changeset/fn-9115-skills-ui.md                    |   7 +
 docs/dashboard-guide.md                            |   4 +
 .../agent-detail-settings-theme-styling.test.ts    |   3 +-
 .../dashboard/app/components/AgentDetailView.css   |   7 +-
 .../dashboard/app/components/AgentDetailView.tsx   |  35 ++-
 packages/dashboard/app/components/AgentsView.css   |   4 +
 packages/dashboard/app/components/AgentsView.tsx   |  13 +-
 .../dashboard/app/components/NewAgentDialog.tsx    |   5 +-
 .../dashboard/app/components/SkillMultiselect.css  | 258 +++------------------
 .../dashboard/app/components/SkillMultiselect.tsx  | 178 +++++---------
 .../AgentDetailView.mobile-scroll.test.tsx         |   4 +-
 .../AgentDetailView.skills-procedure.test.tsx      |  59 +++--
 .../app/components/__tests__/AgentsView.test.tsx   |  19 +-
 .../components/__tests__/SkillMultiselect.test.tsx |  81 ++++---
 .../__tests__/useDiscoveredSkillsCache.test.ts     |  16 ++
 .../app/hooks/useDiscoveredSkillsCache.ts          |  13 +-
 .../app/utils/__tests__/agentSkills.test.ts        |  28 +++
 packages/dashboard/app/utils/agentSkills.ts        |  69 +++++-
 packages/i18n/locales/en/app.json                  |  21 +-
 packages/i18n/locales/es/app.json                  |  21 +-
 packages/i18n/locales/fr/app.json                  |  21 +-
 packages/i18n/locales/ko/app.json                  |  21 +-
 packages/i18n/locales/pt-BR/app.json               |  21 +-
 packages/i18n/locales/zh-CN/app.json               |  21 +-
 packages/i18n/locales/zh-TW/app.json               |  21 +-
 25 files changed, 493 insertions(+), 457 deletions(-)

Fusion-Task-Id: FN-9115

Fusion-Task-Lineage: 18229b87-d0dc-41e7-9333-2d12df852486

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 23:14:24 -07:00
gsxdsm
6c2c880699 chore: refresh test velocity baseline and shard-timing snapshot post-trim
Measured wall times: gate 14.0s, boot smoke 20.4s (-6.3s), changed-only
pnpm test 17.5s; quarantine ledger 0. Shard-timing snapshot rebuilt
from today's CI shard artifacts (run 31929730933) plus a locally
measured full dashboard suite so dashboard lane weighting keeps its
per-file data. The trim shows: the former top-6 core PG offenders are
gone from the slowest-20 (sqlite-migrator 2m29s serial -> 20.4s;
SettingsModal.general off the table entirely). Caveat: the dashboard
rows come from the pre-trim analysis measurement, so entries like
SettingsModal.scheduling-merge (30.2s, now ~13s) are pessimistic until
the next dashboard re-measure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 23:05:20 -07:00
gsxdsm
c59afeb15f docs: record PlanningModeModal duplicate-response flake sighting (register entry 8)
One clean solo-lane sighting of the parametrized duplicate-response
reconciliation test (mobile row; the desktop row failed once earlier
under a contaminated concurrent run, recorded as context). Third
distinct flaky test in this suite plus one prior FN-8936 stabilization
— the AGENTS.md repeated-quarantine rule calls that a subsystem
product-race smell, so the product-path audit is filed as FN-9116
rather than stabilizing a fourth time.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:52:18 -07:00
gsxdsm
8ee2ace2c1 test(dashboard): await the lazy board chunk before the first card lookup in back-nav tests
Second root cause of the browser-back flake: the board is a lazy chunk
behind Suspense fallback={null} and waitForAppShell only proves the
header, so a synchronous getByText raced chunk resolution under
sharded-lane load (failure DOM showed a header-only page). The first
board lookup in both back-nav tests is now the async finder — the
correct wait mechanism, no widened timeouts. Complements the
once-queue purge fix; 3/3 solo runs green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:46:23 -07:00
gsxdsm
8f3c776d62 chore(dashboard): commit regenerated e2e screenshot baselines and new FN-8806 set
Local e2e runs regenerated the fn-8602/fn-8607 baselines with small rendering
deltas and produced the FN-8806 task-title-stable-modal baselines that were
never checked in.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:44:45 -07:00
gsxdsm
a90d4e1b3b chore(changesets): trim over-length summary in fix-cc-spacing-and-settings-search
check:changesets enforces a 120-char summary; this legacy entry was 133 and
failed the PR-check gate.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:42:51 -07:00
gsxdsm
20c9e66932 test(engine): reconcile merge durable-write inventory drift
The FN-8923 drift guard was red on main: the fixture predated the FN-9047-9062
workspace wave and regeneration was blocked by 18 unclassified workspace
TaskStore methods. Classify the FN-9059 workspace coordination surface (lease
acquire/renew/release/reclaim/reconcile, land-intent record/resolve, fence-ref
recording, mergeWorkspaceWorktreeEntry, withValidWorkspaceLease as writers; the
inspect/list/find/validate reads as non-writers), regenerate the manifest, and
supply lifecycle verdicts for the 13 new call sites: lease/intent writes in the
land path are already-fenced by FN-9059 store-seam fence-token validation, the
land-failure note is benign-unfenced bookkeeping, and the remaining sites carry
their enclosing symbols' out-of-frontier verdicts. Also drops the deleted
diff-volume gate module from scannedModules.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:42:51 -07:00
gsxdsm
fad45c2d1f fix(dashboard): return 404 for event streams of unknown projects
An SSE subscription with a nonexistent projectId (stale client tab, e2e fixture
page using projectId "fixture") surfaced the PG startup-factory construction
chain as a 500 on every poll, filling operator logs with alarming
"failed to construct TaskStore" errors. Map project-not-found to a clean 404,
matching the project routes' existing handling.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:42:51 -07:00
gsxdsm
87e673baf7 feat(merge): remove the pre-commit diff-volume gate
The gate blocked approved clean-room squashes on per-file shrinkage with no
override path ("AI merge diff-volume gate blocked the approved squash").
Removed by operator decision: delete checkDiffVolume/DiffVolumeRegressionError,
the merge:diff-volume-blocked audit event, the runDiffVolumeGate call sites in
every legacy squash finalizer, the AI-merge pre-land check, and the
mergeDiffVolume* settings. File scope remains the pre-land guard; the
post-squash audit policy remains the shrinkage backstop.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:42:39 -07:00
gsxdsm
866d0280c8 test(dashboard): drop px literals from the AgentActivityPanel token comment
The mobile-styles guard forbids raw px anywhere in the stylesheet,
comments included; the FN-8866 token-fix comment mentioned the named
steps' pixel values and tripped it. Reworded — CSS rules unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:29:30 -07:00
gsxdsm
4bb994f50c test(dashboard): purge leaked mockResolvedValueOnce queues in App.test isolation reset
Root-cause fix for the order-sensitive 'closes board-opened main-panel
task detail on one browser back' flake: vi.clearAllMocks() clears calls
but never drops unconsumed mockResolvedValueOnce entries, and a plain
mockResolvedValue default does not purge them either — the once-queue
wins first. A prior test's unconsumed auth/settings/health/plugin-views
Once value poisoned the next test's first fetch, rendering an
auto-opened modal surface instead of the board. The global beforeEach
now mockReset()s every once-queue-prone API mock before re-applying its
default (fetchPluginDashboardViews gains an explicit empty default
since its factory impl dies with the reset). 4/4 consecutive full-file
runs green (was ~1-in-3 failing); no assertions changed, no quarantine
needed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:25:01 -07:00
gsxdsm
59d53b42a8 test(dashboard): repair stale engine/hook/icon mocks and moved-file source scans
Dashboard bare-run repair, mock-drift cluster. Six route suites'
inline @fusion/engine mocks predated FN-8902's
DEFAULT_MODEL_REGISTRY_REFRESH_TIMEOUT_MS import and now wrap the
canonical createEngineMock fallback proxy; App.test's useTasks mock
becomes an importOriginal spread so the real mergeTaskSnapshot reaches
components, its Todo/graph tests move to FN-8762's plugin-view
enablement invariants (with a mockReset fix for a stale
mockResolvedValueOnce queue the clearAllMocks reset never drops); the
Mailbox lucide mock learns FN-9014's Archive icon; and two source-scan
tests repoint files moved by the #2398 domain-folder refactor
(app/api/agents/agents.ts, engine healing/self-healing-constants.ts),
both verified via git log --follow. Verified 10 files / 252 tests green
under their standard lane projects; both dashboard typechecks clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:18:59 -07:00
gsxdsm
cd433bd68d fix(dashboard): map unresolvable-workflow triage errors to 404; complete stale route fixtures
Dashboard bare-run repair, route/store cluster. Real product regression
fixed: the FNXC:IntakeOwnership boundary replaced the 'Workflow ... not
found' message with a typed TaskIntakeOwnerResolutionError, so the
mission triage routes' message-pattern mapping stopped firing and an
unknown workflowId leaked as a 500 — both feature and slice triage
handlers now match the typed error structurally and return 404 (patch
changeset included). Everything else was stale fixtures behind the PG
cutover and recent seams: sse's mock stores learn getAsyncLayer, the
retry fixtures learn FN-8908's resetTerminalFailureAutoRecoveryBudget,
approve-plan tests materialize a real on-disk PROMPT.md per the
SpecLockApproval 409 contract (fingerprint assertion strengthened to
the always-hash contract), and the MCP settings route body pins the new
host-dependent fusionMemoryMcpAvailable field. Verified 7 files / 213
tests green under their assigned lane projects, src typecheck clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:16:34 -07:00
gsxdsm
5c5ffb6f48 test(dashboard): update component expectations to intentional post-FN-87xx behavior
Dashboard bare-run repair, component-drift cluster. All nine suites
were stale expectations behind cited intentional commits — no UI
regressions found: FN-8826's always-on WIP lifecycle badge
(TaskCard.oversight now asserts no overseer element instead of an empty
header), FN-8762's Todo Lists plugin extraction (MobileNavBar,
MainContent.graph-popout, useAppSettings repurposed to the
pluginDashboardViews contract, with a regression pin that the removed
todosEnabled field never returns), FN-8796's clock-arbitrated
mergeTaskSnapshot, FN-8797's prompt-only planning refresh, FN-8702's
767.98px phone-sheet boundary, FN-8764's primary-role split, and
FN-8947's added touch-target selector. Every update carries an FNXC
comment citing the causing commit. Verified 9 files / 293 tests green,
tsconfig.app.json typecheck clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:15:06 -07:00
gsxdsm
0842dcc996 chore(dashboard): restore e2e screenshot baselines regenerated as a local side effect
The browser-lane suite regenerates these PNGs when it runs locally; six
regenerated baselines were swept into 9673f15c11 from the shared index.
Restore the committed baselines — no intentional visual re-baseline
happened.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:13:39 -07:00
gsxdsm
9673f15c11 fix(dashboard): repair undefined spacing tokens, settings-search gaps, and census/browser-lane test drift
Dashboard bare-run repair, census/token cluster. Real product bugs: the
Command Center activity panel (FN-8866) and structural-mail badge
(FN-8872) referenced undefined --space-* tokens, zeroing their
gaps/padding — mapped to the defined named scale; the settings search
index lagged FN-8829/FN-9021 additions and FN-8855's requiredChecks
entry had no scroll anchor (now a SettingsTextRow). Test-side: the
theme census learns FN-8730's intentional midnight theme, and the
Chromium touch-resize suite self-gates with describe.runIf per the
sibling browser-lane convention (CI/FUSION_BROWSER_SMOKE_REQUIRE still
fail loudly; all 62 tests still run where Chromium exists).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:13:17 -07:00
gsxdsm
9f5f981e33 FN-9114: expose enabled skills and enforce agent skill reads
Make project-enabled skills available across agent sessions while preserving explicit per-agent skills as observable read-first requirements.

- resolve all enabled discovered skills without using agent metadata as an availability filter
- carry forced skill intent through PI, plugin, chat, workflow, merger, and heartbeat session paths
- report resolved and unavailable forced skills in session summaries and diagnostics
- document the updated skill model and add release notes and regression coverage

Files changed:
 .changeset/fn-9114-forced-skills.md                |   7 +
 docs/PLUGIN_AUTHORING.md                           |   2 +-
 docs/agents.md                                     |  10 +-
 docs/diagnostics.md                                |   2 +-
 docs/settings-reference.md                         |   2 +-
 packages/core/src/__tests__/skill-settings.test.ts |   9 +
 .../dashboard/src/__tests__/chat-manager.test.ts   |  26 ++-
 packages/dashboard/src/chat.ts                     |  10 +
 .../engine/src/__tests__/agent-skills-flow.test.ts |  14 +-
 .../compound-engineering-skill-resolution.test.ts  |   2 +-
 .../engine/src/__tests__/heartbeat-skills.test.ts  |  41 ++++
 .../__tests__/hermes-runtime-integration.test.ts   |  63 +++++-
 .../engine/src/__tests__/merger-skills.test.ts     |  33 ++-
 packages/engine/src/__tests__/pi.test.ts           |  35 ++-
 .../__tests__/plugin-skill-body-delivery.test.ts   |   8 +-
 .../src/__tests__/plugin-skill-integration.test.ts |   3 +-
 .../src/__tests__/session-skill-context.test.ts    |  40 ++--
 .../engine/src/__tests__/skill-resolver.test.ts    |  38 +++-
 .../__tests__/step-execute-skill-loading.test.ts   |   6 +
 packages/engine/src/agents/agent-runtime.ts        |   2 +
 .../engine/src/agents/agent-session-helpers.ts     |  88 ++++++-
 .../src/cli-runtime/session-skill-context.ts       | 117 ++++------
 packages/engine/src/cli-runtime/skill-resolver.ts  | 252 +++++++++------------
 .../engine/src/executor/execute-workflow-step.ts   |  14 ++
 packages/engine/src/executor/run-implementation.ts |   5 +
 packages/engine/src/pi.ts                          |  28 ++-
 26 files changed, 576 insertions(+), 281 deletions(-)

Fusion-Task-Id: FN-9114

Fusion-Task-Lineage: fe63ebd1-f947-40d7-be7b-c13d7f1c35c9

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 21:57:22 -07:00
Phil Larson
aedcb681b9 test(cli): refresh task command store fixtures (#3459)
## Summary
- keep CLI task command store mocks aligned with required settings and
retry-budget capabilities
- preserve resolved-store identity while filling production-shaped test
capabilities
- update task-create assertions for synchronous post-create tracking
ownership

## Test plan
- `corepack pnpm --filter @runfusion/fusion exec vitest run
src/commands/__tests__/task.test.ts --silent=passed-only --reporter=dot`
- `corepack pnpm --filter @runfusion/fusion typecheck`
- `corepack pnpm lint`

## CI note
- Build, Gate, Typecheck, Desktop packaging, CodeRabbit, and Greptile
pass on head `6632fd7e4`.
- Lint reaches the lifecycle-column ratchet, then hits current-main
mailbox census drift already fixed by green PR #3440.

Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
2026-08-15 21:43:53 -07:00
gsxdsm
59dc5df5f4 fix(dashboard): show a retryable message when Planning Retry hits a down server
Gateway 502/503/504 non-JSON bodies (for example Traefik "no available server")
were dumped as content-type diagnostics into the Planning error banner.
2026-08-15 21:42:34 -07:00
flexi767
086cd0a505 fix(engine): retry transient post-merge push failures (#3468)
## What

- Retry post-merge target pushes after recognized transient Git
transport failures.
- Use a bounded schedule: the initial attempt plus two retries after 2s
and 5s.
- Apply the same helper to the unified fast path and the shared push
path used by divergence recovery and the soft-deprecated merger.
- Keep retry sleeps and subsequent attempts cancellation-aware.
- Add a patch changeset and regression coverage, including a real bare
remote that rejects the first push.

## Why

Fusion already retries non-fast-forward races, and #1942 made terminal
push failures durable, but a temporary network failure still ended
post-merge delivery after one attempt. That can leave the local
integration branch ahead of the remote even though retrying seconds
later would succeed.

The retry is deliberately provider-neutral. It uses Git error
classification and normal Fusion logs only; it does not add Telegram,
OpenClaw, or any other notification-vendor dependency.

## Behavior and impact

- Retries only transient transport signatures such as connection resets,
DNS failures, unreachable networks, selected HTTP 429/5xx RPC failures,
and unexpected disconnects.
- Permission, authentication, configuration, and ref-rejection errors
keep their existing immediate handling.
- Exhausted retries remain non-fatal to the already-landed merge and
flow through the existing audit/task-log failure reporting.
- Existing non-fast-forward pull/rebase recovery is unchanged apart from
making its backoff cancellation-aware.

## Checks

- [x] `pnpm --filter @fusion/engine exec vitest run
src/__tests__/merger-ai-push-after-merge.test.ts
src/__tests__/merger-prompt-and-utils.test.ts --silent=passed-only
--reporter=dot` (48 tests)
- [x] `pnpm --filter @fusion/engine typecheck`
- [x] `pnpm lint` (0 errors; 2 pre-existing warnings)
- [x] `pnpm check:changesets --strict`
- [x] `pnpm check:fnxc-future-dates`
- [x] `pnpm test` (changed-test gate; static checks and 688 tests
passed)


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

* **Bug Fixes**
* Improved reliability of post-merge pushes by retrying temporary Git
transport failures.
* Added bounded backoff between retries to prevent excessive repeated
attempts.
  * Push retries now stop promptly when an operation is canceled.
* Configuration, authentication, and ref-rejection errors continue to
fail immediately.
* Successful retries and canceled operations now report accurate
outcomes.
* **Tests**
* Added coverage for successful retries, cancellation, and non-retryable
failures.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: flexi767 <flexi767@users.noreply.github.com>
Co-authored-by: v <v@m5.speedport.ip>
2026-08-15 21:42:01 -07:00
gsxdsm
447e1963ef test(dashboard): trim permutation residue and fake the settings auto-save debounce
Slow-test trim, DELETE + dashboard OPTIMIZE tiers. Deletions follow the
docs/testing.md taxonomy exactly — 40 tests removed across
TaskDetailModal.rendering (134→129), QuickEntryBox (300→280),
TerminalModal (247→240), ModelOnboardingModal (205→197), and
AgentDetailView.settings (27→25): byte-identical field-presence twins,
CSS-class permutation residue, and strict-subset interaction copies,
with every FN-tagged describe and user-noticeable behavior kept and
condensed matrices converted to it.each with all cases retained. The
real payoff is the FN-2707 latency pass: SettingsModal's real 500ms
auto-save debounce (and AgentDetailView's 700ms config debounce) now
flush under fake timers via a shared flushSettingsAutoSave harness
export — SettingsModal splits 102.3s→63.6s. Also fixed (not appeased) a
pre-existing race the speedup exposed: nav-button lookups now
findByRole after the settings promise resolves, file-wide. Verified:
1235 tests green across the touched set, tsconfig.app.json typecheck
clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 21:31:29 -07:00
gsxdsm
d4d13e2fa5 FN-9111: Add global Quick Add Enter-save preference
Add an operator-level setting that controls whether plain Enter saves a Quick Add task while preserving Cmd/Ctrl+Enter submission.

- add the global quickAddSubmitOnEnter setting, defaults, settings UI, and app context
- update Quick Add keyboard handling with multiline and duplicate/in-flight safeguards
- add focused settings and keyboard regression coverage, localization, documentation, and a release changeset

Files changed:
 .changeset/fn-9111-quick-add-enter.md              |   7 ++
 docs/dashboard-guide.md                            |   2 +
 docs/settings-reference.md                         |   1 +
 .../core/src/__tests__/settings-defaults.test.ts   |  10 ++
 packages/core/src/config/settings-schema.ts        |   5 +
 packages/core/src/types/settings/settings-scope.ts |   5 +
 packages/dashboard/app/App.tsx                     |   4 +
 .../dashboard/app/components/QuickEntryBox.tsx     |  24 ++++-
 .../QuickEntryBox.submit-on-enter.test.tsx         | 118 +++++++++++++++++++++
 .../__tests__/SettingsModal.general.test.tsx       |  18 ++++
 .../app/components/settings/save-split.ts          |   1 +
 .../sections/GlobalGeneralSection.search.ts        |   9 ++
 .../settings/sections/GlobalGeneralSection.tsx     |  10 ++
 .../settings-default-descriptions.test.tsx         |   1 +
 .../__tests__/useQuickAddSubmitOnEnter.test.tsx    |  24 +++++
 packages/dashboard/app/hooks/useAppSettings.ts     |   4 +
 .../app/hooks/useQuickAddSubmitOnEnter.ts          |  21 ++++
 packages/i18n/locales/en/app.json                  |   2 +
 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 +-
 packages/i18n/src/resources.d.ts                   |   4 +-
 25 files changed, 284 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-9111

Fusion-Task-Lineage: 246153a8-5127-48df-838c-d9b60920cd91

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 21:24:25 -07:00
gsxdsm
0ec3c76faf fix(FN-9093): eagerly install bundled Cursor runtime plugin at host boot
The Cursor provider card's Enable action only flips useCursorCli in
settings and never registers fusion-plugin-cursor-runtime, so
getRuntimeById("cursor") missed and every cursor-cli selection hit the
runtime-routed fail-fast error even with an authenticated cursor-agent.
Mirror the FN-7761 Grok eager bootstrap in serve, dashboard, and daemon,
guarded by the same source-scan regression test.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 21:07:02 -07:00