From ea13f71ac6050c2a55c918232c142f0ed9481d28 Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Fri, 21 Aug 2026 12:00:00 +0000 Subject: [PATCH] ledger: three of today's ledgers failed the judge, and I never ran it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Asked whether the work was documented per the framework, the honest answer was no. The judge reports 26 findings across the three ledgers written in the later part of today — and it had never been run on any of them. The four from the earlier part are clean, so this is a regression in form during the session, not a misunderstanding of it. Two systematic errors. Gates were listed newest first, while the template says one row per gate as it closes and the judge checks ascending order. And ladder rows carrying a reused outcome were left with an empty commit column, which a closed ledger counts as pending — the rung's commit is the one its result landed in, and now says so. The third was mine alone: a gate 5 row for a gate that has not closed. A row without a commit is a claim without evidence, which is the one thing a ledger exists to prevent. It is gone; what is still owed stands in the notes instead. All seven ledgers now pass at zero findings. --- docs/ledger/2026-08-21-cve-remediation.md | 10 +++++-- docs/ledger/2026-08-21-cve-ziele-ableiten.md | 28 +++++++++---------- docs/ledger/2026-08-21-egress-vollstaendig.md | 26 ++++++++--------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/docs/ledger/2026-08-21-cve-remediation.md b/docs/ledger/2026-08-21-cve-remediation.md index 0177291..54eb5d2 100644 --- a/docs/ledger/2026-08-21-cve-remediation.md +++ b/docs/ledger/2026-08-21-cve-remediation.md @@ -23,10 +23,9 @@ Nachfrage erfuellt wurde (`docs/wiki/stolpersteine/aar-pflicht-ohne-werkzeug.md` | gate | commit | approval | status | note | |---|---|---|---|---| -| 3+4 | 70823b4 | sorb | DONE | Zusammengelegt (eine Datei, eine Zeile, keine Signaturen); Fund: Flux haette selbsttaetig zurueckgerollt. | -| 2 | 80ee448 | sorb | DONE | Gestufter Authentik-Weg belegt; die Pflicht-Zwischenstufe traegt den ganzen CRITICAL-Gewinn. | | 1 | 24ae5b9 | sorb | DONE | Drei Haufen statt eines Vorhabens; Reichweite Haufen C = einengen auf Betriebenes. | -| 5 | | | BLOCKED | Nicht faellig: Haufen B (68 CRITICAL ohne Fix) und der Rest von Haufen A stehen aus. | +| 2 | 80ee448 | sorb | DONE | Gestufter Authentik-Weg belegt; die Pflicht-Zwischenstufe traegt den ganzen CRITICAL-Gewinn. | +| 3+4 | 70823b4 | sorb | DONE | Zusammengelegt (eine Datei, eine Zeile, keine Signaturen); Fund: Flux haette selbsttaetig zurueckgerollt. | ## Slices @@ -55,6 +54,11 @@ Nachfrage erfuellt wurde (`docs/wiki/stolpersteine/aar-pflicht-ohne-werkzeug.md` ## Notes +**Gate 5 steht aus und hat deshalb KEINE Zeile.** Die Vorlage sagt „one row per +gate as it closes" — eine Zeile fuer ein nicht geschlossenes Gate waere eine +Behauptung ohne Commit, und genau das faengt der Richter ab. Was fehlt: Haufen B +(68 CRITICAL ohne Fix-Version, auf acht Images) und der Rest von Haufen A. + ⚠️ **Der erste Commit der Haufen-C-Einengung war ungetestet, und die Gegenprobe hat es gefangen.** Nach dem Abschalten des Filters blieben alle 22 Zusicherungen gruen — meine „Gegenprobe" prueft die Uebersprung-Logik in `herleiten()`, nicht diff --git a/docs/ledger/2026-08-21-cve-ziele-ableiten.md b/docs/ledger/2026-08-21-cve-ziele-ableiten.md index 13360d3..5af6e19 100644 --- a/docs/ledger/2026-08-21-cve-ziele-ableiten.md +++ b/docs/ledger/2026-08-21-cve-ziele-ableiten.md @@ -14,11 +14,11 @@ related: | gate | commit | approval | status | note | |---|---|---|---|---| -| 5 | e342229 | sorb | DONE | Ausgerollt von sorb; 56 Ziele, Deckung 100 %, 39 Meldungen, keine Drosselung. ADR-0026 angenommen. | -| 4 | e316193 | sorb | DONE | Fuenf Slices; Ausrollen als Deploy-Uebergabe, Mengengeruest beigelegt. | -| 3 | a0cd02a | sorb | DONE | Dateien, Signaturen, Zusicherungen, Grenzen; fuenf wackelige Annahmen benannt. | -| 2 | 2693a2d | sorb | DONE | Herleitung im Exporter statt drittem Dienst; ADR-0026 vorgeschlagen. | | 1 | e10cd5d | sorb | DONE | Sechs Kriterien; Registry-Reichweite = Option C (Bestand + letzte drei je Repo). | +| 2 | 2693a2d | sorb | DONE | Herleitung im Exporter statt drittem Dienst; ADR-0026 vorgeschlagen. | +| 3 | a0cd02a | sorb | DONE | Dateien, Signaturen, Zusicherungen, Grenzen; fuenf wackelige Annahmen benannt. | +| 4 | e316193 | sorb | DONE | Fuenf Slices; Ausrollen als Deploy-Uebergabe, Mengengeruest beigelegt. | +| 5 | e342229 | sorb | DONE | Ausgerollt von sorb; 56 Ziele, Deckung 100 %, 39 Meldungen, keine Drosselung. ADR-0026 angenommen. | ## Slices @@ -34,16 +34,16 @@ related: | searched | found | outcome | commit | |---|---|---|---| -| ob #0078 ueberhaupt noch Arbeit ist, bevor ein Entwurf beginnt | das gesamte Zielbild war seit dem 2026-08-01 gebaut und lieferte: Raum, Metriken, Dashboard, fuenf Regeln, Raum-Routing | reused: nichts gebaut — #0078 mit Nachweis geschlossen statt umgesetzt | | -| eine Entscheidung zum Meldeweg, bevor eine eigene getroffen wird | ADR-0003 (angenommen, 2026-08-01) legt Aggregation, Security-Raum und einen Bot bereits fest | reused: der Meldeweg bleibt unberuehrt und wird Nicht-Ziel | | -| eine Quelle fuer die laufenden Images, statt eine zu bauen | `kube_pod_container_info` (39) und `container_last_seen{job="operating_cadvisor"}` (12) liegen in **derselben** Prometheus, die der Scanner ueber das vorhandene Compose-Netz erreicht | reused: kein neuer Dienst, keine Zugangsdaten, kein neuer Netzweg | | -| einen Weg, game-operating auszuschliessen | `job="gameserver_cadvisor"` (20 Images) trennt sauber von `operating_cadvisor` | reused: ein Beschriftungsvergleich statt einer Ausschlussliste | | -| ob die Registry ohne neue Zugangsdaten lesbar ist | anonymer Token-Tanz genuegt: `/v2/token` → Katalog und Tag-Listen; 6 Repos, 36 Tags | reused: die Standard-Registry-Authentifizierung, die der Scanner ohnehin schon fuer das Ziehen macht | | -| einen Weg, den Betriebs-Host selbst auszurollen | `10.0.0.3:2248` ist von MATRIX offen und die Agent-Weiterleitung traegt, der Schluessel ist dort aber nicht zugelassen | reused: das bestehende Verfahren `deploy-uebergabe.md` statt eines neuen Zugangs — es entstand 2026-08-01 aus genau diesem Stack | | -| einen anonymen Weg an die Tag-Zeitstempel, bevor ein Token eingeplant wird | Giteas `/api/v1/packages` verlangt einen Token — die Registry-API dagegen nicht: Manifest → Config-Blob liefert `created`, anonym, ~90 Anfragen je Runde | reused: die Registry-Authentifizierung, die der Scanner ohnehin macht — Randbedingung "keine neuen Zugangsdaten" bleibt gewahrt | | -| einen Ort fuer die Soll-Menge, bevor ein Dienst dafuer gebaut wird | der `cve-exporter` braucht sie fuer die Deckungsmetrik ohnehin und ist ein laufender stdlib-Python-Prozess im selben Netz | reused: bestehender Prozess statt drittem Container — kein `jq`, kein `pip`, keine zweite Wahrheit | | -| eine AAR zu genau diesem Stack, bevor Randbedingungen geraten werden | AAR 2026-08-01: `up -d` aktiviert Configs nicht (im Container pruefen), und `TrivyScanStale` kann ein nie gescanntes Image nicht melden | reused: beide Funde als Randbedingung uebernommen statt neu zu entdecken — Befund 3 bestimmt, dass die Deckung aus der Soll-Menge kommen muss | | -| ob die rohana-Berichte ueberhaupt frisch sind | alle 29 Berichte gleichmaessig 4,1 h alt — der Scanner zieht aus der Registry erfolgreich | reused: die bestehende Scan-Schleife bleibt, nur ihre Zielbeschaffung aendert sich | | +| ob #0078 ueberhaupt noch Arbeit ist, bevor ein Entwurf beginnt | das gesamte Zielbild war seit dem 2026-08-01 gebaut und lieferte: Raum, Metriken, Dashboard, fuenf Regeln, Raum-Routing | reused: nichts gebaut — #0078 mit Nachweis geschlossen statt umgesetzt | b3d961d | +| eine Entscheidung zum Meldeweg, bevor eine eigene getroffen wird | ADR-0003 (angenommen, 2026-08-01) legt Aggregation, Security-Raum und einen Bot bereits fest | reused: der Meldeweg bleibt unberuehrt und wird Nicht-Ziel | e10cd5d | +| eine Quelle fuer die laufenden Images, statt eine zu bauen | `kube_pod_container_info` (39) und `container_last_seen{job="operating_cadvisor"}` (12) liegen in **derselben** Prometheus, die der Scanner ueber das vorhandene Compose-Netz erreicht | reused: kein neuer Dienst, keine Zugangsdaten, kein neuer Netzweg | e10cd5d | +| einen Weg, game-operating auszuschliessen | `job="gameserver_cadvisor"` (20 Images) trennt sauber von `operating_cadvisor` | reused: ein Beschriftungsvergleich statt einer Ausschlussliste | e10cd5d | +| ob die Registry ohne neue Zugangsdaten lesbar ist | anonymer Token-Tanz genuegt: `/v2/token` → Katalog und Tag-Listen; 6 Repos, 36 Tags | reused: die Standard-Registry-Authentifizierung, die der Scanner ohnehin schon fuer das Ziehen macht | e10cd5d | +| einen Weg, den Betriebs-Host selbst auszurollen | `10.0.0.3:2248` ist von MATRIX offen und die Agent-Weiterleitung traegt, der Schluessel ist dort aber nicht zugelassen | reused: das bestehende Verfahren `deploy-uebergabe.md` statt eines neuen Zugangs — es entstand 2026-08-01 aus genau diesem Stack | e316193 | +| einen anonymen Weg an die Tag-Zeitstempel, bevor ein Token eingeplant wird | Giteas `/api/v1/packages` verlangt einen Token — die Registry-API dagegen nicht: Manifest → Config-Blob liefert `created`, anonym, ~90 Anfragen je Runde | reused: die Registry-Authentifizierung, die der Scanner ohnehin macht — Randbedingung "keine neuen Zugangsdaten" bleibt gewahrt | a0cd02a | +| einen Ort fuer die Soll-Menge, bevor ein Dienst dafuer gebaut wird | der `cve-exporter` braucht sie fuer die Deckungsmetrik ohnehin und ist ein laufender stdlib-Python-Prozess im selben Netz | reused: bestehender Prozess statt drittem Container — kein `jq`, kein `pip`, keine zweite Wahrheit | 2693a2d | +| eine AAR zu genau diesem Stack, bevor Randbedingungen geraten werden | AAR 2026-08-01: `up -d` aktiviert Configs nicht (im Container pruefen), und `TrivyScanStale` kann ein nie gescanntes Image nicht melden | reused: beide Funde als Randbedingung uebernommen statt neu zu entdecken — Befund 3 bestimmt, dass die Deckung aus der Soll-Menge kommen muss | 2693a2d | +| ob die rohana-Berichte ueberhaupt frisch sind | alle 29 Berichte gleichmaessig 4,1 h alt — der Scanner zieht aus der Registry erfolgreich | reused: die bestehende Scan-Schleife bleibt, nur ihre Zielbeschaffung aendert sich | a0cd02a | ## Notes diff --git a/docs/ledger/2026-08-21-egress-vollstaendig.md b/docs/ledger/2026-08-21-egress-vollstaendig.md index 05f2311..47d784c 100644 --- a/docs/ledger/2026-08-21-egress-vollstaendig.md +++ b/docs/ledger/2026-08-21-egress-vollstaendig.md @@ -14,25 +14,25 @@ related: | gate | commit | approval | status | note | |---|---|---|---|---| -| 5 | 52326f4 | sorb | DONE | Abnahmeliste vollstaendig, Call gemessen; ADR-0025 angenommen, #0088 geschlossen. | -| 4 | b0837b7 | sorb | DONE | Fuenf Slices in vier Wellen; Rueckweg in Slice 1 geprobt und Gate 2 korrigiert. | -| 3 | a7d561b | sorb | DONE | Klassen, Regelform, rohana intern statt extern. | -| 2 | 1dc5439 | sorb | DONE | Drei Klassen, CIDR-only, ClamAV als harter Fall benannt. | | 1 | 04b1b84 | sorb | DONE | Umfang und vier zaehlbare Abnahmekriterien; #0088 auf in-progress. | +| 2 | 1dc5439 | sorb | DONE | Drei Klassen, CIDR-only, ClamAV als harter Fall benannt. | +| 3 | a7d561b | sorb | DONE | Klassen, Regelform, rohana intern statt extern. | +| 4 | b0837b7 | sorb | DONE | Fuenf Slices in vier Wellen; Rueckweg in Slice 1 geprobt und Gate 2 korrigiert. | +| 5 | 52326f4 | sorb | DONE | Abnahmeliste vollstaendig, Call gemessen; ADR-0025 angenommen, #0088 geschlossen. | ## Ladder | searched | found | outcome | commit | |---|---|---|---| -| `apps/production/networkpolicy.yaml` und die beiden anderen Namespaces, bevor ein Modell entworfen wird | 18 Policies, davon drei Egress; `authentik` und `monitoring` haben je eine eigene Datei mit nur der Metadaten-Sperre | reused: bestehender Stil je Namespace, kein neues Modell und kein Werkzeug | | -| die Bestandsaufnahme aus der Vormessung, statt neu zu zaehlen | 10 eingeschraenkt, 7 laufend offen, 8 Job-artig offen, 2 Namespaces gar nicht erfasst | reused: die Zahlen aus #0088 vom selben Tag, samt Methodik | | -| die Durchsetzungsschicht, bevor eine Regelform gewaehlt wird | kein separater CNI-/Policy-Pod — k3s' eingebauter Controller, also Standard-NetworkPolicy | reused: die bestehende Erlaubnisform (DNS + 10.42/16 + 10.43/16), kein neues Modell | | -| ob IPv6 eine Umgehung waere | podCIDRs nur IPv4, v6-Verbindung scheitert mit OSError | reused: IPv4-CIDRs genuegen — kein Zusatzaufwand fuer eine Adressfamilie, die es nicht gibt | | -| das git-storage-Ziel von wikijs, statt es zu raten | steht nicht im Manifest, sondern in der Wiki.js-Datenbank: `https://rohana.axion1337.de/sorb/ThreadNetWiki.git` | reused: die laufende Konfiguration als Quelle — Klasse B bestaetigt | | -| ob die Sperre von gestern ueberhaupt beisst, bevor neue dazukommen | drei echt externe Ziele blockiert, die Knoten-Adresse erreichbar | built: nichts — aber der Fund aendert die Klasseneinteilung und gehoert ins Issue | | -| einen privaten Weg zu rohana, auf sorbs Einwand hin | `10.0.0.3:443` antwortet als Gitea und traegt ein gueltiges Let's-Encrypt-Zertifikat fuer den oeffentlichen Namen | reused: der vorhandene private Pfad statt einer Erlaubnis nach draussen — kein Dienst muss umkonfiguriert werden | | -| einen Weg, den Namen intern umzubiegen | die Corefile importiert bereits beides: `*.override` im Hauptblock (Z. 19) und `*.server` am Ende (Z. 22); nur die ConfigMap fehlt | reused: der vorgesehene k3s-Mechanismus, keine Aenderung an der Corefile selbst — `.server`, weil eine eigene Zone noetig ist und ein zweiter `hosts`-Block im Hauptblock mit `NodeHosts` kollidiert waere | | -| einen Weg, einen distroless Pod zu pruefen | `kubectl debug` haengt einen ephemeren Container in denselben Netz-Namensraum, die Policy gilt fuer ihn genauso | reused: Bordmittel statt Sidecar oder Image-Aenderung | | +| `apps/production/networkpolicy.yaml` und die beiden anderen Namespaces, bevor ein Modell entworfen wird | 18 Policies, davon drei Egress; `authentik` und `monitoring` haben je eine eigene Datei mit nur der Metadaten-Sperre | reused: bestehender Stil je Namespace, kein neues Modell und kein Werkzeug | 04b1b84 | +| die Bestandsaufnahme aus der Vormessung, statt neu zu zaehlen | 10 eingeschraenkt, 7 laufend offen, 8 Job-artig offen, 2 Namespaces gar nicht erfasst | reused: die Zahlen aus #0088 vom selben Tag, samt Methodik | 04b1b84 | +| die Durchsetzungsschicht, bevor eine Regelform gewaehlt wird | kein separater CNI-/Policy-Pod — k3s' eingebauter Controller, also Standard-NetworkPolicy | reused: die bestehende Erlaubnisform (DNS + 10.42/16 + 10.43/16), kein neues Modell | 1dc5439 | +| ob IPv6 eine Umgehung waere | podCIDRs nur IPv4, v6-Verbindung scheitert mit OSError | reused: IPv4-CIDRs genuegen — kein Zusatzaufwand fuer eine Adressfamilie, die es nicht gibt | 1dc5439 | +| das git-storage-Ziel von wikijs, statt es zu raten | steht nicht im Manifest, sondern in der Wiki.js-Datenbank: `https://rohana.axion1337.de/sorb/ThreadNetWiki.git` | reused: die laufende Konfiguration als Quelle — Klasse B bestaetigt | a7d561b | +| ob die Sperre von gestern ueberhaupt beisst, bevor neue dazukommen | drei echt externe Ziele blockiert, die Knoten-Adresse erreichbar | built: nichts — aber der Fund aendert die Klasseneinteilung und gehoert ins Issue | 722c149 | +| einen privaten Weg zu rohana, auf sorbs Einwand hin | `10.0.0.3:443` antwortet als Gitea und traegt ein gueltiges Let's-Encrypt-Zertifikat fuer den oeffentlichen Namen | reused: der vorhandene private Pfad statt einer Erlaubnis nach draussen — kein Dienst muss umkonfiguriert werden | a7d561b | +| einen Weg, den Namen intern umzubiegen | die Corefile importiert bereits beides: `*.override` im Hauptblock (Z. 19) und `*.server` am Ende (Z. 22); nur die ConfigMap fehlt | reused: der vorgesehene k3s-Mechanismus, keine Aenderung an der Corefile selbst — `.server`, weil eine eigene Zone noetig ist und ein zweiter `hosts`-Block im Hauptblock mit `NodeHosts` kollidiert waere | 20cfeae | +| einen Weg, einen distroless Pod zu pruefen | `kubectl debug` haengt einen ephemeren Container in denselben Netz-Namensraum, die Policy gilt fuer ihn genauso | reused: Bordmittel statt Sidecar oder Image-Aenderung | c7f7e73 | ## Notes