Merge origin/main in feature/16-test-audit

Konflikte aufgelöst:
- docs/status/STATUS.md: Baustellen aus main (Basemap #88 ff., #93, #99, #100, #104) und aus dem
  Audit-Branch zusammengeführt und neu nummeriert; Punkt Test-Audit auf den Endstand für sn_basis
  (#76, PR #117) und den nächsten Schritt sn_verfahrensgebiet (#60) umgeschrieben; Stand 26.10.2026.
- docs/tests/testkatalog.md/.html: nicht von Hand zusammengeführt, sondern mit
  scripts/testkatalog.py neu erzeugt (sn_basis auf unstable nach PR #117,
  sn_verfahrensgebiet auf unstable).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 21:00:37 +01:00
co-authored by Claude Opus 5.5
15 changed files with 1779 additions and 98 deletions
+39 -13
View File
@@ -1,7 +1,7 @@
# Status des Projekts
Kurz und aktuell. Wird bei jedem Merge und jeder Übergabe gepflegt (Skill `sn-uebergabe`). Älteres wandert nach unten
in „Erledigt" oder wird gelöscht. **Stand: 18.09.2026.**
in „Erledigt" oder wird gelöscht. **Stand: 26.10.2026.**
## Aktuelle Phase
@@ -13,7 +13,7 @@ spätere Phase und beginnt erst, wenn die Test-Baseline grün ist und das Projek
| Person / Behörde | Schwerpunkt | Stand |
|---|---|---|
| Daniel Helbig (LK Meißen) | Fachfunktionen Verfahrensgebiet, Plan41, VLN-API; aktuell Test-Audit (Basis #63 gemergt, weitere Lücken laut Testkatalog offen) | aktiv |
| Daniel Helbig (LK Meißen) | Fachfunktionen Verfahrensgebiet, Plan41, VLN-API; Basemap im Druck (Basis #88 ff.); Test-Audit (sn_basis abgeschlossen, Basis #76; als Nächstes sn_verfahrensgebiet, Verfahrensgebiet #60) | aktiv |
| Michael Otto (LK Mittelsachsen) | Release-Infrastruktur, Linkliste, zuletzt Verfahrensgebiet (Shape-Laden, Beteiligung) | aktiv |
| 22munzke | Druck/Layout-Anforderungen (Issues Basis #37–#44) | Issues |
| weitere Behörden | Einstieg über dieses Repository | ab 09/2026 |
@@ -65,14 +65,38 @@ spätere Phase und beginnt erst, wenn die Test-Baseline grün ist und das Projek
(fest verdrahteter NAS-Namespace `gid/6.0` in `grenzpunkt_alkis.py`, abgeflachte WFS-Feldnamen in
`sql=`-Filtern). Vergleich 6↔7 und Anpassungsliste: `docs/konzept/09_alkis7_umstellung.md`.
Nächster Schritt: Gitea-Issue in `Plugin_SN_Verfahrensgebiet`.
15. **Test-Audit durchführen (Ticket #16).** Infrastruktur ist fertig, PR steht aus: `scripts/test_audit.py`
(`status`/`markieren`) und `docs/status/testpruefungen.json` machen im Prüfstand
(`docs/tests/testkatalog.html`) je Testfall sichtbar, ob und wann er zuletzt fachlich geprüft wurde
(unabhängig vom Baseline-Status). Aktuell gelten alle 346 Testfälle als „nie geprüft" — nächster Schritt
ist der eigentliche Audit-Durchgang (Team geht die Pakete durch und markiert per `test_audit.py markieren`),
danach getrennt: Testlücken/Fachtests aus den Testkonzept-Seiten ergänzen (Ticket-Text nennt das
ausdrücklich als separaten Folgeschritt).
16. **Standarddatei-Existenzprüfung fehlt (Basis #59).** `Dateipruefer._handle_leere_eingabe()` und
15. **Basemap-Legende im Druck (Basis #88).** In `unstable` gemergt: #88 (PR #89), Punktlinien-Korrektur #90
(PR #91), Rand für weiße Flächen #92. Offen: **fachliche Abnahme des Legendenkatalogs** `sn_basis/data/basemap_legende.json`
(Bezeichnungen, Gruppen, Zusammenfassungen; Konzept `docs/konzept/10_basemap_legende.md` Abschnitt 10,
ADR 0010; bisher unauffällig). Unter QGIS 4 geprüft (Plugin funktioniert, Rückmeldung 02.10.2026).
16. **Kartenrand-Überlappung bei kleinen Verfahren (Basis #93).** Gemergt (PR #95). Mehrspaltige Legenden schmaler
(#96: Textumbruch 60 mm, ungleiche Spaltenbreiten, zweizeiliger Basemap-Titel, Mindestbreite 180 mm wie das
Kartenschild) auf
`Plugin_SN_Basis:bugfix/96-legenden-spaltenbreite`, gemergt (PR #97).
17. **Basemap hinzufügen und Thema wechseln (Basis #100).** Gemergt (PR #103, Doku PR #25).
Themen Farbe/Grau, Erkennung über Kachel-URL, Prüfwert für ungespeicherte Änderungen. Manueller QGIS-Test
am 05.10.2026 bestanden (Laden über `styleUrl`, Themenwechsel per `setDataSource`, Prüfwert stabil). Folge-Issues: #101
(Import/Export der Stile), P10 Vektor (#102: technisch geprüft 06.10.2026, fachliche Entscheidung offen –
Beta-Lizenz nur zu Testzwecken, siehe `fallstricke.md`), Relief.
18. **Langer Tab verlängert das QGIS-Fenster (Basis #104).** Gemergt (PR #105, Doku PR #26): jeder Tab im
Scroll-Bereich über `BaseDockWidget.setWidget`, wirkt auch für Plan41/Verfahrensgebiet.
19. **Zoom und Drucklayout bei anderem Projekt-KBS (Basis #99).** Behoben auf `Plugin_SN_Basis:bugfix/99-druck-kbs`
und `Plugin_SN_Verfahrensgebiet:bugfix/99-zoom-kbs` (Doku: `Projektwissen:docs/99-druck-kbs`), PRs stehen aus;
**Basis zuerst mergen** (Verfahrensgebiet nutzt `zoom_auf_layer`). Layoutkarte im KBS des Verfahrensgebiets.
Offen: QGIS-Test. Folge-Issue (Entwurf): Projekt-KBS prüfen und amtliches KBS nach Länderkennung vorschlagen.
20. **Test-Audit (Projektwissen #16).** Werkzeug: `scripts/test_audit.py` (`status`/`markieren`) und
`docs/status/testpruefungen.json` zeigen im Prüfstand (`docs/tests/testkatalog.html`) je Testfall, ob und wann
er zuletzt fachlich geprüft wurde (unabhängig vom Baseline-Status). Markiert wird nur nach Freigabe durch einen
Menschen (`AGENTS.md`).
- **sn_basis abgeschlossen (Basis #76, PR #117, 26.10.2026):** 304 von 365 Testfällen geprüft. Bewusst
zurückgestellt, weil sie überarbeitet werden: Druckmodul (`test_print_logic.py`, `test_print_tab.py`) und
`test_excel_importer.py`. Die seit dem Abzweig auf `unstable` hinzugekommenen Tests (Basemap, Kartenrand,
Druck-KBS) sind noch „nie geprüft“. Befunde als eigene Issues: #77, #78, #84, #87, #110–#116. Tests, die
fragwürdiges Ist-Verhalten festhalten, verweisen auf ihr Issue (#77, #78, #114, #116).
- **sn_verfahrensgebiet als Nächstes (Verfahrensgebiet #60):** 289 Testfälle, keiner geprüft; zusätzlich ist
für jeden roten und übersprungenen Test zu entscheiden: anpassen, Bug-Issue oder entfernen.
- Danach getrennt: Fachtests aus den Testkonzept-Seiten ergänzen (laut #16 eigener Folgeschritt).
21. **Standarddatei-Existenzprüfung fehlt (Basis #59).** `Dateipruefer._handle_leere_eingabe()` und
`Pruefmanager._handle_basic_decision()` prüfen bei `standarddatei_vorschlagen` nie `file_exists()` —
bestätigt der Nutzer eine nicht vorhandene Standarddatei, kommt trotzdem `ok=True`/`"ok"` zurück statt
`datei_nicht_gefunden`. Bearbeitung bewusst zurückgestellt: **hängt von der Design-Entscheidung ab, ob
@@ -80,7 +104,7 @@ spätere Phase und beginnt erst, wenn die Test-Baseline grün ist und das Projek
(`DataGrabber.py`, `excel_importer.py`) den Parameter `standarddatei`. `TestDateipruefer.test_
standarddatei_vorschlagen` bleibt bis zur Entscheidung bewusst ohne Gegenstück für den Fehlerfall
(kein Testfall-„nie geprüft", sondern Verhalten ungeklärt) — siehe Kommentar im Testfall.
17. **WMS-Zeilen im Datenabruf ungeklärt (Basis #77).** `Datenabruf._fetch_features()` liefert für
22. **WMS-Zeilen im Datenabruf ungeklärt (Basis #77).** `Datenabruf._fetch_features()` liefert für
`provider == "WMS"` immer `([], None)`, der Kommentar dort verspricht „caller behandelt WMS separat" —
das tut `datenabruf()` aber nicht: jede WMS-Zeile durchläuft dieselbe relevant/ausserhalb-Klassifizierung
wie WFS/REST/OGR und landet deshalb zwangsläufig in `ausserhalb`, ohne dass je ein Layer geschrieben
@@ -88,9 +112,9 @@ spätere Phase und beginnt erst, wenn die Test-Baseline grün ist und das Projek
die im Kommentar versprochene Sonderbehandlung? `DatenabrufOrchestrierungTests.
test_wms_zeile_ohne_features_landet_in_ausserhalb` dokumentiert bewusst den Ist-Zustand, nicht den
bestätigt gewünschten — siehe Kommentar im Testfall.
18. **Falscher Aktionscode in `Datenschreiber.schreibe_log()` (Basis #78).** Der Erfolg wird mit
23. **Falscher Aktionscode in `Datenschreiber.schreibe_log()` (Basis #78).** Der Erfolg wird mit
`aktion="standarddatei_vorschlagen"` gemeldet — demselben Code, den `Dateipruefer`/`Pruefmanager` für
die Standarddatei-Rückfrage nutzen (Punkt 16). Aktuell folgenlos, weil `Pruefmanager.verarbeite()` bei
die Standarddatei-Rückfrage nutzen (Punkt 21). Aktuell folgenlos, weil `Pruefmanager.verarbeite()` bei
`ok=True` sofort zurückkehrt, bevor die Aktion ausgewertet wird — aber missverständlich und zerbrechlich
bei künftigem Code, der auf diese Aktion filtert. `SchreibeLogTests.
test_schreibt_json_datei_mit_ergebnissen_und_gibt_pfad_zurueck` dokumentiert bewusst den Ist-Zustand —
@@ -101,6 +125,8 @@ und `Repository` (Release 26.8.4-unstable) liegen hinter `origin`. Aktualisieren
## Zuletzt gemergt (unstable)
- 26.10.2026 Basis #76 (PR #117): fachliche Testdurchsicht sn_basis ohne Druckmodul und excel_importer;
schwache Tests geschärft, Lücken geschlossen, Befunde als Issues #110–#116. sn_basis 526/526 grün.
- 18.09.2026 Basis #63 (PR #64): Tests für die vier bis dahin testlosen Kernmodule der Datenpipeline
(`Datenabruf.py`, `Datenschreiber.py`, `LayerLoader.py`, `excel_importer.py`), 70 neue Testfälle, sn_basis
jetzt 166/166 grün. Nebenbei `_MockQgsProject` um `transformContext()`/`addMapLayer()` ergänzt.