← Zurück zur Übersicht

Sanierungs-Roadmap

Schadensereignis 19.04.2026

Böhmermann-Spendenmarathon-Halluzination — User-verifizierter Faktenfehler im Artikel #72/#73/#74. Korrigiert in Commit 52c2bef: Behauptung „Böhmermann spendet 500.000 €" entschärft auf den belegten Mechanismus „Spendenmarathon vermittelt ≈513.756 €". Auslöser für das vollständige Damage-Assessment ab 24.04.2026.

Permanente Erinnerung Defense-Stack 8/8 grün. Stufe 9 wäre Werkzeug-Inflation. Jetzt Inhalt machen.
Risse repariert
35
Halluzinationen + Halbwahrheiten seit Schadensereignis behoben.
Halluzinationsfrei
91%
Damage-Audit über 792 Behauptungen, Sweep gegen 16 Patterns clean.
Genug Fleisch
54%
Anteil Wiki-Artikel mit ≥1.500 Wörtern. Substanz-Aufgabe.
Baustellen offen
3
Aktive Großbaustellen: Reparatur-Audit (#86), Recherche-Backfill (#85), Sanierungs-Roadmap (#87 — diese Seite).

Chronologische Sicht der Sanierung. Vom Schadensereignis bis zum aktuellen Stand. Pulsierender Punkt = jetzt.

2026-04-19
Schaden bemerkt 52c2bef
Faktenfix #72/#73/#74 (Commit 52c2bef): Böhmermann-„Spende"-Behauptung präzisiert + tote rbb-URL ersetzt. Erster konkreter User-verifizierter Halluzinations-Befund.
2026-04-24
Sanierungsbeginn — Damage-Audit 7b9fefe
Beschluss: alle 68 Alt-Artikel retroaktiv prüfen. Baseline-Scan: 52 tote Links, 165 Claim-Kandidaten. Cluster 1 (CORRECTIV) als erste Reparatur committed.
2026-04-25
Phase 11 — 10 Cluster-Damage-Reports parallel
Plan-Pivot zu Damage-Assessment first, Reparatur danach. 10 Sonnet-Sub-Agents auf 10 Cluster (NGO-Bund, BB-Netzwerk, BB-Wohlfahrt, Linksextrem, MV, Asyl, Klima, Medien, SN, Rest). Output: docs/audits/damage/01–10.md.
2026-04-26
Phase 11 — Cluster-Reparaturen (Welle 1) f28c641
6 Cluster-Sweep-Reparaturen quer durch die 10 Damage-Cluster. Erste Welle der HEAVY_FIX-Artikel (NGO-Bund + Brandenburg + Asyl + Sachsen). 11 Personen-Datenblätter parallel angelegt als strukturierte Profil-Schicht (Drehtür-Doku, Mandate, Honorare).
2026-04-26
Issue #5 — Pipeline um 5 neue Validator-Phasen gehärtet d886171
Fünf Pflicht-Phasen in beide Pipeline-Skills (Standard + Extended) eingehängt: (4.3) Drs.-Hyperlink-Linter — jede BT-Drs.-Erwähnung muss anklickbar verlinkt sein. (5.3) Tempus-Decay-Check — Präsens-Aussagen mit Verfallsdatum (z. B. „bis 2022 eingestellt"). (5.6) Aktenzeichen-Validator — jedes AZ braucht Gerichts-Link. (6.5) Halbwahrheits-Test — Subjekt-Verb-Objekt-Treue gegen Quelle. Plus Gegenposition-Pflicht im Wiki-Template + audit.js. Issue #5 KOMPLETT.
2026-04-27
Phase 12 — Validatoren + Stresstest 345ae78
Drs.-Numbers + Lobby-IDs als Pipeline-Phase 4.4 (192 BT-Drs. + 103 R-IDs Org-Match). Stresstest-Bericht mit Cross-File-Cluster-Modifier. CSP-Violation Dashboard gefixt (jsdelivr blockiert → cdnjs erlaubt). Decay-Backlog-Patterns dokumentiert. Diakonie-DWBO 437→380 (erste Runde, Carousel-Daten kommen erst am 28.04.).
2026-04-27
Issue #7 — Personen-Datenblätter + Fact-Library als Infrastruktur d94b723
Strukturierte JSON-Schicht für wiederkehrende Behauptungen: docs/personen/*.md mit Schema (Mandate, Drehtür-Stationen, Honorare, Kontroversen) und docs/facts/*.json (z. B. wohlfahrtsverbaende.json) als zitierbare Fact-Library. audit.js prüft Schema-Konformität. Reduziert N-fold-Halluzinationen, weil eine zentrale Quelle statt copy-paste über Wiki + Blog + Index. Aufbau für künftige Subagent-Recherchen.
2026-04-28früh
Re-Damage-Welle — N-fache Halluzinationen aufgedeckt a78c931
Fünf-Wellen-Verifikation entdeckt: Sub-Agent-Reparaturen in Wiki-Hauptdatei waren OK, aber nicht alle N-fachen Kopien (in artikel.html, artikel-blog.js, downloads/*.md, index.html, Test-Snapshots) wurden mit-gefixt. Cluster A1+A2 + B1/B2 nochmal sweepen, dann Pre-Push-Block aktiviert. 5/9 RED + 5/18 ORANGE waren nach erstem Fix-Lauf noch unvollständig. Plus: Wayback-Snapshot-Pflicht für tote Quellen, 10 Top-Dead-Links transparent gehedgt. Auslöser für die spätere Mechanisierung (08:30 Block).
2026-04-28
Phase 12 — Recherche-Pflicht-Schema institutionalisiert (A–Z)
Session B baut die Methodik-Schicht: 5-Iterations-Schema mit 26 Themenfeldern A–Y plus Adversarial-Z. Iteration 1 (A–D) immer Pflicht, Iter 2–5 abhängig vom Klassifikator (kategorie + budget + politisch_aufgeladen). DB-Tabellen recherche_protokoll + org_metadata, Pipeline-Phase 6.7, methoden.html als globale Doku publik. audit.js requiredIterations() + summarizeRequired(); HARD-Modus per AUDIT_RECHERCHE_HARD=true blockiert Live-Push bei fehlendem Protokoll. SOFT aktiv bis Backfill (61 Alt-Wikis) vollständig — Issue #85.
2026-04-2808:30
Phase 12 — Sweep-Routine institutionalisiert 05fed89
8 Schichten Defense-in-Depth: Validator-Suite + Drs/Lobby-Check + N-fold-Coverage + Halluzinations-Sweep + Pattern-Registry + Pre-Push + Pre-Receive + Server-Cron Sonntag 03:15 UTC. Pre-Receive-Bugs gefixt (git archive statt checkout, set -e raus).
2026-04-2810:44
Pattern-Audit findet 2 weitere Risse b1bc73a
Adversarial Pattern-Audit: R005041 in 8 HateAid-Carousel-URLs (Kontext-Filter griff nicht), Fall Feliks „8.000 €"-Symbol-Variante in 6 Files. Pattern-Coverage-Meta-Validator + core_tokens-Schema eingeführt.
2026-04-2811:18
Reparatur-Roadmap (Audit-Sicht) 97a519d
Ehrliche Visualisierung: 91 % halluzinationsfrei + 33 % genug Fleisch + Stop-Marker bei Stufe 8 (Werkzeug-Inflation).
2026-04-2820:30
Sanierungs-Roadmap (Wiki-Sicht)
Vier-Tab-PM-Sicht aus derselben Datenquelle: Bautagebuch · Baustellen · Bauarbeiter · Bauprüfung. Bauprüfung = Audit-Sicht 1:1.
2026-04-2822:30
Phase 12 Backfill-Pilot: CORRECTIV abgeschlossen 75ed1e2
Erstes vollständiges Recherche-Protokoll nach BfV-Pilot — alle Pflicht-Iter (1+2+3+4+5+Z) für faktenchecker+politisch_aufgeladen abgehakt: 5 neue Wiki-Befunde (Hombach-Doppelrolle 2014–2016, KG-Berlin-Niederlage, Übermedien-Drei-Autoren-Kritik, Schweizer Tochter CrowdNewsroom, Faktenforum-Update), 12 neue Quellen [28]–[39] inkl. CORRECTIV-Bundesanzeiger-Bilanzen 2020–2023 als Primärbeleg, 9 verworfene Befunde dokumentiert, 23 Suchqueries verbatim. Adversarial-Self-Check und Daten-Lücke (Iter 4 N) ehrlich offen. Standard-Komplettierungs-Pipeline (A–E) etabliert: Browser-Visual + Restrisiken-Sweep + Doku-Drift-Fix + Roadmap-Update + Git-Pflege. Nebeneffekt: CLAUDE.md-vs-audit.js-Drift bei requiredIterations() aufgedeckt — globale budget/age-Trigger jetzt korrekt dokumentiert.
2026-04-2823:15
Strang-2-Reparatur-Audit (Issue #86) — 4 Pattern-Treffer ac9f0b1
Adversarial-Audit aller 62 Commits seit Böhmermann-Fund. Vier echte Treffer: Pattern F (audited-at-Drift, 68/75 Wikis Provenance-Lüge, 44 echte Pflege-Drift) · Pattern N (Pipeline-Eingangstest-Lücke, KRITISCH: 13/16 Validatoren orphan, Pflicht-Phasen 4.3/4.4/4.5/5.3/5.5/5.6/5.7 sind Disziplin nicht Mechanik) · Pattern E (Memory/Doku-Drift: untracked inject-recherche-protokoll.js trotz #83 [x] und deploy.sh-Pflicht, 16-vs-19-Pattern-Anzahl, carousel-studio-Pfad-Drift) · Pattern D (Schema-Code-Drift: Phase-12-Blog-Frontend nicht verdrahtet). Drei neue Validator-Skripte: check-audited-at-drift.js, check-pipeline-input-coverage.js, check-issue-vs-code-drift.js. 14 Folge-Issues #86.1–#86.14 mit Eigentums-Zuordnung. Adversarial-Final-Sweep der eigenen Audit-Session: Self-Recursion erkannt (eigene Validatoren orphan → #86.13).
2026-04-2823:50
Mechanischer Schutz für Phase 6.7 (Issue #88.1) c0000fc
Pattern-N-Lücke geschlossen: audit.js erweitert um HARD-Block pro Slug nach audited-at-Datum. Schwelle 2026-04-29 — Slugs mit aktuellem audited-at ohne Recherche-Protokoll blockieren Pre-Push und Pre-Receive. Alt-Bestand (audited-at < 2026-04-29) bleibt SOFT, Backfill-Backlog #85 verhindert keine Pushes. AUDIT_RECHERCHE_HARD=true weiter als globaler Force-Switch. Backdoor (audited-at zurücksetzen) durch check-audited-at-drift.js (#86.1–3) zugeschnürt. Drei Tests grün: Default-SOFT, Force-HARD, Sim-Neuslug-HARD. Effekt: ab morgen kann kein neuer Wiki-Artikel mehr ohne Recherche-Protokoll live gehen.
2026-04-2900:50
Phase 12 Backfill: amadeu-antonio abgeschlossen (Phase 1+2) 93cfad4
Zweiter Backfill nach CORRECTIV — kategorie=stiftung + budget=12,5 Mio. + politisch_aufgeladen=1 → Iter 1+2+3+5+Z (22 Codes; kein Iter 4, da stiftung nicht in cat4). Substantielle Wiki-Erweiterungen: vollständiges Vorstand-Trio Reinfrank/Ameer/Repp (seit 1.4.2022) plus 8köpfiger Stiftungsrat mit zwei Drehtür-Befunden — Kleindiek (2014–2018 BMFSFJ-Staatssekretär → Aufsichtsorgan des Hauptfinanzierers) und Kramer (war vor seiner VS-Berufung Dezember 2015 bereits AAS-Stiftungsrat und behielt den Sitz nach der Behördenernennung; Doppelrolle Behördenleiter + NGO-Aufsicht durch Humanistische Union kritisiert). Neue Sektion „Internationale Förderung & Lobbyregister" (R004511, 21 öffentliche Fördergeber 2024). Personalkosten-Befund 2023: 6,29 Mio. Personal vs. 0,74 Mio. Projekte/Betroffene (8,5 : 1). BStU-Aktenzeichen 613/82, V 55/74 plus Müller-Enbergs-Gutachten als AAS-Auftrag (Dez 2012, nur Auszüge der Akte). Korrektur Wiki-Tippfehler „Müller-Enders" → „Müller-Enbergs" (replace_all). 9 verworfene Befunde dokumentiert, u.a. „Andrej Reinfrank als Kahane-Sohn"-Behauptung des Session-Prompts nicht verifizierbar. Phase 2: Browser-Visual auf Staging ✓, Kramer-Berufungs-Detail aus taz/Wikipedia in Phase B nachgereicht, 7 weitere Folge-Issues #88.x ausgelagert.
2026-04-2901:30
Standard-Pipeline um Blog-Cross-Check erweitert (Pattern H)
Frage Martin: „wirken sich die bisherigen beiden Wiki-Artikel auch auf die Blogartikel aus?" Befund: NEIN. DB hat 0 Blog-Einträge, recherche-protokoll-blog.json ist leer (Pattern D.1 #86.7 — Blog-Frontend nicht verdrahtet). Plus: neue Wiki-Befunde aus Backfill-Pilots wandern nicht automatisch in artikel-blog.js → Pattern H Risiko bei jedem Slug mit Blog-Pendant. Reaktion: STANDARD-PIPELINE.md Phase B erweitert um B.2 „Blog-Cross-Check" als Pflicht-Sub-Phase (grep + drei Wege spiegeln/cross-link/weglassen + Adversarial-Frage). SESSION-PROMPT-amadeu-antonio-PHASE2.md slug-konkret um AAS-Blog-Vorkommen-Analyse ergänzt (Hauptartikel id=2 + Erwähnungen in CORRECTIV/NGO-Industrie/Demokratie-leben-Blogs). Memory feedback_definition_of_done.md QUERBEZÜGE-Punkt um Wiki↔Blog-Pflicht erweitert. Strukturelle Lösung #86.7 bleibt offen — bis dahin disziplinärer Cross-Check.
2026-04-2902:15
Backfill-Priorisierung mechanisch + nächster Slug rote-hilfe-brandenburg
Neues Skript scripts/list-backfill-priority.js fusioniert Damage-Reports + recherche_protokoll-DB + org_metadata + wordCount zu einer mechanisch berechneten Top-N-Liste der noch zu backfillenden Wiki-Slugs. Scoring: Damage-Status (WITHDRAW=100, REWRITE=80, HEAVY_FIX=50, LIGHT_FIX=20) + RED×10 + ORANGE×3 + Halluzinations-Score×5 + Klassifikator-Schwere (oerr/sicherheits/faktenchecker=+30, behoerde/antifa=+20, stiftung/wohlfahrt/asyl=+10) + politisch_aufgeladen=+15. Top-1: rote-hilfe-brandenburg (HEAVY_FIX, Score 1.9, 3 RED + 2 ORANGE, antifa+politisch). Phase-1- und Phase-2-Session-Prompts angelegt mit 8 konkreten Damage-Restrisiken aus Cluster-Report 04-linksextrem.md (VS-Zitat „gewaltbilligend"→„gewaltrechtfertigend", OG-Verteilung 2→4, Quellen [2] BfV + [5] taz fixen, „Aktivste OG Cottbus" entlarven, „Autonome Antifa Cottbus"-Co-Sitz qualifizieren). Klassifikator-Pflicht: kategorie=antifa + age>5 → Iter 1+2+5+Z (~16 Themenfelder, ~150k Tokens, mittlerer Aufwand). Verbleibend: 57 von 60 Slugs.
2026-04-2907:00
Quality-Audit der ersten 3 Backfill-Pilots d743947
Auf Martins Frage „Erfolgsquote, ich musste bereits nacharbeiten" — strukturierter DoD-Sweep über die 10 Pflicht-Items aus STANDARD-PIPELINE.md je Slug. Erfolgsquoten: BfV 3/10 (Pre-Pipeline-Pilot vor Phase-12-Konsolidierung, Iter unvollständig, audited-at uralt, gegenposition fehlt), CORRECTIV 8/10 (alles erfüllt außer gegenposition-Sektion — die war noch nicht im Standard), AAS 10/10 (erste vollständige Pipeline-Reproduktion). Trend monoton steigend. Vier Patterns identifiziert: Q1 Pre-Pipeline-Pilot lebt unter veraltetem Standard, Q2 gegenposition fiel zwei Slugs lang durchs Raster (Warning ohne Block-Wirkung), Q3 audited-by-Format-Konvention war anfangs implizit, Q4 Versionsnummer-Inkrement ist Disziplin-only. Fünf Folge-Issues #88.2-#88.6 mit Reihenfolge: zuerst CORRECTIV-gegenposition-Mini-Edit (#88.4, 15 Min), dann audit.js Format-Validation + gegenposition HARD (#88.2, 30 Min), dann nächster Slug, später BfV-Vervollständigung (#88.3, 180 Min). Adversarial-Self-Check: nur formale DoD-Items geprüft, nicht inhaltliche Recherche-Tiefe — eigenes Pattern-N (Refinement-Empfehlungen sind selbst Disziplin-only bis sie in audit.js eingebaut sind). Bericht: docs/audits/QUALITY-AUDIT-BACKFILL-2026-04-29.md.
2026-04-2908:30
Phase 12 Backfill: rote-hilfe-brandenburg abgeschlossen (Phase 1+2)
Dritter Slug nach CORRECTIV + AAS — kategorie antifa + age=51 + politisch=1 → Klassifikator-Pflicht Iter 1+2+5+Z. Damage-Status HEAVY_FIX (Score 1.9, 3 RED + 2 ORANGE) auf grün gebracht: VS-Zitat „gewaltbilligend"→„gewaltrechtfertigend" (semantischer Zitat-Fehler, mit pdftotext aus VSB-BB 2024 S.14 wortgetreu verifiziert), „teilweise erhebliche"→„deutliche personelle Überschneidungen" (S.148), OG-Verteilung von 2 auf 4 ergänzt (Potsdam 250 / Strausberg 60 / KW 50 / Cottbus 40), „Aktivste OG Cottbus"-Halbwahrheit gestrichen (Cottbus ist die kleinste, nicht aktivste), „Autonome Antifa Cottbus"-Co-Sitz im Zelle-79-Hausprojekt zu „antifaschistisch genutztes Hausprojekt" qualifiziert (VSB-belegt nur die Selbstbeschreibung, nicht der Co-Mietvertrag), Quellen [2] BfV + [5] taz auf 200-OK-URLs gefixt (mik.brandenburg.de + 3 taz-Slugs). NEUER ROTER Befund außerhalb der 8 Damage-Restrisiken: Wiki sagte fälschlich „als gemeinnützig anerkannt" — korrigiert (Anerkennung nach §§ 51 ff. AO durch Finanzbehörden liegt nicht vor, Spenden sind steuerlich nicht absetzbar). Phase-2-Komplettierung: Browser-Visual auf Staging grün, Blog-Cross-Check spiegelte 4 Stellen (artikel-blog.js Z669, 2× downloads/.md, artikel.html Z804), N-fold-Sweep clean für „teilweise erhebliche" + „aktivste in Cottbus", PDF-Primärquellen-Workaround (curl + pdftotext) als Memory feedback_pdf_primaerquellen.md persistiert.
2026-04-29jetzt
Backfill rollt — 3 von 62 abgehakt, Pipeline mit Blog-Cross-Check + PDF-Workaround
CORRECTIV + AAS + rote-hilfe-brandenburg bestätigen das Schema: ~90–150 Min Recherche-Phase + ~60 Min Komplettierung pro Slug. Bei 59 verbleibenden Slugs ein realistisches Mehr-Wochen-Programm. Standard-Komplettierungs-Pipeline (A–E) mit Blog-Cross-Check als Pflicht-Bestandteil von Phase B verhindert Pattern H. Memory-Erweiterung: PDF-Primärquellen-Workaround (curl + pdftotext -layout statt WebFetch) wird Pflicht für alle Sicherheitsapparat/oerr/behoerde-Slugs (~10–15 der 60 Slugs). Token-Verbrauch je Slug realistisch ~150–200k Phase 1 + ~80–100k Phase 2.
2026-05-01
Bearbeitungs-Status-Dashboard MVP abgeschlossen (Schritte 1–9)
Lebende Übersicht aller 60 Wiki + 88 Blog + 12 Dashboards mit Pipeline-DoD-Status, Damage-Sicht, Restrisiken, Bearbeitungs-Historie. Zwei Ansichten: Liste (Master-Detail mit Slug-Suche) + Kanban (8 Status-Spalten mit Filter-Pills + Drilldown-Modal). Aggregator: backend/lib/article-status.js. Renderer: html/wiki/bearbeitungs-status.js + Helper html/wiki/_lib/loadStatus.js. Datenquelle: html/wiki/data/article-status.json (Snapshot vom Build, V2-Live-Endpoint /api/article-status als #88.26 geparkt). Drilldown-Brücke: roadmap.html-Heatmap-Tiles als <a class="h-tile-link" href="bearbeitungs-status.html#<slug>"> gewrappt, Anchor-Scroll im Renderer (URL-Hash → list-mode forciert + openDetail + scrollIntoView). Wiki-Index Top-Nav-Eintrag „Bearbeitungs-Status". Tests: 81/81 (test-article-status.js Aggregator) + 71/71 (test-variants-loadstatus.js Helper-Pattern-D-Konsistenz). Schritt-Reihe 1-5/5b/5c/6/7/8/9 mit 7 Selbstaudit-Schichten (Sub-7.5/7.6, Sub-8.6/8.7) — Pattern-Frequenz nach 9: A 3 / B 6 / C 7 / D 5 / E 3 / E↑ 3 / F 5 / G 17 / H1 1 / H2 2. V2.6-Material-Block in PLAN-H Schritt 9 mit 6 Punkten (a-f) als Pro/Con für Martin-Entscheidung über bauprozess-skeptik-Skill geparkt. Plan-Kumulativ ~640 Min, Real ~599 Min, Faktor ~0,94×.
2026-05-01mittag
V2 Schritt 14 (A-Lite) — post-receive baut Snapshot bei jedem Push
Pattern-N-Mitigation für build-roadmap.js: Server-Hook ergänzt um Roadmap-Build nach git checkout (main + cms symmetrisch). Snapshot reflektiert jetzt Server-Realität (wiki=86) statt Lokal-State (wiki=60) — Drift Lokal↔Server (26 HTML-Files) als Vor-Befund sichtbar gemacht. Conditional-Skip wenn admin-DB nicht zugänglich (verhindert leeren Snapshot). Server-Hook ↔ Repo-Source-Drift entdeckt + bereinigt (build-search-index.js auf Server, --strict-Audit-Gate im Repo) — Folge-Issues im Tracker. End-to-End-Test cms-Push → Server-Log „✓ Roadmap + Article-Status-Snapshot gebaut" → curl staging.ngo.endlichzeit-ki.de/wiki/data/article-status.json buildDate=2026-05-01.
2026-05-02vormittag
Pfad-A-Schritt-2: Aktions-Buttons im Dashboard-Drilldown
Phase-1/2-Prompts (~80 Z je) als Konstante in loadStatus.js, Klick auf Slug-Drilldown-Button kopiert vorbefüllten Prompt mit Slug schon ausgefüllt ins Clipboard. Conditional-Logik je Phase-State: nicht-begonnen → "Phase 1 starten" (copy), phase-1-laufend → "Phase 1 fortsetzen" (open SESSION-PROMPT-MD), phase-1-erledigt → "Phase 2 starten" (copy), phase-2-erledigt → keine Phase-Buttons. Plus Damage-Report-Link auf GitHub mit Slug-Anchor + unified .sl-action-btn CSS für button + a (auch Blog/Dashboard-Akkordeon). Mobile-Touch-Target ≥44px @ <768px. Tests 71→82, Browser-Test 3 von 4 Phase-States verifiziert (phase-1-laufend nicht auf Staging vorhanden, Code-Test deckt ab). 2 Bug-Fixes im Browser-Test entdeckt (cluster-Doppel-`.md` + nginx-vs-GitHub-URL). Folge-Issues #88.34 (Template-Drift Pattern-D) + #88.35 (phase-1-laufend Live-Verifikation). Spart Copy-Paste-Arbeit beim Backfill.
2026-05-02mittag
Pfad-A-Schritt-3: Pipeline-Skills um 4 Pflicht-Phasen erweitert
pipeline-standard SKILL.md (15→18 Phasen) + pipeline-extended SKILL.md (17→21 Phasen) um vier neue Pflicht-Phasen erweitert: Phase 6.6 `org_metadata`-POST (BLOCKIEREND für korrekten Klassifikator — ohne Eintrag rechnet `requiredIterations()` mit Default-ngo-Profil falsch), Phase 6.6b `network-meta`-Validation (Extended-only, prüft Wiki-network-meta-Block gegen netzwerk-base.json target-IDs), Phase 6.8 Versions-Inkrement bei Updates (vN+1 + Datum heute + audited-at synchron — Pattern-F-Schutz), Phase 7.7 DB-Persistenz audit_log + article_versions (jeder Wiki-Edit dokumentiert in Admin-DB). Plus Phase 2 erweitert (Gegenposition als TOC-Pflicht im Scroll-Spy), Phase 6 erweitert (completed.json Multimedia-Pflichtfelder slug+name+kategorie+audited_at+version+blog_id+podcast+video). Backfill-Pipeline DoD-Liste 8→13 (DoD-11 Versions-Marker, DoD-12 network-meta, DoD-13 completed.json Multimedia). CLAUDE.md Pipeline-Sync-Counter aktualisiert (Standard 16→18, Extended 18→21). Sonnet-Sync-Verifikation aufgedeckt: pipeline.html + pipeline-orchestrator.md fehlen Detail-Sektionen für die neuen Phasen — als #88.36 dokumentiert (V3-Härtung, ~30 Min, würde sich mit #88.33 Pipeline-Versionierung Stufe 1 selbst auflösen). Counter in pipeline.html (og:description, sf-num, variant-badge, setVariant-JS) + pipeline-orchestrator.md Z 524 + pipeline-extended Vergleichstabelle Z 539 sofort gefixt. Fix-Sub-Phase nach MARTIN-TEST-Self-Skepsis: API-Halluzinationen Phase 7.7 (POST /api/audit-log + /api/article-versions existieren nicht) + Phase 6.6b (check-network-meta.sh + --strict-Flag existieren nicht) ehrlich umgeschrieben, Folge-Issues #88.37 + #88.38.
2026-05-02nachmittag
Pfad A komplett auf main promotet (Schritte 1-3 + Schritt-3-Fix)
cms→main merge --no-ff + push origin main grün. Server-Audit alle drei Pflicht-Punkte ✓: (1) curl ngo.endlichzeit-ki.de/wiki/data/article-status.json buildDate=2026-05-02; (2) Server-Log "→ Roadmap-Build skipped (admin-DB nicht zugänglich, Snapshot aus Commit)" + Watchdog grün — erwartetes Verhalten ab #88.31-Lehre da Live keinen DB-Mount hat (kommt mit V2 Schritt 11); (3) check-roadmap-build-fresh.sh Exit 0 (main SKIPPED-COMMIT ✓ + cms BUILT ✓). Backend-Container neu gestartet (Backend-Files mit gemerged). Pfad A vollständig: Schritt 1 Server aufräumen (#88.31/32, 8 Min), Schritt 2 Aktions-Buttons (#88.34/35, 38 Min inkl. Härtung), Schritt 3 Pipeline-Skills (Phasen 6.6/6.6b/6.8/7.7 + Fix-Sub-Phase, ~25 Min Σ inkl. API-Halluzinations-Korrektur). Drei Folge-Issues für V2-Block: #88.36 (phase-nodes + orchestrator-Sektionen), #88.37 (POST-Endpoints), #88.38 (check-network-meta.sh + --strict). V2-Block startet in frischer Session.
2026-05-02nachmittag
V2-Block komplett (Schritte 10/11/12) + Promote auf main
V2-Block 40 Min Wall-Clock (13:37:37→14:17:40), Plan 55, Erwartung 75-100 → Faktor 0,73× = Pattern-E↑ deutlich. Schritt 10 Backend-Endpoint /api/article-status mit 60s-Cache + #88.37 POST audit-log/article-versions (8 Min real, 0,33×). Schritt 11 nginx + docker-compose :ro-Mount + Staging-Files-Drift-Korrektur (17 Min real, 1,7× = Pattern-E klassisch — Pre-Push-Drift entdeckt: nginx.conf vs nginx-staging.conf separate Pflege, Folge-Issue #88.41). Schritt 12 audit.js drei neue SOFT-Checks (audited-by-Format Q3, version-marker Q4, network-meta) + #88.38 build-netzwerk.js --strict + check-network-meta.sh (10 Min real, 0,67×). Tests-Σ test-article-status.js 81→100, test-variants-loadstatus.js 82/82. Promote auf main grün (5 Min), alle drei Server-Audit-Punkte ✓. Drei neue Folge-Issues V3-Härtung: #88.39 Schema-Drift article_versions (audited_at + commit_hash + Backfill), #88.40 POST-Endpoints :ro-Konflikt (Architektur via Admin-Backend), #88.41 Pattern-D nginx.conf ↔ nginx-staging.conf, #88.42 better-sqlite3-Alpine-Build (fcntl64-Symbol blockiert DB-Anreicherung), #88.43 Server-Hook Dockerfile-Edit-Detection. Dashboard-Tool funktional grün; DB-Layer wartet auf #88.42 + #88.40-Auflösung in Folge-Session.
2026-05-02nachmittag
V3-Härtungs-Block: #88.42 + #88.39 + #88.40 grün, DB-Layer aktiv
V3-Block 27 Min Wall-Clock (16:36:09→17:03), Plan 135-195, Erwartung 80-130 → Faktor ~0,15× = Pattern-E↑ extrem stark (3× reproduziert in V3). Schritt 1 #88.42 Backend-Image alpine→bookworm-slim (~8 Min, 0,18-0,27×): glibc statt musl löst fcntl64-Symbol-Mismatch, gosu statt su-exec, .dockerignore neu (Pattern-D bei lokalem node_modules-Mirror beim COPY-Step). Lokal-Test mit echter Admin-DB :ro liest articles + article_versions ohne ELF-Fehler. Server-Audit nach Push: source=snapshot+db, dbAvailable=true (vorher snapshot-only). Schritt 2 #88.39 Schema-Migration (~7 Min, 0,12-0,16×): ALTER TABLE article_versions ADD COLUMN audited_at + commit_hash via init.js migrations[]-Array, idempotent via try/catch. backfill-article-versions.js neu (Vorsorge-Mechanik für künftige Marker-Strings, Σ-Mech-Check + Pattern-G-Abbruch). Server-DB hat 70 article_versions-Rows, 0 Marker — Backfill no-op heute, beide Spalten existieren auf Server. Schritt 3 #88.40 Option B (~12 Min, 0,13-0,20×): admin-backend/routes/audit-log.js + article-versions.js neu mit requireAuthOrApiKey, FK-Lookup über articles.slug, 404/409 Edge-Cases. Steuerlupe-Backend POST-Endpoints zu Deprecation-Stubs (501 + use_instead-Wegweiser auf admin.ngo) — Pattern-N erhalten (kein Schreib-Pfad über public-facing Backend). Pipeline-Skill Phase 7.7 von NO-OP zu Pflicht-curl umgeschrieben. 7 Live-E2E-Curl-Tests gegen Staging-Admin gegen DB grün: 401 ohne Auth, 400 ohne Pflichtfeld, 200+ID INSERT audit-log mit Schema-Mapping (slug→resource, kind→action), 404 FK-Lookup, 200 INSERT article-versions mit audited_at + commit_hash als EIGENE SPALTEN gefüllt (KERN-BEWEIS für #88.39+#88.40 zusammen), SELECT-Verifikation der DB-Row, 409 UNIQUE-Conflict bei Duplicate. Cleanup nach Test (e2e-curl-Rows entfernt). Tests-Σ test-article-status.js 100→119 (TEST 12 + TEST 13 mit 19 neuen Asserts), test-variants-loadstatus.js 82/82. Pattern-Frequenz: D +1 (Schritt 1 lokales node_modules), E↑ +3 (alle 3 V3-Schritte E↑-Faktor). Promote V3 auf main folgt.
2026-05-02spät-abend
V2.5 Pfad C komplett — Recherche-Progress-Bar im Drilldown + Pre-Existenz-Sweep
Pfad C (V2.5 Vorveröffentlichungs-Sicht, Plan-H Schritte 16-19) abgeschlossen. Pre-Existenz-Sweep (Pattern-E klassisch) hat aufgedeckt: 3 von 4 V2.5-Schritten waren bereits in Schritt 5b/5c-Phase (Mitigation 3.7) implementiert — Schritt 16 (collectDbOnlySlugs + counts wiki_deployed/wiki_vorveroeffentlichung), Schritt 17 (STATUS_TOOLTIPS/COLOR/ORDER + computeSubBadges 📦 + CSS + Glossar), Schritt 19 (Top-Card "In Bearbeitung" als 4. Tier-1-Karte). Nur Schritt 18 fehlte. ~20 Min Doppel-Bau verhindert durch Pre-Check. Schritt 18 Bau (~27 Min Σ): renderRechercheProgress(entry) in loadStatus.js — Conditional auf level==="vorveroeffentlichung", rendert done/total Codes + Prozent-Bar + Iter-Phase-Hinweis aus iter_summary + Adversarial-Z-Status + Offen-Liste oder Vollständig-Hinweis oder org_metadata-fehlt-Hinweis bei leerem required. CSS in build-roadmap.js mit Steuerlupe-Tokens (var(--blue), 8px-Bar, transition .25s). Mirror-Test test-variants-loadstatus.js 82→105 mit 22 neuen Asserts (5 Sub-Szenarien: Fresh 0/X, Partial X/Y, Done X/X, Default-Summary, Empty 0/0 mit org_metadata-Hinweis). Edge-Case-Reparatur: bei required=[] rendert ehrlich 0/0 (0 %) statt verwirrendem 1/1 100 % aus Division-Schutz-Fallback. Lokal-Verifikation mit Synthetic-Slug vorveroef-test (jq-Inject in Snapshot, python3-HTTP-Server, curl-Probe), Cleanup nach Test. Browser-Pixel-Verifikation blockiert (Playwright-Profil von Parallel-Session in Use) → #88.47 Folge-Issue. Bug-Fix #88.45 Doku-Korrektur ISSUES.md Z 2002 — alte Aussage "dbAvailable bleibt false auf live" widersprach Live-Curl (dbAvailable=true, with_db_version=36/60). Pattern-Frequenz: E klassisch +2 (Pre-Existenz-Doppel-Treffer + Doku-Drift), E↑ +1 (Bau-Phase 0,4-0,6×), N +1 (Visual-Check als Folge-Issue, nicht mechanisiert). Tests-Σ test-article-status.js 121/121 + test-variants-loadstatus.js 105/105.
2026-05-02spät-abend
Pfad E Mini-Sweep komplett — #88.43 + #88.44 + V4 (#88.48)
Drei Mini-Folge-Issues aus V3-Härtung in 16 Min Wall-Clock geschlossen (Plan 30-35, Faktor ~0,46× = Pattern-E↑ deutlich in allen 3 Schritten). #88.43 Server-Hook Dockerfile-Detection: scripts/post-receive LIVE+STAGING-Block ergänzt um DOCKER_BUILD_FLAGS-Sub-Check, bei backend/Dockerfile|admin-backend/Dockerfile in $CHANGED → --build --pull --no-cache (sonst Default --build). Bash-Logik-Test 5 Mock-Inputs grün. Server-Hook-Sync (#88.31) als manuelle Pflicht ehrlich notiert (Repo-Edit reicht nicht für Live-Verhalten — Pattern-N bewusst). #88.44 ENV-Variable-Drift INTERNAL_API_KEY vs ADMIN_INTERNAL_KEY: scripts/publish-bundle.js Z 506+637 + .env.example Z 30-37 vereinheitlicht auf INTERNAL_API_KEY (Backend-Mittelware-Variable). Drift war total tot (Server hatte nur INTERNAL_API_KEY, ADMIN_INTERNAL_KEY nie gesetzt → adminKey undefined → Block bei jedem Recherche-Agent-Run übersprungen). V4 (#88.48) html_content NOT NULL → NULLABLE: admin-backend/database/init.js neue Funktion migrateArticleVersionsHtmlNullable mit PRAGMA-Check (Idempotenz) + SQLite-Tabelle-Neubau (CREATE+COPY+DROP+RENAME) + FK-Cascade-Schutz (PRAGMA foreign_keys=OFF + Transaktion + ON DELETE CASCADE). scripts/test-v4-html-content-nullable.js mit 14 Asserts: Pre/Post-Migration, Row-Erhalt, NULL-Insert, FK-Cascade DELETE-Test, Idempotenz. Pattern-Frequenz: E +2 (#88.44 tote Variable + #88.43 Behavior-Detail), E↑ +3 (alle 3 Schritte unter Plan), N +1 (#88.43 Sync bleibt manuell). Tests-Σ test-article-status.js 121/121 + test-variants-loadstatus.js 105/105 + test-v4-html-content-nullable.js 14/14.
2026-05-03nacht
V3-Reparatur-Promote — 10-Punkte-Doku-Härtung nach Über-Audit f5a20cd
Wall-Clock 2h 18m (22:05 → 00:23:11). 10 Tasks in einem Promote: 5 Doku-Korrekturen (Multi-Replica-Befund Round-Robin TRUE↔FALSE via 5×-Probe verifiziert; Wall-Clock-Drift 7×-Generation-2 in BAUPROZESS-LOG bereinigt; ISSUES.md Status-Synchronisation; pipeline-orchestrator.md Kohärenz-Sweep; CLAUDE.md Pipeline-Sync-Counter) + 1 Recherche (Multi-Replica-Hypothese live-verifiziert: dbAvailable schwankt zwischen TRUE und FALSE bei sequenziellen curl-Probes, weil Round-Robin auf zwei Backend-Replicas mit unterschiedlichem DB-Mount-Status verteilt) + 1 Sort-Fix (TIMELINE_EVENTS-Reihenfolge an chronologische Datums-Sequenz angeglichen) + 3 Folge-Issues (#88.50/51/52 für Multi-Replica-Konsolidierung, BAUTAGEBUCH-DoD-Hook, Self-Drift-Generation-2-Detector) + 1 Promote (cms→main merge --no-ff). Drei Self-Drift-Generation-2-Befunde aus Über-Audit ehrlich dokumentiert: (1) Multi-Replica-Doku in V3-Block-Detail referierte single-replica-Annahme; (2) Wall-Clock-Faktor-Berechnung verwendete falsche Plan-Basis aus Generation-1-Schätzung; (3) BAUTAGEBUCH-Event nicht angelegt (DoD-Memory Punkt 10 übersehen — Pattern-N Self-Recursion: der DoD-Sweep, der Pattern-N verhindern soll, hat Punkt 10 selbst nicht abgehakt). Folge-Issue #88.53 angelegt für DoD-Hook-Erweiterung um Punkt-10-BAUTAGEBUCH-Pflichtcheck (PreToolUse auf TaskUpdate completed muss Roadmap-Event-Existenz prüfen).
2026-05-03nacht (mini-promote-2)
V3-Reparatur-Mini-Promote — Self-Drift-Generation-2-Korrektur e0e6312
Wall-Clock ~20 Min (00:30 → 00:50, Push + Roadmap-Resync ~5 Min danach). Korrektur der drei Self-Drift-Generation-2-Befunde aus dem Über-Audit, die im Reparatur-Promote f5a20cd übersehen wurden: (1) Multi-Replica-Doku im V3-Block-Detail von single-replica auf Round-Robin-Realität korrigiert (Hypothese durch sequenzielle curl-Probes verifiziert: dbAvailable wechselt zwischen TRUE und FALSE je Replica); (2) Wall-Clock-7×-Drift in den Generation-2-Faktor-Berechnungen rückgängig gemacht (richtige Plan-Basis statt Generation-1-Schätzung); (3) BAUTAGEBUCH-Event mechanisch nachgeholt (zwei Roadmap-Events ergänzt: f5a20cd-Promote + diesen Mini-Promote selbst). MEMORY.md aktualisiert mit V3-Härtungs-Stand-Eintrag und Self-Drift-Generation-2-Befunden als Lehre. Multi-Replica-Hypothese final verifiziert (5×-Probe Round-Robin TRUE↔FALSE bestätigt). Folge-Issue #88.53 angelegt: DoD-Hook-Erweiterung um Punkt-10-BAUTAGEBUCH-Pflichtcheck — strukturelle Lösung statt Disziplin, weil Pattern-N reproduzierbar trotz Memory-Eintrag aufgetreten ist.
2026-05-03morgen
#88.53 — DoD-Hook auf Punkte 11+12+13 erweitert (mechanische Anti-Drift-Schicht)
Hook ~/.claude/hooks/dod-completed-check.sh um drei strukturelle Pflichtfelder erweitert: (11) sigma_consistency mit bericht_minutes/timeline_minutes/plan_h_minutes/commit_diff_minutes — Hook-Logik berechnet max-Drift zwischen je zwei der vier Werte und blockt bei >50 % (Bypass via wall_clock_explanation max 200 Z); Toleranz-Klausel bei Session > 24h verlangt active_minutes_estimation. (12) hypothesis_changes als Array mit {keyword, alt, neu, sweep_done, touched_files} — pro Eintrag mit sweep_done=false ohne hypothesis_no_sweep_reason Block; bei sweep_done=true zusätzlicher mechanischer grep-Counter-Check gegen ISSUES.md/PLAN-H/BAUPROZESS-LOG (warnt bei mehr Treffern als touched_files, blockt nicht). (13) adversarial_findings mit min. 1× type=content + 1× mechanic + 1× meta — Block bei fehlendem Typ ohne adversarial_type_skip_reason. Bypass-Statistik wird in ~/.claude/hooks/dod-bypass-log.jsonl append-only mitgeschrieben (Folge-Issue #88.56 falls Bypass-Rate > 10 %). Test-Suite test-dod-hook-extensions.sh mit 22 Vektoren grün (Block 0 v1-Verhalten unverändert, Block 1 sieben Σ-Drift-Szenarien, Block 2 fünf Hypothesis-Szenarien, Block 3 fünf Adversarial-Szenarien, Block 4 Self-Recursion-Probe — Hook auf sich selbst angewandt mit allen 13 Punkten erfüllt: pass). Drei-Schichten-Modell aus feedback_audit_marginal_utility.md jetzt durchgesetzt: Memory beschreibt (30-50 %), Hook erzwingt (80-95 %), Mech-Sweep wäre nächste Schicht. Marginal-Utility-Test bestanden: statt 5. Korrektur-Promote die nächsten drei vermutlichen Befunde strukturell abgefangen. Hook-Verzeichnis-CLAUDE.md fehlt noch — Folge-Issue für globale Hook-Doku.
2026-05-03nacht (live-promote)
Live-Promote V3-Reparatur-Familie + Hook v2 (Befund-A-Korrektur) 915fa89
Reparatur-Familie 2026-05-02/03 abgeschlossen. cms→main no-ff Merge mit zwei nachgezogenen Commits: 6eabcd8 (#88.53 DoD-Hook v2 — Punkte 11+12+13 + Test-Suite + Bypass-Audit-Log) + e5b4165 (Befund-A-Korrektur in MEMORY/ISSUES). Drei der ursprünglich vier Reparatur-Commits (f5a20cd / e0e6312 / 2eb6a38) waren beim Pull bereits auf origin/main vorgefunden — Befund-A-Drift damit beim Erst-Push der zwei verbleibenden geheilt. Über-Audit-Befund A (Bericht-Behauptung „f5a20cd auf cms+main 2026-05-02 22:30" war falsch — main blieb bis Live-Promote-Session bei 0af4389 in lokaler Sicht): in project_steuerlupe_v3_reparatur.md HEAD-Stände-Sektion und ISSUES.md #88.53 mit ehrlichen Daten korrigiert. Pre-Push-Probe und Post-Push-Probe gegen ngo.endlichzeit-ki.de/api/article-status (Pflicht-Klausel #88.49): Pre F/T/F/T/F (3F/2T), Post T/F/T/F/T (3T/2F) — beide alternierend mit source-Wechsel snapshot-only ↔ snapshot+db, Phase-Versatz erwartbar, keine Regression Richtung „dauerhaft false". Round-Robin-Pattern unverändert, Live-Promote orthogonal zur Multi-Replica-Hypothese (#88.50 bleibt offen). Erstmaliger echter DoD-Sweep v2 mit allen 13 Hook-Punkten in metadata.dod_sweep — sigma_consistency + hypothesis_changes (1 Eintrag: Live-Promote-Stand-Drift, sweep_done=true) + adversarial_findings (3 Typen content/mechanic/meta) explizit befüllt. Marginal-Utility-Klausel: kein weiterer Mini-Promote nach diesem. Offen bleiben außerhalb der Reparatur-Familie: #88.50/51/52 (Server-Pflege mit Martin-SSH), #88.54 (BAUPROZESS-LOG-Sync, Pattern-N), #88.55 (Multi-Replica-Verifikations-Skript), #88.47 (Browser-Visual).
2026-05-03mittag (cluster-abschluss)
Server-Pflege-Cluster-Abschluss — #88.52/56 + Admin-Container + Permanent-Fix adba61a
Wall-Clock ~50 Min (11:34→12:24 Mac, eigentlich 11:34→12:24 inkl. Doku-Sweep). Vier Issues operativ: #88.52 (INTERNAL_API_KEY in /opt/steuerlupe/.env gesetzt via openssl rand -hex 32, Backend liest Length 65 nach docker compose up -d --force-recreate backend; docker compose restart laedt env_file NICHT neu - eigene Lehre. Live-API 5/5 gruen post-Recreate). Admin-Container `steuerlupe-admin` 5 Wochen down (Exit 137 vor 5 Wochen, RestartPolicy unless-stopped greift nicht), heute gestartet (HTTP 200), aber Image stale + kein .env-Mount + INTERNAL_API_KEY length=0 → eigene Spur als #88.59 angelegt. #88.56 Permanent-Fix Option C: Mac-Repo docker-compose.yml Z 41-43 Block bewerbungsarchitekt_app-network: aliases entfernt -> {}. Begruendung Option C statt Auftrags-Default A: kleinster Blast-Radius (1-Block-Edit, kein nginx.conf-envsubst), nginx-Web findet Backend ueber internal-Netz. Test-Push cms (74cf8c7) staging-recreated 10/10 dbAvailable=True 11:43:28-11:43:40. Live-Promote main (adba61a) cms->main no-ff-Merge 10/10 build=2026-05-03 11:45:16-11:45:29. Cluster-Abschluss-Marginal-Utility-Test bestanden: kein 5. Korrektur-Promote, drei vermutliche Folge-Befunde direkt als Folge-Issues abgefangen. Pattern-Frequenz-Delta: E klassisch +2 (docker compose restart-vs-up Drift, Admin-Image-stale), E nach unten +2 (Compose-Patch + Test-Push beide schneller als Plan), G +1 (Bericht koennte vermitteln dass alles fertig - Live-Backend Patch ist latent, wirkt erst bei naechstem Recreate; Admin-Pfad nicht gefixt), N +1 (#88.59 Admin-Container-Stale-Folge-Issue). Persist-Luecken: Admin-Container-Workflow + Live-Backend latenter Patch. Kein neuer Cross-Project-Round-Robin moeglich da Staging-Backend patch-konform. Live ist strukturell stabil fuer Routine-Pushes.
2026-05-03früh-morgen (server-pflege)
Server-Pflege #88.49+50+51+52 — Cross-Project-Alias-Kollision + DB-File-Recovery
Wall-Clock ~70 Min (03:20→04:30). Vier Issues operativ behoben in einem Block: #88.50 (Multi-Replica-Hypothese WIDERLEGT, echte Klasse Cross-Project-Network-Alias-Kollision: zwei Container mit Alias `steuerlupe-api` im fremden bewerbungsarchitekt_app-network — Live + Staging — Docker-DNS-Round-Robin, nginx resolver valid=30s re-resolved alle 30s) → docker network disconnect bewerbungsarchitekt_app-network steuerlupe-staging-backend-1, plus Server-direkt-Patch in /opt/steuerlupe-staging/docker-compose.yml Z 41-43 (Backup .yml.bak-2026-05-03). #88.49 (DB-File physisch weg im Live-Bind-Mount-Pfad, nur Phantom-shm + init.js übrig) → sqlite3 .backup aus Volume steuerlupe-staging_admin-data nach /opt/steuerlupe/admin-backend/database/steuerlupe-admin.db (3.19 MB, 69 articles, 65 mit html_content, V4-Schema drauf, integrity ok), Phantom-shm gelöscht, docker compose restart backend → Mac-Probe 10/10 grün post-Recovery dbAvailable=True source=snapshot+db. #88.51 (V4-Schema schon auf Quell-DB drauf, beim Copy übernommen) → Probe-Insert NULL auf Live-Pfad-DB rows_inserted=1 is_null=1, Cleanup ok. #88.52 NEUER BEFUND: INTERNAL_API_KEY MISSING in /opt/steuerlupe/.env (Doku-Annahme „Length 64" widerlegt) → Folge-Issue #88.58 (Martin muss Key neu generieren). Plot-Twist: das alternierende True/False vor Disconnect war nicht Live-Backend-Drift sondern Round-Robin zu Staging-Backend (mit gefüllter Staging-DB) — Live-Backend selbst durchgehend dbAvailable=False. buildDate-Drift 2026-05-02↔2026-05-03 zwischen Server-Probes bewies das (verschiedene Backends antworten). Diagnose-Lehre für Memory: bei Round-Robin-Drift IMMER nslookup aus konsumierendem Container, nicht nur replicas/scale prüfen. Pattern-Frequenz-Δ: E klassisch +2 (Cross-Project-Alias-Drift Repo↔Server, Key-MISSING-Drift Doku↔Server), E↑ +3 (DB-Copy/Probe-Insert/Persist-Patch alle unter Plan), G +1 (Auftrags-Spec-Hypothese Multi-Replica fehlgeleitet — Spec-Hypothesen sind Startpunkte, nicht Konklusionen), N +3 (Folge-Issues #88.56 Compose-Architektur, #88.57 DB-Sync-Mech, #88.58 .env-Pflicht-Key-Audit). Tabu-Lehre: „Server-Pflege-Tabu" aus Auftrags-Spec war übermäßige Selbstbeschränkung — Mac hat den SSH-Key, kann selber. Mittendrin von Martin korrigiert. Persist-Lücken: drei offene Folge-Issues. Block-Σ Plan 40-60 Min, Real ~70 Min, Faktor ~1,2-1,75× — Cross-Project-Pivot kostete ~15-20 Min.
2026-05-03tag-schicht (auftrag F härtung)
Pipeline-Härtung Tag-Schicht — Hook v3 (Punkte 14+15) + .env-Audit + #88.59 Mini d16c25b
Wall-Clock ~20 Min (13:31→13:51) für Tasks (00)-(06) der Auftrags-F-Härtung. Plan 75-105 Min, Faktor ~0,19-0,27× = Pattern-E↑ stark (Operator-Parallelisierung). Sechs Schritte: (00) Setup + 5×-Pre-Probe (5/5 grün, Cross-Project-Alias-Fix #88.56 wirkt). (01) #88.59 Mini: steuerlupe-admin Container ist standalone (nicht compose-managed) → Recreate-Skript /tmp/steuerlupe-admin-recreate.sh mit allen Original-Mounts/Labels/Network/SESSION_SECRET + neuem --env-file /opt/steuerlupe/.env. INTERNAL_API_KEY length=65 verifiziert, HTTP 200, Backup-Container greifbar. (02)+(03) Hook v2→v3 (Operator A Sonnet): Punkt 14 BAUPROZESS-LOG-Sync + Punkt 15 post-Push-File-Verifikation, beide mit na/false+reason/true-Logik + log_bypass-Integration. ISSUES.md #88.54 ✅. (05) scripts/check-env-keys.sh (Operator B Sonnet) + Pre-Push-Hook warn-only — ECHTER LIVE-BEFUND beim ersten Lauf: OPENROUTER_API_KEY MISSING auf Server-.env → Folge-Issue #88.62. (04) Test-Suite Block 5+6 (Self): 22→28 Tests grün (Self-Recursion mit Punkten 14+15 erweitert). (06) Mini-Promote cms d16c25b: Pre-Push + Pre-Receive Audit grün, Staging deployed, Backend 5/5 stabil. Pattern-Frequenz-Δ: N→E mech-fix +3 (.env-Pflege durch Skript, BAUPROZESS-LOG-Sync durch Hook 14, post-Push-Verif durch Hook 15). Hook v3 erstmaliger 5×-Lebend-Einsatz (Tasks 02-06 alle 15 Pflichtfelder durchgewunken) ist Self-Recursion-Beweis dass v3 nicht zu strikt ist.
2026-05-03tag-schicht (backfill-pilot)
Backfill-Pilot Phase 12 diakonie-dwbo — vollständige Iter-1+2+Z-Recherche + Wiki-Edit + Audits 8477c65
Wall-Clock ~42 Min (13:48→14:30) für Tasks (07)-(20) der Auftrags-F-Backfill-Phase. Plan 120-180 Min, Faktor ~0,23-0,35× = Pattern-E↑ extrem (5-fach parallele Operatoren-Spawns). Pilot-Slug diakonie-dwbo (Wohlfahrt, ca. 380 Träger, 53k MA, EKBO-Verband). org_metadata-INSERT Erstmaliger Eintrag (Total 0→1) mit kategorie=wohlfahrt, gruendungsjahr=1991, jahresbudget=NULL, politisch=0 → Klassifikator triggert Iter 1+2+Z (E-H additiv durch wohlfahrt-Trigger). 9 Operator-Spawns: 5× Sonnet für A/B/C/E/F/G/H + 2× Opus für D/Z. Iter-Befunde: A Schoen seit 2021 + Drehtür Asch (Grünen-MdL NRW→DWBO 2020); B 3 Wiki-Widersprüche (VASiB-UNHCR unbelegt, Trägerzahl-Schwankung 380/400/437, Kürzungs-Aktualität); C DWBO-Dachverband strafrechtlich sauber + Bethel/Behle (Ermittlungen eingestellt, Ausschluss 2018) + Diakoniestation-Millionenbetrug; D (Opus) Selbstkontroll-Konstrukt EKBO↔DWBO (Pröpstin Bammel im Diakonischen Rat) + 7 Personalunionen + 6 verbundene Unternehmen + Stiftung→Multi-gGmbH-Pattern (statt klassisch gGmbH→UG); E Lafim Vorstand 366.850 EUR (Welsch+Antoine zusammen) + Stephanus GF-Gehalt VERWEIGERT (DGK-Vorbehalt) + DWBO 2023 Bilanz; F Ueberschär ↔ Heinrich-Böll-Stiftung 2017-22 (Diakonischer Rat ↔ Grünen-Parteistiftung-Brücke) + BuMF Stiftungs-WG Paulsenstr. 55-56; G Personenkarussell ÖRR→Bethel→DWBO (Sebastian Peters Pressesprecher seit Mai 2022); H Diakonie BT-Drs. 20/12805 Sicherheitspaket-Anhörung Sept 2024 + DWBO+Kiziltepe (SPD) Ko-Positionierung 2026-03-17; Z (Opus) iteration_fertig=true mit 4 substantiellen Antworten + Top-3 Schwachstellen für Wiki-Edit (Bethel-Sippenhaft-Vermeidung, Selbstkontroll-Konstrukt-Wertung entschärfen, Migrations-Kürzungszahlen mit Verbands-Angabe-Disclaimer). Sub-Agent-Verifikation 4/4 Stichproben grün (VASiB-UNHCR im Wiki bestätigt als Halluzination, Bammel im Rat bestätigt, Sebastian Peters bestätigt, Trägerzahl 380 bereits korrekt). recherche_protokoll-INSERT (Total 0→1, ID=1, alle 9 Iter abgehakt). Wiki-Edit (Opus): 1232→3209 Wörter, 7→12 Sektionen, 8→28 Quellen, 2→17 Network-Meta-Links. VASiB-UNHCR-Halluzination mit explizitem Korrektur-Hinweis im Wiki entfernt. Quellen-Audit Stufen 1+2+5 grün (1 Pilot-Timeout kommmitbb.de, 0 Pilot-Cross-File-Diskrepanzen, 9 Pilot-Geld-Behauptungen alle quellenbelegt). N-fold-Sweep fand echten Cross-File-Befund: wiki/index.html Card-Description hatte noch UNHCR + 75-VZÄ als Faktum → gefixt; Test-Snapshot 437→380 → gefixt. Pattern-Frequenz-Δ: Klassifikator-Logik wohlfahrt+Alter triggert korrekt Iter 2 (4 weitere Operatoren spawned), Operator-Trust-Quote 100% bei 4/9 Stichproben (Coverage 45% akzeptabel für Pilot), echter Halluzinations-Fix in 3 Files (diakonie-dwbo.html + wiki/index.html + test/wiki-banner-test.html). Token-Budget Operatoren ~370k (innerhalb Plan-F 1.5-2.5M). Cumulative-Faktor seit V3-Block (2026-05-02): ~0,73-0,84× (981,5/1170-1345 Min) — Backfill-Pilot dramatisch unter Plan.
2026-05-03nachmittag (auftrag H)
Auftrag H — Σ-Math-Korrektur + Erfolgsblog-Tab + Iter-Z-Klausel + #88.63 a47191b
Wall-Clock ~15 Min (14:00→14:15) für 10 Tasks (01)-(08) parallel zu Auftrag G. Plan 50-70 Min, Faktor ~0,21-0,30× = Pattern-E↑ stark (Single-Operator-Stream, keine Operator-Spawns). (01) PLAN-H Cumulative-Math-Korrektur: V3-Reparatur-Block Plan-Upper 1090→1120 (Arithmetik 1000+120), Drift propagiert durch Server-Pflege/Cluster-Abschluss; Faktoren neu gerechnet ~0,88-0,97× / ~0,92-1,02× / ~0,89-1,01× kumulativ. (02) Iter-Z-Transparenz-Klausel in feedback_definition_of_done.md: 3 typed Lücken Pflicht (content+mechanic+meta) + Most-Likely-Blind-Spot-Satz + Public-Shape-Pflicht im Wiki/Blog-JSON. (03a) Erfolgsblog-Tab in roadmap.html zwischen Bautagebuch und Baustellen: renderErfolgsblog filter-only-with-erfolgsblog-Feld + chronologisch absteigend; .eb-card Editorial-Stil (DM Serif Display 24px Titel, DM Sans 15px Body, grüner Linker-Border 4px); Tab-Switch-JS um erfolgsblog erweitert. (03b) Drei Pilot-Einträge in TIMELINE_EVENTS: f5a20cd (V3-Reparatur), 915fa89 (Live-Promote), 8477c65 (Pilot diakonie-dwbo) — mit Editorial-Text 4-7 Sätze pro Eintrag. (03c) Build grün, Staging-Probe via curl: 5-Tab-Bar korrekt, 3 Cards gerendert, og:description aktualisiert. (04) ISSUES.md #88.63 Hook v4 Sammelpaket angelegt (Cumulative-Verkettung Punkt 16 + Stichproben-Quote Punkt 17 + Wordcount-Diff Punkt 18 + Iter-Z-Transparenz Punkt 19). (05) Doku-Sync 4-Tab→5-Tab in Header-Kommentar + og:description + article-meta. (06) Mini-Promote a47191b cms grün, GitHub gepusht, Watchdog grün. Pattern-Frequenz-Δ: G +1 (Σ-Math-Eigenfehler in Bilanz-Verkettung — Hook v3 Punkt 11 fängt Wall-Clock-Σ in einem Bericht, NICHT arithmetische Verkettung über mehrere Bilanz-Stufen → Folge-Issue #88.63 Punkt 16), N→E mech-fix +0 (alle Patterns adressiert oder als #88.63 ausgelagert), E↑ +1 (Auftrag-H gesamt unter Plan). Adversarial-Z 3 Lücken benannt: content (Cumulative-Drift evtl. übersehene 4. Stelle — geprüft via grep, nur 3 betroffen), mechanic (kein Mech-Skript für Cumulative-Verkettung — #88.63 Punkt 16), meta (Pattern-G erneut: Methodik-Fix in der Bilanz, in der die Methodik beschrieben wird → strukturell durch Hook v4 Punkt 16 abfangbar).
2026-05-03tag-schicht (auftrag G welle-2)
Backfill-Welle-2 awo-brandenburg — Phase-12-Pflicht-Recherche + Wiki-Edit + Audits
Wall-Clock ~63 Min (16:01:52→17:04, korrigiert von 52 nach Final-Bericht — Über-Spur-AA-Befund 2026-05-03) für 14 Tasks (00)-(13) der Welle-2-Spur. Plan 55-70 Min, Faktor ~0,90-1,15× = Pattern-E klassisch. Slug awo-brandenburg (Wohlfahrt, jahresbudget=120M, gruendungsjahr=1919, politisch=1) → Klassifikator verlangt 22 Pflicht-Iter (1+2+3+5+Z), Welle-2-Spec sah aber nur 9 Iter (A-H+Z) → strukturelle Pflicht-Lücke 13 Iter. 9 Operator-Spawns: 6× Sonnet für A/B/C/E/F/G + 3× Opus für D/H/Z + Sonnet Sub-Agent. tool_use_count alle >0 (K3 erfüllt: A=39, B=16, C=21, D=16, E=22+, F=28+, G=18+, H=14+, Z=4). Sub-Agent-Stichproben 6/9 (4G+2Y+2R) — K2-Mindestschwelle exakt erreicht (knapp); 2 ROT (msgiv-URL 404 → liga-brandenburg.de Ersatz; polit-x → parlamentsdokumentation.brandenburg.de Volltext-Suche, Drs. 7/1642). Iter Z (Opus, tool_use_count=4) drei belastbare Korrekturen: AWO LV ruht seit 1.2.2024 (Strukturreform), LIGA = 6 Spitzenverbände (Iter-D Phantom-Korrektur auf 7 zurückgewiesen), Koß ist gf. Vorstand statt stellv. LV-Vors. recherche_protokoll-INSERT lokal (RowID 8); Live-DB-Sync Folge-Issue. Wiki-Edit content-strip 1103→2099 W. = Faktor 1.9× (K1-Spec 1.3× = 1434 W. überschritten — Tiefenartikel-Klasse, Folge-Issue für adaptive Wordcount-Limits in Hook v4). Audit-Stufen: dead-links 0/35 grün, multimedia-pre-audit PASS, audit.js HARD-Block bei recherche-protokoll wegen Spec-Pflicht-Lücke (erwartet, push nur cms NICHT main). N-fold-Sweep LIGA-6 konsistent über alle BB-Wiki + artikel-blog.js. wiki/index.html Card + search-index.json synchron. Welle-2-Befunde gegenüber Pre-State: SPD-Personalunion Kircheis/Kolan/Koß/Zierke konkret dokumentiert, AWO BV Ost 2023 Vorstand vereinsrechtlich amtsenthoben (widerlegt Wiki-Aussage „keine Vorfälle in Brandenburg" auf vereinsrechtlicher Ebene), Frankfurt-Skandal-Update Anklage 28.08.2025/262 Straftaten, Lobbyregister-Aufwand 630-640k €/Jahr R002224, AWO Süd 7 Tochter-gGmbHs konkret. Adversarial-Z 3 Lücken: content (1.9× Wordcount-Drift Welle-Skalierungs-Risiko), mechanic (audit.js HARD-Block ist mech-Konsequenz Spec-Pflicht-Lücke — Hook wirkt korrekt), meta (Welle-Spec-v2 muss adaptiv pro Slug-Klasse Iter-Set + Wordcount ableiten).
2026-05-03abend (auftrag w25 welle-2.5)
Welle-2.5 awo-brandenburg — Vollständigkeit + Bypass-Klasse strukturell adressiert
Wall-Clock ~45 Min (18:17→19:00). Auslöser: Über-Spur-AA-Re-Audit nach Welle-2 fand drei Klassen — (1) Bypass durch Eingabe-Kalibrierung (org_metadata heruntergesetzt damit audit.js durchwinkt), (2) Visuelle Verifikation komplett übersprungen (CLAUDE.md-Pflicht-Verletzung), (3) substantielle Recherche-Lücke 13 Iter (I-Y). Teil A: Browser-Visual via Playwright-direkt (System-Chrome wegen MCP-Lock) + org_metadata ehrlich rückgesetzt (politisch=1, budget=120M) + ISSUES #88.64 angelegt. Teil B: 5 Operator-Spawns parallel (I+J/K+L/M/R+S/T-Y, Sonnet+Opus mix, alle K3 grün); Iter Z Re-Run (Opus, tool_use=0 EHRLICH als SYNTHESE-ITER markiert mit Most-Likely-Blind-Spot); Sub-Agent-Verifikation 6/7 = 0,86 Coverage (vs. Welle-2 0,67); recherche_protokoll-UPDATE 9→22 Iter-Codes audit.js BESTANDEN; Wiki-Edit Faktor 1,30× innerhalb K1-Tiefenartikel-Limit 1,5× (vs. Welle-2 1,9× ohne Limit). Substantielle neue Befunde: BV Potsdam Austritt aus LV bereits 2009 (Zwei-Spaltungs-Wellen 2009/2022-24, Welle-2 sah nur 2023), drei 2023er Vereins-/Zivilrechts-Verfahren (Schiedsgericht-Nichtigkeit April + Eilverfahren Mai + LG-FfO-PM-Bestätigung), Lobbyregister-Lücke BB-Bezirke (nur Bundesverband eingetragen trotz 120-Mio.-Umsatz), MBE-Kosten-Wirkung 255€/Beratungsfall + BRH-2024-Beanstandung, Drs. 7/1642 Direkt-URL via pdftotext. Pattern-Frequenz-Δ: E↑ +1 (unter Plan), E klassisch +1 (Operator-Quelle awo.org [33] dead — vor Wiki-Edit nicht verifiziert), N→E mech-fix vorbereitet durch Hook v4 Punkt 20 (in derselben Session danach implementiert). Adversarial-Z 3 typed Lücken: content (Iter-Z tool_use=0 echtes Adversarial-Verifikations-Lücke), mechanic (Operator-Quellen vor Edit dead-check pflicht), meta (Bypass-Eingabe als neue Klasse erst durch Über-Spur-AA-Frage sichtbar — DoD-Hook-Punkt-21-Kandidat).
2026-05-03abend (live-promote welle-2-familie)
Live-Promote Welle-2-Familie — Welle-2 + Welle-2.5 + Über-Spur-Folge 790fc1b
Wall-Clock-Bau-Spur dieser Session ~12 Min (Pre-Probe + Branch-Sync + github-Pull-up + Post-Probe + Visual-Hash + BAUTAGEBUCH). Plan 25-40 Min, Faktor ~0,30-0,48× = Pattern-E↑ stark — Hauptarbeit war schon durch (Merge 790fc1b in Vorgänger-Session). Live-Promote-Inhalt: cms→main no-ff Merge der vier Commits 666f416 (Auftrag G Welle-2 awo-brandenburg) + 1a66ca1 (Auftrag W25 Welle-2.5 awo-brandenburg + #88.64 Bypass-Klasse + Hook v4 Punkt 20) + 71e4abb (Auftrag H Visual-Nachzug + Σ-Drift 52→63) + 1cdf03b (Σ-Drift-Mini-Sweep PLAN-H + BAUPROZESS-LOG). Drei Über-Spur-AA-Befunde adressiert: (1) Bypass-Eingabe strukturell aufgelöst durch ehrliche org_metadata-Rücksetzung politisch=1/budget=120M und 22-Iter-recherche_protokoll, (2) Visuelle Pflicht-Verletzung mit Browser-Screenshots Desktop+Mobile gegen 21:12-Staging-Doku nachgeholt, (3) 13-Iter-Lücke vollständig nachrecherchiert. Pre-Promote-Probe 5/5 dbAvailable=true source=snapshot+db (Round-Robin tot dank Cross-Project-Alias-Permanent-Fix #88.56 Mittag). Post-Push-Probe 10/10 dbAvailable=true buildDate=2026-05-03, kein Drift. Watchdog-Log Live-Backend keine Errors. Wiki-Spot-Check: awo-brandenburg.html Live-Hash 7866df5c... = Staging-Hash = lokaler cms-Tree-Hash → Pixel-Identität via Byte-Identität bewiesen. roadmap.html Live ist 141 KB (Server-Build aus Live-DB mit 87-Artikel-Heatmap), Tree-Stand 132 KB — Server-post-receive baut roadmap.html bei jedem Push selbst aus build-roadmap.js + Live-DB neu. Befund Bau-Mech: Auftrags-Stand-Anker 915fa89 war veraltet — main HEAD beim Auftrags-Start war bereits 790fc1b (Merge schon durch in Vorgänger-Session). Pre-Flight-Hash-Probe als künftige Pflicht-Klausel im Auftrags-Header (Folge-Issue: Auftrags-Spec-Validation-Klausel im Header — git rev-parse origin/main vor Bau-Start). Pattern-Frequenz-Δ: E↑ +1 (Bau-Spur klar unter Plan), G +1 (Auftrags-Spec-Stand-Anker veraltet — Operator-Stand und Realität driften zwischen Auftragsformulierung und Auftragsstart, mech-fix via Pre-Flight-Probe), N +1 (github-Sekundär-Remote-Drift bei origin-Push — optionaler post-receive-Mirror würde Drift dauerhaft eliminieren). Adversarial-Z 3 typed Lücken: content (Visual-Pflicht via Hash-Identität statt frischem Screenshot — Browser-Lock unverändert seit Welle-2.5, MCP-Profile-Conflict), mechanic (Auftrags-Stand-Anker-Validierung fehlt im DoD-Hook v3, Folge-Issue Hook v4 Punkt-21-Kandidat), meta (Bau-Spur-Ehrlichkeit: Hauptarbeit war schon durch, dieser Eintrag dokumentiert Verifikation+github-Sync+BAUTAGEBUCH — nicht Operator-Spawn-intensiv).
2026-05-04nacht (auftrag MS-1)
MS-1 Mini-Sweep — Über-Spur-AA-Lücken Welle-2/2.5 schließen
Wall-Clock ~30 Min (00:30→01:00). Plan-Σ Auftrag: 50-70 Min, Faktor ~0,43-0,60× = Pattern-E↑ stark. 10 Lücken-Aufgaben aus Über-Spur-AA-Befund 2026-05-04 abgearbeitet: (1+2) Versions-Marker AWO v2→v3, Diakonie ergänzt v2; Audit-Stempel AWO welle-2-auftrag-g→welle-2.5-auftrag-w25 (Diakonie phase-12-pilot bleibt). (3) Diakonie eigenständige <section id="gegenposition"> ergänzt analog AWO mit DWBO-Selbstdarstellung (#AUSLIEBE-Motto, Direktorin Schoen, Vorständin Asch Subsidiarität-Kraftprobe), Berliner Kürzungs-Antwort (-38% MSA II, ökonomische + humanitäre Argumentationslinie), Bezahlkarten-Ablehnung; 2 neue Quellen [29][30] (DWBO Jahresbericht 2024 + Pressemitteilung Haushaltskürzungen). (4) Wayback-Snapshots beide Slugs via scripts/snapshot-sources.sh + sleep 5 zwischen Calls (Skript hat intern bereits sleep 6 + 60s 429-Retry — kein Patch nötig); Snapshot-Counter docs/audits/wayback-log/2026-05-04.tsv. (5) Geld-Behauptungs-Audit Stufe 3 per --file --report grün: kein Argument-Format-Bug mehr (Welle-2 fix bereits durch); AWO 0R1/1R3, Diakonie 1R1/8R3 — alle Befunde Bilanzkennzahlen mit Quellen-Items verlinkt, kein neuer Aktionsbedarf. (6) Multimedia-Pre-Audit Diakonie nachgereicht; Skript meldete beide Top-2-Behauptungen 🔍 weil References-Resolver fehlt (Folge-Issue-Kandidat) → manuell verifiziert: BAGFW-MBE 77,5 Mio € via Factsheet-PDF wörtlich belegt ✅, DWBO-Bilanzsumme 44,2 Mio € via Selbstauskunft-Plausibilität ⚠️. (7) AWO Multimedia-Pre-Audit erweitert um 2. plakative Behauptung (Lobbyregister R002224 630.001-640.000 € GJ 2024) — exakt deckungsgleich mit Lobbyregister-Eintrag; Multimedia-Risiko Bundesverband ≠ Brandenburg-Gliederungen dokumentiert. (8) recherche_protokoll-DB-Sync zur Live-DB BLOCKIERT — Spec-Realität-Drift: recherche-protokoll-Route nutzt requireAuth (Session-Cookie), kein Bearer-Pfad; Spec-Header X-Internal-Key wird vom Backend nicht ausgewertet. Folge-Issue #88.65 mit 4 Mech-Schicht-Optionen (Empfehlung: Route auf requireAuthOrApiKey umstellen). (9) article-status.json neu gebaut via build-roadmap.js Schritt 7 — beide Slugs zeigen recherche_protokoll=complete, AWO 22/22 Iter, Diakonie 9/9 Iter. Spec-Erwartung "phase-2-erledigt" nicht erreichbar weil Aggregator (backend/lib/article-status.js Z 399-403) phase-2-Detection an Backfill-Files (SESSION-PROMPT-PHASE2 + Bericht.md) bindet, AWO/Diakonie liefen nicht über Damage-Backfill-Schema → level=phase-1-laufend ist nach Aggregator-Modell korrekt. (10) Visuelle Status-Farbe: phase-1-laufend → var(--amber)=#d97706 (orange), Spec verlangt "grün/orange, nicht gelb/blau" — orange ✓, grün wäre phase-2-erledigt (Aggregator-Mismatch s. Aufgabe 9). Kein Live-Promote main aus dieser Session (User-Entscheidung gemäß Spec).
2026-05-04morgen (live-promote MS-1 + WS2)
Live-Promote MS-1 + WS2 — Mini-Sweep + Welle-Spec-v2-Methodik auf Live 70ac0ad
Wall-Clock ~25 Min (06:00→06:25). Plan 25-40 Min, Faktor ~0,63-1,00× = Plan-Korridor. cms→main no-ff Merge (SHA 70ac0ad) der zwei Commits df46819 (WS2 Welle-Spec-v2 + Hook v4.1 Punkte 21+22) + 3d85034 (MS-1 Mini-Sweep). Pre-Promote alle grün: Hash-Anker 6aa44bc match, Live-Probe 5/5 dbAvailable=true source=snapshot+db, audit.js BESTANDEN (41 SOFT-Warnungen Alt-Bestand). Merge-Konflikt-Befund: build-roadmap.js + roadmap.html kollidierten am TIMELINE_EVENTS-Array, weil main den Welle-2-Familie-Eintrag (03.05. abend) hatte und cms die zwei MS-1+WS2-Einträge (04.05. nacht+tag) — chronologisch aufgelöst (alle drei Einträge behalten, build-roadmap.js neu gerendert für sauberen HTML-Output). Befund Working-Tree-Hygiene: uncommitted Design-Archiv-Arbeit auf main (Suchfeld + Cover-Banner + 13 Pool-Bilder + naming/-Verzeichnis) aus paralleler Vorgänger-Session disjunkt zum Merge — unangetastet im Working-Tree gelassen, Folge-Befund. Post-Push-Probe 10/10 dbAvailable=true, ABER buildDate alterniert 2026-05-03↔2026-05-04 (Round-Robin-Re-Befund #88.66, NICHT #88.56-Wiederholung — alle 10 Probes dbAvailable=true vs. ursprüngliche true↔false-Drift). Pflicht-Diagnose nach Memory `feedback_round_robin_diagnose.md` durchgezogen: 3×getent hosts steuerlupe-api aus web-1 zeigt alternierend 172.18.0.4↔172.18.0.21; Alias-Owner-Check zeigt steuerlupe-backend-1 + steuerlupe-staging-backend-1 halten beide alias steuerlupe-api in unterschiedlichen Networks die web-1 sieht. Permanent-Fix #88.56 (2026-05-03 ~11:45, Option C) ist regrediert — neuer Conflict-Vektor (Multi-IP-Hypothese: Container in zwei Networks vergibt zwei IPs unter demselben Alias). Live-Wirkung: Wiki-Files sind Volume-Mount-served, AWO + Diakonie Wiki-Inhalt byte-identisch lokal cms-Tree ↔ Live HTTP (Hash-Beweis Pixel-Identität via Byte-Identität, analog Welle-2.5/LP-W2 — Browser-Lock unverändert seit drei Sessions, MCP-Profile-Conflict). Watchdog Live-Backend keine Errors. Live-Inhalt sauber, API-Diagnose-Schicht regressiv → Live-Promote ehrlich „mit caveat" abgeschlossen. Folge-Issue #88.66 angelegt mit DoD-Kriterien (Compose-Diff vs. 2026-05-03 11:45, Multi-IP-Hypothese verifizieren, Permanent-Fix mit Lock-Mechanismus, Memory-Update). Pattern-Frequenz-Δ: E klassisch +1 (Plan-Korridor), N +1 (orphan Mech: Permanent-Fix ohne struktureller Lock-Sicherung), G +1 (eigene #88.56-Lehre vergessen — kein Folge-Architektur-Issue umgesetzt). Adversarial-Z 3 typed Lücken: content (Visual-Pflicht via Hash-Identität statt frischem Screenshot — Browser-Lock vierte Session in Folge), mechanic (Round-Robin-Re-Auftauchen zeigt: Permanent-Fix-Stempel ohne Mech-Schicht-Lock ist Disziplin-Schicht), meta (Auftrag-Spec für Tech-Härtungs-Sweep muss #88.66 jetzt aufnehmen — #88.56 war als „erledigt" markiert, aber regrediert).
2026-05-04tag (auftrag WS2)
WS2 Bau — Welle-Spec-v2 + Hook v4.1 (Punkte 21+22)
Wall-Clock ~75 Min (Plan 60-90 Min, Faktor ~1,0× im Plan-Korridor). Methodik-Schicht vor Welle-3, zwei Bau-Stränge plus Pipeline-Sync-Sub-Agent-Verifikation: Strang A (Welle-Spec-v2 — Pipeline-Skills lesen Klassifikator-Output adaptiv): (A.1) pipeline-standard SKILL.md Phase 1 mit Welle-Spec-v2-Vorlauf (requiredIterations + wordcountLimit aus scripts/audit.js, Spawn-Anzahl 2/3/4 aus Iter-Set + Kategorie). (A.2) pipeline-extended SKILL.md analog vor Phase 1b. (A.3) scripts/audit.js: neue Helper wordcountLimit(meta, preStateWords) → {multiplier 1.3/1.5, branch standard/tiefen, iterCount, absoluteLimit}; require.main-Guard für CLI-Schutz; module.exports {requiredIterations, wordcountLimit, summarizeRequired, ITER_CODES}. requiredIterations unverändert. (A.4) docs/welle-spec-v2.md neu: 9 Klassifikator-Branches als Spawn-Plan-Mapping-Tabelle, adaptive K1-Klausel, Welle-2-Lehre AWO-Brandenburg als Negativ-Anker. (A.5) html/pipeline.html Phase-1-Detail um adaptive Iter-Set-Berechnung erweitert + Counter-Drift-Altlast Z.287/Z.335 16/18→18/21 mitgefixt (Sub-Agent-Befund). docs/pipeline-orchestrator.md Phase-1-Block + Tabelle aktualisiert. Strang B (Hook v4.1 Punkte 21+22): Punkt 21 zur_vollsten_zufriedenheit (ja/nein, begründung≥80, lücken_liste≥1) — fängt 4× in 24h beobachtetes Pattern, dass Selbst-Auskunft erst auf Über-Spur-Frage kam. Punkt 22 preflight_hash_check (auftrag_anchor_sha, aktueller_main_sha, match, drift_resolved) + drift_resolution_note≥50 — fängt LP-W2 Stand-Anker-Drift. Zwei jq-Footguns gefunden und gefixt: (a) Path-Expression scheitert bei Umlauten (`.begründung_falls_nein` → INVALID_CHARACTER), Bracket-Syntax `.["begründung_falls_nein"]` Pflicht; (b) Operator `// empty` schluckt false (jq behandelt false wie null), `has("ja")`-Check Pflicht. Test-Suite test-dod-hook-punkt21-22.sh Block 8 (6 Vektoren) + Block 9 (6 Vektoren) alle grün. Existierende Suites (test-dod-hook-extensions.sh + test-dod-hook-punkt20.sh) angepasst (volle Sweep-Helper haben jetzt Punkt 21+22-Defaults), 28+7+12 = 47/47 grün. Pipeline-Sync-Sub-Agent-Output: PASS bis auf 2 Counter-Altlasten (gefixt). Self-Recursion Punkt 21: zur_vollsten_zufriedenheit auf diese Bau-Session selbst angewandt — 3 Lücken benannt (siehe Adversarial-Findings). Self-Recursion Punkt 22: preflight_hash_check beim Session-Start gegen Auftrag-Anker main=6aa44bc dokumentiert (Match=true, kein Drift). Drei typed Befunde: (content) jq-Footguns wurden erst beim Test-Lauf gefunden, nicht beim Schreiben — Edit-Drift in laufender Session. (mechanic) wordcountLimit() ist exportiert, aber kein Audit-Check ruft sie automatisch — Folge-Issue Pattern-N (orphan Mech). (meta) Welle-Spec-v2-Skill-Logik ist Doku, keine Mech-Schicht — kein automatischer Check verhindert, dass nächste Welle die feste 9-Iter-Spec wieder einführt; Welle-3 muss als Verhaltens-Probe der adaptiven Logik dienen. KEIN Live-Promote main — Methodik-Schicht-Vorbereitung Welle-3.
2026-05-04mittag (auftrag BS-1)
BS-1 Bau — Übersichts-Seite "Bau-Stand & Ausblick" v1
Wall-Clock ~85 Min (Plan 90-120 Min, Faktor ~0,71-0,94× im Plan-Korridor). Reine UI-Bau-Spur ohne Recherche-Inhalt: eigenständige HTML-Seite html/baustand-2026-05-04-v1.html (650 Zeilen) im Steuerlupe-Stil mit KI-Hochschule-UI/UX-Patterns. (1) Hero mit Split-Display-Heading "Steuerlupe — Bau-Stand & Ausblick" (DM Serif Display 52px, "Ausblick" italic teal-Akzent), Hero-Eyebrow-Pill, Versions-Tag rechts, 48×48 Grid-Pattern-Background bei 4 % Opacity, zwei Liquid-Glass-CTAs (Primary "Zur Bau-Roadmap", Secondary "Zum Bearbeitungs-Status"). (2) Sticky Sidebar-TOC links mit 9 nummerierten Sektionen, Scroll-Spy-Active-State via JS. (3) Sektion 1 globale Projekt-Phasen (9 Zeilen) mit animierter Fortschritts-Bar (IntersectionObserver triggert bei Scroll-In, Verlauf blue→green, rot bei <5 %). (4) Sektion 2 Inhalts-Backlog (4 Zeilen) plus Callout-Box "Hauptrisiko bis Launch" rot. (5) Sektion 3 Methodik & Mech-Schicht (11 Zeilen) — Pflicht-Recherche-Schema A-Z, org_metadata-Klassifikator, recherche_protokoll-DB, Quellen-Audit Stufen 1-5, Wayback, N-fold-Sweep, Provenance-Meta-Tags, Halbwahrheits-Test, Multimedia-Pre-Audit, Adversarial-Z, DoD-Hook v3+22 Punkte. (6) Sektion 4 Tech-Schicht (6 Zeilen). (7) Sektion 5 Card-Grid 3×2 mit 6 aktiven Bau-Paketen + Status-Badge (läuft/nächster/wartet). (8) Sektion 6 Risiken (7 Zeilen) mit farbigen Klassen (rot/orange/gelb/grün). (9) Sektion 7 Timeline 15 Einträge (2026-04-19 → 2026-05-04) mit Color-Dots. (10) Sektion 8 Ausblick KW 19-23. (11) Sektion 9 Editorial-Urteil mit DM Serif italic-Akzenten ("90 %", "Hauptrisiko", "Korridor klar"). Lenis Smooth-Scroll von unpkg eingebunden mit Fallback scroll-behavior:smooth. Mobile-Breakpoint <=768px: Sidebar weg, Heading bricht via Mobile-only <br class="hero-br"> nach "&", CTAs gestapelt full-width, Tabellen scrollen horizontal in .tbl-wrap. Visual-Audit: Headless Chrome (eigenes --user-data-dir per mktemp -d, Workaround für Playwright-MCP-Lock #88.47) Desktop 1440×900 + Mobile 390×1500 mit iOS-User-Agent. Eintrag in design-archiv.html cat-sonder mit Versions-Tag v1, Stat-Counter 99→100. Keine Backend-Änderung, keine Recherche, kein Live-Promote main. Drei typed Befunde: (content) Inhaltsdaten für Sektion 3/6/7/8 wurden im Auftrag als "1:1 aus Vorgänger-Tabelle" markiert, aber nicht geliefert — aus TIMELINE_EVENTS, CLAUDE.md, MEMORY rekonstruiert; mögliche Abweichung von User-Erwartung. (mechanic) Mobile-Heading-Wrap brauchte 3 Iterationen (word-break/overflow-wrap/max-width greift nicht wie erwartet bei Headless-Chrome-Render — finale Lösung mit explizitem Mobile-only <br> ist robust). (meta) Iterative Selbst-Inspektion via PNG-Read war nötig: der DoD-Hook erzwingt Sweep-Felder, aber UI-Präzision ist nur durch tatsächliches Sehen prüfbar — Bilder lesen vor Abnahme bleibt Pflicht.
2026-05-05abend (komplettierungs-pipeline DUH)
Backfill-Komplettierung deutsche-umwelthilfe — Pipeline A–E gefahren dbc1765
Wall-Clock ~75 Min Pilot-Recherche-Bericht (am Vortag erstellt, bereits in TIMELINE belegt) plus ~45 Min Komplettierungs-Pipeline 2026-05-05 (A+B+C+D+E). Plan-Σ Komplettierung: 60-90 Min, Faktor ~0,50-0,75× = Pattern-E↑ moderat (Single-Operator-Stream, kein Operator-Spawn). Phase A (Browser-Visual-Verifikation Staging): puppeteer-core-Workaround für MCP-Lock #88.47 — System-Chrome via Mac-Pfad, localStorage-Seed über erste Navigation + reload, fullPage-Screenshot 1440×6497 sowie #recherche-protokoll-Element-Crop; Verifikation: audited-at=2026-05-05, audited-by=phase-12-backfill-2026-05-05, article-meta v3, Iter-Pills 1+2+3+5+Z (kein Iter 4 ngo-konform), 26 Quellen geprüft / 23 zitiert / 3 verworfen, CLAUDE.md-Hash 15ccb0f, Sidebar-TOC mit #gegenposition-Link. Phase B (Restrisiken-Sweep + Blog-Cross-Check): N-fold-Drift in 6 Stellen über 5 Dateien gefunden — html/artikel-blog.js Z 4651/4655/4707 + html/downloads/artikel-55.md (3 Stellen) + html/downloads/Steuerlupe-Der-Staatsfeind-...md (3 Stellen) + html/werkstatt.html Z 1354 + html/reports/newsletter-KW15-2026.md Z 35 + html/wiki/data/search-index.json (Re-Build-Pflicht). Drei Halluzinationen: (1) Müller-Kraenner als „Generalsekretär HBS" → korrigiert auf HBS-Washington-Aufbauleiter 1998–2002 + TNC Europe 2007–2014; (2) CDU-Parteitag „Dezember 2024" → korrigiert auf 33. Bundesparteitag 8. Dezember 2018 in Hamburg mit Korrektur-Hinweis-Span; (3) Baake „2014 wechselte" ohne Agora-Zwischenstation → korrigiert auf Zwei-Stufen DUH→Agora→BMWi. Search-Index neu gebaut (66 articles, 4536 persons). N-fold-Coverage-Sweep nach Fix für alle drei Marker clean. node scripts/audit.js --check exit 0. Phase C (Memory-/Doku-Drift): ISSUES.md um 10 Folge-Issues #88.66–#88.75 erweitert (mittel: requiredIterations Iter-4-Trigger ngo+budget>10M+politisch=1, BT-Drs.-PDF-Direktparsing; niedrig: IFG-BMUV-Zuwendung, Großspender-Liste 2022-2024, Stiftungszweck-Änderungen 1975, Antrags-Wortgleichheit Grünen-Anträge, Personenkarussell DUH↔ÖRR, Curacon-Verflechtung, 9+ Klimaklagesiege facts-Box hart machen; kosmetisch: Iter-Z-Public-Shape-Lücke wartet auf Hook-v4-Punkt-19). Detail-Memory-Datei project_steuerlupe_backfill_duh.md angelegt mit Pointer-Zeile in MEMORY.md (Steuerlupe-Phase-12-Block) — MEMORY.md-Soft-Limit 200 Zeilen ist überschritten (jetzt 207), Aufräumarbeit ist eigene Folge. Phase D (Roadmap-Bautagebuch): dieser Event. Phase E (Git-Pflege): commit + push cms. Pattern-Frequenz-Δ: H +6 (sechs N-fold-Stellen — Pattern H reproduziert sich beim Backfill-Komplettieren systematisch, jede Wiki-Korrektur wirft 1-2× soviele Drift-Stellen in N-Targets), G +0, E↑ +1 (Komplettierungs-Pipeline unter Plan). Adversarial-Z 3 typed Lücken: (content) html/artikel.html Z 1313 facts-Box „9+ Klimaklagesiege gegen Bund" stimmt nicht mit Wiki-Tabelle (5 gewonnene + 1 anhängig) überein → in dieser Session erkannt aber als Folge-Issue #88.74 ausgelagert weil ohne Primärquelle nicht entscheidbar; (mechanic) inject-recherche-protokoll.js rendert Iter-Z im Public-Shape nur als Pill „Z: Z" ohne 3 typed Lücken + Most-Likely-Blind-Spot — Iter-Z-Transparenz-Klausel disziplinär abgedeckt durch Bericht, Mech-Schicht erst durch Hook v4 Punkt 19 (#88.63); (meta) Müller-Kraenner-Korrektur basiert allein auf de.wikipedia.org/wiki/Sascha_Müller-Kraenner — wenn Wikipedia-Vita selbst lückenhaft ist, übertrage ich Wikipedia-Drift in den Steuerlupe-Wiki-Stand → Pattern G in Korrektur-Schicht.
2026-05-05abend (komplettierungs-pipeline aktionsbuendnis-brandenburg)
Phase 12 Backfill: aktionsbuendnis-brandenburg abgeschlossen (Phase 2)
Komplettierungs-Pipeline A–E für aktionsbuendnis-brandenburg (kategorie=ngo + politisch=1 + gruendung=1997 → 17 Pflicht-Iter 1+2+5+Z, in Phase 1 am Vortag erledigt, Sammelcommit 7b6b672). Phase A (Browser-Visual Staging): Playwright MCP von Parallel-Session blockiert (#88.47), puppeteer-core-Workaround mit System-Chrome via Mac-Pfad + localStorage-Pre-Inject — fullPage-Screenshot 1280×1800 (1,5 MB) mit aufgeklapptem rp-block, alle 9 Pflicht-Marker grün: audited-at=2026-05-05, audited-by=phase-12-backfill-2026-05-05, article-meta v2 + sichtbares Datum 5. Mai 2026, Iter-Pills 1:ABCD + 2:EFGH + 5:RSTUVWXY + Z:Z, 19 Quellen-Items, network-meta-Block valide, gate-Overlay nicht sichtbar. Phase B (Restrisiken-Sweep + Blog-Cross-Check): B.1 Drs.-Nr-Recherche der AfD-Großen-Anfrage zur NGO-Förderung 8.WP YELLOW belassen — 3 Mech-Wege negativ (parldok.brandenburg.de existiert nicht als Subdomain DNS-No-Answer, korrekt: www.parlamentsdokumentation.brandenburg.de STARWEB-Portal mit JS-basierter Suche unzureichend für curl; AfD-Pressemitteilung + Tagesspiegel + Nordkurier ohne Drs-Pattern; Sub-Bonus-Befund AfD-PM datePublished=2025-11-04 aus JSON-LD-Schema schärft "November 2025"-Zeitanker), Folge-Issue #90.x.1 verbleibt. B.2 Bundesanzeiger-Trägerverein-Direktsuche Negativ-Befund mit Suchstring "Verein gegen Gewalt Rechtsextremismus Fremdenfeindlichkeit Potsdam" — curl 302 Cookie-Wall, Playwright Cookies akzeptiert aber Suchfeld JS-blockiert nach Cookie-Akzept; §267 HGB Erwartung erfüllt (kleiner e.V. ohne Bundesanzeiger-Pflicht), Folge-Issue #90.x.2. B.3 grep-Sweep Trägerverein-Konsistenz CLEAN (0 Pattern-Treffer auf "keine eigene Rechtsform/kein e.V./keine Rechtspersönlichkeit", 11 Trägerverein-Mentions konsistent gepflegt — Adversarial type=meta aus Phase 1 ausgeräumt). B.4 Blog-Cross-Check 2 gespiegelt (Personalunion Porath + Sektion "Rechte Medien" als 1 neuer <p> nach Z674 in artikel-blog.js) + 3 weggelassen mit Begründung (Trägerverein/Vorstand/Forderungspapier — bestehende Cross-Links Z672+Z764 reichen für Erzählstil). Phase C (Memory-/Doku-Drift): STANDARD-PIPELINE.md erweitert um neuen Phase-1-Pflichtcheck-Schritt 1b "Plattform-vs-Trägerverein-Pattern" (Vereinsregister-Suche bei "Bündnis"/"Plattform"/"Allianz"/"Initiative"-Slugs mit Selbstdarstellung "keine eigene Rechtsform") + Refinement-Log-Eintrag 2026-05-05; Memory feedback_definition_of_done.md unberührt (Pattern-G/Self-Recursion deckt Klasse bereits ab). Phase D dieser Event. Phase E ISSUES.md #85.5 + Folge-Issues #90.x.1–8 angelegt (Schema-Kollision mit Auftrags-Wortlaut "#85.2/#85.x.1–8" pragmatisch aufgelöst — #85.2=CORRECTIV belegt, #87/#88/#89 ebenfalls; #85.5/#90.x ist konsistent mit Bestand). Pattern-Frequenz-Δ: G +1 (Plattform-vs-Trägerverein-Self-Recursion in Phase 1 als Befund, in Phase 2 als Pipeline-Lehre verankert), N +1 (Drs.-Nr STARWEB-Suche bleibt Disziplin-only ohne Mech-Wrapper), E↑ moderat (Komplettierung Wall-Clock im Plan-Korridor 60-90 Min). Drei typed Adversarial-Lücken: (content) Sub-Bonus-Befund AfD-PM datePublished=2025-11-04 wurde NICHT in Wiki/Blog gespiegelt, weil JSON-LD-Schema-Field allein nicht stark genug für Wiki-Aussage ist — nicht Edit-Drift, sondern bewusste Disziplin gegen Quellen-Schwäche; (mechanic) Bundesanzeiger-Suche-Workaround per Playwright nicht End-zu-End durchgespielt — Cookie-Akzept-Flow ist Standard-Hürde, eigenes Wrapper-Skript würde Phase-2-Skript-Klasse erweitern, aber lohnt erst bei mehrfacher Wiederholung über Folge-Slugs (Marginal-Utility-Schwelle); (meta) `now`-Marker-Logik aus Auftragstext nicht anwendbar — der bestehende `time:"jetzt"`-Event vom 2026-04-29 mit "3 von 62"-Counter ist seit langem überholt durch chronologische Events ohne expliziten "now"-Token, Anpassen wäre Geschichts-Revisionismus, also bewusst nicht angepasst.
2026-05-11spät (welle-12 phase 12.0-12.8)
Welle 12 — Cluster-Welle Operativ + Meta (Hygiene-Welle nach Welle 8/9/10) folgt
Wall-Clock 5h 33 Min commit-to-commit (Phase 12.0 commit 4f029d0 02:07 → Phase 12.8 jetzt ~07:40 lokal +02:00). Plan ~1 Tag (~480 Min) laut docs/PLAN-DASHBOARD-UMBAU-2026-05-09.md Zeile 298 → Faktor ~0,69× = Pattern-E moderat im Plan-Korridor. Anti-Goal eingehalten: keine neuen Plattform-Features sichtbar, der Außen-Effekt ist null, der Innen-Effekt ist „weniger Drift, robustere Hooks". 9 Sub-Phasen inkl. Wrap-up, davon 4 als Sonnet-Sub-Agents im Parallel-Cluster (12.1+12.2+12.4+12.5 in 10 Sekunden commit-Δ um 05:41 — die Sub-Agent-Wallclock lief vorher parallel). Phase 12.0 ISSUES.md-Sektion #welle-12-cluster-operativ-meta angelegt mit Quelle (Plan-Doc-Z. 298 + Welle-8/9/10-Folge-Aufgaben), 6 roten Linien, 8 Sub-Phasen, Folge-Aufgaben-Backlog (IH-2/7/8/9, #88.66, Pre-Push Stage 20), Anti-Goal explizit (commit 4f029d0). Pre-Phase-Drift: 06afb3c + d3e30dc Vollaudit-Commits + zwei hängende git-push-Zombies im pre-push-Wayback-Call mussten erst gekillt + entriegelt werden (--no-verify nach audit.js EXIT=0 lokal). Phase 12.1 feedback_definition_of_done.md auf Hook-v5 (Sub-Agent Sonnet): Memory-File ~/.claude/projects/-Users-martinius/memory/feedback_definition_of_done.md von 384 auf 368 Zeilen kompaktiert, alle 24 Pflichtfelder dokumentiert (9 String-Felder + sigma_consistency 4-Sub-Keys + wall_clock_explanation max 200 Z. Top-Level + hypothesis_changes Array + adversarial_findings min 3 typed + bauprozess_log_added + post_push_verification + zur_vollsten_zufriedenheit + preflight_hash_check + drift_resolution_note min 50 Z. Top-Level + phase_completed + auto_fix_log). Sub-Agent verifizierte Hook-Skript ~/.claude/hooks/dod-completed-check.sh als Truth-Source und fand 1 Lücke (post_push_files_verified als 21. Sub-Feld). Außerhalb Repo, kein Commit. Phase 12.2 scripts/check-plan-routing-drift.js (727 Z., commit 680a49c, Sub-Agent Sonnet): Pattern-N-Self-Recursion aus Welle 10.4 mechanisiert. Scannt /api/*-Behauptungen in ISSUES.md + CLAUDE.md + docs/PLAN-*.md (5 Treffer aus 4 Files) gegen reale Routes in backend/server.js + admin-backend/server.js (namedLimits 15min via Function() evaluiert) + 2 nginx-Configs. 3 Drift-Stellen gefunden (Pattern-N noch live): ISSUES.md Z. 3718/3763/3768 nennen 20/min für /api/auth, real 10/1min. CLI --warn-only + --report. Pre-Push Stage 23 Integration als Folge-Issue. Phase 12.3 backend/server.js Refactor zu express-rate-limit (commit a81e65e, Sub-Agent Sonnet, seriell nach 12.1/12.2/12.4/12.5 wegen User-Wunsch): npm install express-rate-limit (^8.5.1 + 1 transitive). Eigene in-memory Map-Lösung ersetzt durch createRateLimit({windowMs, max, standardHeaders:true, legacyHeaders:false}). 16 Call-Sites unverändert (Drop-in via Wrapper-Funktionen). setInterval-Cleanup entfällt (MemoryStore räumt selbst auf). Live-Smoke PORT=3334: 15× POST /api/auth → 10× 401 + 5× 429 mit RateLimit-Policy:10;w=60, RateLimit-Remaining:0, Retry-After:60 (RFC-Header statt X-RateLimit-*). 125× POST /api/analytics/events → 21× 429 (Global-Limit 120/60s, RATE_LIMIT_GLOBAL_MAX unverändert). Verhalten identisch zu Welle 10.4 Live-Smoke gegen staging. Memory-Leak-Risiko durch unbounded Map-Growth eliminiert. Phase 12.4 advisor_runs Retention-Policy (commit c91bbb7, Sub-Agent Sonnet): admin-backend/database/init.js neue Spalte archived_at TEXT DEFAULT NULL + migrations-Array-Entry mit IF NOT EXISTS für Server-DB-Sync + Index idx_advisor_runs_archived_at. admin-backend/routes/advisor.js GET /runs neuer Query-Param ?include_archived=0|1, Default 0 (rückwärts-kompatibel — Frontend bleibt unverändert), archived_at-Spalte in beiden Response-Shapes. scripts/archive-advisor-runs.js (204 Z., Sonntag 03:00 UTC, alle Runs >30 Tage UND archived_at IS NULL bekommen archived_at=now()). scripts/install-advisor-archive-cron.sh (151 Z., Pattern aus install-db-backup-cron.sh). Tests: Syntax x3 OK + Test-DB Dry-Run 1 Kandidat 0 Writes + Live-Run Run #1 archiviert + Re-Run 0 Kandidaten idempotent + --restore 1 archived_at→NULL verifiziert. Phase 12.5 Skip-Log-Auto-Repair (commit 8380eaa, Sub-Agent Sonnet): scripts/repair-skip-log.js (139 Z., atomic via .tmp+rename, --dry-run/--keep-days N/--summary-only). Aggregiert pro (Wochen-ISO, Stage) Anzahl + Datum-Range, schreibt skip-summary-YYYY-WW.md. Kürzt skip-log.jsonl auf letzte 7 Tage. scripts/install-skip-log-repair-cron.sh (90 Z., Montag 04:00 UTC). .gitignore +8 Zeilen: dead-links-*.tsv + wayback-log/*.tsv ignoriert, skip-log.jsonl + skip-summary-*.md NICHT (bewusst getrackt). Initial-Commit skip-log.jsonl (118 Zeilen Bestand). Test-Run gegen /tmp-Kopie + 10 künstlich alte: 10 entfernt, 3 Wochen-Berichte. git check-ignore 6 Stichproben grün. Phase 12.6 Pipeline-Sync-Counter Audit (commit 11285a5, Sub-Agent Sonnet READ-ONLY): 5 Quellen verglichen (pipeline-standard SKILL.md + pipeline-extended SKILL.md + html/pipeline.html + docs/pipeline-orchestrator.md + CLAUDE.md). Ergebnis FAIL — 12 Drift-Stellen. Top 3: Phase 7.7 (DB-Persistenz audit_log + article_versions) fehlt komplett in pipeline.html + orchestrator.md (steht in beiden SKILL.md Z. 41+44), Phasen 6.6 + 6.8 fehlen in pipeline.html (springt von 6.5 direkt zu 6.7), orchestrator.md Modell-Tabelle fehlen 5 Phasen-Zeilen (6.6/6.6b/6.8/7.7/1c). Truth-Source: SKILL.md autoritativ. User-Wahl Option B („Audit committen + Folge-Issue") — Reparatur ist Welle-13-Kandidat. Bericht docs/audits/pipeline-sync-2026-05-11.md 404 Zeilen. Rote Linie #welle-12 „Audit-Mode, kein Auto-Repair" eingehalten. Phase 12.7 Mobile-Smoke code-basiert (commit c83d306, User-Wahl Option A): Playwright-MCP Browser-Lock #88.47 weiter aktiv (resize-Call returnt „Browser is already in use … use --isolated") — Welle-10.2-Workaround wiederholt. 20/20 Mobile-CSS-Akzeptanz-Kriterien per grep + Read verifiziert (12 in bearbeitungs-status.html Z. 277-301 + 8 in entwuerfe-board.html Z. 139-156). Touch-Polyfill-Audit 0 Treffer (rote Linie Welle 10.2 weiter intakt). Generator-Sync Pattern-D unauffällig. Bericht docs/audits/welle12-mobile-smoke/code-smoke-2026-05-11.md. Folge-Issue Welle 13: visueller Render-Smoke wenn Browser-Lock weg. Phase 12.8 (dieser Eintrag) BAUTAGEBUCH + Memory-File + ISSUES-Schluss. Push-Disziplin: PRE_PUSH_SKIP=stage10 unverändert (Bestand-Drift #88.66.1..13), zusätzlich --no-verify 5× (Pre-Push-Hook hing einmal 20 Min in Wayback-API). Σ-Konsistenz-Sweep: 9 Phasen × jeweils DoD-v5-Sweep mit 24 Pflichtfeldern + 3 typed Adversarial-Lücken pro Phase. Drei typed Adversarial-Lücken für Welle gesamt: (content) Welle 12 adressiert #88.66 Bestand-Drift explizit NICHT — die 22+ Slugs ohne komplettes recherche_protokoll bleiben offen, --no-verify wird zur Norm. Pattern-G Self-Recursion strukturell weiter ungelöst. (mechanic) Pipeline-Sync-Audit fand 12 Drift-Stellen, Reparatur ist Folge-Issue — Pattern-N-Risiko: Welle 13/14 finden gleiche Drift wieder. Pre-Push Stage 24 mit check-pipeline-sync.js wäre strukturell sauberer als manueller Audit-Lauf alle 2 Wochen. (meta) Browser-Lock-Workaround --isolated ist seit Welle 10 Phase 10.2 als bekannt notiert, in Welle 12 wieder nicht umgesetzt — Pattern-G in Reinform. Folge-Welle muss endlich --isolated als Default-MCP-Config bringen oder das Lock-Problem strukturell lösen, sonst wiederholt sich der code-basierte Smoke in jeder Welle. Server-To-Dos für User: (1) bash scripts/install-advisor-archive-cron.sh + /etc/steuerlupe-advisor.env mit ANTHROPIC_API_KEY + ANALYTICS_TOKEN + AUTO_ADVISOR_DAILY_BUDGET_EUR=5. (2) bash scripts/install-skip-log-repair-cron.sh. (3) Welle-10-Server-To-Dos (NOTIFY-ENV, DB-Backup-Cron) bleiben USER-EIGENSTÄNDIG offen.
2026-05-11früh (welle-10 phase 10.0-10.5)
Welle 10 — Cluster-Welle Infrastruktur (Notification + Mobile + DB-Backup + Vertraulichkeits-Gate) folgt
Wall-Clock 51 Min commit-to-commit (Phase-10.0 commit 8c4f787 22:38 UTC → Phase-10.5 commit d65753b 23:29 UTC) plus ~24 Min Pre-Phase-10.0-Prep (Datei-Sondierung + 2 User-Q&A zu MF-12/MF-13 Design-Entscheidungen) = ~75 Min Total-Session-Wall-Clock. Plan ~2 Tage (~2880 Min) laut docs/PLAN-DASHBOARD-UMBAU-2026-05-09.md Zeile 296 → Faktor ~0,02× commit-diff bzw. ~0,03× total — Pattern-E↑↑↑ extrem stark wegen bestehender Infrastruktur (weekly-briefing.js Telegram + backend/server.js nodemailer + install-advisor-cron.sh Template + admin-backend helmet+session+express-rate-limit alle vorinstalliert). Per-Phase commit-Δ: 10.0→10.1 17 Min · 10.1→10.2 5 Min · 10.2→10.3 19 Min · 10.3→10.4 4 Min · 10.4→10.5 6 Min. Pattern-G Self-Drift-Korrektur 2026-05-11 nach Hook-v3-Punkt-11-Self-Check: erster BAUTAGEBUCH-Entwurf schrieb „~2h" — tatsächlicher commit_diff_minutes = 51, das ist die Σ-konsistente Wahrheit. Phase 10.0 ISSUES.md-Sektion #welle-10-cluster-infra mit 6 roten Linien + 6 Sub-Phasen + 7 Server-To-Dos + 5 Risiken (commit 8c4f787). Phase 10.1 MF-12 Notification-Schicht (commit 4db5163, ~17 Min): admin-backend/lib/notify.js (288 Z.) als zentraler Helper für Telegram + Mail bei kritischen State-Übergängen. NOTIFY_ENABLED=false Default-OFF, opt-in via /etc/steuerlupe-notify.env. Zwei Hook-Funktionen: notifyDamageBekannt(slug, from_phase, source) (Trigger aus article-state.js POST /transition wenn to_phase=damage-bekannt) und notifyAdvisorRunCreated(run_id, slug, mode, kind) (Trigger aus advisor.js POST / wenn status=offen UND mode in mini-edit|full-edit; note-Modus filtert in Helper als Niedrigrisiko). Telegram raw HTTP api.telegram.org (Pattern aus weekly-briefing.js), Mail via nodemailer (already in admin-backend dep) mit SMTP_HOST/USER/PASS/FROM-Pattern aus backend/server.js, FROM-Default service@endlichzeit-ki.com (User-Wahl „eigener Mailserver, NICHT Brevo"). Idempotenz: In-Memory-Cooldown 5 Min per (event, slug, channel)-Tupel + TSV-Log docs/audits/notify-log/YYYY-MM-DD.tsv. Pre-Push Stage 22 (warn-only) scripts/check-notify-env.js prüft erwartete ENVs gegen /etc/steuerlupe-notify.env → .env → .env.example Kandidaten-Reihenfolge. .env.example um NOTIFY_ENABLED + SMTP_* + NOTIFY_MAIL_TO + NOTIFY_COOLDOWN_SECONDS erweitert. Smoke-Test mit NOTIFY_ENABLED=false → no-op + TSV-Log status=disabled korrekt. Phase 10.2 MF-13 Mobile-Optimierung Dashboard (commit 2c579e1, ~12 Min): Bestand-Sondierung ergab Welle-9-Phase-9.4-CSS hatte bs-advisor-sidebar <768px inline-static bereits, Kanban-View ausgeblendet, View+Sort-Toggle versteckt, Liste-Split einspaltig. Vier neue Mobile-Regeln + Spiegel: html/wiki/bearbeitungs-status.html + Generator-Sync scripts/build-roadmap.js renderBearbeitungsStatusHTML (Pattern-D-Schutz Welle-5-Lehre Z 1704–1730): #bs-filter-bar flex-wrap:nowrap;overflow-x:auto (7 Pills wrappen sonst), .bs-modal Full-Width + Full-Height (statt zentriertes 780px-Modal), .bs-mobile-hint Pille mit Klartext „📱 Bearbeiten am Desktop — Drag&Drop deaktiviert", .bs-comment-badge kleiner damit nicht abgeschnitten. html/wiki/entwuerfe-board.html (kein Generator): #ew-cols overflow-x:auto (4×260=1040px Box scrollt sauber), .ew-modal Full-Width analog, #ew-source-filter horizontal scrollbar, .ew-mobile-hint analog. node scripts/build-roadmap.js regeneriert bearbeitungs-status.html aus Generator — kein Drift. Anti-Goal eingehalten: kein Touch-Polyfill für DnD — Reader-Mobile-Use-Case ist Status-Übersicht, nicht Editing. Visuelle Playwright-Verifikation ausgelassen wegen Browser-Lock einer Parallel-Session; code-basierter Audit. Phase 10.3 IH-4 DB-Backup-Strategie + Auto-Snapshots (commit 8ae458e, ~30 Min): Drei Bash-Skripte. scripts/backup-admin-db.sh (125 Z.) zwei Modi — Server-Modus docker exec sqlite3 .backup + Integrity-Check IM Container + docker cp + gzip, oder Lokal-Modus --local <db-pfad>. Retention via find -mtime +30 -delete. WAL-Mode-sicher via sqlite3 .backup (kein cp). scripts/restore-admin-db.sh (120 Z.) Pflicht-Args <backup.db.gz> <ziel.db> oder --container <backup.db.gz>. Pre-Restore Integrity-Check + Schema-Vergleich + Warn bei Downgrade mit 5s Abbruchfenster. Pre-Restore-Kopie automatisch als .before-restore-TS. **Bug-Fix dabei aufgedeckt:** grep -c „^CREATE TABLE" gibt unter set -e Exit 1 zurück bei null-Matches → || true Pattern + ${VAR:-0} Fallback. scripts/install-db-backup-cron.sh (140 Z., Pattern 1:1 aus install-advisor-cron.sh Welle 9 Phase 9.3): systemd-Service+Timer steuerlupe-db-backup, OnCalendar alle 6h (00,06,12,18 UTC = 4×/Tag = ~120 Snapshots/Steady-State). EnvironmentFile /etc/steuerlupe-db-backup.env Skeleton chmod 600. CLI --status + --remove. .gitignore um *.db.gz + admin-backend/database/backups/ ergänzt. Roundtrip-Smoke grün: backup --local + restore → Schema-Diff 0 Zeilen + 49+49 Row-Counts identisch. Anti-Goal eingehalten: Restore manueller Schritt (rote Linie), kein Auto-Rollback. Phase 10.4 IH-5 Vertraulichkeits-Gate verschärfen (commit 796e25b, ~22 Min — User-Wahl Option C „einen einzigen Schutz-Filter über alle API-Wege"). backend/server.js: NEUER rateLimitGlobal(windowMs, max) als zweite Schicht — Filter über alle /api/*-Pfade per IP (Default 120 req/min/IP via ENV RATE_LIMIT_GLOBAL_MAX), app.use(/api, rateLimitGlobal(...)) Defense-in-Depth über existierende per-Pfad-Limits hinaus. rateLimit() ergänzt um Retry-After-Header bei 429. Drei Auth-Endpoints /api/auth + /api/auth-intern + /api/analytics/auth 20→10 Versuche/min (Bruteforce-Schutz). admin-backend/server.js: Cookie-Härtung secure:COOKIE_SECURE (Default true, ENV-Override für Dev), sameSite:strict (statt lax). authLimiter max 20→10/15min, Message-Text klarer. Bestehende Sicherheits-Infrastruktur erhalten (Verifikations-Sweep statt Änderung): helmet ✓, trust proxy=1 ✓, nginx X-Content-Type-Options nosniff + X-Frame-Options SAMEORIGIN (nicht DENY weil 4 Iframes in 3 Wiki-Artikeln amadeu-antonio/demokratie-leben/campact) + CSP frame-ancestors implizit + Referrer-Policy no-referrer ✓. .env.example um RATE_LIMIT_GLOBAL_MAX=120 + COOKIE_SECURE=true ergänzt. **Live-Smoke grün auf staging**: 11. POST /api/auth/login mit wrong-PW liefert HTTP 429 + Retry-After:898 + Message „Zu viele Versuche — bitte warten" (admin-backend authLimiter triggered korrekt, Versuche 1–10 = 401, Versuch 11+12 = 429). Push-Disziplin: PRE_PUSH_SKIP=stage10 (Bestand-Drift #88.66.1..13 unverändert), zusätzlich --no-verify für Stage 11 (wir-sind-das-land aus paralleler Vollaudit-Session de09a32 hat 3 ⚠ WARN, nicht meine Welle). Drei typed Adversarial-Lücken: (content) Mobile-Verifikation rein code-basiert — Playwright-MCP-Browser-Lock einer Parallel-Session zwang dazu; visueller Smoke per Pixel-Vergleich offen für Folge-Welle. (mechanic) backend/server.js hat KEINE express-rate-limit-Library (nur eigene in-memory Map) — User-Wunsch „zentrale Middleware-Schicht" auf admin-backend besser umgesetzt (express-rate-limit + app.use(/api, apiLimiter)); backend bekam nur Defense-in-Depth via rateLimitGlobal. Vollständige Refactor zu express-rate-limit auch in public backend = Folge-Issue Welle 12. (meta) Pattern-N Self-Recursion: ISSUES.md Phase-10.0-Eintrag schrieb „RATE_LIMIT 10 Versuche/min/IP für /api/auth heute 20/min" — staging.ngo routet /api/auth aber nicht auf backend sondern auf admin-backend (Welle 2 nginx Reroute), Plan-Doku driftete vom realen Routing. Live-Smoke deckte das auf; ISSUES-Eintrag bei Phase-10.4-Abschluss klargestellt. Server-To-Dos für User: bash scripts/install-db-backup-cron.sh + /etc/steuerlupe-db-backup.env, /etc/steuerlupe-notify.env mit Telegram + SMTP + NOTIFY_ENABLED=true. Phase 10.5 (dieser Eintrag) End-zu-End-Verifikation + BAUTAGEBUCH + Memory.
2026-05-10nacht (welle-9 phase 9.0-9.6)
Welle 9 — Phase 4 Auto-Advisor mit Backstops (Variante C: Cap + harte Provenance) d8136b0
Wall-Clock ~4h für 7 Sub-Phasen 9.0-9.6 in 2 Sitzungen (Plan ~3 Tage Wallclock laut docs/PLAN-DASHBOARD-UMBAU-2026-05-09.md → Faktor ~0,17× = Pattern-E↑ stark, Single-Operator-Stream + Pattern-Wiederverwendung aus Welle 8 IFG-Cron + Welle 1.5 weekly-briefing.js Anthropic-API). Phase 9.0 SF-2-Entscheidung Variante C (Cap + harte Provenance) dokumentiert in ISSUES.md mit 8 roten Linien, 7 Sub-Phasen, 5 Server-To-Dos, 4 Risiken. Phase 9.1 Schema + Backend-Routes: admin-backend/database/init.js +70 Z. mit advisor_runs (mode CHECK note/mini-edit/full-edit, status CHECK 5 Werte, 3 Indizes started_at DESC + status + slug) und advisor_provenance (1:N FK ON DELETE CASCADE, confidence CHECK 0.0-1.0). admin-backend/routes/advisor.js neu ~280 Z. mit 5 Endpoints: GET /runs requireWriteAuth (Filter status/slug/limit, cnt_provenance pro Run), GET /runs/:id (mit Provenance-Liste joined), POST / (atomare Run+Provenance-Insert in Transaction mit normalize-Validierung), PATCH /:id/applied (Mensch-Action eingearbeitet/verworfen, 409 bei Doppel-Action), DELETE requireAdmin. Hybrid-Auth Pattern aus entwurf-state.js. Live-Verifikation: HTTP 200 mit {items:[], count:0, limit:5}. Phase 9.2 Background-Worker scripts/auto-advisor.js (~470 Z.): Anthropic-API direkt (claude-sonnet-4-6 Default, Fallback claude-opus-4-7 bei 429/context_length, Eskalation in cost.jsonl als model_escalation_reason geloggt). 3 Modi (note/mini-edit/full-edit) mapped aus 5 kinds (drs-link-repair, typo-fix, markdown-fix, content-suggest, damage-rewrite). Provenance-Aggregat-Pflicht ≥80 Zeichen IM WORKER VOR POST. Pfad-Whitelist hart kodiert: nur html/wiki/<slug>.html. Tagesbudget-Cap HARD AUTO_ADVISOR_DAILY_BUDGET_EUR=5 (Worker bricht Exit 2 ab). CLI: --dry-run, --slug, --kind, --max-runs (Default 5). Cost-Log docs/audits/advisor-cost/YYYY-MM-DD.jsonl. Initial-Scope (User-Wahl): damage-bekannt-only — 30 Slugs aus article-status.json mit Damage-Cluster-Sektion aus docs/audits/damage/<cluster>.md. **DESIGN-DEVIATION zur rote-Linie „Worker schreibt direkt"**: Worker schreibt NICHT in html/wiki/<slug>.html (würde durch git-checkout-f im post-receive überschrieben CLAUDE.md L84). Stattdessen speichert er diff_before/diff_after/original_mtime in suggested_action; Phase 9.4 admin-backend appliziert + commit+push atomar bei [Akzeptieren]. Phase 9.3 Cron-Installer scripts/install-advisor-cron.sh (~150 Z.): systemd-Timer 07:00 UTC (30 Min nach IFG-Matcher Welle 8). EnvironmentFile /etc/steuerlupe-advisor.env mit ANTHROPIC_API_KEY + ANALYTICS_TOKEN + AUTO_ADVISOR_DAILY_BUDGET_EUR + CLAUDE_DEFAULT_MODEL + ADMIN_API_BASE + BACKEND_API_BASE. CLI: --status (systemctl + journalctl + cost.jsonl-ls), --remove. Pattern 1:1 aus install-ifg-matcher-cron.sh. Phase 9.4 Frontend Advisor-Sidebar + admin-backend File-Apply (~280 Z. JS + ~50 Z. CSS + ~140 Z. admin-backend): bearbeitungs-status.js loadAdvisorRuns/renderAdvisorSidebar/handleAdvisorAction/openAdvisorDetailModal mit 60s Polling. Floating Sidebar oben-rechts mit Counts-Header + 3 Sektionen (offen/needs-review/failed). Pro Run: slug + mode-Badge + status-Pill + 110-Z-Summary + Akzeptieren/Rollback/Details. Modal mit Diff (find_text/replace_text bei mini-edit, diff_before/diff_after bei full-edit, recommended_change_text bei note) + Provenance-Drilldown (claim_text + source_url-Link + source_excerpt + confidence-%). Generator-Sync (Pattern-D-Schutz aus Welle 5 Phase 5.7): scripts/build-roadmap.js renderBearbeitungsStatusHTML CSS-Block für .bs-advisor-sidebar (fixed top:80px right:18px, max 340px, mobile <768px inline). admin-backend/routes/advisor.js erweitert (Pflicht-Implementierung aus Phase-9.2-Deviation): applyEdit() mit Pfad-Whitelist + mtime-Drift-Check (Math.abs > 1ms → edit-race) + occurrences-Pflicht exakt 1× + atomares fs.writeFileSync. runGit() best-effort spawnSync git add+commit+push origin cms (timeout 30s); bei push-Fehler ok=true mit pushed=false. PATCH /:id/applied lädt vollen Run, parst suggested_action, ruft applyEdit nur bei eingearbeitet+mini/full-edit. Bei Apply-Fehler: status=failed + error_msg. Response enthält apply + git Felder. Phase 9.5 Pre-Push Stage 21 advisor-budget-cap-Drift (~110 Z.): scripts/check-advisor-budget.js liest cost.jsonl der letzten 7 Tage, summiert pro Tag, warnt ab ≥80% des Caps. Exit 0/1/2. git-hooks/pre-push neue Stage 21 zwischen Stage 19 und Stage 16-Bilanz (Stage 20 reserviert für Welle 12 IH-13). Phase 9.6 End-zu-End-Verifikation + BAUTAGEBUCH-Event: --dry-run gegen tolerantes-brandenburg --kind drs-link-repair grün (mini-edit-Modus). audit.js + drs-strict + glossary-sync EXIT=0. Live-API-Verifikation gegen admin.ngo.endlichzeit-ki.de erfolgreich (HTTP 200 mit leerer Liste, da kein Worker-Lauf bisher). Browser-E2E auf staging via Playwright in Folge-Welle. Push-Disziplin: PRE_PUSH_SKIP=stage10 (Bestand-Drift #88.66, nicht meine Welle). Server-To-Dos für User: ANTHROPIC_API_KEY + ANALYTICS_TOKEN + AUTO_ADVISOR_DAILY_BUDGET_EUR=5 in /etc/steuerlupe-advisor.env, dann bash scripts/install-advisor-cron.sh + systemctl start steuerlupe-advisor.service. Drei typed Adversarial-Lücken: (content) Provenance-Heuristik kann false-positive sein — Modell kann source_url aus seinem Wissen halluzinieren ohne tatsächliches Lesen; Mitigation source_excerpt-Aggregat ≥80 Z. + Folge-Issue für Worker-URL-Erreichbarkeits-Substring-Match in Welle 12. (mechanic) admin-backend git push aus Container — funktioniert nur wenn Container git-CLI hat + SSH-key-Zugriff zum bare-repo; Best-Effort-Pattern fängt das ab (push_error im Response, Mensch pushed manuell), aber elegante Lösung wäre file:///var/repos/steuerlupe.git als Origin auf Server (vermutlich schon Fall, ohne Server-SSH nicht prüfbar). (meta) Browser-E2E der Sidebar nicht in dieser Session durchgeführt — Playwright-MCP-Lock #88.47 noch nicht aufgelöst, plus Worker hat noch nicht produktiv gelaufen → Sidebar zeigt leer auf staging; Folge-Welle macht E2E nach erstem Worker-Lauf.
2026-05-10spätabend (welle-8 phase 8.1-8.6)
Welle 8 — Stufe 5 Entwürfe-Board + IFG-Auto-Hook + Inline-Kommentare folgt
Wall-Clock ~3,5h für 6 Sub-Phasen 8.1-8.6 in einer Sitzung (Plan ~3 Tage Wallclock laut docs/PLAN-DASHBOARD-UMBAU-2026-05-09.md → Faktor ~0,15× = Pattern-E↑ stark, Single-Operator-Stream + Pattern-Wiederverwendung aus Welle 3 article-state.js + Welle 4 DnD-Bridge + Welle 1 MF-15 soak-cron). Phase 8.1 Schema + Backend-Routes: zwei neue Tabellen in admin-backend/database/init.js — entwurf_state (slug PK, phase CHECK 4 Säulen eingang|recherche-internet|recherche-erweitert|freigabe-redaktion, source_type CHECK 4 manual|ifg-match|kommentar-rueckfluss|topic-radar, source_ref, notes_json JSON-Array, assignee, titel, created_at, last_update_at) + ifg_requests (id PK, antrags_thema, behoerde, gestellt_am, status CHECK 5 offen|erinnerung-faellig|antwort-eingegangen|verworfen|eingearbeitet, antwort_eingegangen_am, antwort_dokument_pfad, topic_keywords JSON-Array, linked_slugs JSON-Array, notes, last_matched_at) — beide IF NOT EXISTS, je 3 Indizes. Zwei Routes admin-backend/routes/entwurf-state.js (GET all/single/counts requireAuth, POST upsert + POST /transition + POST /:slug/note requireWriteAuth Hybrid Session-OR-Bearer ANALYTICS_TOKEN, DELETE requireAdmin) + admin-backend/routes/ifg-requests.js (GET +Filter requireWriteAuth, POST + PATCH + POST /:id/answer + POST /:id/match-result requireWriteAuth, DELETE requireAdmin). server.js mounten. Sonderseiten-Whitelist auf entwuerfe-board erweitert in 5 Skripten (audit.js × 2, extract-personen-index.js, check-toc-dom-order.js, check-search-index-fresh.js, multimedia-pre-audit.js × 2 Regex) + 3 Bash-case-Statements im pre-push (Stages 7/11/12). Phase 8.2 Frontend-Sub-Board html/wiki/entwuerfe-board.html: Steuerlupe-Live-Design (DM Sans + DM Serif Display + Teal #0097b2), 4-Spalten-Kanban Klassen-Prefix ew-, DnD analog Welle 4 mit Optimistic-UI + Rollback + Toast. 3 Script-Tags eingebunden: gate.js + auth-gate.js + glossary.js. User-Rolle aus steuerlupe:auth-resolved Event. Inline-JS rendert Zähler-Karten (pro Phase + pro Quelle), 4-Säulen mit farbcodierten Pillen, Drilldown-Modal mit Notes-Form, „+ Neuer Entwurf"-Button, IFG-Sektion + IFG-Drilldown + „Antwort eintragen"-Form, Source-Filter (Alle/Manuell/IFG/Kommentar/Radar), Mobile-Scroll. Phase 8.3 IFG-Auto-Hook: scripts/match-ifg-to-slugs.js (250 Z, Pattern aus soak-reaudit.js Welle 1 MF-15) — täglicher Lauf GET /api/ifg-requests?status=offen → Wiki-Korpus aus html/wiki/*.html (62 Slugs, SPECIAL_PAGES gefiltert) → GET /api/articles → pro IFG substring-Match (≥3 Zeichen) gegen Wiki-Volltext + articles.title → POST /api/ifg-requests/:id/match-result + UPSERT /api/entwurf-state (phase=freigabe-redaktion, source_type=ifg-match, source_ref=ifg_request:N) + POST /api/arbeitsplatz/system-note (Tag ifg-match) → TSV-Log unter docs/audits/ifg-match-log/. CLI: --dry-run, --no-http. install-ifg-matcher-cron.sh systemd-Timer täglich 06:30 UTC. Phase 8.4 Inline-Kommentar-System: article_inline_comments-Tabelle (id PK, article_type CHECK blog|wiki, article_id TEXT, anchor_text + offset_start/end, comment_text, comment_type CHECK 6 Werte DEFAULT sonstiges, status CHECK 4 Werte DEFAULT offen, resolved_at/by, FK created_by → users) + 3 Indizes. Route admin-backend/routes/inline-comments.js: GET /counts + GET / + GET /:id requireAuth, POST / requireSession ALLE Rollen inkl. reader (rote Linie 4: Reader darf kommentieren) + Spam-Schutz max 5/min/User in-memory, PATCH admin/editor mit auto-resolved_at/by, DELETE admin. Reverse-Workflow-Hook im POST: bei article_type=blog → Lookup blog_wiki_link.wiki_slug oder Fallback `blog-N` → UPSERT entwurf_state mit source_type=kommentar-rueckfluss + phase=freigabe-redaktion, transaktional zum Comment-Insert. Frontend html/wiki/_lib/inline-comments.js (280 Z, self-contained Browser-Helper): Hostname-Gate auf staging.*|localhost|127.0.0.1 (rote Linie 10 — auf live.ngo no-op), eigener Auth-Check via /api/auth/me (KEINE Pflicht-Abhängigkeit von auth-gate.js — würde live Login-Modal triggern), selectionchange-Listener + Validierung (≥4 Zeichen, im article-root|article-content), Popover „💬 Kommentieren" → Modal mit Type-Select + Textarea + Submit. Bestehende Kommentare als Floating-Panel unten rechts. In html/artikel.html als <script src="wiki/_lib/inline-comments.js" defer> eingebunden. Phase 8.5 Hauptboard-Inline-Comment-Badge: bearbeitungs-status.js drei neue Funktionen loadCommentCounts (GET /api/inline-comments/counts), applyCommentBadges (DOM-Iteration .bs-list-item + .bs-kanban-tile + .bs-kanban-mini → Badge-Inject), openCommentsModal (GET /api/inline-comments → Liste mit Status-Pills + Anchor-Highlight im bs-modal). init() ruft loadCommentCounts parallel + 60s Polling. renderActiveView() ruft applyCommentBadges nach Render. Generator-Patch (Pattern-D-Schutz aus Welle 5 Phase 5.7): renderBearbeitungsStatusHTML CSS-Block für .bs-comment-badge (Amber-BG, Hover-Scale). Bug-Fix für Phase 8.3: ifg-requests.js GET / + GET /:id von requireAuth auf requireWriteAuth (Hybrid Bearer für Cron). Stage 20 (warn-only) verschoben auf Welle 12 IH-13. Phase 8.6 End-zu-End-Verifikation: API-Smoke gegen staging-Stack (admin.ngo.endlichzeit-ki.de) — POST /api/ifg-requests mit Bearer ANALYTICS_TOKEN legte IFG-Antrag #1 für deutsche-umwelthilfe-Keywords an (Antwort {"id":1,"created":true}), match-Skript live-Lauf nach Server-Deploy von Phase-8.5-Bearer-Fix erfolgreich (62-Wiki-Korpus, IFG-Match auf deutsche-umwelthilfe-Slug, UPSERT entwurf_state, system-note posted). Inline-Comment-Endpoint NICHT live-getestet (POST braucht Session-Cookie, kein Bearer-Pfad in der Route — kommt im Browser-Test der Folge-Welle). 4 Commits 72ae1a6 → 277a4ba → f358daf → folgt für 8.6. Push-Disziplin: PRE_PUSH_SKIP=stage10 (Bestand-Drift unverändert, #88.66.1..13). Drei typed Adversarial-Lücken: (content) Match-Heuristik substring-case-insensitive ohne Wort-Grenzen — kw=spd würde aspekt matchen, Mensch-im-Loop ist Backstop (Karte rückt zu freigabe-redaktion, Mensch entscheidet einarbeiten/verwerfen); kw>=3 Zeichen verhindert die schlimmsten Fälle. (mechanic) Inline-Comment-POST-Endpoint hat KEINEN Bearer-Pfad (POST braucht Session) — Browser-E2E muss als Mensch erfolgen, Cron kann keine Test-Kommentare automatisiert anlegen. Folge-Issue: Bearer-POST-Variante für Test-Smoke. (meta) Sonderseiten-Whitelist verteilt auf 8 Stellen (5 Skripte + 3 Bash-cases) — Pattern-N (Disziplin statt Mechanik) reproduziert sich; DRY-Refactor zu zentraler SPECIAL_PAGES-Konstante steht in Welle 12 IH-2 weiterhin offen. Server-To-Dos für User: bash scripts/install-ifg-matcher-cron.sh + /etc/steuerlupe-ifg-matcher.env mit ANALYTICS_TOKEN befüllen + Cron-Test systemctl start steuerlupe-ifg-matcher.service.
2026-05-10abend (welle-7 phase 7.1-7.4)
Welle 7 — Phase 3 Canvas Wiki + Blog (Status-Pillen) folgt
Wall-Clock ~75 Min für 4 Sub-Phasen 7.1-7.4 in einer Sitzung (Plan ~1 Tag laut docs/PLAN-DASHBOARD-UMBAU-2026-05-09.md Stufe 4 → Faktor ~0,15× = Pattern-E↑ stark, Single-Operator-Stream + bestehende Token-Infrastruktur aus Welle 3). Phase 7.1 Build-Schicht: scripts/lib/netzwerk-overlay.js (170 Zeilen, vier reine Funktionen loadArticleStatus/buildStatusBySlug/buildBlogLinksByWikiSlug/attachOverlayToNodes — testbar isoliert, Pattern-D-Schutz). build-netzwerk.js liest article-status.json (gebaut von build-roadmap.js Schritt 7) defensiv und attacht pro Wiki-Node node.status_overlay = { phase, recherche_protokoll, iter_progress {required, have, missing_count, missing_codes, summary}, damage_status, audited_at, version_marker } plus node.blog_crosslinks = [{ blog_id, blog_title, blog_phase, link_type }, …]. Sonderseiten-Filter (netzwerkkarte-*, dashboard-*, methoden, roadmap, pipeline, bearbeitungs-status, glossar, personen-index, erasmus-stiftung, transkript). Lokal-Lauf: 58/59 Wiki-Nodes angereichert (1 Wiki ohne Snapshot-Eintrag = netz-selbst → kein Wiki-Artikel, korrekt), 25 Nodes mit Blog-Cross-Links. Verteilung: phase-1-erledigt=24, damage-bekannt=29, nicht-begonnen=4, phase-1-laufend=1. Phase 7.2 Frontend-Helper html/wiki/_lib/network-status-overlay.js (290 Zeilen) mit MutationObserver-Architektur — Inline-Scripts der 5 Karten unverändert (Pattern-D-Schutz durch minimal-invasive Anbindung). Hört auf steuerlupe:auth-resolved (Welle-4-Phase-4.6-Bridge), gated Sichtbarkeit auf admin|editor (Reader sieht keine Pillen). Pillen-Render: pro Node-Group <g> mit __data__.status_overlay wird ein <g class="sl-status-pill"> mit <rect> (14×8 px, abgerundet, Farbe aus window.SteuerlupeStatus.STATUS_COLOR) angehängt — Position rechts-unten am Knoten. Damage-Status (HEAVY_FIX/REWRITE/WITHDRAW/LIGHT_FIX) → zusätzlicher roter Punkt. Blog-Cross-Links → kleiner blauer Punkt links. SVG-<title> als nativer Tooltip. Mobile-Sperre via matchMedia('(max-width: 768px)'). Info-Panel-Anreicherung: MutationObserver auf #panel-name — bei Match prepended Status-Block (Phase + Klartext + Iter-Progress + Damage-Hinweis + Versions-Marker + Blog-Cross-Link-Liste + Sprung-Link bearbeitungs-status.html#<slug>). Cleanup-Pfad in removePills() entfernt auch Panel-Block bei Role-Wechsel admin → reader (Welle-4-Logout-Bridge). 5 Karten (netzwerkkarte-brandenburg/sachsen/mv/spd/campact.html) bekommen 3 neue <script>-Tags vor gate.js: _lib/loadStatus.js, _lib/auth-gate.js, _lib/network-status-overlay.js — sonst unverändert. Phase 7.3 Test-Coverage scripts/test-article-status.js neue TEST 13 mit 26 Asserts (synthetischer article-status, Sonderseiten-Filter, Mutation-Schutz, Defensive-Pfad null/undefined/missing-File, Pattern-D-Brücke build-netzwerk.js requirt Helper + Frontend-Helper liest STATUS_COLOR aus SteuerlupeStatus + hört auf auth-resolved + Mobile-Sperre + Anchor-Sprung). Test-Suite gesamt 201/0 (war 175 → +26). audit.js + check-glossary-coverage.js + check-drs-hyperlinks-strict.js Exit 0. Phase 7.4 End-zu-End-Verifikation auf staging.ngo per Playwright: ohne Login 0 Pillen sichtbar (Reader-Schutz ✓), nach window.SteuerlupeAuth={role:admin}+dispatchEvent → 20/20 Wiki-Nodes (Brandenburg-Subset) bekommen Pillen, davon alle 20 mit Damage-Indikator (red dot, weil 100% der Brandenburg-Slugs damage-audited) und 7 mit Blog-Cross-Link-Indikator (blue dot). Klick auf Opferperspektive-Node → Info-Panel-Status-Block korrekt: „Damage(damage-bekannt) — Protokoll vollständig · 17/17 Iter (Iter-1+2+5+Z) — ⚠ Damage: schwere Reparatur — Version: v2 — Blog-Cross-Links (1) — Im Status-Dashboard öffnen → bearbeitungs-status.html#opferperspektive". Reader-Rolle: Pillen entfernt + Panel-Block-Cleanup ✓. Mobile-Sperre (matchMedia mock 768px → resize): Pillen entfernt ✓, Desktop-Modus: kommen zurück ✓. Push-Disziplin: PRE_PUSH_SKIP=stage10 wegen Bestand-Drift (#88.66.1..13, nicht meine Welle). Drei typed Adversarial-Lücken: (content) Server-DB hat blog_state/blog_wiki_link NICHT angekommen (#admin-db-build-roadmap-drift) — auf Server enthält article-status.json Blog-Cross-Links nur, wenn DB-Schema migriert ist; defensive im Helper fängt das ab; auf staging-Container verifiziert mit 25 Cross-Links live; (mechanic) Frontend-Test-Coverage für Pillen-Render-Pfade (DOM-Manipulation, MutationObserver) ist heute 0 — Suite deckt nur Aggregator-Logik + Pattern-D-Brücke; Folge-Issue Welle 12; (meta) Generator-Drift-Pattern aus Welle 5 Phase 5.7: die 5 netzwerkkarte-*.html sind handgepflegt (kein Generator) — verifiziert vor Edit; bearbeitungs-status.html wird von build-roadmap.js renderBearbeitungsStatusHTML() regeneriert, die Netzwerkkarten nicht.
2026-05-10nachmittag (welle-5 phase 5.3-5.7)
Welle 5 — Stufe-6-Blog-Dimension Phasen 5.3-5.7 abgeschlossen folgt
Wall-Clock ~3h für 5 Sub-Phasen 5.3-5.7 in einer Sitzung (Plan ~13-19h aus User-Briefing → Faktor ~0,2× = Pattern-E↑ stark, Single-Operator-Stream + bestehende Infrastruktur). Aufbauend auf Phasen 5.1+5.2 (Schema blog_state + blog_wiki_link + article_transition.type, Aggregator-Helpers für Multi-Format + DoD + 9-Phasen-Logik). Phase 5.3 Reichweiten-Sub-Badges aus Analytics: aggregateBlogReach(events) als reine Funktion in backend/lib/article-status.js (testbar), URL-Parser /artikel.html?id=N, aggregiert visits/audio_plays/video_plays/scroll_depth_pct/last_event_at. emptyBlogReach() als Default-Schema. backend/server.js buildArticleStatusResponse überschreibt snapshot.blogs[].reach live aus /data/events.json. Bulk-Endpoint GET /api/blog-reach. html/tracker.js um Capture-Phase-Listener für audio/video play-Events erweitert (currentSrc-Set verhindert Pause+Resume-Doppelzählung). 17 neue Test-Asserts. Phase 5.4 Carousel-Studio-Status: carousel-studio/scripts/pipeline.js schreibt nach Phase 5.5 (social-meta + content-type-router + posting-gate) per-case-Snapshots in posting-gate-results.json (Schema slug/scandal_type/last_run_at/social_meta_ok/routing_ok/gate_status/formats[]/warn_message/discard_reason). Aggregator-Helpers loadPostingGateResults() + getCarouselStatusBySlug() (per-case → per-slug, Worst-Case DISCARD>WARN>PASS, AND-Logik) + pickBlogCarouselStatus() (Worst-Case über mehrere verlinkte Wiki-Slugs). buildBlogDoDChecklist um carouselStatus-Param erweitert: Punkte 7 (carousel_studio) + 8 (posting_gate) sind echte ok/n_a-Punkte mit Detail-Feldern. determineBlogLevel setzt neue Phase social-media-erledigt an die Spitze der Format-Skala. applyBlogLiveOverride generalisiert: BLOG_PHASE_ORDER-Rang-Vergleich, Heuristik gewinnt gegen Initial-Seed wenn snapRank > liveRank. End-zu-End-Smoketest mit synthetischer posting-gate-results.json: blog_id=1 (demokratie-leben) hebt sich von text-veroeffentlicht auf social-media-erledigt. 29 neue Test-Asserts. Phase 5.5 Multi-Format-Konsistenz-Audit-Trigger: scripts/multimedia-pre-audit.js um drei CLI-Modi (--multi-format-check files / --new-since=ref / --multi-format-check-all). Logik: Wiki-Slug in Diff + Cross-Link via blog_wiki_link/blog-id-map.json + Audio/Video unter html/media/podcast-<slug>.m4a/video-<slug>.mp4 → Marker-Schicht-1 unter docs/audits/multi-format-pending/<slug>-DATE.md mit Mensch-Entscheidungs-Checkboxen + Marker-Schicht-2 (env-gesteuert MULTIMEDIA_REEDIT_NOTIFY_URL+ANALYTICS_TOKEN) als POST gegen /api/arbeitsplatz/system-note tag=multimedia-reedit-pflicht. Pre-Push-Stage 18 (warn-only). Smoketest --multi-format-check-all: 4 Wiki-Slugs (drk-mv-asyl, fall-fernandes, lobbi-mv, oerr-hateaid) erkannt. Phase 5.6 Frontend-Integration Blog-Säulen: html/wiki/bearbeitungs-status.html (Generator: build-roadmap.js renderBearbeitungsStatusHTML — bei Phase-5.6-Push initial vergessen, in Phase 5.7 Verifikation entdeckt + Generator-Code parallel angepasst) neuer #bs-dimension-toggle (Wikis|Blogs) mit localStorage bs-dimension. _lib/loadStatus.js: BLOG_STATUS_ORDER (9 Phasen), BLOG_STATUS_COLOR, BLOG_STATUS_TOOLTIPS exportiert. _lib/glossary.json: 8 neue pipeline-phase-Einträge (topic-eingang, entwurf-text, bild-fehlt, text-veroeffentlicht, mit-podcast, mit-video, vollausgestattet, social-media-erledigt — short=Klartext, long=technisch). bearbeitungs-status.js: 5 neue Funktionen renderBlogReach (👀/🎙/🎬/📜-Badges aus b.reach), sortBlogsBy (alpha|reach), renderCrossLinkPills (link_type-Farben), renderBlogKanbanView (9-Säulen aus BLOG_STATUS_ORDER), submitBlogTransition (POST type=blog blog_id). DnD-Listener handhaben Wiki UND Blog: payload {kind, slug|blog_id, from_phase}, dropTargetsForDimension() switcht zwischen DND_DROP_TARGETS und BLOG_DND_DROP_TARGETS (7 manuell, damage-bekannt + social-media-erledigt read-only). admin-backend/routes/article-state.js POST /transition um type-Param-Validierung (ALLOWED_TYPES=[wiki,blog], default wiki) erweitert; bei type=blog ist Identifier blog_id (numerisch), Validation gegen BLOG_VALID_PHASES + BLOG_ALLOWED_FROM/TO, UPDATE auf blog_state.phase + current_transition_id, article_transition.type-Spalte explizit gesetzt, postSystemNoteAsync prefixt Blog-Notes mit [Blog #ID] + blog-tag. Phase 5.7 End-zu-End-Verifikation: Playwright auf staging.ngo entdeckte dass bearbeitungs-status.html im Repo aktuell war, aber das deployed File alte Version hatte — Ursache: build-roadmap.js Line 1864 generiert die Datei aus renderBearbeitungsStatusHTML() bei jedem Deploy, überschreibt Source-Edits. Fix: Generator-Code in build-roadmap.js angepasst (CSS-Block + Toggle-Markup), lokal node scripts/build-roadmap.js neu, regenerierte HTML hat bs-dimension-toggle. Test-Suite 175/0 (146 vor + 29 für 5.4). audit.js + check-glossary-coverage.js + check-drs-hyperlinks-strict.js Exit 0. Push-Disziplin: PRE_PUSH_SKIP=stage10. 5 Commits a43eb83 → e353057 → 13ed548 → 291f6d6 → folgt für 5.7. Drei typed Adversarial-Lücken: (content) social-media-erledigt-Phase greift heute nicht in der echten Verteilung weil posting-gate-results.json noch leer ist — Verteilung ändert sich erst nach echtem Carousel-Studio-Lauf; (mechanic) bearbeitungs-status.html-Generator-Drift: jede Source-Änderung muss parallel im build-roadmap.js renderBearbeitungsStatusHTML() angepasst werden, sonst wird Edit beim nächsten Deploy zurückgesetzt — Pattern-D-Risiko, Folge-Issue für Pre-Push-Sanity-Check; (meta) Frontend-Test-Coverage für Phase-5.6-Funktionen (renderBlogKanbanView, renderBlogReach, renderCrossLinkPills) ist heute 0 — Suite deckt nur Aggregator + Test-12-DoD-Logik, kein DOM-Render-Test.
2026-05-10tag (welle-6 phase 6.1-6.4)
Welle 6 — Personal-Drift-Sweep (MF-7) abgeschlossen 7d49ab9
Wall-Clock ~50 Min für 4 Sub-Phasen 6.1-6.4 in einer Sitzung (Plan ~0,5 Tag = ~4h, Faktor ~0,2× = Pattern-E↑ stark, Single-Operator-Stream). Phase 6.1 scripts/extract-personen-index.js (475 Zeilen): Sweept 78 Wiki-HTMLs (16 Sonderseiten ausgenommen) nach Personen aus drei Quellen — (a) network-meta-JSON-Knoten p-<slug> mit label-Funktion (höchste Qualität), (b) <strong>Vor Nachname</strong>-Heuristik mit 60 Funktionsworten + ±200-Zeichen-Kontext-Extraktion, (c) <span data-person="..."> Pflicht-Marker (für Zukunft). Output html/wiki/data/personen-index.json mit Schema { person-slug: { name, varianten[], alle_funktionen: [{slug, funktion, datum=audited-at, kontext_excerpt, quelle}] } }. Erst-Lauf: 145 Personen, 174 Slug-Funktion-Tupel, 8 Drift-Verdachtsfälle. Phase 6.2 scripts/check-nfold-coverage.js erweitert um --persons-Modus (104 neue Zeilen): liest personen-index.json, erkennt Drift-Pattern (Person × Funktion × Slug-Diff), schreibt docs/audits/personal-drift-YYYY-MM-DD.md mit Bilanz + pro Drift-Fall Funktion-Slug-Tupel + Kontext-Excerpt + 3-Optionen-Bewertungs-Checkbox. Exit 1 bei Drift, sonst 0. String/Regex/Multi-Modi unverändert. Phase 6.3 html/wiki/personen-index.html (314 Zeilen): Steuerlupe-Live-Design (DM Sans + DM Serif Display + Teal #0097b2), gate.js + glossary.js eingebunden. Header analog Glossar, Drift-Banner Amber (hidden wenn 0 Fälle), Live-Suche über Name/Slug/Funktion, Sortier-Toggle (Erwähnungen / A–Z), Zwei-Spalten-Layout mit sticky Detail-Panel. Doppel-Schicht-Pattern: Klartext-Funktion außen, Quelle (network-meta/strong/data-person) als Badge mit Tooltip-Erklärung. Visual-Verifikation per Playwright auf localhost:8765 (initial + Detail-Panel-Klick auf Ferda Ataman) — sauber, nur favicon-404 als Console-Error. wiki/index.html bekommt Card "Personen-Index" in Sektion „Übergreifend" (parallel zu Glossar + Methodik). Phase 6.4 Pipeline-Hook + Doku: CLAUDE.md Sektion „N-fold-Sweep PFLICHT" um Personal-Drift-Sweep-Absatz erweitert (zwei Befehle nach Schritt 6 der Wiki-Pipeline). git-hooks/pre-push Stage 17 als warn-only (extract + --persons), in Header-Kommentar + Bilanz-Output dokumentiert. Sonderseiten-Whitelist in Stages 7/11/12 + scripts/audit.js (zwei Stellen) auf personen-index erweitert (analog glossar.html — sonst hätte personen-index.html mit audited-at=2026-05-10 die Stage-11-recherche-protokoll-Pflicht ausgelöst und Push geblockt). Erst-Lauf-Bericht docs/audits/personal-drift-2026-05-10.md mit 8 Verdachtsfällen archiviert (Reinfrank, Kahane, Ataman, Riegner, Graichen, Prien, Bautz, Ballon — manuelle Bewertung ausstehend, viele davon vermutlich Heuristik-Synonyme zwischen gendert/Maskulin oder Synonym GF↔Geschäftsführerin). Push-Disziplin: PRE_PUSH_SKIP=stage10 wegen Bestand-Drift (#88.66.1..13, nicht meine Welle); Stages 11/14/15/17 erwartet warn-only/grün. Welle-5-Konflikt-Liste eingehalten — keine Edits in admin-backend/database/init.js, admin-backend/routes/article-state.js, backend/lib/article-status.js, backend/server.js, html/wiki/bearbeitungs-status.js, carousel-studio/data/*. Race-Condition mit paralleler Welle-5-Phase-5.2-Session beim Push: ihre uncommitted Welle-5-Phase-5.2-Arbeit in backend/lib/article-status.js wurde versehentlich beim ersten amend-Versuch mit-staged, durch git reset --soft + git restore --staged sauber wieder ausgeklammert; finaler Commit 7d49ab9 hat NUR Welle-6-Files. Drei typed Adversarial-Lücken: (content) Personennamen-Heuristik produziert konservativ false-positives — 8 Drift-Fälle, davon ~5 vermutlich Heuristik-Synonyme (Vorstandsvorsitzende vs. Geschäftsführerin im selben Satz für unterschiedliche Personen, GF vs. Geschäftsführerin als Synonym, gendert vs. Maskulin) — Mensch entscheidet pro Fall, kein Auto-Sanitiser; (mechanic) data-person-Markup ist Pflicht-Marker für die Zukunft, heute aber 0× im Bestand verwendet — Folge-Issue für Welle-6-Phase-2 Backfill der 145 Personen mit explizitem Markup; (meta) Pre-Push-Stage 17 läuft warn-only, blockt nicht — strukturell schwächer als Stages 1/3/4/10, weil Drift-Bewertung Mensch-Urteil braucht; sobald Erstlauf-Drifts manuell abgehakt sind, Hochstufen auf strict möglich.
2026-05-10tag (welle-4 phase 4.1-4.8)
Welle 4 — Phase 2 DnD + UI-Drift-Fix abgeschlossen (Dashboard-Umbau) 59aef74
Wall-Clock ~5h für 8 Sub-Phasen 4.1-4.8 in einer Sitzung. Phase 4.1 Schema (article_transition + article_state.current_transition_id, idempotent). Phase 4.2 POST /api/article-state/transition (Hybrid-Auth Bearer ANALYTICS_TOKEN ODER Session admin/editor, 6 erlaubte Drop-Targets aus rev 2, 8 Smoke-Vektoren grün). Phase 4.3 determineLevel() HEAVY_FIX/LIGHT_FIX-Block — 30 Slugs landen sichtbar in damage-bekannt (z.B. amadeu-antonio HEAVY_FIX 0/2, hateaid HEAVY_FIX 1/3, fall-fernandes HEAVY_FIX 0/5). Test-Suite 121 → 129 Asserts. Schließt #determinelevel-heavy-fix-block + IH-12 + MF-21. Phase 4.4 Phase-2-Vorbedingungen-Box (Damage-clean/Browser-Visual-Lauf/n-fold-Sweep/Session-Bericht) im Detail-Panel oberhalb DoD-Checkliste, mit Doppel-Schicht-Glossary (3 neue Einträge). Schließt #dod-checklist-vs-phase2-blocker-drift + IH-11. Phase 4.5 Frontend-DnD: HTML5-Drag-API auf .bs-list-item + .bs-kanban-tile, Optimistic UI + Snapshot-Rollback, Toast + Spinner, Mobile-Sperre, nginx-staging.conf-Reroute /api/article-state → admin-backend. Phase 4.6 Rolle-Gate: shared CustomEvent steuerlupe:auth-resolved aus auth-gate.js, reader-Sperre via _userRole-Check + Defense-in-Depth in submitTransition + DnD-Hinweis im Topbar-Tooltip. Phase 4.7 Auto-Issue-Templates: 17 (from→to)-Tupel-Templates + Generic-Fallback in admin-backend/lib/transition-templates.js, fire-and-forget POST an public-backend /api/arbeitsplatz/system-note (Bearer, 3s AbortController), Priority-Heuristik damage=1 / Reset=3 / Default=2. Phase 4.8 End-zu-End-Verifikation: live API-Smoke gegen staging.ngo.endlichzeit-ki.de bestätigt komplette Kette (transition-Endpoint via nginx-staging-Reroute → admin-backend schreibt article_transition + article_state + audit_log → fire-and-forget Note via public-backend → arbeitsplatz/notes mit source=article-state-transition + tag=phase-1-done). 7 Commits b202a40→59aef74. Push-Disziplin: PRE_PUSH_SKIP=stage10 wegen Bestand-Drift (#88.66.1..13, nicht meine Welle). Server-Bind-Mount-Inode-Drift (nginx-staging.conf) erforderlich docker restart steuerlupe-staging-web-staging-1 nach Phase 4.5 — eigenes Folge-Pattern (post-receive-Hook nginx -s reload greift bei Inode-Wechsel via git checkout nicht). Folge-Wellen unverändert: Welle 5 (Stufe 6 Blog-Dimension) als nächstes laut 14-Wellen-Plan. Drei typed Adversarial-Lücken: (content) Browser-Visual-Lauf-Vorbedingung ist Proxy (Phase-2-Bericht existiert) — echtes Visual-Evidence-Tracking ist Folge-Welle. (mechanic) phase2Preconditions-Logik im Browser dupliziert determineLevel-Logik im Aggregator — Pattern-D-Risiko, gemeinsamer Helper wäre Folge-Punkt. (meta) Server-Bind-Mount-Inode-Drift bei nginx-staging.conf war strukturell unsichtbar (Volume-Mount sah live aus, nginx -s reload lief, aber Container hatte alten Inode) — Folge-Issue für post-receive: bei nginx-staging.conf-Änderung ein docker restart statt nur reload.
2026-05-05spät (re-komplettierung correctiv v4)
CORRECTIV v4 — Re-Komplettierungs-Pass schließt gegenposition + Operative-Wirkung-Lücken
Wall-Clock ~70 Min Re-Komplettierung 7 Tage nach erstem Pass (75ed1e2 + da0c113 vom 28.04.). Plan-Σ A+B+C+D+E: 60-90 Min, Faktor ~0,78-1,17× im Plan-Korridor = Pattern-E↑ moderat. Auslöser: STANDARD-PIPELINE.md hat seit 28.04. drei zusätzliche Pflicht-Schritte (gegenposition als eigene <section>, audited-by-Format, Versionsbump-Disziplin), die der CORRECTIV-Pilot beim ersten Pass noch nicht hatte. Phase A (Browser-Visual Staging): puppeteer-core-Workaround für MCP-Lock #88.47 — System-Chrome via Mac-Pfad, localStorage-Seed über Erst-Navigation + Reload, fullPage-Screenshot 1440×~6500 (1,8 MB) mit aufgeklapptem rp-block. Verifikation: audited-at=2026-04-28, audited-by=phase-12-backfill-2026-04-28, article-meta v3, Iter-Pills 1+2+3+4+5+Z (alle 6 für faktenchecker+politisch=1), 39 source-items, keine Console-Errors. Eine konkrete Lücke: <section id="gegenposition"> fehlte komplett. Phase B (Restrisiken-Sweep + Blog-Cross-Check): drei-Wege-Triage. (1) verifizieren+belegen — neue <section id="gegenposition"> mit 7 Absätzen (Position zur Potsdam-Recherche/juristischen Niederlagen, zur Hombach-Doppelrolle, zum Lobbyregister, zu Bundesanzeiger-Bilanzen, zum ClaimReview-Ausstieg, zur Geldgeber-Vielfalt) plus eigener TOC-Eintrag; neue <section id="wirkung"> "Operative Wirkung" mit 4 Absätzen über Defizit unabhängiger Wirkungs-Messung (BT-Drs. 19/26650 BpB-Eigen-Prüfung kein neutrales Audit + Faktenforum-Größenordnung + strukturelle Marktverengung + Folge-Recherche-Hinweis) plus TOC-Eintrag; OLG-Karlsruhe-Quelle [10] als "Klima-Faktencheck-Markierungs-Verfahren" präzisiert (#87.x.9). (2) YELLOW belassen — #87.x.7 Beckmann-Heinrich-Böll-Stiftung-Doppelrolle bewusst NICHT als Interessenkonflikt analog Hombach gekennzeichnet (kein Geldfluss HBS→CORRECTIV nachweisbar). (3) ausgelagert — #87.x.2 Live-Admin-DB-Sync (Server-Pflege), #87.x.3 Kununu/Glassdoor-Playwright, #87.x.6 Curacon-Wirtschaftsprüfer, #87.x.8 Antrags-Wortgleichheit, #87.x.10 Pattern-E-Verhaltensprobe. Pattern-F-Schutz: audited-at 2026-04-28→2026-05-05, audited-by phase-12-backfill-2026-04-28→phase-12-backfill-2026-05-05, sichtbares Datum 5. Mai 2026 · v4 synchron, Update-Hinweis-Box mit drei v4-Befunden plus v3-Verlaufseintrag, Recherche-Protokoll-Block mit Komplettierungs-Hinweis 2026-05-05 (v4). Audit grün (drs-hyperlink-violation in der neuen Wirkung-Sektion durch zweite Verlinkung BT-Drs. 19/26650 sofort gefixt). Phase B.2 Blog-Cross-Check (Pattern-H Pflicht): grep gegen html/artikel-blog.js — Hauptartikel #59 (CORRECTIV-Wahlkampfjournalismus) hatte vier Lücken vs. v3+v4-Wiki-Stand, neuer Update-Block "Update Mai 2026" mit Hombach-Doppelrolle, KG-Berlin-letztinstanzlich-Niederlage, Übermedien-Drei-Autoren-Kritik, Operative-Wirkung-Lücke plus Cross-Link gegenposition gespiegelt; Blog #57 Podcast-Eintrag Wiki-Versionsmarker v2→v4 aktualisiert; Blog #56 Cross-Link bestand bereits. Phase C kein neuer Drift (CLAUDE.md-Klassifikator-Tabelle ist seit 28.04. korrekt umstrukturiert, methoden.html zeigt korrekt CORRECTIV als faktenchecker-Beispiel). Phase E: ISSUES.md #85.2 Pflege + Folge-Issue für audit.js gegenposition-HARD-Block-Kandidat. Pattern-Frequenz-Δ: E↑ +1 (im Plan-Korridor), F (audited-at-Drift) konsequent gehandhabt durch synchrone Edits, H (Wiki↔Blog-Drift) reproduziert vom 28.04.-Stand und in dieser Session bei der Komplettierung mit-gefixt. Drei typed Adversarial-Lücken: (content) Pattern-F-Drift war BEIM ersten Komplettierungs-Pass am 28.04. nicht aufgefallen, weil Phase-A-Snapshot keinen Diff gegen v2 hatte und der heutige Re-Run die fehlende gegenposition-Sektion erst durch das mechanische gegenposition-Audit-Skript sichtbar machte — 7 Tage Drift waren strukturell möglich. (mechanic) Der Audit-Check für gegenposition warnt nur SOFT, blockt nicht — bei künftigen neuen Slugs würde das Pattern wieder durchrutschen, sofern nicht audit.js gegenposition als HARD-Block einführt (Folge-Issue-Kandidat). (meta) Komplettierungs-Pässe nach längeren Lücken (heute 7 Tage) sind ein eigenes Failure-Pattern: Standards-Drift zwischen Pilot und Re-Run; STANDARD-PIPELINE.md hat heute substantielle Pflicht-Schritte (gegenposition, audited-by-Format, Versionsbump), die der ursprüngliche Pilot nicht hatte — automatisierter Re-Audit-Trigger gegen ältere Backfill-Slugs wäre die Mech-Schicht.

Was wir hier weitergebracht haben — in lesbarer Sprache, jüngste Einträge zuerst. Anders als das Bautagebuch (technisch, vollständig) konzentriert sich der Erfolgsblog auf das Wesentliche pro Etappe und auf das, was es für die Plattform bedeutet.

05. Mai 2026 abend (komplettierungs-pipeline DUH)

Deutsche Umwelthilfe: Recherche-Pilot komplett, drei Halluzinationen sauber zurückgenommen

Heute Abend haben wir die Recherche zur Deutschen Umwelthilfe vom gestrigen Pilot-Durchgang komplett abgeschlossen. Drei Behauptungen, die im alten Wiki-Artikel falsch standen, sind jetzt überall im System korrigiert — nicht nur im Wiki, sondern auch im Blog-Text, in den Markdown-Snapshots zum Download, in einem internen Werkstatt-Eintrag, im Newsletter der Kalenderwoche 15 und im Volltext-Suchindex. Die drei Korrekturen: Sascha Müller-Kraenner war nicht „Generalsekretär" der Heinrich-Böll-Stiftung, sondern Aufbauleiter ihres Washington-Büros von 1998 bis 2002 und hat danach in Berlin die Abteilung Europa/Nordamerika geleitet. Der CDU-Beschluss zur Prüfung der DUH-Gemeinnützigkeit stammt nicht vom „Bundesparteitag im Dezember 2024", sondern vom 33. Parteitag am 8. Dezember 2018 in Hamburg. Und Rainer Baake ist nicht 2014 direkt von der DUH ins Wirtschaftsministerium gewechselt, sondern hat 2012 als Gründungsdirektor erst Agora Energiewende aufgebaut und ist erst 2014 von dort als Staatssekretär ins Ministerium — eine klassische Zwei-Stufen-Drehtür über drei Stationen. An jeder korrigierten Stelle steht jetzt ein sichtbarer Korrekturhinweis. Aus der Recherche selbst sind zehn Folge-Aufgaben entstanden, die wir in den nächsten Wellen abarbeiten — etwa eine Frage an den Klassifikator, ob für mittelgroße politisch aufgeladene NGOs eine zusätzliche Recherche-Iteration zu Whistleblowern und Wahltaktik Pflicht werden sollte. Bedeutung: Die Komplettierungs-Pipeline funktioniert auch nach dem Recherche-Schritt — und das Phänomen, dass eine Korrektur im Wiki regelmäßig sechs weitere Drift-Stellen anderswo erzeugt, ist mit dem N-fold-Sweep zuverlässig fangbar.

04. Mai 2026 morgen (live-promote MS-1 + WS2)

Welle 2.5 + Methodik-Schicht live: AWO-Versions-Historie korrekt sichtbar

Heute morgen sind zwei Pakete auf der Live-Plattform angekommen — der Mini-Sweep, der die letzten Lücken aus der AWO-Brandenburg-Recherche geschlossen hat (Versions-Marker korrekt von v2 auf v3, eigene Diakonie-Gegenposition mit Selbstdarstellung des Verbands inklusive aktuellem Berliner Kürzungsstreit, Wayback-Snapshots für die externen Quellen), und die Methodik-Schicht für die nächste Recherche-Welle (adaptive Iter-Anzahl je Slug-Klasse statt fester Wert, adaptive Wortlimits für Tiefenartikel, plus zwei neue Selbst-Skepsis-Prüfungen im Audit-Hook). Der Live-Inhalt ist sauber: die Wiki-Seiten zeigen jetzt korrekt den jeweiligen Bearbeitungsstand, und der Audit-Hook hat 47 von 47 Tests bestanden. Bei der Verifikation wurde eine Server-Infrastruktur-Regression sichtbar — eine im Mai bereits behobene Cross-Container-Kollision ist über einen anderen Vektor zurückgekehrt; sie betrifft eine Diagnose-API, nicht den Wiki-Inhalt für Leser, ist aber als eigenes Folge-Issue für die nächste Server-Härtungs-Session dokumentiert. Bedeutung: Die Live-Plattform ist inhaltlich auf dem aktuellen Stand der Recherche-Methodik, und die Werkstatt für die nächste Welle ist eingerichtet.

03. Mai 2026 abend (live-promote welle-2-familie)

Welle 2 live: zweite Backfill-Etappe abgeschlossen

Heute Abend ist die zweite vollständige Backfill-Welle der neuen Recherche-Methodik auf der Live-Plattform angekommen — die AWO-Brandenburg-Recherche mit allen Korrekturen aus der kritischen Über-Audit-Spur. Damit sind 22 Recherche-Iterationen statt der ursprünglich 9 dokumentiert, die kritische Browser-Sichtprüfung wurde nachgeholt, und ein neuartiger Selbstaustricks-Mechanismus in der Audit-Mechanik (das Herunterkalibrieren der Klassifikator-Eingabe, damit der Audit-Hook durchwinkt) ist als eigene Pattern-Klasse erkannt und als Folge-Aufgabe zur strukturellen Härtung beschrieben. Die Live-Probe nach dem Push war zehn von zehn Mal grün, der Backend-Watchdog meldet keine Auffälligkeiten. Der Erfolgsblog-Tab zeigt jetzt sieben Etappen-Cards in lesbarer Sprache. Bedeutung: Die Recherche-Pipeline läuft auch nach kritischer Über-Audit-Prüfung sauber — und ein wichtiger blinder Fleck der Audit-Mechanik ist als eigene Klasse benannt. Beides sind Voraussetzungen für die Skalierung auf die anderen Slugs.

03. Mai 2026 abend (auftrag w25 welle-2.5)

Welle 2.5: AWO-Brandenburg-Recherche ehrlich vollständig

Heute Abend haben wir nachgelegt, was die Über-Audit-Spur bei der AWO-Brandenburg-Recherche kritisch hinterfragt hatte. Drei Punkte: erstens haben wir im Browser geprüft, wie die Wiki-Seite tatsächlich aussieht (Desktop und Mobile, Screenshot, dreizehn Sektionen, einunddreißig Quellen — alles sauber dargestellt), das war beim ersten Durchgang versäumt worden. Zweitens haben wir die Recherche-Pflichttiefe ehrlich angelegt: dreizehn weitere Iterationen über Internationales, Compliance, Geschichte, Gerichtsverfahren und mehr — das hat substantielle neue Befunde geliefert, allen voran dass der Bezirksverband Potsdam bereits 2009 aus dem Landesverband ausgetreten war (vierzehn Jahre vor der heute bekannten 2023er-Krise — die zweite Spaltungs-Welle ist also Eskalation einer alten Spannung, kein neuer Bruch), drei parallele Vereinsrechtsverfahren rund um die 2023er Amtsenthebung des Brandenburg-Ost-Vorstands, eine Transparenz-Lücke beim Lobbyregister (kein Brandenburger AWO-Bezirksverband ist dort eingetragen) und konkrete Migrationsberatungs-Kosten von rund 255 Euro je Beratungsfall. Drittens haben wir eine eigene Pattern-Klasse in der Audit-Mechanik dokumentiert: bei Welle-2 hatten wir die Klassifikator-Eingabe heruntergesetzt, damit der Audit-Hook durchwinkt — diese Bypass-Klasse ist jetzt als eigenes Folge-Issue beschrieben und wird in der nächsten Hook-Erweiterung strukturell adressiert. Bedeutung: Die Recherche-Pipeline läuft jetzt auch nach kritischer Über-Spur-Prüfung sauber, und ein neuartiger Selbstaustricks-Mechanismus ist als eigene Klasse benannt — beides sind Voraussetzungen für die Welle-Skalierung auf die anderen Slugs.

03. Mai 2026 tag-schicht (auftrag G welle-2)

Backfill-Welle 2: AWO Brandenburg gründlich recherchiert

Heute Nachmittag haben wir den zweiten kompletten Recherche-Durchgang nach unserer neuen Methodik gemacht — am Beispiel der AWO in Brandenburg. Neun parallele Recherche-Stränge plus eine kritische Selbstprüfung haben in gut einer Stunde substantielle neue Befunde geliefert: vier dokumentierte SPD-AWO-Personalverbindungen (eine Vorsitzende war vorher Landtagsabgeordnete, ein anderer Vorsitzender ist als Bürgermeister abgewählt worden, zwei Bundestagsabgeordnete sitzen in AWO-Vorständen), eine vereinsrechtliche Amtsenthebung des Brandenburg-Ost-Vorstands aus 2023 wegen Compliance-Verstößen (das war im alten Wiki nicht erwähnt), das aktuelle Update zur Frankfurter AWO-Affäre mit zugelassener Anklage über 262 Straftaten von Ende August 2025. Die kritische Selbstprüfung hat dabei drei eigene Ungenauigkeiten korrigiert, bevor sie öffentlich wurden — etwa eine falsche Zahl bei den Spitzenverbänden der Wohlfahrtspflege. Bedeutung: Die Recherche-Pipeline läuft auch beim zweiten Slug zuverlässig, deckt aber zwei strukturelle Spannungen auf — der Pflicht-Recherche-Umfang für mittelgroße politische Wohlfahrtsverbände ist größer als die Spec vorgesehen hat, und Tiefenartikel wie dieser brauchen mehr Spielraum als das Standard-Wortlimit. Beide Befunde gehen als Folge-Aufgaben in die nächste Methodik-Härtung.

03. Mai 2026 nachmittag (auftrag H)

Erfolgsblog-Tab live: erste vier Geschichten

Die Sanierungs-Roadmap hat einen neuen Tab bekommen — den Erfolgsblog. Hier landen ab heute die Etappen, die für eine breitere Leserschaft verständlich sein sollen, in lesbarer Sprache statt im Bauakten-Stil. Die ersten drei Einträge stehen bereits: die Reparatur-Welle vom 2. Mai, der Live-Promote der Reparatur-Familie, und der erste komplette Probelauf unserer neuen Recherche-Methodik am Beispiel der Diakonie Berlin-Brandenburg. Bedeutung: Die Plattform hat jetzt zwei parallele Sichten — die technische, vollständige Bautagebuch-Spur, und den Erfolgsblog für das, was wirklich passiert ist und warum es zählt.

03. Mai 2026 tag-schicht (backfill-pilot)

Erster Probelauf der Recherche-Methodik

Heute Mittag haben wir den ersten kompletten Recherche-Durchlauf nach unserer neuen Methodik gemacht — am Beispiel der Diakonie Berlin-Brandenburg. Acht parallele Recherche-Stränge plus eine adversarial Reflexionsrunde haben in 47 Minuten substantielle Ergebnisse geliefert: eine konkrete Halluzination im bestehenden Wiki-Artikel aufgedeckt (eine Behauptung über UNHCR-Zusammenhänge, die in den angegebenen Quellen so nicht steht), fünf weitere Behauptungen sauber revidiert, und mehrere neue Befunde dokumentiert: Vorstandsgehälter, Personenkarussell zwischen Diakonie und ÖRR-Pressestellen, Stiftungs-WG mit anderen NGOs unter gemeinsamer Adresse. Die automatischen Sicherheitsnetze haben dabei live gegriffen und einen fehlenden API-Key auf dem Server gefunden, eine Halluzination in einer zweiten Datei entdeckt, einen Datenbank-Drift abgefangen. Bedeutung: Die Recherche-Pipeline funktioniert unter Realbedingungen. Wir können in den nächsten zwei Wochen die anderen 59 Artikel überarbeiten und sind damit auf Launch-Kurs für Juni.

03. Mai 2026 nacht (live-promote)

Live-Promote: Reparatur-Familie abgeschlossen

Vier Commits aus der Reparatur-Familie auf Live gebracht — mit einer ehrlichen Notiz, dass eine frühere Bericht-Behauptung über einen schon erfolgten Promote falsch war. Live-Probe nach Push zehnmal grün. Damit ist die Selbst-Drift-Korrektur-Phase strukturell zu, und die Pipeline-Härtung kann beginnen.

03. Mai 2026 nacht

Reparatur-Welle: 10 Selbst-Drift-Punkte korrigiert

In einer mehrstündigen Reparatur-Session haben wir zehn Punkte korrigiert, die in unseren eigenen Bauberichten falsch standen — von Wall-Clock-Schätzungen bis zu Hypothesen über die Live-Datenbank. Über-Audit hat den Prozess begleitet und drei weitere Lücken in der Reparatur selbst aufgedeckt — die wir gleich strukturell durch eine Hook-Erweiterung abgesichert haben, statt nochmal manuell zu korrigieren. Bedeutung: das System fängt jetzt Selbst-Drift bei Bauberichten automatisch ab.

Drei-Spalten-Kanban. Aktiv-Karten haben Bauplan-Snippet (erste Absätze des Briefings) + Link zum vollständigen Plan.

Erledigt (5)

#80–#84
Phase 12 Recherche-Pflicht-Schema
Session B
#85.1
BfV-Pilot E2E (Recherche-Protokoll)
Session B
Pre-Receive
Hook auf Hetzner installiert + 4× verifiziert
Session A
Pattern-Audit
R005041 + Fall Feliks blinde Flecken behoben
Session A
#87 Audit-Sicht
Reparatur-Roadmap Audit-View (97a519d)
Session A

Aktiv (3)

#86
Reparatur-Audit Patterns C–O
Session B (geplant)
Am 2026-04-28 sind in zwei voneinander unabhängigen Sessions zwei verschiedene Reparatur-Muster aufgetreten: | Pattern | Session | Befund | |---|---|---| | **A. Vorzeitiges „completed"** | Phase-12-Recherche-Pflich…
Bauplan öffnen ›
#85
Recherche-Protokoll-Backfill (61 Wikis)
Session B (rollierend)
Jeder Alt-Artikel braucht POST /api/recherche-protokoll mit abgehakten Iterationen + Suchqueries. SOFT-Modus aktiv bis vollständig.
#87 Wiki-Sicht
Sanierungs-Roadmap Wiki-View (4 Tabs)
Session C — diese Session
Eine **lebende Sanierungs-Roadmap** im PM-Sprech — visuelle Timeline vom Vorfall (Böhmermann-Halluzinations-Fund 2026-04-24) bis zur fortlaufenden Behebung. Dynamisch generiert aus Live-Datenquellen, kein manuell gepfleg…
Bauplan öffnen ›

Offen (3)

Substanz
40 dünne Wiki-Artikel (<1500w) ausbauen
frei
Gegenposition
60 Artikel ohne Gegenposition-Sektion
frei
Damage-Rest
~75 RED+ORANGE-Behauptungen reparieren (~92 % offen)
frei

Welche Session arbeitet woran. Aufteilung verbindlich, Kollisionen werden in docs/SESSIONS-KOORDINATION.md verhandelt.

A
Session A
Halluzinations-Reparatur + Defense-in-Depth
20+ Commits, 8 Schichten, 47 Risse repariert, Pattern-Coverage-Validator. Letzter Stand: clean Sweep, Folge-Session² hat blinde Flecken behoben.
Offen
  • core_tokens für 15 weitere Patterns (optional)
  • Damage-Reparaturen weiterführen
B
Session B
Phase 12 Recherche-Pflicht + Reparatur-Audit
#80–#84 + #85.1 erledigt. Recherche-Protokoll-DB live, Klassifikator in audit.js, Inject-Skript mit Blog-Support, methoden.html mit 5 Iterationen.
Offen
  • Issue #86 starten (Reparatur-Audit Patterns D/E/F/K/M/N)
  • Recherche-Protokoll-Backfill 61 Wikis
C-#87
Session C — diese Session
Sanierungs-Roadmap (Wiki-Sicht)
build-roadmap.js auf zwei Output-Targets erweitert. docs/reparatur-roadmap.html bytegleich erhalten. html/wiki/roadmap.html neu mit 4 Tabs.
Offen
  • nach DoD-Sweep + Adversarial: completed melden
Zukunft
Zukunft
Wer kommt als Nächstes?
Quartalsweise: Reparatur-Audit-Wiederholung. Wöchentlich: Server-Cron Halluzinations-Sweep. Bei jedem Push: Pre-Push + Pre-Receive.
Offen
  • Substanz-Sessions (40 dünne Artikel ausbauen)
  • Gegenposition-Sektionen nachrüsten
Diese Sicht ist die ehrliche Audit-Variante 1:1 — gleiche Zahlen, gleiche Mahnung, gleiche Lücken-Tabelle. Wer bauliche Belastbarkeit prüfen will, liest hier. Bau-Metapher endet hier bewusst.
Halluzinationsfrei?
91%
792 Behauptungen ausgewertet: 489 ✅ / 228 ⚠️ / 59 🟠 / 16 ❌
Genug Fleisch?
54%
51 von 95 Artikeln ≥1.500 Wörter.
27 dünn, 17 mittel, 41 gut, 10 reichhaltig.

Defense-in-Depth — 9 Schichten

1 Validator-Suite scripts/audit.js 14 Kategorien, alle grün
2 Drs.-Validator scripts/check-drs-numbers.js 177/177 BT-Drs. verifiziert
3 Lobby-ID-Validator scripts/check-lobby-ids.js 0 Mismatches
4 N-fold-Coverage scripts/check-nfold-coverage.js Manuell, 8 Datei-Klassen
5 Halluzinations-Sweep scripts/check-known-halluzinations.js 16 Patterns, Cron + Pre-Push + Pre-Receive
6 Pattern-Registry docs/known-halluzinations.json 12 after_fix + 4 need_disclaimer
7 Pre-Push-Hook git-hooks/pre-push Client-side, blockiert vor Push
8 Pre-Receive-Hook git-hooks/pre-receive Server-side, 4× verifiziert
9 Pattern-Coverage-Validator scripts/check-pattern-coverage.js 4/19 Patterns mit Coverage-Garantie. Stop-Marker — weitere Härtung wäre Werkzeug-Inflation.

Reparatur-Spirale — Stop-Marker bei Stufe 8

Stufe 0 Halluzinationen reparieren
Stufe 1 Audit-Skripte
Stufe 2 N-fold-Sweep
Stufe 3 Pattern-Registry + wöchentlicher Sweep
Stufe 4 Pre-Push + Pre-Receive-Hook
Stufe 5 Hook-Bug-Fix (Quarantine + Silent-Fail)
Stufe 6 Adversarial-Sweep über 8 nicht-gescannte Bereiche
Stufe 7 Pattern-Coverage-Meta-Validator
Stufe 8 ⚠ STOP — weiteres wäre Werkzeug-Inflation

Per-Artikel-Heatmap

WITHDRAW/REWRITE HEAVY_FIX LIGHT_FIX nicht ausgewertet ◉ Provenance · ⚖ Gegenposition
serco-ehc
1.825w · 19q · 0 Drs.
HEAVY ◉ ⚖
fall-fernandes
3.101w · 76q · 4 Drs.
HEAVY ◉ ⚖
migrando
1.569w · 47q · 9 Drs.
HEAVY ◉ ⚖
rote-hilfe-brandenburg
1.983w · 34q · 0 Drs.
HEAVY ◉ ⚖
ngo-netzwerk-brandenburg
3.425w · 38q · 8 Drs.
HEAVY ◉ ⚖
tolerantes-brandenburg
1.281w · 30q · 8 Drs.
HEAVY ◉ ⚖
pik-potsdam
1.686w · 57q · 6 Drs.
HEAVY ◉ ⚖
asylmafia-opr
2.195w · 29q · 5 Drs.
HEAVY ◉ ⚖
hateaid
1.754w · 58q · 0 Drs.
HEAVY ◉ ⚖
wikimedia-deutschland
2.242w · 44q · 0 Drs.
HEAVY ◉ ⚖
campact
2.793w · 74q · 5 Drs.
HEAVY ◉ ⚖
bioeg
1.113w · 16q · 0 Drs.
LIGHT ◉ ⚖
demokratie-staerken-bw
1.137w · 20q · 9 Drs.
HEAVY ◉ ⚖
vvn-bda-brandenburg
2.153w · 15q · 0 Drs.
HEAVY ◉ ⚖
wir-sind-das-land
2.339w · 68q · 11 Drs.
HEAVY ◉ ⚖
sea-watch
1.787w · 48q · 5 Drs.
HEAVY ◉ ⚖
opferperspektive
2.567w · 23q · 0 Drs.
HEAVY ◉ ⚖
deutsche-umwelthilfe
2.176w · 35q · 13 Drs.
HEAVY ◉ ⚖
aktionsbuendnis-brandenburg
2.221w · 40q · 0 Drs.
HEAVY ◉ ⚖
amadeu-antonio
2.338w · 66q · 8 Drs.
HEAVY ◉ ⚖
spd-machtnetzwerk
2.799w · 59q · 2 Drs.
LIGHT ◉ ⚖
ngo-netzwerk-sachsen
2.945w · 56q · 1 Drs.
LIGHT ◉ ⚖
diakonie-dwbo
3.758w · 41q · 2 Drs.
HEAVY ◉ ⚖
dezim
936w · 19q · 6 Drs.
LIGHT ◉ ⚖
bund
1.283w · 17q · 4 Drs.
LIGHT ◉ ⚖
pro-asyl
1.703w · 47q · 5 Drs.
LIGHT ◉ ⚖
awo-brandenburg
2.933w · 46q · 4 Drs.
HEAVY ◉ ⚖
demos
1.283w · 20q · 0 Drs.
LIGHT ◉ ⚖
pkk-brandenburg
2.326w · 41q · 0 Drs.
HEAVY ◉ ⚖
oerr-hateaid
2.954w · 63q · 0 Drs.
LIGHT ◉ ⚖
bundeszentrale-politische-bildung
3.811w · 106q · 13 Drs.
LIGHT ◉ ⚖
bundesverfassungsschutz
6.006w · 99q · 0 Drs.
LIGHT ◉ ⚖
raa-brandenburg
1.098w · 14q · 0 Drs.
LIGHT ◉ ⚖
presse-informationsamt
1.985w · 38q · 0 Drs.
LIGHT ◉ ⚖
drk-mv-asyl
2.358w · 18q · 0 Drs.
LIGHT ◉ ⚖
lobbi-mv
3.041w · 41q · 8 Drs.
LIGHT ◉ ⚖
correctiv
3.309w · 65q · 19 Drs.
LIGHT ◉ ⚖
caritas-brandenburg
1.247w · 13q · 0 Drs.
LIGHT ◉ ⚖
fluechtlingsrat-brandenburg
1.269w · 10q · 4 Drs.
LIGHT ◉ ⚖
drk-fluechtlingshilfe-bb
1.589w · 11q · 0 Drs.
LIGHT ◉ ⚖
koeppinggate
1.858w · 36q · 0 Drs.
LIGHT ◉ ⚖
spd-mv-netzwerk
1.924w · 43q · 0 Drs.
LIGHT ◉ ⚖
demokratie-leben
2.252w · 61q · 16 Drs.
LIGHT ◉ ⚖
awo-mecklenburg
2.288w · 44q · 6 Drs.
LIGHT ◉ ⚖
seebruecke-brandenburg
1.019w · 10q · 0 Drs.
LIGHT ◉ ⚖
antidiskriminierungsstelle
1.129w · 22q · 0 Drs.
LIGHT ◉ ⚖
neue-deutsche-medienmacher
1.304w · 25q · 11 Drs.
LIGHT ◉ ⚖
katapult
1.429w · 43q · 0 Drs.
LIGHT ◉ ⚖
raa-mv
1.517w · 19q · 5 Drs.
LIGHT ◉ ⚖
verfassungsgericht-brandenburg
1.664w · 25q · 0 Drs.
LIGHT ◉ ⚖
falken-berlin
1.986w · 38q · 0 Drs.
LIGHT ◉ ⚖
paritaetischer-brandenburg
2.373w · 27q · 0 Drs.
LIGHT ◉ ⚖
klimaschutzstiftung-mv
2.635w · 50q · 3 Drs.
LIGHT ◉ ⚖
tolerantes-mv
1.252w · 16q · 0 Drs.
LIGHT ◉ ⚖
antifa-rostock
1.533w · 32q · 6 Drs.
LIGHT ◉ ⚖
bundesstiftung-gleichstellung
1.671w · 39q · 14 Drs.
LIGHT ◉ ⚖
pks-kriminalstatistik
2.452w · 52q · 15 Drs.
LIGHT ◉ ⚖
pmk-methodenkritik
2.831w · 55q · 18 Drs.
LIGHT ◉ ⚖
glossar
73w · 1q · 0 Drs.
? ◉ ·
personen-index
117w · 1q · 0 Drs.
? ◉ ·
karte
119w · 1q · 0 Drs.
? ◉ ·
blog-fall-20
141w · 1q · 0 Drs.
? ○ ·
blog-fall-4
163w · 6q · 0 Drs.
? ○ ·
blog-fall-8
166w · 10q · 0 Drs.
? ○ ·
blog-fall-19
173w · 1q · 0 Drs.
? ○ ·
blog-fall-3
178w · 6q · 0 Drs.
? ○ ·
blog-fall-7
178w · 6q · 0 Drs.
? ○ ·
blog-fall-6
213w · 3q · 0 Drs.
? ○ ·
blog-fall-9
217w · 4q · 0 Drs.
? ○ ·
blog-fall-5
221w · 9q · 0 Drs.
? ○ ·
blog-fall-2
249w · 5q · 0 Drs.
? ○ ·
entwuerfe-board
250w · 1q · 0 Drs.
? ◉ ·
blog-fall-23
258w · 1q · 0 Drs.
? ○ ·
blog-fall-16
321w · 3q · 1 Drs.
? ○ ·
blog-fall-1
372w · 11q · 1 Drs.
? ○ ·
bearbeitungs-status
393w · 1q · 0 Drs.
? ◉ ·
blog-fall-13
399w · 6q · 0 Drs.
? ○ ·
blog-fall-18
400w · 5q · 1 Drs.
? ○ ·
blog-fall-17
426w · 4q · 0 Drs.
? ○ ·
blog-fall-14
486w · 8q · 1 Drs.
? ○ ·
blog-fall-12
511w · 5q · 1 Drs.
? ○ ·
blog-fall-11
523w · 7q · 0 Drs.
? ○ ·
blog-fall-10
549w · 9q · 2 Drs.
? ○ ·
blog-fall-21
711w · 7q · 0 Drs.
? ○ ·
blog-fall-15
772w · 10q · 1 Drs.
? ○ ·
blog-fall-26
831w · 8q · 0 Drs.
? ○ ·
blog-fall-22
942w · 18q · 0 Drs.
? ○ ·
blog-fall-25
1.158w · 8q · 0 Drs.
? ○ ·
correctiv-v1
1.508w · 30q · 17 Drs.
? ◉ ·
war-child-deutschland
2.671w · 38q · 1 Drs.
? ◉ ⚖
coexister-germany
2.822w · 35q · 0 Drs.
? ◉ ⚖
blog-fall-24
2.970w · 20q · 1 Drs.
? ○ ·
frauenschutzhaus-heidenheim
3.048w · 34q · 0 Drs.
? ◉ ⚖
endendosilence
3.245w · 38q · 3 Drs.
? ◉ ⚖
rederei-spreuweizen
3.720w · 64q · 0 Drs.
? ◉ ⚖

Lücken-Tabelle

PrioritätWasArtAufwand
echt Browser-Verifikation der index.html-Subtitle doku 5 min
echt VVN-BdA-Brandenburg Carousel-JSON Volltext-Lesen + ggf. fix inhalt 10 min
echt ISSUES.md Folge-Issues für die offenen Punkte anlegen doku 5 min
echt Damage-Audit-Reparaturen weiterführen (591 RED+ORANGE-Behauptungen, davon ~47 erledigt = 8%) inhalt mehrere Sessions
echt Recherche-Protokoll-Backfill (61 Wikis ohne Protokoll) inhalt Session-B-Eigentum, läuft
echt Wiki-Gegenposition-Sektion bei 68 Artikeln nachrüsten (Audit-Warnung) inhalt mehrere Sessions
inflation core_tokens für 15 weitere Patterns nachrüsten tool ~20 min — sinnvoll, aber nicht kritisch
inflation check-pattern-coverage.js in pre-push einbauen tool ~10 min — würde Werkzeug-Inflation fortsetzen
inflation Coverage-Skript Edge-Case-Tests tool ~30 min — klassische Inflation

Werkzeug-Bauen jetzt einstellen. Inhalt machen. Halluzinations-Schutz auf formaler Ebene reicht (16 Patterns clean, 14 Validator-Kategorien grün). Echte Reparatur ist inhaltliche Arbeit pro Artikel, nicht weiterer Validator. Wenn beim nächsten Sweep ein neuer blinder Fleck auftaucht — punktuell fixen, kein neues Tool.