FN-8951: repair script-test governance drift

Keep test-shard timing governance aligned with the current workspace and workflow seams.

- Add a safe timing-snapshot pruning mode with coverage.
- Align Todo plugin Vitest isolation and Docker dependency manifests.
- Refresh workflow reliability evidence and remove deleted test timings.

Files changed:
 Dockerfile                                         |  7 ++-
 docs/testing.md                                    |  9 ++-
 plugins/fusion-plugin-todos/vitest.config.ts       | 26 ++++++--
 scripts/__tests__/ci-test-shard-timings.test.mjs   | 71 ++++++++++++++++++++++
 scripts/ci-test-shard.mjs                          | 65 ++++++++++++++++++--
 .../lib/workflow-reliability-release-check.json    | 22 +++----
 scripts/test-timings.json                          | 21 -------
 7 files changed, 175 insertions(+), 46 deletions(-)

Fusion-Task-Id: FN-8951

Fusion-Task-Lineage: fbf7e79f-4cb2-43e2-9982-09f3f94de70d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
This commit is contained in:
gsxdsm
2026-08-10 12:09:20 -07:00
parent 81139dbbd0
commit 878db6dca7
7 changed files with 175 additions and 46 deletions

View File

@@ -10,9 +10,9 @@ RUN apt-get update \
RUN corepack enable && corepack prepare pnpm@10.33.0 --activate
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
# FNXC:DockerBuild 2026-07-22-13:00: The dependency-cache layer must include every
# selected workspace manifest before frozen install; otherwise pnpm omits a package's
# dependencies and the later full-workspace build can fail despite its source being copied.
# FNXC:DockerBuild 2026-08-10-18:03: This list is derived from pnpm-workspace.yaml.
# Every selected workspace manifest must be copied before frozen install, or pnpm
# omits its dependencies and the later full-workspace image build can fail.
COPY packages/cli/package.json ./packages/cli/package.json
COPY packages/cli-alias/package.json ./packages/cli-alias/package.json
COPY packages/core/package.json ./packages/core/package.json
@@ -30,6 +30,7 @@ COPY plugins/examples/fusion-plugin-ci-status/package.json ./plugins/examples/fu
COPY plugins/examples/fusion-plugin-notification/package.json ./plugins/examples/fusion-plugin-notification/package.json
COPY plugins/examples/fusion-plugin-settings-demo/package.json ./plugins/examples/fusion-plugin-settings-demo/package.json
COPY plugins/fusion-plugin-acp-runtime/package.json ./plugins/fusion-plugin-acp-runtime/package.json
COPY plugins/fusion-plugin-todos/package.json ./plugins/fusion-plugin-todos/package.json
COPY plugins/fusion-plugin-compound-engineering/package.json ./plugins/fusion-plugin-compound-engineering/package.json
COPY plugins/fusion-plugin-linear-import/package.json ./plugins/fusion-plugin-linear-import/package.json
COPY plugins/fusion-plugin-paperclip-runtime/package.json ./plugins/fusion-plugin-paperclip-runtime/package.json

View File

@@ -520,7 +520,14 @@ quo, never below it) — it does **not** fail the build. Refresh is **manual/sch
the default branch only**: each CI shard uploads per-shard JSON timing artifacts (U1), and
`node scripts/ci-test-shard.mjs --write-timings` merges them into the snapshot. Download the
shard artifacts into `.timings/` first (the default lookup directory), or pass
`--inputs-dir <path>` to point at wherever they were downloaded. A future
`--inputs-dir <path>` to point at wherever they were downloaded.
<!-- FNXC:CITestSharding 2026-08-10-18:12: A deleted test can leave a phantom path in the committed timing snapshot. Prune only that drift without fabricating fresh timing evidence or resetting the staleness budget. -->
When deleted test files leave phantom snapshot entries, run
`node scripts/ci-test-shard.mjs --prune-timings`. Pruning removes only paths absent from disk,
drops packages with no remaining paths, and **never restamps `capturedAt`**. A real refresh still
requires `--write-timings` with timing artifacts, and the 30-day staleness budget still applies. A future
scheduled job can gate on freshness via `node scripts/ci-test-shard.mjs --check-timings-staleness`,
which exits non-zero when the snapshot is missing or older than the 30-day budget. Package test
wrappers that launch Vitest (including `@fusion/desktop`) must forward caller reporter/output

