Add scripts/test-value-audit.mjs + scripts/lib/test-value-audit-lib.mjs: a heuristic that scores every test file under packages/*/src/**/__tests__/** and packages/dashboard/app/**/__tests__/** from git history, classifying commits as positive (fix+source co-change, Symptom Verification regressions, added-with-source) vs negative (flake/quarantine/timeout churn, test-only modifies, quarantine-ledger membership). Joins per-file durations from scripts/test-timings.json so SLOW + LOW-VALUE files rank first as deletion candidates. Emits docs/test-value-audit.json + docs/test-value-audit.md (top 40 + methodology + caveats). Pure scoring logic is unit-tested with synthetic commit records. The script never deletes tests — evidence only. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
24 KiB
Test Value Audit
Generated by
scripts/test-value-audit.mjson 2026-06-26T00:03:00.110Z.This is a HEURISTIC, not ground truth. It is an evidence base for a human deletion decision. The script does not delete any tests. See Methodology + Caveats.
Summary
- Files analyzed: 2051
- With timing data: 1979
deletecandidates (valueScore ≤ 0 or quarantined): 288reviewcandidates (0 < valueScore ≤ 3): 839keep(valueScore > 3): 924- "Safe delete" under the deletion-ratchet (zero positive evidence + churn/quarantine): 54
- In quarantine ledger (current or historical): 59
Methodology
For every audited test file we run a single whole-history git log --name-status
pass and classify each commit that touched the file (renames followed backward):
Positive signal (encoded/caught a real bug):
fix(...)/fix:subject with a sibling source change in the same package (+3)fix(...)/fix:subject alone (+2)## Symptom Verificationregression marker in the commit body (+3, FN-5893)- test file first added together with source (+2), or added alone (+1)
- a plain test+source co-change modify (+1.5)
Negative signal (low value / churn):
- subject/body mentions
flake,flaky,deflake,quarantine,stabiliz,appease,timeout,retry(−3) - a modify that touched only the test file, no source (−1)
- appears in
scripts/lib/test-quarantine.jsonhistory (−5)
The per-file valueScore is the sum of commit weights (plus the quarantine penalty).
deletionPriority = durationMs / (1 + max(0, valueScore)) with a small boost for
net-negative files — so the ranking surfaces slow AND low-value files first
(most CI time saved per unit of lost signal). Recommendation: delete (≤0), review
(≤3), else keep.
Caveats (read before deleting anything)
- Heuristic, not truth. A quiet, never-modified test can still be load-bearing; a high-churn test can still be valuable. Use this to prioritize human review.
git log --follow/ rename limits. Renames are followed only through linearR/Cname-status chains; squash-merges collapse multi-commit history into one subject, so per-commit signal is lost for squashed work (this repo defaults to squash merges — a major reason to treat scores as lower bounds on value).- Subjects lie.
fix(...)is trusted as a positive even if the test was unrelated; conversely a real bug fixed under afeat(...)/FN-subject without source co-change may be undercounted. - Timing is a snapshot from
scripts/test-timings.json; files with no entry shown/aduration and get deletionPriority 0 (cost unknown, not necessarily cheap). - Not a green light. Deleting a gate test still requires the gate-eviction process (AGENTS.md). "Safe delete" only flags files that meet the ratchet's churn/quarantine bar.
Top 40 deletion candidates
| # | File | Tests | Duration | Value | Priority | Rec | Why (recent commits) |
|---|---|---|---|---|---|---|---|
| 1 | packages/engine/src/__tests__/workspace-merger-idempotency.test.ts |
8 | 12.7s | -1 | 13335 | delete (safe-delete) | 754434632 feat(workspace): Phase C U2 — per-repo landed pr (churn-keyword,added-with-source)627bdcfb0 fix(review): Phase C merge-loop hardening — doub (churn-keyword,fix+source)3a7123762 fix(review): address PR #1717 Phase C merge-loop (churn-keyword,fix+source) |
| 2 | packages/dashboard/src/__tests__/github-tracking-delete.test.ts |
9 | 8.7s | -7.5 | 11962.5 | delete | d0c9e47f6 feat(FN-4253): close linked GitHub issues on tas (added-with-source)9dfefc551 feat(FN-4941): close or delete GitHub issues whe (test+source)46fb3f0ef feat(FN-5305): fix async synchronization in gith (test-only-churn) |
| 3 | packages/engine/src/__tests__/reliability-interactions/merge-runner-spawn-enoent-prevention.test.ts |
5 | 7.9s | -2 | 8690 | delete (safe-delete) | 7763ba5fa FN-6278: preflight reusable merge worktree cwd (churn-keyword,added-with-source)a768d36da FN-6817: root reliability fixtures under worker (test-only-churn) |
| 4 | packages/dashboard/src/__tests__/session-reconnect.test.ts |
4 | 6.1s | -6.5 | 8082.5 | delete (quarantined) | bf141c47d test(FN-1156): add AI session lifecycle and reco (added)84ed84313 feat(FN-2123): merge fusion/fn-2123 (test-only-churn)6714f7654 refactor(FN-2161): standardize on createFnAgent (test+source) |
| 5 | packages/engine/src/__tests__/self-healing-already-merged.real-git.test.ts |
7 | 4.6s | -12 | 7360 | delete (quarantined) | 602a7da51 feat(FN-3865): complete Steps 3-6 — recover alre (added-with-source)39e0b3c6a fix(FN-3865): align merge recovery types and rea (fix+source)6fc804483 feat(FN-3940): expose github tracking controls i (test-only-churn) |
| 6 | packages/core/src/__tests__/run-audit.integration.test.ts |
24 | 5.8s | -2 | 6380 | delete (quarantined) | c2d0ac572 test(FN-1414): add run-audit integration tests f (churn-keyword,added)84ed84313 feat(FN-2123): merge fusion/fn-2123 (test+source)a269f4829 refactor: remove legacy kb compatibility (test+source) |
| 7 | packages/engine/src/__tests__/workspace-merger-lease.test.ts |
4 | 5.8s | -1 | 6090 | delete (safe-delete) | 64e87f9a1 feat(workspace): Phase C U3 — per-repo land leas (churn-keyword,added-with-source)627bdcfb0 fix(review): Phase C merge-loop hardening — doub (churn-keyword,fix+source) |
| 8 | packages/engine/src/__tests__/workspace-merger.test.ts |
7 | 8.0s | 0.5 | 5333.3 | review | 744ed098a feat(workspace): Phase C U1 — per-repo merge loo (churn-keyword,added-with-source)754434632 feat(workspace): Phase C U2 — per-repo landed pr (churn-keyword,test+source)3a7123762 fix(review): address PR #1717 Phase C merge-loop (churn-keyword,fix+source) |
| 9 | packages/cli/src/__tests__/extension-task-tools.test.ts |
4 | 3.8s | -7 | 5130 | delete (quarantined) | 47eaf089b feat(FN-4904): complete Step 3 — align engine an (added-with-source)0dc4c9c6a test(FN-4904): cover worktree-root lookup in ext (test-only-churn)b80b517a4 test(FN-4927): cover no-task fallback for task t (test-only-churn) |
| 10 | packages/engine/src/__tests__/worktree-db-hydrate.test.ts |
12 | 7.1s | 0.5 | 4733.3 | review | e59a740d0 feat(FN-3841): add worktree database hydration t (added-with-source)6acc51cf0 feat(FN-4039): recover worktree db scratch boots (test+source)93dc5a727 feat(FN-4083): add WAL enforcement, immediate wr (test+source) |
| 11 | packages/core/src/__tests__/activity-analytics.test.ts |
25 | 4.6s | 0 | 4600 | delete (quarantined) | 53bb1d8f3 feat(analytics): U2 — core date-range aggregator (added-with-source)5bc8901f0 feat(command-center): U7 — SDLC funnel + through (test+source)f5bd86214 feat(monitor): U13 — monitor stage (deployments, (test+source) |
| 12 | packages/dashboard/src/routes/__tests__/board-workflows-route.test.ts |
4 | 3.6s | -5.5 | 4590 | delete | 010976cee test: promote/board-workflows routes, concurrent (added-with-source)f77aa073c FN-6025: fix builtin coding auto-merge review fl (test-only-churn)edde74d56 FN-6146: harden dashboard test mocks and request (churn-keyword,test+source) |
| 13 | packages/dashboard/app/components/__tests__/TaskDetailModal.responsive-and-dependencies.test.tsx |
44 | 6.6s | 0.5 | 4400 | review | ed52c3dff test(FN-3591): split TaskDetailModal coverage in (added)ecbf1f829 feat(FN-3276): add task review tab with metadata (test+source)309e3f91a feat(FN-3897): add blocker fan-out hook, badge, (test+source) |
| 14 | packages/core/src/__tests__/todo-store.test.ts |
17 | 3.8s | -3 | 4370 | delete (quarantined) | 6f4b42a89 feat(FN-2575): merge fusion/fn-2575 (added-with-source) |
| 15 | packages/engine/src/__tests__/reliability-interactions/soft-blocker-auto-finalize-interactions.real-git.test.ts |
7 | 3.4s | -4 | 4080 | delete | 208753fb8 test(FN-4653): complete Step 1 — add merge-path (added)875b32266 test(FN-4653): complete Step 2 — cover mixed blo (test-only-churn)5548b6f4a test(FN-4653): complete Step 3 — add scheduler s (test-only-churn) |
| 16 | packages/core/src/__tests__/move-task-characterization.test.ts |
10 | 8.1s | 1 | 4050 | review | 4e1b0fab0 feat(core): workflow-resolved transitions behind (added-with-source)0b7549a53 FN-6126: enable workflow experimental flags by d (test+source)9a7881441 FN-6245: keep default auto-merge tasks on live s (test+source) |
| 17 | packages/engine/src/__tests__/pr-response-run.test.ts |
23 | 11.6s | 2 | 3866.7 | review | 31d4b5335 feat(pr): security-hardened review-response run (added-with-source) |
| 18 | packages/engine/src/__tests__/merger-autostash-orphan-surface.test.ts |
6 | 3.7s | 0 | 3700 | delete | d604d090a feat(FN-3863): add stash recovery dashboard surf (added-with-source)bcb4107a1 feat(FN-3932): add orphaned finalize-reset autos (test+source)1cf987208 feat(FN-4018): isolate split merger temp workspa (test-only-churn) |
| 19 | packages/engine/src/__tests__/merger-empty-cherry-pick-fallback.test.ts |
2 | 3.0s | -1.5 | 3225 | delete | 653500959 test(FN-4475): add fallback empty cherry-pick re (added)ebd79d21b feat(FN-4475): remove unstable merger empty cher (churn-keyword,test-only-churn)22d59b5f9 feat(FN-5279): add merge integration worktree fe (test+source) |
| 20 | packages/engine/src/__tests__/merger-ai-cleanup.test.ts |
15 | 2.8s | -3 | 3220 | delete (quarantined) | 4032a35a2 FN-6188: harden AI merge temp worktree cleanup (added-with-source)d75f861f2 FN-6199: harden AI merge worktree cleanup (test+source)3e69d3990 FN-6244: protect active AI merge worktrees (churn-keyword,test+source) |
| 21 | packages/dashboard/src/__tests__/routes-secrets-sync.test.ts |
17 | 2.7s | -3 | 3105 | delete | cca96a760 test(FN-4913): complete Step 7 — add secrets syn (added-with-source)b5e674059 test(FN-4980): cover sync-export auth rejection (test-only-churn)47775e942 test(FN-4981): complete Step 2 — add push missin (test-only-churn) |
| 22 | packages/core/src/__tests__/store-concurrent-writes.test.ts |
6 | 2.8s | -1.5 | 3010 | delete (quarantined) | 93dc5a727 feat(FN-4083): add WAL enforcement, immediate wr (added-with-source)67c680c8d fix(FN-4122): use unique tmp filename for task.j (fix+source)a38752c6b FN-6486: rescue quarantined flaky tests (churn-keyword,test+source) |
| 23 | packages/core/src/__tests__/store-archive-search.test.ts |
63 | 3.0s | 0 | 3000 | delete | ac6aaca2c feat(FN-3982): split monolithic store.test.ts in (added)139e25fcf feat(FN-4837): complete Step 2 — migrate store t (test-only-churn)294209f64 FN-5943: maintain tasks FTS5 indexes automatical (test+source) |
| 24 | packages/engine/src/__tests__/reliability-interactions/in-review-branch-rebind.test.ts |
10 | 7.4s | 1.5 | 2960 | review | 5c3096c7d feat(FN-5083): complete Steps 5-7 rebind UI and (added)b3ac0beaa test(FN-5083): tighten rebind reliability and qu (test-only-churn)3566cf8a1 FN-6695: block unsafe in-review branch rebinds (test+source) |
| 25 | packages/core/src/__tests__/store-activity.test.ts |
49 | 5.9s | 1 | 2950 | review | 36e130937 refactor(FN-4021): split core store tests into d (added)287ebaf10 feat(FN-4053): unify task ID allocation with sto (test+source)a0f2bc530 feat(FN-4429): complete Step 1 — plumb moveSourc (test+source) |
| 26 | packages/dashboard/app/components/__tests__/AgentDetailView.mobile-scroll.test.tsx |
4 | 2.5s | -3 | 2875 | delete | 3a4397215 feat(FN-4231): restore mobile scroll in AgentDet (added)d68fe3e9f FN-6209: fix tablet tab overflow in agent detail (test-only-churn)b7c23c09c FN-6450: enable touch scrolling for agent detail (test-only-churn) |
| 27 | packages/dashboard/src/__tests__/insights-routes.test.ts |
24 | 26.5s | 8.5 | 2789.5 | keep | 629398483 fix(FN-1909): reorder insights routes to prevent (fix+source,added-with-source)8de7feeb1 feat(FN-1974): merge fusion/fn-1974 (test+source)6714f7654 refactor(FN-2161): standardize on createFnAgent (test+source) |
| 28 | packages/engine/src/__tests__/branch-conflicts-ghost-references.test.ts |
5 | 2.5s | -2 | 2750 | delete | 663e5d2cd feat(FN-4508): complete Step 1 — harden inspectB (added-with-source)5cd0e6665 feat(FN-4839): harden real-git test timeouts acr (churn-keyword,test-only-churn) |
| 29 | packages/core/src/__tests__/soft-delete-lineage-children.test.ts |
11 | 2.6s | 0 | 2600 | delete | e0c0745c0 test(FN-5129): add lineage soft-delete and archi (added-with-source)2c7ae1c1a feat(FN-5131): add lineage-unlink flag to triage (test-only-churn)4955ccf6e feat(FN-5132): align soft-delete-lineage-childre (test-only-churn) |
| 30 | packages/core/src/__tests__/store-handoff-to-review.test.ts |
8 | 2.6s | 0 | 2600 | delete (quarantined) | 93b11c6c0 feat(FN-5241): add atomic in-review handoff seam (added-with-source)2d425b1e2 fix: scrub queued/blockedBy/overlapBlockedBy on (fix+source) |
| 31 | packages/engine/src/__tests__/branch-conflicts-zero-unique.test.ts |
4 | 2.2s | -2.5 | 2475 | delete | bcb0035d1 feat(FN-4500): complete Step 2 — harden zero-uni (added-with-source)14ef1041a feat(FN-4500): complete Step 3 — add live zero-c (test+source)5ce377afe feat(FN-4508): complete Step 7 — docs and compat (test-only-churn) |
| 32 | packages/engine/src/__tests__/workspace-e2e.test.ts |
2 | 4.8s | 1 | 2400 | review | 78d7a28f1 test(workspace): Phase D U2 — e2e merge + recove (added) |
| 33 | packages/cli/src/__tests__/research-extension-tools.test.ts |
10 | 2.1s | -2.5 | 2362.5 | delete (quarantined) | 6670837b7 feat(FN-2996): add research agent tools with ext (added-with-source)f2fa44e27 feat(FN-2999): harden research lifecycle with id (churn-keyword,test+source)f1ee69e59 feat(FN-3014): document research recovery semant (test+source) |
| 34 | packages/cli/src/__tests__/extension-mission-goal-tools.test.ts |
4 | 1.7s | -7 | 2295 | delete (quarantined) | 93e8bd994 FN-5899: add mission-goal linking commands and t (added-with-source)26bc80a0a FN-5958: add mission goal linking to create and (test+source)259cdfb53 FN-6734: stabilize CLI extension test cleanup (churn-keyword,test-only-churn) |
| 35 | packages/engine/src/__tests__/worktree-acquisition-workspace.test.ts |
8 | 6.6s | 2 | 2200 | review | 12d33c512 feat(workspace): Phase A U2 — per-repo acquisiti (added-with-source)d5fa8654f fix(review): Phase A workspace hardening — tool (churn-keyword,fix+source) |
| 36 | packages/dashboard/src/routes/__tests__/workflow-import-export.test.ts |
10 | 6.5s | 2 | 2166.7 | review | 407ce03bf feat(dashboard): workflow and template JSON impo (added-with-source) |
| 37 | packages/cli/src/__tests__/extension-goal-tools.test.ts |
7 | 1.6s | -7 | 2160 | delete (quarantined) | b335f3d7c FN-5652: add goal retrieval tool for agent execu (added-with-source)fab8a62b5 FN-5977: expose goal retrieval tools across engi (test+source)259cdfb53 FN-6734: stabilize CLI extension test cleanup (churn-keyword,test-only-churn) |
| 38 | packages/dashboard/app/components/__tests__/AgentDetailView.settings.test.tsx |
25 | 10.7s | 4 | 2140 | keep | d98c053ed feat(FN-4088): split AgentDetailView tests into (added)91931bd5d feat(FN-4394): complete Step 5 — add dashboard s (test+source)6b2607dae feat(FN-4400): complete Step 7 — add prompt-size (test+source) |
| 39 | packages/engine/src/cli-agent/__tests__/session-manager.test.ts |
19 | 4.2s | 1 | 2100 | review | 4fc1a9dd4 feat(engine): add CliAgentAdapter interface and (added-with-source)773ba7620 test(engine): self-skip real-PTY e2e when PTY I/ (test-only-churn) |
| 40 | packages/engine/src/__tests__/reliability-interactions/ai-merge-worktree-cleanup.test.ts |
7 | 6.3s | 2 | 2100 | review | ac342f501 FN-6220: harden AI merge worktree cleanup (churn-keyword,added-with-source)2085610e9 FN-6246: move AI merge clean rooms into repo sto (test+source)dc4c2b220 FN-6453: clean up AI-merge worktrees after setup (test+source) |
One-line recommendations
packages/engine/src/__tests__/workspace-merger-idempotency.test.ts— delete: no positive (bug-encoding) signal in history; pure churn — strong delete candidate (slow: 12.7s — high CI time payoff)packages/dashboard/src/__tests__/github-tracking-delete.test.ts— delete: net-negative value (churn outweighs signal) — delete candidate (slow: 8.7s — high CI time payoff)packages/engine/src/__tests__/reliability-interactions/merge-runner-spawn-enoent-prevention.test.ts— delete: no positive (bug-encoding) signal in history; pure churn — strong delete candidate (slow: 7.9s — high CI time payoff)packages/dashboard/src/__tests__/session-reconnect.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 6.1s — high CI time payoff)packages/engine/src/__tests__/self-healing-already-merged.real-git.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 4.6s — high CI time payoff)packages/core/src/__tests__/run-audit.integration.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 5.8s — high CI time payoff)packages/engine/src/__tests__/workspace-merger-lease.test.ts— delete: no positive (bug-encoding) signal in history; pure churn — strong delete candidate (slow: 5.8s — high CI time payoff)packages/engine/src/__tests__/workspace-merger.test.ts— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 8.0s — high CI time payoff)packages/cli/src/__tests__/extension-task-tools.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 3.8s — high CI time payoff)packages/engine/src/__tests__/worktree-db-hydrate.test.ts— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 7.1s — high CI time payoff)packages/core/src/__tests__/activity-analytics.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 4.6s — high CI time payoff)packages/dashboard/src/routes/__tests__/board-workflows-route.test.ts— delete: net-negative value (churn outweighs signal) — delete candidate (slow: 3.6s — high CI time payoff)packages/dashboard/app/components/__tests__/TaskDetailModal.responsive-and-dependencies.test.tsx— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 6.6s — high CI time payoff)packages/core/src/__tests__/todo-store.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 3.8s — high CI time payoff)packages/engine/src/__tests__/reliability-interactions/soft-blocker-auto-finalize-interactions.real-git.test.ts— delete: net-negative value (churn outweighs signal) — delete candidate (slow: 3.4s — high CI time payoff)packages/core/src/__tests__/move-task-characterization.test.ts— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 8.1s — high CI time payoff)packages/engine/src/__tests__/pr-response-run.test.ts— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 11.6s — high CI time payoff)packages/engine/src/__tests__/merger-autostash-orphan-surface.test.ts— delete: net-negative value (churn outweighs signal) — delete candidate (slow: 3.7s — high CI time payoff)packages/engine/src/__tests__/merger-empty-cherry-pick-fallback.test.ts— delete: net-negative value (churn outweighs signal) — delete candidate (slow: 3.0s — high CI time payoff)packages/engine/src/__tests__/merger-ai-cleanup.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 2.8s — high CI time payoff)packages/dashboard/src/__tests__/routes-secrets-sync.test.ts— delete: net-negative value (churn outweighs signal) — delete candidate (slow: 2.7s — high CI time payoff)packages/core/src/__tests__/store-concurrent-writes.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 2.8s — high CI time payoff)packages/core/src/__tests__/store-archive-search.test.ts— delete: net-negative value (churn outweighs signal) — delete candidate (slow: 3.0s — high CI time payoff)packages/engine/src/__tests__/reliability-interactions/in-review-branch-rebind.test.ts— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 7.4s — high CI time payoff)packages/core/src/__tests__/store-activity.test.ts— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 5.9s — high CI time payoff)packages/dashboard/app/components/__tests__/AgentDetailView.mobile-scroll.test.tsx— delete: net-negative value (churn outweighs signal) — delete candidate (slow: 2.5s — high CI time payoff)packages/dashboard/src/__tests__/insights-routes.test.ts— keep: carries real bug-fix / source-coupled signal — keeppackages/engine/src/__tests__/branch-conflicts-ghost-references.test.ts— delete: net-negative value (churn outweighs signal) — delete candidate (slow: 2.5s — high CI time payoff)packages/core/src/__tests__/soft-delete-lineage-children.test.ts— delete: net-negative value (churn outweighs signal) — delete candidate (slow: 2.6s — high CI time payoff)packages/core/src/__tests__/store-handoff-to-review.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 2.6s — high CI time payoff)packages/engine/src/__tests__/branch-conflicts-zero-unique.test.ts— delete: net-negative value (churn outweighs signal) — delete candidate (slow: 2.2s — high CI time payoff)packages/engine/src/__tests__/workspace-e2e.test.ts— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 4.8s — high CI time payoff)packages/cli/src/__tests__/research-extension-tools.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 2.1s — high CI time payoff)packages/cli/src/__tests__/extension-mission-goal-tools.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 1.7s — high CI time payoff)packages/engine/src/__tests__/worktree-acquisition-workspace.test.ts— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 6.6s — high CI time payoff)packages/dashboard/src/routes/__tests__/workflow-import-export.test.ts— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 6.5s — high CI time payoff)packages/cli/src/__tests__/extension-goal-tools.test.ts— delete: in quarantine ledger — delete per ratchet once expiry passes (slow: 1.6s — high CI time payoff)packages/dashboard/app/components/__tests__/AgentDetailView.settings.test.tsx— keep: carries real bug-fix / source-coupled signal — keeppackages/engine/src/cli-agent/__tests__/session-manager.test.ts— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 4.2s — high CI time payoff)packages/engine/src/__tests__/reliability-interactions/ai-merge-worktree-cleanup.test.ts— review: thin positive signal; confirm it asserts a real invariant before trimming (slow: 6.3s — high CI time payoff)