Verificación segura para el ciclo de vida
Disparador y límites
Úsala antes de una finalización de tarea, transferencia a revisión, desmontaje del espacio de trabajo u otra transición autorizada que pueda eliminar o reubicar el directorio de trabajo actual. Esta habilidad no autoriza limpieza, transiciones del ciclo de vida, cambios de estado, terminación de procesos ni reintentos. Sigue el contrato real del ciclo de vida de la plataforma; no toda transición elimina un worktree, y una transición exitosa no necesita detener un proceso worker.
Antes de la transición
- Establece la identidad exacta: ID de tarea/registro, tablero o namespace, perfil/cuenta, repositorio y estado esperado. No confíes en la tarea actual implícita de una herramienta después de cambiar de directorio. Usa selectores explícitos compatibles con la plataforma.
- Inspecciona la semántica de limpieza e identifica ubicaciones propiedad de la tarea frente a ubicaciones persistentes. Elige un directorio estable existente fuera de todo espacio de trabajo que la transición pueda eliminar. Una ruta padre es segura solo si también sobrevive a la limpieza; un enlace simbólico dentro del espacio de trabajo desechable no es una ubicación duradera. Resuelve rutas reales.
- Completa primero las comprobaciones de aceptación. Conserva los informes, sumas de verificación, commits y archivos adjuntos requeridos a través del mecanismo de artefactos duraderos compatibles de la plataforma, u otra ubicación persistente aprobada por el usuario. Lee de vuelta la identidad exacta y el contenido del artefacto. Una cadena de ruta en un comentario no conserva el archivo que nombra.
- Registra un recibo compacto previo a la transición fuera del directorio desechable: identidad exacta, transición esperada, ubicaciones de evidencia, comandos de verificación y cualquier limitación no resuelta. Nunca marques una aceptación incompleta como completa solo para preservar evidencia; usa el estado de checkpoint/handoff autorizado apropiado en su lugar.
- Planifica la verificación posterior a la transición para que no requiera el checkout antiguo, su virtualenv, archivos relativos, descubrimiento de tablero dependiente del entorno ni scripts auxiliares. Resuelve los ejecutables necesarios y las rutas duraderas antes de la transición.
Transición y lectura de vuelta exacta
- Realiza la transición ya autorizada una sola vez. Captura su recibo sin tratar el éxito como prueba del estado duradero deseado.
- Inicia la lectura de vuelta con el parámetro explícito de directorio de trabajo estable de la herramienta de ejecución. Un
cddentro del comando puede nunca ejecutarse si la herramienta falla al entrar en su cwd eliminado recordado. Si la herramienta carece de anulación de directorio de trabajo, usa una sesión independiente arraigada en una ubicación superviviente. No repitas la mutación del ciclo de vida para reparar una lectura de vuelta fallida. - Lee la tarea/registro exacto y el evento de transición usando una interfaz de solo lectura compatible. Verifica el estado esperado, el ID de ejecución/evento relevante y el contenido del artefacto duradero. Si se solicitó la eliminación en sí, verifica por separado la ausencia del sistema de archivos y la baja del worktree de Git. No asumas que la ausencia de directorio significa que se eliminó una rama o un archivo adjunto.
- Si la plataforma transformó el estado solicitado (por ejemplo, lo redirigió a revisión), informa el estado real. Si un worker permanece activo, informa eso por separado; no lo detengas sin autorización.
- En caso de error, inspecciona stderr y qué etapa falló. Un wrapper que devuelve 126 con
cd: ... No such file or directoryno es evidencia de que el ejecutable objetivo necesitechmod. Reintenta solo la verificación de solo lectura desde un directorio estable. Si no se puede leer el registro, informa transición reconocida pero verificación incompleta.
Fixture de regresión desechable
El fixture crea su propio repositorio Git temporal y worktree vinculado, conserva un recibo sintético en un directorio duradero hermano, elimina solo ese worktree del fixture, luego prueba que lanzar desde el cwd eliminado falla mientras que lanzar desde el directorio duradero tiene éxito. También verifica la lista de worktrees de Git y el contenido del recibo. Nunca toca una tarea real, remoto, espacio de trabajo de usuario o API de plataforma.
Ejecuta desde el directorio del paquete instalado:
python -m unittest discover -s scripts -p 'test_*.py' -v
Esto prueba el comportamiento del sistema de archivos/subprocess/Git, no una promesa universal de limpieza de plataforma. La semántica de finalización real y la lectura de artefactos remotos aún requieren verificación específica de la plataforma. No ejecutes comandos de eliminación contra el espacio de trabajo de un usuario como demostración.
Fuentes y procedencia
Autoría independiente a partir de fallos recurrentes de verificación de cwd eliminado; no se incluyen registros privados, rutas ni identificadores de tarea. La documentación de subprocess de Python documenta cwd, códigos de retorno y fallos de inicio de procesos hijo. El manual de Git worktree documenta la creación, eliminación y listado de worktrees vinculados. Estos primitivos soportan el fixture, no una inferencia sobre la implementación de ningún programador de tareas en particular.