diff --git a/.planning/HANDOFF.json b/.planning/HANDOFF.json new file mode 100644 index 0000000..ab82bfa --- /dev/null +++ b/.planning/HANDOFF.json @@ -0,0 +1,51 @@ +{ + "version": "1.0", + "timestamp": "2026-06-19T12:50:32.516Z", + "phase": "03", + "phase_name": "module-system-domaincheck", + "phase_dir": ".planning/phases/03-module-system-domaincheck", + "plan": 4, + "task": 1, + "total_tasks": 1, + "status": "paused", + "completed_tasks": [ + {"id": 1, "name": "Module SDK + Registry (03-01)", "status": "done", "commit": "fa15d35"}, + {"id": 2, "name": "Domaincheck Module Backend+Frontend (03-02)", "status": "done", "commit": "1d9fd22"}, + {"id": 3, "name": "Module UI Lazy Loading + Category Pages (03-03)", "status": "done", "commit": "de63b10"}, + {"id": 4, "name": "Bugfix: Module Settings Page + Sidebar Categories", "status": "done", "commit": "dad9a77"}, + {"id": 5, "name": "Bugfix: Tenant Context fuer Module Activation", "status": "done", "commit": "b8ef870"}, + {"id": 6, "name": "Bugfix: Fehlermeldung in Domaincheck-Seite", "status": "done", "commit": "9b2b1ea"} + ], + "remaining_tasks": [ + {"id": 7, "name": "Plan 03-04: Human Verification End-to-End", "status": "not_started"} + ], + "blockers": [ + { + "description": "API /modules Endpoint gab 401 trotz erfolgreicher Authentifizierung — wurde durch fehlenden Tenant-Kontext im JWT verursacht und gefixt (b8ef870)", + "type": "technical", + "workaround": "Geloest" + } + ], + "human_actions_pending": [ + { + "action": "Plan 03-04 ausfuehren: Manueller End-to-End-Test des Modulsystems (11 Schritte)", + "context": "Docker Stack starten, als Admin einloggen, Modul aktivieren/deaktivieren testen, Domaincheck pruefen", + "blocking": true + } + ], + "decisions": [ + {"decision": "Framework-agnostisches ComponentType im SDK statt React-Abhaengigkeit", "rationale": "SDK soll Backend-kompatibel bleiben", "phase": "03-01"}, + {"decision": "MODULE_REGISTRY Whitelist-Pattern: nur explizit gelistete Slugs koennen dynamic imports triggern", "rationale": "Sicherheit gegen Arbitrary Code Loading (T-03-09)", "phase": "03-03"}, + {"decision": "Login redirect via window.location.href statt router.push", "rationale": "Vollstaendiger Page-Reload stellt sicher, dass Auth-State korrekt geladen wird", "phase": "03-bugfix"}, + {"decision": "API_INTERNAL_URL fuer Server-Side API-Calls im Docker-Netzwerk", "rationale": "SSR-Requests laufen Container-intern, nicht ueber Host-Port", "phase": "03-bugfix"} + ], + "uncommitted_files": [ + ".planning/STATE.md", + ".planning/config.json", + "apps/web/src/app/(auth)/login/page.tsx", + "apps/web/src/lib/auth-actions.ts", + "docker-compose.yml" + ], + "next_action": "Uncommitted Changes committen, dann Plan 03-04 starten: Docker Stack hochfahren und manuellen End-to-End-Test der 11 Verifikationsschritte durchfuehren", + "context_notes": "Phase 03 Plans 01-03 vollstaendig ausgefuehrt. Drei Bugfixes fuer Auth/Tenant-Kontext-Probleme committed. Noch 5 Dateien mit uncommitted Changes (Login-Fix, API_INTERNAL_URL, State-Updates). Plan 04 ist ein reiner Human-Verification-Plan — kein neuer Code, nur manuelles Testen." +} diff --git a/.planning/phases/03-module-system-domaincheck/.continue-here.md b/.planning/phases/03-module-system-domaincheck/.continue-here.md new file mode 100644 index 0000000..5b72341 --- /dev/null +++ b/.planning/phases/03-module-system-domaincheck/.continue-here.md @@ -0,0 +1,93 @@ +--- +context: phase +phase: 03-module-system-domaincheck +task: 1 +total_tasks: 1 +status: paused_before_verification +last_updated: 2026-06-19T12:50:32.516Z +--- + + +Phase 03 Plans 01-03 wurden vollstaendig ausgefuehrt. Drei Bugfixes committed (Tenant-Kontext, Login-Redirect, Fehlermeldungen). Es gibt 5 Dateien mit uncommitted Changes (Login-Fix, API_INTERNAL_URL, State-Updates). Naechster Schritt ist Plan 03-04: manueller End-to-End-Test des gesamten Modulsystems. + + + + +Abgeschlossene Aufgaben: +- Plan 03-01: Module SDK + Registry — Done (fa15d35, 8c24c1e) + - @tessera/module-sdk Package mit framework-agnostischen Types + - Prisma ModuleDefinition + ModuleTenantActivation Schema + - NestJS ModuleRegistry mit CRUD + Aktivierung/Deaktivierung Endpoints + - ModuleGuard fuer Tenant-spezifische Modul-Zugriffskontrolle +- Plan 03-02: Domaincheck Module — Done (2e0a4dd, 1d9fd22) + - DNS-basierter Domain-Verfuegbarkeitscheck (node:dns/promises) + - NestJS Backend mit DomaincheckModule, Service, Controller + - Next.js Frontend mit Eingabeformular, Ergebnis-Tabelle, farbigen Badges + - Auto-Seed: Domaincheck wird beim Start registriert + - i18n Strings (de/en) +- Plan 03-03: Module UI Lazy Loading — Done (a191628, de63b10) + - MODULE_REGISTRY Whitelist mit next/dynamic SSR-false Lazy Loading + - Kategorie-Seite /modules/[category] mit ModuleCard Grid + - Erweiterte Modul-Ansicht /modules/[category]/[moduleSlug] + - API-Client Utility (apps/web/src/lib/api.ts) +- Bugfixes: + - Module Settings Page + dynamische Sidebar-Kategorien (dad9a77) + - Tenant-Kontext fuer Module Activation gefixt (b8ef870) + - Echte Fehlermeldung in Domaincheck-Seite anzeigen (9b2b1ea) + + + + +- Uncommitted Changes committen (5 Dateien — siehe unten) +- Plan 03-04: Human Verification End-to-End (11 Schritte) + 1. Docker Compose Stack starten + 2. Als Admin einloggen + 3. GET /modules — Domaincheck in Liste + 4. GET /modules/active — aktivierte Module + 5. Modul aktivieren (POST /modules/{id}/activate) + 6. Kategorie-Seite /modules/domain-tools pruefen + 7. Domaincheck oeffnen, "google" pruefen — rote Badges + 8. Zufaellige Domain pruefen — gruene Badges + 9. Sprachwechsel (i18n) testen + 10. Dark Mode testen + 11. Modul deaktivieren und Zugriffssperre pruefen + + + + +- Framework-agnostisches ComponentType im SDK (kein React-Import, Backend-kompatibel) +- MODULE_REGISTRY Whitelist: nur explizit gelistete Slugs triggern dynamic imports (Sicherheit T-03-09) +- Login-Redirect via window.location.href statt router.push (vollstaendiger Auth-State-Reload) +- API_INTERNAL_URL fuer SSR-Requests im Docker-Netzwerk (Container-interne Kommunikation) +- credentials:'include' aus Server-Side Fetch entfernt (nicht noetig bei SSR) + + + +- Keine aktiven Blocker. Alle bisherigen Probleme (401 bei /modules, fehlender Tenant-Kontext) wurden geloest. + + +## Required Reading (in Reihenfolge) +1. `.planning/phases/03-module-system-domaincheck/03-04-PLAN.md` — Verifikationsplan mit 11 Testschritten +2. `.planning/phases/03-module-system-domaincheck/03-CONTEXT.md` — Phase-Kontext und Entscheidungen +3. `.planning/phases/03-module-system-domaincheck/03-01-SUMMARY.md` — SDK + Registry Details +4. `.planning/phases/03-module-system-domaincheck/03-02-SUMMARY.md` — Domaincheck Module Details +5. `.planning/phases/03-module-system-domaincheck/03-03-SUMMARY.md` — UI Lazy Loading Details + +## Infrastructure State +- Docker Compose Stack: nicht gestartet (muss fuer Verifikation hochgefahren werden) +- PostgreSQL: Migrations bis inkl. ModuleRegistry angewendet +- Domaincheck Seed: wird automatisch bei API-Start ausgefuehrt +- 5 uncommitted Dateien: + - `.planning/STATE.md` — Progress-Update + - `.planning/config.json` — _auto_chain_active Flag + - `apps/web/src/app/(auth)/login/page.tsx` — window.location.href Login-Redirect + - `apps/web/src/lib/auth-actions.ts` — API_INTERNAL_URL + Cleanup + - `docker-compose.yml` — API_INTERNAL_URL + JWT_SECRET env vars + + +Alle drei Implementierungs-Plans (01-03) sind fertig. Die Bugfixes haben Auth- und Tenant-Probleme behoben, die beim manuellen Testen aufgefallen sind. Die uncommitted Changes sind alles Fixes aus der letzten Debug-Session — muessen noch committed werden bevor die Verifikation startet. Plan 04 ist kein Code-Plan sondern ein reiner Human-Verification-Checkpoint. + + + +Start mit: Uncommitted Changes committen (Login-Fix + Docker-Config), dann Plan 03-04 ausfuehren — Docker Stack starten und die 11 manuellen End-to-End-Verifikationsschritte durchgehen. +