| quick-260911-cwh |
01 |
database |
| prisma |
| postgresql |
| row-level-security |
| multi-tenancy |
| nestjs |
| vitest |
| calendar |
|
| phase |
provides |
| quick-260910-krx |
Bereich dashboard vollstaendig gebunden, Muster fuer generierten-Client-Messung (Pruefung 5b) |
|
|
| Bereich calendar (calendar.service.ts, Modell calendarSource) vollstaendig an forTenant() gebunden, alle zwoelf Datenbankzugriffe |
| Elfter Abschnitt runCalendarAreaChecks in rls-scratch-check.mjs mit 13 neuen Pruefungen (davon vier ueber den generierten Client) |
| calendar.service.spec.ts NEU angelegt — erste Testlage dieses Bereichs, 23 Testfaelle mit Zwei-Klienten-Nachweis |
| Kritikschrift Abschnitt '## Bereich calendar' mit gemessenem Cache-Schluessel-Urteil und Zugangsdaten-Erhaltungsbefund |
| WINDOWS #26: offener Ledger-Eintrag zur lautlosen Fehlerrichtung im Bereich calendar |
|
| etappe-2-mandantentrennung |
| calendar-modul |
| rls-scratch-check-tooling |
|
| tokens |
tasks |
commits |
plan_head_before |
| 25378 |
3 |
3 |
508d9e4301 |
|
| added |
patterns |
|
|
| forTenant(this.prisma, tenantId) als lokale tenantPrisma-Konstante je Methode mit Datenbankzugriff (dienst-interner Weg, wie alle acht Bereiche vor calendar) |
| Zwei-Klienten-Testnachweis via __makeBoundClient(tenantId) — ungebundener Fake protokolliert nicht, gebundener schon |
| Generierter-Client-Messung an einer schemagleichen Wegwerf-Tabelle (Spaltenmenge zur Laufzeit gegen schema.prisma geprueft) statt Roh-SQL, fuer Fehlerklassen die die Anwendung tatsaechlich sieht |
|
|
| created |
modified |
| apps/api/src/calendar/calendar.service.spec.ts |
|
| apps/api/scripts/rls-scratch-check.mjs |
| docs/mandantentrennung-etappe2-fehlerrichtung.md |
| apps/api/src/calendar/calendar.service.ts |
| apps/api/src/calendar/calendar.controller.ts |
| docs/mandantentrennung-zugriffsklassifikation.md |
| .planning/WINDOWS.md |
|
|
| Cache-Schluessel (userId:from:to) bleibt OHNE Mandantenanteil — die vierteilige Kette (schema.prisma User.id @default(uuid()) -> JwtStrategy.validate -> auth.service.ts sub:user.id -> extractContext) zeigt eine plattformweit eindeutige UUID, die Etappe-3-Entscheidung (1) betrifft User.username/User.email, nicht User.id |
| Keine neue Fehleruebersetzung fuer die drei Besitzpruefungen noetig: der gemessene Wettlauf-Fall wirft PrismaClientKnownRequestError/P2025 (nicht PrismaClientUnknownRequestError wie im Bereich dashboard), und dieser Pfad ist durch die vorgeschaltete findUnique-Besitzpruefung strukturell unerreichbar |
| refreshCacheInBackground wird NICHT als sechster Hintergrunddienst-Fall gefuehrt — sie iteriert nicht ueber Mandanten, sondern traegt den Mandanten der Anfrage, die sie angestossen hat (Befund B) |
| Antwortsemantik 403 (Forbidden bei fremdem Besitz) vs. 404 (NotFound bei unbekannter Kennung) bleibt unveraendert — waere eine API-Aenderung ausserhalb des Auftrags |
|
| WINDOWS-18 |
| ETAPPE-2-CALENDAR |
|
| id |
description |
requirement |
verification |
human_judgment |
| D1 |
Alle zwoelf Datenbankzugriffe von calendar.service.ts laufen gebunden ueber forTenant(), ein tenantPrisma-Klient je Methode mit Datenbankzugriff |
ETAPPE-2-CALENDAR |
| kind |
ref |
status |
| unit |
apps/api/src/calendar/calendar.service.spec.ts — 23 Testfaelle |
pass |
|
| kind |
ref |
status |
| unit |
apps/api/src/prisma/rls-access-inventory.spec.ts — Bestandsaufnahme stimmt mit Quelltext ueberein |
pass |
|
| kind |
ref |
status |
| other |
node apps/api/scripts/rls-scratch-check.mjs — runCalendarAreaChecks, 13 neue Pruefungen |
pass |
|
|
false |
|
| id |
description |
requirement |
verification |
human_judgment |
| D2 |
Kritikschrift misst die umgekehrte Fehlerrichtung an der ausgelieferten Regel (Migration 20260909140000, bestaetigt unveraendert durch 20260910120000) inklusive vier Pruefungen ueber den generierten Prisma-Client an einer schemagleichen Wegwerf-Tabelle |
WINDOWS-18 |
| kind |
ref |
status |
| other |
node apps/api/scripts/rls-scratch-check.mjs — Pruefungen calendarsource-wegwerftabelle-deckt-alle-spalten-des-generierten-clients, calendarsource-generierter-client-* |
pass |
|
|
false |
|
| id |
description |
verification |
human_judgment |
| D3 |
Fuenf handgepflegte Dokumentstellen der Klassifikation nachgezogen und maschinell gegen den Quelltext gegatet; WINDOWS-Ledger-Eintrag #26 in Tabelle, JSON-Block und Kopfzaehlern konsistent |
| kind |
ref |
status |
| unit |
apps/api/src/prisma/rls-access-inventory.spec.ts |
pass |
|
| kind |
ref |
status |
| other |
Plan-Verify-Gates Aufgabe 3 (Uebersichtszeile, Summenzeile, Klassen-Verteilung, Hintergrunddienst-Abschnitt, WINDOWS.md-Konsistenz) — manuell in der Ausfuehrung nachvollzogen |
pass |
|
|
false |
|
|
21min |
2026-09-11 |
complete |