Skip to content

Subscription-Backend: CLI-Timeout (300s) killt Läufe bzw. verschluckt Konzepte still — kein Retry-Budget, Exit 0 trotz Verlust #210

Description

@TillQuandel

Befund aus den #185-Messläufen (2026-07-12, Nacht — Details im PR-Kommentar): claude CLI Timeout nach 300s in 3 Läufen, mit zwei unterschiedlichen, jeweils problematischen Folgen.

Symptom 1 — Planner-Timeout ist sofort fatal (kein Retry)

Lauf 23:57 (Trace 20260711-235727): Der Planner-Call hängt 300 s, _subscription_backend.call_full wirft RuntimeError, der Orchestrator stirbt mit Traceback (Exit 1). runtime-config zeigt timeout_retries=0 (legacy-Profil) — ein einzelner transienter CLI-Hänger kostet den kompletten Lauf inkl. der bereits gelaufenen Stages 1–4.

Symptom 2 — Extractor-Timeout verschluckt ein Konzept STILL (Exit 0)

Lauf 00:22 (Trace 20260712-002220, MAX_CONCURRENT_CALLS=1): Planner plant 2 Konzepte, Extractor-Call 1 stirbt am 300-s-Timeout (Error-Record im Trace, 0 Tokens), Call 2 läuft normal. Ergebnis: === Fertig: 1 Notes (dry-run) ===, Exit-Code 0, keine Warnung im Summary — das verlorene Konzept ist nur im Trace sichtbar. Wer den Lauf nicht forensisch nachliest, hält 1 Note für das vollständige Ergebnis.

Das verletzt Design-Maxime 1 (AGENTS.md): stilles Scheitern statt „erkennen → drosseln → klar melden". Für fremde Nutzer ist das schlicht Datenverlust ohne Diagnose.

Kontext

Fix-Richtung (Diskussion)

  1. Retry-Budget für Timeout-Fälle (mind. 1 Retry mit frischem CLI-Prozess) — auch im legacy-Profil; der Retry profitiert nach Token-Hebel: Extractor-Prompt-Reihenfolge zerstoert Prefix-Cache (41 % cache_creation gemessen) #147/perf: Extractor-Prompt-Layout für Prefix-Cache (Messung ausstehend) #185 sogar vom inzwischen angelegten Prompt-Cache.
  2. Kein stilles Verschlucken: Fehlgeschlagene Konzepte im Run-Summary ausweisen („1 von 2 Konzepten fehlgeschlagen: Timeout") + Exit-Code ≠ 0 oder mindestens deutlicher ⚠-Block; Zählung auch in pipeline_runs (n_dropped o. ä.), damit das Dashboard es sieht.
  3. Optional: Call-Timeout konfigurierbar/adaptiv (300 s ist bei großen Präfix-Prompts + Cache-Neuanlage knapp bemessen).

Belege: Traces 20260711-235727.jsonl (Fragment, Fehler-Record Planner) und 20260712-002220.jsonl (Extractor-Error-Record + erfolgreicher Zweit-Call) in generative/.cache/runs/.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions