Head implementation: 3d76e10d01793340d68fc5bc89165dc190f4cdc6 Scratch-only additions generated by issue-24390-evidence-build.py Command: vp test run apps/server/src/orchestration-v2/ProviderTurnStartService.test.ts apps/server/src/storageCleanup.test.ts -t EVIDENCE --silent=false --reporter=verbose Exit: 0 Scope: real service/filesystem/Git boundary controls with synthetic projection/provider dependencies; not real provider turns. note: You are running `vp test` as a Vite+ built-in command. If you meant to run the test npm script, use `vpr test` instead. RUN v5.0.5 /tmp/issue-24390-evidence-test ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > recreates a missing worktree only at the managed location: // ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > recreates a missing worktree only at the managed location: the real path of a symlinked managed fo… ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > recreates a missing worktree only at the managed location: a path outside the managed folder ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > recreates a missing worktree only at the managed location: a symlink inside the managed folder tha… ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > recreates a missing worktree only at the managed location: a folder nested below a worktree ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > recreates a missing worktree only at the managed location: '..' out of the managed folder ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > recreates a missing worktree only at the managed location: '..' after a symlink inside the managed… ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > recreates a missing worktree only at the managed location: a relative path ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > recovers an abandoned failed turn before continuing its native conversation ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > continues without interrupting when recovery does not apply: {"runStatus":"failed","turnStatus":"completed"} ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > continues without interrupting when recovery does not apply: {"runStatus":"completed","turnStatus":"completed"} ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > continues without interrupting when recovery does not apply: {"runStatus":"failed","turnStatus":"running","differentThread":true} ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > continues without interrupting when recovery does not apply: {"runStatus":"failed","turnStatus":"running","liveSession":false} ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > continues without interrupting when recovery does not apply: {"runStatus":"failed","turnStatus":"interrupted","interruptFailure":true} ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > does not start another turn when abandoned-turn cleanup fails ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > retries abandoned-turn cleanup without failing the continuation early ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > does not start the continuation if recording recovery fails ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > does not resume a continuation stopped while recovery was in flight ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > recreates a managed worktree folder that holds only node_modules ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > recreates a managed worktree folder that holds only node_modules ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > leaves a managed worktree folder with other files untouched ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > coordinates provider startup with cleanup-first ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > coordinates provider startup with startup-first ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > reads current startup state after waiting for the workspace lease ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > does not continue startup when replaced during policy resolution ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > does not continue startup when interrupted during session opening ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > starts another provider in the same checkout while a turn is pending ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > terminalizes a starting run when its provider session cannot open ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > leaves the run starting when a session-open failure will be retried ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > does not terminalize a provider-session open interruption ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > does not overwrite a run interrupted while its provider session opens ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > does not mistake a failed state read for a superseded run ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > signs out the existing native provider before opening the newly selected provider ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > rejects compaction without conversation context after 0 prior compactions ↓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > rejects compaction without conversation context after 2 prior compactions stdout | src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git node_modules EVIDENCE {"scenario":"node_modules","before":["node_modules"],"beforeGit":false,"after":[".git","branch-only.txt","tracked.txt"],"createCalls":1,"gitFile":"gitdir: /tmp/issue-24390-evidence-fixture-P2Pyaa/repo/.git/worktrees/worktree\n","top":"/tmp/issue-24390-evidence-fixture-P2Pyaa/managed/project/worktree","branch":"feature/restore","head":"0d06e622c3da7b064ab178bd0c05d1459f471086","branchMarker":"unique feature bytes\n"} ✓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git node_modules 279ms stdout | src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git node_modules+.next EVIDENCE {"scenario":"node_modules+.next","before":[".next","node_modules"],"beforeGit":false,"after":[".git","branch-only.txt","tracked.txt"],"createCalls":1,"gitFile":"gitdir: /tmp/issue-24390-evidence-fixture-qALywX/repo/.git/worktrees/worktree\n","top":"/tmp/issue-24390-evidence-fixture-qALywX/managed/project/worktree","branch":"feature/restore","head":"0d06e622c3da7b064ab178bd0c05d1459f471086","branchMarker":"unique feature bytes\n"} ✓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git node_modules+.next 168ms stdout | src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git .next EVIDENCE {"scenario":".next","before":[".next"],"beforeGit":false,"after":[".git","branch-only.txt","tracked.txt"],"createCalls":1,"gitFile":"gitdir: /tmp/issue-24390-evidence-fixture-CAikol/repo/.git/worktrees/worktree\n","top":"/tmp/issue-24390-evidence-fixture-CAikol/managed/project/worktree","branch":"feature/restore","head":"aa7a68e6a112a5be81abccf7e91b8551aa9d7a5b","branchMarker":"unique feature bytes\n"} ✓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git .next 176ms stdout | src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git empty EVIDENCE {"scenario":"empty","before":[],"beforeGit":false,"after":[".git","branch-only.txt","tracked.txt"],"createCalls":1,"gitFile":"gitdir: /tmp/issue-24390-evidence-fixture-PSec1m/repo/.git/worktrees/worktree\n","top":"/tmp/issue-24390-evidence-fixture-PSec1m/managed/project/worktree","branch":"feature/restore","head":"6a1a5713cdb29a575cd10735e0df1882e3440c18","branchMarker":"unique feature bytes\n"} ✓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git empty 171ms stdout | src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git sentinel EVIDENCE {"scenario":"sentinel","before":["node_modules","notes.md"],"beforeGit":false,"after":["node_modules","notes.md"],"createCalls":0,"nested":"leftover bytes\n","sentinel":"keep me exactly\n"} ✓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git sentinel 112ms stdout | src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git valid EVIDENCE {"scenario":"valid","before":[".git","branch-only.txt","tracked.txt","untracked.txt"],"beforeGit":true,"after":[".git","branch-only.txt","tracked.txt","untracked.txt"],"createCalls":0,"gitFile":"gitdir: /tmp/issue-24390-evidence-fixture-JsVsXW/repo/.git/worktrees/worktree\n","top":"/tmp/issue-24390-evidence-fixture-JsVsXW/managed/project/worktree","branch":"feature/restore","head":"6a1a5713cdb29a575cd10735e0df1882e3440c18","branchMarker":"unique feature bytes\n","tracked":"tracked edit\n","untracked":"untracked sentinel\n"} stdout | src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git outside EVIDENCE {"scenario":"outside","before":["node_modules"],"beforeGit":false,"after":["node_modules"],"createCalls":0,"nested":"leftover bytes\n"} ✓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git valid 121ms ✓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git outside 91ms stdout | src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git symlink EVIDENCE {"scenario":"symlink","before":["node_modules"],"beforeGit":false,"after":["node_modules"],"createCalls":0,"nested":"leftover bytes\n"} ✓ |t3| src/orchestration-v2/ProviderTurnStartService.test.ts > EVIDENCE startup real git symlink 105ms ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > allows an idle worktree and rejects the project checkout ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains a worktree while its thread is running ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains a worktree while its thread is starting ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains a worktree while its thread is preparing ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains a worktree while its thread is waiting ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains a worktree while its thread is queued ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains completed while background work is pending ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains interrupted while background work is pending ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains cancelled while background work is pending ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains rolled_back while background work is pending ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains completed while a runtime request is pending ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains interrupted while a runtime request is pending ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains cancelled while a runtime request is pending ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains rolled_back while a runtime request is pending ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains an active run even if the shell status is idle ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > retains a queued prompt before the new run has been projected ↓ |t3| src/storageCleanup.test.ts > V2 storage cleanup eligibility > uses V2 run activity instead of metadata refreshes for retention ↓ |t3| src/storageCleanup.test.ts > merged pull request cleanup > removes a worktree whose head reached the default branch through a merged pull request ↓ |t3| src/storageCleanup.test.ts > merged pull request cleanup > removes a squash-merged worktree when the pull request names its exact head ↓ |t3| src/storageCleanup.test.ts > merged pull request cleanup > keeps a squash worktree whose pull request has a later commit than the merged head ↓ |t3| src/storageCleanup.test.ts > merged pull request cleanup > keeps a squash worktree whose pull request was merged into a release branch ↓ |t3| src/storageCleanup.test.ts > merged pull request cleanup > keeps a squash worktree whose pull request was merged into its stack parent ↓ |t3| src/storageCleanup.test.ts > merged pull request cleanup > keeps a squash worktree whose pull request was merged without a reported head commit ↓ |t3| src/storageCleanup.test.ts > merged pull request cleanup > keeps a squash worktree whose pull request belongs to a different branch ↓ |t3| src/storageCleanup.test.ts > merged pull request cleanup > keeps a squash worktree whose pull request is still open ↓ |t3| src/storageCleanup.test.ts > merged pull request cleanup > keeps a squash worktree whose pull request was closed without merging ↓ |t3| src/storageCleanup.test.ts > merged pull request cleanup > keeps a worktree with no pull request, or one that is not merged ↓ |t3| src/storageCleanup.test.ts > removes clean submodules recursively, including deinitialized repositories ↓ |t3| src/storageCleanup.test.ts > keeps nested submodule files protected by the current keep rule ↓ |t3| src/storageCleanup.test.ts > keeps unpushed submodule history after checkout and deinitialization ↓ |t3| src/storageCleanup.test.ts > keeps submodules when stored repository metadata is malformed ↓ |t3| src/storageCleanup.test.ts > preserves late tracked edits when submodules were never initialized ↓ |t3| src/storageCleanup.test.ts > keeps a managed worktree folder left with only node_modules ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (idle) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (grandchild) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (null-branch) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (stale-branch) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (isolated-owner) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (fork-owner) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (missing-parent) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (cycle) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (two-tops) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (wrong-root) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (running) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (pending) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (unrelated) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (fork) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (recent-activity) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (recent-inactive) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (recent-grace) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (recent-settle) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (child-settled-now) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > checks the whole owner group (child-settled-only) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > cancels removal when a child changes during measurement (running) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > cancels removal when a child changes during measurement (pending) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > cancels removal when a child changes during measurement (activity) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > cancels removal when a child changes during measurement (unrelated) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > cancels removal when a child changes during measurement (settled) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > cancels removal when a child changes during measurement (resettled) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > cancels removal when a child changes during measurement (null-branch) ↓ |t3| src/storageCleanup.test.ts > subagent worktree ownership > cancels removal when a child changes during measurement (stale-branch) ↓ |t3| src/storageCleanup.test.ts > deleted thread worktrees > removes a deleted thread's worktree with no subagents ↓ |t3| src/storageCleanup.test.ts > deleted thread worktrees > removes a deleted thread's worktree with native subagent ↓ |t3| src/storageCleanup.test.ts > deleted thread worktrees > applies the remaining subagent's rules when deletion cleanup is off ↓ |t3| src/storageCleanup.test.ts > deleted thread worktrees > waits out the settle grace of a subagent that just settled ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > keeps orphan results visible when thread results fill the report ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > skips an ancestor of a referenced thread worktree (canonical) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > skips an ancestor of a referenced thread worktree (win32) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > skips an ancestor of a referenced thread worktree (linux) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > continues reporting when a project root cannot be probed ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > reports a linked orphan's size without removing its files (nested) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > reports a linked orphan's size without removing its files (direct) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > does not report a folder referenced by a thread (active) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > does not report a folder referenced by a thread (outside-active-snapshot) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > does not report a folder containing a project checkout (exact) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > does not report a folder containing a project checkout (nested) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > does not report a folder containing a project checkout (symlink) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > does not report project internals under a custom managed root (exact) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > does not report project internals under a custom managed root (contains) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > does not report project internals under a custom managed root (symlink) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > skips symbolic links at both directory levels and disabled cleanup ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > reports ordinary folders with an honest reason and keeps their files ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > continues after an inaccessible directory's git probe ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > compares thread paths with host casing rules and excludes existing projects (win32) ↓ |t3| src/storageCleanup.test.ts > orphan worktree reports > compares thread paths with host casing rules and excludes existing projects (linux) ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > automatically removes an eligible archived thread checkout ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > keeps a worktree protected by a missing project root (before-check) ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > keeps a worktree protected by a missing project root (while-measuring) ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > reports allocated bytes of single-link files without following symlinks ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > counts the pnpm virtual store only when its store forces copies (same-device) ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > counts the pnpm virtual store only when its store forces copies (other-device) ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > counts the pnpm virtual store only when its store forces copies (no-manifest) ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > never stats a network pnpm store { storeDir: '\\attacker.test\s' } ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > never stats a network pnpm store { storeDir: '/local/store', …(1) } ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > still removes a worktree when measuring its size fails ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > keeps a worktree when its owner's branch is cleared during size measurement ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > keeps a worktree when its owner's branch changes during size measurement ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > keeps a worktree when its thread starts during size measurement ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > keeps a worktree when another thread starts using it during size measurement ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > keeps a worktree when an archived thread starts using it during size measurement ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > does not measure a worktree kept for an open provider session ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > compares the checked-out branch without a full status ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > applies "any-local-files" ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > applies "uncommitted-changes" ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > applies "tracked-changes" ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > applies "any-local-files" ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > applies "uncommitted-changes" ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > applies "tracked-changes" ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > applies "any-local-files" ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > applies "uncommitted-changes" ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > applies "tracked-changes" ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > discovers trunk without a remote HEAD or tracking ref and removes an integrated worktree ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > keeps worktree commits present on nondefault main but absent from advertised trunk ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > keeps the worktree when the remote default is unavailable even if main exists ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > preserves tracked edits written after the final status check ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > caps entries while preserving totals and prioritizing removals ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > keeps staged edits in tracked-only mode ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > serializes concurrent requests and returns each run's report ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > aggregates expired artifacts and rotated logs while retaining current logs ↓ |t3| src/storageCleanup.test.ts > storage cleanup reports and local file policies > reports git failures without aborting the remaining categories ↓ |t3| src/storageCleanup.test.ts > settled worktree rechecks > keeps a checkout changed during measurement ({"settledAt":null}) ↓ |t3| src/storageCleanup.test.ts > settled worktree rechecks > keeps a checkout changed during measurement ({"settledAt":"2026-06-11T12:00:00.000Z"}) ↓ |t3| src/storageCleanup.test.ts > keeps saved usage data when removing a settled checkout stdout | src/storageCleanup.test.ts > EVIDENCE cleanup real service preserves nested bytes EVIDENCE {"before":["node_modules"],"gitExists":false,"report":{"trigger":"manual","startedAt":"2026-10-24T10:46:41.441Z","finishedAt":"2026-10-24T10:46:41.448Z","entries":[{"kind":"worktree","outcome":"kept","reason":"Not a linked worktree","path":"/tmp/storage-cleanup-Nau2dJ/worktrees/feature","projectPath":"/tmp/cleanup-repo-SB9qLZ","threadId":"thread-1","threadTitle":"Thread","bytes":null,"files":null}],"counts":{"removed":0,"kept":1,"failed":0},"bytesFreed":0,"omittedCount":0},"bytes":"nested bytes must survive\n"} ✓ |t3| src/storageCleanup.test.ts > EVIDENCE cleanup real service preserves nested bytes 144ms Test Files 2 passed (2) Tests 9 passed | 158 skipped (167) Start at 10:46:26 Duration 14.54s (import 48%, transform 36%, tests 10%, setup 6%)