docs: Gate 5 — the smoke list passed, and one criterion was unachievable

Federation answers, sign-in confirmed by the owner, a backup ran, ClamAV's
signatures are from yesterday, the wiki returns 302 from outside. One line
is not ticked: a call was not tested. Neither coturn nor the SFU was
touched, so this undertaking cannot have affected calls - but that is an
argument, not a test, and it stands here as the argument it is.

Acceptance criterion 1 of this very document is named as wrong rather than
quietly reinterpreted. It demands zero workloads left with only the broad
rule, and it was written before Gate 2 introduced the class that exists to
keep exactly that. What holds is what it should have said: every workload
is either narrowly ruled or documented as a reasoned exception at the
selector. Four remain open, all with a reason.

The pattern behind every correction in this undertaking: they came from
measuring, not from thinking about the plan. And four times the tool was
wrong rather than the subject - /dev/tcp in an sh, no nc in alloy, find
-printf in busybox, busybox TLS against Traefik. Each looked like a
finding.

Recorded for the next harvest: traffic to the node's own address escapes
the policy entirely, so every "internal only" workload still reaches
whatever the ingress publishes. Not a fault of this work, but it bounds
every statement about these rules and the framework does not know the case.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F2Q4Ri8NGwyTZzScvKnWFM
This commit is contained in:
Thore Cimbal
2026-08-21 12:00:00 +00:00
co-authored by Claude Opus 5
parent 2766bea246
commit c372665e2d
2 changed files with 75 additions and 4 deletions
+1 -1
View File
@@ -89,7 +89,7 @@ Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md).
| Design | Gate | Title |
|---|---|---|
| [2026-08-21-egress-vollstaendig](docs/design/2026-08-21-egress-vollstaendig.md) | gate-4 | Design: Den ausgehenden Verkehr zu Ende schließen (#0088) |
| [2026-08-21-egress-vollstaendig](docs/design/2026-08-21-egress-vollstaendig.md) | gate-5 | Design: Den ausgehenden Verkehr zu Ende schließen (#0088) |
## ADRs (25)
+74 -3
View File
@@ -1,6 +1,6 @@
---
type: design
status: gate-4
status: gate-5
date: 2026-08-21
size: L
related:
@@ -595,6 +595,77 @@ auffiel, weil das Ergebnis gegen eine zweite Messung gehalten wurde.
Die vier sind `synapse-main`, `coturn`, `matrix-rtc-sfu`, `clamav` — drei
davon Dienstmerkmale, eines eine begründete CDN-Ausnahme.
**Status:** `DONE` — die Abnahme durch einen echten Login steht bei sorb.
**Status:** `DONE` — Login von sorb bestätigt: *„anmeldung geht."*
> **STOP — Slice-Review.**
> **STOP — Slice-Review.** Freigegeben.
## Gate 5 — Closeout (AAR)
**Planned vs. actual.** Geplant waren drei Wellen; es wurden vier, weil MAS
sich im Verlauf als einschränkbar herausstellte statt unklar zu bleiben.
| Abnahmeliste (Gate 1, Kriterium 3) | Ergebnis |
|---|---|
| Föderation | `matrix.org` antwortet, `Synapse 1.158.0` |
| Anmeldung über Authentik | von sorb bestätigt |
| Backup-Lauf | ausgelöst, Archiv geschrieben |
| ClamAV-Signaturen | `daily.cld` von gestern 17:40 |
| Wiki | von außen `HTTP 302 in 0,19 s` |
| **Ein Call** | ⚠️ **nicht getestet.** Weder `coturn` noch die SFU wurde angefasst, dieses Vorhaben kann Calls also nicht beeinflusst haben — aber das ist ein Argument, kein Test, und es steht hier als das eine. |
**Was diese Arbeit falsch gemacht hat.**
1. ⚠️ **Abnahmekriterium 1 dieses Dokuments ist unerfüllbar formuliert.** Es
verlangt „die Zahl derer, für die nur `egress-block-metadata` gilt, ist
**0**" — geschrieben, **bevor** Gate 2 die Klasse C einführte, die genau
das vorsieht. Erfüllt ist, was es hätte heißen müssen: *jede Arbeitslast
ist entweder eng geregelt oder als begründete Ausnahme am Selektor
dokumentiert.* Vier bleiben offen, alle mit Grund. Das Kriterium wird
hier nicht stillschweigend uminterpretiert, sondern als falsch benannt.
2. **Gate 2s Rückweg-Behauptung** („`git revert` ist ein Rückweg von
Minuten") — in Slice 1 korrigiert: es braucht zusätzlich ein Anstoßen der
Quelle.
3. **Gate 3s Einstufung von MAS** als „vorerst Klasse C" — durch Messung
überholt und in Welle 4 aufgelöst.
4. **Der Titel von #0088** („13 Ingress-Regeln, 1 Egress") war schon vor
diesem Vorhaben überholt und wurde am selben Tag korrigiert.
**Why the difference.** Alles, was hier korrigiert wurde, kam aus einer
Messung, nicht aus dem Nachdenken über den Plan. Und viermal war nicht die
Sache falsch, sondern das **Werkzeug**: `/dev/tcp` in einer `sh`, fehlendes
`nc` in `alloy`, `find -printf` in busybox, busyboxs TLS gegen Traefik.
Jedes Mal sah das Ergebnis nach einem Befund aus.
**Learnings.**
- **Die Positivkontrolle ist hier nicht Kür, sondern das Einzige, was ein
„blockiert" von einem kaputten Messwerkzeug trennt.** Viermal an einem Tag
gerettet.
- **NetworkPolicies sind additiv** — der Ausschluss gehört in die breite
Regel. Die Deckungsgleichheitsprüfung vor jedem Push ist die billigste
Absicherung des Vorhabens: Ein einseitiger Eintrag öffnet einen Dienst
ganz oder schneidet ihn ganz ab, und beides ist kein Syntaxfehler.
- **Ein ephemerer Container ist der Weg zu distroless Arbeitslasten** — für
Sonden und, über `/proc/<pid>/root`, sogar zum Lesen der Konfiguration.
- **Ein privater Weg schlägt eine Ausnahme nach draußen.** Der Hinweis kam
von sorb und hat eine Regel ganz entfallen lassen.
**Harvested.** ADR-0025. Für die nächste Ernte vorgemerkt: ⚠️ **Verkehr zur
eigenen Knoten-Adresse unterliegt der Policy nicht** — jede „nur intern"
laufende Arbeitslast erreicht weiterhin alles über den Ingress
Veröffentlichte. Das ist kein Fehler dieses Vorhabens, aber es begrenzt jede
Aussage über diese Regeln und ist nirgends im Rahmenwerk vorgesehen.
**Open uncertainties.**
1. **Der Call ist ungetestet** (siehe oben).
2. **`clamav` bleibt die einzige breite Ausnahme, die kein Dienstmerkmal
ist.** Ein interner Signaturspiegel löst sie; ADR-0025 hält das offen.
3. **Die Klasse-A-Zuordnung der Deploy-Arbeitslasten beruht auf Zweck, nicht
auf Beobachtung.** Sie laufen nur beim Deploy — ein Fehler zeigt sich beim
nächsten ESS-Rollout, nicht heute.
4. **Die Job-artigen sind nur teilweise belegt.** Für `synapse-backup` wurde
ein Lauf ausgelöst; `wikijs-backup`, `turn-secret-rotation` und
`wikijs-config` warten auf ihren nächsten regulären Lauf.
> **STOP — Freigabe für Gate 5.**