chore(planning): Veraltete Checkpoints entfernt, ihr Wissen nach STATE.md ueberfuehrt

Die beiden .continue-here.md-Dateien stammten aus abgeschlossener Arbeit
(Phase 10 vom 2026-07-21, Meilenstein-Abschluss vom 2026-08-11) und waren als
Wiedereinstiegspunkt ueberholt. Ihre noch gueltigen Inhalte standen jedoch
nirgends sonst und waeren beim Loeschen verloren gegangen:

- fuenf Anti-Patterns (tautologischer Test, HTTP 200 als Funktionsbeleg,
  Image-Datum als Aktualitaets-Beleg, Server-Compose ist kein Checkout,
  stale live container maskiert Fertigstellung)
- Infrastruktur-Stand von alpha inkl. der Drift zwischen /opt/tessera und
  dem Repository
- der Blocker "kein AD-Schreibzugriff", der den noch offenen Live-Test
  WINDOWS #4 direkt betrifft

Beides ist jetzt als eigene Abschnitte unter Accumulated Context in STATE.md
festgehalten. Ausserdem den Blocker 15-06 als erledigt markiert (die
Gegenprobe wurde am 2026-09-07 nachgeholt) und .gsd/ ignoriert — das ist
Laufzeit-Scratch, das pro Sitzung neu geschrieben wird.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FYZcd3SSmo14QTqWx2KKzU
This commit is contained in:
2026-09-07 14:36:43 +02:00
parent cf24e978b4
commit 98a8c93bfb
4 changed files with 46 additions and 201 deletions
+43 -7
View File
@@ -5,10 +5,10 @@ milestone_name: Plattform-Berechtigungen
current_phase: 17
current_phase_name: eigene-ausschreibungs-quellen-je-nutzer
status: verified
stopped_at: "Sitzung sauber beendet, alles auf origin/main (8629889), Arbeitsbaum leer. Erledigt: Phase 17 auf passed; alte Browser-Gegenproben #1,#2,#3,#5 nachgeholt; zwei echte Defekte behoben (#10 Zugriffs-Guard griff nicht auf modul-eigenen Routen, #11 Fingerabdruck-Dedup war wirkungslos) plus #13 (Tailwind-Dunkelvariante nie an .dark gebunden, ueber 100 dark:-Angaben ohne Wirkung); Logo und Favicon eingebaut; Umlaute, Anrede und Ein-/Mehrzahl korrigiert; Meilenstein-Buchhaltung auf v1.2 abgeschlossen. Offen: WINDOWS #4/#6 (echtes AD), #12 (echtes Exchange) — alle als Deferred Items fuer den Live-Test vorgemerkt; Backlog: Mandanten-Branding."
last_updated: "2026-09-07T12:30:00.000Z"
stopped_at: "Aufraeumen abgeschlossen. Zwei veraltete .continue-here-Dateien entfernt, ihre noch gueltigen Inhalte (5 Anti-Patterns, Infrastruktur-Stand alpha, Blocker 'kein AD-Schreibzugriff') nach STATE.md Accumulated Context ueberfuehrt; .gsd/ in .gitignore. Naechster Schritt: Live-Tests WINDOWS #4, #6 (echtes AD) und #12 (echtes Exchange-Postfach). Achtung: #4 braucht AD-Schreibrechte, die am 2026-08-11 noch fehlten."
last_updated: "2026-09-07T14:40:00.000Z"
last_activity: 2026-09-07
last_activity_desc: Sitzung abgeschlossen — Phase 17 zu, zwei Defekte behoben, Logo eingebaut, Sprache bereinigt, Meilenstein-Buchhaltung korrigiert
last_activity_desc: Checkpoint-Aufraeumen — veraltete .continue-here-Dateien entfernt, Pitfalls und Infrastruktur-Stand nach STATE.md gerettet
progress:
total_phases: 17
completed_phases: 17
@@ -289,6 +289,42 @@ Recent decisions affecting current work:
- [Phase ?]: [17-03]: Anzeige-Rollenpruefung auf settings/page.tsx ueber useAuthStore (unbekannt/erlaubt/verweigert); verbindliche Pruefung bleibt serverseitig
- [Phase ?]: [17-03]: REQUIREMENTS.md SRC-01..05 nachtraeglich ergaenzt — Luecke aus 17-01/17-02, dort schon in SUMMARY-Frontmatter gefuehrt
### Pitfalls & Anti-Patterns
Lehren aus abgeschlossenen Sitzungen. Gerettet aus den Checkpoint-Dateien
(`.continue-here.md`), die am 2026-09-07 entfernt wurden.
| Muster | Beschreibung | Schwere | Vermeidung |
|--------|--------------|---------|------------|
| Tautologischer Test | Der Test der objectGUID-Suche baute seinen Erwartungswert mit **derselben** Hilfsfunktion, die der Produktionscode benutzte. Er bestaetigte damit, dass die Funktion zu sich selbst passt — nicht, dass ein Verzeichnis den Filter versteht. Der Fehler ueberlebte Review und 500+ Unit-Tests und haette beim ersten echten Sync alle AD-gebundenen Gruppen geloescht. | blocking | Tests gegen externe Systeme muessen die **Form** des Aufrufs pruefen (Buffer statt String, Objekt statt interpoliertem Text), nicht seinen mit Produktionscode erzeugten Inhalt. Siehe `ldap.service.spec.ts`, die beiden Tests am Ende des `syncBoundGroupsForTenant`-Blocks. |
| HTTP 200 als Funktionsbeleg | `oeffentlichevergabe.de/ui/...` ist eine Single-Page-App und antwortet auf JEDE Kennung mit 200 und identischen 1309 Bytes, auch auf `NONSENSE123`. Ein Statuscode-Test haette "funktioniert" gemeldet. | advisory | Bei SPA-Zielen den gerenderten Inhalt pruefen (Playwright), nie den Statuscode. |
| Image-Datum als Aktualitaets-Beleg | Das Web-Image trug den 7. August und sah veraltet aus. Tatsaechlich hatten sich die Web-Quellen seither nicht geaendert; Docker-Layer-Caching erzeugt ein bit-identisches Image mit altem Erstellungsdatum. | advisory | Vor einer Aussage ueber Rueckstand `git log -- apps/web` pruefen, nicht das Image-Datum. |
| Server-Compose ist kein Checkout | `/opt/tessera` ist keine Git-Arbeitskopie. Aenderungen an Compose-Dateien im Repository kommen dort nie an; der Deploy holt nur Images. | blocking | Aenderungen an `docker-compose*.yml` wirken NICHT auf alpha. Was dort gelten soll, muss zusaetzlich in `/opt/tessera/docker-compose.yml` eingetragen werden (erlaubt, mit Sicherung). Siehe Backlog `2026-08-11-compose-datei-auf-server-driftet.md`. |
| Stale live container maskiert Fertigstellung | Code, Migration und Tests waren gruen, aber der laufende `tessera-ctl-api-1` lief auf dem Image von vor der Phase. Niemand hatte je einen echten HTTP-Aufruf gegen die neuen Routen gesehen. Das war kein Code-Defekt, sondern eine unbeobachtete Fertigstellung. | advisory | Container neu bauen (`docker compose up -d --build api web`), bevor ein "Tests gruen"-Zustand als nutzersichtbar fertig gilt. Gilt fuer die lokale Entwicklungsmaschine; auf dem Testserver macht der User das selbst. |
### Infrastruktur-Stand (alpha, Stand 2026-08-11)
Gerettet aus `.continue-here.md`. Relevant fuer die noch offenen Live-Tests.
- **alpha** (192.168.13.12, https://alpha.tessera.ctl.de): API-Image mit allen Fixes;
Migrationen `20260811120000_doe_notice_url_backfill` und
`20260811140000_encrypt_ldap_bind_password` angewandt.
- **`/opt/tessera/.env`**: traegt `TESSERA_ENCRYPTION_KEY` UND den alten
`CALENDAR_ENCRYPTION_KEY` mit gleichem Wert. Sicherung `.env.bak.20260811`. Die alte
Zeile kann weg, sobald kein Rueckfall auf aeltere Images mehr denkbar ist.
- **`/opt/tessera/docker-compose.yml`**: von Hand um die neue Variable ergaenzt, Sicherung
`docker-compose.yml.bak.20260811`. Driftet vom Repository ab.
- **Testdaten auf alpha**: 405 Benutzer und die AD-gebundene Gruppe `Claude_VT`
(9 Mitglieder) aus dem Sync vom 2026-08-11. Der User wirft vor dem Go-live ohnehin
alles raus.
- **Deploy-Regel**: `pull`/`up`/`restart` macht der User. Konfigurationsdateien auf dem
Server darf Claude bearbeiten (seit 2026-08-11), vorher sichern.
- **Kein AD-Schreibzugriff** (Stand 2026-08-11): Phase-16-UAT 1/3/4 waren deshalb nicht
ausfuehrbar und wurden als dokumentierte Annahme geschlossen. **Betrifft direkt den
offenen Live-Test WINDOWS #4** — dessen Annahme A1 (objectGUID uebersteht Umbenennung)
verlangt eine echte Umbenennung im Verzeichnis, also Schreibrechte. Vor dem Live-Test
klaeren, ob diese inzwischen vorliegen.
### Pending Todos
None yet.
@@ -298,7 +334,7 @@ None yet.
- [Roadmap v1.1]: DÖE OpenData API pagination/rate-limit parameters unverified (Swagger UI is JS-rendered) — resolve via a live API call during Phase 10 planning, not assumed from docs.
- [Roadmap v1.1]: Whether AI-AG NetServer / cosinex VMP search pages require JS rendering is unverified — needs a Phase 13 start-of-phase spike before committing to playwright.
- Phase 14 Plan 03 (14-03): Task 4 human-verify OPEN — needs a real portal-alert mailbox (incl. Exchange/EWS live path) from the operator before INGEST-05's Exchange path is production-ready. Tasks 1-3 complete and committed (4d6fbb1, 8983231, 1be6b15, 48e1252); API 387/387, web 144/144 green.
- Phase 15 Plan 06 (15-06): manueller Browser-Durchklick aus dem Plan-Verification-Block nicht ausgefuehrt (kein Browser-Tool in dieser Session) — vor /gsd-ship nachholen, siehe WINDOWS.md unrun-verify #1
- ~~Phase 15 Plan 06 (15-06): manueller Browser-Durchklick nicht ausgefuehrt~~ — ERLEDIGT 2026-09-07, Gegenprobe WINDOWS.md unrun-verify #1 nachgeholt und bestanden
### Quick Tasks Completed
@@ -352,7 +388,7 @@ sind. Kein Anlass, sie vorher erneut vorzulegen.
## Session Continuity
Last session: 2026-09-07T12:30:00.000Z
Stopped at: Nichts in Arbeit. Naechster Schritt frei waehlbar — Mandanten-Branding waere der naechste Bau-Kandidat.
Last session: 2026-09-07T14:40:00.000Z
Stopped at: Aufraeumen erledigt (veraltete Checkpoint-Dateien entfernt, ihr Wissen nach STATE.md gerettet, .gsd/ ignoriert). Als naechstes: die drei zurueckgestellten Live-Tests WINDOWS #4, #6, #12 gegen echtes AD und echtes Exchange-Postfach.
Resume file: None
Last activity: 2026-07-14 - Built LDAP per-user exclude/denylist filter (9d1323f), migration applied on live DB, verified via Playwright: sync deactivated 4 excluded service accounts (administrator/krbtgt/guest/dns-ldap), 2 real LDAP users stay active, 0 wrongly created
Last activity: 2026-09-07 - Checkpoint-Aufraeumen; Pitfalls und Infrastruktur-Stand in STATE.md ueberfuehrt