- README.md: aktuelle Inhalte (16 BL + BT, alle Features), Doppel-Lizenz, Schnellstart, Statistiken - CHANGELOG.md: vollstaendige 1.0-Notes mit Hinzugefuegt/Geaendert/Bekannte-Einschraenkungen/Sicherheit - DATA-LICENSE: Creative-Commons-Attribution-4.0-International fuer Bewertungs-Daten/Reports - LICENSE (MIT) bleibt unveraendert fuer den Quellcode Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
101 lines
6.3 KiB
Markdown
101 lines
6.3 KiB
Markdown
# 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
|
||
<https://gwoe.toppyr.de/>.
|
||
|
||
### 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
|