Ir al contenido

Solución de problemas

Fallos de emet doctor y emet preflight, agrupados por lo que ves, cada uno con su causa y una solución. Los términos siguen GLOSSARY.md. Para saber cómo encajan las comprobaciones, consulta la arquitectura.

Un repositorio que todavía tiene solo forge.config.json, .forge/ o variables FORGE_* sigue funcionando: emet lee los nombres heredados, imprime una línea por stderr que nombra cada archivo heredado, y emet migrate los renombra.

No hay emet.config.json

Síntoma: emet doctor imprime no emet.config.json — run "emet init" here.

Causa: El repositorio todavía no tiene configuración de /emet.

Solución: Ejecuta emet init en la raíz del repositorio, luego revisa la configuración generada y completa los archivos de docs/agents/.

emet.config.json está mal formado

Síntoma: emet.config.json is malformed: <reason>; emet preflight termina con código 2.

Causa: La configuración es JSON estricto y se valida contra emet/schema/emet.config.schema.json. Se rechazan los comentarios y las comas finales.

Solución: Corrige el campo que nombra el motivo, o regenera con emet init --force.

docs/agents aún tiene marcadores TODO(emet)

Síntoma: docs/agents/ still has N TODO(emet): marker(s); emet doctor también informa un docs/agents/<file> ausente.

Causa: emet init deja un marcador dondequiera que no puede detectar un valor.

Solución: Completa cada línea marcada, o resuélvelas y ejecuta emet init --force. Preflight se niega a despachar mientras quede alguno.

Falla una comprobación de dependencias

Síntoma: Líneas dependency: ... en emet doctor, o un fallo de dependencia bloqueante en emet preflight (por ejemplo gh ausente o sin autenticar, o el plugin mattpocock-skills ausente o en una versión no probada).

Causa: /emet necesita git, gh y el plugin mattpocock-skills; consulta emet/src/dependencies.ts y emet/src/skills.ts.

Solución: Instala o autentica la herramienta, o ejecuta /setup-matt-pocock-skills. Si una comprobación es errónea para tu entorno, EMET_SKIP_DEPENDENCY_CHECKS=1 emet preflight la degrada a una advertencia.

ya no documenta una bandera en –help

Síntoma: <tool> no longer documents <flags> in --help — emet relies on it, o could not be run — cannot verify <flags>.

Causa: emet doctor comprueba las banderas de las que depende emet, no solo que exista el binario. La versión instalada eliminó o renombró una.

Solución: Instala una versión de la herramienta que todavía documente la bandera.

Falta un archivo instalado o se editó desde la instalación

Síntoma: ~/<path> is missing — re-run install.sh o ~/<path> was edited since install.

Causa: La copia instalada ya no coincide con el manifiesto de instalación.

Solución: Vuelve a ejecutar install.sh. Si existe un archivo .new pendiente junto a un archivo editado, fusiónalo o elimínalo.

Stop hook error: forge: No such file or directory

Síntoma: Claude Code imprime Stop hook error: … forge: No such file or directory (o lo mismo para emet) al final de cada turno.

Causa: ~/.claude/settings.json todavía tiene un hook forge guard o emet guard cuyo binario se movió o se eliminó.

Solución: Ejecuta emet doctor .. Lista cada hook guard muerto con su evento e imprime un comando cp … && jq … que respalda settings.json y elimina solo esos hooks. Doctor nunca edita el archivo por sí mismo.

No hay slots de worker libres

Síntoma: No free worker slots at all: 0 free out of N, o only K/N worker slot(s) free.

Causa: Cada slot en ~/.local/state/emet/slots está en manos de una ejecución viva o inactiva, por lo que la oleada no puede despacharse por completo.

Solución: Espera a que una ejecución libere un slot, o ejecuta emet cleanup --run <runId> para una ejecución que sepas que terminó. emet status muestra quién tiene qué.

Se esperaban worktrees bloqueados, hay menos

Síntoma: Expected N locked worktree(s) for run <id>, found M.

Causa: Los workers no reclamaron su worktree con el motivo de bloqueo, o isolation: "worktree" los colocó en otro lugar. Consulta incidents.md.

Solución: Revisa git worktree list --porcelain para ver las entradas bloqueadas, y emet lock-reason para el formato de motivo esperado.

Un ticket está reclamado por varios worktrees o ramas

Síntoma: <ticket> is claimed by N worktrees, has N branches, o is checked out on branch ..., but its own lock names ticket ....

Causa: Un reintento o un shell mal enrutado dejó un duplicado.

Solución: Conserva el worktree o la rama canónicos, elimina o vuelve a bloquear el resto, y luego ejecuta de nuevo emet preflight.

requiredCommands no está en el PATH

Síntoma: preflight.requiredCommands not on PATH: <names>.

Causa: preflight.requiredCommands en emet.config.json lista binarios que el repositorio necesita.

Solución: Instala los binarios nombrados, o quítalos de la configuración si ya no se necesitan.

Véase también