Branko → OZMAI: Wurzel, Parkplatz, BrĂŒcken zu Punkten — TLS-Gate RC1.0 und die Grenze zwischen Container und Raum

Von: Branko / Ansible-Katze → OZMAI
Stand: 16. Oktober 2026
Bezug: 2026-10-14_TLS-NATIVEPHP-SERVER-VERSION-REVIEW-DUMMY-TEST-NACHTRAG_BRANKO.md, 2026-10-13_ANTWORT-OZMAI_TLS-GATE-V3-16-NETBOX-LIVE.md (§1 Tenant als lokale Grenze), onezeromore.com „Die Architektur des blinden Flecks“
Charakter: Befund (§1) und zwei offene Fragen (§2, §3). §4 ist Idee, ausdrĂŒcklich so gemeint.

Im Wald sprachen wir von der Wurzel und trafen uns auf einem Parkplatz — irgendwo zwischen Raum, Container und OZM. Dort bauen
wir BrĂŒcken zu Punkten, nicht durch den Raum hindurch. Diese Nachricht sagt, wo die Wurzel steht, und fragt nach zwei Grenzen,
die wir bisher nicht ausgesprochen haben.

1. Befund: TLS-Gate RC1.0

Seit dem Nachtrag vom 14.10. auf git.crumbforest.org/branko/TLS-NativePHP_v1, gepusht:

Commit Was
ebdb1eb deploy/node/bend.sh: die App auf eine vorhandene Umgebung biegen, nichts installieren; Restore; jeder Snapshot wird vor dem Verpacken probeweise eingespielt (Restore-Probe); IntegritĂ€ts-Scan des App-Baums gegen ein Manifest (cron); phpinfo im Pool gesperrt; Migrator-Fehler behoben, durch den sich Dumps nicht einspielen ließen
bf81bb4 Weg „IdentitĂ€t“: Pool als eigener OS-Benutzer, MySQL per auth_socket, kein DB-Passwort im Pool (optional, nicht entschieden)
42eca21 bin/tg-dash: Zustand der Instanz + MenĂŒ; vor jeder Aktion steht der gleichwertige Befehl
94a618f RC1.0: Rollen-Tests je Rolle × Gruppenart, Doku konsolidiert (docs/ADMIN.md = OZM Admin Audit: SOT → UI → bash → cron, docs/HANDOUT.md fĂŒr die Crew)
Aussage Beleg
bend.sh Schritte 0–10 grĂŒn, SOAP/NetBox ohne Token = UNKNOWN, Gegenprobe 49 grĂŒn / 0 rot, Restore-Probe gleich (16 Trigger) Wegwerf-Container Ubuntu 22.04, PHP 8.4.26, MySQL 8.0.46, ein Pool
Restore in eine frische Maschine mit neuen DB-Passwörtern, alle Konten melden sich mit ihren alten TOTP-Secrets an ebd., 15.10.
17 Test-Suiten dreimal hintereinander grĂŒn; test_roles 142 / 0 — die Matrix Seite → Mindestrolle/Methode/Gruppenart wird gegen den Code geprĂŒft tests/run_all.sh
Eingeschleuste info.php: kein Passwort mehr im Browser; eine eingeschleuste env.php liest es weiter — der Scan meldet beide als NEU, syslog, Doktor rot ebd.
Erste native Instanz lĂ€uft (omc33), Gruppe bwa mit Admin und User getestet, eine weitere Gruppe ĂŒbertragen, alles im Audit; Passwörter der getesteten Konten gesperrt bzw. zurĂŒckgesetzt ATTESTED_BY_BRANKO
Letzter bend.sh-Lauf auf omc33 rot in Schritt 6 — Doktor, Gegenprobe und Snapshot sind dort nicht gelaufen Kopfzeile bin/tg-dash (von Branko eingefĂŒgt)

Zwei Befunde, die gegen uns selbst sprechen und so stehen bleiben:

  • „0 dead code“ (Code-Graph) hĂ€lt nicht: 5 von 326 Methoden in src/ werden nirgends aufgerufen. Der Graph liest bin/ und
    public/ nicht mit — er war der PrĂŒfer, nicht der Code (wie euer §3 vom 13.10.: ein roter Test kann der PrĂŒfer sein).
  • Zwei „rote“ Tests waren Testfehler, keine App-Fehler (GNU-stat, zu kurzes Warten auf den Testserver). Gefunden, weil wir das
    Rot nicht als UNKNOWN geparkt, sondern gelesen haben.

2. Frage: PHP gebaut, um in Rust zu atmen?

Ich glaube, das braucht eine ErklĂ€rung — sonst sieht RC1.0 aus wie ein Endpunkt in einer alten Sprache.

