Files
tessera-ctl/.planning/quick/261009-of3-anleitungen-gegen-code-pruefen-und-nacha/verify-betrieb.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

76 lines
6.9 KiB
JSON

{
"doc": "docs/anleitung-betrieb.md",
"claims_checked": 120,
"ok_count": 116,
"wrong": [
{
"line": 276,
"claim": "Kapitel 5: Der api-Container führt Migrationen per CMD `prisma migrate deploy --schema apps/api/prisma/schema.prisma && node apps/api/dist/main.js` aus (apps/api/Dockerfile, CMD)",
"actual": "Das CMD ist jetzt `sh apps/api/scripts/migrate-and-start.sh`. Das Skript bricht ohne DATABASE_URL mit 'FEHLER: DATABASE_URL ist nicht gesetzt.' ab, führt `prisma migrate deploy` mit TESSERA_MIGRATE_DATABASE_URL (Rückfall DATABASE_URL) aus und startet Node per `exec node apps/api/dist/main.js`.",
"evidence": "apps/api/Dockerfile:59; apps/api/scripts/migrate-and-start.sh:25-48",
"fix": "Codeblock und Text in Kapitel 5 ersetzen: 'Der api-Container startet über apps/api/scripts/migrate-and-start.sh: erst prisma migrate deploy (Verbindung TESSERA_MIGRATE_DATABASE_URL, falls gesetzt, sonst DATABASE_URL), danach exec node apps/api/dist/main.js.' Satz 'startet node ... erst gar nicht' bleibt sinngemäß richtig (set -e)."
}
],
"outdated": [
{
"line": 153,
"claim": "Tabelle in Kapitel 3 listet die Prod-Variablen vollständig",
"actual": "docker-compose.prod.yml reicht zusätzlich TESSERA_MIGRATE_DATABASE_URL (Default leer) und CALENDAR_ENCRYPTION_KEY an die api durch. Letzteres wird nur in der Zeile von TESSERA_ENCRYPTION_KEY erwähnt, ersteres gar nicht.",
"evidence": "docker-compose.prod.yml:38,58",
"fix": "Zeile für TESSERA_MIGRATE_DATABASE_URL ergänzen (optional, getrennte Verbindung mit Tabelleneigentümer-Rechten nur für den Migrationsschritt; leer = DATABASE_URL)."
},
{
"line": 393,
"claim": "Fehlerzeile: 'api wird nie healthy, Log zeigt Verbindungsfehler von Prisma' ohne Hinweis auf den neuen Startabbruch",
"actual": "Ist DATABASE_URL leer, beendet migrate-and-start.sh den Container mit 'FEHLER: DATABASE_URL ist nicht gesetzt.' bevor Prisma verbindet.",
"evidence": "apps/api/scripts/migrate-and-start.sh:17-20",
"fix": "Symptomzeile 'Log zeigt FEHLER: DATABASE_URL ist nicht gesetzt.' in Kapitel 7 ergänzen."
},
{
"line": 152,
"claim": "Beschreibung von TESSERA_SMTP_* nennt keinen Default für _FROM",
"actual": "Default in Prod-Compose ist 'Tessera <noreply@tessera.local>'.",
"evidence": "docker-compose.prod.yml:49",
"fix": "Default für TESSERA_SMTP_FROM in der Tabelle nennen (Hinweis: .env.prod.example sagt, die UI-Einstellung überschreibt die Variable)."
}
],
"missing": [
{
"fact": "TESSERA_MIGRATE_DATABASE_URL (getrennte Migrationsverbindung)",
"where": "docker-compose.prod.yml:38; apps/api/scripts/migrate-and-start.sh; docs/mandantentrennung-datenbankrolle.md",
"section": "Kapitel 3 Tabelle und Kapitel 5"
},
{
"fact": "CORS_ORIGIN wird in main.ts gelesen (Default http://localhost:3000). Steht nur in einem VERIFY-Kommentar, ist in keiner Compose-Datei gesetzt.",
"where": "apps/api/src/main.ts:10",
"section": "Kapitel 3 (kurz nennen; für den Browser-Weg über /api-proxy unkritisch)"
},
{
"fact": "DASHBOARD_IMAGES_DIR und FAVORITE_ICONS_DIR überschreiben die Ablageorte der Bilderrahmen-/Favoriten-Dateien (Tests/Abweichung vom Volume-Pfad)",
"where": "apps/api/src (process.env.DASHBOARD_IMAGES_DIR, FAVORITE_ICONS_DIR)",
"section": "Kapitel 6 (Hinweis: bei Änderung muss das Volume mitwandern) oder Kapitel 3"
},
{
"fact": "Build-Argumente/Laufzeit-ENV APP_VERSION, APP_CHANNEL, APP_COMMIT, APP_BUILD_TIME speisen /health/version; werden von publish-images.sh gesetzt, nicht per .env",
"where": "apps/api/Dockerfile:4-7,31-35; .gitea/scripts/publish-images.sh",
"section": "Kapitel 9 'Woran Sie erkennen...' (Erklärung, warum buildTime/commit auf selbst gebauten Images 'dev' zeigen)"
},
{
"fact": "Veraltete SMTP-Rückfallnamen MAIL_HOST/MAIL_PORT/MAIL_USER/MAIL_PASS werden im Code gelesen",
"where": "apps/api/src (configService.get('MAIL_*'))",
"section": "Kapitel 3, nur falls noch unterstützt (prüfen, ob Totcode)"
},
{
"fact": "Das Basis-Compose (docker-compose.yml) mappt Host-Port 3001 ebenfalls; docker-compose.prod.yml gibt keine Host-Ports für db frei -- stimmt, aber Hinweis auf Firewall für 3001 fehlt als Sicherheitsempfehlung",
"where": "docker-compose.prod.yml:30-31",
"section": "Kapitel 1"
},
{
"fact": "Der Zertifikatsmanager entpackt ZIP-Dateien zusätzlich mit höchstens 100 Einträgen und Kompressionsverhältnis 100",
"where": "apps/api/src/cert-manager/zip-expand.ts:37-42",
"section": "Kapitel 3, Abschnitt Zertifikatsmanager (Rechenaufwand)"
}
],
"verified_ok_summary": "Compose-Dienste, Ports 3000/3001, kein db-Host-Port, Netzwerke (data-net internal), Healthchecks (Intervalle, start_period 10s Basis/20s Prod), web ohne Healthcheck, Volumes pgdata/user-files mit Mount /app/user-files, IMAGE_TAG-Default beta, .env.prod.example (IMAGE_TAG=live, COMPOSE_FILE), ${TESSERA_ENCRYPTION_KEY:?...}-Abbruch (über CALENDAR-Fallback), CryptoService-Meldungen 'is not set' / '64-character hex string', Seed-Verhalten (findUnique, Tenant default), /health und /health/version, Logzeilen 'Tessera API running on port 3001' + formatAppVersionLine, API_INTERNAL_URL und /api-proxy-Rewrite in next.config.ts, NEXT_PUBLIC_API_URL=/api-proxy im web-Dockerfile, Migration 20260924120000_dashboard_image_drop_data mit exakt zitierter Fehlermeldung, publish-images.sh Etiketten (main: beta+latest, Tag: live+vX.Y.Z), ci.yml (Branches main/live, Tags v*, Job desktop needs test, CARGO_BUILD_JOBS=4, Secrets TAURI_SIGNING_*, publish needs desktop), publish-release.sh --tag, tauri.conf.json pubkey, DESKTOP_DIST_DIR, GET /desktop/latest|update|download/:platform, 204 beim Update-Endpunkt, Desktop-Meldungen (Update nur über https möglich, Update fehlgeschlagen, antwortet kein Tessera-Server, Auf Version ... aktualisieren), Parameter dv/dc/dos und Cookie tessera_desktop_client, Bug-Report-Kürzel [Browser]/[Desktop/Windows]/[Desktop/Linux]/[Desktop] und Logtexte 'Bug report' / 'Bug report mail failed', Zwischenspeicher-Logzeile 'Desktop unveraendert seit', Nextcloud-Grenzen (8 MiB Stück, 20 s Zusammenbau, 10/40 Freigaben je 10 min, 15 min Pause, Meldungstext), Zertifikatsmanager-Grenzen (30 Dateien, 5 MB, 20 MiB, 200/50/50, 1 Mio / 6 Mio KDF, 10 Passwörter, AIA 8 s / 256 KiB / 3 Weiterleitungen, 512 KiB JSON, ZIP 1 MiB/20 MiB, Meldung 'zusammen zu groß'), Ablagepfade user-files/avatars|dashboard-images|favorite-icons, dev-Compose (mailhog, openldap, phpldapadmin), docker-compose.ci.yml, Verweise docs/ci-cd-setup.md (Abschnitt 4) und anleitung-anwender.md (Kapitel Desktop-App). Nicht aus dem Repo prüfbar: Serverzustand /opt/tessera, Container-Namen tessera-api-1, Proxy-Einstellungen, Secrets in Gitea, Schlüssel unter ~/.tessera, Datum-Angaben (24.09., 14./15.09.)."
}