Fusion Agent
c91e5ce42d
FN-106: prevent workspace finalization livelock
...
Repair workspace merge-boundary finalization so empty repository sets cannot loop indefinitely.
- Track workspace merge readiness and durable per-repository obligations.
- Gate landing and recovery on scope, blockers, leases, and checkout ownership.
- Preserve remediation state, add recovery paths, documentation, and regression coverage.
Files changed:
.../fn-106-workspace-finalization-livelock.md | 7 ++
docs/architecture.md | 6 ++
...e-empty-merge-boundary-finalization-livelock.md | 40 ++++++++++
docs/workflow-steps.md | 4 +
packages/cli/src/commands/__tests__/task.test.ts | 2 +
...workspace-worktrees-concurrent-merge.pg.test.ts | 23 ++++++
packages/core/src/store.ts | 9 ++-
packages/core/src/task-store/task-mutation-ops.ts | 49 +++++++++++-
packages/core/src/task-store/task-update.ts | 6 +-
packages/core/src/types/task/task-core.ts | 7 ++
.../engine/src/__tests__/executor-test-helpers.ts | 6 ++
.../executor-workspace-main-checkout-guard.test.ts | 8 +-
.../executor-workspace-session-cwd.test.ts | 37 +++++++++
.../engine/src/__tests__/project-engine.test.ts | 14 +++-
.../src/__tests__/reviewer-workspace.test.ts | 72 ++++++++++++++++-
.../__tests__/workspace-merge-readiness.test.ts | 46 +++++++++++
.../workspace-merger-idempotency.slow.test.ts | 15 ++--
.../src/__tests__/workspace-merger-lease.test.ts | 4 +-
.../workspace-root-worktree-routing.test.ts | 47 +++++++++++
.../create-authoritative-workflow-seams.ts | 2 +
.../engine/src/executor/create-task-done-tool.ts | 15 ++++
.../executor/ensure-graph-custom-node-worktree.ts | 8 ++
.../request-pre-merge-optional-step-fix.ts | 49 +++++++++++-
.../engine/src/executor/run-graph-custom-node.ts | 24 ++++--
packages/engine/src/executor/run-implementation.ts | 9 +++
packages/engine/src/executor/send-task-back-for-fix.ts | 4 +-
.../src/executor/workspace-main-checkout-guard.ts | 26 +++++-
.../src/executor/workspace-review-remediation.ts | 54 +++++++++++++
.../src/executor/worktree-verify-invariants.ts | 2 +-
packages/engine/src/merge/merger-ai.ts | 93 +++++++++++++++++-----
.../engine/src/merge/workspace-merge-readiness.ts | 64 +++++++++++++++
packages/engine/src/project-engine.ts | 37 +++++++--
packages/engine/src/self-healing.ts | 54 ++++++++++---
.../engine/src/worktree/worktree-acquisition.ts | 20 ++++-
34 files changed, 787 insertions(+), 76 deletions(-)
Fusion-Task-Id: FN-106
Fusion-Task-Lineage: 70b5c13d-9e17-419d-90ac-7258697657ef
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-08-21 14:41:37 +00:00
Fusion Agent
e80fef3fe0
FN-040: fix chat source-link integrity and contrast
...
Harden chat source links across streaming providers while improving new-tab behavior and visual contrast.
- Preserve source-link metadata through streamed delta and event bridges.
- Open chat source links safely in new tabs across desktop and mobile surfaces.
- Improve source-link contrast and add regression coverage plus user-facing guidance.
Files changed:
.changeset/fn-040-chat-source-links.md | 7 +++
docs/dashboard-guide.md | 3 +
.../ui-bugs/chat-streamed-source-link-integrity.md | 53 ++++++++++++++++
packages/dashboard/app/components/ChatView.css | 24 ++++++++
.../app/components/StandardChatSurface.tsx | 8 ++-
.../components/__tests__/ChatView.core.test.tsx | 38 ++++++++++++
.../components/__tests__/ChatView.mobile.test.tsx | 70 ++++++++++++++++++++--
.../__tests__/ChatView.sessions-rooms.test.tsx | 49 +++++++++++++++
...andardChatSurface.nativeStructureEmbed.test.tsx | 52 +++++++++++++++-
.../__tests__/TaskPlannerChatTab.test.tsx | 48 +++++++++++++++
.../engine/src/__tests__/streaming-delta.test.ts | 36 +++++++++++
packages/engine/src/execution/streaming-delta.ts | 17 +++++-
.../src/__tests__/event-bridge.test.ts | 30 +++++++++-
packages/pi-claude-cli/src/event-bridge.ts | 14 +++--
.../src/__tests__/event-bridge.test.ts | 42 +++++++++++++
.../fusion-plugin-acp-runtime/src/event-bridge.ts | 8 ++-
.../src/__tests__/provider.test.ts | 34 +++++++++++
.../src/acp/event-bridge.ts | 8 ++-
.../src/__tests__/event-bridge.test.ts | 28 +++++++++
.../src/event-bridge.ts | 14 +++--
.../src/__tests__/provider.test.ts | 34 +++++++++++
.../src/acp/event-bridge.ts | 8 ++-
.../src/__tests__/runtime-adapter.test.ts | 34 +++++++++++
.../src/acp/event-bridge.ts | 8 ++-
24 files changed, 642 insertions(+), 25 deletions(-)
Fusion-Task-Id: FN-040
Fusion-Task-Lineage: 364ad678-df3e-4fb2-b19c-29eb44d8a429
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-08-20 03:57:23 +00:00
Fusion Agent
561e0f4cd8
FN-015: remove legacy lane-columns CSS
...
Remove the retired lane compatibility selector while preserving live Board scrolling and overscroll behavior.
- Remove legacy .lane-columns styling from Lane.css.
- Update mobile Board regression fixtures and solution documentation for current workflow-column paths.
- Add a patch changeset documenting the internal cleanup.
Files changed:
.changeset/fn-015-removal.md | 7 ++++
...-board-ios-horizontal-overscroll-containment.md | 32 +++++++++--------
.../__tests__/board-mobile-column-swipe.test.ts | 11 +++---
.../__tests__/board-mobile-overscroll-containment.test.ts | 28 ++++++++-------
packages/dashboard/app/components/Lane.css | 41 +++-------------------
5 files changed, 51 insertions(+), 68 deletions(-)
Fusion-Task-Id: FN-015
Fusion-Task-Lineage: 78128638-a319-4589-8cdd-a6497efe226f
Co-authored-by: Fusion <noreply@runfusion.ai >
2026-08-20 03:55:38 +00:00
gsxdsm
179f08c2d4
FN-9158: recover Windows antivirus-blocked PostgreSQL payloads
...
Recover quarantined or truncated embedded PostgreSQL runtime files and explain Windows Defender remediation.
- Validate materialized payload inventory with v3 markers and repair mismatches atomically.
- Surface actionable error 4551 diagnostics through startup failures.
- Add regression coverage, operator documentation, and a patch changeset.
Files changed:
...-9158-windows-av-blocked-embedded-pg-payload.md | 7 +
...ndows-antivirus-blocks-embedded-postgres-dll.md | 27 +++
docs/storage.md | 4 +
.../__tests__/postgres/embedded-lifecycle.test.ts | 139 +++++++++++++-
.../src/__tests__/postgres/startup-factory.test.ts | 19 ++
packages/core/src/postgres/embedded-lifecycle.ts | 208 ++++++++++++++++++++-
packages/core/src/postgres/startup-factory.ts | 30 +--
7 files changed, 414 insertions(+), 20 deletions(-)
Fusion-Task-Id: FN-9158
Fusion-Task-Lineage: ec2c97d7-0797-49c1-b875-6b147ff26917
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-19 18:50:27 -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
gsxdsm
161edaa694
FN-9148: add PostgreSQL loaded-failure census
...
Add retained-log census tooling and evidence for PostgreSQL loaded-lane timeout investigations.
- Parse complete Vitest logs and optional diagnostics without opening PostgreSQL or running tests.
- Classify failing files, lifecycle positions, failure shapes, backend headroom, waits, and watchdog data.
- Cover high-failure, healthy, malformed-diagnostics, and truncated-log cases with fixtures.
- Document the reproduced population, unsupported remedies, and successor measurement requirements.
Files changed:
...res-loaded-lane-unrelated-failure-population.md | 80 ++++++++++
docs/testing.md | 8 +
.../fixtures/pg-loaded-failure-census/high-run.txt | 77 +++++++++
.../fixtures/pg-loaded-failure-census/high.jsonl | 4 +
.../fixtures/pg-loaded-failure-census/low-run.txt | 4 +
.../pg-loaded-failure-census/truncated-run.txt | 2 +
.../__tests__/pg-loaded-failure-census.test.mjs | 65 ++++++++
scripts/pg-loaded-failure-census.mjs | 172 +++++++++++++++++++++
8 files changed, 412 insertions(+)
Fusion-Task-Id: FN-9148
Fusion-Task-Lineage: c632a9d0-b823-4416-ab46-0d834e850007
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-19 06:24:01 -07:00
gsxdsm
687990c0a6
FN-9146: document PostgreSQL flake campaign evidence
...
Document the bounded investigation results for active core PostgreSQL suite-only flakes.
- Record per-lane outcomes and sampled cluster-capacity evidence for entries 1, 2, and 7.
- Clarify reproduced, unreproduced, and unattributed statuses without changing quarantine policy.
- Ratchet campaign completeness, ownership, and documentation-link coverage in the register tests.
Files changed:
.../suite-only-flakes-observed-register.md | 71 +++++++++++++++++-
docs/testing.md | 4 +
scripts/__tests__/observed-flake-register.test.mjs | 85 ++++++++++++++++++++--
3 files changed, 148 insertions(+), 12 deletions(-)
Fusion-Task-Id: FN-9146
Fusion-Task-Lineage: d5de3fac-48d6-4ee7-ae09-173007d234e5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-19 05:38:54 -07:00
gsxdsm
ed2cbd08a1
FN-9145: clarify active flake register states
...
Reorganize the suite-only flake register around its current decision state.
- Separate active observations, gate evictions, and archived closed records while preserving entry anchors.
- Mark entry 1 as an escalated second sighting and restore FN-9126/FN-9131, FN-9128, and FN-9127 ownership.
- Add regression checks for active counts, exact states and owners, and testing-guide anchors.
Files changed:
.../suite-only-flakes-observed-register.md | 189 +++++++++++++--------
scripts/__tests__/observed-flake-register.test.mjs | 65 +++++++
2 files changed, 181 insertions(+), 73 deletions(-)
Fusion-Task-Id: FN-9145
Fusion-Task-Lineage: 39b3292a-db48-4be4-878c-7d2b026abae3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-19 04:16:48 -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
b18c9d7594
FN-9144: Preserve test velocity measurement verdicts
...
Make test-velocity investigation notes durable across report regeneration and concurrent history updates.
- add idempotent note targeting for historical measurement entries
- serialize history mutations with bounded stale-lock recovery
- render all annotated cycles and record the W33 gate variance verdict
- document the generated-report workflow and cover retention/concurrency behavior
Files changed:
.../merge-gate-w33-walltime-regression.md | 15 ++
docs/test-velocity-baseline.md | 12 ++
docs/testing.md | 2 +
scripts/__tests__/test-velocity-baseline.test.mjs | 153 +++++++++++++-
scripts/test-velocity-baseline.mjs | 221 +++++++++++++++------
scripts/test-velocity-history.json | 6 +
6 files changed, 349 insertions(+), 60 deletions(-)
Fusion-Task-Id: FN-9144
Fusion-Task-Lineage: e3869e40-2cbc-4e5b-844e-9091da96b652
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-18 08:08:24 -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
2b99b365de
FN-9141: rescue plugin-runner tests and enforce quarantine lockstep
...
Rescue the plugin-runner suite before deletion while making quarantine records mechanically consistent.
- preserve logger assertions across worker-reused mock cleanup with a stable hoisted logger
- remove the rescued suite from the quarantine ledger and Vitest exclusion
- enforce ledger-to-exclude lockstep and cover missing or dangling quarantine entries
- document the reproduction evidence, rescue disposition, and strict checker behavior
Files changed:
.../suite-only-flakes-observed-register.md | 14 +-
docs/testing.md | 17 +-
.../engine/src/__tests__/plugin-runner.test.ts | 37 ++--
packages/engine/vitest.config.ts | 14 +-
scripts/__tests__/check-quarantine-ledger.test.mjs | 217 +++++++++---------
scripts/__tests__/ci-test-shard-timings.test.mjs | 5 +-
scripts/check-quarantine-ledger.mjs | 245 +++++++++++++--------
scripts/lib/test-quarantine.json | 10 +-
8 files changed, 314 insertions(+), 245 deletions(-)
Fusion-Task-Id: FN-9141
Fusion-Task-Lineage: 5b0549bf-3cc6-495e-bf99-a30a2dffb029
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-17 05:25:17 -07:00
gsxdsm
6d7b4a3ac3
FN-9140: make Vitest timeout ownership surveys deterministic
...
Replace ambiguous setup-boundary observations with calibrated, repeatable timeout ownership evidence.
- record fixture lifecycle events in an append-only JSONL ledger with process-safe ordering
- classify four timeout-budget arms across repeated isolate-mode cells and fail closed on incomplete evidence
- expand connectionless unit coverage and document the terminal insufficient-data survey result
Files changed:
.../test-failures/postgres-ddl-admission-bound.md | 2 +
.../vitest-setup-boundary-timeout-ownership.md | 37 +++
docs/testing.md | 2 +-
scripts/__tests__/pg-setup-boundary-probe.test.mjs | 195 ++++++++----
scripts/pg-setup-boundary-probe.mjs | 341 ++++++++++++---------
5 files changed, 371 insertions(+), 206 deletions(-)
Fusion-Task-Id: FN-9140
Fusion-Task-Lineage: 9c6970b8-af80-400a-b2b2-49718d4fe87f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-16 22:47:53 -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
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
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
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
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
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
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
920bf8b022
FN-9105: document boot-smoke anomaly remeasurement
...
Confirm the W33 spike as cold-start variance and preserve a repeatable diagnosis protocol.
- Record five sequential phase-timed samples and the 20.5-second median threshold.
- Link the controlled remeasurement protocol from the testing guide.
- Explain the timing snapshot handoff and why incomplete CI artifacts were not published.
- Preserve the no-appeasement requirement beside boot-smoke phase timing.
Files changed:
.../boot-smoke-w33-walltime-anomaly.md | 100 +++++++++++++++++++++
docs/testing.md | 2 +-
scripts/boot-smoke.mjs | 7 ++
3 files changed, 108 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-9105
Fusion-Task-Lineage: 6956b037-db0f-4560-bb04-136080a975b5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 16:59:37 -07:00
gsxdsm
6a2de64381
fix: normalize Anthropic storage ids at the ModelRuntime.login choke point
...
Third incident of the same class (#1857/FN-7391, FN-9101, GitHub #3462 ):
Fusion's Anthropic auth-card/storage ids (anthropic-subscription,
anthropic-api-key) leaking into pi, which only registers the execution
provider 'anthropic'. FusionAuthStorage.login is the single seam that hands
a provider id to ModelRuntime.login; it now normalizes via
toExecutionModelProviderId so a future caller bug degrades to a correct
upstream anthropic login instead of a hard 'Unknown provider' failure, with
a regression test pinning the seam. The invariant, incident history, and
guard inventory are captured in
docs/solutions/integration-issues/anthropic-storage-ids-are-never-pi-provider-ids.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-15 14:52:38 -07:00
gsxdsm
284feeaf11
FN-9092: prevent model menus from dismissing host dialogs
...
Keep portaled model-menu interaction from propagating to host dialog dismissal.
- Mark model-menu portal surfaces and stop their pointer events from reaching dialog backdrops.
- Apply the dismissal guard across agent, chat, floating-window, and model-selection dialogs.
- Close enabled overlays on valid touch taps while suppressing duplicate compatibility mouse closes.
- Add desktop and mobile regression coverage for portal-host dismissal behavior.
Files changed:
.../fn-9092-model-filter-dialog-dismissal.md | 7 +
.../ui-bugs/portaled-model-menu-host-dismissal.md | 19 +++
packages/dashboard/app/components/AgentsView.tsx | 6 +
.../app/components/ChatThinkingLevelControl.tsx | 17 ++-
packages/dashboard/app/components/ChatView.tsx | 38 +++--
.../app/components/CustomModelDropdown.tsx | 13 +-
.../dashboard/app/components/FloatingWindow.tsx | 17 +--
.../app/components/ModelSelectionModal.tsx | 17 +--
.../dashboard/app/components/NewAgentDialog.tsx | 12 +-
.../dashboard/app/components/QuickEntryBox.tsx | 5 +-
.../ChatThinkingLevelControl.portal.test.tsx | 9 ++
.../__tests__/CustomModelDropdown.test.tsx | 24 ++-
.../__tests__/ModelSelectionModal.test.tsx | 3 +-
.../NewAgentDialog.portal-dismissal.test.tsx | 77 ++++++++++
.../components/__tests__/NewAgentDialog.test.tsx | 11 ++
.../model-menu-filter-host-dismissal.test.tsx | 163 +++++++++++++++++++++
.../app/hooks/__tests__/useOverlayDismiss.test.tsx | 7 +-
packages/dashboard/app/hooks/useOverlayDismiss.ts | 26 +++-
.../app/utils/__tests__/portalSurfaces.test.ts | 31 ++++
packages/dashboard/app/utils/portalSurfaces.ts | 31 ++++
20 files changed, 469 insertions(+), 64 deletions(-)
Fusion-Task-Id: FN-9092
Fusion-Task-Lineage: a0d0b84d-2efe-4a67-9485-77c08f7cc57e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 06:42:39 -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
0e4c0c713e
FN-8995: reconcile durable-write inventory drift
...
Keep the durable-write inventory synchronized while preserving reviewed lifecycle verdicts.
- Add fail-closed manifest regeneration and regression coverage.
- Reconcile current call-site structure while retaining equivalent verdicts through module moves.
- Clarify durable wedge-notification writer classification and regeneration guidance.
Files changed:
.../merge-orphan-body-durable-write-fences.md | 18 +-
.../__tests__/_merge-durable-write-callsites.ts | 84 +-
.../merge-orphan-durable-write-inventory.json | 15414 +++++++++----------
...ge-orphan-durable-write-inventory-drift.test.ts | 88 +-
4 files changed, 7836 insertions(+), 7768 deletions(-)
Fusion-Task-Id: FN-8995
Fusion-Task-Lineage: df3d27ca-6614-418d-b09f-e1dd9f49f910
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 15:29:44 -07:00
gsxdsm
5134a55b77
FN-8958: fence orphaned merge-body writes
...
Prevent cancelled merge generations from writing stale task state.
- Add a signal-aware merge write fence with orphan audit reporting.
- Fence merge finalization, post-push metadata, and recovery-branch task logs.
- Cover durable write callsites and cancellation behavior with tests and guidance.
Files changed:
.changeset/fn-8958-orphan-merge-write-fence.md | 7 +
AGENTS.md | 1 +
.../reliability/orphan-merge-body-write-fence.md | 68 ++
.../__tests__/_merge-durable-write-callsites.ts | 4 +
.../merge-orphan-durable-write-inventory.json | 982 +++++++++++----------
.../merge-orphan-body-durable-writes.test.ts | 38 +-
.../engine/src/__tests__/merge-write-fence.test.ts | 39 +
.../engine/src/merge/auto-merge-finalization.ts | 9 +
packages/engine/src/merge/merge-write-fence.ts | 92 ++
packages/engine/src/merge/merger-ai.ts | 173 ++--
10 files changed, 875 insertions(+), 538 deletions(-)
Fusion-Task-Id: FN-8958
Fusion-Task-Lineage: 5f398c44-4320-4f0c-be15-707184f66aa8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 15:20:19 -07:00
gsxdsm
a6ce7f89ef
FN-8987: expose release-gate verdicts for Promote visibility
...
Expose server-evaluated release-gate state so Promote controls accurately reflect approval readiness.
- Attach transient release-gate verdicts to task API responses.
- Preserve only fresh REST verdicts across task snapshots and render them in task cards.
- Align hold-release gating and document the Promote-state contract.
Files changed:
.changeset/fn-8987-release-gate-verdict.md | 7 +
docs/dashboard-guide.md | 4 +
docs/solutions/workflow-learnings/project-union-versus-per-task-lanes.md | 1 +
docs/workflow-steps.md | 4 +
packages/core/src/index.gate.ts | 2 +-
packages/core/src/index.ts | 2 +-
packages/core/src/types.ts | 2 +
packages/core/src/types/task/task-core.ts | 20 +++
packages/dashboard/app/components/TaskCard.tsx | 3 +-
packages/dashboard/app/components/__tests__/TaskCard.test.tsx | 31 ++++
packages/dashboard/app/hooks/__tests__/useTasks.test.ts | 26 ++++
packages/dashboard/app/hooks/useTasks.ts | 135 +++++++++++++++--
packages/dashboard/app/utils/__tests__/releaseGate.contract.test.ts | 29 ++++
packages/dashboard/app/utils/__tests__/releaseGate.test.ts | 49 ++++++
packages/dashboard/app/utils/releaseGate.ts | 26 ++++
packages/dashboard/app/utils/reviewBudgetApproval.ts | 9 ++
packages/dashboard/src/routes/register-task-workflow-routes.ts | 20 ++-
packages/engine/src/__tests__/release-gate-verdict.test.ts | 40 +++++
packages/engine/src/execution/hold-release.ts | 166 +++++++++------------
packages/engine/src/index.ts | 3 +
20 files changed, 469 insertions(+), 110 deletions(-)
Fusion-Task-Id: FN-8987
Fusion-Task-Lineage: 6f1742bc-2b2b-4a32-9be5-92160335d90d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 14:22:14 -07:00
gsxdsm
7ddcf7e2a6
FN-8979: remove legacy mission resume blockers
...
Retire the deprecated v0 mission-resume blocker payload in favor of canonical descriptors.
- Remove legacy blocker types, conversions, exports, and HTTP payload mirrors.
- Deduplicate canonical blocker descriptors and update clients, tests, and documentation.
- Add a major changeset for the breaking API removal.
Files changed:
.changeset/fn-8979-removal.md | 7 +++++
docs/missions.md | 4 +--
.../suite-only-flakes-observed-register.md | 14 +++++++++
.../src/__tests__/mission-blocked-clear.test.ts | 23 ++++++++++++++-
.../core/src/__tests__/mission-blockers.test.ts | 26 +++++++++++------
.../__tests__/postgres/mission-store.pg.test.ts | 5 +---
.../core/src/async-stores/async-mission-store.ts | 7 +----
packages/core/src/index.gate.ts | 3 +-
packages/core/src/index.ts | 3 +-
packages/core/src/missions/mission-blockers.ts | 34 +++++++++++++---------
packages/core/src/missions/mission-types.ts | 9 ++----
packages/core/src/types.ts | 2 +-
packages/dashboard/app/api/missions/missions.ts | 25 +++++-----------
.../MissionManager.blocked-repair.test.tsx | 17 +++++++----
.../MissionManager.resume-conflict.test.tsx | 9 ++++--
.../src/__tests__/mission-resume-conflict.test.ts | 11 ++++---
packages/dashboard/src/mission-routes.ts | 10 +++----
17 files changed, 127 insertions(+), 82 deletions(-)
Fusion-Task-Id: FN-8979
Fusion-Task-Lineage: 2a0dd0b6-43ca-44ad-b992-79f4ef8eda67
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 01:30:04 -07:00
gsxdsm
d749a11a5b
FN-8923: document orphan merge durable-write fences
...
Record the bounded cancellation frontier for orphaned AI merge bodies.
- Add AST-derived durable-writer inventory and drift guard for the pinned merge closure.
- Characterize orphan and successor merge-lane writes with production-path fixtures.
- Document unresolved follow-ups and link the fence from the architecture guide.
Files changed:
docs/architecture.md | 2 +-
.../merge-orphan-body-durable-write-fences.md | 92 +
.../__tests__/_merge-durable-write-callsites.ts | 938 ++
.../merge-orphan-durable-write-inventory.json | 9965 ++++++++++++++++++++
.../merge-orphan-body-durable-writes.test.ts | 348 +
...ge-orphan-durable-write-inventory-drift.test.ts | 56 +
packages/engine/src/merge/merger-ai.ts | 6 +
packages/engine/src/project-engine.ts | 6 +
8 files changed, 11412 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8923
Fusion-Task-Lineage: 5b2d278c-1626-439a-affd-077f2de2aef1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 17:55:46 -07:00
gsxdsm
00e369711c
FN-8949: add dead mock specifier guard
...
Prevent silent dead engine test mocks and restore renamed-lane coverage.
- Add a ratcheting test that detects unresolved relative vi.mock specifiers.
- Update self-healing test seams for moved modules and queue transitions.
- Document mock-specifier and store-fake failure patterns.
Files changed:
.../dead-vi-mock-specifiers-fail-silently.md | 57 ++++++
...e-defects-that-masquerade-as-production-bugs.md | 12 ++
docs/testing.md | 5 +
.../self-healing-query-filter-blindness.test.ts | 42 ++++-
.../__tests__/vi-mock-specifiers-resolve.test.ts | 199 +++++++++++++++++++++
5 files changed, 306 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-8949
Fusion-Task-Lineage: a1079d1c-a2a9-4ac2-8245-1db434468405
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 04:54:55 -07:00
gsxdsm
6cf95433bf
FN-8928: evict flaky workflow IR PG gate canary
...
Remove the flaky sync-workflow-IR PostgreSQL canary from the blocking merge gate while preserving non-blocking coverage.
- Remove the default workflow-IR PostgreSQL test from the gate canary script.
- Update gate-policy coverage expectations and flake-eviction documentation.
- Record the observed setup-hook timeout and retained regression coverage.
Files changed:
.../suite-only-flakes-observed-register.md | 25 +++++++++++++--
docs/testing.md | 6 ++--
packages/core/package.json | 2 +-
.../sync-workflow-ir-is-always-default.pg.test.ts | 6 ++++
.../__tests__/engine-vitest-gate-policy.test.mjs | 37 +++++++++++-----------
5 files changed, 51 insertions(+), 25 deletions(-)
Fusion-Task-Id: FN-8928
Fusion-Task-Lineage: b725ba1a-fb33-4d49-89b4-277a64246cdd
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 02:32:24 -07:00
gsxdsm
e7a873c505
FN-8936: stabilize Planning Mode handoff tests
...
Stabilize live Proceed-action handoffs and re-admit the Planning Mode flow suite.
- Settle hydration and re-query the Proceed action before direct-create test clicks.
- Remove the Planning Mode test quarantine and record its rescue in the testing ledger.
Files changed:
.../suite-only-flakes-observed-register.md | 4 ++++
docs/testing.md | 3 +++
.../PlanningModeModal.planning-flow.test.tsx | 20 ++++++++++++++++----
packages/dashboard/vitest.config.ts | 5 -----
scripts/lib/test-quarantine.json | 5 -----
5 files changed, 23 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-8936
Fusion-Task-Lineage: ed869b67-9394-458b-879c-54da0d7d327e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 23:08:11 -07:00
gsxdsm
b9c5df04af
FN-8791: prevent NUL-containing chat checkpoints from crashing
...
Prevent malformed tool output from breaking chat checkpoint persistence.
- Sanitize NUL characters at chat JSONB persistence boundaries without mutating clean values.
- Observe rejected best-effort checkpoint writes so streaming sessions do not emit unhandled rejections.
- Add PostgreSQL, dashboard, and sanitizer regression coverage with operator-facing release notes.
Files changed:
.changeset/fn-8791-chat-nul-checkpoint.md | 7 ++
.../reliability/chat-jsonb-nul-sanitization.md | 44 +++++++++++
packages/core/src/__tests__/nul-sanitize.test.ts | 21 ++++-
.../chat-store-content-search-edit.pg.test.ts | 91 +++++++++++++++++++++-
packages/core/src/async-stores/async-chat-store.ts | 61 ++++++++++-----
packages/core/src/postgres/nul-sanitize.ts | 17 ++--
.../dashboard/src/__tests__/chat-manager.test.ts | 90 +++++++++++++++++++++
packages/dashboard/src/chat.ts | 21 ++++-
8 files changed, 322 insertions(+), 30 deletions(-)
Fusion-Task-Id: FN-8791
Fusion-Task-Lineage: 51e13634-04cc-4827-b72f-f33e40760940
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-04 19:15:20 -07:00
gsxdsm
78543233aa
fix(planning): allow repeated task creation
...
Advance the durable creation epoch for each explicit Planning Mode action while preserving idempotency for transport retries. Recover soft-deleted task links with a fresh claim key and cover live, deleted, and retry paths.
2026-08-03 12:15:19 -07:00
gsxdsm
b269bff4d4
FN-8757: add mobile planning review shortcut
...
Add a reversible Plan preview shortcut after five answered mobile interview questions.
- Count only populated question-and-response history entries toward the threshold.
- Preserve unsent answers while switching between mobile question and plan tabs.
- Add coverage, operator documentation, and a patch changeset.
Files changed:
.changeset/fn-8757-mobile-planning-review.md | 7 ++
docs/dashboard-guide.md | 3 +
.../suite-only-flakes-observed-register.md | 14 +++
.../dashboard/app/components/PlanningModeModal.tsx | 32 +++++-
.../PlanningModeModal.planning-flow.test.tsx | 113 +++++++++++++++++++++
5 files changed, 167 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8757
Fusion-Task-Lineage: ac92a785-aafd-4c92-a1af-b089c21dbb99
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-03 02:40:07 -07:00
gsxdsm
79d2a73a10
FN-8690: document Grok CLI provenance blocker
...
Document the unavailable Grok CLI source provenance and preserve the existing usage gate.
- Record provenance investigation results and the BLOCKED-NO-SOURCE hand-off
- Validate FN-8690 evidence sections and canonical verdicts
- Explain why the API-supplied percentage gate remains unchanged
Files changed:
docs/solutions/integration-issues/grok-cli-usage-data-source.md | 64 ++++++++++++++++++++++
packages/dashboard/src/__tests__/grok-usage-finding-doc.test.ts | 21 +++++++
packages/dashboard/src/usage.ts | 3 +
3 files changed, 88 insertions(+)
Fusion-Task-Id: FN-8690
Fusion-Task-Lineage: 4521063d-2a9a-4710-9609-35b7582a2f2d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 08:52:08 -07:00
gsxdsm
006cc40454
FN-8685: add durable cross-process task deletion consumers
...
Deliver durable, replay-safe cross-process task deletion observation.
- Add PostgreSQL lifecycle consumer cursors, leases, acknowledgements, retention, and recovery.
- Start named consumers in dashboard, serve, and engine runtime paths.
- Preserve delete integration metadata while suppressing replayed GitHub and GitLab side effects.
- Cover outbox identity, observed delivery, fencing, and reconciliation behavior.
Files changed:
...fn-8685-cross-process-task-deleted-observers.md | 7 +
.../fn-8685-task-deleted-outbox-consumers.md | 7 +
docs/architecture.md | 8 +-
...tgres-cross-process-task-deleted-observation.md | 8 +-
docs/storage.md | 10 +-
packages/cli/src/commands/dashboard.ts | 9 +-
packages/cli/src/commands/serve.ts | 9 +-
packages/cli/src/project-context.ts | 9 +-
.../task-deleted-outbox-consumer.pg.test.ts | 157 ++++++++
...-deleted-observed-dispatch-side-effects.test.ts | 36 ++
.../task-lifecycle-consumer-identity.test.ts | 22 ++
packages/core/src/index.ts | 11 +
.../0041_fn_8685_task_lifecycle_consumers.sql | 88 +++++
packages/core/src/postgres/schema-applier.ts | 16 +-
packages/core/src/postgres/schema/project.ts | 45 +++
packages/core/src/postgres/startup-factory.ts | 4 +
packages/core/src/store.ts | 54 ++-
.../__tests__/lifecycle-outbox-writer.test.ts | 4 +-
.../core/src/task-store/archive-lifecycle-2.ts | 1 +
packages/core/src/task-store/lifecycle-ops.ts | 13 +-
packages/core/src/task-store/lifecycle-outbox.ts | 2 +
packages/core/src/task-store/project-store-ops.ts | 4 +-
.../src/task-store/task-deleted-outbox-consumer.ts | 333 +++++++++++++++++
.../task-store/task-lifecycle-consumer-identity.ts | 32 ++
.../task-store/task-lifecycle-consumer-registry.ts | 396 +++++++++++++++++++++
.../task-store/task-lifecycle-event-retention.ts | 104 ++++++
packages/core/src/task-store/task-mutation-ops.ts | 1 +
packages/dashboard/src/github-tracking-state.ts | 12 +-
packages/dashboard/src/gitlab-delete-close.ts | 3 +
packages/dashboard/src/gitlab-split-close.ts | 7 +-
packages/dashboard/src/project-store-resolver.ts | 9 +-
packages/engine/src/project-manager.ts | 4 +-
packages/engine/src/project-runtime.ts | 2 +-
packages/engine/src/runtimes/in-process-runtime.ts | 17 +-
packages/engine/src/self-healing.ts | 27 ++
35 files changed, 1439 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-8685
Fusion-Task-Lineage: 63eca9ac-d2af-44b0-ba79-388a950148d3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-01 06:09:04 -07:00