MCP `bestpractices` Namespace prüfen.
In `.mcp.json` ist `bestpractices` als Namespace-Arg gesetzt, in der ToolSearch nach Reload tauchen aber nur `bicepschema`, `deploy`, `monitor`, `wellarchitectedframework`, `group_list`, `group_resource_list`, `subscription_list` auf. Mögliche Ursachen: (a) Namespace heißt anders im aktuellen `@azure/mcp` Beta-Build; (b) `bestpractices` ist als „MCP-Server-Instructions" eingebaut (siehe MCP-Instructions-Block beim Tool-Reload — der server lädt seine bestpractices ohnehin als Instructions); (c) gibt's tatsächlich nicht. Aktion: einmal `npx -y @azure/mcp@latest server start --help` schauen oder `gh` direkt am Repo `microsoft/mcp` für die aktuellen Namespace-Namen → `.mcp.json` korrigieren falls nötig.
- Trigger
- nach M11 (Bicep grün)
- Aufwand
- 5–10 min
✅ Node.js + uv ins devcontainer (`1f8a873b`)
Node 20 + uv bootstrap fuer TS-Bot-Workstream. Original-Scope: Node.js + uv ins devcontainer aufnehmen.** Aktuell hat `.devcontainer/devcontainer.json` nur Python, gh, az als Features. Vor TS-Bot-Arbeit: `"ghcr.io/devcontainers/features/node:1": { "version": "20" }` ergänzen — sonst läuft `npx @microsoft/teams.cli` und `@azure/mcp` im Container nicht. Optional: `uv` direkt installieren statt nur `uv sync` als post-create (z.B. via `pipx` im post-create script), damit der Build-Step deterministisch ist.
- Trigger
- vor M10 (TS-Bot-Workstream startet)
- Aufwand
- 15 min
Reopen-in-Container
sobald B2 erledigt. Linux-Container fixt das cognee/litellm-Long-Path-Issue auf Windows. Beim Switch: alle laufenden Terminals + lokales `.venv/` werden überflüssig (der Container baut sein eigenes via `uv sync`).
- Trigger
- direkt nach B2
- Aufwand
- <5 min
✅ TS-Teams-Bot Phase 1+2 (`6cbc98f2`, `bf2e4b90`)
TS Teams Bot scaffold + Adaptive-Card baseline + FastAPI orchestrator endpoint + TS bot HTTP client. Original-Scope: TS-Teams-Bot bauen als eigener Workstream.** Siehe `.claude/skills/teams-sdk/SKILL.md` Projektkontext. Bot kommt in eigenes Container-App-Resource im rg-fire neben dem Python-Orchestrator, ruft `process_pdf` über HTTP. Bicep für den TS-Container ist **nicht** Teil von M1–M11 — separat als M12+.
- Trigger
- nach Infra grün (M1–M11 deployt + acrfire existiert) + B2 + B3
- Aufwand
- mehrere Tage
`microsoft-teams` Python-Dep aus pyproject.toml entfernen.
Aktuell drin weil das Skeleton es hatte. `app.py` ist jetzt Stub und nutzt es nicht mehr. Entfernen sobald TS-Bot-Pfad final entschieden + dokumentiert ist (kein Risiko, dass jemand Python-Bot-Code schreibt). Inkl. `uv lock` re-run.
- Trigger
- nach M11 + B4 begonnen
- Aufwand
- 2 min
`/schedule` Agent für CI-Watch.
Sobald alles grün und gepusht: einen Background-Agent einrichten, der z.B. Montags 09:00 `gh run list --limit 5` checkt und bei rotem Run einen Issue/PR-Comment hinterlässt. Verhindert Wiederholung der „14-Failures-im-blinden-Fleck"-Situation vom 2026-04-29.
- Trigger
- nach erstem grünem Push auf main
- Aufwand
- 5 min
Cognee-Smoke-Test
im Linux-Container (= Container Apps Runtime). Mit `cognee.add()` + `cognee.cognify()` einmal echtes End-to-End gegen ein Sample-Doc fahren, um vor Produktion zu validieren dass die Lazy-Import + Cognify-Pipeline tatsächlich läuft.
- Trigger
- nach B3 (in Container) + Cognee-API-Keys in Key Vault
- Aufwand
- 10 min
Bicep-spezifischer MCP-Skill
falls Microsoft einen veröffentlicht. Aktuell nutzen wir den Azure-MCP `bicepschema` Namespace; ein dedizierter Bicep-MCP wäre denkbar mit Tools wie `bicep_lint`, `bicep_decompile`, `avm_module_search`. Alle paar Wochen `npm search` oder `microsoft/mcp` Repo prüfen.
- Trigger
- bei Bedarf / opportunistisch
- Aufwand
- n/a
`bot-service.bicep` Refactor (M10) → AVM falls Microsoft einen veröffentlicht.
Aktuell gibt es keinen `avm/res/bot-service/*` (nur `health-bot`). Wenn Microsoft einen herausbringt, lohnt sich der Switch zurück zu AVM für Konsistenz mit den anderen Modulen.
- Trigger
- wenn `mcr.microsoft.com/v2/bicep/avm/res/bot-service/*/tags/list` HTTP 200 liefert
- Aufwand
- 30 min
Composite-Action „deploy-observability" + Two-Source-Truth.
Eigenes Repo `my-mind-apps/gh-deploy-observability/action.yml`. Misst Deploy-Dauer, pinnt Commit-Status mit `description="Xs, sha=Y, deployed-by=workflow#N"`, **kombiniert GitHub-Action-Status MIT Azure-Deployment-History** (siehe Lessons #4 — GitHub allein reicht nicht; pro-Sub-Module-Status muss aus Azure). Optional: Slack/Teams-Notification. Drei Schichten: (a) Composite Action für Workflow-Seite, (b) Claude Skill `.claude/skills/deploy-monitor/SKILL.md` mit Standard-Queries (gh + az) und Failure-Patterns, (c) optional `scripts/deploy-status.sh` für Menschen. Wiederverwendbar in zukünftigen Projekten.
- Trigger
- nach Infra grün und stabilem Push-Flow
- Aufwand
- 2–3h
Pre-Push-Hook für Bicep-MCP-Lint.
Lokales `git pre-push`-Hook das den Bicep-MCP-Server (siehe `scripts/bicep-mcp.cmd` + `.mcp.json`) gegen alle geänderten `.bicep`-Files laufen lässt. Würde SKU/MaxSize/AZ-Combinatorics-Errors erkennen bevor sie ein Deploy-Run kosten (siehe Lessons-Learned-Sektion oben). Alternative: GitHub Action `lint-infra.yml` die das auf PRs auch macht.
- Trigger
- nach Bicep-MCP via Session-Reload aktiv + zwei oder drei „avoidable" Deploy-Failures bestätigen den Wert
- Aufwand
- 30 min lokal, 1h für GH Action
✅ Teams-App-Paket „Brandschutz Bot" (App 1)
bot/appPackage/manifest.json + Container-App + AAD FIC. Original-Scope: Teams-App-Paket „Brandschutz Bot" (App 1) erstellen.** `appPackage/bot/manifest.json` + Icons. Capabilities: `bots[*]` + `composeExtensions[*]` (für Messaging Extension, siehe B13). Verweist auf bestehende AAD-App-Registration `bot-fire` (`botAppId`-Param). Distribution: Tenant-weit (alle Mitarbeiter). Sideload-zip via `appPackage/bot/build.ps1`. Skill-Vorlage: `.claude/skills/teams-sdk/references/manifest-and-copilot.md`.
- Trigger
- nach Bot-Service grün + bot-Container deployed
- Aufwand
- 2-3h
✅ Messaging Extension + M365 Copilot + Outlook channel (`9e89cc2c`)
Original-Scope: Messaging Extension (Teil von App 1) — Code-Side.** TS-Backend-Handler im Bot-Container. Drei Command-Typen relevant für Brandschutz: `query` (z.B. `@brandschutz <bma-id>` → Cosmos-Lookup → Adaptive-Card mit Geräte-Daten), `action` (Modal „PDF hochladen + extrahieren"), `link unfurling` (BSN-Dokument-Link → Preview-Card). Definition in App-1-Manifest unter `composeExtensions[*]`. Backend: neue handlers im TS-Bot (`@microsoft/teams.apps`). Skill-Referenz: `.claude/skills/teams-sdk/SKILL.md` Activity-Handlers + Sending-Messages.
- Trigger
- nach B4 (TS-Bot Workstream) + B12 (App-1-Paket)
- Aufwand
- 1-2 Tage
`deploy-teams-app.yml` Workflow für BEIDE Apps.
Eigenständiger Workflow für Teams-App-Pakete (App 1 + App 2). Args: `app: 'bot'
- Trigger
- 'personal'`. Build manifest zip → Validierung gegen Teams-Schema → Upload zum Microsoft 365 Developer Portal. Lifecycle GETRENNT von Bot-Code-Deploy und Infra-Deploy — Manifest-Änderung erfordert oft Admin-Approval. Trigger: `workflow_dispatch` mit App-Auswahl.
- Aufwand
- nach B12 + B16
ADR-0013: Zwei Teams Apps
Architektur-Entscheidung dass App 1 (Bot+ME, Tenant-weit) und App 2 (Personal Tab + Admin, restricted) als getrennte Manifeste / AAD-Registrationen / Distribution-Scopes existieren. Hintergrund: in einer App wären alle Tabs allen Bot-Usern sichtbar — wir wollen Admin-UI nur einer Power-User-Group geben. Klebstoff zwischen den Apps: gemeinsamer Daten-Layer (Cosmos/SQL/Cognee), aber komplett getrennte Backend-Container und AAD-App-Registrations.
- Trigger
- direkt nach Phasen-Start
- Aufwand
- 30 min
✅ Teams-App-Paket „Brandschutz Workspace" App 2 live (`e8319ad9`, `54321841`)
appPackage/personal/manifest.json + Icons + AAD-App-Registration. Original-Scope: Teams-App-Paket „Brandschutz Workspace" (App 2 — Personal App) erstellen.** `appPackage/personal/manifest.json` + Icons. Capabilities: `staticTabs[*]` (Personal App + Admin-Center). Eigene AAD-App-Registration nötig (`personalAppId`, NEU anzulegen — heute manuell wie `bot-fire`). Distribution: restricted via Teams-App-Setup-Policy auf Power-User-Group. `webApplicationInfo` für SSO mit dem neuen App-Registration-ID.
- Trigger
- nach B17 (Web-UI Container existiert)
- Aufwand
- 2-3h
✅ Web-UI Container Personal App live (`e8319ad9`, `54321841`)
Next.js 15 Workspace UI + Bicep + Workflow + Manifest. Original-Scope: Web-UI Container für Personal App (`app-personal-fire`).** Neuer Container im selben `cae-fire` Environment. Stack-Vorschlag: React/Next.js + Teams-SDK für SSO. Endpoints: Dashboard (Document-List, Knowledge-Graph-View), Admin-Center (Tenant-Settings, User-Management, Audit-Logs). Bicep: neuer `infra/modules/container-app-personal.bicep`, neuer Param `personalContainerImageUri` in `main.bicep`. Manifest-Tab-`contentUrl` zeigt auf den FQDN dieser Container App.
- Trigger
- nach Bicep-Erweiterung um 2. Container App + 2. AAD-Registration
- Aufwand
- mehrere Tage (Web-UI ist eigener Workstream)
✅ Wissensgraph public in Personal App (`f4f38430`)
`web/app/graph/page.tsx` + ForceGraphView aus Bootstrap-Pipeline-Snapshot (ohne Cognee-Runtime). Original-Scope: Cognee Knowledge Graph public-deployen + URL fixieren.** Aktuell zeigt der „Im Knowledge Graph öffnen"-Button der Adaptive-Card auf einen Placeholder-Host. Real-Deploy: entweder eigene Container-App `app-graph-fire` mit Cognee's web-viewer ODER Integration in App 2 (Personal Tab, B17). Sobald Host-FQDN steht, in `bot/src/cards/extraction_result.ts` (TS-Bot) und `src/brandschutz/adaptive_cards/extraction_result.py` (Python-Stub) den Placeholder ersetzen.
- Trigger
- nach B7 (Cognee-Smoke) + Entscheidung B17 vs. eigener Graph-Container
- Aufwand
- 3-5h
TheDataMonster `ac-templating-service` integrieren
(statt inline TS-Card-Builder). [Repo](https://github.com/ARmandNext/TheDataMonster), Folder `ac-templating-service/`. Eigenständiger Azure Function Service mit `${var}`-Templating (haben Microsoft's `adaptivecards-templating@2.3.1` aufgegeben weil unzuverlässig). Bot ruft via HTTP POST `{template_id, data}` an, kriegt Card-JSON zurück, sendet an Teams. Vorteil: Card-Templates zentral pflegbar im DragonFace-Portal-Designer (Live-Preview vorhanden), kein Code-Deploy für Card-Änderungen. Heutiger Bot-Builder hat dieselbe Function-Signature damit der Swap 1-zeilig ist.
- Trigger
- nach B4 Phase 2 (HTTP-Path Bot↔Orchestrator) + ac-templating-service production-ready
- Aufwand
- 4-6h
✅ deploy-Race gefixed (`72da6010`, `0b2641cd`)
Concurrency-Group + deploy-infra liest live container images vor Bicep. Original-Scope: STRATEGIC — deploy-app vs deploy-infra Race lösen.** Beide Workflows können zeitgleich auf dieselbe Container-App-Resource zugreifen → `ContainerAppOperationInProgress`-409. Plus: deploy-infra resettet den Image-Tag, den deploy-app gerade gesetzt hat. Hat heute (2026-05-02) zum dritten Mal blockiert. **Stufenplan:** Phase 1 (30 min) — `concurrency: deploy-${{ env.RG }}` auf beiden Workflows, queue statt parallel. Phase 2 (1h) — deploy-infra liest VOR Bicep-Deploy via `az containerapp show` das aktuelle Image für jede der drei Container Apps und übergibt als Bicep-Param, sodass kein Reset mehr passiert. Phase 3 (optional) — Lifecycle-Ignore für Image in nativem Bicep, falls AVM weiter Schmerzen macht. **Volle Analyse + 5 Optionen:** Memory `project_deploy_orchestration_problem.md`. **Heute-Workaround:** Multi-File-Commits in zwei getrennten Pushes (erst Code, deploy-app abwarten, dann Infra).
- Trigger
- nach erstem grünen End-to-End-Push
- Aufwand
- 1.5h für P1+P2
Sampling-Sektion „Output-Disziplin" im Slider-Panel.
Versprochen in der LM-Studio-Adoption-Mapping-Tabelle, nicht implementiert: Annahmen-Penalty (Aktiv-Schalter + Slider 1.0-2.0), Citation-Required (Toggle), Sektionen-Vollständigkeit-erzwingen (Toggle), Min-Konfidenz-pro-Topic-Slider, Stop-Phrasen-Input. Diese Knobs steuern *Output-Disziplin* statt *Argument-Posture*.
- Trigger
- nach B22
- Aufwand
- 2h
Live-Konfidenz-Indikator
beim Dirty-State. LM-Studio zeigt „Token count: N/A" oben — bei uns Pendant: Live-Schätzung welches Konfidenz-Profil + Coverage-Erwartung diese Slider-Kombi ungefähr produzieren wird, basierend auf historischen Run-Stats. Heuristik genügt (Korrelations-Map argumentations_schaerfe → erwartete Citations etc.).
- Trigger
- nach 5+ historischen Runs vorhanden
- Aufwand
- 2h
Re-Submit-Pattern bei Dialog-❌-ungeklärt.
Final-Verdict KONDITIONAL hatte E-07 als ❌ ungeklärt (Hörsaal-2.RW). Workflow-Lücke: wenn der Bauherr Daten nachliefert, gibt es keine UI/Skript-Pfad für „Re-Submit mit Nachweisen → Dialog läuft erneut nur für die ❌-Punkte".
- Trigger
- nach erstem Re-Submit-Bedarf
- Aufwand
- 2h
Phase-2B: Web-trigger Re-Run-Button.
Im Slider-Panel-UI ist „Re-Run-Button triggert serverseitig" als Versprechen drin (Phase-2B-Hint), aber keine Server-Action im Repo. Implementation: `web/app/api/runs/start/route.ts` Server-Action → spawnt `python scripts/run_pair_eval.py --variant <id>` → Redirect auf neue `/runs/<id>` URL → Progress-Stream via SSE.
- Trigger
- nach Phase 1+2 stabil
- Aufwand
- 2-3h
✅ /runs/compare Vergleichs-Ansicht live (`ae82cb85`)
Original-Scope: Phase-3: Vergleichs-Ansicht zweier Runs.** `/runs/compare?a=<id>&b=<id>` mit Side-by-Side Section-Inhalten, synchronisiertem Scroll, Coverage-Diff, Konfidenz-Delta-Heatmap.
- Trigger
- nach B30 + min. 3 Variants verglichen
- Aufwand
- 3h
pair_002 Page-Index-Audit.
Discovery 2026-05-06 morgens: pair_002_geburtig_scharoun-theater.yaml hat `pdf_seiten_aufgabe: [8, 9]` und `pdf_seiten_kontext: [10, 12]`. Konvention im Repo (siehe pair_001 + run_pair_001_eval.py-Verwendung) ist **0-indexed Python-Listen-Indizes** als YAML-Werte. Damit liest `[8, 9]` System-Pages i=8, i=9 = human-Pages 9-10 — aber System-Page 9 (human-Page 10) ist die Erleichterungs-Tabelle, also Teil der **Lösung**, nicht Aufgabe. Korrekt wäre vermutlich `pdf_seiten_aufgabe: [7, 8]` für human-Pages 8-9 (Artikel-Header + erste Beschreibungs-Seite). Vor erstem pair_002-Run zu auditieren. Nicht autonom gefixt weil User-Call.
- Trigger
- vor erstem pair_002 Eval-Run
- Aufwand
- 15 min Audit + Fix
OpenAI Enterprise Account + Cost-Tracking im Workspace
Realtime ist teuerste API, Cost-Transparenz pro Agent/Customer/Run Pflicht. (1) Enterprise-Account (höhere Rate Limits, SLA, DPA, EU-Endpoints). (2) Usage-API-Integration im Admin-Dashboard mit Aufrissebenen Gesamt/Agent/Customer/Run + Forecast. (3) Cost-Guards (Per-Konversation-Limit, Per-Tag-Limit, Anomaly-Alert). Memory `project_openai_enterprise_cost_tracking.md`.
- Trigger
- vor erstem zahlenden Kunden, spätestens vor Live-Demo gegen Prospect
- Aufwand
- 1-2 Tage gesamt
Webhook-Bridge Brandschutz ↔ Ducky
Bi-direktionaler Status-Sync zwischen Ducky (Phase 0-1 Akquise) und Brandschutz-Plattform (Phase 2-10 Delivery). Ducky→Brandschutz: `opportunity.stage_changed` mit Account-Daten + Beziehungs-Historie + Trigger-Pfad + Score → Brandschutz öffnet Projekt. Brandschutz→Ducky: `project.lifecycle_changed` mit Konzept-Status, Sign-off, Value-Realized → Ducky aktualisiert Account. Memory `project_ducky_brandschutz_independence_principle.md`.
- Trigger
- nach Ducky-Webhook-API stabilisiert + B40 (Schema) steht
- Aufwand
- ~1 Woche
Brandschutz-eigener GTM-Setup-Layer (Sechs-Block-Schema)
Vollständige GTM-Setup-Konfiguration analog Ducky-Pattern, aber in Brandschutz-Codebasis (Ducky kann nicht gesplittet werden, eigenständiges Produkt). Sechs Blocks: Company Profile + Offers + ICP Profiles + Buyer Personas + Committee Roles (Brandschutz-spezifisch: Bauherr/Architekt/Generalplaner/Statiker/TGA/PrüfSV/Bauamt/Denkmalbehörde/Versicherer) + Triggers + Score Models. Trigger-DSL user-konfigurierbar. Memory `project_ducky_brandschutz_independence_principle.md` + `project_e2e_process_and_phase_zero.md`.
- Trigger
- nach Expert-Validierung E2E + Companion-Status geklärt (M-1 könnte Phase 0 abdecken)
- Aufwand
- ~6-8 Wochen
Webhook-Schema-Standardisierung
Gemeinsames Event-Schema zwischen Brandschutz-Plattform und Ducky (+ später Paul, Agentic OS). Eigener Repo / Docs-Pfad mit JSON-Schema-Definitionen für `opportunity.stage_changed`, `project.lifecycle_changed`, `account.captured`, etc. Versioniert, beide Produkte pinnen Schema-Version. Memory `project_ducky_brandschutz_independence_principle.md` Sektion „Integration-Surface".
- Trigger
- parallel zu B38
- Aufwand
- ~3 Tage
Mobile-Foto-Capture-Capability für Bot
Senior macht Foto vor Ort mit Smartphone → schickt an Brandschutz-Bot in Teams → Vision-Klassifikation (Gemini multimodal) + Geo-Match aus EXIF + Projekt-Matcher (Beziehungs-Heuristik) → Adaptive Card mit „Zu Projekt X hinzufügen / Neues Projekt anlegen". Zwischen-Stufe zwischen Plan-PDF und AR-Brille (Manifest These 07 / Boundary-Erweiterung). Bauteile: Image-Attachment-Handler + Vision-Call + Geo-EXIF-Reader + Project-Matcher + Adaptive-Card-Buttons. Drei 30-Min-Smoke-Tests offen (Teams-Mobile-Foto-Pfad, EXIF-Pass-Through, Push-Reliability). Memory `project_mobile_foto_capture_capability.md`.
- Trigger
- nach Bot-Reviv + Phase 2 (LLM-Layer)
- Aufwand
- 2-3 Tage (Phase 1: Foto→Klassifikation→Projekt-Matcher)
Vektor-PDF-Vor-Extraktion mit pymupdf/pdfplumber
Heute liest Gemini multimodal die Plan-PDFs als Bilder. Verliert dabei: Vektor-Text mit Koordinaten, Linien-Geometrie, Layer-Namen, präzise Maße. Wenn PDF aus CAD exportiert (häufig bei Architekten-Plänen), ist die Vektor-Schicht erhalten. `pymupdf` + `pdfplumber` extrahieren: (a) Text mit (x,y)-Position pro Page, (b) Vektor-Pfade als Linien-Listen, (c) Layer-Names wenn erhalten. Output fließt ZUSÄTZLICH zur Gemini-Bilder-Beschreibung in den Konzept-Generator. Massive Verbesserung der Phase-2-Plan-Extraktions-Genauigkeit ohne neue Modelle.
- Trigger
- nach Korea-Benchmark-Analyse (eventuell ähnliche Tools dort schon evaluiert)
- Aufwand
- 1-2 Tage
Construction-Drawing-Skill-Recherche
Anthropic + Microsoft + akademische Welt haben spezialisierte Modelle/Skills für Construction-Drawings. Recherche-Sprint: (1) Anthropic Skill-Library nach Construction/Architecture/CAD-Skills durchsuchen, (2) Azure AI Foundry CAD-spezifische Modelle evaluieren, (3) akademische Modelle (CADBert o.ä.) sichten. Eval-Kriterium: messbare Verbesserung der pair_001/pair_002-Plan-Extraktion gegenüber Gemini-Default. Ergebnis: Empfehlung welcher Stack für Phase 2 zukunftsfest ist, plus B-Item-Vorschlag für Integration.
- Trigger
- nach B44 (eigene Vektor-Vor-Extraktion als Baseline)
- Aufwand
- 1 Tag Recherche + 1 Tag Eval
KB Sprint 2.4 Teil 2
DIN-Lizenz beschaffen (~€450 für alle 3 Teile, oder €~150 pro Teil einzeln). Beschaffung über Beuth-Verlag (User-Aktion, keine API). User-Freigabe €500 deckt Kosten ab. Sobald lizenziert: parser identisch zu B50-Pipeline.
- Trigger
- User-Beschaffung steht aus
- Aufwand
- 1 Tag wenn lizenziert
Hessisches Straßengesetz (HStrG)
letzter Failure aus B51+B52-Retry. starweb.hessen.de blockt selbst Bright Data, kein freier Volltext-Mirror gefunden. Lösungspfad geht über B55-Beck-Online-Modul (löst HStrG + viele Edge-Cases gleichzeitig).
- Trigger
- nach B55 (Beck-Online lizenziert)
- Aufwand
- 30 Min wenn Quelle vorhanden
KB Sprint 3
nach Stefan-Call integrieren. Block kombiniert Pflicht-Normen + Hoch-Wert-Richtlinien + Subscription-Hebel. **User-Aktion:** Bestellungen bei Beuth-Verlag, VdS, vfdb, Beck-Online sind außerhalb meiner API-Reichweite — brauchen Konto-Accounts + Kreditkarte/Rechnung. Sobald lizenziert: PDFs in `private/ebooks/` → bestehende E-Book-Pipeline (Memory `project_ebook_ingest_pipeline.md`) zieht das in Cognee. **Bündel-Empfehlung:** · · **Block A — Pflicht-Normen einmalig ~€3.000:** · • VOB Teil A/B/C (Beuth, ~€450) — ersetzt B53 · • DIN 4102 Sammlung (Beuth-Bundle, ~€1.500-2.000) — Brandverhalten Baustoffe · • DIN 18009-1/2 (~€200) — Brandschutzingenieurwesen · • DIN EN 13501-1/2 (~€280) — EU-Klassifikation · • DIN 14675 (~€180) — BMA-Planung · • DIN 18230 (~€140) — Industriebau rechnerisch · · **Block B — Hoch-Wert-Richtlinien ~€800:** · • VdS 2095 + 2046 + 2010 (~€260) — Versicherer-Standards BMA/Sprinkler/Risiko · • vfdb-Mitgliedschaft €150/Jahr — inkl. TB 01/02/03 (TB 04-01 schon ingestiert) · • VDI 6019 Bl 1+2 (~€200) — Rauchgas-Strömung · • DIN VDE 0833-1/-2/-4 (~€300) — Sicherheits-/Alarm-Anlagen · · **Block C — Subscription-Hebel ~€60-150/Monat (Empfehlung #1):** · • Beck-Online Modul „Öffentliches Baurecht" — löst B54 (HStrG) sofort + Kommentare zu allen 17 LBOs/Bundesgesetzen + alle Hessen-Quellen. 4-Wochen-Test gratis verfügbar. · · **Block D — Optional Fachbücher ~€700:** · • Brandschutzatlas (Mayr/Battran, ~€350 E-Book mit Updates) · • Brandschutzkonzepte (Mehl/Czepuck, ~€140) · • Bechert Sonderbauten (~€180) · · **Empfehlung NICHT zu kaufen:** Juris Premium (€300/M, 80% Overlap zu Beck-Online), WEKA Brandschutz (inhaltlich nichts Neues), Einzel-Kommentare pro Bundesland (zu fragmentiert). · · **ROI-Begründung:** Im Sinne `feedback_argumentations_tiefe_statt_pragmatik.md` — mehr Normen-Wissen = bessere Argumentation. Stefan-Käufer-Niveau erwartet Volltext-Zugriff auf DIN-Pflicht-Normen + Beck-Online-Kommentare.
- Trigger
- nach Stefan-Call
- Aufwand
- User-Bestellung 1-2h + Ingest ~4h
Per-§-Chunking + Cognee-Embedding der KB-Sprint-2-PDFs
Cognee-A/B-Test 2026-05-17 hat Wert bewiesen (11+ §-Granular-Cross-Refs gefunden die Hardcoded-Map nicht hat). Heute sind Bundesgesetze/LBOs/VV TB/Fachrecht als **Wurzel-Nodes mit 280-Char-Preview** im Graph. Echtes Zitieren auf Paragraph-Ebene braucht: (a) pro PDF Regex-basierten §-Splitter (heterogen pro Quelle — BauGB strukturiert anders als LBO Sachsen), (b) §-Chunk-Objekte mit `gesetz_id + paragraph + absatz + satz + volltext + page_ref`, (c) Vector-Embedding via Cognee in persistent Backend (Vorbedingung: B7/B19 muss erledigt sein). Geschätzt ~4000-5000 §-Chunks insgesamt. Sub-Splits: **B56a Lokales Chunking** (kein Cognee nötig, Output als JSONL pro Quelle nach `.swarm/runs/chunks_<sprint>/`) und **B56b Cognee-Embedding** (lokal mit SQLite-on-Files-persistent oder Lab nach B63). Cognee-Cost-Schätzung nach Sprint-A-Run: ~$3-8 für Voll-Korpus (166 Quellen + Patterns), nicht $50.
- Trigger
- B56a: jetzt verfügbar; B56b: jetzt verfügbar (Cognee validiert)
- Aufwand
- B56a: 1-2 Tage, B56b: ½ Tag + ~$8 Embedding-Cost
✅ RAG-Layer live (`0dd8a409` Cohere ReRank v3.5, `804ff16b` Embedding-Backfill 99.98%)
Original-Scope: RAG-Layer im Konzept-Generator — Vor jedem LLM-Call: Cognee-Query nach Top-N (z.B. 8-12) relevanten §-Chunks zur User-Aufgabe, dann als zusätzlicher Context-Block in den System-Prompt. Schema v0.3.0 `EvidenceItem` hat schon das Citation-Anchor-Feld — wir füllen es. Effekt: Konzept-Output zitiert nicht mehr „nach MBO" sondern „nach MBO § 14 Abs. 3 Satz 2: <Volltext-Auszug>". Voraussetzung: B56b muss durch sein.
- Trigger
- nach B56b
- Aufwand
- 1-2 Tage
Konflikt-Detektor MBO ↔ LBO ↔ VV TB
Pre-Pass vor Konzept-Generierung: für jedes relevante MBO-§ semantische Ähnlichkeitssuche im jeweiligen LBO-Land + dann Divergenz-Score (z.B. via Cosine + LLM-Verifikation „ist das eine Konkretisierung, Verschärfung oder Widerspruch?"). Output: Konflikt-Liste die als zusätzlicher Context vor Konzept-Generierung mitläuft. Damit erkennt der Generator dass z.B. „MBO § 14 erlaubt X, LBO Sachsen § 16 erlaubt X nur mit Sprinkler ab Geschoss 3". Voraussetzung: B56b.
- Trigger
- nach B56b
- Aufwand
- 2-3 Tage
Multi-Agent-Argumentation mit aktivem Judge
Heute: 1 Generator + PrüfSV-Schatten (5-Round-Dialog). Echtes Abwägen braucht 3 Rollen: **Generator** (Konzept-Vorschlag) + **Gegen-Argumentant** (sucht aktiv Widersprüche aus B58-Konflikt-Liste + alternative Auslegungen) + **Judge** (wägt mit `JudgeScore`-Formel aus Schema v0.3.0: 30% Schutzziel-Tiefe / 20% Quellen-Decken / 15% Begründungs-Solidität / 15% Konflikt-Behandlung / 10% Citation-Genauigkeit / 10% Konfidenz-Realismus). Pentarchy-Pattern aus Memory `project_virtuelle_fachplaner_firma.md`. Audit-Trail-Viewer (`/runs/[id]`) erweitert um Judge-Section mit beiden Argumentations-Linien + Judge-Verdict.
- Trigger
- nach B57+B58
- Aufwand
- 3-5 Tage
Sprint 2.6 Cleanup
Aus `feuvo_ingest_20260517T*`: failed BY/HH/HE/NI (no PDF hits / Bot-Defense), plus quality-fragwürdig BW/SL/SH/TH (SerpAPI lieferte Sammel-Dokumente statt spezifische FeuVO — z.B. BW = 400-Seiten-Jahresausgabe statt 8-Seiten-FeuVO). Beck-Online-Modul (B55 Block C) würde das alles in einem Schritt lösen.
- Trigger
- nach B55 (Beck-Online verfügbar)
- Aufwand
- 1-2 h
⛔ VERWORFEN
Ursprünglich geplante Wiederbeschaffung via Beck-Online/DIBt supersedet durch KB-Sprint 2+3 (B47/B48/B99l gruen). Original-Scope: 18 Leichen wiederbeschaffen — am 2026-05-17 entfernt weil falsche Quelle: 6 FeuVO (BW/NI IWO-Infoblätter, SL/SH VV TB, ST Genehmigungsbeschluss, TH Erläuterungsdokument), 4 VV TB-Auszüge (BB/NW/ST + bund-mvv-tb Bauregelliste), 8 Fachrecht-Auszüge (siehe `scripts/kb_ingest/remove_leichen.py` für detaillierte Begründungen). Wiederbeschaffung: Beck-Online (B55-C) löst die meisten, DIBt-Direktabonnement (B55-B) löst das MVV-TB-Master-Problem.
- Trigger
- nach B55 (Beck-Online + DIBt lizenziert)
- Aufwand
- je 5-15 min pro Item nach Lizenz
Monthly-Lizenzierte-Sourcen-Roadmap als Verbesserungs-Plan
Systematisch dokumentieren welche aktuell fehlenden oder durch Leichen kompromittierten Quellen-Klassen durch welche monatliche Subscription geheilt werden: Beck-Online (Baurecht-Modul, ~€60-150/M) löst ~12 Leichen + alle 64 Fachrecht-Lücken + Hessen-Block, DIBt-Direktabo löst MVV-TB-Master + alle 16 echten VV TB, Beuth-Norm-Ticker (~€50/M) für DIN-Updates, vfdb-Mitgliedschaft (€150/Jahr) für TB-01/02/03. Output: kurzes Memo mit ROI pro Sub.
- Trigger
- bald, vor Stefan-Demo
- Aufwand
- 2-3 h
Lab-Cognee-Config-Update: text-embedding-004 → gemini-embedding-001
Lab-Container `app-fire-lab` hat noch das deprecated Embedding-Modell. Lokaler Sprint A 2026-05-17 hat das gefixt + verifiziert. Bicep-Update für Lab-KV + Lab-Container-Restart nötig.
- Trigger
- jetzt, vor erstem Lab-Cognee-Run
- Aufwand
- 15 min Bicep + 5 min Deploy
Frontend-CI für `web/` (Next.js Build + TypeScript-Check)
Heutiger `ci.yml` ist Python-fokussiert (`src/**`, `tests/**`, `pyproject.toml`, `uv.lock`, `Dockerfile`). Die Next.js-Web-App unter `web/` hat heute **keine PR-CI** — PRs die `web/**`, `web/package.json`, `web/tsconfig.json` ändern gehen ohne Build-Validation durch. PR #19 (Chart-Foundation) wurde am 2026-06-06 ohne Frontend-CI gemerged — nur lokaler `npx tsc --noEmit` war die Verifikation. Mit wachsendem Frontend (Slice 2+ Page-Migration der `--mm-*`-Tokens, Slice 3 Brandschutz-Charts, Slice 4-5 Server-Side + License-Page) steigt das Risiko von Build-Brüchen die erst beim `deploy-personal`-Workflow auffliegen — also zu spät. **Lösung:** neuer Workflow `.github/workflows/ci-web.yml` analog zum bestehenden `ci.yml`, mit Trigger auf `web/**` + `.github/workflows/ci-web.yml`, Jobs: (a) `npm ci`, (b) `npx tsc --noEmit` für strikten Type-Check, (c) `npm run build` (Next-Build fängt 95% der Type/Build/Layout-Errors). Branch-Protection-Required-Status-Checks anschließend um die neuen Job-Namen erweitern sobald grün laufen — analog dual-swarm-Pattern (siehe deren `ci.yml` web-Job). **2026-06-22 Symptom-Mitigation:** `ci.yml`-paths-Filter um `web/**` erweitert (Commit a754b3b in PR #35) damit Required-Status-Checks auf web-only-PRs nicht blocken. B64 bleibt offen für eigentliche Frontend-CI (Next-Build + tsc).
- Trigger
- **vor Slice 3** (Brandschutz-Charts gehen produktiv-Pfad → Stefan-Demo) — früher ist akzeptables Risiko, ab dann zu groß
- Aufwand
- 1-2 h (Workflow schreiben + initial-Run + BP-Update)
LegalChunk V1.3 Schema-Erweiterung
Trigger: Schul-Bau-Domain-Analyse 2026-06-21. Drei neue chunk_type-Literale: `forschungsempfehlung` (BDA + Uni-Forschung), `feuerwehr_empfehlung` (AGBF + vfdb), `unfallversicherung_vorschrift` (DGUV). Plus neues optionales chunk-level Metadata-Feld `overlay_set: list[str]` damit Phase-0-Project-Classifier (Memory `project_phase_0_project_classifier_overlay_detection`) nur passende Patterns ziehen kann. **Backwards-compatible Migration**. Volldetails in Memory `project_legal_chunk_v1_3_planned_extension`.
- Trigger
- nach ACP-MVP + nach erstem realen Public-Sector-Pair-Ingest
- Aufwand
- ~1 Tag (Schema + Tests + Migration-Script + Docs)
B67-Phase-2 Overlay-Retry + 15 weitere Land-SchulBauR
3 von 10 B67-Quellen müssen mit anderem Approach nachgezogen werden. **SchulBauR NRW** (recht.nrw.de liefert HTML statt PDF — braucht HTML-Extraktion oder manuell-PDF-Discovery). **AGBF-Empfehlungen Schulbau 2015** (SerpAPI lieferte fälschlich BDA-Schulbau-Studie — braucht alternative URL oder agbf.de-direkt-Crawl). **DGUV Vorschrift 81 "Schulen"** (SerpAPI lieferte Buchverlag-Inhaltsverzeichnis — braucht dguv.de-direkt-Crawl). Plus: SchulBauR-Richtlinien der weiteren 15 Bundesländer (heute nur HH ingestiert) als eigene Iteration.
- Trigger
- bald nach B67-Phase-1 — bewusst transparent statt vorzutäuschen es sei vollständig
- Aufwand
- 2-3h für die 3 Retry-Quellen + 1-2 Tage für die 15 weiteren SchulBauR-Länder
Phase-B-Restart: TED-Tender-Pair-Extraktion via Playwright-MCP
Phase A (Source-Landscape) ist abgeschlossen (`docs/research/public-tender-eu-sovereign-source-landscape-2026-06-21.md`). Phase-B-Live-Extraktion via WebFetch wurde 2026-06-22 abgebrochen weil TED + DE-Portale JavaScript-rendered sind + Cloudflare-403-blocken (siehe `docs/research/phase-b-tooling-gap-findings-2026-06-22.md`). **Anti-Phantasterei-konform: keine Tender-IDs fabriziert.** Restart-Plan: Playwright-MCP-Pilot (TED-Search-Result-Page rendern + scrapen) → 10-20 CPV-71317100-Hits → 3-5 Gold-Pairs mit dokumentiertem Outcome → YAML-Pair-Files in `data/training-pairs/`. Empfehlung Option A (Playwright) primär, Option B (TED-API eForms 3.0) sekundär. **EU-Sovereign-konform.**
- Trigger
- nach kurzer Playwright-MCP-Verifikation
- Aufwand
- ~1 Personentag für 3-5 Gold-Pairs
✅ Data-Explorer Library + Live-Notebook live (`52a2d7e3`)
4 Sub-Module (vault/registry/chunks/encoding) + Notebook. Original-Scope: **🎯 Data-Explorer Library + Live-Notebook (Anti-Ad-hoc-Bash, Encoding-First-Class) — NEU 2026-08-26** — User-Sparring-Discovery: bei jeder Content-Review wiederholen sich die gleichen Ad-hoc-Analysen (Blob-Inventar, Registry-Aggregation, Chunk-Sample, Encoding-Check). Statt jedes Mal Bash: reusable Python-Package `src/brandschutz/data_explorer/` mit 4 Sub-Modulen: (a) `vault.py` — Pagination-safe Blob-Inventar via az CLI (OneDrive-venv-safe, azure-storage-blob-SDK bricht mit FileLocks), (b) `registry.py` — pdf-registry-signed.yaml-Loader + Publisher-Aggregation, (c) `chunks.py` — JSONL-Streaming + Sample + Stats, (d) `encoding.py` — **First-Class Encoding-Health-Check** (U+FFFD, double-encoded UTF-8, mojibake, `§/Umlaut`-Presence — motiviert durch EZBK-Ingest-Regression 2026-08-26 mit 2393 kaputten Chunks). Plus `notebooks/vault_content_explorer.ipynb` mit 6 Sections. Präzisiert HARDCODED `feedback_console_utf8_pflicht` als struktureller Check statt reine Regel. **Skaliert 3 Fliegen:** (1) Aufgabe erledigen, (2) reusable, (3) nachvollziehbar (Sparringspartner-Style), **Bonus:** B220-Backfill nutzt data_explorer.vault + registry direkt. **Cross-Ref:** [`docs/architecture/b222-data-explorer-live-notebook.md`](docs/architecture/b222-data-explorer-live-notebook.md).
- Trigger
- ✅ 2026-08-26 (Foundation-Commit pending Push)
- Aufwand
- 2h
✅ Secret-Scanner Baustein v0.1.0 (Sprint-1 Dogfood + V2-Vertical-Foundation)
Autopilot-Session: erster kleiner Baustein aus V2-Agent-Security-Kandidaten-Liste umgesetzt. Regex-Registry mit 14 vendor-kuratierten Patterns (AWS/Azure/GitHub/Anthropic/OpenAI/Google/Slack/JWT/PEM/BasicAuth/Generic-Assignment) + Shannon-Entropy + Charset-Diversity + False-Positive-Filter (Placeholder-Wörter). Package `src/brandschutz/secret_scanner/` mit 5 Modulen: `models` (Finding + Provenance-Chain + Anti-Klartext-Guard im Pydantic-Model — Redacted-Text MUSS Maske haben), `entropy` (Shannon + Charset-Class-Diversity kombiniert), `detectors` (Regex-Registry + Semver-Version + Remediation-Hint), `scanner` (File-Walker mit gitignore-artigen Skips + Line-DoS-Schutz + UTF-8-safe Streaming). Plus CLI `scripts/security/secret_scan.py` + 21 Test-Assertions in `tests/test_secret_scanner.py`. **Anti-Abkürzung angewandt:** nicht 3 Regex-Patterns hingeklatscht — Provenance-Chain, SHA-256-Dedup ohne Klartext, State-Machine-fähiger Reifegrad-Anschluss (B188-kompatibel). **Dogfood-Bereit:** `python scripts/security/secret_scan.py --dedupe --severity high` — Erwartete-Zero-Findings auf unserem Repo. **V2-Wiederverwendbar:** Same Detector-Registry für V3-SA-Governance + Managed-Service. **Nicht-im-Scope v0.1** (Follow-up-Sprints, dokumentiert): SSH-Multi-Line-Keys, SaaS-API-Keys (Stripe/SendGrid), Slack-DM-Scan, PixelRAG-Screenshot-Scan (Wiederverwendung B225), Git-History-Scan, CI-Baseline-Freeze. **Cross-Ref:** [`docs/architecture/b234-secret-scanner-baustein.md`](docs/architecture/b234-secret-scanner-baustein.md), [[project_agent_security_vertical_unabhaengig]] V2-Vertical, [[feedback_never_secrets_in_chat]].
- Trigger
- ✅ 2026-08-27 MVP
- Aufwand
- 3h Autopilot-Session
✅ Service-Account-Inventory Baustein v0.1.0 (Sprint-2 V3-Vertical-Foundation)
Autopilot-Session Sprint-2 nach Secret-Scanner (B234). Azure-Machine-Identities-Discovery via az CLI + Microsoft Graph. Pydantic-Model mit Reifegrad-State-Machine (DISCOVERED → ATTESTED → IDLE_30D → IDLE_90D → SUSPICIOUS → DEPROVISIONED) analog B188. **Transition-History als Append-only-Audit-Trail** (Compliance-Grade). Classify-Regel: `has_secrets AND no_signin_30d → SUSPICIOUS` (der Umair-Case operationalisiert). **Dogfood-Run auf my-mind-default-Tenant:** 40 records (30 SPs + 10 User-Managed-Identities), 1 SUSPICIOUS (mcp-cognee-fire mit heute-erstelltem Client-Secret ohne Sign-In-Historie), 39 IDLE_30D. Detection-Logik hat SOFORT funktioniert. **Nicht-im-Scope v0.1** (dokumentiert): AWS/GCP/GitHub-Apps Cross-Cloud (V3-Vertical), Actual-Deprovisioning-Automation, HR-Diff, First-Party-Microsoft-App-Filter, Ownership-Chain-Reconstruction, CI-Integration. **Cross-Ref:** [`docs/architecture/b235-sa-inventory-baustein.md`](docs/architecture/b235-sa-inventory-baustein.md), [[project_service_account_governance_vertical_3]] V3-Vertical Managed-Service, B234 (komplementär: Secrets in Files vs. Secrets in Cloud-Identities), B188 (State-Machine wiederverwendet).
- Trigger
- ✅ 2026-08-27 MVP
- Aufwand
- 2h Autopilot-Session
✅ Coding-Agent-Inventory Baustein v0.1.0 (Sprint-3 V2-Layer-3-Foundation)
Autopilot-Session Sprint-3 nach B234 (Files-Secret-Scan) + B235 (Cloud-Identity-Scan). Baustein operationalisiert User-Killer-Frage-Zitat 2026-08-26: *"Willst du dass Copilot deinen kompletten Code kennt inkl. aller Vulnerabilities?"*. Detection-Logik: Enterprise-App-Name-Match gegen Vendor-Katalog (17 Namen: GitHub Copilot, Cursor, Cody, Continue, TabbyML, Anthropic, Codeium, Tabnine, Windsurf, Phind etc.) + Risky-OAuth-Scope-Filter (14 Patterns: Files.Read.All, Sites.Read.All, Code.Read, repo, read:org, Mail.Read etc.) + Reifegrad-State (DISCOVERED / LICENSED_ACTIVE / SUSPICIOUS / REVOKED). **Dogfood-Erst-Run auf my-mind-default:** 0 Coding-Agent-Enterprise-Apps → HARDCODED-Regel [[feedback_coding_agent_anthropic_only_gpt_chat_only]] STRUKTURELL BELEGT. Sales-Story-Value: *"Zeig mir dein Coding-Agent-Enterprise-App-Inventar"* — die meisten Firmen können's nicht, wir können + die 0 ist Foundation-Beleg unserer Governance-Story. **19 Tests, 0 failed.** **Nicht-im-Scope v0.1**: GitHub-Copilot-Seats (braucht GitHub-PAT), Endpoint-Config-Scan (Cursor/Continue/Cody), Local-LLM-Positiv-Detection (Ollama), Retention-Attestation-Automation, Copilot-Chat-Log-Scan. **Cross-Ref:** [`docs/architecture/b236-coding-agent-inventory-baustein.md`](docs/architecture/b236-coding-agent-inventory-baustein.md), [[project_agent_security_vertical_unabhaengig]] Layer 3, [[project_normiq_pillars_konkurrenz_gap]] 5-Min-Discovery-Sequence-Antwort-Baustein.
- Trigger
- ✅ 2026-08-27 MVP
- Aufwand
- 1.5h Autopilot
✅ Data-State-Observability MVP v0.1.0 (Portal-Page + FastAPI + Cron)
Getriggert durch User-Sorge *"was mir sorgen macht ist die data ingestion — ist wirklich alles im system?"*. Vertikale Slice: Backend-Collector (`src/brandschutz/data_state/`, klassifiziert Registry-Einträge in 7 CoverageStatus-Werte anhand `last_extracted_at` + `n_chunks_extracted` + `status`-Feld) → JSON-Snapshot (`data/data_state/latest.json`) → FastAPI-Endpoints (`GET /api/data-state` + `GET /api/data-state/health` mit 26h-Staleness-Alert) → Next.js Portal-Page (`/platform/data-state`, Server-Component, Aggregat-Karten oben, sortierte Full-Table mittig, Status-Legende unten, --good/--warning/--bad-Farbcodierung) → HeaderNav-Link *"Datenstand"* zwischen *Plattform* und *FAQ* → GHA-Cron daily 04:15 UTC + on-push bei Registry-Änderungen + workflow_dispatch (Auto-Commit bei Diff). **12 Tests grün** (`tests/test_data_state_collector.py`, bypass conftest via `--noconftest` bis Gemini-import-Chain fixed ist). **Live-Truth-Moment** aus dem MVP-Run: 825 Sources deklariert, aber nur **4 extracted** (davon 3 nur chunks=1 Header-Stub), **759 storage_present ohne Chunker-Run**, 59 registry_only. User-Ground-Truth *"1 Band drin"* strukturell bestätigt — Foundation ist im MVP nahe Null. **Bewusst NICHT in v0.1** (Follow-up B237.1-.5): Azure-Blob-HEAD-Verify, Azure-Search-Live-Count, Cognee-Node-Count, Diff-View gestern-vs-heute, Push-Alert-bei-Regression. **Anti-Lipservice-Belege:** 6 HARDCODED-Anker referenziert (`no_content_without_verification`, `no_lipservice_in_commits`, `live_log_first_before_prompt_iteration`, `foundation_error_free_no_duplicates`, `own_platform_first`, `structured_outputs_and_observability_from_day_one`). **Cross-Ref:** [`docs/architecture/b237-data-state-observability.md`](docs/architecture/b237-data-state-observability.md), Registry-Konvention `docs/architecture/buchscan-multi-provenance-convention.md`, verwandter Live-Coverage-Report `scripts/quality/verify_content_coverage.py`.
- Trigger
- ✅ 2026-08-27 MVP live
- Aufwand
- 2h