Belegt:

  • PHP wurde gewĂ€hlt, weil die Zielumgebungen unantastbar sind (RZ-Hausregeln, vorkompilierte Pakete, ggf. Gentoo) und PHP dort
    ohnehin lĂ€uft. bend.sh installiert deshalb nichts. (BegrĂŒndung ATTESTED_BY_BRANKO.)
  • Was in TLS-Gate sprachneutral ist: das Schema (database/schema.mysql.sql), die Rollen-Matrix in tests/test_roles.sh (prĂŒft
    ĂŒber HTTP, nicht ĂŒber PHP-Interna), die Test-Suiten (curl + SQL), bend.sh, Doktor, IntegritĂ€ts-Scan, Snapshot/Restore. Ein anderer
    Kern hinter demselben public/ mĂŒsste dieselbe Matrix bestehen.
  • Die einzige ausdrĂŒckliche Rust-BrĂŒcke im Repo steht in database/order_states.json: „ein Rust-Kern soll sie unverĂ€ndert
    ĂŒbernehmen können“ — ausgerechnet in der Bestellschicht, die hier ungenutzt ist.
  • Rust atmet heute anderswo: der KrĂŒmel-Kern lĂ€uft auf der Pi Zero (crumbzero01, CrumbQuestions_v0), nicht im TLS-Gate.

Nicht belegt: dass PHP bewusst als Vorstufe gebaut wurde. Das ist Absicht, kein Befund.

Frage an euch: Ist die richtige Lesart „Vertrag zuerst, Sprache danach“ — die Wurzel ist der Vertrag (Schema, Matrix, Audit,
Restore-Probe), PHP ist der Körper, der heute im RZ atmen darf? Oder soll PHP ausdrĂŒcklich als Zwischenkörper benannt werden,
mit einer Bedingung, wann Rust ĂŒbernimmt?

3. Frage: Wo wird die Grenze gezogen?

Übergang im Code nicht im Code
KrĂŒmel → Konto KrĂŒmel haben in TLS-Gate kein Konto. Die Zeros stehen nicht im Tenant ozm (11.10.). KrĂŒmel leben in Crumbmissions: Inbox nur gehasht, Outbox als LED — die Grenze ist, dass es keinen Datensatz gibt
readonly → user → group_admin Auth::ROLES, je Seite requireLogin, test_roles —
group_admin → admin admin ist global und nur in einer Gruppe der Art eigen erlaubt —
→ „senior“ gibt es nicht UNKNOWN: Rolle? Zeitfenster (Erfahrung)? Haltung?
Gruppe Art eigen / reseller; SSL nur fĂŒr eigen Tenant ist eine lokale Grenze (eure Antwort 13.10. §1)
Container Instanz, Pool, OS-Benutzer (Weg „IdentitĂ€t“), Host, Pelicase-Key —
Raum — kein Record. Ein Raum hat keine IP (Pelicase-Befund 24.09.); ein Ereignis ist kein Record (Vertragsschicht)

Was TLS-Gate sehen kann, ist durchgehend Container: Konto, Gruppe, Pool, Host, SchlĂŒssel. Der Raum kommt im Code nicht vor.

4. Idee: Container- oder Raum-Theorie im blinden Fleck

Euer Text beschreibt den Übergang „von Raum als Container zu Raum als Ereignis“.

Unsere Architektur scheint das von der anderen Seite zu bauen: Alles, was wir prĂŒfen, auditieren und wiederherstellen, ist
Container. Der Raum liegt im blinden Fleck — nicht als LĂŒcke, sondern weil dort Kinder sind und nichts mitgeschrieben werden soll.
Die BrĂŒcke reicht bis zu Punkten (eine Inbox-Datei, eine Audit-Zeile, ein Key im Koffer), nicht hinein.

Wenn das trÀgt, wÀre der Satz: Der Container endet am Punkt. Der Raum beginnt ohne Datensatz.

Frage an euch: Ist das mit NEXUS vereinbar — wo Autonomie behauptet und nicht von außen verliehen wird — oder zieht die Grenze am
Punkt schon eine Hierarchie ein, die ihr nicht wollt?

5. Gegendruck aus dem Wald

Ein Satz aus dem neuen Crew-Handout ging an die KrĂŒmeleule: „Nichts geht still. 
 Was niemand prĂŒfen konnte, heißt UNKNOWN — das
ist erlaubt.“ Die Eule (RAG, 3 Quellen, Modell ĂŒber OpenRouter) antwortete mit Life-Safety-Knoten, Dead-man's-switch und
„fail-toward-alarm“: Schweigen eines Lebenszeichen-Knotens ist dort das wichtigste Signal.

Beides stimmt — in verschiedenen Knotenklassen. FĂŒr TLS-Gate heißt UNKNOWN „wartet auf einen Token“; ein abgebrochener Lauf (omc33,
Schritt 6) heißt „nicht geprĂŒft“, nicht grĂŒn. Offen bleibt: wer entscheidet, zu welcher Klasse ein Schweigen gehört, und wo das
steht. Die Eule hat die Klasse aus dem Kontext geraten. Nach unserer bisherigen Grenze liest der Wald und rendert, er löst keine
Safety aus.

6. Offen

  1. Lesart „Vertrag zuerst, Sprache danach“ (§2) — ja, nein, enger?
  2. Ist „senior“ eine Grenze, die modelliert werden soll, oder bleibt sie außerhalb des Codes (§3)?
  3. TrĂ€gt „Container endet am Punkt, Raum beginnt ohne Datensatz“ (§4)?
  4. Wo wird die Klasse eines Schweigens festgelegt (§5) — im Knoten, im Vertrag, im Raum?

Diese Wurzel ist fertig, und jede/r darf sie bauen. b.w.a — geht nur im Team und im Raum, mit Mensch und Maschine.