بنقرة واحدة
recover
Stuck-Ticket recovern — Resume bei vorhandenem Code, Restart bei leerem Worktree
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Stuck-Ticket recovern — Resume bei vorhandenem Code, Restart bei leerem Worktree
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Neues Projekt im aktuellen Workspace verknüpfen — nur Projekt-ID in project.json schreiben
Board-Verbindung einrichten — via jsp_ Token oder Status prüfen
/just-ship-review — Branch lokal auschecken, builden, Dev-Server starten und testen
Just Ship installieren und Projekt konfigurieren — Stack erkennen, project.json befüllen, Board verbinden
Spike-Ergebnis reviewen — Zusammenfassung anzeigen, Follow-Up-Tickets erstellen, Spike-Ticket abschliessen
Single source of truth for how the just-ship pipeline talks to the CEO. Defines the voice (Result-First, tables for lists of 3+, status icons, short active sentences, no inner monologue) and the five Core Templates (develop-complete, ship-complete, ticket-created, epic-created, phase-progress). Every user-facing output string produced by an agent, a skill, or a pipeline phase runs through this skill — never freeform prose. Triggers at the end of /develop, at the end of /ship, in Sidekick replies for ticket/epic creation, in /just-ship-status, and during phase-progress updates. Load whenever you are about to render a terminal block the CEO will read.
| applies_to | all-agents |
| name | recover |
| description | Stuck-Ticket recovern — Resume bei vorhandenem Code, Restart bei leerem Worktree |
Erkennt ob ein Pipeline-Ticket steckengeblieben ist und recovered es automatisch: Resume bei vorhandenem Code, Restart bei leerem Worktree.
Lies project.json. Bestimme den Pipeline-Modus:
pipeline.workspace_id gesetzt -> board-api.sh verwenden:
bash .claude/scripts/board-api.sh get "tickets/{N}"
bash .claude/scripts/board-api.sh patch "tickets/{N}" '{"status": "ready_to_develop"}'
Credentials werden intern aufgelöst. pipeline.project_id aus project.json.pipeline.workspace_id NICHT gesetzt -> Nur lokales Recovery, keine Board-Updates.KEINE RUECKFRAGEN. Entscheide selbst ob Resume oder Restart. Fuehre alle Schritte autonom aus.
Aus $ARGUMENTS:
T-501 -> 501501 -> 501Falls kein Argument uebergeben:
ACTIVE=$(cat .claude/.active-ticket 2>/dev/null || echo "")
Falls $ACTIVE nicht leer: verwende $ACTIVE als Ticket-Nummer.
Falls leer: Fehlermeldung "Keine Ticket-Nummer angegeben. Nutzung: /recover T-{N}" und stoppen.
ACTIVE=$(cat .claude/.active-ticket 2>/dev/null || echo "")
Falls $ACTIVE == {N}: Abbruch mit Meldung "T-{N} wird gerade aktiv bearbeitet." und stoppen.
Ticket vom Board holen:
bash .claude/scripts/board-api.sh get "tickets/{N}"
status und pipeline_status aus der Response auslesen.
Entscheidungslogik:
pipeline_status == paused -> Meldung "T-{N} wartet auf Input." -> Stop. Das ist human-in-the-loop, NICHT stuck.status != in_progress UND pipeline_status ist NICHT running/crashed -> Meldung "T-{N} ist nicht blockiert (status={status}, pipeline_status={pipeline_status})." -> Stop.Falls die Bedingungen erfuellt sind: weiter zu Schritt 3.
Bevor Cleanup passiert — Evidenz erhalten:
bash .claude/scripts/send-event.sh {N} orchestrator agent_failed '{"reason": "manual_stop"}'
Pruefe ob .worktrees/T-{N} existiert:
ls -d .worktrees/T-{N} 2>/dev/null
Falls Worktree existiert:
Aenderungen pruefen:
cd .worktrees/T-{N}
MERGE_BASE=$(git merge-base main HEAD 2>/dev/null || echo "")
DIFF_STAT=""
if [ -n "$MERGE_BASE" ]; then
DIFF_STAT=$(git diff --stat "$MERGE_BASE"..HEAD)
fi
UNCOMMITTED=$(git status --porcelain)
$DIFF_STAT nicht leer ODER $UNCOMMITTED nicht leer -> RESUME (Schritt 5a)Falls kein Worktree existiert:
Pruefe ob ein Branch fuer das Ticket existiert:
git branch --list "feature/T-{N}-*" "fix/T-{N}-*" "chore/T-{N}-*" "docs/T-{N}-*" | head -1
Ausgabe: Resume — T-{N} hat vorhandene Arbeit, setze fort
1. Infrastruktur re-etablieren:
Note:
.active-ticketwird automatisch vom PostToolUse-Hook (detect-ticket-post.sh) gesetzt, sobald der erste Bash-Befehl im Worktree läuft. Kein manuelles Schreiben nötig.
Orchestrator-Event senden:
bash .claude/scripts/send-event.sh {N} orchestrator agent_started
2. Vorhandene Arbeit analysieren:
cd .worktrees/T-{N}
git diff --stat $(git merge-base main HEAD)..HEAD
git status --porcelain
git log --oneline $(git merge-base main HEAD)..HEAD
3. Phase bestimmen:
Pruefe ob ein Checkpoint existiert (z.B. .claude/.checkpoint-T-{N} oder aehnliche Marker). Falls ja, verwende den Checkpoint.
Falls kein Checkpoint — Heuristik:
| Zustand | Einstiegspunkt |
|---|---|
| Uncommitted Aenderungen vorhanden | Ab Schritt 6 (Build-Check) aus /develop |
| Commits vorhanden, kein PR existiert | Ab Schritt 9 (Commit/Push/PR) aus /develop |
| PR existiert bereits | Ab Schritt 10 (Automated QA) aus /develop |
PR-Existenz pruefen:
cd .worktrees/T-{N}
gh pr view 2>/dev/null && echo "PR_EXISTS=true" || echo "PR_EXISTS=false"
4. /develop-Schritte fortsetzen:
Lies commands/develop.md und fuehre die Schritte ab dem bestimmten Schritt aus. Alle Schritte im Worktree .worktrees/T-{N}/ ausfuehren. Ticket-Daten aus dem Board-Response (Schritt 2) verwenden.
5. WICHTIG: Triage und Planung werden NICHT wiederholt. Der Code im Worktree IST das Ergebnis der Planung.
Ausgabe: Restart — T-{N} hat keine verwertbare Arbeit, starte neu
1. Event wurde bereits in Schritt 3 gesendet (Evidenz erhalten bevor Cleanup).
2. Aufraeumen:
Worktree entfernen (falls vorhanden):
git worktree remove .worktrees/T-{N} --force 2>/dev/null || true
Branch loeschen — alle moeglichen Prefixe pruefen:
for PREFIX in feature fix chore docs; do
BRANCH=$(git branch --list "${PREFIX}/T-{N}-*" | head -1 | xargs)
if [ -n "$BRANCH" ]; then
git branch -D "$BRANCH" 2>/dev/null || true
fi
done
Active-Ticket aufraeumen:
rm -f .claude/.active-ticket
3. Ticket zuruecksetzen (falls Pipeline konfiguriert):
bash .claude/scripts/board-api.sh patch "tickets/{N}" '{"status": "ready_to_develop", "pipeline_status": null}'
Beide Felder muessen zurueckgesetzt werden: status auf ready_to_develop UND pipeline_status auf null.
4. /develop aufrufen:
Rufe /develop T-{N} auf — der vollstaendige Entwicklungsflow startet von vorne.
Resume:
recover -- T-{N} fortgesetzt ab Schritt {X}
Restart:
recover -- T-{N} neu gestartet via /develop
git worktree remove --force, dann RESTART/develop