View File

@@ -1,9 +1,25 @@
import { defineConfig } from "vitest/config";
import { fileURLToPath } from "node:url";
import { computeMaxWorkers } from "../../packages/core/src/__test-utils__/vitest-workers";
const maxWorkers = computeMaxWorkers();
/*
* FNXC:PluginTodosTesting 2026-08-10-18:03:
* Todos renders dashboard components, so it retains jsdom while using the
* workspace setup, teardown, and worker budget required for isolated Vitest runs.
*/
export default defineConfig({
resolve: { alias: {
"@fusion/core": fileURLToPath(new URL("../../packages/core/src/index.ts", import.meta.url)),
"@fusion/plugin-sdk": fileURLToPath(new URL("../../packages/plugin-sdk/src/index.ts", import.meta.url)),
} },
test: { environment: "jsdom", setupFiles: [fileURLToPath(new URL("../../packages/core/src/__test-utils__/vitest-setup.ts", import.meta.url))] },
resolve: {
alias: {
"@fusion/core": fileURLToPath(new URL("../../packages/core/src/index.ts", import.meta.url)),
"@fusion/plugin-sdk": fileURLToPath(new URL("../../packages/plugin-sdk/src/index.ts", import.meta.url)),
},
},
test: {
environment: "jsdom",
setupFiles: [fileURLToPath(new URL("../../packages/core/src/__test-utils__/vitest-setup.ts", import.meta.url))],
globalSetup: [fileURLToPath(new URL("../../packages/core/src/__test-utils__/vitest-teardown.ts", import.meta.url))],
maxWorkers,
},
});

View File

