fix(abnahme): Healthcheck schweigt, zwei Konventionen praezisiert #41

Merged
florian.wilde merged 2 commits from feat/39-40-nachtrag-abnahme into main 2026-10-04 14:12:29 +00:00
Owner

Die beiden kleinen Befunde aus der Abnahme zu #19, die noch offen waren.

#39 — /api/gesundheit verrät nichts mehr

Der Pfad steht in der Allowlist des Proxys, damit ein Healthcheck kein Cookie braucht. Eine Meldung von Prisma oder pg nennt aber Host, Port, Benutzernamen und Datenbanknamen — für etwas, das ohne Anmeldung antwortet, ist das zu viel.

Nach außen bleibt {"status":"fehler"} mit 503, damit Docker und der Reverse Proxy weiter richtig entscheiden; die Begründung geht ins Protokoll des Prozesses, nach demselben Muster, das src/server/actions/verzeichnis.ts schon für unbekannte Ausnahmen benutzt.

Fünf Tests, einer davon für die andere Hälfte der Zusage: dass die Begründung wirklich geschrieben und nicht bloß verschluckt wird. Gegenprobe gefahren — mit der alten Fassung werden drei davon rot, und die Ausgabe zeigt das Leck wörtlich.

#40 — zwei Konventionen, die strenger klangen als gemeint

„Nie auf rohe Hexwerte" hat sechs begründete Ausnahmen: Papier (zwei Druckansichten), ein QR-Decoder (src/lib/qr.ts braucht reines Schwarz auf reinem Weiß) und das Web-App-Manifest samt themeColor, die keine CSS-Variablen vertragen. Sie stehen jetzt als Tabelle mit Begründung je Zeile. Die Regel wurde ergänzt, nicht der Code geändert — eine gemeinsame Konstante über drei unverwandte Dinge hätte die Begründung versteckt.

Der LDAP-Container steht jetzt im Tor vor jedem Commit, in CLAUDE.md und im README. Ohne ihn überspringt die Suite 22 Tests — nachgezählt, nicht geschätzt: 81 mit Container, 59 ohne. Sie sagt es auf stderr, der Lauf sieht trotzdem grün aus. Im README fehlte zusätzlich format:pruefen, das CLAUDE.md seit #010 verlangt.

Damit das hält, auch wenn niemand hinsieht: pnpm pruefe:doku vergleicht die beiden Schranken-Blöcke und verlangt von beiden den Container. Auch hier Gegenprobe gefahren — die Prüfung benennt die Abweichung genau.

Zwei Korrekturen am Issue selbst

Der Abnahme-Review hatte vier Hexwerte genannt und src/lib/qr.ts übersehen; es sind sechs. Und das Issue behauptete, die Regel stehe gleichlautend in docs/architektur.md — tut sie nicht, sie steht nur in CLAUDE.md. Beides im Issue-Text richtiggestellt, statt einen richtigen Haken über falschen Text zu setzen.

Tore

pnpm lint, pnpm typecheck, pnpm format:pruefen, pnpm pruefe:doku grün. 1136 Vitest-Tests in 52 Dateien grün (+5).

Closes #39
Closes #40

🤖 Generated with Claude Code

