Restart Task - Operacja Restartu Zadania
Przegląd
Mechanizm restartu pozwala na ponowne uruchomienie zadania, które znajduje się w stanie:
in_progress- zadanie w trakcie wykonywaniafailed- zadanie zakończone niepowodzeniemdone- zadanie ukończone pomyślnie
Task zostaje przeniesiony z powrotem do todo/ i automatycznie podejmowany przez watchdog.
Kiedy Używać Restart
Use Cases
- Task Failed - automatyczne retry nie pomogło, chcesz spróbować ponownie
- Task Stuck - task wisi w in_progress i nie postępuje
- Manual Fixes - naprawiłeś coś ręcznie i chcesz task dokończyć
- Clean Slate - chcesz zacząć od zera (z
--clean-subtasks) - Review Changes - po code review chcesz poprawić i restart
Różnica: Restart vs Reopen
| Operacja | Stan | Dodaje instrukcje? | Czyści subtaski? |
|---|---|---|---|
| Restart | in_progress, failed, done | Opcjonalnie | Opcjonalnie |
| Reopen | done | Tak (wymagane) | Nie |
Restart - prosty, szybki restart bez modyfikacji Reopen - restart z dodatkowymi instrukcjami (follow-up work)
Użycie
Podstawowy Restart
Najprostsza forma - restart taska bez żadnych zmian:
dagu start restart_task -p "TASK_ID=DEV-7315"Co się dzieje:
- Znajduje task w
in_progress/,failed/lubdone/ - Resetuje status do
todo - Zeruje
started_at,completed_at,worker_tag - Inkrementuje
restarted_count - Przenosi do
todo/ - Watchdog automatycznie podejmie task
Zachowane:
- Wszystkie subtaski (jeśli istnieją)
- Branch Git
- Sesje AI (jeśli są zapisane)
- Poprzedni stan (zapisany w
restarted_from_state)
Restart z Czyszczeniem Subtasków
Usuń wszystkie subtaski i zacznij od zera:
dagu start restart_task -p "TASK_ID=DEV-7315" -p "CLEAN_SUBTASKS=true"Co się dzieje:
- Wszystkie kroki z podstawowego restartu
- Dodatkowo: Usuwa cały katalog
subtasks/ - Task zacznie od tworzenia subtasków od nowa
Użyj gdy:
- Subtaski są w złym stanie
- Chcesz zupełnie świeżego podejścia
- Zmienił się plan implementacji
- Po znaczących zmianach w kodzie base
Restart z Powodem
Dodaj powód restartu do task.md:
dagu start restart_task -p "TASK_ID=DEV-7315" -p "REASON=Fix review comments from PR"Co się dzieje:
- Wszystkie kroki z podstawowego restartu
- Dodatkowo: Dodaje sekcję do
task.md:
---
## 🔄 Task Restarted
**Date:** 2026-01-22T14:30:00Z
**Previous state:** in_progress
**Clean subtasks:** false
### Restart Reason:
Fix review comments from PR
---Użyj gdy:
- Chcesz udokumentować dlaczego restart
- Task ma historię wielu restartów
- Dla audytu/debugowania
Kombinacja Opcji
Możesz łączyć wszystkie opcje:
dagu start restart_task \
-p "TASK_ID=DEV-7315" \
-p "CLEAN_SUBTASKS=true" \
-p "REASON=Complete rebuild after architecture change"Parametry
TASK_ID (wymagany)
ID zadania do restartu.
Format: String (task_id z task.json) Przykład: "DEV-7315", "API-456", "BUG-123"
-p "TASK_ID=DEV-7315"CLEAN_SUBTASKS (opcjonalny)
Czy usunąć wszystkie subtaski przed restartem.
Wartości: true, false (default) Efekt: Usuwa cały katalog subtasks/
-p "CLEAN_SUBTASKS=true"REASON (opcjonalny)
Powód restartu - zostanie dodany do task.md.
Format: String (dowolny tekst) Efekt: Dodaje sekcję "Task Restarted" do task.md
-p "REASON=Fix review comments"Przepływ Operacji
Krok 1: Walidacja
✅ Task ID: DEV-7315
✅ Clean subtasks: true
✅ Restart reason: Fix review comments
Validation passed ✅Krok 2: Szukanie Taska
Przeszukuje katalogi w kolejności:
$TASKS_DIR/in_progress/$TASKS_DIR/failed/$TASKS_DIR/done/
Pierwszy znaleziony task zostaje użyty.
Krok 3: Czyszczenie (opcjonalne)
Jeśli CLEAN_SUBTASKS=true:
🧹 Cleaning subtasks...
Found 12 subtasks to remove
✅ Removed all subtasksKrok 4: Dodanie Powodu (opcjonalne)
Jeśli REASON podane:
✅ Restart reason appended to task.mdKrok 5: Update task.json
{
"status": "todo",
"started_at": null,
"completed_at": null,
"worker_tag": null,
"restarted_at": "2026-01-22T14:30:00Z",
"restarted_count": 2,
"restarted_from_state": "failed"
}Krok 6: Przeniesienie
✅ Task moved: failed/ → todo/Krok 7: Summary
📋 Summary:
Task ID: DEV-7315
Status: todo (ready for watchdog)
Restarted from: failed
Restarted count: 2
Clean subtasks: true
Location: /path/to/tasks/todo/DEV-7315
🤖 Watchdog will pick up this task automaticallyStatusy w task.json
Nowe Pola
Restart dodaje/aktualizuje następujące pola w task.json:
restarted_at
Timestamp ostatniego restartu.
Format: ISO 8601 Auto-updated: Przy każdym restart
{
"restarted_at": "2026-01-22T14:30:00Z"
}restarted_count
Liczba wykonanych restartów.
Type: Number Auto-incremented: Przy każdym restart
{
"restarted_count": 3
}restarted_from_state
Stan z którego task był restartowany.
Wartości: "in_progress", "failed", "done"Updated: Przy każdym restart
{
"restarted_from_state": "failed"
}Monitoring i Logi
Sprawdzenie Statusu
# Czy task jest w todo?
ls $TASKS_DIR/todo/ | grep DEV-7315
# Sprawdź task.json
cat $TASKS_DIR/todo/DEV-7315/task.json | jq '.status, .restarted_count'
# Sprawdź historię restartów
cat $TASKS_DIR/todo/DEV-7315/task.json | jq '{
restarted_at,
restarted_count,
restarted_from_state
}'Logi DAG
# Logi restart_task DAG
cat ~/.dagu/logs/restart_task/*/restart_task.log
# Logi watchdog (czy podniósł task)
cat ~/.dagu/logs/watchdog/*/watchdog.log | grep DEV-7315Przykłady
Przykład 1: Task Failed - Prosty Restart
# Task DEV-7315 failed, chcę spróbować ponownie
dagu start restart_task -p "TASK_ID=DEV-7315"Rezultat: Task wraca do todo, wszystkie subtaski zachowane, watchdog podejmie.
Przykład 2: Task Stuck - Restart z Czyszczeniem
# Task API-456 wisi w in_progress, subtaski w złym stanie
dagu start restart_task -p "TASK_ID=API-456" -p "CLEAN_SUBTASKS=true"Rezultat: Task wraca do todo, subtaski usunięte, zacznę od nowa.
Przykład 3: Po Review - Restart z Powodem
# Task BUG-123 done, ale reviewer ma uwagi
dagu start restart_task \
-p "TASK_ID=BUG-123" \
-p "REASON=Address code review comments: improve error handling"Rezultat: Task wraca do todo, powód zapisany w task.md.
Przykład 4: Complete Rebuild
# Task wymaga pełnego przebudowania
dagu start restart_task \
-p "TASK_ID=FEAT-789" \
-p "CLEAN_SUBTASKS=true" \
-p "REASON=Architecture change requires complete rebuild"Rezultat: Task czysty start, udokumentowany powód.
Błędy i Rozwiązania
Task Not Found
❌ Error: Task DEV-7315 not found in in_progress/, failed/, or done/Przyczyny:
- Task ID błędnie podany
- Task już w
todo/ - Task w innym stanie (archiwizowany)
Rozwiązanie:
# Znajdź task
find $TASKS_DIR -name "DEV-7315" -type d
# Sprawdź status
ls $TASKS_DIR/{todo,in_progress,failed,done}/ | grep DEV-7315Task Already in Todo
❌ Error: Task DEV-7315 already exists in todo/Przyczyna: Task już czeka w kolejce
Rozwiązanie:
# Sprawdź czy rzeczywiście w todo
ls -la $TASKS_DIR/todo/DEV-7315/
# Jeśli to duplikat, usuń stary
rm -rf $TASKS_DIR/todo/DEV-7315/
# Restart ponownie
dagu start restart_task -p "TASK_ID=DEV-7315"Script Not Found
❌ ERROR: restart_task.sh not found at /path/scripts/restart_task.shPrzyczyna: Brak skryptu helper
Rozwiązanie:
# Sprawdź ścieżkę
echo $DAGS_DIR
# Sprawdź czy skrypt istnieje
ls -la $DAGS_DIR/scripts/restart_task.sh
# Jeśli brak, przekopiuj z repo
cp /path/to/manager/dags/scripts/restart_task.sh $DAGS_DIR/scripts/
chmod +x $DAGS_DIR/scripts/restart_task.shIntegracja z Webhook
Restart zwraca JSON output dla webhook integration:
{
"task_id": "DEV-7315",
"status": "restarted",
"previous_state": "failed",
"restarted_at": "2026-01-22T14:30:00Z",
"restarted_count": 2,
"clean_subtasks": true,
"reason": "Fix review comments",
"location": "/path/to/tasks/todo/DEV-7315"
}Użycie:
- Notyfikacje Mattermost
- Status updates
- Audit log
- Dashboard updates
Best Practices
1. Restart vs Reopen
Użyj Restart gdy:
- Chcesz po prostu ponownie uruchomić task
- Task failed i chcesz retry
- Task stuck i wymaga restartu
Użyj Reopen gdy:
- Task done, ale potrzebujesz dodatkowej pracy
- Masz konkretne nowe wymagania
- Follow-up work po code review
2. Clean Subtasks
Użyj --clean-subtasks gdy:
- Subtaski w złym/niespójnym stanie
- Zmienił się plan implementacji
- Po znaczących zmianach w codebase
- Dla debugowania (świeży start)
Nie używaj gdy:
- Chcesz kontynuować z tego miejsca
- Większość subtasków jest OK
- Tylko jeden/dwa subtaski do poprawki
3. Dokumentuj Powody
Zawsze dodawaj --reason gdy:
- Task był już restartowany wcześniej (restarted_count > 0)
- Restart z powodu zewnętrznych zmian
- Dla audytu/przejrzystości zespołu
4. Monitoring
Po restart zawsze:
# Sprawdź czy task w todo
ls $TASKS_DIR/todo/ | grep <TASK_ID>
# Monitor watchdog
tail -f ~/.dagu/logs/watchdog/*/watchdog.log
# Sprawdź czy został podniesiony
ls $TASKS_DIR/in_progress/ | grep <TASK_ID>Checklist
Przed restartem taska:
- [ ] Sprawdź aktualny stan taska (
find $TASKS_DIR -name <TASK_ID>) - [ ] Zdecyduj czy potrzebujesz
--clean-subtasks - [ ] Przygotuj
--reasonjeśli to kolejny restart - [ ] Sprawdź czy task nie jest już w todo
- [ ] Po restart: monitoruj logi watchdog
- [ ] Sprawdź czy task został podniesiony przez watchdog
Pliki i Lokalizacje
Skrypty
- Helper script:
dags/scripts/restart_task.sh - DAG workflow:
dags/restart_task.yaml
Katalogi
- Task states:
$TASKS_DIR/{todo,in_progress,failed,done}/ - Logi:
~/.dagu/logs/restart_task/
Dokumentacja
- Operations:
.doc/operations/restart-task.md(ten plik) - Task Config:
.doc/implementation/task-configuration.md
Zobacz Też
- Reopen Task (
dags/scripts/reopen_task.sh) - Restart z dodatkowymi instrukcjami - Watchdog (
dags/watchdog.yaml) - Automatyczne podejmowanie tasków - Task Configuration - Struktura task.json