Skip to content

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 wykonywania
  • failed - zadanie zakończone niepowodzeniem
  • done - zadanie ukończone pomyślnie

Task zostaje przeniesiony z powrotem do todo/ i automatycznie podejmowany przez watchdog.


Kiedy Używać Restart

Use Cases

  1. Task Failed - automatyczne retry nie pomogło, chcesz spróbować ponownie
  2. Task Stuck - task wisi w in_progress i nie postępuje
  3. Manual Fixes - naprawiłeś coś ręcznie i chcesz task dokończyć
  4. Clean Slate - chcesz zacząć od zera (z --clean-subtasks)
  5. Review Changes - po code review chcesz poprawić i restart

Różnica: Restart vs Reopen

OperacjaStanDodaje instrukcje?Czyści subtaski?
Restartin_progress, failed, doneOpcjonalnieOpcjonalnie
ReopendoneTak (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:

bash
dagu start restart_task -p "TASK_ID=DEV-7315"

Co się dzieje:

  1. Znajduje task w in_progress/, failed/ lub done/
  2. Resetuje status do todo
  3. Zeruje started_at, completed_at, worker_tag
  4. Inkrementuje restarted_count
  5. Przenosi do todo/
  6. 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:

bash
dagu start restart_task -p "TASK_ID=DEV-7315" -p "CLEAN_SUBTASKS=true"

Co się dzieje:

  1. Wszystkie kroki z podstawowego restartu
  2. Dodatkowo: Usuwa cały katalog subtasks/
  3. 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:

bash
dagu start restart_task -p "TASK_ID=DEV-7315" -p "REASON=Fix review comments from PR"

Co się dzieje:

  1. Wszystkie kroki z podstawowego restartu
  2. Dodatkowo: Dodaje sekcję do task.md:
markdown
---

## 🔄 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:

bash
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"

bash
-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/

bash
-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

bash
-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:

  1. $TASKS_DIR/in_progress/
  2. $TASKS_DIR/failed/
  3. $TASKS_DIR/done/

Pierwszy znaleziony task zostaje użyty.

Krok 3: Czyszczenie (opcjonalne)

Jeśli CLEAN_SUBTASKS=true:

bash
🧹 Cleaning subtasks...
   Found 12 subtasks to remove
 Removed all subtasks

Krok 4: Dodanie Powodu (opcjonalne)

Jeśli REASON podane:

bash
 Restart reason appended to task.md

Krok 5: Update task.json

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

bash
 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 automatically

Statusy 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

json
{
  "restarted_at": "2026-01-22T14:30:00Z"
}

restarted_count

Liczba wykonanych restartów.

Type: Number Auto-incremented: Przy każdym restart

json
{
  "restarted_count": 3
}

restarted_from_state

Stan z którego task był restartowany.

Wartości: "in_progress", "failed", "done"Updated: Przy każdym restart

json
{
  "restarted_from_state": "failed"
}

Monitoring i Logi

Sprawdzenie Statusu

bash
# 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

bash
# 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-7315

Przykłady

Przykład 1: Task Failed - Prosty Restart

bash
# 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

bash
# 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

bash
# 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

bash
# 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:

bash
# Znajdź task
find $TASKS_DIR -name "DEV-7315" -type d

# Sprawdź status
ls $TASKS_DIR/{todo,in_progress,failed,done}/ | grep DEV-7315

Task Already in Todo

❌ Error: Task DEV-7315 already exists in todo/

Przyczyna: Task już czeka w kolejce

Rozwiązanie:

bash
# 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.sh

Przyczyna: Brak skryptu helper

Rozwiązanie:

bash
# 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.sh

Integracja z Webhook

Restart zwraca JSON output dla webhook integration:

json
{
  "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:

bash
# 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 --reason jeś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