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:
@@ -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.
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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" });
|
||||
|
||||
@@ -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(() => {});
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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`);
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user