Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[Bug]: V2 storage cleanup never frees worktrees for completed/cancelled/interrupted/rolled_back threads

Cerrado Apto para principiantes
#15,146 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@Info-Cado ya está trabajando en esto.

Desde el 6/10/2026.

  • #15150 de @ANSHSINGH050404 — fusionado
  • #16474 de @Info-Cado — abierto

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

bug via-triage
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:

  1. Construct an OrchestrationV2ThreadShell with branch and worktreePath set, activeRunId null, status completed, pendingBackgroundTasks [], pendingRuntimeRequest null, no queued turn.
  2. Call storageCleanupThreadIdle(thread, Date.now()).
  3. 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:

  1. Run a V2 thread to completion (status completed, no active run).
  2. Wait past worktree retention/inactivity threshold.
  3. 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

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de pingdotgg/t3code

Todos los issues de pingdotgg/t3code

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.