From 39c8f10f201272adfab5c9e77350ffb964b1997e Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Fri, 21 Aug 2026 12:00:00 +0000 Subject: [PATCH] =?UTF-8?q?docs:=20slice=201=20for=20#0106=20=E2=80=94=20t?= =?UTF-8?q?he=20derivation=20runs,=20and=20two=20of=20my=20own=20errors=20?= =?UTF-8?q?were=20caught?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The slice changes no behaviour: the scanner still reads the old list. What it adds is the ability to say how much of the estate is covered, and its acceptance is a number already known by hand. Both mistakes in this slice were caught by controls rather than by luck. The counter-proof about tag ordering was itself wrong — name ordering loses v0.10.0, not v0.8.0 — and the test failed until the reasoning was fixed. The first edit to the compose file assumed the wrong indentation, and the assertion in front of it stopped a half-applied change from being written. --- STATUS.md | 2 +- docs/design/2026-08-21-cve-ziele-ableiten.md | 47 +++++++++++++++++++- docs/ledger/2026-08-21-cve-ziele-ableiten.md | 15 ++++++- 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/STATUS.md b/STATUS.md index 245d3a5..952dc5b 100644 --- a/STATUS.md +++ b/STATUS.md @@ -86,7 +86,7 @@ Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md). | Design | Gate | Title | |---|---|---| -| [2026-08-21-cve-ziele-ableiten](docs/design/2026-08-21-cve-ziele-ableiten.md) | gate-3 | Design: Die CVE-Zielmenge ableiten statt pflegen (#0106) | +| [2026-08-21-cve-ziele-ableiten](docs/design/2026-08-21-cve-ziele-ableiten.md) | slice-1 | Design: Die CVE-Zielmenge ableiten statt pflegen (#0106) | ## ADRs (26) diff --git a/docs/design/2026-08-21-cve-ziele-ableiten.md b/docs/design/2026-08-21-cve-ziele-ableiten.md index 914dc32..cfde44b 100644 --- a/docs/design/2026-08-21-cve-ziele-ableiten.md +++ b/docs/design/2026-08-21-cve-ziele-ableiten.md @@ -1,6 +1,6 @@ --- type: design -status: gate-4 +status: slice-1 date: 2026-08-21 size: L related: @@ -465,4 +465,47 @@ Zeigt cAdvisor nur Laufendes, ist die Soll-Menge unvollständig und die Deckung meldet trotzdem 100 %. Dann braucht es eine zweite Quelle für den Betriebs-Stack — und das gehört als Befund in Gate 5, nicht stillschweigend in den Code. -> **STOP — Freigabe für Gate 4.** +> **Gate 4 freigegeben durch sorb, 2026-08-21.** Ausrollen als Deploy-Übergabe. + +### Slice 1 — durchgeführt, 2026-08-21 · Commit `27770b6` (threadnet-operating) + +**Status: DONE_WITH_CONCERNS** — gebaut und belegt, aber die Abnahme dieses +Slices ist erst nach dem Ausrollen messbar (siehe unten). + +| Aufgabe | Beleg | +|---|---| +| 1.1 `cve/targets.py` | `py_compile` sauber; Handlauf `python3 targets.py` vorhanden | +| 1.2 `cve/test_targets.py` | **21 Zusicherungen grün** | +| 1.3 `cve-exporter.py` | Lauf gegen aufgezeichnete Quellen: fünf `cve_target_*`-Serien, `targets.txt` geschrieben | +| 1.4 `docker-compose.yml` | `docker compose config` grün; Volume `cve_targets` rw beim Exporter, **ro** beim Scanner | + +**Die Testreihe kann nachweislich rot werden.** Eine gezielte Sabotage der +Normalisierung (Tag wird verworfen, alles fällt zusammen) fährt **11 von 21** +Zusicherungen rot; zurückgesetzt wieder grün. Ohne diesen Nachweis wäre „21 +grün" nur eine Vermutung. + +**Ein Nebenbeweis fiel im Lauf ab:** Der Testbericht trägt +`docker.io/library/postgres:17-alpine`, die Soll-Menge `postgres:17-alpine` — +und `cve_targets_orphaned` blieb **0**. Die Normalisierung trägt also über die +Quellgrenze hinweg, nicht nur innerhalb einer Quelle. + +⚠️ **Zwei eigene Fehler, beide von den eingebauten Kontrollen gefangen:** + +1. Die Gegenprobe zur Tag-Sortierung war **selbst falsch** — sie behauptete, + eine Namenssortierung würde `v0.8.0` verlieren. Tatsächlich verliert sie + `v0.10.0` und nimmt `v0.7.0` mit. Der Test schlug fehl und hat meinen + Denkfehler korrigiert, nicht den Code. +2. Der erste Änderungsversuch am Compose ging von **6/8 Leerzeichen** + Einrückung aus; tatsächlich sind es **4/6**. Die `assert`-Zeile davor hat + verhindert, dass eine halb angewandte Änderung geschrieben wurde — die Datei + blieb unberührt. Das ist die Lehre vom 20.08. (zeilenweise, einrückungsbewusst + ändern), diesmal als Kontrolle statt als Schaden. + +**Was das Verhalten der Anlage angeht: nichts.** `scan-loop.sh` ist unangetastet +und liest weiter `images.txt`. Das Volume ist beim Scanner bereits eingehängt, +damit beim Umschalten in Slice 3 kein Neustart-Rennen entsteht. + +**Offen bis zum Ausrollen** (Deploy-Übergabe): Die eigentliche Abnahme ist die +Zahl. `cve_targets_missing` muss **24** ergeben, `cve_targets_orphaned` **2**, +`cve_target_coverage_ratio` **≈ 0,52** — die Werte der Handmessung. Weicht sie +ab, ist die Herleitung falsch. diff --git a/docs/ledger/2026-08-21-cve-ziele-ableiten.md b/docs/ledger/2026-08-21-cve-ziele-ableiten.md index a0424d2..dc5fcd2 100644 --- a/docs/ledger/2026-08-21-cve-ziele-ableiten.md +++ b/docs/ledger/2026-08-21-cve-ziele-ableiten.md @@ -14,11 +14,17 @@ related: | gate | commit | approval | status | note | |---|---|---|---|---| -| 4 | | | OPEN | Fuenf Slices; Ausrollen als Deploy-Uebergabe, Mengengeruest beigelegt. | +| 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). | +## Slices + +| slice | commit | status | note | +|---|---|---|---| +| 1 | 27770b6 | DONE_WITH_CONCERNS | Herleitung + Metriken, nur beobachtend; Abnahme (24/2/0,52) erst nach dem Ausrollen messbar. | + ## Ladder | searched | found | outcome | commit | @@ -60,3 +66,10 @@ Betriebs-Host 12), gescannt 27, Registry 36 Tags in 6 Repos davon 7 CI-Artefakte. Die volle Lesart der Anforderung ergaebe rund 83 Ziele statt 29 — Faktor drei. Deshalb steht die Registry-Reichweite als ausdrueckliche Frage in Gate 1 statt als stille Annahme im Entwurf. + +**Zwei eigene Fehler in Slice 1, beide von eingebauten Kontrollen gefangen.** +Die Gegenprobe zur Tag-Sortierung war selbst falsch (sie behauptete den Verlust +von `v0.8.0` statt `v0.10.0`) — der Test korrigierte meinen Denkfehler, nicht +den Code. Und der erste Compose-Eingriff ging von falscher Einruckung aus; die +`assert`-Zeile davor hat verhindert, dass eine halb angewandte Aenderung +geschrieben wurde. Beide Male war die Kontrolle billiger als der Schaden.