Files
bf-infra/docs/handoff-doku-session-20260818.md
Christoph Emsenhuber 0ec812c68e Doku-Drift beheben: Ist-Stand-Block, TP26/TP27, Fasttrack-Befund, Uebergabe
Eine parallele Session hat drei Befunde gemeldet, alle drei richtig. Sie sind
hier abgearbeitet.

1) Der "Ist-Stand (Kurz)"-Block war an vier Stellen ueberholt: Standalone-APs
   statt CAPsMAN, RouterOS 7.19.5/7.23 statt 7.24, "plain 1.1.1.1" statt DoH,
   68/68 statt 92/92. In der Nacht wurden die TP-Abschnitte und CLAUDE.md
   nachgezogen, aber ausgerechnet der Block, den eine frische Session zuerst
   liest, blieb stehen.

2) TP26 und TP27 existierten nur als Commits und .rsc-Dateien, ohne Abschnitt.
   Beide nachgetragen. TP27 (RouterBOOT 7.24) ist auf allen vier Geraeten
   abgeschlossen -- current-firmware = upgrade-firmware = 7.24, geprueft.

3) Fasttrack ist auf dem Core tot: 32,9 Mio Pakete auf der accept-Regel davor,
   0 auf Fasttrack, 0 von 445 Verbindungen fasttracked. Herkunft ist der
   Core-Cutover (ap1 hatte die Reihenfolge richtig). Und das Re-Baseline vom
   18. hat den Fehler als Absicht in die SoT geschrieben -- die Kehrseite von
   ingest-core-firewall.py, jetzt als Warnung in TP21.

Dazu: die TP6-Praemisse wackelt. call-quality-diagnosis.md misst A/A+ und
haelt CAKE fuer marginal; TP6 wird trotzdem als "DAS Ziel" gefuehrt. Naechster
Schritt ist deshalb eine Messung gegen den heutigen Edge, nicht eine Queue.

Uebergabe fuer die Doku-Session: docs/handoff-doku-session-20260818.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 13:33:24 +02:00

6.7 KiB

Übergabe an die Doku-/Review-Session — Stand 2026-08-18, 06:30

Wofür das hier ist: Du hast in der Nacht auf den 18. eine Analyse gefahren und drei Befunde gemeldet. Alle drei waren richtig. Parallel lief eine zweite Session, die dieselben Dateien bearbeitet hat — daher dieses Dokument: es sagt dir, was inzwischen erledigt ist, was von deinen Befunden offen bleibt, und wo du weiterarbeiten kannst, ohne dass wir uns gegenseitig überschreiben.


1. Deine drei Befunde — Abgleich

✅ Befund 1: Doku-Drift — bestätigt, inzwischen behoben

Du hattest recht, und die Ursache war banal: die andere Session hat in der Nacht die TP-Abschnitte und CLAUDE.md nachgezogen, aber den „Ist-Stand (Kurz)"-Block oben in teilprojekte.md übersehen. Genau den Block, den eine frische Session zuerst liest.

Alle vier von dir genannten Punkte waren falsch und sind jetzt korrigiert:

stand dort tatsächlich (live geprüft 08-18)
„reine Standalone-APs, kein CAPsMAN" CAPsMAN auf dem Core seit 08-17 (TP28)
RouterOS 7.19.5 / 7.23 alle vier auf 7.24, RouterBOOT ebenfalls 7.24
DNS „plain 1.1.1.1" DoH zum CF-Gateway, verify-doh-cert=yes
68/68 Compliance 92/92 bei 23 Rules, 0 Drifts

TP26/TP27 haben jetzt Abschnitte. Du hattest auch damit recht: beide existierten nur als Commits und .rsc-Dateien. TP27 ist Christophs eigene RouterBOOT-/7.24-Arbeit aus Commit b93514a — daher kam die 7.24, die im Ist-Stand-Block fehlte.

✅ Befund 2: TP6-Prämisse — bestätigt, jetzt im Dokument verankert

docs/call-quality-diagnosis.md sagt es sogar im Kopf: TP6 „hat sich als Nicht-QoS-Problem entpuppt". Dazu die Ergebnistabelle: CAKE / QoS | kein Bufferbloat-Spielraum | ❌ nicht deployt.

Das steht jetzt in TP6 selbst, samt der Einschränkung, die du selbst genannt hast (FritzBox-Ära, Edge seither getauscht). Der kritische Pfad ist entsprechend umformuliert: nächster Schritt ist eine Messung gegen den heutigen Edge, nicht der Bau einer Queue.

✅ Befund 3: Fasttrack — bestätigt, plus zwei Fakten, die du nicht wissen konntest

Live nachgezählt am 08-18:

2 accept                | defconf: accept est,rel,untracked | 32.979.171 Pakete
3 fasttrack-connection  | defconf: fasttrack                |          0 Pakete
0 von 445 Verbindungen fasttracked

Ergänzung 1 — es ist kein Zufall, sondern ein Cutover-Artefakt. ap1 hatte die Reihenfolge vor dem Cutover richtig (Fasttrack zuerst, MikroTik-defconf). Umgedreht wurde sie beim handgebauten Core-Aufbau in TP21.1.

