fix(jobs): name model provider failures instead of "KI-Dienst nicht erreichbar" - #82
Merged
Merged
Conversation
…rreichbar" In the live showcase test on 2026-09-27 Gemini answered 503 three times per call; our AI service passed that on as 502 model_error, but the web client dropped the error body and describeFailure() turned every retryable failure into "Der KI-Dienst ist nicht erreichbar." - the text that misled the external review. The client now keeps the contract's error code for retryable answers (a Record over the generated codes, so a new code fails the build), and staff read the actual cause. No text promises a retry, because it stays after the attempts are used up. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Owner
Author
Frischer Review (/review-pr) – unabhängiger Reviewer-Agent ohne Umsetzungskontext, 2026-09-27Review PR #82 (Fixes #80): mergebar laut Risikomatrix. Keine Blocker, nichts Wichtiges, drei Hinweise. Geprüft
Befunde Urteil: „mergeable per risk matrix“. Alle Akzeptanzkriterien sind mit Tests belegt, die fehlschlagen können, auch an der echten Grenze. CI ist grün. Kein Auslöser für eine menschliche Freigabe. Mergen soll der andere Account (Regel 5). |
…d one as timeout The fresh review of #82 found that the error body of a retryable answer was read without a size limit (a 50 MB body was buffered to get one code) and that a body stalling after the headers ended as "unavailable" instead of "timeout". The client now reads at most 4 KiB of an error body and cancels the rest; a timeout while reading stays a timeout. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Fluory
marked this pull request as ready for review
September 27, 2026 13:28
Owner
Author
|
Merge auf ausdrückliche Freigabe des Orchestrators (2026-09-27: „Ok“). |
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Warum
Fixes #80 · Befund aus dem Live-Test des Showcase am 2026-09-27 (Epic #19)
Arbeitsstand
Was ist passiert (Klartext)
Beim Live-Test war Googles Modell zweimal überlastet. Unser KI-Dienst hat das korrekt gemeldet, die Web-App zeigte aber „Der KI-Dienst ist nicht erreichbar.“ – so, als wäre unser eigener Dienst ausgefallen. Genau dieser Satz hat auch den externen Reviewer in die Irre geführt. Jetzt steht dort, was wirklich los ist: „Das KI-Modell des Anbieters war nicht verfügbar (z. B. überlastet).“ Ist unser Dienst ausgelastet, gestört oder wirklich nicht erreichbar, gibt es dafür jeweils einen eigenen, klaren Satz. Kein Text verspricht einen neuen Versuch, denn der Satz bleibt auch stehen, wenn alle Versuche aufgebraucht sind. Den nächsten Versuch zeigt die Seite ohnehin separat an.
Plan-Pflicht (SYSTEM.md §4)
Geändert
src/features/extraction/ai-client.ts: bei wiederholbaren HTTP-Status liest der Client höchstens 4 KiB der Antwort (Rest wird verworfen, nicht gepuffert; ein Hängen bis zum Timeout zählt alstimeout) und nur das Fehlerobjekt und behält dessen Vertrags-Code (model_error,model_output_invalid,busy,internal_error…); ohne gültigen Code (z. B. eine 502-Seite der Plattform) bleibt es beiunavailable. Die Code-Liste ist einRecordüber den generierten Vertragstyp – ein neuer Code im Vertrag bricht den Build, bis er eingetragen ist.src/features/jobs/process-request.ts:describeFailure()mit eigenem Text je Ursachesrc/features/jobs/describe-failure.test.ts(neu),src/features/extraction/ai-client.test.ts: Fälle je Code, HTML-Fehlerseite, keine Versprechen, keine Hosts/Statustests/integration/processing.test.ts: nackter 503 → „vorübergehend gestört“ (vorher „nicht erreichbar“); neuer Fall 502model_error→ Anbieter-Text bis in die gespeicherte AnfrageCHANGELOG.md: Fixed-Eintrag fix(jobs): name model overload instead of "KI-Dienst nicht erreichbar" #80Nachweis (SYSTEM.md §11)
verify:changed: grün –vitest ai-client.test.ts describe-failure.test.ts40/40; zuerst rot: 9 neue Fälle (Codeunavailablestatt Vertrags-Code, alter Text), nach dem Review 2 weitere (übergroßer und hängender Fehlertext)verify: lokal –lint0 Fehler,typecheckunddepcruisegrün; Unit 221/227, die 6 Fehlschläge sind ausschließlich der Windows-Falltests/architecture/dependency-rules.test.ts(fix(tests): architecture test cannot start dependency-cruiser on Windows #78), in der Linux-CI grün; Integrationprocessing.test.ts14/14 gegen Postgres + S3; volle CI am PRverify:full/ E2E-Spec: nicht betroffen (die Smoke-Specs prüfen keine Fehlertexte)requestflow-ai2026-09-27 10:57 und 10:58:model_call_retry503 ×2, dann 502model_error; die Seite zeigte „nicht erreichbar“). Sichtprüfung des neuen Textes nach dem Deploy, sobald Gemini wieder überlastet antwortet – nicht gezielt auslösbar.Doku-Entscheidung (genau eine)
[Unreleased](sichtbares Feature oder Verhalten – im selben PR, nie „später"): Fixed-Eintrag fix(jobs): name model overload instead of "KI-Dienst nicht erreichbar" #80Entferntes oder Umbenanntes:
docs/+ README gegrept, Treffer bereinigt:docs/technical/operations.md:25nennt „nicht erreichbar“ für den lokalen Betrieb ohne KI-Dienst – das ist ein Netzwerkfehler und bleibt korrektDateigrößen und neue Bausteine (SYSTEM.md §7)
Dateien über 500 Zeilen im Diff (Ausnahmen: generierter Code, Lockfiles, Fixtures, Migrationen, Schemas, Ressourcen, Doku, Konfiguration):
Über 800 Zeilen mit neuer Fachlogik oder über 1000 Zeilen (P1/P2): nicht betroffen
Neue Shared-Komponente, Utility-Datei, Adapter oder fachlicher Service:
Subagent-Einsätze
Keine.
Risiken / offene Punkte
unavailablezurück.job.failedwird genauer: stattai.unavailablejetztai.model_error,ai.busy,ai.internal_erroroderai.model_output_invalid. Im Repo wertet ihn niemand aus; externe Log-Suchen aufai.unavailablemüssten angepasst werden (es gibt derzeit keine).🤖 Generated with Claude Code