fix(preflight): retry transient stack-onbeschikbaarheid i.p.v. permanent parkeren #39

Merged
janpeter merged 1 commit from fix/preflight-retry-transient into master 2026-06-15 12:15:00 +02:00
Owner

Probleem

Na een reboot kan een agent-container opstarten vóór de host-web-app (scrum4me-web.service, systemd op :3000) en de caddy-stack up zijn. check-tokens.sh faalt dan op de Scrum4Me-API (caddy → 502/503), en run-agent.sh deed bij élke pre-flight-fout sleep infinity. Resultaat: de worker hangt permanent tot een handmatige restart.

Waargenomen 2026-06-15: scrum4me-agent-codex 9u vast na reboot terwijl de web-app allang gezond was (/api/products → 401).

Fix

check-tokens.sh — exit-taxonomie:

  • 0 ok
  • 1 permanent (credential/config): 401/403, ontbrekende/verkeerde agent-credential, ontbrekende SCRUM4ME_TOKEN/DATABASE_URL. Heelt niet vanzelf → parkeren.
  • 2 transient (connectiviteit): API onbereikbaar (000) / 5xx / overige non-200, DB-TCP onbereikbaar. Typisch reboot-race → retryen.
  • Permanent wint van transient.

run-agent.sh — pre-flight retryt op rc=2 met bounded backoff (AGENT_PREFLIGHT_RETRIES=30 × AGENT_PREFLIGHT_BACKOFF=10s ≈ 5 min) en parkeert + UNHEALTHY alleen bij rc=1 of uitgeput budget (gedrag van voorheen, debugbaar).

Fleet-breed: zelfde scripts draaien idea + codex.

Test

  • bash -n op beide scripts
  • Unit-test exit-taxonomie (gestubde _lib.sh): missing-token → 1, API-000 → 2, perm+transient → 1
  • Deploy-test via cache-bust rebuild + container-start met onbereikbare web (zie PR-thread)

PBI-7 / ST-013 / T-55.

🤖 Generated with Claude Code

## Probleem Na een reboot kan een agent-container opstarten vóór de host-web-app (`scrum4me-web.service`, systemd op :3000) en de caddy-stack up zijn. `check-tokens.sh` faalt dan op de Scrum4Me-API (caddy → **502/503**), en `run-agent.sh` deed bij **élke** pre-flight-fout `sleep infinity`. Resultaat: de worker hangt **permanent** tot een handmatige restart. Waargenomen 2026-06-15: `scrum4me-agent-codex` 9u vast na reboot terwijl de web-app allang gezond was (`/api/products` → 401). ## Fix `check-tokens.sh` — exit-taxonomie: - `0` ok - `1` **permanent** (credential/config): 401/403, ontbrekende/verkeerde agent-credential, ontbrekende `SCRUM4ME_TOKEN`/`DATABASE_URL`. Heelt niet vanzelf → parkeren. - `2` **transient** (connectiviteit): API onbereikbaar (`000`) / 5xx / overige non-200, DB-TCP onbereikbaar. Typisch reboot-race → retryen. - Permanent wint van transient. `run-agent.sh` — pre-flight retryt op `rc=2` met bounded backoff (`AGENT_PREFLIGHT_RETRIES=30` × `AGENT_PREFLIGHT_BACKOFF=10s` ≈ 5 min) en parkeert + `UNHEALTHY` alleen bij `rc=1` of uitgeput budget (gedrag van voorheen, debugbaar). Fleet-breed: zelfde scripts draaien idea + codex. ## Test - `bash -n` op beide scripts ✅ - Unit-test exit-taxonomie (gestubde `_lib.sh`): missing-token → 1, API-`000` → 2, perm+transient → 1 ✅ - Deploy-test via cache-bust rebuild + container-start met onbereikbare web (zie PR-thread) PBI-7 / ST-013 / T-55. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Na een reboot kan een agent-container opstarten vóór de host-web-app/caddy-stack
up is. check-tokens.sh faalde dan (caddy 502/503) en run-agent.sh deed bij élke
pre-flight-fout `sleep infinity` → de worker hing permanent tot handmatige
restart (waargenomen: scrum4me-agent-codex 9u vast na reboot).

check-tokens.sh: exit-taxonomie 0=ok, 1=permanent (revoked token 401/403,
ontbrekende/verkeerde agent-credential, ontbrekende config), 2=transient
(API onbereikbaar/000/5xx, DB-TCP onbereikbaar). Permanent wint van transient.

run-agent.sh: pre-flight retryt op rc=2 met bounded backoff
(AGENT_PREFLIGHT_RETRIES=30 × AGENT_PREFLIGHT_BACKOFF=10s ≈ 5 min) en parkeert
+UNHEALTHY alleen bij rc=1 of uitgeput budget (gedrag van voorheen). Fleet-breed:
zelfde scripts draaien idea + codex.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
janpeter merged commit 6f65aac3c5 into master 2026-06-15 12:15:00 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
janpeter/scrum4me-docker!39
No description provided.