From 73999f2f450fd2d15fc3bbf7810a2112dd135638 Mon Sep 17 00:00:00 2001 From: vegard Date: Tue, 17 Mar 2026 22:04:29 +0000 Subject: [PATCH] Fiks task-runner: fase 13-15, auto-retry ved API-feil MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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) --- scripts/run-next-task.sh | 9 ++++++--- scripts/run-tasks.sh | 32 +++++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/scripts/run-next-task.sh b/scripts/run-next-task.sh index 3d5ab8c..f32ad79 100755 --- a/scripts/run-next-task.sh +++ b/scripts/run-next-task.sh @@ -29,14 +29,17 @@ declare -A PHASE_DEPS=( [9]="3" [10]="2" [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 --- # En fase er blokkert hvis den har en [?], [!] eller [~] oppgave blocked_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 phases="$phases $phase" fi @@ -219,7 +222,7 @@ $task_text (hvilke oppgaver er ferdige, hva er tilgjengelig). 2. **Pull siste endringer.** Kjør \`git pull forgejo main\` først — andre 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. 5. **Oppdater dokumentasjon.** Hvis implementeringen avviker fra eksisterende docs, oppdater dem. Nye tekniske beslutninger dokumenteres i relevante diff --git a/scripts/run-tasks.sh b/scripts/run-tasks.sh index b2f08d7..d11878e 100755 --- a/scripts/run-tasks.sh +++ b/scripts/run-tasks.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash # Kjører oppgaver sekvensielt til ingen flere er tilgjengelige. # 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: # ./scripts/run-tasks.sh # kjør til ferdig/blokkert @@ -9,6 +10,8 @@ set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" INTERVAL=30 +MAX_API_RETRIES=10 +API_RETRY_DELAY=60 # sekunder mellom retries ved API-feil while [[ $# -gt 0 ]]; do case $1 in @@ -19,6 +22,7 @@ done cd "$ROOT" completed=0 +api_failures=0 while true; do # Sjekk om det finnes noe å gjøre @@ -49,14 +53,36 @@ while true; do if [[ $exit_code -eq 0 ]]; then ((completed++)) + api_failures=0 # Nullstill ved suksess echo "" echo "--- Oppgave ferdig (#$completed). Neste om ${INTERVAL}s (Ctrl-C for å stoppe) ---" echo "" sleep "$INTERVAL" 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 "--- Sesjon feilet (exit $exit_code). Stopper. ---" - ./scripts/run-next-task.sh --status - break + echo "--- Sesjon feilet (exit $exit_code). Forsøk $api_failures/$MAX_API_RETRIES. Venter ${delay}s... ---" + echo "" + sleep "$delay" fi done