Fehlerbehebung
Fehler von emet doctor und emet preflight, nach dem Sichtbaren gruppiert, jeweils mit Ursache und Lösung. Die Begriffe folgen GLOSSARY.md. Wie die Prüfungen zusammenspielen, steht in der Architektur.
Ein Repo, das noch nur forge.config.json, .forge/ oder FORGE_*-Variablen hat, funktioniert weiter: emet liest die Legacy-Namen, gibt eine stderr-Zeile aus, die jede Legacy-Datei nennt, und emet migrate benennt sie um.
- no emet.config.json
- emet.config.json is malformed
- docs/agents still has TODO(emet) markers
- Eine Abhängigkeitsprüfung schlägt fehl
- no longer documents a flag in –help
- Eine installierte Datei fehlt oder wurde seit der Installation bearbeitet
- Stop hook error: forge: No such file or directory
- Keine freien Worker-Slots
- Gesperrte Worktrees erwartet, weniger gefunden
- Ein Ticket wird von mehreren Worktrees oder Branches beansprucht
- requiredCommands not on PATH
- Siehe auch
no emet.config.json
Symptom: emet doctor gibt no emet.config.json — run "emet init" here aus.
Ursache: Das Repo hat noch keine /emet-Konfiguration.
Lösung: emet init im Repo-Stamm ausführen, dann die erzeugte Konfiguration prüfen und die Dateien in docs/agents/ ausfüllen.
emet.config.json is malformed
Symptom: emet.config.json is malformed: <reason>; emet preflight endet mit Exit-Code 2.
Ursache: Die Konfiguration ist striktes JSON und wird gegen emet/schema/emet.config.schema.json validiert. Kommentare und abschließende Kommas werden abgelehnt.
Lösung: Das in der Begründung genannte Feld korrigieren oder mit emet init --force neu erzeugen.
docs/agents still has TODO(emet) markers
Symptom: docs/agents/ still has N TODO(emet): marker(s); emet doctor meldet außerdem eine fehlende docs/agents/<file>.
Ursache: emet init hinterlässt überall dort eine Markierung, wo es keinen Wert erkennen kann.
Lösung: Jede markierte Zeile ausfüllen oder auflösen und emet init --force ausführen. Preflight verweigert den Dispatch, solange eine übrig ist.
Eine Abhängigkeitsprüfung schlägt fehl
Symptom: Zeilen dependency: ... in emet doctor oder ein blockierender Abhängigkeitsfehler in emet preflight (zum Beispiel fehlendes oder nicht angemeldetes gh oder das Plugin mattpocock-skills fehlt oder hat eine ungetestete Version).
Ursache: /emet braucht git, gh und das Plugin mattpocock-skills; siehe emet/src/dependencies.ts und emet/src/skills.ts.
Lösung: Das Tool installieren oder anmelden oder /setup-matt-pocock-skills ausführen. Ist eine Prüfung für die eigene Umgebung falsch, stuft EMET_SKIP_DEPENDENCY_CHECKS=1 emet preflight sie zu einer Warnung herab.
no longer documents a flag in –help
Symptom: <tool> no longer documents <flags> in --help — emet relies on it oder could not be run — cannot verify <flags>.
Ursache: emet doctor prüft die Flags, von denen emet abhängt, nicht nur, ob die Binärdatei existiert. Die installierte Version hat eines entfernt oder umbenannt.
Lösung: Eine Version des Tools installieren, die das Flag noch dokumentiert.
Eine installierte Datei fehlt oder wurde seit der Installation bearbeitet
Symptom: ~/<path> is missing — re-run install.sh oder ~/<path> was edited since install.
Ursache: Die installierte Kopie stimmt nicht mehr mit dem Installationsmanifest überein.
Lösung: install.sh erneut ausführen. Liegt neben einer bearbeiteten Datei eine ausstehende .new-Datei, diese zusammenführen oder löschen.
Stop hook error: forge: No such file or directory
Symptom: Claude Code gibt am Ende jedes Zuges Stop hook error: … forge: No such file or directory aus (oder dasselbe für emet).
Ursache: ~/.claude/settings.json enthält noch einen Hook forge guard oder emet guard, dessen Binärdatei verschoben oder entfernt wurde.
Lösung: emet doctor . ausführen. Es listet jeden toten Guard-Hook mit seinem Ereignis auf und gibt einen cp … && jq …-Befehl aus, der settings.json sichert und nur diese Hooks entfernt. Doctor ändert die Datei nie selbst.
Keine freien Worker-Slots
Symptom: No free worker slots at all: 0 free out of N oder only K/N worker slot(s) free.
Ursache: Jeder Slot in ~/.local/state/emet/slots wird von einem aktiven oder untätigen Lauf gehalten, sodass die Welle nicht vollständig dispatcht werden kann.
Lösung: Warten, bis ein Lauf einen Slot freigibt, oder emet cleanup --run <runId> für einen Lauf ausführen, von dem bekannt ist, dass er beendet ist. emet status zeigt, wer was hält.
Gesperrte Worktrees erwartet, weniger gefunden
Symptom: Expected N locked worktree(s) for run <id>, found M.
Ursache: Worker haben ihren Worktree nicht mit dem Sperrgrund beansprucht, oder isolation: "worktree" hat sie anderswo platziert. Siehe incidents.md.
Lösung: git worktree list --porcelain auf die gesperrten Einträge prüfen und emet lock-reason für das erwartete Format des Grundes.
Ein Ticket wird von mehreren Worktrees oder Branches beansprucht
Symptom: <ticket> is claimed by N worktrees, has N branches oder is checked out on branch ..., but its own lock names ticket ....
Ursache: Ein Wiederholungsversuch oder eine fehlgeleitete Shell hat ein Duplikat hinterlassen.
Lösung: Den kanonischen Worktree oder Branch behalten, den Rest löschen oder neu sperren und dann emet preflight erneut ausführen.
requiredCommands not on PATH
Symptom: preflight.requiredCommands not on PATH: <names>.
Ursache: preflight.requiredCommands in emet.config.json listet Binärdateien auf, die das Repo braucht.
Lösung: Die genannten Binärdateien installieren oder aus der Konfiguration entfernen, wenn sie nicht mehr gebraucht werden.