FN-6430: rescue CLI quarantine tests

Rescue the quarantined CLI suites by fixing shared test isolation instead of extending timeouts.

- Remove rescued CLI files from the quarantine ledger and Vitest exclude list while preserving an empty rescue ledger comment.
- Tighten Vitest HOME isolation to reject inherited worker homes and sweep legacy top-level fn-test-home roots with bounded cleanup.
- Reset affected CLI fixtures, close research stores, and narrow the slow mission store seam so rescued tests run on default timeouts.
- Document the CLI shared-fixture rescue pattern for future quarantine recoveries.

Files changed:
 docs/testing.md                                    |   2 +
 .../cli/src/__tests__/extension-task-tools.test.ts |   7 +-
 packages/cli/src/__tests__/extension.test.ts       | 117 +++++++++----------
 .../cli/src/commands/__tests__/mission.test.ts     |  16 ++-
 packages/cli/src/commands/__tests__/plugin.test.ts |   5 +
 packages/cli/vitest.config.ts                      |  52 ++-------
 packages/core/src/__test-utils__/vitest-setup.ts   |  25 ++++-
 .../core/src/__test-utils__/vitest-teardown.ts     |  28 ++++-
 .../vitest-teardown-worker-root-cleanup.test.ts    |  15 +++
 scripts/lib/test-quarantine.json                   | 124 +--------------------
 10 files changed, 157 insertions(+), 234 deletions(-)

Fusion-Task-Id: FN-6430

Fusion-Task-Lineage: 943b73b4-5f92-4703-8e93-0ae3207eb63c
This commit is contained in:
gsxdsm
2026-06-14 01:41:04 -07:00
parent 23c2bc935a
commit 2fc6d4d667
10 changed files with 159 additions and 236 deletions

View File

@@ -148,6 +148,8 @@ Flaky tests are quarantined ON SIGHT and deleted on a 2-week clock. This is writ
**Rescue** (before the clock runs out) requires both: evidence the test catches real regressions, and a root-cause fix for the flake. Stabilization passes — widened timeouts, retries, loosened assertions — are appeasement, not rescue, and are banned (for agents especially).
**CLI shared-fixture rescue pattern (FN-6430):** the 2026-06-14 `@runfusion/fusion` quarantine batch passed direct runs but timed out or bled state only under package/workspace load. The rescue fixed the shared isolation seam, not the timeout: sweep stale top-level `fn-test-home-*` roots with a bounded one-level prefix scan, reject inherited `HOME` values that do not live under the current `fusion-test-workers-*` root, recreate/remark the worker root before each `mkdtemp`, reset module/singleton fixture state in the affected suites, close real stores created by research helpers, and narrow slow real-store seams by moving package imports out of timed test bodies. When rescuing a similar CLI batch, prove it with repeated rescued-file runs plus `pnpm --filter @runfusion/fusion test`, audit rescued files for `vi.setConfig`/`testTimeout`/`hookTimeout` appeasement, and keep ledger/config removals in the same commit.
**Gate eviction:** a flake inside the merge gate cannot block all merges while red — it is evicted by removing its line from the `engine-core` allow-list (no quarantine entry needed unless it should also leave the non-blocking tier).
**Gate admission:** the mirror operation — add the test's path to the `engine-core` `include` array in `packages/engine/vitest.config.ts`, citing the evidence of value (a real regression it caught) in the PR. Keep the project under its ~60s wall-clock budget.

View File

