Files
tessera-ctl/.planning/quick/261009-of3-anleitungen-gegen-code-pruefen-und-nacha/verify-entwicklung-2.json
T
schalli 67015a0fcf
Tessera CI/CD / Lint & Type Check (push) Successful in 51s
Tessera CI/CD / Tests (push) Successful in 2m25s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 12m38s
Tessera CI/CD / Build & Publish Images (push) Successful in 4m12s
docs(quick-261009-of3): Pruefberichte und Zusammenfassung
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-09 17:44:04 +02:00

35 lines
3.3 KiB
JSON

{
"doc": "docs/anleitung-entwicklung.md",
"range": "541-1004",
"claims_checked": 120,
"wrong": [
{
"line": "635-640",
"claim": "Das Dockerfile setzt als CMD: prisma migrate deploy --schema apps/api/prisma/schema.prisma && node apps/api/dist/main.js",
"actual": "Der CMD ist `sh apps/api/scripts/migrate-and-start.sh`. Das Skript trennt Migrations- und Laufzeitverbindung (TESSERA_MIGRATE_DATABASE_URL, Vorgabe DATABASE_URL), Rollentrennung gemäß docs/mandantentrennung-datenbankrolle.md.",
"evidence": "apps/api/Dockerfile:59; apps/api/scripts/migrate-and-start.sh:1-40",
"fix": "CMD-Block ersetzen durch `CMD [\"sh\", \"apps/api/scripts/migrate-and-start.sh\"]` und ergänzen: Das Skript führt `prisma migrate deploy` (mit TESSERA_MIGRATE_DATABASE_URL, falls gesetzt, sonst DATABASE_URL) aus und startet danach die API mit DATABASE_URL."
}
],
"outdated": [
{
"line": "549-550",
"claim": "forTenant() führt vor jeder Query SELECT set_config('app.current_tenant', $1, true) aus",
"actual": "Die Anweisung setzt drei Werte in einem Aufruf: app.current_tenant, app.current_user (leer, wenn kein userId) und app.system_context (leer).",
"evidence": "apps/api/src/prisma/prisma-tenant.extension.ts:201",
"fix": "Ergänzen: 'setzt zugleich app.current_user (optionaler dritter Parameter) und löscht app.system_context'."
}
],
"missing": [
{
"line": "558-566",
"claim": "RLS-Abschnitt",
"actual": "Es gibt zusätzlich eine Systemkontext-Variante (app.system_context='true', Zeile 228 der Extension) und Wächter-Specs rls-coverage/rls-access-inventory/rls-app-role/rls-preflight in apps/api/src/prisma/, die nicht erwähnt werden.",
"evidence": "apps/api/src/prisma/prisma-tenant.extension.ts:228; apps/api/src/prisma/*.spec.ts",
"fix": "Kurz die RLS-Wächter-Specs und den Systemkontext-Weg (für Hintergrunddienste) erwähnen."
}
],
"ok_count": 119,
"notes": "Geprüft und korrekt: TenantGuard/APP_GUARD-Reihenfolge, x-tenant-id, req.tenantId; RLS-Zählung 23 = 4+3+16; zehn persönliche Tabellen in Migration 20260911120000; plattformweite Modelle ohne tenantId; Role-Enum; RolesGuard global; module-grants Routen und Rollen (matrix vor users/:userId); postinstall-Skript; Vitest-Konfigurationen (node/jsdom, setup.ts, passWithNoTests); Testbefehle; Desktop-Spec mit NestFactory; CI-Job desktop mit cargo check/clippy; Tenders-Routenreihenfolge (alle genannten statischen Routen vor @Get(':id')); CHANGELOG-Mechanik (next.config, Dockerfile, .dockerignore, publish-release.sh exit 1, filterChangelogForChannel); Release-Fenster (Endpunkte, getRunningRelease, parse/compareReleaseVersions, selectReleaseNotice, User.lastSeenReleaseVersion); Dashboard-Hintergrund (Spalte, Endpunkt, getMe, shared-Parser); i18n-Wächter-Specs; @custom-variant dark in globals.css:22; Nextcloud-Teilen (nextcloud-shares.ts, Grenzen 8 MiB/64 KiB/1 MiB, Routen, checkShareCreate 10 und checkShareAttempt 40 je 10 min, mapShareFailure, e2e-shares.sh mit Argumenten und policy_wait); Zertifikatsmanager (3 POST-Routen, Limits 30/5/20 MiB, 200/50/50, KDF 1.000.000/6.000.000, ZIP-Grenzen, PEM_BLOCKS 1000, 512 KiB certBuildJsonBody, http-setup, createGuardedLookup, AIA 8 s/256 KiB, public-url-guard Exporte, Fixtures, e2e-cert.sh)."
}