Ausgangslage, gemessen statt geschaetzt: Von 99 fachlichen Endpunkten rief die
Oberflaeche 23 auf. Schreibend waren es neun, vier davon An- und Abmeldung.
Real verwaltbar war: einen Auftrag anlegen, einen Bericht erzeugen, eine
Meldung bestaetigen. Das ist ein Leseinstrument, keine Verwaltungskonsole.
Dieser Schritt legt das Fundament und macht den ersten Bereich vollstaendig
bedienbar.
Fundament:
- Tailwind v4 und Radix-Primitive (shadcn-Muster). Alles gebuendelt, keine
externen Ressourcen — die CSP der Auslieferung laesst sie ohnehin nicht zu.
- Farbsystem nach PROMPT.md §106: Semantische Farben ausschliesslich fuer
Status, sonst neutral. Die Zuordnung der Fachbegriffe auf die fuenf
Bedeutungen steht an genau **einer** Stelle (StatusBadge). Verteilt ueber die
Seiten erschiene frueher oder spaeter irgendwo "partial_failure" gruen, und
ein Betreiber haelt einen Teilfehler dann fuer einen Erfolg. Ein unbekannter
Zustand wird neutral dargestellt, nie gruen.
- Neue Seitenhuelle mit fuenf Bereichen, einklappbarer Seitenleiste, Schublade
auf schmalen Geraeten und Dark Mode ueber ein Attribut am Wurzelelement (nicht
allein ueber die Medienabfrage — eine Konsole, die nachts waehrend einer
Stoerung von selbst umschaltet, ist laestig).
- `useMutation` fuer schreibende Aufrufe: Doppelklickschutz, Vorgangsnummer bis
in die Meldung, kein setState nach dem Aushaengen. `describeApiError`
uebersetzt die bekannten Fehlercodes in Saetze **mit Abhilfe**.
- Der API-Client sendet jetzt `Idempotency-Key`. Ohne ihn erzeugt ein
Doppelklick zwei Auftraege — und bei einer Wiederherstellung zwei
gleichzeitige Laeufe in dasselbe Ziel.
- Fehlermeldungen nennen immer die `request_id`, kopierbar.
Auftraege (Endpunkte, die vorher keine Oberflaeche hatten):
- Lauf anstossen, anhalten, fortsetzen, loeschen, laufenden Lauf abbrechen.
- Detailseite mit Laufhistorie: Fehlercode, Fehlerklasse und die Auskunft, ob
eine Wiederholung ueberhaupt etwas bringt — ein Anmeldefehler behebt sich
nicht durch Warten.
- **Ein zweiter Anstoss ist kein Fehler, sondern eine Auskunft.** Der 409 wird
als Hinweis gezeigt, nicht als Fehlschlag: Der Auftrag laeuft ja, und genau
das wollte der Betreiber.
- **Loeschen nennt die Folgen.** Die Wiederherstellungspunkte bleiben bestehen;
sie gehoeren zum Repository, nicht zum Auftrag. Ohne diesen Hinweis loescht
jemand einen Auftrag in der Annahme, Platz zu schaffen.
Der Wiederherstellungs-Assistent ist gebaut (vier Schritte, Vorabpruefung als
eigener Schritt, die drei Huerden vor dem Ueberschreiben sichtbar umgesetzt),
aber noch nicht in eine Seite eingebunden.
Drei Lint-Befunde behoben, alle dieselbe Sorte wie in Phase 8 und 12:
setState im Effektkoerper und ein Schreibzugriff auf eine Referenz waehrend des
Renderns. Der Bestaetigungsdialog haelt seinen Zustand jetzt im Portalinhalt —
beim Schliessen verschwindet er von selbst, ein Zuruecksetzen im Effekt
entfaellt, und die Huerde steht beim naechsten Oeffnen wieder.
Die noch nicht umgebauten Seiten behalten vorerst das alte Stylesheet. Es faellt
weg, sobald die letzte umgebaut ist.
69 Tests gruen, tsc sauber, eslint ohne Warnung, Bau 373 KB (115 KB gzip).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>