Infra: Worker/Garage/Test-Runner

- docker-compose.yml: explizite Build-Targets (runner/migrate) — Ursache für
  "npx not found" bei garage-provision war das Default-Target (letzte Stage =
  Garage-Image ohne Node); worker startet npm run worker:mail; Defaults craftvia
- Coolify-Compose: incident-inbound-worker und sync-policy-templates entfernt,
  Rollen-/Bucket-/Image-Namen auf craftvia
- Dockerfile: seed/ und docs/wizard-uebergabe entfernt, messages/ im Runner
- npm: Name craftvia, Scripts test (scripts/run-tests.ts) und gate, ISMS-Pakete
  entfernt (handlebars, marked, sanitize-html, @xyflow/react, @dagrejs/dagre,
  html-to-image, imapflow, mailparser, exceljs, @dnd-kit/core)
- .env-Beispiele, launch.json (craftvia-dev), CI-Kommentare umbenannt

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-14 11:44:58 +02:00
co-authored by Claude Opus 5
parent 6f3f5a5947
commit ba7d6ac3ed
45 changed files with 167 additions and 7932 deletions
+4 -20
View File
@@ -1,4 +1,4 @@
# ISMS-Tool — Next.js App (Multi-Stage-Build)
# Craftvia — Next.js App (Multi-Stage-Build)
#
# Base-Image: node:22-slim (Debian/glibc) statt node:22-alpine (musl).
# Begründung (F-11): Mit einem glibc-Base greifen die im Lockfile hinterlegten
@@ -57,19 +57,6 @@ COPY package.json package-lock.json prisma.config.ts tsconfig.json ./
COPY prisma ./prisma
COPY scripts ./scripts
COPY src ./src
# seed/ trägt das Richtlinien-Vorlagenpaket (mapping.json + Quelldateien), das der
# Demo-Seed (prisma/seed.ts) bzw. Bootstrap über importPolicies liest. Ohne diesen COPY
# bricht der migrate-Job mit ENOENT auf seed/isms-vorlagenpaket-v2/mapping.json ab.
# Einige Quelldateien liegen als 0600 vor → a+rX, damit der non-root app-User sie lesen kann.
COPY seed ./seed
RUN chmod -R a+rX ./seed
# docs/wizard-uebergabe/: Fachcontent-Quelldateien, aus denen der Demo-Seed den
# Risikokatalog (C4, import-risks.ts) und die Umsetzungshinweise (C6, import-hints.ts)
# liest. Nur im migrate-Image nötig — die Laufzeit/runner ruft diese Importer nicht auf
# (importManaged in provision.ts liest keine Dateien). Ohne diesen COPY bricht der
# Demo-Seed mit ENOENT auf docs/wizard-uebergabe/.../C6_Umsetzungshinweise.md ab.
COPY docs/wizard-uebergabe ./docs/wizard-uebergabe
RUN chmod -R a+rX ./docs
# Prisma-Client für Seed/Bootstrap generieren (migrate deploy selbst braucht nur schema+migrations).
ENV DATABASE_URL="postgresql://build:build@localhost:5432/build?schema=public"
RUN npx prisma generate
@@ -94,12 +81,9 @@ RUN groupadd --system --gid 1001 app \
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
# Richtlinien-Vorlagenpaket für den Laufzeit-Import: Modul „policies" aktivieren
# (toggleTenantModule), Mandant mit Seed anlegen (createTenant), manueller Paket-Import
# (importPolicyPackageForTenant) lesen alle aus seed/isms-vorlagenpaket-v2/. Fehlt es,
# wirft die App zur Laufzeit ENOENT. a+rX wegen der 0600-Quelldateien (non-root app-User).
COPY seed ./seed
RUN chmod -R a+rX ./seed
# i18n-Kataloge (messages/<locale>/<namespace>.json) liegen über outputFileTracingIncludes
# bereits im standalone-Output; der explizite COPY hält sie auch bei Tracing-Änderungen vor.
COPY --from=builder /app/messages ./messages
# Backup-/Restore-/DSGVO-Topologie (src/server/backup/topology.ts) liest zur Laufzeit
# prisma/schema.prisma: Prisma 7 entfernt relationFromFields aus dem Laufzeit-DMMF,
# die FK-Relationen kommen daher aus der Schema-Datei. Der Inline-Export (Direkt-