Die beiden kleinen Befunde aus der Abnahme zu #19, die noch offen waren. ## #39 — `/api/gesundheit` verrät nichts mehr Der Pfad steht in der Allowlist des Proxys, damit ein Healthcheck kein Cookie braucht. Eine Meldung von Prisma oder `pg` nennt aber Host, Port, Benutzernamen und Datenbanknamen — für etwas, das ohne Anmeldung antwortet, ist das zu viel. Nach außen bleibt `{"status":"fehler"}` mit 503, damit Docker und der Reverse Proxy weiter richtig entscheiden; die Begründung geht ins Protokoll des Prozesses, nach demselben Muster, das `src/server/actions/verzeichnis.ts` schon für unbekannte Ausnahmen benutzt. **Fünf Tests**, einer davon für die andere Hälfte der Zusage: dass die Begründung wirklich *geschrieben* und nicht bloß verschluckt wird. **Gegenprobe gefahren** — mit der alten Fassung werden drei davon rot, und die Ausgabe zeigt das Leck wörtlich. ## #40 — zwei Konventionen, die strenger klangen als gemeint **„Nie auf rohe Hexwerte"** hat sechs begründete Ausnahmen: Papier (zwei Druckansichten), ein QR-Decoder (`src/lib/qr.ts` braucht reines Schwarz auf reinem Weiß) und das Web-App-Manifest samt `themeColor`, die keine CSS-Variablen vertragen. Sie stehen jetzt als Tabelle mit Begründung je Zeile. **Die Regel wurde ergänzt, nicht der Code geändert** — eine gemeinsame Konstante über drei unverwandte Dinge hätte die Begründung versteckt. **Der LDAP-Container steht jetzt im Tor** vor jedem Commit, in `CLAUDE.md` und im README. Ohne ihn überspringt die Suite **22 Tests** — nachgezählt, nicht geschätzt: 81 mit Container, 59 ohne. Sie sagt es auf stderr, der Lauf sieht trotzdem grün aus. Im README fehlte zusätzlich `format:pruefen`, das `CLAUDE.md` seit #010 verlangt. Damit das hält, auch wenn niemand hinsieht: **`pnpm pruefe:doku` vergleicht die beiden Schranken-Blöcke** und verlangt von beiden den Container. Auch hier Gegenprobe gefahren — die Prüfung benennt die Abweichung genau. ## Zwei Korrekturen am Issue selbst Der Abnahme-Review hatte vier Hexwerte genannt und `src/lib/qr.ts` übersehen; es sind sechs. Und das Issue behauptete, die Regel stehe gleichlautend in `docs/architektur.md` — tut sie nicht, sie steht nur in `CLAUDE.md`. Beides im Issue-Text richtiggestellt, statt einen richtigen Haken über falschen Text zu setzen. ## Tore `pnpm lint`, `pnpm typecheck`, `pnpm format:pruefen`, `pnpm pruefe:doku` grün. **1136 Vitest-Tests** in 52 Dateien grün (+5). Closes #39 Closes #40 🤖 Generated with [Claude Code](https://claude.com/claude-code)
florian.wilde added 2 commits 2026-10-04 14:12:17 +00:00
/api/gesundheit steht in der Allowlist des Proxys, damit ein Healthcheck kein
Cookie braucht. Eine Meldung von Prisma oder pg nennt aber Host, Port,
Benutzernamen und Datenbanknamen -- fuer einen Pfad, der ohne Anmeldung
antwortet, ist das zu viel.

Nach aussen bleibt {"status":"fehler"} mit 503, damit Docker und der Reverse
Proxy weiter richtig entscheiden. Die Begruendung geht ins Protokoll des
Prozesses, nach demselben Muster wie in src/server/actions/verzeichnis.ts.

Fuenf Tests, darunter einer fuer die andere Haelfte der Zusage: dass die
Begruendung wirklich geschrieben und nicht verschluckt wird. Gegenprobe
gefahren -- mit der alten Fassung werden drei davon rot.

Closes #39
docs(konventionen): Hexwert-Ausnahmen und LDAP-Container festhalten
Prüfung / pruefung (push) Canceled after 0s
Prüfung / pruefung (pull_request) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s
Prüfung / e2e (pull_request) Canceled after 0s
77389a2c5f
Zwei Saetze in CLAUDE.md beschrieben den Code nicht genau.

"Nie auf rohe Hexwerte" hat sechs begruendete Ausnahmen, nicht null: Papier,
ein QR-Decoder und das Web-App-Manifest entscheiden nicht nach unserem
Farbschema. Sie stehen jetzt als Tabelle mit Begruendung je Zeile. Die Regel
wurde ergaenzt, nicht der Code geaendert -- eine Konstante ueber drei
unverwandte Dinge haette die Begruendung versteckt.

Das Tor vor jedem Commit nennt den LDAP-Container. Ohne ihn ueberspringt die
Suite 22 Tests -- nachgezaehlt, nicht geschaetzt: 81 mit Container, 59 ohne.
Sie sagt es auf stderr, der Lauf sieht trotzdem gruen aus. Im README fehlte
zusaetzlich format:pruefen, das CLAUDE.md seit #010 verlangt.

Damit das haelt, auch wenn niemand hinsieht: pruefe:doku vergleicht die beiden
Schranken-Bloecke und verlangt von beiden den Container. Gegenprobe gefahren.

Der Review hatte vier Hexwerte genannt und src/lib/qr.ts uebersehen, und das
Issue behauptete die Regel stehe auch in docs/architektur.md -- tut sie nicht.
Beides im Issue-Text richtiggestellt, statt einen Haken ueber falschen Text zu
setzen.

Closes #40
florian.wilde merged commit 88d7db8c3d into main 2026-10-04 14:12:29 +00:00
florian.wilde deleted branch feat/39-40-nachtrag-abnahme 2026-10-04 14:12:29 +00:00
Sign in to join this conversation.