@@ -18,6 +18,7 @@ import {
attributeTestFile,
extractFileDurations,
buildTimingsSnapshot,
pruneMissingTimingFiles,
writeTimings,
TIMINGS_SNAPSHOT_RELATIVE,
TIMINGS_STALENESS_DAYS,
@@ -194,6 +195,76 @@ test("buildTimingsSnapshot omits a zero-test package entirely (no zero entry)",
}
});
test("pruneMissingTimingFiles removes absent paths, empty packages, and preserves capturedAt", () => {
const root = tmpRoot();
try {
const existing = "packages/core/live.test.ts";
mkdirSync(path.join(root, "packages/core"), { recursive: true });
writeFileSync(path.join(root, existing), "");
const input = {
capturedAt: "2026-07-24T13:09:41.412Z",
packages: {
"@fusion/core": { files: { [existing]: 700, "packages/core/missing.test.ts": 400 } },
"@fusion/engine": { files: { "packages/engine/missing.test.ts": 900 } },
},
};
const { snapshot, removedPaths } = pruneMissingTimingFiles(input, { projectRoot: root });
assert.deepEqual(removedPaths, ["packages/core/missing.test.ts", "packages/engine/missing.test.ts"]);
assert.equal(snapshot.capturedAt, input.capturedAt);
assert.equal(snapshot.packages["@fusion/core"].files[existing], 700);
assert.ok(!("@fusion/engine" in snapshot.packages));
assert.deepEqual(input.packages["@fusion/core"].files, { [existing]: 700, "packages/core/missing.test.ts": 400 });
} finally {
rmSync(root, { recursive: true, force: true });
}
});
test("pruneMissingTimingFiles leaves complete snapshots unchanged", () => {
const root = tmpRoot();
try {
const file = "packages/core/live.test.ts";
mkdirSync(path.join(root, "packages/core"), { recursive: true });
writeFileSync(path.join(root, file), "");
const input = { capturedAt: "2026-07-24T13:09:41.412Z", packages: { "@fusion/core": { files: { [file]: 700 } } } };
const { snapshot, removedPaths } = pruneMissingTimingFiles(input, { projectRoot: root });
assert.deepEqual(removedPaths, []);
assert.deepEqual(snapshot, input);
} finally {
rmSync(root, { recursive: true, force: true });
}
});
test("--prune-timings prunes the on-disk snapshot without restamping capturedAt", () => {
const root = tmpRoot();
try {
const live = "packages/core/live.test.ts";
mkdirSync(path.join(root, "packages/core"), { recursive: true });
writeFileSync(path.join(root, live), "");
const snapshotPath = path.join(root, TIMINGS_SNAPSHOT_RELATIVE);
mkdirSync(path.dirname(snapshotPath), { recursive: true });
writeFileSync(snapshotPath, `${JSON.stringify({
capturedAt: "2026-07-24T13:09:41.412Z",
packages: {
"@fusion/core": { files: { [live]: 700, "packages/core/deleted.test.ts": 400 } },
},
}, null, 2)}\n`);
const result = spawnSync(process.execPath, [path.join(REPO_ROOT, "scripts/ci-test-shard.mjs"), "--prune-timings"], {
cwd: root,
encoding: "utf8",
});
assert.equal(result.status, 0, result.stderr);
assert.match(result.stdout, /pruned 1 missing timing file/);
const pruned = JSON.parse(readFileSync(snapshotPath, "utf8"));
assert.equal(pruned.capturedAt, "2026-07-24T13:09:41.412Z");
assert.deepEqual(pruned.packages, { "@fusion/core": { files: { [live]: 700 } } });
} finally {
rmSync(root, { recursive: true, force: true });
}
});
test("writeTimings writes snapshot to scripts/test-timings.json under a project root", () => {
const root = tmpRoot();
try {

View File

@@ -14,7 +14,7 @@
*/
import { spawn, spawnSync } from "node:child_process";
import { globSync, readFileSync, writeFileSync, readdirSync, mkdirSync, renameSync } from "node:fs";
import { existsSync, globSync, readFileSync, writeFileSync, readdirSync, mkdirSync, renameSync } from "node:fs";
import { cpus } from "node:os";
import path from "node:path";
import { fileURLToPath } from "node:url";
@@ -1014,6 +1014,50 @@ export function readTimingsSnapshot(snapshotPath) {
}
}
/*
* FNXC:CITestSharding 2026-08-10-18:03:
* Deleted test files leave phantom snapshot entries that degrade shard balancing
* and keep the governance guard red. Pruning removes only entries whose file is
* gone and must never restamp capturedAt, because a fabricated timestamp would
* launder the 30-day staleness budget.
*/
/**
* Return a timing snapshot without entries whose repo-relative files no longer
* exist. The input snapshot is not mutated and its capturedAt value is copied
* byte-for-byte so pruning cannot substitute for a real timing refresh.
*
* @param {{ capturedAt: string, packages?: Record<string, { files?: Record<string, number> }> }} snapshot
* @param {{ projectRoot?: string, existsSync?: (path: string) => boolean }} [options]
* @returns {{ snapshot: object, removedPaths: string[] }}
*/
export function pruneMissingTimingFiles(snapshot, options = {}) {
const projectRoot = options.projectRoot ?? process.cwd();
const fileExists = options.existsSync ?? existsSync;
const packages = {};
const removedPaths = [];
for (const [packageName, packageTimings] of Object.entries(snapshot.packages ?? {})) {
const files = {};
for (const [file, duration] of Object.entries(packageTimings?.files ?? {})) {
if (fileExists(path.join(projectRoot, file))) {
files[file] = duration;
} else {
removedPaths.push(file);
}
}
if (Object.keys(files).length > 0) packages[packageName] = { ...packageTimings, files };
}
return { snapshot: { ...snapshot, packages }, removedPaths };
}
function writeTimingSnapshot(snapshotPath, snapshot) {
mkdirSync(path.dirname(snapshotPath), { recursive: true });
const tmp = `${snapshotPath}.tmp.${process.pid}`;
writeFileSync(tmp, `${JSON.stringify(snapshot, null, 2)}\n`, "utf8");
renameSync(tmp, snapshotPath);
}
/**
* Discover candidate vitest JSON reporter output files in a directory.
* Looks for files matching `*timings*.json` (the convention CI shards write).
@@ -1091,10 +1135,7 @@ export function writeTimings(options = {}) {
return { written: false, snapshot: existing, reason: "newer-snapshot" };
}
mkdirSync(path.dirname(snapshotPath), { recursive: true });
const tmp = `${snapshotPath}.tmp.${process.pid}`;
writeFileSync(tmp, `${JSON.stringify(snapshot, null, 2)}\n`, "utf8");
renameSync(tmp, snapshotPath);
writeTimingSnapshot(snapshotPath, snapshot);
const pkgCount = Object.keys(snapshot.packages).length;
console.log(`[ci-test-shard] wrote ${TIMINGS_SNAPSHOT_RELATIVE} (${pkgCount} packages, capturedAt ${capturedAt}).`);
return { written: true, snapshot };
@@ -1231,6 +1272,20 @@ export function buildShardCommands(shardEntries, options = {}) {
}
export async function main(argv = process.argv.slice(2), env = process.env) {
if (argv.includes("--prune-timings")) {
const snapshotPath = path.join(process.cwd(), TIMINGS_SNAPSHOT_RELATIVE);
const existing = readTimingsSnapshot(snapshotPath);
if (!existing) {
console.error("[ci-test-shard] no valid timing snapshot present; prune unavailable.");
process.exitCode = 1;
return;
}
const { snapshot, removedPaths } = pruneMissingTimingFiles(existing, { projectRoot: process.cwd() });
writeTimingSnapshot(snapshotPath, snapshot);
console.log(`[ci-test-shard] pruned ${removedPaths.length} missing timing file${removedPaths.length === 1 ? "" : "s"} from ${TIMINGS_SNAPSHOT_RELATIVE}.`);
return;
}
if (argv.includes("--write-timings")) {
const dirIdx = argv.indexOf("--inputs-dir");
const inputDir = dirIdx >= 0 ? argv[dirIdx + 1] : undefined;

View File

@@ -1,6 +1,6 @@
{
"version": 1,
"_comment": "FNXC:CustomWorkflowReliability 2026-06-19-00:00: FN-6694 requires this manifest to encode goal G-MPW67VQR-0001-97S3's release-check checklist as objective, runnable seam evidence instead of prose-only QA signoff.",
"_comment": "FNXC:CustomWorkflowReliability 2026-08-10-18:03: FN-6694 requires this manifest to encode goal G-MPW67VQR-0001-97S3's release-check checklist as objective, runnable seam evidence instead of prose-only QA signoff. FN-8951 repointed deleted pre-cutover seams to live tests that cover definitions and route validation, selection dispatch, REVISE completion, interpreter recovery, and restart durability.",
"checklist": [
{
"id": "author-import-save-discover-reload",
@@ -9,19 +9,19 @@
"seams": [
{
"package": "@fusion/core",
"file": "packages/core/src/__tests__/workflow-definition-store.test.ts"
"file": "packages/core/src/__tests__/postgres/workflow-definitions.pg.test.ts"
},
{
"package": "@fusion/dashboard",
"file": "packages/dashboard/src/routes/__tests__/workflow-import-export.test.ts"
"file": "packages/dashboard/src/routes/__tests__/workflow-validate-route.test.ts"
},
{
"package": "@fusion/dashboard",
"file": "packages/dashboard/src/routes/__tests__/workflow-design-route.test.ts"
"file": "packages/dashboard/src/routes/__tests__/workflow-setting-attribution.test.ts"
},
{
"package": "@fusion/core",
"file": "packages/core/src/__tests__/workflow-selection-store.test.ts"
"file": "packages/core/src/__tests__/workflow-ir-selection-cache.test.ts"
}
]
},
@@ -32,7 +32,7 @@
"seams": [
{
"package": "@fusion/core",
"file": "packages/core/src/__tests__/workflow-selection-store.test.ts"
"file": "packages/core/src/__tests__/custom-v1-workflow-dispatch.test.ts"
},
{
"package": "@fusion/engine",
@@ -59,7 +59,7 @@
},
{
"package": "@fusion/engine",
"file": "packages/engine/src/__tests__/executor-workflow-revision-scope.test.ts"
"file": "packages/engine/src/__tests__/executor-task-done-revise-verdict-guard.test.ts"
}
]
},
@@ -74,11 +74,11 @@
},
{
"package": "@fusion/engine",
"file": "packages/engine/src/__tests__/reliability-interactions/workflow-interpreter-cutover.test.ts"
"file": "packages/engine/src/__tests__/interpreter-merge-seam.test.ts"
},
{
"package": "@fusion/engine",
"file": "packages/engine/src/__tests__/self-healing-custom-workflow-recovery.test.ts"
"file": "packages/engine/src/__tests__/workflow-step-results-self-healing-recovery.test.ts"
}
]
},
@@ -89,11 +89,11 @@
"seams": [
{
"package": "@fusion/core",
"file": "packages/core/src/__tests__/workflow-restart-durability.test.ts"
"file": "packages/core/src/__tests__/postgres/workflow-continuation-slot.pg.test.ts"
},
{
"package": "@fusion/engine",
"file": "packages/engine/src/__tests__/self-healing-custom-workflow-recovery.test.ts"
"file": "packages/engine/src/__tests__/restart-recovery-coordinator.test.ts"
}
]
}

View File

@@ -326,7 +326,6 @@
"packages/core/src/__tests__/agent-companies-parser.test.ts": 300,
"packages/core/src/__tests__/agent-companies-types.test.ts": 100,
"packages/core/src/__tests__/agent-log-file-store.test.ts": 100,
"packages/core/src/__tests__/agent-logs-backend-mode.test.ts": 100,
"packages/core/src/__tests__/agent-memory-mode.test.ts": 100,
"packages/core/src/__tests__/agent-permission-policy-resolution.test.ts": 100,
"packages/core/src/__tests__/agent-permission-policy.test.ts": 100,
@@ -638,7 +637,6 @@
"packages/core/src/__tests__/symbol-locks.test.ts": 2200,
"packages/core/src/__tests__/system-metrics.test.ts": 100,
"packages/core/src/__tests__/task-age-staleness.test.ts": 100,
"packages/core/src/__tests__/task-delete-nonblocking-cleanup.test.ts": 100,
"packages/core/src/__tests__/task-detail-prompt-resilience.test.ts": 700,
"packages/core/src/__tests__/task-helpers.test.ts": 100,
"packages/core/src/__tests__/task-lineage.test.ts": 100,
@@ -666,7 +664,6 @@
"packages/core/src/__tests__/workflow-ir-foreach.test.ts": 100,
"packages/core/src/__tests__/workflow-ir-loop.test.ts": 100,
"packages/core/src/__tests__/workflow-ir-optional-group.test.ts": 100,
"packages/core/src/__tests__/workflow-ir-resolver.test.ts": 100,
"packages/core/src/__tests__/workflow-ir-settings.test.ts": 100,
"packages/core/src/__tests__/workflow-ir-validation.test.ts": 100,
"packages/core/src/__tests__/workflow-ir.test.ts": 100,
@@ -1135,8 +1132,6 @@
"packages/dashboard/app/components/__tests__/TestModeBanner.test.tsx": 100,
"packages/dashboard/app/components/__tests__/ThemeDropdown.test.tsx": 7400,
"packages/dashboard/app/components/__tests__/ThemeSelector.test.tsx": 3000,
"packages/dashboard/app/components/__tests__/TodoView.mobile-css.test.ts": 100,
"packages/dashboard/app/components/__tests__/TodoView.test.tsx": 1400,
"packages/dashboard/app/components/__tests__/TopProgressBar.test.tsx": 200,
"packages/dashboard/app/components/__tests__/TrackingRepoSelect.test.tsx": 300,
"packages/dashboard/app/components/__tests__/UpdateAvailableBanner.test.tsx": 600,
@@ -1196,7 +1191,6 @@
"packages/dashboard/app/components/__tests__/standing-instructions-template.test.ts": 100,
"packages/dashboard/app/components/__tests__/step-number-alignment.test.tsx": 200,
"packages/dashboard/app/components/__tests__/stuck-and-agent-card-border.test.ts": 500,
"packages/dashboard/app/components/__tests__/taskSorting.test.ts": 100,
"packages/dashboard/app/components/__tests__/useGitHubStarCount.test.tsx": 100,
"packages/dashboard/app/components/__tests__/utility-mobile.test.tsx": 200,
"packages/dashboard/app/components/__tests__/workflow-auto-layout.test.ts": 100,
@@ -1369,7 +1363,6 @@
"packages/dashboard/app/hooks/__tests__/useTerminalSessions.test.ts": 2800,
"packages/dashboard/app/hooks/__tests__/useTheme.test.ts": 1200,
"packages/dashboard/app/hooks/__tests__/useToast.test.tsx": 100,
"packages/dashboard/app/hooks/__tests__/useTodoLists.test.ts": 500,
"packages/dashboard/app/hooks/__tests__/useTouchActionGesture.test.ts": 100,
"packages/dashboard/app/hooks/__tests__/useUpdateCheck.test.ts": 500,
"packages/dashboard/app/hooks/__tests__/useUsageData.test.ts": 300,
@@ -1645,8 +1638,6 @@
"packages/dashboard/src/__tests__/task-revert-route.test.ts": 8500,
"packages/dashboard/src/__tests__/terminal-service.test.ts": 100,
"packages/dashboard/src/__tests__/test-isolation-guard.test.ts": 100,
"packages/dashboard/src/__tests__/todo-documentation.test.ts": 100,
"packages/dashboard/src/__tests__/todo-routes.test.ts": 100,
"packages/dashboard/src/__tests__/update-check.test.ts": 100,
"packages/dashboard/src/__tests__/usage.test.ts": 200,
"packages/dashboard/src/__tests__/view-chunk-manifest.test.ts": 100,
@@ -1751,7 +1742,6 @@
"packages/engine/src/__tests__/agent-action-gate-project-default.test.ts": 100,
"packages/engine/src/__tests__/agent-action-gate.test.ts": 2300,
"packages/engine/src/__tests__/agent-artifact-tools.test.ts": 100,
"packages/engine/src/__tests__/agent-assignment.test.ts": 100,
"packages/engine/src/__tests__/agent-document-tools.test.ts": 100,
"packages/engine/src/__tests__/agent-heartbeat-procedures.test.ts": 100,
"packages/engine/src/__tests__/agent-heartbeat-worktree.test.ts": 100,
@@ -1834,7 +1824,6 @@
"packages/engine/src/__tests__/engine-no-blocking-shellout.test.ts": 1500,
"packages/engine/src/__tests__/engine-public-api.test.ts": 100,
"packages/engine/src/__tests__/engine-singleton-lock.test.ts": 100,
"packages/engine/src/__tests__/ephemeral-worker-manager.test.ts": 100,
"packages/engine/src/__tests__/error-classifier.test.ts": 100,
"packages/engine/src/__tests__/eval-followups.test.ts": 100,
"packages/engine/src/__tests__/executor-abort-all-in-flight.test.ts": 100,
@@ -1938,7 +1927,6 @@
"packages/engine/src/__tests__/hybrid-executor.test.ts": 100,
"packages/engine/src/__tests__/identity-snapshot.test.ts": 100,
"packages/engine/src/__tests__/in-process-runtime.pg.test.ts": 800,
"packages/engine/src/__tests__/in-review-merge-stall-deadlock-recovery.test.ts": 100,
"packages/engine/src/__tests__/in-review-unmet-dependency-reconcile.test.ts": 100,
"packages/engine/src/__tests__/integration-branch.test.ts": 100,
"packages/engine/src/__tests__/interactive-ai-session.test.ts": 100,
@@ -1966,7 +1954,6 @@
"packages/engine/src/__tests__/merger-ai-merge-body.test.ts": 100,
"packages/engine/src/__tests__/merger-ai-prompts.test.ts": 100,
"packages/engine/src/__tests__/merger-ai-push-after-merge.test.ts": 4900,
"packages/engine/src/__tests__/merger-ai-push-divergence-conflict.test.ts": 5500,
"packages/engine/src/__tests__/merger-ai.test.ts": 16600,
"packages/engine/src/__tests__/merger-ancestor-shortcircuit.test.ts": 2000,
"packages/engine/src/__tests__/merger-auto-prerebase.real-git.test.ts": 200,
@@ -2026,7 +2013,6 @@
"packages/engine/src/__tests__/node-dispatch-validation.test.ts": 100,
"packages/engine/src/__tests__/node-health-monitor.test.ts": 100,
"packages/engine/src/__tests__/node-routing-policy.test.ts": 100,
"packages/engine/src/__tests__/notification-service.test.ts": 1100,
"packages/engine/src/__tests__/notifier.runtime.test.ts": 100,
"packages/engine/src/__tests__/notifier.test.ts": 500,
"packages/engine/src/__tests__/ntfy-provider.test.ts": 100,
@@ -2116,7 +2102,6 @@
"packages/engine/src/__tests__/reliability-interactions/concurrent-execute-race.test.ts": 300,
"packages/engine/src/__tests__/reliability-interactions/cross-node-assignment-wake.test.ts": 200,
"packages/engine/src/__tests__/reliability-interactions/dashboard-diff-boundary.test.ts": 100,
"packages/engine/src/__tests__/reliability-interactions/dependency-cycle-reconcile.test.ts": 12400,
"packages/engine/src/__tests__/reliability-interactions/dirty-integration-worktree.real-git.test.ts": 1000,
"packages/engine/src/__tests__/reliability-interactions/done-task-verification-benign.real-git.test.ts": 900,
"packages/engine/src/__tests__/reliability-interactions/dual-observe-merge-seam.test.ts": 100,
@@ -2197,7 +2182,6 @@
"packages/engine/src/__tests__/reliability-interactions/worktree-stale-lock-recovery.test.ts": 300,
"packages/engine/src/__tests__/reliability-interactions/worktree-stale-registration-recovery.real-git.test.ts": 700,
"packages/engine/src/__tests__/reliability-interactions/worktrunk-audit.test.ts": 100,
"packages/engine/src/__tests__/reliability-interactions/worktrunk-failure.test.ts": 100,
"packages/engine/src/__tests__/reliability-interactions/worktrunk-self-healing.test.ts": 100,
"packages/engine/src/__tests__/reliability-interactions/worktrunk-worktree-removal.test.ts": 100,
"packages/engine/src/__tests__/replan-target.test.ts": 100,
@@ -2205,7 +2189,6 @@
"packages/engine/src/__tests__/research-dispatcher.test.ts": 200,
"packages/engine/src/__tests__/research-step-runner.test.ts": 100,
"packages/engine/src/__tests__/restart-recovery-coordinator.test.ts": 100,
"packages/engine/src/__tests__/restart.integration.test.ts": 500,
"packages/engine/src/__tests__/retry-burned-logger.test.ts": 100,
"packages/engine/src/__tests__/retry-with-backoff.test.ts": 100,
"packages/engine/src/__tests__/review-checkout.test.ts": 200,
@@ -2258,7 +2241,6 @@
"packages/engine/src/__tests__/self-healing-cli-sessions.test.ts": 100,
"packages/engine/src/__tests__/self-healing-completion-fanout.test.ts": 100,
"packages/engine/src/__tests__/self-healing-db-corruption.test.ts": 300,
"packages/engine/src/__tests__/self-healing-fake-overlap-seam.test.ts": 100,
"packages/engine/src/__tests__/self-healing-fn-5488-fast-path-regressions.test.ts": 100,
"packages/engine/src/__tests__/self-healing-foreign-only-contamination.test.ts": 100,
"packages/engine/src/__tests__/self-healing-ghost-branch-recovery.test.ts": 100,
@@ -2326,7 +2308,6 @@
"packages/engine/src/__tests__/triage-soft-delete-abort.test.ts": 100,
"packages/engine/src/__tests__/triage-soft-delete-write-abort.test.ts": 100,
"packages/engine/src/__tests__/triage-split-into-subtasks-delete.test.ts": 100,
"packages/engine/src/__tests__/triage-stuck-requeue-preserve-draft.test.ts": 100,
"packages/engine/src/__tests__/triage-token-usage.test.ts": 500,
"packages/engine/src/__tests__/triage.test.ts": 1000,
"packages/engine/src/__tests__/tunnel-process-manager.test.ts": 100,
@@ -2390,11 +2371,9 @@
"packages/engine/src/__tests__/workspace-merger-deps-resilient.test.ts": 1800,
"packages/engine/src/__tests__/workspace-merger-lease.test.ts": 2800,
"packages/engine/src/__tests__/workspace-merger.test.ts": 4400,
"packages/engine/src/__tests__/worktree-acquisition-backend.test.ts": 100,
"packages/engine/src/__tests__/worktree-acquisition-pinned.test.ts": 300,
"packages/engine/src/__tests__/worktree-acquisition-secrets-env.test.ts": 200,
"packages/engine/src/__tests__/worktree-acquisition-workspace.test.ts": 3200,
"packages/engine/src/__tests__/worktree-acquisition-worktrunk.test.ts": 1100,
"packages/engine/src/__tests__/worktree-acquisition.test.ts": 1200,
"packages/engine/src/__tests__/worktree-admin-entry-prune.test.ts": 2600,
"packages/engine/src/__tests__/worktree-backend-branch-collision.test.ts": 2400,