Worktrunk: árboles paralelos, ciclo de vida y análisis del código
Leer las aprobaciones de Worktrunk: --yes, persistencia y errores al guardar
Recorre approve_command_batch y el almacenamiento para distinguir aceptación actual, aceptación persistente y fallos de escritura.
Qué aprenderás
- Empieza por approve_command_batch, no por el mensaje de pantalla
- La persistencia tiene su propia condición y fallo
- Sigue almacenamiento y coincidencia antes de asumir exactitud
Antes de empezar
- Ramas Git y navegación básica por terminal
- Un repositorio desechable para ejercicios opcionales
Explicar límites del árbol, verificar un primer checkout y revisar comandos antes de automatizar.
Conclusiones clave
- Aceptar la ejecución y guardar el permiso son estados distintos.
- La ruta --yes de esta función no persiste la aprobación.
- Aprobar una plantilla no fija el código que invoca.
Empieza por approve_command_batch, no por el mensaje de pantalla
En src/commands/command_approval.rs, approve_command_batch recibe comandos candidatos, identificador del proyecto, aprobaciones y opciones. Salvo que el llamador ya filtrara la lista, identifica los comandos que necesitan permiso. Si no queda ninguno devuelve true. En otro caso, --yes acepta para esta invocación o una pregunta interactiva decide; el rechazo devuelve false.
Ese booleano no describe todo el flujo del llamador. Según la documentación de hooks, rechazar omite todos los comandos del proyecto para la operación, incluso los aprobados anteriormente, pero permite continuar sin ellos. Las aprobaciones guardadas permanecen. Combinar función y documentación evita confundir rechazo con cancelación de creación o revocación permanente.
La persistencia tiene su propia condición y fallo
Tras aceptar, se guarda solo cuando yes es false. Un fallo al recargar propaga un error; un fallo posterior al guardar produce una advertencia sin revocar la aceptación actual. No confundas esos dos fallos ni rechazo, aceptación solo ahora y aceptación persistida. Una nueva pregunta puede indicar un fallo de escritura, no necesariamente un comando nuevo.
La conclusión pertenece a esta función por lotes, no a cualquier opción --yes. El comando dedicado a añadir aprobaciones sigue otra ruta. El modelo didáctico incluido comprueba únicamente la tabla simplificada: no ejecuta Rust upstream, reproduce la coincidencia de configuración ni certifica la integración con un terminal real.
Sigue almacenamiento y coincidencia antes de asumir exactitud
src/config/approvals.rs separa approvals.toml de la configuración portátil. load_with_fallback considera autoritativo el archivo existente y consulta las aprobaciones antiguas de config solo si falta. Un archivo existente corrupto produce un error, no una recuperación silenciosa de decisiones antiguas. Las mutaciones adquieren un bloqueo, recargan y guardan mediante el auxiliar de almacenamiento.
is_command_approved compara variables de plantilla normalizadas entre claves de proyecto coincidentes. Las claves de patrón escritas manualmente pueden cubrir varios repositorios; no es una simple igualdad literal bajo una clave exacta. Guardar una plantilla tampoco fija el contenido futuro de sus scripts. Inspeccionamos las pruebas Rust de normalización y patrones, pero no las ejecutamos.
Cómo elegir
| Criterio | Opción A | Opción B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
Pasos de implementación
- 1
Recorre lista vacía, rechazo y aceptación.
- 2
Localiza la condición independiente de persistencia.
- 3
Revisa recuperación de almacenamiento y claves coincidentes.
- 4
Distingue pruebas didácticas de pruebas del programa upstream.
Ejemplo para copiar
// Modelo didáctico independiente, no código upstream de Worktrunk.
function decision({ needed, yes, accepted, loadOk, saveOk }) {
if (!needed) return { run: true, save: false, warning: false };
if (!yes && !accepted) return { run: false, save: false, warning: false };
if (!yes && !loadOk) throw new Error("reload failed");
return { run: true, save: !yes && saveOk, warning: !yes && !saveOk };
}Preguntas frecuentes
¿Por qué vuelve a preguntar después de aceptar?
Puede haber cambiado el comando o fallado el guardado; examina advertencias y fuente efectiva de aprobación.
¿Borrar la entrada exacta elimina toda aprobación heredada?
No necesariamente: una entrada manual de patrón coincidente puede seguir suministrándola.
Fuentes
- Worktrunk / src/commands/command_approval.rsFuente verificada 2026-09-14
- Worktrunk / src/config/approvals.rsFuente verificada 2026-09-14
- Worktrunk / docs/src/content/docs/hook.mdFuente verificada 2026-09-14