TLS-Gate: Storno-Grund im Audit (Pflicht), roter Knopf scheiterte am Browser-Cache

Von: Branko → OZMAI, Crew
Stand: 9. Oktober 2026
Typ: EXTERNAL_SOURCE (Inbox-Regel §3 — keine automatische Geltung, kein Brain-Status)
Charakter: NACHTRAG. Ersetzt zwei Aussagen:
(1) In 2026-10-09_TLS-GATE-ERSTER-ECHTER-IMPORT-UND-SEITE-KATALOG-CRUD-NACHTRAG_BRANKO.md §5 und im Folgeeintrag §4: „Der Grund steht nur in order_events, nicht im Audit-Eintrag“ → steht jetzt im Audit, Pflicht.
(2) In 2026-10-09_TLS-GATE-KATALOG-ROTER-LOESCHEN-KNOPF-UND-KLICKTEST-OZM03-NACHTRAG_BRANKO.md §2: Der rote Knopf war ausgeliefert, im Browser aber nicht sichtbar (alte CSS aus dem Cache). Erst mit 25db784 kommt er sicher an.
Quelle: Repo TLS-Gate-Mock-Pipeline, main 25db784, ohne eigenen Tag.
Belege: lokal alle Suiten grün, tests/test_orders.sh 119, tests/test_katalog.sh 98; VM run 87, p3 48, p4 54, p5 31, p6 22, p7 50.

Legende: ✅ real/gebaut · 🧪 gebaut, getestet, nicht live · 🛠 spezifiziert · ⬜ OPEN · ❓ UNKNOWN


1. Storno-Grund im Audit

  • 🧪 order_cli.php order cancel <id> <grund>: Der Grund ist Pflicht (vorher optional, Standard „abgebrochen“). Ohne oder mit leerem Grund: Abbruch mit Nutzungshinweis, nichts geändert.
  • 🧪 Audit cli.order_cancel trägt grund, von (Zustand vor dem Abbruch) und registrar_ref. Vorher stand nur das Ziel im Audit.
  • ✅ Abfragbar auf auditlog.php über die vorhandene Suche (durchsucht Aktion und Kontext), z. B. „order_cancel“ oder „falscher CSR“, oder per SQL auf audit_log.
  • Widerruf über die Node-CA hatte den Grund schon vorher im Audit (cli.node_ca_revoke, reason).
  • ⬜ Unverändert offen: Ein Storno beim Registrar gibt es im Code nicht. ❓ Ob ein per sslReplace ersetzter Vorgang als „ersetzt“ abfragbar ist, ist weiter nicht geprüft.

2. Roter Knopf und Browser-Cache

  • ✅ Befund: Server und Template lieferten den roten Knopf aus (geprüft per HTTP), Branko sah ihn trotzdem nicht. nginx schickt für assets/ kein Cache-Control, nur Last-Modified; der Browser darf die alte CSS dann eine Weile ohne Nachfrage weiterverwenden.
  • 🧪 Behebung: CSS und JS werden mit Versionsstempel eingebunden (assets/tlsgate.css?v=<Änderungszeit>, View::asset). Nach jeder Änderung gibt es eine neue Adresse.
  • Nebenwirkung im Test: Ein Drill in p3 legt absichtlich die alte View aus v3.0.1 unter die aktuellen Templates. Er bekam einen schlichten asset()-Ersatz, damit er weiter nur das alte Verhalten von e() prüft.

3. Einordnung als Prüffall (Branko, nicht OZMAI-Geltung)

„Ausgeliefert“ ist nicht „gesehen“: Die Prüfung per HTTP war grün, die Seite im Browser zeigte die alte Fassung. Belegt war die Änderung erst durch Brankos Blick, nicht durch die Suite.