git-subtree-dir: bahn/wissensdatenbank git-subtree-split: 07a8196e5f9e55d027f90485beb95f4006387669
21 KiB
21 KiB
Changelog
Alle nennenswerten Aenderungen an dieser Wissensdatenbank werden hier dokumentiert.
Format orientiert sich an Keep a Changelog,
Versionierung nach Semantic Versioning (MAJOR.MINOR.PATCH):
- MAJOR – inkompatible Aenderung an Datenmodell/Output-Struktur oder Pipeline-Verhalten.
- MINOR – neue Funktion/Strategie/Quelle, abwaertskompatibel.
- PATCH – Bugfix, Doku, kleine Korrektur.
Die aktuelle Version steht in der Datei VERSION und wird auf der GitLab-Pages-Seite
(„Changelog") angezeigt.
[Unreleased]
[2.3.0] - 2026-06-30
Added
- FAQ-Chunking: ein Chunk je Frage/Antwort. Die pathOS-FAQ-Seite wird jetzt pro
Q&A in einen eigenen Chunk zerlegt (
chunk: faq,chunk_min_chars: 0-> auch kurze Q&A bleiben eigenstaendig), statt mehrere Q&A in einen gierigen Chunk zu packen. Externe Systeme bekommen damit jede Frage als einzeln abrufbaren Chunk (~90 Chunks). - TAF/TAP-TSI Fachliche Dokumentation als Quelle (Confluence-Tree, scope intern) unter dem Tool pathOS.
- Mehrere Chunk-Konfigurationen pro Ablage-Ort.
collect_locationssammelt jetzt je Ort eine Liste von Konfigurationen;chunk_locationwaehlt pro Dokument die erste passende (_match_opts). Neuer Filterchunk_component(analogchunk_kind): so chunken am selben Ortintern/pathosdie Anhang-PDFs weiter viachunk_kind: attachment(headings) UND die FAQ-Seite viachunk_component: faq, ohne sich zu ueberschreiben. Bestehende Chunks ohnechunk_componentbehalten ihren Fingerprint (kein Re-Chunk-Churn).
[2.2.0] - 2026-06-30
Added
- PDF-Discovery ueber die Sitemap (Strategie
pdf). Einepdf-Quelle kann statt einer festen.pdf-URL eine Sitemap + Regex bekommen (sitemap_url+url_pattern). Der Connector liest die (gz-)Sitemap, filtert die passenden PDF-URLs und waehlt die neueste Version (hoechsteresource/blob/<id>). So kommt z.B. immer die aktuelle Handbuch-Version automatisch rein, ohne die Config bei jeder Neuveroeffentlichung anzupassen.max_pdfsbegrenzt die Anzahl. - pathOS-Handbuch (Webportal) als Quelle (scope intern+extern): ueber die Sitemap mit
Pattern
Handbuch-pathOS-Webportal-> aktuell Version 1.01 (Stand 13.03.2026).
[2.1.0] - 2026-06-29
Fixed
- FAQ-Extraktion (
confluence_faq) ordnet Spalten jetzt ueber die Kopfzeile zu. Bisher wurde Spalte 0 als Frage und ALLE weiteren Spalten zusammengeklatscht als Antwort genommen - dadurch landeten Ansprechpartner/Cluster/Thema im Antworttext und die Kopfzeile als Pseudo-FAQ. Neu: benannte Spalten (Frage, Antwort, optional Ansprechpartner/Cluster/Thema) werden korrekt erkannt, die Kopfzeile uebersprungen, Metadaten separat unter der Antwort gefuehrt und Listen/Zeilenumbrueche erhalten - so passen Ueberschrift (### Frage) und Inhalt je Block sauber zusammen (auch fuer das FAQ-Chunking). Faellt ohne benannte Kopfzeile auf Spalte0=Frage/Rest=Antwort zurueck.
Added
exclude_pages(Option fuer confluence_tree/page): einzelne Seiten-IDs aus einem Tree ausschliessen, damit sie gezielt anders aufbereitet werden koennen (z.B. alsconfluence_faqstatt als generische Seite).- Komponenten-bewusstes inkrementelles Skip: eine
confluence_faq-Quelle ueberspringt eine Seite nur dann, wenn bereits ein FAQ-Dokument existiert - nicht, wenn lediglich eine Seiten-Version (aus einem Tree) vorliegt. Zusammen mitexclude_pageswird die pathOS-FAQ (Seite 355496791) damit als Q/A aufbereitet statt als rohe Tabelle.
[2.0.1] - 2026-06-29
Fixed
_index.jsonzaehlte Chunks von gechunkten Anhang-PDFs nicht (chunk_kind: attachment, z.B. pathOS):build_indexfuehrte die Chunk-Erkennung nur fuer Voll-Dokumente aus. Anhang-Eintraege bekamen keinenchunks-Block undchunks_totalwar zu niedrig (Undercount). Jetzt erhalten auch gechunkte Anhaenge ihrenchunks-Block und zaehlen inchunks_totalsowieby_domain[...].chunksmit. Wirkung auf den echten Bestand:chunks_total2410 -> 2604 (+194 pathOS-Anhang-Chunks). Regressionstest ergaenzt.
Changed
- TODO.md: ETL-Sichtung nach v2.0.0-Merge als offenen Punkt ergaenzt (Dateigroesse, Lauf-Check nach output/staging-Umstellung).
[2.0.0] - 2026-06-29
Changed (BREAKING - Output-Struktur)
- Saubere Trennung in zwei Top-Level-Ordner. Der bisher mit Konsumenten- und
internen Artefakten gemischte
data/-Ordner ist aufgeteilt:output/= Konsumenten-Feed. Eine Regel: „lies ausoutput/, ignoriere alles andere". Enthaeltprocessed/<scope>/...(Markdown-Feed),chunks/<scope>/...(Chunks),_index.json(Katalog),_meta.json(Status),run_log.jsonl(Lauf-Historie).staging/= intern, NICHT fuer Konsumenten. Enthaeltpending/<domain>/...(wartet auf manuelle Sichtung) undreview_report.json(Audit-Log letzter Lauf).
- CLI:
--datazeigt jetzt auf den Output-Pfad (Defaultoutput); neuer--staging-Parameter (Defaultstaging).src.main,src.chunkundsrc.siteunterstuetzen beide. ReviewGate(output_dir, staging_dir): zwei Pfade. Test-Convenience-FormReviewGate(base)(ein Pfad) leitetstaging_dir = base/stagingab..gitlab-ci.yml: alle Pfade angepasst;knowledge-etl-Artefakt enthaelt nur nochoutput/processed/. Bot pushtoutput/,staging/unddocs/.- Pfade im
_index.jsonsind weiterhin relativ zum Output-Root (processed/...,chunks/...); Anschliesser lesen sie alsoutput/<path>. - PDF-Connector:
keep_rawDefaultTrue->False. Aktiviert man es per Quelle, landet das Roh-PDF instaging/raw/<domaene>/(intern). Wegenincremental: truewerden Roh-PDFs ohnehin nur einmal geladen, nicht pro Lauf. - Cleanup: 78 Roh-PDFs (~35 MB) aus dem Repo entfernt (INB, KOMBau, pathOS),
explizite
keep_raw-Zeilen ausconfig/general.yamlentfernt (Default greift).
Changed (CI-Artefakte schlanker)
knowledge-etl-Artefakt:expire_invon 30 auf 7 Tage verkuerzt - der Bot pusht eh nachmain, das Artefakt ist nur Fallback ohneGIT_PUSH_TOKEN.pages-Artefakt:expire_in: 7 daysergaenzt (vorher unbegrenzt). Pages nutzt nur das neueste; alte hingen unnoetig herum.- Erwartete Wirkung: kumulativer Job-Artifact-Storage ~70-80% weniger.
Fixed
- Roh-PDFs landeten im Konsumenten-Feed statt intern:
set_data_dirsetzte das PDF-raw_diraus dem Output-Pfad ab (output/raw) und ueberschrieb so den korrekten Defaultstaging/raw. Beikeep_raw: truewaeren Roh-PDFs inoutput/gewandert.set_data_dir(data_dir, staging_dir)trennt jetzt sauber: Roh-PDFs nachstaging/raw, die Feed-Wurzel (output) dient nur dem inkrementellen Auffinden bereits verarbeiteter Dokumente (eigenesPdfConnector.data_dir). - Defekter „Datei im Repo"-Link auf der Pages-Seite: Der Pfad bekam doppelt ein
Prefix (
data/output/processed/...), dastoreden Pfad bereits mitoutput/bzw.staging/liefert. Prefix entfernt -> Links zeigen wieder korrekt ins Repo. - Pfad-Prefix bei verschachteltem Layout:
staging/-Pfade wurden im Report/Katalog korrekt erkannt, auch wennstagingunteroutputliegt (Test-Convenience-Form). Erkennung prueft jetztstagingzuerst.
Migration fuer Anschliesser
Aktuell gibt es keinen produktiven Anschliesser. Falls ein Repo-Clone alte
data/-Pfade referenziert, einmalig auf output/ umstellen. Frontmatter und
Inhalte sind unveraendert.
[1.5.1] - 2026-06-29
Fixed
- CI-Robustheit gegen transiente Mirror-Ausfaelle:
PIP_RETRIES=10undPIP_DEFAULT_TIMEOUT=90in.gitlab-ci.ymlvariables:ergaenzt (gilt fuer ALLE pip-Aufrufe). Hintergrund: am 2026-06-29 12:02 UTC scheiterte der ETL-Lauf an einem HTTP-504 vom Artifactory-PyPI-Mirror beim PyYAML-Download - pip brach nach dem Default-Retry-Budget ab. Mit den neuen Werten werden solche transienten Spikes abgefangen, ohne dass der ETL-Lauf scheitert.
[1.5.0] - 2026-06-29
Added
- Confluence-Anhaenge: eingebundene PDFs werden geparst (Option A): bei
confluence_page/confluence_treewerden im Seitentext eingebundene PDF-Anhaenge (view-file/viewpdf-Makros) ueber den vorhandenen PDF-Parser zu Markdown verarbeitet und als eigene Dokumente im selben Feed-Ordner abgelegt (Frontmatterkind: attachment,parent_url-> Elternseite,attachment_namemit Dateiname; scope/domain/owner werden geerbt). Inkrementell ueber die Attachment-Version, Default an (pro Quelle viaoptions: { attachments: false }abschaltbar). Damit kommt das bisher verlorene Anhang-Wissen rein (z.B.nur„Architekturskizze" + pathOS-Schnittstellen-Doku). - Bilder Variante A im Markdown-Konverter: statt Bilder komplett zu verwerfen,
bleibt der alt-Text/Dateiname als
[Bild: ...]erhalten - gibt dem RAG Kontext ohne Binaerdaten. Datei-Embeds ohne Parsing-Pfad als[Anhang: ...]-Marker. - Katalog
_index.jsonmitattachments-Liste pro Seite + Aggregatattachments_total/by_domain.attachments; Dokumente tragenkindim Index. - Feinsteuerung Chunking: zwei neue Optionen in
config/chunking.yaml(auch pro Quelle ueberschreibbar):chunk_min_doc_chars: Dokumente unter dieser Zeichenzahl bleiben ganz (kleine FAQ-/How-to-Seiten muessen nicht zwingend gechunkt werden).chunk_kind: chunkt nur Dokumente mit passendemkind(z.B.attachment-> nur Anhang-PDFs chunken, Seiten der gleichen Quelle bleiben unangetastet). Bei pathOS eingestellt:chunk: headings,chunk_kind: attachment,chunk_min_doc_chars: 3000an der Tool-Tree-Quelle - damit werden die grossen Anhang-PDFs (z.B. EVU-Schnittstellen-Doku, 2,8 MB) gechunkt, die Seiten + FAQs bleiben ganz._CHUNKER_VERSION3 -> 4 (Defaults im Fingerprint -> sauberer Rebuild betroffener Quellen beim ersten Lauf).
Fixed
- Connector-Robustheit:
UnboundLocalErrorbei nicht-inkrementellen Confluence-Quellen behoben (entrywird jetzt vor dem Skip-Pfad initialisiert). - chunk_kind wirkt jetzt End-to-End:
_doc_from_mdtraegtkind/parent_url/attachment_nameaus dem Frontmatter mit, sodass derchunk_kind-Filter im Offline-Pipeline-Pfad greift (vorher bliebkind="document"als Klassen-Default). - Determinismus Anhaenge: bei reinen Tag-/Owner-Aenderungen werden auch Anhang-Dateien
re-getagged (vorher driftete deren Frontmatter);
last_updated="unknown"als letzter Fallback, wenn wederversion.whennochversion.numbergeliefert werden.
Changed
- CI-Daten-Commit-Message:
chore(data): Wissensaktualisierung (automatischer Lauf)(vorher „naechtliche Wissensaktualisierung" - der Job laeuft stuendlich, Mo-Fr 8-17).
[1.4.0] - 2026-06-28
Added
- Dedup im Review-Gate: Dieselbe Quelle-Seite (per
page_identity, i.d.R. Confluence-Page-ID) erzeugt jescope/domaenenur noch ein Dokument im Feed - auch wenn mehrere Quellen sie liefern (z.B. ein breiterconfluence_treeUND eine dedizierteconfluence_faq-Quelle, oder mehrere ueberlappende Trees). Bei Konkurrenz gewinnt die spezifischere Aufbereitung (FAQ/Q-A schlaegt rohe Seite/Tabelle), sonst die zuerst verarbeitete Quelle. Verhindert die frueheren<slug>-<hash>.md-Duplikate. store.prune_duplicate_files: raeumt Alt-Duplikate (<slug>-<hash>.md, sofern die Basisdatei dieselbe Seite referenziert) auf; laeuft am Ende jedes Voll-ETL-Laufs.
Changed
- Einmalige Bereinigung: 42 vorhandene Duplikate entfernt (v.a.
nur: 3 ueberlappendeconfluence_tree-Quellen hatten „How to:"-Seiten mehrfach abgelegt; 95 -> 54 Dateien). Verschiedene Seiten mit zufaellig gleichem Titel (andere URL) bleiben erhalten.
[1.3.1] - 2026-06-28
Fixed
- pathOS „FAQ PathOS Extern" wird wieder erfasst: Die Quelle war als
confluence_faqkonfiguriert (extrahiert Q/A nur aus Tabellen), die Seite ist aber mit Ueberschriften (h2) + Absaetzen aufgebaut. Dadurch landete das komplette externe FAQ leer inpending. Strategie aufconfluence_pageumgestellt -> der volle Inhalt kommt in den Feed. (Die interne pathOS-FAQ ist eine echte Q/A-Tabelle und bleibtconfluence_faq.) Bekannte Restluecke (TODO): in Confluence angehaengte PDFs/Diagramme werden noch nicht erfasst.
[1.3.0] - 2026-06-28
Added
- Lauf-Log
output/run_log.jsonl(append-only Historie, 1 Zeile je ETL-Lauf): Zeitstempel, verarbeitete Dokumente, Status-Counts und Fehler je Quelle (z.B. fehlgeschlagene Confluence-Abrufe). Gekappt auf die letzten 500 Laeufe. So ist- auch historisch - sichtbar, ob ein Lauf sauber durchlief, ohne die fluechtigen
GitLab-Job-Logs zu durchsuchen.
src/main.pysammelt Fehler je Quelle und schreibt den Eintrag ueberstore.append_run_log. Die Uebersichtsseite zeigt in der Fusszeile eine kompakte Health-Zeile („N Dok verarbeitet · M Quellen mit Fehler"), die Chatbot-Anschluss-Seite listetrun_log.jsonlin den Manifest-Dateien.
- auch historisch - sichtbar, ob ein Lauf sauber durchlief, ohne die fluechtigen
GitLab-Job-Logs zu durchsuchen.
Changed
- Einfachere Erklaerung auf Uebersicht, Hilfe-Seite und im README: „Was ist ETL?" in drei Schritten (Sammeln → Aufbereiten → Ablegen) und die klare Botschaft, dass dieses Repo die Single Source of Truth ist (hier wird das Wissen gesammelt).
[1.2.0] - 2026-06-28
Added
- Bestands-Katalog
output/_index.json: dokument-genaues Manifest ueber den gesamten freigegebenen Bestand. Pro Voll-Dokumentdomain/tool/scope,url,path,content_hash,last_updatedund - falls vorhanden - die zugehoerigenchunks(Anzahl + Pfad), dazu Aggregateby_domain/by_scope. So sieht ein Anschliesser auf einen Blick, was pro Domaene/Tool wo liegt und welche Dokumente zusaetzlich als Chunks vorliegen (z.B. INB = Voll-Dokument und Chunks). Deterministisch (kein Zeitstempel) -> aendert sich nur bei echten Bestandsaenderungen, kein Git-Churn. Wird am Ende jedes ETL-Laufs (src.main/src.chunk) erzeugt. Doku auf der Chatbot-Anschluss-Seite, in README undarchitecture.md.
Fixed
- Robustheit ETL-Lauf: ein einzelnes defektes Dokument bricht den Lauf nicht mehr ab (per-Dokument abgefangen); Chunking ist im ETL ebenfalls gekapselt (nicht kritisch).
- Ungueltiges Redaction-Regex in
filter_rules.jsoncrasht nicht mehr, sondern wird mit Notiz uebersprungen. - Deterministische Sitemap-Auswahl: Tiebreaker nach URL bei gleicher Trailing-ID
(verhindert zufaellige Reihenfolge/Git-Churn bei gesetztem
limit). - Chunk-Linking sauber:
parent_hasheines Chunks entspricht jetzt exakt demcontent_hashdes Voll-Dokuments; Chunk-Dateinamen behalten garantiert die.md-Endung. chunk_overlapjetzt wirksam: war zuvor dokumentiert, aber ohne Effekt. Ab jetzt wird beichunk_overlap > 0der Tail des Vorgaenger-Chunks vorangestellt (Default 0 -> INB unveraendert)._is_offmatcht zudem nicht mehr versehentlich die Zahl 0.
[1.1.0] - 2026-06-28
Added
- Chunking fuer grosse Dokumente (Default aus, zunaechst INB): Zusaetzlich zur
Voll-Datei koennen Dokumente entlang der Markdown-Ueberschriften in Chunks zerlegt
werden – ein abgeleitetes, jederzeit neu erzeugbares Artefakt unter
output/chunks/<scope>/<domaene>/<docslug>/. Das Voll-Dokument inoutput/processed/bleibt unangetastet (Parent-Document-Muster). Aktivierung pro Quelle ueberoptions.chunk(off | headings | faq | recursive); gemeinsame Defaults inconfig/chunking.yaml, pro Quelle ueberschreibbar. Jeder Chunk traegt im Frontmatterkind: "chunk",parent_url,parent_hash,section,zifferund einen kurzen Contextual-Retrieval-Vorspann (> Kontext: <Dokument> > <Abschnitt>, deterministisch, ohne Embedding/LLM). Lauf offline viapython -m src.chunk --data data; laeuft zudem am Ende jedes ETL-Laufs (src.main) automatisch mit. Inkrementell: pro Dokument wird nur neu gechunkt, wenn sich der Inhalt (parent_hash) ODER die wirksamen Optionen/Strategie (chunk_fingerprint) geaendert haben; unveraenderte Dokumente werden uebersprungen (kein Git-Churn), deaktivierte Orte und verwaiste Chunks automatisch entfernt. Neu:src/transformers/chunker.py,src/chunk.py,config/chunking.yaml. INB 2026 + 2027 aufchunk: headingsgestellt. Doku in Hilfe-Seite, README undarchitecture.md. Robustheit: ueberlange Bloecke ohne Absatztrenner (z.B. OCR-„picture text", grosse Tabellen) werden hart aufchunk_max_tokensbegrenzt; eine_CHUNKER_VERSIONim Fingerprint erzwingt bei Logik-Aenderungen einen sauberen Rebuild. - Inkrementelles Re-Tagging: Jedes Dokument bekommt im Frontmatter einen
meta_fingerprint(Hash austags/owners/contact). Aendert sich eine dieser Metadaten intools.yaml/general.yaml, gleicht der naechste ETL-Lauf die bereits vorhandenen Dateien der betroffenen Quelle guenstig in-place an (ohne erneuten Download/API-Call); inhaltlich geaenderte Seiten werden weiterhin neu geladen. - Scope-Wechsel inkl. Aufraeumen: Aenderst du den
scopeeiner Quelle, wird die Seite an die neue Ablage (output/processed/<scope>/...) geschrieben und die alte Ablage automatisch entfernt (domaenen-intern, kollisionssicher, erst nach erfolgreichem Schreiben). Domain-Umbenennungen erzeugen die neue Ablage; die alte Domain bleibt bewusst stehen (siehe README) und ist manuell zu entfernen. - Globale Metadatei
output/_meta.jsonfuer nachgelagerte Systeme:last_run(Zeitpunkt des letzten ETL-Laufs),last_change(wann sich der Bestand zuletzt inhaltlich/metadatenseitig geaendert hat),documents,by_scopeund einecontent_signature. So weiss ein RAG-/Index-Consumer, ob/seit wann sich etwas getan hat. - Issue-/MR-Template: Hinweis, dass die Domaene final ist (steuert den Ablagepfad, spaetere Umbenennung vermeiden).
- Uebersicht: dezente Fusszeile mit „Stand: (letzte Aenderung: ...)"
aus
output/_meta.json. - Neue Domaene
web: oeffentliche Schienennetz-Seiten via Sitemap (Pattern/web/schienennetz/, ~230 Seiten). Erster Test: Median-Quality 90. - Wissensquellen-Seite: pro Quelle ein ✏️-Link (vorbefuelltes Issue zum Anpassen/Loeschen, inkl. Direkt-Edit-Link zur Config-Datei).
- Hilfe-Seite: Abschnitt „Wissen entfernen / aktualisieren" (per MR oder Schedule).
- Quality-Score in jeder Listenzeile der Uebersicht sichtbar (farbiges Badge: gruen >=70, orange >=40, rot darunter); im Detail-Modal die transparente Aufschluesselung (Laenge/Woerter/Ueberschriften/Listen/Tabellen).
- Platzhalter-Tools fuer alle betreuten Anwendungen ohne Quellen (erscheinen auf der Wissensquellen-Seite als „noch keine Quellen").
- Hilfe-Seite: Transparenz „Filter-Regeln" (aus der Uebersicht hierher ausgelagert).
- Chatbot-Anschluss-Seite: „Aktualitaet: letzter ETL-Lauf" + Schedule (aus der Uebersicht hierher ausgelagert).
Changed
- Vereinfachung:
pendingundrejectedzu einem einzigen Statuspendingzusammengefuehrt. Es gibt kein separates „rejected" mehr – alles was nicht approved ist, ist pending (mit Grund + Scope klar sichtbar im Frontmatter, auf der Pages-Seite und im Detail-Modal). Filter-Chip „rejected" entfernt; Statistik-Karte vereinfacht. - Scope im Detail-Modal bei pending-Dokumenten prominent sichtbar (eigenes Badge neben dem pending-Badge).
- Uebersichtsseite entschlackt: Zielbanner ohne ETL-/Link-Zeile; Filter-Regeln und ETL-Lauf-Box ausgelagert (s.o.).
- Bindestrich-Vereinheitlichung auf den Pages: En-Dash (–) durch normalen
-ersetzt. - Sitemap-Strategie:
limitist jetzt optional – fehlt es, werden ALLE Treffer desurl_patterngeholt (Kundeninfo ohne Limit, vorher 5000). - Uebersicht: redundanter CTA-Block „Wissen fehlt?" entfernt (Button im Menu reicht).
[1.0.0] - 2026-06-26
Erste produktive Version: die Pipeline laeuft im CI (Schedule), committet Wissen nach
main und veroeffentlicht die GitLab-Pages-Seite.
Added
- ETL-Grundgeruest: Extract -> Transform -> Auto-Filter -> Freigabe (Merge Request) ->
output/processed/<scope>/<domaene>[/<tool>]. - Strategien:
confluence_page,confluence_tree,confluence_faq,crawler,sitemap,pdf,gitlab_md,file; automatische Strategie-Erkennung pro URL. - Inkrementelles Laden: Confluence (Versions-Check) und Sitemap/PDF (bekannte URLs).
- PDF-Feintuning via
pymupdf4llm(echte Markdown-Tabellen), z.B. INB 2026/2027. - Scope-Modell
intern | extern | allgemein | mixed(+ Source-Scope"intern,extern"). owners(intern Verantwortliche) undcontact(herausgebbare Kontaktadresse, Defaulteinfachbahn@deutschebahn.com) im Frontmatter.- Auto-Filter (Sicherheitsnetz): Blacklist, Redaction (pro Quelle abschaltbar),
Mindestlaenge;
config/approvals.yamlzum nachtraeglichen Freigeben. - GitLab Pages (DB-UX): Uebersicht mit Filter (Scope + Domaene) und Suche, Hilfe, Chatbot-Anschluss (inkl. Gesamtbild-Skizze), Wissensquellen-Transparenz.
- Changelog-Seite + Versionsanzeige in der Navigation (aus
CHANGELOG.md/VERSION). - Issue-/MR-Vorlagen (Strategie pro Link), CODEOWNERS,
docs/SETUP.md,scm-info.yaml, Architektur-Steering mit Diagrammen.
Changed
- CI: PyPI-Mirror (
PIP_INDEX_URL) statt eigenem Deps-Image; ETL-Job nutzt das vollepython:3.14-Image (enthaelt git) und den DB-Web-Proxy fuer oeffentliche Quellen. - Lint im CI laeuft mit
ruff.
Fixed
- Confluence-Quell-URL aufloesbar (
/spaces/<KEY>/pages/<id>/<Titel>statt/pages/<id>). - Pages-JS-SyntaxError (Zeilenumbrueche im erzeugten JavaScript) behoben.