Commit Graph

65 Commits

Author SHA1 Message Date
gsxdsm
5ab4a5961c FN-7119: rescue quarantined engine and CLI tests
Restore quarantined scheduler/reliability coverage while preserving override column-agent model selection.

- remove rescued engine and CLI tests from quarantine configs and the ledger
- add scheduler fake updateSettings coverage so heartbeat writes do not skew call-count assertions
- preserve override column-agent runtime models during initial execution and mid-flight task edits
- update the stale user-configured command guard registry and add a patch changeset

Files changed:
 .changeset/fn-7119-column-agent-model.md           |  7 +++
 docs/testing.md                                    |  2 +
 packages/cli/vitest.config.ts                      |  6 +-
 .../executor-column-agent-principal.test.ts        | 34 +++++++++-
 .../lease-recovery-central-claim.test.ts           |  5 ++
 .../owning-node-unavailable-interactions.test.ts   |  5 ++
 .../todo-inprogress-flapping.test.ts               |  5 ++
 .../src/__tests__/restart.integration.test.ts      |  8 +++
 .../__tests__/scheduler-ephemeral-toggle.test.ts   |  5 ++
 .../scheduler-node-unreachable-audit.test.ts       |  5 ++
 .../__tests__/scheduler-overlap-starvation.test.ts |  5 ++
 .../user-configured-command-no-execsync.test.ts    | 12 +---
 packages/engine/src/executor.ts                    | 18 ++++--
 packages/engine/vitest.config.ts                   | 26 +++-----
 scripts/lib/test-quarantine.json                   | 73 +---------------------
 15 files changed, 106 insertions(+), 110 deletions(-)

Fusion-Task-Id: FN-7119
Fusion-Task-Lineage: 7dc033c8-29d1-4c0e-bfc1-b0ff0d325f43
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-06-27 10:50:33 -07:00
gsxdsm
9020f5774e test: quarantine 11 failing CI full-suite tests
Quarantine test files consistently failing on the non-blocking full-suite
CI on main, per the AGENTS.md deletion-ratchet policy:

Engine-default (shard 1-2): ce-workflow-step-conventions,
executor-column-agent-principal, restart.integration,
scheduler-node-unreachable-audit, scheduler-overlap-starvation,
scheduler-ephemeral-toggle, user-configured-command-no-execsync

Engine-reliability (shard 1): lease-recovery-central-claim,
owning-node-unavailable-interactions, todo-inprogress-flapping

CLI (shard 3): extension.test.ts

Each has a matching entry in scripts/lib/test-quarantine.json with the
failing CI run link and quarantinedAt date. Tests will be deleted
after 14 days unless rescued with a root-cause fix.
2026-06-26 21:49:32 -07:00
gsxdsm
0afc66b6be FN-7068: rescue quarantined flaky tests
Rescue quarantined dashboard and engine tests before the deletion deadline.

- Realign the DevServerView mobile CSS test with split mobile rules and balanced at-rule extraction.
- Complete FN-5488 self-healing TaskStore fakes for overlap-scope paths.
- Remove rescued dashboard and engine tests from quarantine configs and the ledger.

Files changed:
 .../__tests__/DevServerView.mobile.test.tsx        | 74 ++++++++++++++++++----
 packages/dashboard/vitest.config.ts                |  8 +--
 ...in-review-merge-stall-deadlock-recovery.test.ts |  7 ++
 ...f-healing-fn-5488-fast-path-regressions.test.ts |  6 ++
 packages/engine/vitest.config.ts                   |  8 +--
 scripts/lib/test-quarantine.json                   | 18 +-----
 6 files changed, 79 insertions(+), 42 deletions(-)

Fusion-Task-Id: FN-7068

Fusion-Task-Lineage: b40a551f-8981-49a1-86a3-660f08cceb94
2026-06-26 13:32:35 -07:00
gsxdsm
5ce577842e test: quarantine 3 failing CI full-suite tests
Quarantine three test files consistently failing on the non-blocking
full-suite CI on main, per the AGENTS.md deletion-ratchet policy:

- engine self-healing-fn-5488-fast-path-regressions.test.ts (shard 1)
- engine in-review-merge-stall-deadlock-recovery.test.ts (shard 2)
- dashboard DevServerView.mobile.test.tsx (shard 4)

Each has a matching entry in scripts/lib/test-quarantine.json with
the failing CI run link and quarantinedAt date. Tests will be deleted
after 14 days unless rescued with a root-cause fix.
2026-06-25 17:02:29 -07:00
Phil Larson
b62b4b0e30 fix(FN-798): scope engine vitest fork pool
Fusion-Task-Id: FN-798
2026-06-25 11:21:46 -07:00
Phil Larson
fa8e9fa817 fix(FN-798): stabilize engine vitest gate pool
Fusion-Task-Id: FN-798

Co-authored-by: Fusion <noreply@runfusion.ai>
2026-06-25 10:56:43 -07:00
gsxdsm
acf0fff413 test(engine): cover workflow cutover recovery guards 2026-06-22 22:22:37 -07:00
gsxdsm
65c4dc5438 fix(engine): harden workflow runtime cutover 2026-06-22 21:45:05 -07:00
gsxdsm
bf3276295c fix(engine): complete workflow runtime cutover 2026-06-22 20:45:29 -07:00
copilot-swe-agent[bot]
78bd016743 fix(merge): resolve merge conflicts with origin/main
- Renumber behavioral verification schema migration from 118→124
  (main added migrations 118-123 for usage_events, knowledge_pages,
  deployments/incidents, token usage, source-issue closure, LOC stats)
- Combine backend + timeoutMsOverride params in verification-utils.ts
- Accept main's quarantine rescue for AI-merge suites (FN-6433)
- Update schema version assertions to 124 across test files
2026-06-19 23:47:20 +00:00
gsxdsm
48da420414 FN-6593: delete unresolved flaky test quarantines
Delete unresolved quarantined flaky tests under the deletion ratchet while preserving newer active quarantines.

- Remove four flaky test files that were not rescued before the ratchet follow-up.
- Drop their matching Vitest excludes and quarantine ledger entries.
- Preserve later sync, work-bridge, and core quarantine records from main.