Ergänzung 2 — seit dem 18. steht der Fehler als Absicht in der SoT. Das Re-Baseline (ingest-core-firewall.py --apply) nach TP5 E3/E4 hat die Reihenfolge unverändert nach Nautobot geschrieben, Rule ip-firewall-filter mit config_ordered=true. Das ist die Kehrseite dieses Werkzeugs: es erklärt den Ist-Stand zum Soll, ohne zu prüfen, ob der sinnvoll ist. Steht jetzt als Warnung in TP21.

Offen und bewusst nicht entschieden (gehört Christoph): Reihenfolge korrigieren · Fasttrack-Regel entfernen · so lassen. Vorher wäre zu messen, was Fasttrack-los den Inter-VLAN-Durchsatz kostet (NAS ↔ MAIN läuft geroutet über die Core-CPU). Für 10 Mbit WAN irrelevant, für Gigabit-Transfers nicht.


2. Was in der Nacht passiert ist (Kontext, den du sonst rekonstruieren müsstest)

Chronologisch, alles verifiziert und committet:

  1. TP23 Stufe 1 — DoH auf dem Core. GTS Root R4 importiert (~1 KB statt CA-Bundle — der Core hat nur 2,8 MB freien Flash), verify-doh-cert=yes. ⚠️ Der Deploy meldete FAILURE, obwohl alles saß: /certificate import gibt failed: 0 aus, und der Job scannt den Output stumpf nach dem Wort.
  2. TP23 Stufe 2 — AdGuard vorbereitet, bewusst NICHT scharf geschaltet. Conditional Upstreams, sechs CIDR-Gruppen, dns-bypass-exempt. Kein DHCP-Scope angefasst.
  3. TP5 Etappe 2-Nachtrag. Das „die Log-Regel ist verstummt" von Etappe 2 stammte aus einem 70-Sekunden-Fenster und war falsch — über dreieinhalb Stunden liefen 119 Zeilen auf. Drei der vier Lücken hätten den Drop zum Ausfall gemacht, darunter: der Netmiko-Deploy kommt von 10.40.20.31 (nautobot-worker), nicht von .20.30.
  4. TP5 Etappe 3 + 4 — deny-by-default in beiden Ketten. Abnahme: 11 gedroppte Pakete in 15 Minuten, alle von der eigenen Sonde. Die 5 mDNS-input-Regeln sind dadurch erstmals scharf.
  5. NTP. Der Standort hatte nirgends eine funktionierende Zeitsynchronisation. Jetzt: Core als Quelle, DHCP-Option 42, ComplianceRule system-ntp.
  6. TP7.1 — SSDP-Relay als LXC 108 auf pve. User-bestätigt: „sonos ist da!"
  7. TP28-Rest — GC-Modell auf CAPsMAN umgebaut. Die APs trugen noch die komplette Standalone-WLAN-Config aus TP3; abgeräumt ohne einen Client zu verlieren.
  8. TP19 und TP3.2 geschlossen.

Nautobot-Betrieb: der Stack hat sich zweimal selbst umgebracht. Ursache war der Image-Healthcheck (voller Django-Start alle 10 s, Aufrufe stapeln sich → ENOMEM → DSM räumt ab), nicht Celery. Behoben. Steht in TP21.


3. Arbeitsteilung — damit wir uns nicht überschreiben

docs/teilprojekte.md ist die einzige Datei, die beide Sessions anfassen wollen. In der Nacht wurde sie viermal committet.

Vorschlag: die andere Session hält sich ab jetzt von teilprojekte.md fern, solange du daran arbeitest. Vor jedem Edit git pull, danach zügig committen — der Stand ist auf gitea/main gepusht.

Was für dich sinnvoll offen liegt

  • Doku-Konsistenz weiter prüfen. Du hast den Ist-Stand-Block gefunden; wahrscheinlich gibt es mehr davon. Lohnende Kandidaten: docs/ip-plan.md (enthält noch 10.40.41.x-Zeilen aus der VLAN1-Ära), docs/doku-cleanup-session.md Punkt E (laut Follow-up-Liste „teilweise"), und die Memory-Dateien — mehrere behaupten noch „kein CAPsMAN".
  • TP13 / TP14.4 / TP16.3 — die hattest du bereits offen. TP14.4 (CF-Access-Service-Token rotieren) ist unverändert offen, TP16.3 ebenfalls (Recherche durch, Umsetzung offen).
  • Nicht anfassen ohne Rücksprache: die Fasttrack-Reihenfolge (Entscheidung gehört Christoph) und alles, was einen GC-Push auslöst — die Compliance steht gerade auf 92/92 und das sollte sie bleiben.

Zwei Regeln, die in der Nacht teuer erkauft wurden

  1. Job-Status ist kein Wirksamkeitsnachweis. Zweimal meldete ein Plan „Completed", ohne etwas zu ändern ([find !dynamic] ist auf /interface wifi configuration ein Syntaxfehler, kein Filter), und einmal „FAILURE", obwohl alles saß. Nur die Gegenprüfung am Gerät zählt — --assert nutzen.
  2. Ein Zählerstand über 70 Sekunden ist keine Messung. Siehe TP5 oben.