gsxdsm
7b55a02e51
FN-9157: fix workflow merge boundary proof and retry routing
...
Make workflow merge admission accept valid foreach completion and terminate retries when proof is unavailable.
- Treat fully terminal live foreach steps as implementation proof for Review Level 0 workflows.
- Preserve merge-boundary-unproven as a terminal graph failure and park blocked retries visibly.
- Add unit, graph-boundary, and PostgreSQL regression coverage plus operator documentation and a patch changeset.
Files changed:
.changeset/fn-9157-merge-boundary.md | 7 +++
docs/architecture.md | 4 ++
docs/workflow-steps.md | 6 ++
.../src/__tests__/workflow-merge-proof.test.ts | 11 +++-
packages/core/src/workflow-merge-proof.ts | 20 +++++--
.../src/__tests__/executor-graph-boundary.test.ts | 64 +++++++++++++++++++++-
...xecutor-merge-boundary-foreach-proof.pg.test.ts | 10 ++++
.../__tests__/merge-boundary-unproven-park.test.ts | 48 ++++++++++++++++
.../create-authoritative-workflow-primitives.ts | 13 ++++-
.../create-authoritative-workflow-seams.ts | 6 +-
.../executor/evaluate-workflow-merge-boundary.ts | 18 +++++-
.../executor/route-graph-merge-failure-to-retry.ts | 26 ++++++++-
packages/engine/src/executor/task-predicates.ts | 2 +
.../engine/src/executor/workflow-merge-boundary.ts | 29 +++++++---
.../engine/src/workflows/workflow-merge-nodes.ts | 13 +++++
15 files changed, 253 insertions(+), 24 deletions(-)
Fusion-Task-Id: FN-9157
Fusion-Task-Lineage: 7c68dfe2-28fb-4353-9ae6-df0ddbaf799a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-19 18:16:49 -07:00
gsxdsm
fb77eef7a9
FN-9150: Capture abandoned PostgreSQL timeout boundaries
...
Capture elapsed and join evidence for PostgreSQL test boundaries that Vitest abandons before settlement.
- emit unique boundary join keys, progress ladders, terminal records, and payload-free watchdog breaches
- classify ladder-only, breach, and unobservable lifecycle evidence in the loaded-failure census
- cover abandoned and superseded body windows and document the corrective campaign findings
Files changed:
...res-loaded-lane-unrelated-failure-population.md | 33 ++++++-
docs/testing.md | 14 ++-
.../__test-utils__/pg-timeout-boundary-observer.ts | 108 ++++++++++++++++++---
.../__tests__/pg-timeout-boundary-observer.test.ts | 98 ++++++++++++++++++-
.../__tests__/pg-loaded-failure-census.test.mjs | 30 ++++++
scripts/pg-loaded-failure-census.mjs | 71 ++++++++++++--
6 files changed, 327 insertions(+), 27 deletions(-)
Fusion-Task-Id: FN-9150
Fusion-Task-Lineage: fc2e9f99-7739-4d86-99f4-713a78f53e57
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-19 10:10:39 -07:00
gsxdsm
a1977e052b
FN-9149: Add PostgreSQL timeout-boundary diagnostics
...
Instrument the opt-in PostgreSQL test harness to attribute loaded-lane timeout failures without changing default behavior.
- Add bounded setup, body, and teardown watchdog probes with host, cluster, and template evidence.
- Wire observer records into the harness and loaded-failure census with explicit suppression and attribution handling.
- Cover observer inertness, boundary behavior, and census joins while documenting the 27-worker campaign findings.
Files changed:
...res-loaded-lane-unrelated-failure-population.md | 31 +-
docs/testing.md | 27 ++
.../core/src/__test-utils__/pg-test-harness.ts | 113 +++++-
.../__test-utils__/pg-timeout-boundary-observer.ts | 451 +++++++++++++++++++++
.../pg-test-harness-observer-inertness.test.ts | 31 ++
.../__tests__/pg-timeout-boundary-observer.test.ts | 177 ++++++++
.../__tests__/pg-loaded-failure-census.test.mjs | 31 ++
scripts/pg-loaded-failure-census.mjs | 101 ++++-
8 files changed, 934 insertions(+), 28 deletions(-)
Fusion-Task-Id: FN-9149
Fusion-Task-Lineage: 4df4ee28-5369-41ae-bb0c-e7e9ae78d873
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-19 08:41:14 -07:00
ischindl
72877c8cf9
fix(RUFU-074): idle backoff + jitter for the task-deleted outbox consumer ( #3471 )
...
**Problem:** Each dashboard/engine project consumer polled
`task_deleted` outbox on a fixed 5s setInterval, so ~44 per-project
consumers thundered together on the same cadence — an idle DB query
storm and CPU hot-spot even when projects were paused/idle.
**Fix:** The outbox consumer reschedules itself from each poll outcome:
an idle poll (zero events) grows the next delay by
`TASK_DELETED_OUTBOX_BACKOFF_STEP_MS` toward `MAX_POLL_MS`, with ±20%
jitter so the consumers de-synchronize; a poll that delivered events
resets to the fast base. A paused/idle project drains its outbox and
backoff alone drops the DB load.
**Includes:** regression test (bounded jitter + idle growth),
performance changeset, solution doc, deploy handoff script.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Performance**
- Reduced unnecessary idle polling by gradually increasing the polling
interval, up to 60 seconds, with bounded timing variation.
- Restored the faster 5-second polling cadence when new events, waits,
or transient errors occur.
- Preserved event ordering, delivery guarantees, acknowledgements, and
independent behavior across concurrent consumers.
- **Documentation**
- Added guidance on polling behavior, deployment verification, and
monitoring targets.
- **Tests**
- Added coverage for backoff growth, jitter limits, event bursts,
concurrent consumers, error handling, retries, and clean shutdown.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-18 22:11:47 -07:00
gsxdsm
16e63462cc
fix: audit fallout — tunnel port, orphaned dev processes, scrollback clear
...
Auditing for repeats of the `pnpm dev --tunnel` bugs turned up the same
mistakes elsewhere.
Remote tunnels assumed 4040. ProjectEngine's Cloudflare quick tunnel
hardcoded http://localhost:4040 , so a dashboard on an explicit --port, a PORT
override, or runDashboard's EADDRINUSE rebind published a PUBLIC tunnel to
whatever else held 4040. The dashboard now records its bound port
(setLocalDashboardPort, from both runDashboard and headless serve) and the
tunnel reads it, keeping 4040 only as the pre-report default.
register-discovery-routes already derived its port from req.socket.localPort
and is untouched.
Stopping the dev wrapper orphaned everything it started. It installed no
signal handlers, so teardown only ran from the child's close handler:
signalling the wrapper left the dev server AND its cloudflared alive —
observed twice, four surviving processes each time, including a public
trycloudflare URL still serving a dev server believed to be down. Ctrl-C hid
it by signalling the whole process group.
SessionTerminal appended scrollback instead of clearing first, though the
server sends it as a separate frame precisely so the client can clear. Latent
today because every reattach builds a fresh xterm; a duplicated-history bug
the moment an in-place reconnect appears.
And BackupManager's centralDbPath is gone: written, never read, and a
leftover of the removed SQLite backup — the same class of stale artifact that
onboarding was using as evidence about a Postgres install.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-18 21:09:03 -07:00
ischindl
0540686599
fix(RUFU-073): thread a per-tick task workflow-selection cache through scheduler reads ( #3470 )
...
**Problem:** Scheduler was re-reading each task's
`task_workflow_selection` once per park-resolution (sweep, hold-release,
moved, unpause/wake), causing a nonstop PostgreSQL query storm (~232
idx_scan/s) on idle polling — a major engine CPU hot-spot.
**Fix:** Memoize the workflow selection per scheduler tick/event —
thread a shared, per-event selection cache through
`resolveWorkflowIrForTask` and all park-resolution handlers, then throw
it away. Each task resolves its parked columns with at most one read of
`task_workflow_selection` per tick. A selection write is always observed
on the next event's fresh cache (never a global/infinite LRU).
**Includes:** regression test asserting the once-per-tick read
invariant, performance changeset + per-tick-cache solution doc,
deploy+verify handoff script, and the parallel quarantine-ledger merge
(origin FN-9125 + RUFU-072 OOM entries both retained).
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Performance Improvements**
* Reduced repeated workflow-selection reads during scheduler ticks and
related event processing.
* Improved scheduler and health API responsiveness through per-operation
caching and read deduplication.
* Preserved existing behavior, including retry handling for failed reads
and synchronous data-store support.
* **Documentation**
* Added architectural guidance covering workflow-selection performance,
caching behavior, and verification criteria.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-08-18 00:10:46 -07:00
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
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
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
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
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
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
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
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
0935e27902
test(core): fast harness reset, sqlite-migrator template clones, top-3 harness adoptions
...
Slow-test trim, OPTIMIZE tier (harness owner). Profiling showed 163ms
of the shared harness's 169ms per-test beforeEach was one TRUNCATE over
~110 tables (per-table catalog/fsync constants, row-independent). The
reset is now a single DO block: transaction-local
session_replication_role=replica, DELETE only from non-empty tables,
and sequence resets reproducing RESTART IDENTITY exactly — 169ms → 10ms
per test across every harness file, with the legacy TRUNCATE retained
as an automatic error fallback for non-superuser roles. sqlite-migrator
(the live SQLite→PG upgrade path; all 43 tests kept incl.
VAL-MIGRATE-001..006) now provisions targets from a golden-template
clone via new createBaselinedPgTestDatabase/createEmptyPgTestDatabase
exports — the dry-run test keeps a pristine empty DB so its
no-schemas-left-behind assertions stay meaningful — 148.8s → ~26s.
taskstore-lifecycle, data-layer, and taskstore-remaining migrate onto
the shared harness with byte-identical test bodies (187s → ~11s
combined); data-layer's close() test closes a private layer so the
shared pool survives. Seeding hoists were measured and deliberately
skipped: the harness fix already exceeded their projected savings and a
beforeAll seed would weaken the clean-DB-per-test contract.
Verified: 287 tests green across the touched files plus untouched
harness consumers (schema-applier 80/80, mission-store 62/62).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 20:58:35 -07:00
gsxdsm
ea90eeed1c
test(core): migrate 12 hand-rolled PG test files onto the shared harness
...
Slow-test trim, OPTIMIZE tier (mechanical sweep). These files each
created and baselined a fresh database per test (~3-4.6s/test); they now
use the shared golden-template harness (TRUNCATE per test) or, where a
private database is genuinely required (postgres-health drift/VACUUM
subjects, allocator-cross-project RLS connection sets), a per-test
template clone instead of raw DDL. Zero assertion lines changed
(verified), identical test counts, 110/110 green. Deliberately left
alone: startup-factory-integration and embedded-lifecycle (own-database
boot IS the subject) and schema-applier (real DDL is the subject).
Measured: ~195s serial → ~30s for these files.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 20:55:11 -07:00
gsxdsm
f1a8b271bd
test(core): consolidate satellite-store and custom-v1 dispatch suites onto the shared PG harness
...
Slow-test trim, CONDENSE tier. The three satellite-store files each
hand-rolled CREATE DATABASE + schema baseline per test (38 database
creations, ~75s serial); their describes now live verbatim — every it
name, assertion, and FNXC provenance comment preserved, 38/38 tests —
inside one shared-harness file with a single boot. The 3-test
custom-v1-workflow-dispatch characterization (13s alone) moved into the
adjacent no-selection-default-workflow-move harness file. Measured:
~92s serial → ~8s for the same coverage.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 20:50:38 -07:00
gsxdsm
d9fcabfaef
FN-9112: default Memory Keeper heartbeats to disabled
...
Default built-in Memory Keeper agents to opt-in heartbeat scheduling while retaining operator choices.
- Provision new Memory Keeper agents with heartbeat disabled and hourly scheduling preconfigured.
- Preserve explicit heartbeat settings during startup convergence and avoid no-op rewrites.
- Add provisioning coverage, operator documentation, and a release changeset.
Files changed:
.../fn-9112-memory-keeper-heartbeat-default-off.md | 7 +++
docs/agents.md | 2 +-
.../__tests__/memory-agent-provisioning.test.ts | 59 +++++++++++++++++++---
packages/core/src/agents/agent-store.ts | 34 ++++++++++---
4 files changed, 86 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-9112
Fusion-Task-Lineage: 49edc6d9-3d9b-412f-91a5-c26f4a26a662
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 20:17:07 -07:00
gsxdsm
872d260ab8
FN-9104: Add mailbox recommendation task actions
...
Add guarded task creation directly to completed-task recommendation notices.
- Render live recommendation details and task actions in mailbox detail and conversation surfaces.
- Prevent duplicate creates, expose existing task links, and support unavailable and retry states.
- Cover desktop and mobile surfaces, update notice copy and documentation, and add a release changeset.
Files changed:
.../fn-9104-mailbox-recommendation-create.md | 7 ++
docs/dashboard-guide.md | 2 +-
.../__tests__/task-recommendation-notice.test.ts | 7 ++
packages/core/src/task-recommendation-notice.ts | 9 +-
packages/dashboard/app/components/MailboxModal.tsx | 3 +
.../app/components/MailboxTaskRecommendations.css | 9 ++
.../app/components/MailboxTaskRecommendations.tsx | 127 +++++++++++++++++++++
packages/dashboard/app/components/MailboxView.tsx | 3 +
.../MailboxTaskRecommendations.surfaces.test.tsx | 77 +++++++++++++
.../__tests__/MailboxTaskRecommendations.test.tsx | 72 ++++++++++++
10 files changed, 311 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-9104
Fusion-Task-Lineage: 94f53bfe-f57f-42ee-970e-56658129c1e0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 17:36:32 -07:00
gsxdsm
374ae08d56
test(engine): repoint source-scan contracts to the peeled module layout
...
Full-suite repair, engine source-scan cluster. The package code
organization waves moved ~30 engine modules into subdirectories
(plugins/, execution/, scheduling/, healing/, worktree/, executor/
peels); the log-severity manifest, prompt carve-out, emit-surface,
failure-lane, and worktree-invariant scanners now read the moved
locations, verified per file via git log --follow. Two scans caught
real drift rather than moves: the lifecycle census had 12 unexamined
column guards (resolved with DELIBERATE-LITERAL markers for the mailbox
archived tab, the FN-9059 lease-owner terminality check, and the FN-9056
legacy done fallback — baseline re-recorded with zero absorbed debt),
and planning-claim gained a genuine second writer in self-healing's
FN-8998 transport-failure recovery, admitted to the allowlist with its
CAS-guarded justification. 9 files / 119 tests green.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 15:31:58 -07:00
gsxdsm
f11bb2e899
fix(core): restore title-redirect planning hold and stamp workflow-create partition
...
Full-suite repair, core cluster. Two real product regressions caught by
the red tests: (1) the wave-18 refactor dropped the task.title argument
FN-8840 added to isDuplicateRedirectOnlyPrompt inside
isTaskAwaitingPlanning, so a title-only DUPLICATE:<ID> redirect read as
executable Ready instead of awaiting planning; (2) FN-8998 scoped every
workflow-definition read by layer.projectId but left the INSERT on the
session-GUC default, so a JS-bound layer created workflow rows it could
never read back — the insert now stamps the bound projectId like the
FN-8997 workflowSteps insert. Test-lag fixes: analytics renamed-lanes
harnesses now bind projectId 'p1' to match FN-8957/FN-8998 scoping,
project-ownership-runtime-scope replaces a hardcoded expired approval
date, schema-applier learns migrations 0059/0060 (115 project tables,
baseline 0060), and builtin-workflow-settings-triage learns FN-8932's
memoryConsolidationEnabled with position-independent lookups.
Verified: 10 files / 128 tests green, core typecheck clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 15:22:33 -07:00
gsxdsm
5a351b2454
test: repoint worktree-capacity audit entries and fix core subpath alias
...
Full-suite repair, mechanical cluster: the wave-18 executor peel (#3317 )
moved the audited child-spawn bound to executor/create-spawn-agent-tool.ts,
the admission-reason unification moved the binding-gate discriminator into
concurrency/concurrency.ts, and the FN-9059-era merge-claim and direct
workflow-continuation defers read the shared ceiling through
resolveActiveTaskCapacityLimit (OFF-mode aware) — all audited with reasons,
none is a new raw gate. Core's vitest config now aliases the
@fusion/core/mcp-builtin-servers subpath before the bare alias (mirroring
engine's config) so core PG tests that exercise engine's mcp-resolution
resolve it from source.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 15:07:24 -07:00
gsxdsm
6401fdea89
FN-9101: normalize Anthropic auth provider selections
...
Route Anthropic subscription and API-key auth selections through the built-in execution provider.
- Add a shared provider-ID normalization helper and export it from core.
- Normalize persisted model selections during session creation and registry lookup.
- Hide credential-only Anthropic provider rows from the dashboard model catalog.
- Add regression coverage and a patch changeset for subscription-backed execution.
Files changed:
...9101-anthropic-subscription-model-resolution.md | 7 ++++
.../__tests__/anthropic-execution-provider.test.ts | 18 ++++++++
packages/core/src/ai/anthropic-models.ts | 13 ++++++
packages/core/src/index.gate.ts | 2 +
packages/core/src/index.ts | 2 +
.../dashboard/src/__tests__/routes-auth.test.ts | 2 +
.../dashboard/src/routes/register-model-routes.ts | 14 ++++---
...-session-helpers-anthropic-subscription.test.ts | 49 ++++++++++++++++++++++
.../src/__tests__/pi-create-fn-agent.test.ts | 25 +++++++++++
.../engine/src/agents/agent-session-helpers.ts | 26 ++++++++----
packages/engine/src/pi.ts | 14 +++++--
11 files changed, 154 insertions(+), 18 deletions(-)
Fusion-Task-Id: FN-9101
Fusion-Task-Lineage: 72e70e67-b291-44fc-ba3f-12b54d06eba9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 14:19:23 -07:00
gsxdsm
7ed1c39a67
FN-9102: fix active runtime segment accounting
...
Prevent reopened tasks from double-counting closed execution segments while preserving pre-execution planning time.
- Clear the live execution anchor whenever a WIP segment is banked.
- Clamp legacy poisoned runtime values with separate execution and combined-work wall-clock ceilings.
- Cover cards, detail statistics, core totals, and planner metrics across WIP round trips and historical rows.
- Add a patch changeset for the published Fusion package.
Files changed:
.changeset/fn-9102-task-runtime-double-count.md | 7 ++
.../src/__tests__/reopen-semantics-by-role.test.ts | 95 ++++++++++++++--------
packages/core/src/tasks/task-timing.ts | 20 ++++-
.../core/src/workflows/default-workflow-hooks.ts | 14 +++-
.../app/components/__tests__/TaskCard.test.tsx | 27 ++++++
.../__tests__/TaskTokenStatsPanel.test.tsx | 27 ++++++
.../app/utils/__tests__/taskTiming.test.ts | 40 +++++++++
packages/dashboard/app/utils/taskTiming.ts | 28 +++++--
.../__tests__/task-planner-chat-metrics.test.ts | 28 +++++++
.../dashboard/src/task-planner-chat-metrics.ts | 22 ++++-
10 files changed, 260 insertions(+), 48 deletions(-)
Fusion-Task-Id: FN-9102
Fusion-Task-Lineage: 3b42e81f-4e11-4232-80f6-052f51b83f1c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 13:39:24 -07:00
gsxdsm
9fa8b386ee
FN-9059: add durable workspace coordination leases
...
Prevent overlapping multi-node workspace operations and duplicate repository landings.
- Add durable coordination leases, fence tokens, and land-intent persistence.
- Fence workspace merge dispatches and repository publication across engine nodes.
- Reconcile expired coordination state safely and cover lease lifecycle behavior.
Files changed:
.../fn-9059-workspace-durable-coordination.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 2 +
docs/multi-project.md | 48 ++++
.../workspace-coordination-leases.pg.test.ts | 56 ++++
.../__tests__/postgres/workspace-leases.pg.test.ts | 112 ++++++++
packages/core/src/engine-node-identity.ts | 22 ++
packages/core/src/index.ts | 3 +
.../0060_fn_9059_workspace_coordination_leases.sql | 10 +
packages/core/src/postgres/schema-applier.ts | 13 +-
packages/core/src/postgres/schema/project.ts | 31 ++
packages/core/src/store.ts | 18 ++
packages/core/src/task-store/workspace-leases.ts | 261 +++++++++++++++++
packages/core/src/tasks/workspace-lease-types.ts | 24 ++
.../engine/src/__tests__/project-engine.test.ts | 69 ++++-
.../src/__tests__/self-healing-workspace.test.ts | 63 ++++-
.../workspace-durable-coordination.test.ts | 49 ++++
.../src/__tests__/workspace-merger-lease.test.ts | 312 ++++++++++++++++++++-
packages/engine/src/merge/merger-ai.ts | 277 ++++++++++++++++--
packages/engine/src/merge/workspace-fence-ref.ts | 171 +++++++++++
packages/engine/src/project-engine.ts | 175 ++++++++++--
packages/engine/src/runtimes/in-process-runtime.ts | 4 +-
packages/engine/src/self-healing.ts | 191 ++++++++++++-
packages/engine/src/util/run-audit.ts | 2 +
.../engine/src/worktree/worktree-acquisition.ts | 43 ++-
25 files changed, 1901 insertions(+), 63 deletions(-)
Fusion-Task-Id: FN-9059
Fusion-Task-Lineage: e51e3f54-69ee-4337-a218-4895d87474aa
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 03:22:13 -07:00
gsxdsm
2f99a8fb59
FN-9052: add atomic workspace worktree entry merges
...
Serialize per-repository workspace worktree state updates across concurrent Fusion processes.
- Add advisory-locked store-level per-entry workspace worktree merges.
- Route acquisition, landing, failure, and recovery updates through atomic merges.
- Cover concurrent sibling repository writes and document the invariant.
Files changed:
.../fn-9052-workspace-worktree-atomic-merge.md | 7 ++
docs/architecture.md | 1 +
...workspace-worktrees-concurrent-merge.pg.test.ts | 90 ++++++++++++++++++++++
packages/core/src/store.ts | 10 ++-
packages/core/src/task-store/task-mutation-ops.ts | 52 ++++++++++++-
packages/core/src/types.ts | 2 +
packages/core/src/types/task/task-core.ts | 17 +++-
.../merge-orphan-body-durable-writes.test.ts | 8 ++
.../src/__tests__/self-healing-workspace.test.ts | 49 +++++++++---
.../src/__tests__/workspace-merger-lease.test.ts | 12 +++
.../engine/src/__tests__/workspace-merger.test.ts | 12 +--
.../worktree-acquisition-workspace.test.ts | 82 +++++++++++++++++++-
packages/engine/src/merge/merger-ai.ts | 21 ++---
.../engine/src/merge/workspace-land-failure.ts | 19 +++--
packages/engine/src/self-healing.ts | 15 +++-
.../engine/src/worktree/worktree-acquisition.ts | 25 +++---
16 files changed, 370 insertions(+), 52 deletions(-)
Fusion-Task-Id: FN-9052
Fusion-Task-Lineage: 2168085a-74a7-4a0f-954e-50db99eb98b7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 01:14:43 -07:00
gsxdsm
7bb7d450e6
FN-9062: surface workspace repository land status
...
Expose per-repository workspace landing progress and failures in Task Detail.
- Persist display-only repository land failure breadcrumbs during merge and recovery
- Render landed, pending, and failed repository statuses with partial-land detail
- Document the workspace status behavior and add coverage for UI and recovery paths
Files changed:
.changeset/fn-9062-workspace-land-status.md | 7 ++
docs/dashboard-guide.md | 4 +
packages/core/src/types/task/task-core.ts | 11 ++-
.../dashboard/app/components/TaskDetailModal.css | 33 +++++++
.../app/components/WorkspaceWorktreesSummary.tsx | 106 ++++++++-------------
.../__tests__/WorkspaceWorktreesSummary.test.tsx | 46 ++++++++-
.../src/__tests__/self-healing-workspace.test.ts | 19 ++++
.../engine/src/__tests__/workspace-merger.test.ts | 6 ++
packages/engine/src/merge/merger-ai.ts | 7 +-
.../engine/src/merge/workspace-land-failure.ts | 21 ++++
packages/engine/src/self-healing.ts | 16 ++++
11 files changed, 208 insertions(+), 68 deletions(-)
Fusion-Task-Id: FN-9062
Fusion-Task-Lineage: 8c12b9f9-f6ed-4766-a6f1-49cdf9ea8926
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 00:48:23 -07:00
gsxdsm
c7779e44ac
FN-9055: guard archive disposal of live workspace worktrees
...
Prevent archive cleanup from removing worktrees that still belong to live tasks.
- Add shared archive liveness evaluation and transactional refusal guards.
- Require CLI and extension archive operations to refuse live tasks unless a human uses --force.
- Protect baseline archive worktree disposal and cover CLI, core, and engine paths with tests.
Files changed:
.changeset/fn-9055-archive-live-worktree-guard.md | 7 ++
docs/cli-reference.md | 4 +-
docs/task-management.md | 4 +-
.../extension-task-archive-live-guard.test.ts | 82 +++++++++++++++++++
packages/cli/src/bin.ts | 6 +-
packages/cli/src/commands/__tests__/task.test.ts | 66 ++++++++++++++-
packages/cli/src/commands/task.ts | 49 +++++++++---
packages/cli/src/extension.ts | 25 ++++--
.../src/__tests__/archive-live-task-guard.test.ts | 70 ++++++++++++++++
.../postgres/archive-live-task-fence.pg.test.ts | 69 ++++++++++++++++
.../src/__tests__/task-archive-liveness.test.ts | 19 +++++
packages/core/src/index.ts | 10 +++
packages/core/src/store.ts | 4 +-
.../core/src/task-store/archive-lifecycle-2.ts | 27 +++++--
packages/core/src/task-store/archive-lifecycle.ts | 20 ++---
.../src/task-store/async/async-archive-lineage.ts | 17 +++-
packages/core/src/tasks/task-archive-liveness.ts | 56 +++++++++++++
...chive-baseline-disposer-live-task-guard.test.ts | 93 ++++++++++++++++++++++
.../healing/archive-worktree-disposer-install.ts | 15 +++-
19 files changed, 592 insertions(+), 51 deletions(-)
Fusion-Task-Id: FN-9055
Fusion-Task-Lineage: 08644626-cc61-4854-abb9-5b415ddc9491
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 00:35:12 -07:00
gsxdsm
1372218b1f
FN-9047: invalidate stale workspace landing proof after revert
...
Preserve workspace landing attribution while allowing cleanly reverted work to land again.
- Record a per-repository revert boundary after clean git-mode workspace reverts.
- Reject recorded and trailer landing proof at or behind that boundary, then clear it on a fresh landing.
- Persist boundaries through the revert route and cover re-land behavior with git tests.
Files changed:
.changeset/fn-9047-workspace-revert-landed-sha.md | 7 +++
docs/architecture.md | 2 +
packages/core/src/types/task/task-core.ts | 7 ++-
.../src/routes/register-session-diff-routes.ts | 2 +-
.../src/routes/register-task-workflow-routes.ts | 11 ++++
.../task-revert.workspace.real-git.test.ts | 27 ++++++++++
...orkspace-land-predicate.revert-boundary.test.ts | 60 ++++++++++++++++++++++
packages/engine/src/execution/task-revert.ts | 42 +++++++++++++--
packages/engine/src/index.ts | 1 +
packages/engine/src/merge/merger-ai.ts | 5 +-
.../engine/src/merge/workspace-land-predicate.ts | 25 +++++++--
packages/engine/src/self-healing.ts | 9 +++-
12 files changed, 185 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-9047
Fusion-Task-Lineage: 8ac41347-3c76-4f54-8d69-f16f82084305
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 00:02:52 -07:00
gsxdsm
6896f1d7f3
FN-9045: wire workspace mode toggle to workspace config
...
Connect workspace-mode settings updates to the runtime workspace configuration lifecycle.
- Synchronize workspace.json and config.json when workspace mode changes.
- Reconcile settings events and executor state after successful or failed toggles.
- Add dashboard route, UI copy, localization, documentation, and regression coverage.
Files changed:
.changeset/fn-9045-workspace-mode-toggle.md | 7 +
docs/settings-reference.md | 2 +-
.../settings-workspace-toggle-side-effect.test.ts | 178 +++++++++++++++++++++
.../src/__tests__/workspace-mode-toggle.test.ts | 71 ++++++++
packages/core/src/git/git-repository.ts | 147 ++++++++++++++++-
packages/core/src/index.gate.ts | 6 +
packages/core/src/index.ts | 6 +
packages/core/src/task-store/settings-ops.ts | 86 +++++++++-
packages/core/src/types/settings/settings-scope.ts | 11 +-
.../settings/sections/GeneralSection.tsx | 10 +-
.../settings-workspace-mode-route.test.ts | 148 +++++++++++++++++
.../src/routes/register-settings-memory-routes.ts | 18 +++
.../executor-workspace-toggle-invalidation.test.ts | 64 ++++++++
.../engine/src/executor/task-executor-state.ts | 6 +
.../src/executor/workspace-config-resolver.ts | 16 +-
packages/engine/src/runtimes/in-process-runtime.ts | 12 ++
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 +-
23 files changed, 791 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-9045
Fusion-Task-Lineage: e382726f-8409-4983-94ef-93f341a6adbf
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 23:33:36 -07:00
gsxdsm
892afaaf03
FN-9048: clear disposed workspace state on unarchive
...
Prevent disposed workspace metadata from being revived when archived tasks return.
- Reconcile missing workspace and singular worktree paths during archive restore.
- Preserve surviving workspace entries and cover archive-to-restore recovery behavior.
- Document the restore lifecycle and add a patch changeset.
Files changed:
.changeset/fn-9048-workspace-unarchive.md | 7 ++
docs/task-management.md | 2 +-
.../archive-restore-workspace-worktrees.pg.test.ts | 70 +++++++++++++
.../core/src/task-store/archive-lifecycle-2.ts | 8 +-
.../src/task-store/async/async-archive-lineage.ts | 43 ++++++++
.../src/__tests__/self-healing-workspace.test.ts | 111 ++++++++++++++++++++-
6 files changed, 236 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-9048
Fusion-Task-Lineage: fa9b9359-5fab-497f-87ce-0174d8069d99
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 23:22:05 -07:00
gsxdsm
c2c9205281
FN-9064: clarify workspace merge routing
...
Replace stale workspace merge messaging and retire a dead sync-SQLite cleanup path.
- Direct misrouted workspace tasks to the per-repository land path.
- Update merge-boundary tests and engine diagnostics for the active routing contract.
- Remove the retired deferred branch-cleanup implementation.
Files changed: .../assert-not-workspace-task-merge.test.ts | 28 +++++++++------
packages/core/src/task-store/archive-lifecycle.ts | 41 ++++------------------
packages/core/src/task-store/merge-queue-ops.ts | 8 ++---
packages/core/src/types/task/task-core.ts | 26 ++++++--------
.../engine/src/__tests__/workspace-merger.test.ts | 2 +-
packages/engine/src/project-engine.ts | 18 +++++-----
6 files changed, 48 insertions(+), 75 deletions(-)
Fusion-Task-Id: FN-9064
Fusion-Task-Lineage: b75fbf34-fe65-49f0-9e69-554c0897777a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 22:32:00 -07:00
gsxdsm
b7604a94bf
FN-9041: remove agent state-change activity logs
...
Remove durable agent state-change events and hide retained state-change rows from activity displays.
- Stop AgentStore update and reconciliation paths from writing state-change activity events.
- Filter historical state-change events in activity stores and panels while retaining live roster notifications.
- Document the retained activity contract, add coverage, and include a patch changeset.
Files changed:
.changeset/fn-9041-removal.md | 7 ++++
docs/agent-activity-contract.md | 4 ++
docs/architecture.md | 2 +-
docs/dashboard-guide.md | 2 +-
.../src/__tests__/agent-activity-writers.test.ts | 23 ++++++-----
packages/core/src/agents/agent-store.ts | 28 +++++--------
.../app/components/agentsOrgChartActivity.ts | 12 ++++++
.../command-center/AgentActivityPanel.tsx | 25 +++++++----
.../__tests__/AgentActivityPanel.test.tsx | 48 ++++++++++++++++++++++
.../app/hooks/__tests__/agentActivityStore.test.ts | 39 +++++++++++++++++-
packages/dashboard/app/hooks/agentActivityStore.ts | 3 +-
11 files changed, 153 insertions(+), 40 deletions(-)
Fusion-Task-Id: FN-9041
Fusion-Task-Lineage: 532724b1-5945-4904-b5cd-2c27909805de
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 12:41:03 -07:00
gsxdsm
9c83812351
fix(ci): unblock check:lane-wiring for the task-recommendations read
...
check:lane-wiring runs in CI's Lint gate and has been failing on main since FN-9037 landed
`listTaskRecommendations`, so it blocks every PR in the repo, not just the one that hit it.
Recorded rather than rewired, because this is the false-positive shape the escape hatch exists
for. The guard catches a callee silently falling back to a LEGACY COLUMN LITERAL when a caller
omits the lane; `listTaskRecommendationsImpl` falls back to
`resolveProjectColumnsForRoles(store, ["complete"])`, which reads the board's own lanes. Real
callers already pass a resolved set — the dashboard route resolves `completeColumns` before
calling — so the fallback only serves the pass-through wrapper. Resolving again in the wrapper
would duplicate that query on every call for no behavioural difference.
The reason lives at the call site as well as in the baseline, since a bare count in a JSON file
is exactly the kind of entry that later reads as unexplained debt.
Baseline diff verified to be a single added entry (store.ts: 1) — nothing else raised or lowered.
Verified: check:lane-wiring exits 0, core typecheck clean, eslint clean, FNXC date check clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-13 23:46:57 -07:00
gsxdsm
873f339ddd
FN-9040: show backup status and preserve schedules
...
Expose database backup inventory and schedule execution evidence while keeping scheduled backups due after unchanged settings saves.
- Display backup files, empty and error states, and automatic schedule details in Settings.
- Reconcile the shared backup routine at engine startup and retain its next run when settings are unchanged.
- Add API, localization, documentation, and regression coverage for backup status and scheduling.
Files changed:
.changeset/fn-9040-database-backups-visibility.md | 7 ++
docs/dashboard-guide.md | 2 +-
docs/settings-reference.md | 4 +
.../src/__tests__/backup-schedule-status.test.ts | 124 +++++++++++++++++++++
.../core/src/automation/global-routine-store.ts | 31 +++++-
packages/core/src/backup/backup.ts | 95 ++++++++++++++--
packages/core/src/index.gate.ts | 4 +-
packages/core/src/index.ts | 4 +-
.../app/api/agents/agent-import-generation.ts | 14 +++
packages/dashboard/app/api/legacy.ts | 1 +
.../dashboard/app/components/SettingsModal.tsx | 12 +-
.../__tests__/SettingsModal.test-harness.tsx | 7 +-
.../__tests__/SettingsModalNodeRouting.test.tsx | 2 +-
.../components/__tests__/settings-mobile.test.tsx | 2 +-
.../settings/sections/DatabaseBackupsSection.css | 24 ++++
.../settings/sections/DatabaseBackupsSection.tsx | 67 ++++++-----
.../__tests__/DatabaseBackupsSection.test.tsx | 45 ++++++++
.../register-system-maintenance-routes.test.ts | 47 +++++++-
.../routes/register-system-maintenance-routes.ts | 46 ++++++--
.../src/__tests__/in-process-runtime.pg.test.ts | 15 ++-
packages/engine/src/runtimes/in-process-runtime.ts | 13 +++
packages/i18n/locales/en/app.json | 17 ++-
packages/i18n/locales/es/app.json | 17 ++-
packages/i18n/locales/fr/app.json | 17 ++-
packages/i18n/locales/ko/app.json | 17 ++-
packages/i18n/locales/pt-BR/app.json | 17 ++-
packages/i18n/locales/zh-CN/app.json | 17 ++-
packages/i18n/locales/zh-TW/app.json | 17 ++-
packages/i18n/src/resources.d.ts | 28 ++++-
29 files changed, 623 insertions(+), 90 deletions(-)
Fusion-Task-Id: FN-9040
Fusion-Task-Lineage: 29a803a2-0784-4a99-b7cb-2f67d105254b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 17:22:46 -07:00
gsxdsm
bebb46ff41
FN-9037: add indexed recommendation task lookups
...
Keep recommendation task creation responsive without changing duplicate-intake semantics.
- Add project-scoped proposal claim and source-lineage persistence reads with supporting indexes.
- Use bounded lookups for recommendation replay and same-agent duplicate intake.
- Resolve terminal lanes from each candidate's workflow and cover the indexed query paths.
Files changed:
.changeset/fn-9037-recommendation-create-perf.md | 7 ++
docs/storage.md | 4 +
.../intake-duplicate-terminal-lanes.test.ts | 3 +-
.../postgres/proposal-claim-lookup.pg.test.ts | 106 +++++++++++++++++++++
.../__tests__/same-agent-duplicate-intake.test.ts | 14 ++-
.../0059_fn_9037_tasks_source_agent_index.sql | 3 +
packages/core/src/postgres/schema-applier.ts | 12 ++-
packages/core/src/postgres/schema/project.ts | 3 +
packages/core/src/store.ts | 8 +-
.../core/src/task-store/async/async-persistence.ts | 40 ++++++++
packages/core/src/task-store/reads.ts | 18 +++-
packages/core/src/task-store/task-creation.ts | 10 +-
.../__tests__/task-recommendation-routes.test.ts | 38 +++++++-
.../src/routes/register-task-workflow-routes.ts | 20 ++--
14 files changed, 259 insertions(+), 27 deletions(-)
Fusion-Task-Id: FN-9037
Fusion-Task-Lineage: ea44d65c-98cc-4a5b-a116-b3c28f14c292
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 17:13:56 -07:00
gsxdsm
cb4ab3b6da
FN-9028: guard automatic mission rollup status writers
...
Protect automatic mission and milestone status rollups with a durable writer-coverage ratchet.
- Add source-level coverage for every computed mission and milestone status writer.
- Verify core persistence and engine reconciliation preserve blocked and archived intent.
- Document shared rollup-ownership guard requirements.
Files changed:
docs/missions.md | 2 +-
.../mission-rollup-status-writer-ratchet.test.ts | 170 +++++++++++++++++++++
.../mission-status-recompute-guard.test.ts | 11 ++
.../__tests__/postgres/mission-store.pg.test.ts | 43 ++++--
packages/core/src/missions/mission-types.ts | 4 +-
.../mission-autopilot-rollup-guard.test.ts | 115 ++++++++++++++
6 files changed, 331 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-9028
Fusion-Task-Lineage: 89b72b57-fc73-4268-a639-5edac05ff8f8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 16:01:57 -07:00
gsxdsm
74a0bdb25c
FN-9032: harden knowledge-graph artifact validation
...
Reject malformed or contradictory graph cache artifacts and rebuild them as a complete set.
- Require exact persisted record shapes and valid import references before cache reuse
- Detect invalid import ownership and duplicate extractor identities during consistency checks
- Cover cache recovery cases and document the all-or-nothing artifact policy
- Add a patch changeset for the published CLI package
Files changed:
.../fn-9032-knowledge-graph-artifact-validation.md | 7 +++++
docs/knowledge-graph.md | 2 +-
.../graph-artifact-not-gitignored.test.ts | 13 ++++++---
.../__tests__/graph-builder-incremental.test.ts | 29 +++++++++++++++++++-
.../__tests__/graph-serialization.test.ts | 31 +++++++++++++++++++++
.../__tests__/graph-store-recovery.test.ts | 14 ++++++++++
.../src/knowledge-graph/graph-serialization.ts | 32 ++++++++++++++--------
packages/core/src/knowledge-graph/graph-store.ts | 18 ++++++++++++
8 files changed, 129 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-9032
Fusion-Task-Lineage: d53934f6-2735-42ab-a41e-4421890277be
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 15:30:53 -07:00
gsxdsm
f7bf3f91d1
FN-9022: add task recommendations to Insights
...
Expose actionable task recommendations in the Insights view.
- Add recommendation list API, client hook, and Insights rendering states.
- Localize recommendation content and document the Insights workflow.
- Cover recommendation retrieval, routes, hooks, API, and view behavior.
Files changed:
.changeset/fn-9022-insights-recommendations.md | 7 ++
docs/architecture.md | 1 +
docs/dashboard-guide.md | 3 +-
.../__tests__/task-recommendations-list.test.ts | 136 +++++++++++++++++++++
packages/core/src/index.ts | 2 +-
packages/core/src/store.ts | 5 +-
packages/core/src/task-store/reads.ts | 48 +++++++-
packages/core/src/types.ts | 4 +
packages/core/src/types/task/task-core.ts | 19 +++
packages/dashboard/app/__tests__/api-tasks.test.ts | 24 ++++
packages/dashboard/app/api/legacy.ts | 3 +
packages/dashboard/app/api/tasks/tasks.ts | 22 ++++
packages/dashboard/app/components/InsightsView.css | 27 ++++
packages/dashboard/app/components/InsightsView.tsx | 47 +++++--
.../app/components/__tests__/InsightsView.test.tsx | 117 ++++++++++++++++++
.../hooks/__tests__/useTaskRecommendations.test.ts | 130 ++++++++++++++++++++
.../dashboard/app/hooks/useTaskRecommendations.ts | 116 ++++++++++++++++++
.../__tests__/task-recommendation-routes.test.ts | 26 ++++
.../src/routes/register-task-workflow-routes.ts | 33 +++++
packages/i18n/locales/en/app.json | 11 +-
packages/i18n/locales/es/app.json | 11 +-
packages/i18n/locales/fr/app.json | 11 +-
packages/i18n/locales/ko/app.json | 11 +-
packages/i18n/locales/pt-BR/app.json | 11 +-
packages/i18n/locales/zh-CN/app.json | 11 +-
packages/i18n/locales/zh-TW/app.json | 11 +-
packages/i18n/src/resources.d.ts | 9 ++
27 files changed, 835 insertions(+), 21 deletions(-)
Fusion-Task-Id: FN-9022
Fusion-Task-Lineage: b83f1074-37af-4f87-9ec0-2bd9bb9bf64d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-12 22:18:18 -07:00
gsxdsm
19dffe36f6
fix(engine): make the planning->plan-review handoff atomic so planned cards stop stranding in Todo
...
Triage announced specification completion before its finally block marked the
plan work item terminal, so the Plan Review seeder saw its own still-running
predecessor as an "active continuation", bailed, and the discarded result
silently stranded the card until FN-8592 self-healing re-seeded it ~10 minutes
later (529 occurrences in 18 days).
- seedStrandedPlanReviewContinuation gains retirePredecessorId: idle check
excludes the named predecessor, then retires it and installs the successor in
ONE transaction under the task lock; a bailed seed mutates nothing.
- triage threads planningWorkItemId through PlanningHandoffReport; the runtime
reaction passes it as retirePredecessorId.
- reactToSpecificationComplete consumes the seed result: typed quiet parks
(incl. new "no-pre-release-plan-review"), bounded retries with a fresh
task/IR snapshot per attempt (mid-retry pause/needs-replan honored), loud
warning naming self-healing on exhaustion.
- Tests: PG both-orderings/no-mutation-on-bail/cross-task cases, direct engine
seeder handoff cases, reaction retry/park/pause/replan cases.
- docs/solutions: new planning-handoff-race writeup; graph-entry-contract doc
reclassifies the FN-8592 sweep as backstop-only.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-12 21:24:53 -07:00
gsxdsm
ea53cbd4ff
FN-9021: send mailbox notices for task recommendations
...
Completed tasks now optionally send captured recommendations to the operator mailbox.
- Add idempotent, non-blocking mailbox notices after accepted task completion.
- Expose a project setting and localized dashboard control for recommendation notices.
- Cover notification dispatch, settings parity, and completion-path behavior with tests.
Files changed:
.../fn-9021-recommendation-mailbox-notice.md | 7 ++
docs/dashboard-guide.md | 2 +-
docs/settings-reference.md | 1 +
.../core/src/__tests__/settings-parity.test.ts | 2 +
.../__tests__/task-recommendation-notice.test.ts | 77 +++++++++++++
packages/core/src/config/settings-schema.ts | 2 +
packages/core/src/index.ts | 9 ++
packages/core/src/task-recommendation-notice.ts | 122 +++++++++++++++++++++
packages/core/src/types/settings/settings-scope.ts | 6 +
.../__tests__/SettingsModal.general.test.tsx | 10 ++
.../app/components/settings/section-keys.ts | 1 +
.../settings/sections/GeneralSection.tsx | 15 +++
.../settings-default-descriptions.test.tsx | 1 +
.../executor-task-recommendations.test.ts | 39 ++++++-
.../executor/completion-recommendation-notice.ts | 52 +++++++++
.../engine/src/executor/create-task-done-tool.ts | 12 ++
packages/engine/src/executor/plan-review-no-op.ts | 12 ++
packages/engine/src/runtimes/in-process-runtime.ts | 14 +++
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 +-
packages/i18n/src/resources.d.ts | 40 ++++++-
26 files changed, 442 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-9021
Fusion-Task-Lineage: f6c5c93c-a3b6-470b-9efb-79e6b4003985
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-12 21:15:53 -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
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