Files changed:
 .../src/__tests__/github-tracking-hook.test.ts     | 592 ---------------------
 packages/dashboard/vitest.config.ts                |   8 +-
 .../src/__tests__/cli-agent-executor.test.ts       | 404 --------------
 packages/engine/vitest.config.ts                   |   5 +-
 .../src/__tests__/orchestrator-flow.test.ts        | 156 ------
 .../src/__tests__/skill-wiring.test.ts             | 101 ----
 .../vitest.config.ts                               |   6 +-
 scripts/lib/test-quarantine.json                   |  20 -
 8 files changed, 13 insertions(+), 1279 deletions(-)

Fusion-Task-Id: FN-6593

Fusion-Task-Lineage: 1165ba24-894a-4cc9-b678-50ae1625ba6b
2026-06-17 17:37:08 -07:00
gsxdsm
0db81349bb FN-6492: clamp task list text output
Bound fn_task_list responses now stay as plain text across board-tool surfaces.\n\n- Add a shared task-list text clamp with an explicit truncation marker.\n- Route CLI, dashboard planning-board, and engine triage task-list output through the shared formatter.\n- Cover bounded and column-filtered output with core and CLI regression tests.\n- Record the patch changeset and quarantine the observed engine CLI executor flake.\n\nFiles changed:\n .changeset/fn-6492-task-list-text-bound.md         |  5 ++\n packages/cli/src/__tests__/extension.test.ts       | 79 +++++++++++++++++++++-\n packages/cli/src/extension.ts                      |  7 +-\n .../core/src/__tests__/task-list-format.test.ts    | 75 ++++++++++++++++++++\n packages/core/src/index.ts                         |  1 +\n packages/core/src/task-list-format.ts              | 45 ++++++++++++\n packages/dashboard/src/planning-board-tools.ts     |  8 ++-\n packages/engine/src/triage.ts                      |  7 +-\n packages/engine/vitest.config.ts                   |  5 ++\n scripts/lib/test-quarantine.json                   |  5 ++\n 10 files changed, 232 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-6492

Fusion-Task-Lineage: 8b347efb-bc17-4bbe-937c-4f07c63df318
2026-06-16 19:31:33 -07:00
gsxdsm
93b2288d37 FN-6433: rescue non-CLI quarantined tests
Rescue and ratchet non-CLI quarantine state across engine, core, and dashboard suites.

- Empty the core, dashboard, and engine quarantine exclude arrays after proving rescued suites run under package load.
- Replace broad AI-merge active-session registry cleanup with path-scoped unregistering in engine tests.
- Delete the duplicate soft-delete blocker residue suite and clear the quarantine ledger.
- Document the non-CLI quarantine sweep pattern for future rescues.

Files changed:
 docs/testing.md                                    |   2 +
 packages/core/vitest.config.ts                     |  10 +-
 packages/dashboard/vitest.config.ts                |  12 +-
 .../merger-ai-cleanup-active-session.test.ts       |  20 +++-
 .../engine/src/__tests__/merger-ai-cleanup.test.ts |   5 +-
 .../soft-delete-blocker-residue.test.ts            | 128 ---------------------
 packages/engine/vitest.config.ts                   |  12 +-
 scripts/lib/test-quarantine.json                   |  65 +----------
 8 files changed, 40 insertions(+), 214 deletions(-)

Fusion-Task-Id: FN-6433

Fusion-Task-Lineage: 18c37475-e6e1-4358-9350-eca65cf53b68
2026-06-14 15:29:35 -07:00
gsxdsm
4797eac348 Merge origin/main into feat/validator-behavioral-verification
Resolve conflicts from concurrent main work:
- db.ts: renumber behavioral-verification migration 115 -> 118 after main's
  workflow-work-items (115), graphResumeRetryCount (116), autoMergeProvenance (117);
  SCHEMA_VERSION = 118. Update all schema-version test assertions to 118
  (keep SCHEMA_VERSION constant where used).
- vitest.config / test-quarantine.json: union both branches' quarantine sets
  (FN-6206 behavioral-verification files + main's merger-ai-cleanup/merger-ai/
  QuickEntryBox/soft-delete-blocker-residue/routes-settings entries).
- settings-sync routes: keep workflowId-qualified field keys + persisted global
  pull; drop duplicate workflowApplyResult from auto-merge interleave.
- Keep behavioral-verification changes in mission-execution-loop imports,
  useNodeSettingsSync, save-split, driver, and sync tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 15:48:54 -07:00
