From 1a15108b562246f0ecf087e2fc9c039a9ea81f7c Mon Sep 17 00:00:00 2001 From: Egutierrez Date: Sat, 6 Jun 2026 15:49:28 +0200 Subject: [PATCH] feat(statusline): 'hecho' se decide comparando el resultado contra el DoD El Stop worker recibe ahora el DoD de la tarea y lo usa como criterio para distinguir hecho de pendiente_revision/en_pausa: marca 'hecho' unicamente si el resultado descrito cumple el DoD punto por punto y esta verificado. Si el DoD no se cumple del todo, cae en pendiente_revision (resultado para revisar) o en_pausa (avance parcial). Si no hay DoD definido, mantiene el criterio anterior sobre el objetivo. Hace el estado 'hecho' mucho mas preciso. Co-Authored-By: Claude Opus 4.8 (1M context) --- .claude/hooks/goal_phase_worker.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.claude/hooks/goal_phase_worker.sh b/.claude/hooks/goal_phase_worker.sh index 4c227f6..5492264 100755 --- a/.claude/hooks/goal_phase_worker.sh +++ b/.claude/hooks/goal_phase_worker.sh @@ -26,6 +26,8 @@ ASK="$HOME/fn_registry/python/functions/core/ask_llm.py" GOAL=$(jq -r '.goal // ""' "$F" 2>/dev/null) [ -z "$GOAL" ] && exit 0 CUR=$(jq -r '.phase // ""' "$F" 2>/dev/null) +DOD=$(jq -r '.dod // ""' "$F" 2>/dev/null) +[ -z "$DOD" ] && DOD="(no definido)" is_active() { case "$1" in @@ -72,17 +74,20 @@ LAST=$(printf '%s' "$LAST" | tail -c 4000) [ -z "$LAST" ] && exit 0 USER_MSG=$(printf '%s' "$USER_MSG" | tail -c 1500) -SYS="El asistente acaba de PARAR y cede el control al usuario. Clasifica el estado de REPOSO en que queda la tarea. Responde UNA sola palabra, sin nada mas, de: hecho pendiente_revision preguntando bloqueado en_pausa sin_cambio. hecho=el objetivo esta completo y verificado; pendiente_revision=el asistente termino un trabajo y espera que el humano lo revise o apruebe (no hace una pregunta directa); preguntando=el asistente termina formulando una o varias PREGUNTAS concretas al usuario y necesita su respuesta o decision para continuar; bloqueado=no puede avanzar por un error o por falta de informacion/acceso; en_pausa=hizo un avance y espera la siguiente indicacion, sin estar terminado ni preguntar ni bloqueado; sin_cambio=el turno no altera el estado de reposo actual (charla irrelevante). Distingue: si la respuesta acaba con preguntas al usuario es 'preguntando'; si deja un resultado para que lo mire es 'pendiente_revision'. Usa 'hecho' SOLO si el trabajo esta completo y confirmado." +SYS="El asistente acaba de PARAR y cede el control al usuario. Clasifica el estado de REPOSO en que queda la tarea. Responde UNA sola palabra, sin nada mas, de: hecho pendiente_revision preguntando bloqueado en_pausa sin_cambio. hecho=el objetivo esta completo y verificado; pendiente_revision=el asistente termino un trabajo y espera que el humano lo revise o apruebe (no hace una pregunta directa); preguntando=el asistente termina formulando una o varias PREGUNTAS concretas al usuario y necesita su respuesta o decision para continuar; bloqueado=no puede avanzar por un error o por falta de informacion/acceso; en_pausa=hizo un avance y espera la siguiente indicacion, sin estar terminado ni preguntar ni bloqueado; sin_cambio=el turno no altera el estado de reposo actual (charla irrelevante). Distingue: si la respuesta acaba con preguntas al usuario es 'preguntando'; si deja un resultado para que lo mire es 'pendiente_revision'. REGLA DEL DoD: se te da el DoD (definition of done) que define cuando la tarea esta TERMINADA. Marca 'hecho' UNICAMENTE si el resultado descrito por el asistente CUMPLE ese DoD de forma clara y verificada; compara punto por punto el resultado contra el DoD. Si el DoD no se cumple del todo, o no esta verificado, NO uses 'hecho': usa 'pendiente_revision' (dejas un resultado para que el humano lo revise) o 'en_pausa' (avance parcial). Si el DoD es '(no definido)', usa tu criterio: 'hecho' solo si el objetivo esta claramente completo y verificado." PROMPT="OBJETIVO DE LA TAREA: ${GOAL} +DEFINITION OF DONE (DoD) — la tarea esta TERMINADA solo si esto se cumple: +${DOD} + ULTIMA PETICION DEL USUARIO: ${USER_MSG} ULTIMA RESPUESTA DEL ASISTENTE: ${LAST} -Responde con una sola palabra de la lista permitida:" +Compara el resultado contra el DoD y responde con una sola palabra de la lista permitida:" RAW=$("$PY" "$ASK" --model claude-haiku-4-5-20251001 --system "$SYS" "$PROMPT" 2>/dev/null | tr '[:upper:]' '[:lower:]') [ -z "$RAW" ] && exit 0