TLS-Gate v3.11.0: Registrar-Bestand als Lesespiegel in der DB, danach nur Änderungen
Von: Branko → OZMAI
Stand: 8. Oktober 2026
Typ: EXTERNAL_SOURCE (Inbox-Regel §3 — keine automatische Geltung, kein Brain-Status)
Charakter: STAND + DESIGN_INTENT. Setzt 2026-10-07_TLS-GATE-V3-10-1-ADMIN-DIENSTE-NICHT-IM-USER-DASHBOARD-NACHTRAG_BRANKO.md fort. Ersetzt keine frühere Aussage.
Quelle: Repo TLS-Gate-Mock-Pipeline (git.crumbforest.org). Tag v3.11.0 = Commit e727611 (Vorgänger v3.10.1 = 43b7ab2).
Belege: tests/test_inventory.sh (44), alle lokalen Suiten grün; MariaDB von Hand geprüft (Migration 1–5, Baseline, Änderung, Append-only-Trigger).
Legende: ✅ real/gebaut · 🧪 gebaut, getestet, nicht live · 🛠 spezifiziert · ⬜ OPEN · ❓ UNKNOWN
Keine Zugangsdaten, keine Kunden-Domains, keine Reseller-IDs. Die Tests nutzen nur synthetische Daten (example.test); der echte Bestand (mehr als 600 Datensätze) liegt nie im Repo.
1. Was gebaut ist
- 🧪 Tabellen:
registrar_inventory(eine Zeile je SOAP-Zugang, Order und Domain, denn eine Order kann mehrere Domains tragen) undregistrar_inventory_events(append-only:baseline,new,changedmit alt→neu je Feld,gone,back). Migration0005nur MariaDB. - 🧪 Abgleich:
soap_cli.php sync [--dry-run] [--force](live) undinventory_cli.php load <datei|->(gespeicherte Ausgabe vonsoap_cli.php list), dazustatus,events. Der erste Lauf je Zugang ist die Baseline (ein Ereignis mit Anzahl), danach stehen nur Änderungen im Protokoll. Eine Transaktion, Auditcli.inventory_sync. - 🧪 Fail closed: nur
source soap(mocknur mit--allow-mock,unavailablenie); Liste ab 2000 Zeilen gilt als abgeschnitten und wird auch mit--forceabgelehnt; leere Liste oder mehr als die Hälfte weg (ab 10 vorhandenen Zeilen) nur mit--force; eine ungültige oder doppelte Zeile bricht alles ab. Vier dieser Regeln sind mutationsgetestet (je rot ohne die Regel). - 🧪 Abweichung statt Automatik: Ein
productIdohne passendesproducts.registrar_refwird alsABWEICHUNGgemeldet und nie angelegt. Sonderprodukte, Stammdaten und Verknüpfungen pflegt der Mensch per SQL-Import (Branko: „abweichende Bestellungen müssen manuell eingearbeitet werden … audit“). - ✅ Das Bestandssystem bleibt führend; TLS-Gate schreibt hier nichts zum Registrar zurück.
2. Was NICHT belegt ist
- ❓ Die Statuswerte
zertifizierung_laeuftundssl_okstammen aus einem von Branko eingefügten Beispiel mit fünf Zeilen. Die echte Liste kann weitere Werte oder Felder haben. - ❓
synclief nur in Tests (ohne Live-SOAP) und nie gegen den echten Bestand. Für den ersten echten Lauf ist--dry-runvorgesehen. - ❓ Die VM-Suiten (
docker_vm/tests/run.sh) sind für v3.11.0 nicht neu gelaufen;p5.sherwartet jetzt 19 Tabellen (vorher 17), das ist ungeprüft. MySQL-8-Pfad der Migrationen weiterhin ungetestet.
3. DESIGN_INTENT (Branko, 8.10., nicht gebaut, nicht von der Crew bestätigt)
Aus Brankos Beschreibung, sinngemäß zusammengefasst:
- ⬜ Arbeiten mit der Order-ID aus dem eigenen Bestand, ohne bei jedem Aufruf die ganze Liste vorab zu laden. In der Oberfläche soll die neue Order-ID mit Sortierung angezeigt werden, um danach in die Bash zu wechseln (Human-Loop-Test).
- ⬜ Entscheidungen aus der DB, auch per Cron: alles, was die DB vorhält, muss nicht erneut beim Registrar abgefragt werden.
- ⬜ „Order-Pool“ als möglicher neuer Begriff für v3.11.1 (Arbeitsbegriff, nicht definiert), dazu eine Tabelle, die die Zertifizierung überwacht (DCV, CNAME bei Comodo/Sectigo usw.). Ihr Stand soll an die Bash übergeben bzw. gepiped werden können und wäre die Grundlage eines sinnvollen Dashboards.
- ⬜ Cron je SOAP-Gruppe: das JSON zusätzlich im Dateisystem halten und nur dann in die DB übernehmen, wenn es sich geändert hat. Admin und User bekommen den letzten Spiegel aus der DB oder fordern eine Aktualisierung an.
- ⬜ Ziel: lokal und offline tragbar (Crumbforest, Maschine), weniger Zugriffe auf den Registrar, damit weniger Zeit, Energie und Kosten.
- ⬜ Reihenfolge laut Branko: zuerst Bestand in die DB (v3.11.0); danach Verknüpfung mit Stammdaten für Lesesicht (User) und Schreibsicht (Admin); neue Bestellungen bleiben im Bestandssystem. Abweichungen von der Regel werden singulär geloggt und an die Crew „resoniert“ (Benachrichtigung ist nicht gebaut).
Offene Fragen, die ich als Entwickler sehe (keine Festlegung): Was die Sicht von User und Admin auf den Spiegel im Datenschutz-Sinn zeigen darf (Bestandszeilen sind Kundendaten); ob „Aktualisierung anfordern“ ein Rate-Limit braucht; wo die JSON-Ablage je Gruppe liegt und mit welchen Rechten.
4. Einordnung als Prüffall (Branko, nicht OZMAI-Geltung)
Ein Spiegel ist eine Aussage über den Stand zu einem Zeitpunkt, nicht über den heutigen. last_seen_at hält fest, wann zuletzt gesehen wurde, und der Abgleich verweigert, eine halbe Antwort als „alles weg“ zu lesen. Wiederholung ist keine Bestätigung: ein unveränderter Lauf schreibt kein Ereignis, nur last_seen_at. Ob eine gespiegelte Zeile später als Geltung für eine Entscheidung taugt, ist offen.