Das Altsystem signiert seine QR-Codes und prüft die Signatur nie — publicExhibitsHandler liest sig gar nicht erst aus. | W-38: Das Kennzeichen ist der Zugang; es gibt keine Signatur daneben, die jemand vergessen könnte. Geschlossen. |
Unveröffentlichte und archivierte Exponate sind über die öffentliche Route abrufbar — findById filtert weder status noch archivedAt. | W-03 (Sichtbarkeit vom Statuskatalog trennen) — noch offen, vermerkt in docs/gegenbeweise-w38.md. |
Die öffentliche Audio-Route liefert das komplette Dokument ungefiltert (res.json({ data: audioGuide }), ohne Projektion). | Der Adapter prüft jede Antwort zur Laufzeit gegen ihr Vertragsschema (P3-1/W-38). Geschlossen. |
| Rohe Fremdmeldungen von Firebase Auth, Pub/Sub, Secret Manager und dem TTS-Anbieter gehen an den Client; Stacktraces nicht — das ist geprüft. | Jede Fehlerantwort entsteht in fehlerAntwortBauen und trägt nur code, class, message, retryable, correlationId, optional fields. Geschlossen. |
Dasselbe Ereignis bekommt verschiedene Codes — rund 70 Codes an rund 284 Fundstellen, teils in derselben Datei; der jobs-service antwortet zudem mit { error: "Zeichenkette" }. | Ein Fehlervertrag, ein Basiskatalog, Fachfehler mit eigenem Status (P3-1). Geschlossen — und der Grund, warum der neue Vertrag eine Form erzwingt. |
| Das monatliche Zugangsdaten-Backup legt alle Geheimwerte im Klartext in einem GCS-Bucket ab, ohne Prüfspur. | P4-3 (Auftragsstrecke) und P4-5 (Alarmierung) berühren es; ein eigener Punkt für die Sicherung fehlt noch. |
Die „vollständige DSGVO-Kaskade“ lässt zwei Datenarten stehen: Auftragsprotokolle (jobs) und Auswertungsdaten (analyticsEvents). | P4-1 — Löschkonzept je Datenart mit Frist, Lauf und Nachweis. Offen. |
Die Altsystem-Inventur behauptet 151 Routen; nachgezählt sind es 127, eine tolerantere Lesart kommt auf 146. Die 151 steht auch in CLAUDE.md und SESSION-START.md. | Eigene Aufgabe: Nachzählen gegen den Altsystemcode. Bis dahin misst scripts/routendeckung.mjs gegen 127 und meldet die Abweichung als Warnung, ohne verify rot zu machen. |
Die lokale Review-Reserve qwen3.8-27b ist unbrauchbar — llama.cpp antwortet mit 400, das ausgelieferte Modell heisst qwen3.8-27b-heretic und trägt ein anderes Chat-Template. | Werkzeugkette in ~/ADMIN, nicht Teil dieses Projekts. Umgangen: Grok (NAHT_REVIEW_MODELL=grok) als zweiter Kopf — anderer Harnisch, kostet pro Token. |
| Der Heatmap-Pin folgt nicht der gewählten Kennzahl — die Punktgrösse basiert im Prototyp immer auf der Wiedergabenzahl, nur die Blob-Farbe wechselt. | Darstellungsfehler des Prototyps, nicht als Datenmodell-Eigenschaft übernehmen. Selbst entschieden, weil es weder Vertrag noch Datenmodell ändert. |
plattform-panel.dc.html ist nicht lauffähig — referenziert ./support.js und ein _ds/-Bündel, die im Ordner fehlen. | Betrifft die Vorschau, nicht die Zusagen — die stehen in den Inventuren. Der Curator-Ordner ist vollständig. |
| Das Plattform-Panel hat keinen Bausteinvertrag — seine 21 CSS-Klassen sind klassenbasiertes Styling ohne Komponentenregistrierung, ein Teil davon Utilities. | Vor der ersten Plattform-Bildschirmkette zu klären: eigener Vertrag, Abbildung auf die Kuratoren-Bausteine, oder bewusst ohne. Aus P3-3. |
Die .jsx-Quellen des Designsystems fehlen im Handover; nur ein kompiliertes Bündel liegt bei. | Der Vertrag bindet nur Belegtes. Aus dem Markup nicht zu gewinnen: nie gesetzte Props, die Form hinter {{ ausdruck }}-Werten, ob ein Container über actions interaktiv wird. Die Lücke wächst mit jeder Komponente. |
| Null Zusagen zu Fehler- und Leerfällen im gesamten Besucherbereich — kein „Exponat nicht gefunden“, kein „kein Audio vorhanden“, kein „Museum gesperrt“. Das Wort „offline“ kommt in der Abgleichdatei kein einziges Mal vor. | Querschnittsspur P4-4 (Fehlerklassen), vor der ersten Besucherkette. |
Vertrag gegen Persistenz wird nirgends gemessen — P3-2 misst Vertrag gegen Setzweg. Ein Schemafeld ohne Vertrag sieht niemand; ein Vertragsfeld ohne Schema kann niemand speichern. | Eigene Prüfung, sinnvoll sobald das Schema über die drei Durchstichtabellen hinauswächst. Aus dem P3-2-Review, beide Köpfe. |
mandantAufloesen erteilt heute durchstich.read an jeden, der den Kurznamen eines aktiven Mandanten kennt — ohne Ausweis, ohne Mitgliedschaft. | Bekannter Umfang dieses Stands (es gibt keine Anmeldung). Verschwindet mit W-15; services/api/test/uebergangskontext.test.ts wird dann ersatzlos gelöscht. |
AGENTIC_REWRITE_WORKFLOW.md trägt „nicht freigegeben“ und ist trotzdem das einzige Dokument, das den Einsatz von Spec Kit beschreibt. | Der übernommene Teil steht in P5-3 und P5-4. Zu klären, ob das Dokument freigegeben, auf den übernommenen Teil eingedampft oder als Referenz belassen wird — solange der Status steht, ist unklar, was von den übrigen 470 Zeilen gilt. |