Fiks task-runner: fase 13-15, auto-retry ved API-feil

- Legg til fase 13 (traits), 14 (publisering), 15 (adminpanel) i
  avhengighetskartet og blocked_phases-scan
- run-tasks.sh prøver automatisk igjen ved API-feil (500/529) med
  lineær backoff (60s, 120s, ...) opptil 10 forsøk
- Skiller mellom bevisst blokkering ([?]/[!]) og krasj — stopper
  bare ved blokkering, retries ved krasj
- systemd-service (synops-tasks) for auto-restart ved feil
- Oppdater prompt til å reflektere direkte serverkjøring

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
vegard 2026-03-17 22:04:29 +00:00
parent 244da69110
commit 73999f2f45
2 changed files with 35 additions and 6 deletions

View file

@ -29,14 +29,17 @@ declare -A PHASE_DEPS=(
[9]="3" [9]="3"
[10]="2" [10]="2"
[11]="5 6 7" [11]="5 6 7"
[12]="1 2 3 4 5 6 7 8 9 10 11" [12]="1 2 3 4 5 6 7 8 9 10 11 13 14 15"
[13]="3 4"
[14]="6 13"
[15]="3 10"
) )
# --- Finn blokkerte faser --- # --- Finn blokkerte faser ---
# En fase er blokkert hvis den har en [?], [!] eller [~] oppgave # En fase er blokkert hvis den har en [?], [!] eller [~] oppgave
blocked_phases() { blocked_phases() {
local phases="" local phases=""
for phase in $(seq 1 12); do for phase in $(seq 1 15); do
if grep -qP "^\- \[(\?|!|~)\] ${phase}\." "$TASKS" 2>/dev/null; then if grep -qP "^\- \[(\?|!|~)\] ${phase}\." "$TASKS" 2>/dev/null; then
phases="$phases $phase" phases="$phases $phase"
fi fi
@ -219,7 +222,7 @@ $task_text
(hvilke oppgaver er ferdige, hva er tilgjengelig). (hvilke oppgaver er ferdige, hva er tilgjengelig).
2. **Pull siste endringer.** Kjør \`git pull forgejo main\` først — andre 2. **Pull siste endringer.** Kjør \`git pull forgejo main\` først — andre
agenter kan ha pushet endringer. agenter kan ha pushet endringer.
3. **Implementer.** Skriv kode, kjør på server via SSH om nødvendig. 3. **Implementer.** Skriv kode. Du kjører direkte på serveren — bygg, test og deploy her.
4. **Verifiser.** Kompilering, curl-test, kjør relevante tester. 4. **Verifiser.** Kompilering, curl-test, kjør relevante tester.
5. **Oppdater dokumentasjon.** Hvis implementeringen avviker fra eksisterende 5. **Oppdater dokumentasjon.** Hvis implementeringen avviker fra eksisterende
docs, oppdater dem. Nye tekniske beslutninger dokumenteres i relevante docs, oppdater dem. Nye tekniske beslutninger dokumenteres i relevante

View file

@ -1,6 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Kjører oppgaver sekvensielt til ingen flere er tilgjengelige. # Kjører oppgaver sekvensielt til ingen flere er tilgjengelige.
# Venter mellom sesjoner. Stopper når alt er gjort, blokkert, eller trenger avklaring. # Venter mellom sesjoner. Stopper når alt er gjort, blokkert, eller trenger avklaring.
# Ved API-feil (500/529) venter scriptet og prøver igjen automatisk.
# #
# Bruk: # Bruk:
# ./scripts/run-tasks.sh # kjør til ferdig/blokkert # ./scripts/run-tasks.sh # kjør til ferdig/blokkert
@ -9,6 +10,8 @@
set -euo pipefail set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)" ROOT="$(cd "$(dirname "$0")/.." && pwd)"
INTERVAL=30 INTERVAL=30
MAX_API_RETRIES=10
API_RETRY_DELAY=60 # sekunder mellom retries ved API-feil
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
@ -19,6 +22,7 @@ done
cd "$ROOT" cd "$ROOT"
completed=0 completed=0
api_failures=0
while true; do while true; do
# Sjekk om det finnes noe å gjøre # Sjekk om det finnes noe å gjøre
@ -49,14 +53,36 @@ while true; do
if [[ $exit_code -eq 0 ]]; then if [[ $exit_code -eq 0 ]]; then
((completed++)) ((completed++))
api_failures=0 # Nullstill ved suksess
echo "" echo ""
echo "--- Oppgave ferdig (#$completed). Neste om ${INTERVAL}s (Ctrl-C for å stoppe) ---" echo "--- Oppgave ferdig (#$completed). Neste om ${INTERVAL}s (Ctrl-C for å stoppe) ---"
echo "" echo ""
sleep "$INTERVAL" sleep "$INTERVAL"
else else
# Sjekk om oppgaven ble tilbakestilt (typisk API-feil/krasj)
# vs. om den ble markert [?] eller [!] (bevisst blokkering)
status_output=$(./scripts/run-next-task.sh --dry 2>&1)
if echo "$status_output" | grep -q "Ingen tilgjengelige\|Alle oppgaver er gjort"; then
# Oppgaven ble blokkert [?]/[!], eller alt er gjort — stopp
echo ""
echo "--- Sesjon feilet og ingen oppgaver tilgjengelig. Stopper. ---"
./scripts/run-next-task.sh --status
break
fi
# Oppgaven ble tilbakestilt til [ ] — sannsynligvis API-feil
((api_failures++))
if [[ $api_failures -ge $MAX_API_RETRIES ]]; then
echo ""
echo "--- $MAX_API_RETRIES feil på rad. Stopper. ---"
./scripts/run-next-task.sh --status
break
fi
delay=$((API_RETRY_DELAY * api_failures)) # Lineær backoff: 60, 120, 180...
echo "" echo ""
echo "--- Sesjon feilet (exit $exit_code). Stopper. ---" echo "--- Sesjon feilet (exit $exit_code). Forsøk $api_failures/$MAX_API_RETRIES. Venter ${delay}s... ---"
./scripts/run-next-task.sh --status echo ""
break sleep "$delay"
fi fi
done done