[Bug]: V2 storage cleanup never frees worktrees for completed/cancelled/interrupted/rolled_back threads
Los mantenedores suelen responder en 1 día
@Info-Cado ya está trabajando en esto.
Desde el 6/10/2026.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
- Área
- backend
Línea de trabajo
Comienza con storageCleanupThreadIdle en apps/server/src/storageCleanup.ts:83-92, luego inspecciona sus puntos de llamada en :220 y :317, así como las definiciones de estado y la proyección en packages/contracts/src/orchestrationV2.ts y apps/server/src/orchestration-v2/ProjectionStore.ts. Verifica que los hilos V2 en estado terminal con activeRunId null y con las guards de segundo plano o de cola satisfechas sean aptos para la limpieza, mientras que el trabajo activo siga protegido; el issue señala que la ejecución de prueba específica de vpr falló debido a la configuración del runner.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happened
V2 threads that finish as completed/cancelled/interrupted/rolled_back keep their worktrees forever. storageCleanupThreadIdle only returns true for status idle or failed, so any thread whose shell status mirrors a terminal run status other than failed is never eligible for worktree cleanup. Disk usage grows unboundedly, especially on remote servers.
Diagnosis
Grounded in source at upstream/main@e8545b293b:
- packages/contracts/src/orchestrationV2.ts:445-456 OrchestrationV2RunStatus includes preparing, queued, starting, running, waiting, completed, interrupted, failed, cancelled, rolled_back.
- packages/contracts/src/orchestrationV2.ts:1661-1664 OrchestrationV2ShellThreadStatus is idle plus RunStatus, so thread.status can be completed/interrupted/cancelled/rolled_back.
- apps/server/src/orchestration-v2/ProjectionStore.ts:1485-1499 shellStatusFromStoredRunStatus mirrors latest_run_status verbatim, including completed/interrupted/cancelled/rolled_back.
- apps/server/src/storageCleanup.ts:83-92 storageCleanupThreadIdle requires thread.activeRunId === null AND (status === idle OR status === failed). Terminal threads with status completed/cancelled/interrupted/rolled_back and activeRunId null fail the predicate and are skipped at :220 and :317.
V1 allowed cleanup whenever session was null/stopped and latestTurn was not running, regardless of terminal state (024d49520e:apps/server/src/storageCleanup.ts:82-91). The idle-plus-failed gate is introduced by the orchestrator V2 merge de3439142.
Steps to reproduce
Logic repro, no provider CLI needed:
- Construct an OrchestrationV2ThreadShell with branch and worktreePath set, activeRunId null, status completed, pendingBackgroundTasks [], pendingRuntimeRequest null, no queued turn.
- Call storageCleanupThreadIdle(thread, Date.now()).
- Result is false, so the worktree candidate is filtered out. Same for cancelled, interrupted, rolled_back. Only idle and failed return true.
Observable product repro:
- Run a V2 thread to completion (status completed, no active run).
- Wait past worktree retention/inactivity threshold.
- Worktree directory remains; storage cleanup logs skip it as non-idle.
Version
upstream/main@e8545b293b, post orchestrator V2 merge de3439142; checked 2026-10-03.
Environment
Windows x64 repo checkout, verified via git show upstream/main. Server-side defect, applies on any OS/host, especially remote servers with many finished threads.
Evidence
- apps/server/src/storageCleanup.ts:83-92 predicate, :220 and :317 call sites
- packages/contracts/src/orchestrationV2.ts:445-456 RunStatus, :1661-1664 ShellThreadStatus
- apps/server/src/orchestration-v2/ProjectionStore.ts:1485-1499 status mirroring
- V1 baseline 024d49520e:apps/server/src/storageCleanup.ts:82-91
Focused verification via git show upstream/main only; no repo-wide lint/typecheck per repo rules. Targeted vpr test run failed on runner config in this checkout.
Related issues
- #14742 merged-worktree cleanup retains worktrees after squash merges - merge-detection, not idle-predicate gating. Not duplicate.
- #14843 retains upstream-merged branches in fork checkouts - fork sync scope. Not duplicate.
- #13836 t3.json Setup Worktree action never cleaned - setup-action scope. Not duplicate.
- #14966 deleting thread leaves preview sessions - PreviewManager scope. Not duplicate.
- Searched open issues for storageCleanupThreadIdle, worktree leak, idle failed: no match for this predicate.
Fix applied or workaround
None. Possible direction: treat terminal statuses completed/cancelled/interrupted/rolled_back as idle-eligible once activeRunId is null and background/queued guards pass, or add explicit terminal-state handling with inactivity clock. Not tested.
Filed by
opencode (muse-spark-1.3-contributor-free) via audit session
- Lenguaje dominante
- TypeScript
- Estrellas
- 24.8k
- Forks
- 6.4k
- Merge medio
- 8 h 4 min
- PR fusionados (30 d)
- 199
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de pingdotgg/t3code
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
pingdotgg/t3code#24900 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
pingdotgg/t3code#24800 · 2 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
[Bug]: Desktop startup briefly warns about Codex provider status before its initial check completesAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
Todos los issues de pingdotgg/t3code
Issues similares
-
VS Code extension: clickable file links in chat drop the :line suffix, never jump to the lineAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
MoonshotAI/kimi-code#4398 ·
Los mantenedores suelen responder en 1 día
-
Xiaomi Mimo语音识别服务异常Abiertopending triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
package-lock.json : les binaires natifs macOS et Linux de unrs-resolver ont disparu depuis #1823Abiertobug dependencies
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
AxaFrance/design-system#2064 ·
Los mantenedores suelen responder en 3 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100