gsxdsm
1bb8cea9f9 Address PR review feedback (#1666)
- mission-execution-loop: preserve judge "blocked" verdict (don't downgrade to fail), clear validation timeout, backfill omitted linked assertions, notify autopilot "blocked" on exhausted retry budget
- mission-verification: pass selected sandbox backend explicitly to fix concurrent global-override race (fail-closed isolation); distinguish infra outcomes (timeout/abort) from real test failures so they stay inconclusive
- mission-store: validate run-to-feature ownership before fix-feature dedup/creation
- settings-sync routes: persist pulled global settings via store; qualify workflow field keys with workflowId
- useNodeSettingsSync: drop redundant ?? {} guard (backend always emits diff.workflowSettings)
- driver(agent-browser): map only Playwright TimeoutError to "absent" in observe(); other faults -> inconclusive
- vitest.config: remove redundant engine-core exclude (quarantine lives in engine-default)
- tests: tighten timeout verdict assertion to inconclusive; remove duplicate schema-version assertions
- save-split: document why customProviders is excluded (persisted via dedicated provider routes)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 15:25:27 -07:00
gsxdsm
97a49ac196 FN-6382: unquarantine stabilized flaky tests
Restore quarantined tests by fixing their flaky harness seams instead of extending the deletion ratchet.

- Mark active Vitest worker roots and skip live worker roots during prune cleanup.
- Make bubblewrap backend coverage deterministic with an injectable runner and restore it to the engine gate.
- Remove rescued core and bubblewrap tests from the quarantine ledger and Vitest excludes.

Files changed:
 .../core/src/__test-utils__/vitest-teardown.ts     | 10 +++++-
 packages/core/vitest.config.ts                     |  8 +----
 .../__tests__/sandbox/bubblewrap-backend.test.ts   | 29 +++++++++------
 packages/engine/src/sandbox/bubblewrap-backend.ts  |  9 +++--
 packages/engine/vitest.config.ts                   |  1 -
 scripts/__tests__/test-changed.test.mjs            | 23 ++++++++++++
 scripts/lib/test-quarantine.json                   | 34 ++----------------
 scripts/test-changed.mjs                           | 41 ++++++++++++++++++++++
 8 files changed, 102 insertions(+), 53 deletions(-)

Fusion-Task-Id: FN-6382

Fusion-Task-Lineage: 018dc7ac-1ef1-495e-a5fd-96ea44fcd43b
2026-06-13 11:39:37 -07:00
gsxdsm
e17e8b34f8 FN-6319: quarantine flaky engine tests
Quarantine unrelated engine test flakes so the gate avoids known unstable fixtures.

- Add the soft-delete blocker residue reliability test to the quarantine ledger and reliability interaction exclusions.
- Add the bubblewrap sandbox backend test to the quarantine ledger and engine-core exclusions.

Files changed:
 packages/engine/vitest.config.ts |  6 +++++-
 scripts/lib/test-quarantine.json | 10 ++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6319
Fusion-Task-Lineage: 9a47ae20-76b8-47d8-8858-f4fe51ea807e
2026-06-12 17:47:02 -07:00
gsxdsm
d73d8f4036 FN-6241: rescue quarantined engine tests
Rescue quarantined engine tests by adding deterministic seams and fake-timer flushing.\n\n- Add an injectable staged-files reader for squash file-scope invariant checks while preserving the production git-backed default.\n- Update file-scope invariant tests to use the deterministic staged-files seam instead of child_process mocking.\n- Stabilize project engine reconciliation retry coverage by avoiding mixed real timers in fake-timer tests.\n- Remove the rescued engine tests from Vitest excludes and the quarantine ledger.\n\nFiles changed:\n .../__tests__/merger-file-scope-invariant.test.ts  | 39 ++++++++++++----------\n .../src/__tests__/project-engine-manager.test.ts   | 18 +++++-----\n packages/engine/src/merger.ts                      | 22 ++++++++----\n packages/engine/vitest.config.ts                   |  3 --\n scripts/lib/test-quarantine.json                   | 10 ------\n 5 files changed, 48 insertions(+), 44 deletions(-)

Fusion-Task-Id: FN-6241

Fusion-Task-Lineage: c1c0d40c-7581-4bcf-8244-688ea04d12b9
2026-06-11 22:17:55 -07:00
gsxdsm
d23c5d901f FN-6247: refresh PR controls from live auto-merge setting
Keep task detail PR and review affordances synchronized with the current project auto-merge setting.

- Thread the live auto-merge value into task detail modals and list split-pane detail views.
- Prefer the live auto-merge setting over the stale fetched modal snapshot while preserving task-level overrides.
- Cover PR and review tab behavior for auto-merge on/off and document the dashboard behavior.
- Evict flaky engine gate entries and add a patch changeset for the published CLI package.

Files changed:
 .changeset/fn-6247-automerge-off-modal-stale.md    |   5 +
 docs/dashboard-guide.md                            |   1 +
 packages/dashboard/app/App.tsx                     |   3 +-
 packages/dashboard/app/components/AppModals.tsx    |   2 +
 packages/dashboard/app/components/ListView.tsx     |   3 +
 .../dashboard/app/components/TaskDetailModal.tsx   |   4 +-
 .../__tests__/TaskDetailModal.create-pr.test.tsx   | 171 ++++++++++++++++++++-
 packages/engine/vitest.config.ts                   |   2 -
 8 files changed, 182 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6247

Fusion-Task-Lineage: 1321c03a-216d-4b15-bf4f-95621d68c9ae
2026-06-11 22:11:44 -07:00
gsxdsm
de6e493e2a FN-6238: stabilize self-healing test and quarantine merger AI suite
Rescue the already-merged self-healing real-git test while quarantining a separate flaky merger AI suite.

- Call the already-merged recovery path directly in the rescued test and assert specific audit event types instead of exact total counts.
- Remove self-healing-already-merged.real-git.test.ts from the engine default quarantine list and ledger.
- Add merger-ai.test.ts to the engine default quarantine list and quarantine ledger with FN-6238 evidence.

Files changed:
 .../self-healing-already-merged.real-git.test.ts     | 20 +++++++++++++-------
 packages/engine/vitest.config.ts                     |  2 +-
 scripts/lib/test-quarantine.json                     | 10 +++++-----
 3 files changed, 19 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-6238

Fusion-Task-Lineage: b04451e3-fbd3-4dee-aca2-f542d1036d20
2026-06-11 21:10:00 -07:00
gsxdsm
e22afece56 FN-6233: add typed triage policy settings
Render triage planning thresholds from typed workflow settings instead of hard-coded prompt constants.

- Add typed triage threshold/default workflow settings, migration coverage, exports, and docs.
- Render built-in triage prompt placeholders before engine prompt execution and tests.
- Remove the duplicate standard triage prompt from engine in favor of the core workflow IR source.
- Add regression coverage for default and customized triage policy rendering.

Files changed:
 .changeset/FN-6233-triage-threshold-settings.md    |   7 +
 docs/settings-reference.md                         |  19 ++
 docs/workflow-steps.md                             |   2 +-
 packages/core/src/__tests__/agent-prompts.test.ts  |  16 +-
 .../builtin-workflow-settings-triage.test.ts       |  63 ++++
 .../src/__tests__/settings-consistency.test.ts     |  24 +-
 .../core/src/__tests__/settings-migration.test.ts  |  12 +-
 .../src/__tests__/workflow-ir-settings.test.ts     |  11 +-
 packages/core/src/agent-prompts.ts                 |  20 +-
 packages/core/src/builtin-workflow-settings.ts     | 154 ++++++++-
 packages/core/src/index.ts                         |   7 +-
 packages/core/src/moved-settings.ts                |  13 +-
 .../triage-planning-prompt-single-source.test.ts   |   9 +-
 .../__tests__/triage-threshold-settings.test.ts    |  84 +++++
 packages/engine/src/__tests__/triage.test.ts       |  17 +-
 packages/engine/src/triage.ts                      | 343 +--------------------
 packages/engine/vitest.config.ts                   |   5 +-
 17 files changed, 423 insertions(+), 383 deletions(-)

Fusion-Task-Id: FN-6233

Fusion-Task-Lineage: b2a986df-fa37-4297-a359-84d8463b0867
2026-06-11 20:53:01 -07:00
gsxdsm
02ae5a9340 FN-6213: prevent keyboard from forcing mobile layout
Keep tablet and desktop layouts stable when the virtual keyboard shrinks viewport height.

- Gate short-height mobile detection on phone-class physical screen size.
- Reuse the shared mobile viewport helper across board, terminal, and workflow editor layout decisions.
- Cover tablet keyboard and landscape phone viewport behavior with regression tests and document the UI bug pattern.
- Preserve quarantine exclusions while resolving the squash merge conflict.

Files changed:
 .../ui-bugs/tablet-keyboard-viewport-mode-flip.md  | 54 +++++++++++++
 packages/dashboard/app/components/Board.tsx        |  4 +-
 .../dashboard/app/components/SessionTerminal.tsx   | 16 +---
 .../app/components/WorkflowNodeEditor.tsx          | 41 +++++-----
 .../__tests__/SessionTerminal.mobile.test.tsx      | 57 ++++++++++----
 .../app/hooks/__tests__/useViewportMode.test.ts    | 90 +++++++++++++++++++++-
 packages/dashboard/app/hooks/useViewportMode.ts    | 26 ++++++-
 packages/engine/vitest.config.ts                   |  1 +
 scripts/lib/test-quarantine.json                   |  5 ++
 9 files changed, 239 insertions(+), 55 deletions(-)

Fusion-Task-Id: FN-6213

Fusion-Task-Lineage: 01af6489-8c34-4318-9cff-1bceb1fa5a5d
2026-06-11 19:37:25 -07:00
gsxdsm
1eb256bbf6 FN-6207: quarantine active-session cleanup pruning test
Quarantines the flaky active-session pruning coverage without hiding the rest of merger cleanup tests.

- Move the active-session pruning scenario into its own focused test file.
- Keep the broader merger cleanup suite in the reliability project.
- Point the quarantine ledger and engine default exclude at only the isolated flaky test.

Files changed:
 .../merger-ai-cleanup-active-session.test.ts       | 60 ++++++++++++++++++++++
 .../engine/src/__tests__/merger-ai-cleanup.test.ts | 22 ++------
 packages/engine/vitest.config.ts                   |  2 +-
 scripts/lib/test-quarantine.json                   |  4 +-
 4 files changed, 66 insertions(+), 22 deletions(-)

Fusion-Task-Id: FN-6207

Fusion-Task-Lineage: b5e806cb-aec8-4893-83ef-d27164250a5c
2026-06-11 19:18:05 -07:00
gsxdsm
94c3cce7bc FN-6257: make AI merge cleanup idempotent for absent worktrees
AI merge cleanup now tolerates already-removed worktrees without failing a landed merge.

- Treat ENOENT and de-registered worktree removal errors as successful idempotent cleanup.
- Register AI merge temp paths before worktree creation and keep raw/canonical paths active.
- Add cleanup regression coverage and include the cleanup suite in reliability tests.
- Document the idempotent cleanup telemetry contract.

Files changed:
 docs/architecture.md                               |   2 +-
 .../engine/src/__tests__/merger-ai-cleanup.test.ts |  48 +++++++-
 .../ai-merge-cleanup-enoent-idempotent.test.ts     | 128 +++++++++++++++++++++
 packages/engine/src/merger-ai.ts                   |  73 +++++++++---
 packages/engine/vitest.config.ts                   |   5 +-
 5 files changed, 239 insertions(+), 17 deletions(-)

Fusion-Task-Id: FN-6257

Fusion-Task-Lineage: c669fa1e-2c92-4e2f-8726-4939a3146955
2026-06-11 18:14:45 -07:00
gsxdsm
39b2478f01 FN-6227: handle non-empty worktree removals
Recover native worktree cleanup when git refuses to remove a non-empty worktree.

- Detect recoverable git worktree remove errors and fall back to filesystem removal plus admin pruning.
- Add a worktree remove fallback audit event for recovery visibility.
- Cover non-empty removal recovery with unit and real-git regression tests.
- Keep flaky-test quarantine exclusions merged with current main.

Files changed:
 docs/architecture.md                               |   4 +-
 ...tree-remove-non-empty-recovery.real-git.test.ts | 139 +++++++++++++++++++++
 .../engine/src/__tests__/worktree-backend.test.ts  | 113 ++++++++++++++++-
 packages/engine/src/run-audit.ts                   |   1 +
 packages/engine/src/worktree-backend.ts            |  57 ++++++++-
 packages/engine/vitest.config.ts                   |   1 +
 scripts/lib/test-quarantine.json                   |   5 +
 7 files changed, 311 insertions(+), 9 deletions(-)

Fusion-Task-Id: FN-6227

Fusion-Task-Lineage: 98673303-8109-4fe8-8d9f-eb867fb28bdd
2026-06-11 16:15:07 -07:00
gsxdsm
3e69d3990d FN-6244: protect active AI merge worktrees
Ensure AI merge cleanup only reaps stale, inactive temp worktrees.

- Register live AI merge clean-room paths in the active session registry while merges run.
- Add a minimum temp-worktree reap age and conservative lookup-error handling to sweep and prune paths.
- Expand cleanup tests and release the repaired AI merge cleanup test from quarantine.

Files changed:
 docs/architecture.md                               |  2 +-
 .../engine/src/__tests__/merger-ai-cleanup.test.ts | 38 ++++++++++++++--
 .../__tests__/self-healing-tempdir-sweep.test.ts   | 52 +++++++++++++++++++---
 packages/engine/src/active-session-registry.ts     |  2 +-
 packages/engine/src/merger-ai.ts                   | 29 +++++++++++-
 packages/engine/src/self-healing.ts                | 28 +++++++++---
 packages/engine/vitest.config.ts                   |  1 -
 scripts/lib/test-quarantine.json                   |  5 ---
 8 files changed, 132 insertions(+), 25 deletions(-)

Fusion-Task-Id: FN-6244

Fusion-Task-Lineage: 5c8ced12-d38f-4e45-9ea0-119b3236a2cb
2026-06-11 15:54:49 -07:00
gsxdsm
36f5ecdaba FN-6226: skip fast-mode workflow graph validation nodes
Fast execution mode now bypasses custom pre-merge workflow graph validation consistently.

- Skip custom graph prompt, script, and gate nodes for fast-mode tasks while preserving human waits and CLI-agent work.
- Add regression coverage for fast-mode custom workflow behavior and standard-mode/null-mode validation.
- Document fast-mode workflow graph bypass behavior and record the published package changeset.
- Quarantine the unrelated self-healing real-git flake from the engine core gate.

Files changed:
 .changeset/FN-6226-fast-mode-workflows.md          |   5 +
 docs/task-management.md                            |   6 +-
 docs/workflow-steps.md                             |   2 +-
 .../__tests__/executor-fast-mode-workflows.test.ts | 280 +++++++++++++++++++++
 packages/engine/src/executor.ts                    |  16 ++
 packages/engine/vitest.config.ts                   |   1 +
 scripts/lib/test-quarantine.json                   |   5 +
 7 files changed, 313 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-6226

Fusion-Task-Lineage: 68d88a7a-e157-4d18-a2c2-9065946066de
2026-06-11 09:21:23 -07:00
gsxdsm
648d3598e0 FN-6206: quarantine flaky engine tests
Move undocumented flaky engine tests into the formal quarantine path.

- add quarantine ledger entries for flaky engine test files observed under concurrent/full-suite load
- exclude the quarantined engine test files from vitest projects so they no longer run in gate and reliability pools
- remove the undocumented it.skip markers by quarantining at the file/config level instead

Files changed:
 .../__tests__/merger-file-scope-invariant.test.ts  |  4 ++--
 .../src/__tests__/project-engine-manager.test.ts   |  2 +-
 packages/engine/vitest.config.ts                   | 10 ++++++++--
 scripts/lib/test-quarantine.json                   | 23 +++++++++++++++++++++-
 4 files changed, 33 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-6206

Fusion-Task-Lineage: 8d88725e-1e92-4a06-aaa6-be34287e613a
2026-06-11 09:21:23 -07:00
gsxdsm
e0980c01c6 FN-6206: quarantine flaky engine tests
Move undocumented flaky engine tests into the formal quarantine path.

- add quarantine ledger entries for flaky engine test files observed under concurrent/full-suite load
- exclude the quarantined engine test files from vitest projects so they no longer run in gate and reliability pools
- remove the undocumented it.skip markers by quarantining at the file/config level instead

Files changed:
 .../__tests__/merger-file-scope-invariant.test.ts  |  4 ++--
 .../src/__tests__/project-engine-manager.test.ts   |  2 +-
 packages/engine/vitest.config.ts                   | 10 ++++++++--
 scripts/lib/test-quarantine.json                   | 23 +++++++++++++++++++++-
 4 files changed, 33 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-6206

Fusion-Task-Lineage: 8d88725e-1e92-4a06-aaa6-be34287e613a
2026-06-10 22:18:52 -07:00
gsxdsm
5c42ff1314 FN-6198: unquarantine self-healing db corruption test
Restore the self-healing DB corruption test to the default engine suite.

- remove the engine vitest exclude for self-healing-db-corruption.test.ts
- clear the quarantine ledger entry for the restored test

Files changed:
 packages/engine/vitest.config.ts | 1 -
 scripts/lib/test-quarantine.json | 8 +-------
 2 files changed, 1 insertion(+), 8 deletions(-)

Fusion-Task-Id: FN-6198

Fusion-Task-Lineage: 2466b040-956d-4138-89d5-137d1721081c
2026-06-10 10:00:21 -07:00
gsxdsm
ae63cd9008 FN-6195: isolate and quarantine flaky db-corruption test
Stop the self-healing DB corruption test from leaking into unrelated tmpdir state while quarantining the known flake.

- mock node:os tmpdir usage so the test runs inside a per-test sandbox and cleans it up after each case
- add the flaky self-healing DB corruption test to the engine default exclude list
- record the quarantine entry and failure context in scripts/lib/test-quarantine.json

Files changed:
 .../__tests__/self-healing-db-corruption.test.ts   | 22 ++++++++++++++++++++++
 packages/engine/vitest.config.ts                   |  1 +
 scripts/lib/test-quarantine.json                   |  8 +++++++-
 3 files changed, 30 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-6195

Fusion-Task-Lineage: 60f7f6ca-d14d-42b4-b47e-0644a25e64ae
2026-06-10 08:25:31 -07:00
gsxdsm
0cb54dd8c4 refactor(workflow): map merge policy ownership 2026-06-09 11:51:30 -07:00
gsxdsm
8bc3d7b0a5 FN-6042: raise dependency security floors
Harden dependency floors and update the Vitest toolchain to patched releases.

- upgrade workspace vitest and @vitest/coverage-v8 dependencies to the 4.1 line across packages and plugins
- pin transitive protobufjs via pnpm overrides and lockfile updates to patched versions
- adapt Vitest configs, engine test helpers, and security-floor coverage for the new dependency baselines
- add the published CLI changeset and related workspace/package metadata updates included in the task branch

Files changed:
 .changeset/fn-6042-security-dependencies.md        |   5 +
 AGENTS.md                                          |   4 +
 Dockerfile                                         |   3 +
 docs/PLUGIN_AUTHORING.md                           |   2 -
 package.json                                       |   3 +-
 packages/cli/package.json                          |   4 +-
 packages/cli/vitest.config.ts                      |   2 +-
 packages/core/package.json                         |   4 +-
 packages/core/vitest.config.ts                     |   2 +-
 packages/dashboard/app/test/mockApi.ts             |   4 +-
 packages/dashboard/package.json                    |   4 +-
 packages/dashboard/vitest.config.ts                |   2 +-
 packages/desktop/package.json                      |   4 +-
 packages/desktop/vitest.config.ts                  |   2 +-
 packages/droid-cli/package.json                    |   2 +-
 packages/droid-cli/vitest.config.ts                |   2 +-
 packages/engine/package.json                       |   4 +-
 .../engine/src/__tests__/executor-test-helpers.ts  |  29 +-
 .../engine/src/__tests__/gridlock-detector.test.ts |   5 +-
 .../src/__tests__/heartbeat-scheduler.test.ts      |   3 +-
 packages/engine/src/__tests__/scheduler.test.ts    |  24 +-
 packages/engine/src/__tests__/self-healing.test.ts |   5 +
 packages/engine/tsconfig.json                      |   3 +-
 packages/engine/vitest.config.ts                   |  10 +-
 packages/i18n/package.json                         |   2 +-
 packages/i18n/vitest.config.ts                     |   7 +
 packages/mobile/package.json                       |   2 +-
 packages/mobile/vitest.config.ts                   |   2 +-
 packages/pi-claude-cli/package.json                |   2 +-
 packages/pi-claude-cli/vitest.config.ts            |   2 +-
 packages/pi-llama-cpp/package.json                 |   2 +-
 packages/pi-llama-cpp/vitest.config.ts             |   2 +-
 packages/plugin-sdk/package.json                   |   2 +-
 packages/plugin-sdk/vitest.config.ts               |   2 +-
 .../examples/fusion-plugin-auto-label/package.json |   2 +-
 .../fusion-plugin-auto-label/vitest.config.ts      |   2 +-
 .../examples/fusion-plugin-ci-status/package.json  |   2 +-
 .../fusion-plugin-ci-status/vitest.config.ts       |   2 +-
 .../fusion-plugin-notification/package.json        |   2 +-
 .../fusion-plugin-notification/vitest.config.ts    |   2 +-
 .../fusion-plugin-settings-demo/package.json       |   2 +-
 .../fusion-plugin-settings-demo/vitest.config.ts   |   2 +-
 plugins/fusion-plugin-acp-runtime/package.json     |   2 +-
 plugins/fusion-plugin-acp-runtime/vitest.config.ts |   2 +-
 plugins/fusion-plugin-agent-browser/package.json   |   2 +-
 .../fusion-plugin-agent-browser/vitest.config.ts   |   2 +-
 .../fusion-plugin-cli-printing-press/package.json  |   2 +-
 .../vitest.config.ts                               |   2 +-
 .../package.json                                   |   2 +-
 .../src/__tests__/orchestrator-live-output.test.ts |   4 +-
 .../vitest.config.ts                               |   2 +-
 plugins/fusion-plugin-cursor-runtime/package.json  |   4 +-
 .../fusion-plugin-dependency-graph/package.json    |   4 +-
 .../vitest.config.ts                               |   2 +-
 plugins/fusion-plugin-droid-runtime/package.json   |   2 +-
 .../fusion-plugin-droid-runtime/vitest.config.ts   |   2 +-
 plugins/fusion-plugin-even-cards/package.json      |   2 +-
 plugins/fusion-plugin-even-cards/vitest.config.ts  |   2 +-
 .../package.json                                   |   2 +-
 .../vitest.config.ts                               |   2 +-
 plugins/fusion-plugin-hermes-runtime/package.json  |   2 +-
 .../fusion-plugin-hermes-runtime/vitest.config.ts  |   2 +-
 .../fusion-plugin-openclaw-runtime/package.json    |   2 +-
 .../vitest.config.ts                               |   2 +-
 .../fusion-plugin-paperclip-runtime/package.json   |   2 +-
 .../vitest.config.ts                               |   2 +-
 plugins/fusion-plugin-reports/package.json         |   2 +-
 .../src/__tests__/review-panel.test.ts             |   6 +-
 plugins/fusion-plugin-reports/vitest.config.ts     |   2 +-
 plugins/fusion-plugin-roadmap/package.json         |   2 +-
 plugins/fusion-plugin-roadmap/vitest.config.ts     |   2 +-
 plugins/fusion-plugin-whatsapp-chat/package.json   |   2 +-
 .../fusion-plugin-whatsapp-chat/vitest.config.ts   |   2 +-
 pnpm-lock.yaml                                     | 626 ++++++++-------------
 .../__tests__/dependency-security-floor.test.mjs   |  95 ++++
 75 files changed, 475 insertions(+), 491 deletions(-)

Fusion-Task-Id: FN-6042

Fusion-Task-Lineage: fff6a1cb-8937-435c-9a91-b7c7a59cc80e
2026-06-08 15:19:27 -07:00
gsxdsm
98d5d83e95 feat(test): add curated engine-core gate suite and test:gate command 2026-06-05 08:55:43 -07:00
gsxdsm
9e959566c9 test(engine): quarantine worktree-heavy reliability tests + fail-fast on wedge
Shard 4 (engine --shard=2/2) wedged for minutes then was SIGKILLed by the CI
job timeout with no named failure — a promise-level hang (e.g. an un-resolved
merge waiter) or a stuck worktree hook that no subprocess timeout catches. The
mismatch (subprocess timeout 120s >> testTimeout 30s) also let orphaned git
processes pile up (the 'MaxListenersExceededWarning: 11 exit listeners'),
draining the worker. This is a flaky live-git hang that also predates the branch
(main's CI is intermittently red here too).

Two fixes:
1. Fast-fail: add explicit hookTimeout (45s) / teardownTimeout (20s) to the
   engine vitest config so a setup/teardown wedge fails fast and names the
   culprit test instead of hanging the whole shard.
2. Quarantine: move the worktree-heavy real-git reliability suites
   (pr-mode-worktree-invariants, shared-branch-group-lifecycle,
   shared-branch-group-working-branch) to *.slow.test.ts, which runs in the
   non-required engine-slow lane (test:slow/test:all) rather than the required
   sharded engine-default/engine-reliability lane. The real-git integration
   coverage is preserved; it just no longer gates PRs on live-git flakiness.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 19:38:23 -07:00
gsxdsm
b1d185b93a perf(engine): tier 4 slow real-git test files into engine-slow project
`pnpm test` was dominated by a handful of merger and reliability-
interaction files that each spawn `mkdtemp` + `git init` + multiple
commits per test. Renaming them to `*.slow.test.ts` and routing them
to a new `engine-slow` vitest project moves them out of the default
local run.

Local `pnpm test` drops from 198s to 84s (~57% faster).

- `pnpm test` — engine-default + engine-reliability lanes only
- `pnpm test:slow` — engine-slow lane (4 files, 63 tests, ~37s)
- `pnpm test:all` — everything (for CI / verify:workspace)

Files moved:
- reliability-interactions/merge-reuse-task-worktree.test.ts (was 20.6s)
- merger-overlap-guard.test.ts (was 17.1s)
- merger-staging-allowlist.test.ts (was 11.8s)
- merger-diff-volume-gate.test.ts (was 8.4s)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 07:47:17 -07:00
gsxdsm
4e2e201215 feat(FN-5537): merge fusion/fn-5537 2026-05-23 00:13:27 -07:00
gsxdsm
8a3afcf9d4 fix(executor+engine-tests): preflight premise-stale exit and serialize reliability suite
Root-cause prevention for the FN-5521 failure class where PROMPT.md describes
work that is already done on HEAD and the executor still marches through
plan/review/test/doc, then merger burns hours retrying against unrelated
flakes in @fusion/engine reliability-interactions.

- Executor system prompt: add a Preflight escape hatch. When Step 0
  reproduces and finds HEAD already matches the desired state, the agent
  marks Step 0 done, marks remaining steps skipped, and calls fn_task_done
  with a `PREMISE STALE:` summary. Reuses the existing
  evaluateTaskDoneRefusal/skipped semantics and the merger's
  empty-own-diff fast-path — no new tools or refusal classes needed.

- packages/engine/vitest.config.ts: split into two projects. engine-default
  retains full parallelism; engine-reliability scopes
  src/__tests__/reliability-interactions/** to
  poolOptions.threads.singleThread so event-ordering assertions stop
  flaking under workspace-concurrent merge-gate load (the
  `expected 24 to be less than 19` rowid interleaving in
  merge-reuse-task-worktree).
2026-05-22 22:26:18 -07:00
gsxdsm
f58fb8955a fix(engine-tests): eliminate temp-dir leak and raise subprocess guard for concurrent workspace runs
Two engine merger tests created mkdtempSync workspaces directly in tmpdir()
under the tracked `fusion-test-` prefix; under full-suite concurrent load
the post-run check-test-isolation flagged them as leaks. Route both
(`merger-no-op-fix-finalize.test.ts`, `merger-verification-fix-already-on-main.test.ts`)
through FUSION_TEST_WORKER_ROOT like sibling merger tests so they nest
inside the already-tracked worker root.

Bump engine vitest subprocess guard from 60s to 120s and testTimeout to
30s — plain git commands (branch -d, worktree remove) queued behind
system contention during `pnpm -r --workspace-concurrency=2` runs were
timing out. The guard only fires on hangs, so healthy tests pay nothing.

Also bundles in-progress dashboard mobile-breakpoint regex/CSS test
updates and docs index additions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 20:20:42 -07:00
gsxdsm
9aa7518bad feat(FN-5057): merge fusion/fn-5057 2026-05-18 11:46:43 -07:00
Fusion
7d02ac81ef feat(FN-3593): add test isolation CI enforcement, fix stuck-requeue race, a
This merge lands five FN-3593 commits establishing a test isolation contract with a new `scripts/check-test-isolation.mjs` guard that scans for accidental `beforeEach`/`afterEach`/`beforeAll`/`afterAll` in setup helpers, plus per-package `setup-test-isolation.ts` bootstraps that canonicalize the pat

Fusion-Task-Id: FN-3593
2026-05-06 09:43:51 -07:00
gsxdsm
1aa1e723f6 chore(build,test): split desktop/mobile from default build; share vitest worker budget
- pnpm build now excludes @fusion/desktop and @fusion/mobile by default
  (recursive build still available as pnpm build:all). Saves time on
  workspace-wide builds that don't need the native shells.
- Hoist the per-package max-worker computation into a shared
  packages/core/src/__test-utils__/vitest-workers.ts util. Every
  vitest.config.ts now calls computeMaxWorkers(), which honors
  VITEST_MAX_WORKERS, FUSION_TEST_TOTAL_WORKERS, and a per-config
  defaultCap, clamped to cpus-1.
- pnpm test sets VITEST_MAX_WORKERS=2 so the workspace run keeps total
  fan-out modest with --workspace-concurrency=2.
- Switch dashboard vitest pool from forks to threads so jsdom/React
  suites share a V8 heap instead of duplicating ~500MB per worker.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 15:56:15 -07:00
Fusion
bb79f56f8f feat(FN-3106): add draft planning workflow with createAiSession plugin API
This merge delivers the full draft planning feature (FN-3106) — API routes for planning subtasks, the AiSessionStore backend for draft sessions, a draft planning API client, auto-creation of planning drafts from user input, and corresponding UI polish in PlanningModeModal with accessibility-focused

Fusion-Task-Id: FN-3106
2026-05-02 13:32:09 -07:00
Fusion
0f40d96e50 feat(FN-2855): route scheduled tasks using effective node resolution
- Add an effective node resolver with task override, project default, and local fallback precedence.
- Wire scheduler dispatch to persist effectiveNodeId/effectiveNodeSource and log resolved node routing.
- Add coverage for effective node resolution and scheduler node routing integration behavior.
- Stabilize workspace test resolution by adding @fusion/core and @fusion/plugin-sdk aliases across Vitest configs.
2026-04-28 14:25:55 -07:00
Fusion
caa773cb95 feat(FN-2606): merge fusion/fn-2606 (auto-resolved)
- fix(FN-2606): complete Step 4 — clean up mkdtemp test directories
- test(FN-2606): complete Step 3 — add isolation guard coverage
- feat(FN-2606): complete Step 2 — add engine/dashboard HOME test isolation setup
2026-04-26 13:00:56 -07:00
Fusion
de5dd6f7db feat(FN-2370): merge fusion/fn-2370 (auto-resolved)
- test(FN-2370): complete Step 3 — align qa-check template expectation
- test(FN-2370): complete Step 2 — add regression coverage for addComment diagnostics
- test(FN-2370): complete Step 2 — cover addComment warning regressions
- feat(FN-2370): complete Step 1 — log addComment best-effort failures
- feat(FN-2369): merge fusion/fn-2369
- feat(prompts): require lint alongside tests and typecheck in agent instructions
- perf(test): parallelize harder — unlock worker count, split build-output, bump workspace concurrency
- fix(core): recognize legacy kb-* backups and canonicalize .kb/backups settings
- refactor: eliminate remaining 15 any warnings and ratchet rule to error
- refactor: eliminate ~400 no-explicit-any warnings across the workspace
- feat(core): add getErrorMessage helper for narrowing unknown errors
- refactor: fix and tighten mechanical lint rules
- chore(eslint): fix pre-existing errors surfaced by wider .cjs match
- chore(eslint): promote @typescript-eslint/no-unused-vars from warn to error
- refactor(dashboard,desktop,engine): remove unused imports, props, and locals
- refactor(core): remove unused imports, helpers, and dead migration constant
- refactor(cli): remove unused imports and variables
- refactor: adapt resource loader and tool wiring to pi-coding-agent 0.70
- fix: adapt to AgentState.error → errorMessage rename
- refactor: migrate @sinclair/typebox imports to typebox 1.x
- refactor: migrate to ModelRegistry.create factory
- chore: bump pi-coding-agent + pi-ai to 0.70.0
- refactor: remove legacy kb compatibility
- feat: add "Anthropic — via Claude CLI" as a first-class provider
- test(FN-2358): harden clean-worktree CI verification tests
- fix(FN-2352): add structured terminal websocket diagnostics
- fix: use live merge-base for task diff scope
- feat: backfill Claude skills when useClaudeCli toggle flips on
- fix: prevent nested .fusion/.fusion dir from PluginStore path bug
2026-04-24 08:54:25 -07:00
gsxdsm
ed4b7380a0 Revert "perf(test): parallelize harder — unlock worker count, split build-output, bump workspace concurrency"
This reverts commit 972ad0f9fa55dc1419660aba4758a9d3c325919a.
2026-04-23 23:02:37 -07:00
gsxdsm
3fabd9d9e5 perf(test): parallelize harder — unlock worker count, split build-output, bump workspace concurrency
- All 8 vitest configs now default maxWorkers to \`cpus().length - 1\`
  instead of the arbitrary \`Math.min(4, …)\` cap. Respects an explicit
  VITEST_MAX_WORKERS override for constrained environments (CI, laptops
  on battery). CLI keeps \`fileParallelism: false\` — audit found real
  shared state (process.chdir in agent-import, dist/ races in build-exe
  suites) that needs refactoring before we can flip it.
- packages/dashboard: move the mobile build-output smoke test (which
  invokes \`pnpm build:client\` via execSync, ~3s per run) into a
  dedicated \`test:build\` script so \`pnpm test\` isn't gated by it. A
  matching root script keeps CI wiring simple.
- Root: bump --workspace-concurrency from 2 → 4 so core/engine/cli/
  desktop can pipeline against dashboard's tail.
- Drop the now-redundant VITEST_MAX_WORKERS=4 prefix from the root
  scripts; the per-package configs pick up cpu count themselves.

Dashboard test suite: 182s → 38s (5x) on a 10-core machine. Full
workspace run: ~3m15 → 2m29. All tests still pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:02:37 -07:00
Fusion
331d283125 test(dashboard): realign DevServer tests with session-based component
- DevServerView.preview.test.tsx: drop manual-preview-override assertion
  (the component hard-codes isManualPreviewOverride=false under the new
  session model, so the badge is always "Auto"), provide both legacy and
  current-API fields from createDevServerHookState, and mirror
  embedContext into blockReason in createPreviewEmbedState so the
  fallback panel picks up the reason text under the new destructure.
- runtime-adapter.test.ts: skip the createSession / promptWithFallback /
  describeModel blocks with a TODO — the adapter loads pi.js via
  CommonJS require() which vi.mock does not intercept, so the mocked
  module is never actually installed. Needs a dynamic import seam
  before these can run; tracking separately.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 16:31:30 -07:00
gsxdsm
1cbf9e1015 test: enforce test-directory isolation across all packages
Introduce a shared test-utils module and global vitest setup that
guarantee tests never write to the real .fusion directory or leak temp
directories under /tmp.

Infrastructure:
- packages/core/src/__test-utils__/workspace.ts — tempWorkspace(),
  useIsolatedCwd(), trackForCleanup(), assertOutsideRealFusion() with
  auto-cleanup in afterEach.
- packages/core/src/__test-utils__/vitest-setup.ts — per-worker guard:
  chdirs each worker into an isolated tmp dir, wraps process.chdir to
  refuse the real .fusion, scopes tmp dirs under fusion-test-workers/
  (skips cwd change in thread-pool workers where chdir isn't supported).
- packages/core/src/__test-utils__/vitest-teardown.ts — globalSetup
  hook that wipes the shared parent even when workers are SIGKILLed.
- scripts/check-test-isolation.mjs + `test:isolated` / `test:check-
  isolation` scripts for CI.
- @fusion/test-utils alias + setupFiles + globalSetup wired into core,
  cli, engine, dashboard, tui vitest configs; matching tsconfig paths.

Test refactors (no behavior change):
- cli provider-settings, auth-paths, provider-auth — switch leaking
  mkdtempSync calls to tempWorkspace().
- core migration, first-run, store-backward-compat — replace manual
  process.chdir save/restore with useIsolatedCwd().
- tui fusion-context — replace 9 hardcoded tmp paths (collision-prone
  under parallelism) with tempWorkspace().
- dashboard useTheme, FileBrowser, TaskCard — resolve source-file reads
  against a PACKAGE_ROOT computed from import.meta.url instead of cwd,
  so tests don't depend on the process working directory.

Verified: full suite (~15,500 tests across 8 packages + plugins) passes
and the orphan-detector reports zero leaked temp directories after a
complete run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 23:41:47 -07:00