@@ -1,6 +1,9 @@
import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
vi.setConfig({ testTimeout: 20000, hookTimeout: 20000 });
/*
FNXC:CliTests 2026-06-14-01:25:
FN-6430 requires rescued CLI suites to run on the default timeout after shared HOME isolation, not via the older file-wide 20s timeout.
Keep this worktree-root regression slice fast by relying on module resets and bounded temp fixtures.
*/
import { mkdtemp, mkdir, rm, writeFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";

View File

@@ -4,16 +4,11 @@ import { join } from "node:path";
import { tmpdir } from "node:os";
import { setTimeout as delay } from "node:timers/promises";
// Each test spins up a fresh temp workspace, mounts the full extension API,
// registers tools, and exercises them through real TaskStore/MissionStore
// machinery (atomic JSON writes, ID allocator with disk sync, async memory
// flushes). Under heavy parallel FS load on a busy machine, individual
// tests can occasionally cross 5s — and the same load also produces
// ENOTEMPTY teardown races when async work outlives the test body. A
// generous testTimeout absorbs both effects without masking real bugs:
// any test that genuinely hangs will still trip the bump, and the suite
// already runs well under the cap on a quiet machine.
vi.setConfig({ testTimeout: 30000, hookTimeout: 30000 });
/*
FNXC:CliTests 2026-06-14-01:22:
FN-6430 rescues the extension suite by fixing shared HOME isolation and closing research stores in the active slice, not by preserving the older file-wide timeout bump.
Keep this file on the default 5s Vitest timeout so future slow seams are narrowed or quarantined instead of hidden.
*/
vi.mock("@fusion/core/gh-cli", () => ({
isGhAvailable: vi.fn(() => true),
@@ -3412,64 +3407,72 @@ describe("fn pi extension (runnable structured-output regression slice)", () =>
});
it("fn_research_run preserves fire-and-forget behavior when wait_for_completion is false", async () => {
await enableResearch(tmpDir);
const tool = api.tools.get("fn_research_run")!;
const store = await enableResearch(tmpDir);
try {
const tool = api.tools.get("fn_research_run")!;
const result = await tool.execute(
"research-run-ff",
{ query: "test query", wait_for_completion: false },
undefined,
undefined,
makeCtx(tmpDir),
);
const result = await tool.execute(
"research-run-ff",
{ query: "test query", wait_for_completion: false },
undefined,
undefined,
makeCtx(tmpDir),
);
expect(result.content[0].text).toContain("Start the project engine to process pending runs");
expect(result.details.status).toBe("queued");
expect(result.content[0].text).toContain("Start the project engine to process pending runs");
expect(result.details.status).toBe("queued");
} finally {
store.close();
}
});
it("fn_research_run waits and returns terminal run details when wait_for_completion is true", async () => {
const store = await enableResearch(tmpDir);
const tool = api.tools.get("fn_research_run")!;
const researchStore = store.getResearchStore();
try {
const tool = api.tools.get("fn_research_run")!;
const researchStore = store.getResearchStore();
const settleRunToCompleted = () => {
const queuedRun = researchStore.listRuns({ limit: 1 })[0];
if (!queuedRun) {
return false;
}
if (queuedRun.status === "completed") {
return true;
}
if (queuedRun.status === "queued") {
researchStore.updateRun(queuedRun.id, { status: "running" });
}
researchStore.updateRun(queuedRun.id, {
status: "completed",
results: { summary: "done", findings: [{ heading: "h1", content: "f1", sources: [] }], citations: [] },
});
return true;
};
if (!settleRunToCompleted()) {
const interval = setInterval(() => {
if (settleRunToCompleted()) {
clearInterval(interval);
const settleRunToCompleted = () => {
const queuedRun = researchStore.listRuns({ limit: 1 })[0];
if (!queuedRun) {
return false;
}
}, 25);
setTimeout(() => clearInterval(interval), 500);
if (queuedRun.status === "completed") {
return true;
}
if (queuedRun.status === "queued") {
researchStore.updateRun(queuedRun.id, { status: "running" });
}
researchStore.updateRun(queuedRun.id, {
status: "completed",
results: { summary: "done", findings: [{ heading: "h1", content: "f1", sources: [] }], citations: [] },
});
return true;
};
if (!settleRunToCompleted()) {
const interval = setInterval(() => {
if (settleRunToCompleted()) {
clearInterval(interval);
}
}, 25);
setTimeout(() => clearInterval(interval), 500);
}
const result = await tool.execute(
"research-run-wait",
{ query: "terminal query", wait_for_completion: true, max_wait_ms: 4000 },
undefined,
undefined,
makeCtx(tmpDir),
);
expect(result.details.status).toBe("completed");
expect(result.details.summary).toBe("done");
expect(result.content[0].text).toContain("is completed");
} finally {
store.close();
}
const result = await tool.execute(
"research-run-wait",
{ query: "terminal query", wait_for_completion: true, max_wait_ms: 4000 },
undefined,
undefined,
makeCtx(tmpDir),
);
expect(result.details.status).toBe("completed");
expect(result.details.summary).toBe("done");
expect(result.content[0].text).toContain("is completed");
});
});

View File

@@ -1,3 +1,6 @@
import { mkdtempSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
// Mock node:readline/promises before importing the module under test
@@ -31,6 +34,8 @@ vi.mock("../../project-resolver.js", () => ({
import { createInterface } from "node:readline/promises";
import { getStore } from "../../project-resolver.js";
const { TaskStore: ActualTaskStore } = await vi.importActual<typeof import("@fusion/core")>("@fusion/core");
// Import after mocks
const {
runMissionCreate,
@@ -931,14 +936,13 @@ describe("mission commands", () => {
});
it("operates end-to-end against a real temp-project store", async () => {
const { TaskStore } = await vi.importActual<typeof import("@fusion/core")>("@fusion/core");
const { mkdtempSync, rmSync } = await import("node:fs");
const { tmpdir } = await import("node:os");
const { join } = await import("node:path");
/*
* FNXC:CliTests 2026-06-14-01:04:
* The quarantine rescue must narrow genuinely slow CLI seams instead of widening test timeouts. Keep the real in-memory TaskStore coverage, but hoist module and stdlib loading out of the timed test body so this high-value mission/goal regression joins the default lane without per-test package-load overhead.
*/
const rootDir = mkdtempSync(join(tmpdir(), "kb-mission-cli-goals-"));
const globalDir = join(rootDir, ".fusion-global-settings");
const store = new TaskStore(rootDir, globalDir, { inMemoryDb: true });
const store = new ActualTaskStore(rootDir, globalDir, { inMemoryDb: true });
await store.init();
const mission = store.getMissionStore().createMission({ title: "CLI Mission" });

View File

@@ -123,6 +123,11 @@ describe("plugin commands", () => {
const tempDirs: string[] = [];
beforeEach(() => {
/*
* FNXC:CliTests 2026-06-14-01:28:
* FN-6430's plugin-suite rescue depends on clearing loader path state before every case so a package-load sibling cannot inherit the previous taskStore root.
* Reset the hoisted PluginLoader/PluginStore mocks rather than widening timeouts or serializing the whole CLI lane.
*/
mocks.reset();
vi.mocked(resolveProject).mockResolvedValue({ projectPath: "/tmp/fn-project" } as never);
vi.spyOn(console, "log").mockImplementation(() => {});

View File

@@ -4,56 +4,20 @@ import { computeMaxWorkers } from "../core/src/__test-utils__/vitest-workers";
const maxWorkers = computeMaxWorkers();
const quarantinedCliTests = [
const quarantinedCliTests: string[] = [
/*
FNXC:CliTests 2026-06-14-01:36:
The full @runfusion/fusion package lane times out or leaks mock state across these CLI integration-heavy files under changed-test load, while the same files pass in smaller direct runs.
Quarantine them per the flaky-test deletion ratchet instead of raising the 5s test timeout or relaxing assertions.
FNXC:CliTests 2026-06-14-01:45:
The next full changed-test run exposed five more CLI files that time out only under package-wide load after the dashboard and desktop lanes, and the same five files passed together in a direct run.
Keep excluding load-sensitive offenders from the default CLI lane until their shared fixture and cleanup races are fixed.
FNXC:CliTests 2026-06-14-01:48:
Re-running the CLI package lane after that quarantine exposed another batch of package-load-only timeouts in extension, goal-store, registration, and init tests.
These files also passed together in a direct run, so keep applying the deletion-ratchet quarantine instead of increasing global CLI timeouts.
FNXC:CliTests 2026-06-14-01:58:
mission.test includes a real temp-project end-to-end mission-goal case that exceeds the default 5s CLI timeout even as a standalone targeted run, then passes only when given 30s.
Quarantine the slow file rather than encoding a longer timeout into the default package lane.
FNXC:CliTests 2026-06-13-20:05:
FN-6421 quarantines the remaining FN-6419 CLI lane offenders after standalone evidence showed the agent-provisioning and serve suites pass directly but are integration-heavy under package-wide load.
Keep them on the 14-day deletion clock rather than widening CLI test timeouts or loosening assertions.
The full @runfusion/fusion package lane timed out or leaked mock state across 24 CLI integration-heavy files under changed-test load, while the same files passed in smaller direct runs.
They were quarantined per the flaky-test deletion ratchet instead of raising the 5s test timeout or relaxing assertions.
FNXC:CliTests 2026-06-14-05:50:
FN-6427 triaged all 24 quarantined CLI files and kept them in-window: 0 rescued, 0 deleted, 24 kept until the 2026-06-27 and 2026-06-28 deletion deadlines.
Fresh direct runs passed, and the shared package-load signature needs a broader fixture/concurrency rescue before these high-value suites can safely rejoin the default lane.
Fresh direct runs passed, and the shared package-load signature needed a broader fixture/concurrency rescue before these high-value suites could safely rejoin the default lane.
FNXC:CliTests 2026-06-14-01:42:
FN-6430 rescued all 24 CLI quarantine entries after fixing shared test-isolation cleanup, rejecting inherited HOME roots from other invocations, removing pre-existing file-wide timeout bumps, and narrowing the mission real-store seam.
Keep this array as an explicit empty rescue ledger so future CLI quarantines add entries in lockstep with scripts/lib/test-quarantine.json instead of resurrecting stale excludes.
*/
"src/__tests__/bin.test.ts",
"src/__tests__/extension.test.ts",
"src/__tests__/extension-agent-provisioning.test.ts",
"src/__tests__/extension-experiment-finalize.test.ts",
"src/__tests__/extension-github-tracking.test.ts",
"src/__tests__/extension-goal-tools.test.ts",
"src/__tests__/extension-goal-tools-audit.test.ts",
"src/__tests__/extension-insights.test.ts",
"src/__tests__/extension-mission-goal-tools.test.ts",
"src/__tests__/extension-task-tools.test.ts",
"src/__tests__/goal-store-resolution.test.ts",
"src/commands/__tests__/mission.test.ts",
"src/__tests__/plugin-sdk-export.test.ts",
"src/__tests__/project-context.test.ts",
"src/__tests__/research-extension-tools.test.ts",
"src/__tests__/task-delete-allow-resurrection.test.ts",
"src/__tests__/task-retry.test.ts",
"src/__tests__/vitest-workspace-resolution.test.ts",
"src/commands/__tests__/agent-import.test.ts",
"src/commands/__tests__/dashboard.test.ts",
"src/commands/__tests__/ensure-project-registered.test.ts",
"src/commands/__tests__/init.test.ts",
"src/commands/__tests__/plugin.test.ts",
"src/commands/__tests__/serve.test.ts",
];
export default defineConfig({

View File

@@ -16,7 +16,7 @@ import { afterEach, expect } from "vitest";
import { createRequire, syncBuiltinESMExports } from "node:module";
import { randomUUID } from "node:crypto";
import { tmpdir } from "node:os";
import { basename, dirname, join, resolve } from "node:path";
import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
import { promisify } from "node:util";
import { isMainThread } from "node:worker_threads";
import { assertOutsideRealFusionPath } from "../test-safety.js";
@@ -370,13 +370,34 @@ function redirectTmpdirPrefix<T>(prefix: T): T {
return join(ensureTmpdirRedirectSink(), basename(prefix)) as T;
}
function isCurrentWorkerHome(path: string | undefined): boolean {
if (!path) return false;
const resolved = (() => {
try {
return realpathSync(path);
} catch {
return resolve(path);
}
})();
const relativeHome = relative(WORKER_ROOT, resolved);
return Boolean(relativeHome)
&& !relativeHome.startsWith("..")
&& !isAbsolute(relativeHome)
&& basename(resolved).startsWith(TEST_HOME_PREFIX);
}
function ensureIsolatedHome(): void {
const existingHome = process.env.HOME ?? process.env.USERPROFILE;
if (existingHome && existingHome.includes(tmpdir()) && existingHome.includes(TEST_HOME_PREFIX)) {
if (isCurrentWorkerHome(existingHome)) {
return;
}
ensureWorkerRoot();
/*
FNXC:TestIsolation 2026-06-14-00:31:
Nested or recursive Vitest lanes may inherit a parent worker's `fn-test-home-*` HOME value, which shares global settings/cache state across files and keeps CLI suites load-sensitive.
Reuse HOME only when it belongs to this invocation's worker root; otherwise mint a fresh per-run HOME under `fusion-test-workers-*` so teardown removes it with the worker root.
*/
const tempHome = realpathSync(mkdtempSync(join(WORKER_ROOT, `${TEST_HOME_PREFIX}${process.pid}-`)));
process.env.HOME = tempHome;
process.env.USERPROFILE = tempHome;

View File

@@ -6,12 +6,13 @@
* the run-local worker/home directories as leaks.
*/
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
import { mkdtempSync, readdirSync, rmSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { join, resolve } from "node:path";
export const WORKER_ROOT_OWNER_FILE = ".fusion-test-worker-root-owner";
const FUSION_TEST_RUN_TOKEN_ENV = "FUSION_TEST_RUN_TOKEN";
const LEGACY_TEST_HOME_PREFIX = "fn-test-home-";
let workerRootRmSync = rmSync;
let workerRootSleepMsSync = sleepMsSync;
@@ -33,6 +34,29 @@ function isEnoent(error: unknown): boolean {
return Boolean(error && typeof error === "object" && "code" in error && error.code === "ENOENT");
}
export function removeLegacyTopLevelHomeRoots(tempRoot = tmpdir()): void {
/*
FNXC:TestIsolation 2026-06-14-00:36:
FN-6430 found stale top-level `fn-test-home-*` roots after CLI package-load runs; current workers create HOME under `fusion-test-workers-*`, so top-level homes are legacy leftovers that can bleed settings/cache state into nested lanes.
Sweep only a single temp-root level by prefix during setup/teardown, never a recursive temp-tree walk.
*/
let entries: string[] = [];
try {
entries = readdirSync(tempRoot);
} catch {
return;
}
for (const entry of entries) {
if (!entry.startsWith(LEGACY_TEST_HOME_PREFIX)) continue;
try {
workerRootRmSync(join(tempRoot, entry), { recursive: true, force: true });
} catch {
// Best effort only. A future invocation will retry the bounded prefix sweep.
}
}
}
export function removeWorkerRootWithRetry(workerRoot: string, retries = 3, delayMs = 75): void {
let lastError: unknown = null;
for (let attempt = 1; attempt <= retries; attempt++) {
@@ -53,6 +77,7 @@ export function removeWorkerRootWithRetry(workerRoot: string, retries = 3, delay
}
export default function setup(): () => Promise<void> {
removeLegacyTopLevelHomeRoots();
// Use a fresh root for each Vitest invocation. A static shared root makes the
// setup-time redirect sweep proportional to stale directories left by every
// prior interrupted run.
@@ -78,5 +103,6 @@ export default function setup(): () => Promise<void> {
// redirected temp dirs are still closing. Retry boundedly so a brief busy-fd
// race does not leak the per-invocation fusion-test-workers-* root.
removeWorkerRootWithRetry(workerRoot);
removeLegacyTopLevelHomeRoots();
};
}

View File

@@ -6,6 +6,7 @@ import { __fusionWorkerRootCleanupTestHooks } from "../__test-utils__/vitest-set
import setup, {
__setWorkerRootRmSyncForTests,
__setWorkerRootSleepMsSyncForTests,
removeLegacyTopLevelHomeRoots,
} from "../__test-utils__/vitest-teardown";
const createdPaths: string[] = [];
@@ -88,6 +89,20 @@ describe("vitest global teardown worker-root cleanup", () => {
expect(existsSync(workerRoot)).toBe(false);
});
it("sweeps legacy top-level temp HOME roots without walking unrelated temp entries", () => {
const tempRoot = remember(mkdtempSync(join(tmpdir(), "fusion-test-home-sweep-root-")));
const legacyHome = join(tempRoot, "fn-test-home-stale");
const unrelated = join(tempRoot, "fusion-test-workers-current");
mkdirSync(legacyHome, { recursive: true });
mkdirSync(unrelated, { recursive: true });
writeFileSync(join(legacyHome, "payload.txt"), "legacy home state");
removeLegacyTopLevelHomeRoots(tempRoot);
expect(existsSync(legacyHome)).toBe(false);
expect(existsSync(unrelated)).toBe(true);
});
it("removes a self-minted fallback worker root during exit cleanup", () => {
const workerRoot = remember(mkdtempSync(join(tmpdir(), "fusion-test-workers-self-minted-")));
const workerDir = join(workerRoot, `w-${process.pid}-fallback`);

View File

@@ -1,9 +1,9 @@
{
"$comment": "Flaky-test quarantine ledger (deletion ratchet \u2014 see AGENTS.md 'Flaky tests: quarantine on sight' and docs/testing.md 'Quarantine ledger and the deletion ratchet'). A test observed failing without a corresponding real bug is quarantined ON SIGHT: add an entry here AND a matching one-line `exclude` entry in that package's vitest config, in the same commit. Every entry needs a non-empty `reason` (link the failing run) and a `quarantinedAt` date \u2014 the entry expires 14 days later, at which point the test file is DELETED unless someone rescues it with evidence it catches real regressions plus a root-cause fix (never appeasement). There is deliberately no loader module and no automation around this file: it is a dated record, the vitest config exclude is the mechanism, and the sweep is policy executed by whoever touches the suite.",
"$comment": "Flaky-test quarantine ledger (deletion ratchet — see AGENTS.md 'Flaky tests: quarantine on sight' and docs/testing.md 'Quarantine ledger and the deletion ratchet'). A test observed failing without a corresponding real bug is quarantined ON SIGHT: add an entry here AND a matching one-line `exclude` entry in that package's vitest config, in the same commit. Every entry needs a non-empty `reason` (link the failing run) and a `quarantinedAt` date — the entry expires 14 days later, at which point the test file is DELETED unless someone rescues it with evidence it catches real regressions plus a root-cause fix (never appeasement). There is deliberately no loader module and no automation around this file: it is a dated record, the vitest config exclude is the mechanism, and the sweep is policy executed by whoever touches the suite.",
"entries": [
{
"file": "packages/engine/src/__tests__/merger-ai-cleanup-active-session.test.ts",
"reason": "Flake: pruneExistingAiMergeWorktrees skips active-session paths \u2014 active-session temp AI merge dir was unexpectedly pruned during pnpm --filter @fusion/engine test in FN-6206 verification, while the same file passed standalone. Root cause suspected: realpathSync resolution mismatch or readdirSync mock interaction with activeSessionRegistry singleton under concurrent engine suite load. Discovered during FN-6206.",
"reason": "Flake: pruneExistingAiMergeWorktrees skips active-session paths — active-session temp AI merge dir was unexpectedly pruned during pnpm --filter @fusion/engine test in FN-6206 verification, while the same file passed standalone. Root cause suspected: realpathSync resolution mismatch or readdirSync mock interaction with activeSessionRegistry singleton under concurrent engine suite load. Discovered during FN-6206.",
"quarantinedAt": "2026-06-10"
},
{
@@ -60,126 +60,6 @@
"file": "packages/dashboard/src/__tests__/routes-git.test.ts",
"reason": "Flake observed during `pnpm test` dashboard api:curated lane on 2026-06-13: `Git Management endpoints > GET /git/branches/:name/commits > respects limit parameter` returned 400 instead of 200 under concurrent dashboard API tests. The same filtered file passed standalone immediately afterward (`pnpm --filter @fusion/dashboard exec vitest run --project dashboard-api-quality src/__tests__/routes-git.test.ts -t \"respects limit parameter\" --silent=passed-only --reporter=dot`, 3/3), indicating suite-load or fixture-state sensitivity rather than a confirmed product bug. Quarantined instead of loosening assertions.",
"quarantinedAt": "2026-06-13"
},
{
"file": "packages/cli/src/__tests__/bin.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14: full `@runfusion/fusion` package run timed out in `bin command routing and fallbacks > routes backup create/list/cleanup/restore` at the 5s test timeout after dashboard/desktop changed-package load. A smaller direct run with bin/project-context/task-retry passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/bin.test.ts src/__tests__/project-context.test.ts src/__tests__/task-retry.test.ts --silent=passed-only --reporter=dot`, 83/83), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/extension.test.ts",
"reason": "Flake observed during `pnpm --filter @runfusion/fusion test` on 2026-06-14 after earlier CLI quarantines: `fn pi extension > research tools > fn_research_run waits and returns terminal run details when wait_for_completion is true` returned queued instead of completed under the full package lane. The same named test passed standalone immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension.test.ts -t \"fn_research_run waits and returns terminal run details\" --silent=passed-only --reporter=dot`, 1/1), indicating suite-order or shared research fixture sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/extension-experiment-finalize.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm --filter @runfusion/fusion test` on 2026-06-14 after earlier CLI quarantines: full package run timed out in `extension fn_experiment_finalize > supports dry-run preview` at the 5s test timeout. A direct run with the newly exposed extension/goal/init offenders passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-experiment-finalize.test.ts src/__tests__/goal-store-resolution.test.ts src/commands/__tests__/ensure-project-registered.test.ts src/commands/__tests__/init.test.ts --silent=passed-only --reporter=dot`, 26/26), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/extension-github-tracking.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14 after earlier CLI quarantines: full `@runfusion/fusion` package run timed out in `extension github tracking hook wiring > fn_task_create triggers registered task-created hook exactly once` at the 5s test timeout after dashboard/desktop changed-package load. A direct run with the five newly failing CLI files passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-github-tracking.test.ts src/__tests__/extension-goal-tools-audit.test.ts src/__tests__/extension-task-tools.test.ts src/__tests__/task-delete-allow-resurrection.test.ts src/__tests__/vitest-workspace-resolution.test.ts --silent=passed-only --reporter=dot`, 11/11), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/extension-goal-tools.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm --filter @runfusion/fusion test` on 2026-06-14 after the first CLI quarantine batch: `extension goal retrieval tools > truncates goal descriptions in fn_goal_list while fn_goal_show keeps full detail` timed out at the 5s test timeout under the full package lane. A smaller direct run with the extension goal/insight/mission/research files passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-goal-tools.test.ts src/__tests__/extension-insights.test.ts src/__tests__/extension-mission-goal-tools.test.ts src/__tests__/research-extension-tools.test.ts --silent=passed-only --reporter=dot`, 25/25), indicating suite-load sensitivity.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/extension-goal-tools-audit.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14 after earlier CLI quarantines: full `@runfusion/fusion` package run timed out in `extension goal tools retrieval audit > emits retrieval audit for fn_goal_list and fn_goal_show branches`, then produced ENOTEMPTY cleanup fallout. A direct run with the five newly failing CLI files passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-github-tracking.test.ts src/__tests__/extension-goal-tools-audit.test.ts src/__tests__/extension-task-tools.test.ts src/__tests__/task-delete-allow-resurrection.test.ts src/__tests__/vitest-workspace-resolution.test.ts --silent=passed-only --reporter=dot`, 11/11), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/extension-insights.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm --filter @runfusion/fusion test` on 2026-06-14 after the first CLI quarantine batch: `fn insight extension tools > lists and shows persisted insights` timed out at the 5s test timeout under the full package lane. A smaller direct run with the extension goal/insight/mission/research files passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-goal-tools.test.ts src/__tests__/extension-insights.test.ts src/__tests__/extension-mission-goal-tools.test.ts src/__tests__/research-extension-tools.test.ts --silent=passed-only --reporter=dot`, 25/25), indicating suite-load sensitivity.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/extension-mission-goal-tools.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm --filter @runfusion/fusion test` on 2026-06-14 after the first CLI quarantine batch: `extension mission goal tools > returns stable missing mission and goal errors` timed out at the 5s test timeout under the full package lane. A smaller direct run with the extension goal/insight/mission/research files passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-goal-tools.test.ts src/__tests__/extension-insights.test.ts src/__tests__/extension-mission-goal-tools.test.ts src/__tests__/research-extension-tools.test.ts --silent=passed-only --reporter=dot`, 25/25), indicating suite-load sensitivity.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/extension-task-tools.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14 after earlier CLI quarantines: full `@runfusion/fusion` package run timed out in `extension task tools resolve repo root from worktrees > uses canonical project root for fn_task_show and fn_task_list from worktree cwd` at the test's 20s timeout. A direct run with the five newly failing CLI files passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-github-tracking.test.ts src/__tests__/extension-goal-tools-audit.test.ts src/__tests__/extension-task-tools.test.ts src/__tests__/task-delete-allow-resurrection.test.ts src/__tests__/vitest-workspace-resolution.test.ts --silent=passed-only --reporter=dot`, 11/11), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/goal-store-resolution.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm --filter @runfusion/fusion test` on 2026-06-14 after earlier CLI quarantines: full package run timed out in `extension goal tools store resolution > returns canonical project goals when invoked from a .fusion/worktrees cwd`, then produced ENOTEMPTY cleanup fallout. A direct run with the newly exposed extension/goal/init offenders passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-experiment-finalize.test.ts src/__tests__/goal-store-resolution.test.ts src/commands/__tests__/ensure-project-registered.test.ts src/commands/__tests__/init.test.ts --silent=passed-only --reporter=dot`, 26/26), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/plugin-sdk-export.test.ts",
"reason": "Default CLI package lane failure observed on 2026-06-14: `plugin-sdk export surface > has no @fusion specifiers in built plugin-sdk declaration artifact when present` failed standalone because an existing generated `packages/cli/dist/plugin-sdk/index.d.ts` contained stale `@fusion/core` specifiers. The test inspects optional generated dist output when present, so it is not stable as a source package-lane test in worktrees with ignored build artifacts. Quarantined from the default lane instead of making `pnpm test` depend on rebuilding or deleting ignored dist output.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/project-context.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14: full `@runfusion/fusion` package run timed out in `project-context > resolveProject > should resolve unregistered local project from cwd` at the 5s test timeout after dashboard/desktop changed-package load. A smaller direct run with bin/project-context/task-retry passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/bin.test.ts src/__tests__/project-context.test.ts src/__tests__/task-retry.test.ts --silent=passed-only --reporter=dot`, 83/83), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/research-extension-tools.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm --filter @runfusion/fusion test` on 2026-06-14 after the first CLI quarantine batch: `research extension tools` timed out, hit ENOTEMPTY cleanup fallout, and then observed an empty run list under the full package lane. A smaller direct run with the extension goal/insight/mission/research files passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-goal-tools.test.ts src/__tests__/extension-insights.test.ts src/__tests__/extension-mission-goal-tools.test.ts src/__tests__/research-extension-tools.test.ts --silent=passed-only --reporter=dot`, 25/25), indicating suite-load/order sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/task-delete-allow-resurrection.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14 after earlier CLI quarantines: full `@runfusion/fusion` package run timed out in `task delete allowResurrection plumbing > fn_task_delete forwards allowResurrection=true` at the 5s test timeout after dashboard/desktop changed-package load. A direct run with the five newly failing CLI files passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-github-tracking.test.ts src/__tests__/extension-goal-tools-audit.test.ts src/__tests__/extension-task-tools.test.ts src/__tests__/task-delete-allow-resurrection.test.ts src/__tests__/vitest-workspace-resolution.test.ts --silent=passed-only --reporter=dot`, 11/11), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/task-retry.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14: full `@runfusion/fusion` package run timed out in `runTaskRetry > clears the deadlock auto-pause when retrying a failed task` at the 5s test timeout after dashboard/desktop changed-package load. A smaller direct run with bin/project-context/task-retry passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/bin.test.ts src/__tests__/project-context.test.ts src/__tests__/task-retry.test.ts --silent=passed-only --reporter=dot`, 83/83), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/vitest-workspace-resolution.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14 after earlier CLI quarantines: full `@runfusion/fusion` package run timed out in `CLI Vitest workspace resolution > resolves non-mocked symbols from internal workspace packages when dist outputs are absent` at the 30s test timeout after dashboard/desktop changed-package load. A direct run with the five newly failing CLI files passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-github-tracking.test.ts src/__tests__/extension-goal-tools-audit.test.ts src/__tests__/extension-task-tools.test.ts src/__tests__/task-delete-allow-resurrection.test.ts src/__tests__/vitest-workspace-resolution.test.ts --silent=passed-only --reporter=dot`, 11/11), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/commands/__tests__/agent-import.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14: full `@runfusion/fusion` package run timed out in `agent-import > skill import > imports skills from tar.gz archive` at the 5s test timeout after dashboard/desktop changed-package load. A smaller direct run with agent-import/dashboard/plugin passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/commands/__tests__/agent-import.test.ts src/commands/__tests__/dashboard.test.ts src/commands/__tests__/plugin.test.ts --silent=passed-only --reporter=dot`, 112/112), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/commands/__tests__/dashboard.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14: full `@runfusion/fusion` package run timed out in one CentralCore cleanup diagnostics case and then missed the expected warning in a sibling case under package-wide load. A smaller direct run with agent-import/dashboard/plugin passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/commands/__tests__/agent-import.test.ts src/commands/__tests__/dashboard.test.ts src/commands/__tests__/plugin.test.ts --silent=passed-only --reporter=dot`, 112/112), indicating suite-load/order sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/commands/__tests__/ensure-project-registered.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14 after earlier CLI quarantines: full `@runfusion/fusion` package run timed out in `ensureCwdProjectRegistered > returns existing registered project without writing files` at the 5s test timeout after dashboard/desktop changed-package load. A smaller direct run with extension-github-tracking and ensure-project-registered passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-github-tracking.test.ts src/commands/__tests__/ensure-project-registered.test.ts --silent=passed-only --reporter=dot`, 5/5), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/commands/__tests__/init.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm --filter @runfusion/fusion test` on 2026-06-14 after earlier CLI quarantines: full package run timed out in `init command > should append local storage directories to existing .gitignore` at the 5s test timeout. A direct run with the newly exposed extension/goal/init offenders passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-experiment-finalize.test.ts src/__tests__/goal-store-resolution.test.ts src/commands/__tests__/ensure-project-registered.test.ts src/commands/__tests__/init.test.ts --silent=passed-only --reporter=dot`, 26/26), indicating suite-load sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/commands/__tests__/mission.test.ts",
"reason": "Standalone slow CLI test observed during `pnpm test` on 2026-06-14 after earlier CLI quarantines: full `@runfusion/fusion` package run timed out in `mission commands > mission goal commands > operates end-to-end against a real temp-project store` at the 5s test timeout. The same named test also timed out standalone at 5s, then passed only when explicitly run with `--testTimeout=30000` (`pnpm --filter @runfusion/fusion exec vitest run src/commands/__tests__/mission.test.ts -t \"operates end-to-end against a real temp-project store\" --testTimeout=30000 --silent=passed-only --reporter=dot`, 1/1 in 8.48s), so it is quarantined as a slow test instead of appeased with a wider timeout.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/commands/__tests__/plugin.test.ts",
"reason": "Slow/flaky CLI lane observed during `pnpm test` on 2026-06-14: full `@runfusion/fusion` package run timed out in `writes runPluginInstall metadata to central tables only` and leaked cross-test plugin path state into `includes getRootDir on the plugin loader taskStore mock`. A smaller direct run with agent-import/dashboard/plugin passed immediately afterward (`pnpm --filter @runfusion/fusion exec vitest run src/commands/__tests__/agent-import.test.ts src/commands/__tests__/dashboard.test.ts src/commands/__tests__/plugin.test.ts --silent=passed-only --reporter=dot`, 112/112), indicating suite-load/order sensitivity rather than a confirmed product bug.",
"quarantinedAt": "2026-06-14"
},
{
"file": "packages/cli/src/__tests__/extension-agent-provisioning.test.ts",
"reason": "Slow/flaky CLI lane offender observed during FN-6419 broad `pnpm test` / targeted @runfusion/fusion verification: the extension agent provisioning suite exercises real temp projects and privileged `fn_agent_create`/`fn_agent_delete` extension tools, making it sensitive to package-wide CLI load and temp cleanup races. FN-6421 local cross-check after install found the current quarantined CLI lane green, and the two-offender direct run passed immediately (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-agent-provisioning.test.ts src/commands/__tests__/serve.test.ts --silent=passed-only --reporter=dot`, 55/55), so this is quarantined from the default lane rather than appeased with broader timeouts.",
"quarantinedAt": "2026-06-13"
},
{
"file": "packages/cli/src/commands/__tests__/serve.test.ts",
"reason": "Slow/flaky CLI lane offender observed during FN-6419 broad `pnpm test` / targeted @runfusion/fusion verification: the serve command suite is a large multi-project integration harness with mocked constructible engine classes, EventEmitter routing, timers, and temp directories, making it sensitive to package-wide CLI load and cleanup races. FN-6421 local cross-check after install found the current quarantined CLI lane green, and the two-offender direct run passed immediately (`pnpm --filter @runfusion/fusion exec vitest run src/__tests__/extension-agent-provisioning.test.ts src/commands/__tests__/serve.test.ts --silent=passed-only --reporter=dot`, 55/55), so this is quarantined from the default lane rather than appeased with wider test timeouts or loosened assertions.",
"quarantinedAt": "2026-06-13"
}
]
}