WIP: fix: "Failed to fetch" auf Hetzner — Job-Polling statt Langläufer-Request #10
No reviewers
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: its-consulting/Rentenversicherer#10
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "claude/hetzner-fetch-failure-hlljm0"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Auf dem Hetzner-Server zeigt die UI „Failed to fetch" (siehe Screenshot des Users), sobald „Analysieren & Ausfüllen" geklickt wird.
Wichtige Diagnose: „Failed to fetch" ist die wörtliche Browser-Meldung für eine abgewiesene
fetch()-Promise — der Browser bekommt gar keine HTTP-Antwort. Ein kaputtesclaude -pwürde dagegen vom Server als sauberes JSON (502 {error, details}) zurückkommen und im Frontend als lesbarer Text erscheinen. Die Meldung deutet also auf die Transport-Ebene, nicht auf Claude-Logik.Ursache
POST /api/processhielt die HTTP-Verbindung 30–120 s+ offen, währendclaude -pals Subprozess lief. Hinter einem Reverse-Proxy (Container hängt immatrix_default-Netz) kappt dessen Read-/Idle-Timeout so eine Langläufer-Verbindung, bevor Claude fertig ist → Verbindung gedroppt ohne saubere Antwort → „Failed to fetch". Gleiches gilt bei kurzen Netz-Hängern oder einem Container-Neustart mitten in der Anfrage.Fix: Job-Pattern
server/index.ts):POST /api/processregistriert einen Job und antwortet sofort mit202 {jobId}.claudeläuft im Hintergrund; Ergebnis bzw. Fehler landen in einem In-Memory-Job-Store (TTL 15 min, periodische Bereinigung). NeuerGET /api/process/:jobIdliefertpending/done/errorin kurzen, proxy-sicheren Requests. Temp-Verzeichnis wird erst nach Job-Ende aufgeräumt.services/api.ts): pollt den Job alle 2 s. Ein transienter Netzfehler beim Pollen wird erneut versucht (bis 8x in Folge) statt die Analyse abzubrechen. Echte Claude-Fehler werden jetzt als Klartext angezeigt statt als „Failed to fetch".Damit kann der Proxy keine Langläufer-Verbindung mehr abschneiden, und transiente Abbrüche werden automatisch überbrückt.
Test
npm run typecheck✅npm run buildscheitert im CI-Container nur am fehlenden Schwester-Repo../kanagawa-design-system/(Build-Context-Detail, unabhängig von dieser Änderung).Hinweis zur Server-Diagnose
Falls nach dem Deploy weiterhin Probleme auftreten, lohnt sich am Server:
docker logs rentenv,docker exec rentenv wget -qO- http://127.0.0.1:3011/api/healthund ein direkterclaude -p-Test im Container, um Auth/Hang auszuschließen.🤖 Generated with Claude Code
Generated by Claude Code
✨ Finishing Touches
🧪 Generate unit tests (beta)
claude/hetzner-fetch-failure-hlljm0Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
❤️ Share
Comment
@coderabbitai helpto get the list of available commands and usage tips.View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.