8.7 KiB
8.7 KiB
TODO / Roadmap
Leitprinzipien (immer beachten)
- Qualitaet vor Menge. Lieber weniger, dafuer sauberes/freigegebenes Wissen.
- Einfach konfigurierbar. Neues Wissen ueber
config/tools.yaml/config/general.yamlergaenzbar (Domaene/Tool + Link + Strategie + Scope), ohne Code zu aendern. - Transparenz. Jederzeit sichtbar, welches Wissen wo liegt und mit welchen Tags (GitLab Pages: Uebersicht + Wissensquellen, Frontmatter).
Offen (Code/Inhalt)
Bugs / beobachten
- Confluence-Abruf schlug im CI fehl (gefunden 2026-06-28 im ETL-Log): alle
confluence_*-Quellen brachen mitNo scheme suppliedab (CI-VariableCONFLUENCE_URLohnehttps://) -> pathos/nur/mateo/infraportal/rechnungsbahnhof wurden nicht aktualisiert. URL inzwischen korrigiert - der naechste ETL-Lauf muss bestaetigen, dass es wieder laedt (jetzt inoutput/run_log.jsonlalssources_failed: 0sichtbar). - ETL-Sichtung insb. wegen Dateigroesse (naechster Check: 2026-06-30): nach dem
Merge von
chore/data-to-output(v2.0.0) pruefen, ob der naechste ETL-Lauf sauber durchlaeuft (output/staging-Trennung in CI korrekt?run_log.jsonlFehler-frei?). Ausserdem Repo-Groesse im Auge behalten – gerade die INB-Chunks erzeugen viele Dateien. Ggf. alte Chunk-Generationen (output/chunks/) per Shallow-Clone oder LFS-Strategie entschaerfen, falls das Repo >500 MB waechst.
Monitoring / Logging
- ETL-Laeufe regelmaessig pruefen - jetzt einfach ueber
output/run_log.jsonl(letzte Laeufe inkl. Fehler je Quelle) bzw. die Health-Zeile in der Pages-Fusszeile. - Lauf-Log umgesetzt (
output/run_log.jsonl, append-only, gekappt auf 500): Zeit, verarbeitete Dokumente, Status-Counts, Fehler je Quelle; Health-Zeile auf der Uebersicht; Manifest-Eintrag auf der Chatbot-Seite. (v1.3.0)
Inhalt / Datenqualitaet
- Dedup ueberlappender Quellen (v1.4.0): gleiche Seite je scope/domaene nur ein
Dokument (Gate-Dedup per
page_identity, spezifischere Aufbereitung gewinnt) +prune_duplicate_files. Einmalig 42 Alt-Duplikate entfernt (v.a.nur). - pathOS „FAQ PathOS Extern" wieder erfasst (v1.3.1): Seite ist h2/Absatz-basiert,
nicht als Q/A-Tabelle -> Strategie von
confluence_faqaufconfluence_pageumgestellt. Vorher landete das komplette externe FAQ leer in pending. - Confluence-Anhaenge (eingebundene PDFs) werden erfasst (v1.5.0): bei
confluence_page/confluence_treewerdenview-file/viewpdf-Anhaenge ueber den PDF-Parser zu Markdown und als eigene Dokumente (kind: attachment,parent_url-> Seite) abgelegt. Inkrementell. Default an, peroptions: { attachments: false }abschaltbar. Bilder: alt-Text bleibt als[Bild: ...]erhalten (Variante A). Offen/optional: drawio-Diagramme (Text aus XML extrahieren) - aktuell nicht erfasst. - INB-Sectioning / Chunking umgesetzt (v1.1.0/1.2.0): heading-basiert,
deterministisch, inkrementell,
output/chunks/, Katalogoutput/_index.json. Default aus, aktiv fuer INB. Spaeter ggf. weitere grosse Dokumente (Regelwerk).
Ideen (Konzept steht, Entscheidung offen)
- #1 Nachtraegliches Taggen. Regelbasiert:
config/tag_rules.yaml(match: domain/url/titel/keyword -> add_tags) + Befehlpython -m src.retag, der NUR dietags:-Zeile im Frontmatter neu schreibt (Body unveraendert -> content_hash stabil, kein Netz, idempotent), committet. Optional spaeter LLM/Keyword-Vorschlaege, die in die Regeln einfliessen. Auf Pages ggf. Tag-Filter/Tag-Wolke. Gut v.a. fuer allgemeines Wissen (Kundeninfos). Aufwand: mittel. - #5 Intern/extern aus EINER Confluence-Seite trennen. Regel: extern ⊆ intern
(nur EINE Richtung). Marker fuer interne Abschnitte (Konvention zu entscheiden:
Panel/Info-Makro vs. Textmarker
[[intern]]..[[/intern]]vs. Ueberschrift „Nur intern"). Quellescope: "intern,extern": intern = ganze Seite; extern = interne Bloecke entfernt (zu kurz -> nur intern). Sicherheitsnetz: content_filter prueft extern weiter. Erkennung immd_converter+ Tests + Redakteurs-Doku. Aufwand: mittel-hoch, Leak-Risiko bei vergessenem Marker -> „im Zweifel raus".
Bedienbarkeit
- Helfer
scripts/add_tool.py(interaktiv: Domaene + Link + Strategie + Scope, inkl. yaml-Validierung) als Zwischenschritt zur Web-App. - Web-App (Option C, mittelfristig): Flask auf DBCS, Formular ->
GitLab-API legt MR an, mit Live-Vorschau. Pages verlinkt darauf. (Skill
dbcs-python-webapp.) - Issue->MR-Bot verdrahten: Webhook-Service ODER scheduled
glab-Job, derscripts/issue_to_source.pyausfuehrt und automatisch einen MR samt Vorschau anlegt. (Bausteinescripts/issue_to_source.py+scripts/issue_to_mr.shsind da.)
Quality Gates
min_quality-Schwelle infilter_rules.json:content_filtersetzt Docs unter der Schwelle aufpending(„niedrige Qualitaet"). Erst Verteilung sichten, dann aktiv schalten. (Score + Aufschluesselung sind jetzt auf den Pages sichtbar.)- gitleaks-Baseline (
.gitleaks.toml) fuer False Positives indata/, dannsecret-scanscharf schalten (aktuellallow_failure: true).
Vereinfachungen
- Strategie
kundeninfoentfernt (war redundant zucrawler/sitemap); inkl.ComponentType.KUNDENINFO+ComponentType.DEEPLINK(beide ungenutzt). docs/catalog.md(src/catalog.py) abgeschafft – Seite „Wissensquellen" (config.html) ersetzt es.docs/review_queue.md(src/review_queue.py) abgeschafft – Pages-Uebersicht zeigt pending/rejected inkl. Grund + Aktionslinks.--onlybleibt (vom MR-preview-Job genutzt).
Betrieb / Skalierung
- CI-Timeout fuer
knowledge-etlim Auge behalten (inkrementell unkritisch, ein Timeout wird vom naechsten Lauf nachgeholt). - Hinweis: Korpus bleibt bewusst in Git (kein externer Speicher) – Repo = Single Source of Truth.
Out of scope (vorerst, bewusst zurueckgestellt)
- Mehr externes Wissen pro Tool (eigene kund:innenfaehige Confluence-Seite).
- Owners-Backfill fuer alte kundeninfo-/INB-Dokumente (bleiben ohne Owner).
Erledigt (Kern)
- ETL-Grundgeruest: Extract (Confluence/Web/Sitemap/PDF/GitLab/File) -> Transform (md_converter, tagger, content_filter) -> Review-Gate (approved/pending).
- Strategien: confluence_page/tree/faq, crawler, sitemap, pdf, gitlab_md, file.
- Strategie-Erkennung pro URL (
src/strategy_detect.py), unbekannte URLs flaggen. - Scope-Modell: tool-weit
intern|extern|allgemein|mixed, sourceintern,extern(ganze Seite fuer beide). Pro-Seite-Trennlogik bewusst entfernt. - Output
output/processed/<scope>/<domaene>[/<tool>]IST der Vektor-DB-Feed (kein separater ingest-Export). - Gate 2: Allowlist
config/approvals.yaml(URL/Hash) im content_filter;review_noteserklaeren WARUM pending. - Quality-Score (0-100) pro Dokument (
src/quality.py), auf Pages + Hilfe erklaert. - INB-Feintuning:
pymupdf4llm-Parser (parser: pymupdf) -> echte Markdown-Tabellen; INB 2026/2027 + Regelwerk; PDF-Connector inkrementell (max_pdfs,keep_raw,redact-Option). - Confluence inkrementell (
options: { incremental: true }): Versions-Check pro Seite, unveraenderte Seiten werden uebersprungen (source_versionim Frontmatter). - GitLab Pages (DB-UX): Logo, Footer (Sebastian Reinig · V.IWF 91 · #Einfachbahn), Filter (extern/intern/allgemein/pending), Suche, Quality-Score sichtbar, Modal mit Inhalt/Quality-Aufschluesselung/Aktionslinks.
- Smoke-Test fuer
src.site.build()(erzeugt index/hilfe/chatbot/config/changelog + json). - Hilfe-Seite (
hilfe.html): Strategien-Tabelle, Ablauf, pending/rejected-Gruende. - Chatbot-Anschluss-Seite (
chatbot.html): welche Pfade pro Bot-Typ, wie Frontmatter zu interpretieren ist, Pruefhinweis, RAG-Ablauf. - CI: PyPI-Mirror (
PIP_INDEX_URL) statt Deps-Image; test/etl/pages ohne Custom-Image. Test-Fixpython -m pytest. renovate. - CI: stuendlicher Daten-Commit (Mo-Fr 8-17) loest
pages-Refresh aus (keinci.skipmehr), damit die Live-Seite nach dem Schedule aktuell ist. - Owners (1-2 Ansprechpartner) pro Tool/Quelle -> Frontmatter/Katalog/Pages.
- Issue-/MR-Templates, CODEOWNERS,
docs/SETUP.md, scm-info.yaml, Architektur-Steering mit Diagrammen. - Pages: einheitliches Sticky-Menu auf allen Seiten (Logo + Uebersicht/ Wissensquellen/Chatbot/Hilfe + CTA), Zaehler (Dokumente, Quellen); Ziel prominent; Strategien gruppiert/vereinfacht; Konfig-Transparenzseite (config.html).
- Pages: Domaenen-Filter auf der Uebersicht (Dropdown mit Anzahl je Domaene).
- CI: MR-Vorschau ueber GitLab-Pages parallel deployments (
pages.path_prefix), Produktion auf Root.