# Changelog Alle markanten Änderungen pro Release. Format an [Keep a Changelog](https://keepachangelog.com/de/1.1.0/) angelehnt, semantisches Versioning. ## [1.0.0] — 2026-04-21 Erstes konsolidiertes Release nach längerer 0.x-Entwicklungsphase. Live unter . ### Hinzugefügt — Frontend (v2) - **Komplettes Redesign** auf das ECOnGOOD Corporate Design (Manual Juni 2024) — Tokens-Datei, Avenir/Nunito-Sans-Stack, Phosphor-Icon-Set, Dark-Mode mit `data-theme`-Attribut (#114, #139) - **AppShell** mit zwei-Spalten-Layout (Sidebar 230 px, Main), Drawer auf Mobile, Navigation in vier Gruppen LESEN/PRÜFEN/DATEN/ADMINISTRATION - **Server-Side-Routing** für Antragsdetail (`/antrag/{drucksache}`), keine reine Client-Seite mehr - **Login-Modal** in der Topbar mit Tabs Anmelden/Registrieren via Direct-Access-Grant — kein Keycloak-Redirect mehr (#129) - **Keyboard-Shortcuts** j/k/Enter/Esc/?/⏎ im Listenmodus mit Help-Modal - **Sort-Dropdown** mit acht Optionen (Score/Datum/Drs.-Nr./Titel je asc/desc), localStorage-persistiert - **Antragsdetail vollständig** mit ScoreHero, Matrix-Mini 5×5 (klickbar mit Erklärungs-Modal), Programm-Treue-Tabelle pro Fraktion (auch ohne Zitate), §INS§/§DEL§-Redline-Parser, Versionshistorie, namentlichem Abstimmungsverhalten als Balken pro Fraktion (#106 Phase 1) - **Bookmarks/Voting/Kommentare/Share/Re-Analyze** alle in v2-Detail integriert mit Auth-Modal-Fallback - **Live-Landtag-Suche** als eigener Screen `/v2/landtag-suche` - **Admin-Panel** mit drei Screens (Freischaltungen, Queue mit 5 s Auto-Refresh, Abos für alle User) - **Open-Graph-Bilder** pro Antrag (1200×630 PNG, Playwright-gerendert, SHA-Cache) (#141) ### Hinzugefügt — Backend - **16 Landesparlamente + Bundestag** als Adapter (BUND, NRW, BE, HH, BW, RP, LSA, MV, HB, HE, BY, SL, TH, BB, SN, SH; NI deferred wegen Login) - **abgeordnetenwatch.de-Integration** Phase 1 für strukturierte Roll-Call-Votes — 28 977 BT-Votes in DB, Drucksachen-Match via 9 BL-spezifische URL-Patterns + Datum/Titel-Fallback (#106) - **Drucksachen-Typen-Normalisierung** filtert Anträge/Gesetzentwürfe von Kleinen Anfragen etc. (#127) - **Embeddings v3 → v4** Modell-Migration mit WRITE/READ-Pattern (ADR 0006) - **DDD-Lightweight-Migration** Tag 1-4: `LlmBewerter`-Port, `QwenBewerter`-Adapter, drei Repositories (Antrag/Bewertung/Abonnement), Domain-Verhalten auf Pydantic-Modellen (ADR 0008, #136) - **Mail-Digest** mit täglichem Cron 07:00, BL/Partei-Filter pro User-Abo (#124) - **Monitoring-Scan** aller Adapter mit Kosten-Schätzung — Beobachtung ohne Auto-Fetch, Mail-Report mit „0-Kontext"-Hinweis (#135) - **Merkliste server-seitig** mit Migration aus localStorage (#140) - **Wahlprogramm-Auto-Download** halbautomatisch mit SHA-Gate, kuratierte URL-Liste, Admin-UI (#138) - **Fehlende Wahlprogramme** automatisch im Assessment markiert + UI-Hinweis (#128) - **Clustering** via Embedding-Nähe-Graph mit Bubble-Chart (#105) - **Background-Queue** mit drei parallelen Workern, Graceful Shutdown 15 min, Job-Persistenz (#99) - **Voting + Kommentare** mit Visibility-Modi (öffentlich/angemeldet/nur ich) (#94) - **RSS/Atom-Feed** für neue Bewertungen (#125) ### Hinzugefügt — Tests & Doku - **574 Tests, 13 skipped** — Unit-Suite < 2 s, plus Integration/E2E unter Markern - **Bug-Regression-Tests** für fünf historische Fixes (PRAGMA-Cursor, JWT-azp, CDU-PDF, PFLICHT-FRAKTIONEN, NRW-Titel) - **Live-Adapter-Tests** + Frontend-Cross-Validation + Citation-Substring-Tests (`pytest -m integration`) - **Playwright-E2E-Tests** (`pytest -m e2e`) - **Smoke-Test-Script** `scripts/smoke-test.sh` für Gesamt-Funktionsprüfung gegen Live-System - **8 ADRs** dokumentiert, plus DDD-Bewertung (1 237 LOC) und Protokoll-Parser-v6-Machbarkeit (418 LOC) - **Zugriffsrechte-Doc** mit 63 Routes × User-Status-Matrix - **Doppel-Lizenz** Code MIT + Daten/Bewertungen CC-BY-4.0 ### Geändert - `/` zeigt jetzt v2-Frontend, classic unter `/classic` weiterhin erreichbar - Auswertungen mit BL-Filter (#137 fix) - Direkt-Verlinkbarkeit (`/antrag/{drs}`) als Permalinks ersetzen Query-Parameter (#132) - Social-Media-Texte werden vom LLM erzeugt und in DB gespeichert (#133) - v5-Prompt mit PFLICHT-FRAKTIONEN aller LT-Fraktionen, nicht nur Antragsteller+Regierung - Citation-Binding server-seitig: Quellen-Label der Zitate werden gegen die tatsächlich abgerufenen Chunks rekonstruiert (ADR 0001) - Mail-Digest-Template mit „0-Kontext"-Hinweis falls keine neuen Drucksachen seit letztem Scan - Login als HttpOnly-Cookie + separate `rt`-Cookie für Refresh-Token (`/api/auth/logout`-Route für sauberen Cookie-Reset) ### Bekannte Einschränkungen - **NI (Niedersachsen)** im Monitoring-Scan geskippt — NILAS-Portal ist Login-protected, HAR-Capture nötig (#22) - **Saarland-Adapter** swallowt manche httpx-Exceptions tiefer im Code als der erste Fix-Layer (#142) - **Drucksachen-Match in MV/BY/BB/TH/HH/SL** für abgeordnetenwatch-Polls noch lückenhaft — deren `field_intro`-HTML enthält keine PDF-Links, der Datum+Titel-Fallback hängt von vorheriger Indexierung ab - **Plenarprotokoll-Parser v6** für nicht-namentliche Abstimmungen ist Phase 2, nicht in 1.0 (#106 follow-up) - **DDD-Callsite-Migration** in `main.py` (~21 direkte Database-Aufrufe → Repository-Dependency-Injection) als Folge-PR offen (#136 follow-up) ### Sicherheit - **Security-Headers** (CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy) - **Rate-Limiting** auf teuren POST-Endpoints (10/min auf `/api/analyze-drucksache`) - **Eingabe-Validatoren** (Drucksachen-Format-Regex, Such-Query-Längen-Cap) - **JWT-Validation** über Keycloak JWKS, `azp`-Check statt `aud` für Public Clients (49c1b92) ### Statistik - 11 789 LOC Python in `app/` - 23 Module, 8 Templates-Verzeichnisse - 71 produktive Bewertungen in der Live-DB - 85 Wahlprogramme indexiert (Embeddings v4, ~50 000 Chunks) - 28 977 abgeordnetenwatch-Votes - 574 Tests, 0 Regressions --- ## [0.x] — Pre-Release-Phase Frühere Iterationen. Siehe `git log` für Detail-Historie. Wesentliche Meilensteine: - v3 → v4 Embedding-Migration (#123) - Clustering + Force-Graph (#105, #108) - Bookmarks + Kommentare (#94) - Methodik-/Transparenz-Seite (#96) - Keycloak SSO (#43) - Multi-BL-Adapter (#22 Reihe, #72-#87) [1.0.0]: https://repo.toppyr.de/tobias/gwoe-antragspruefer/releases/tag/v1.0.0