Fundament: Doku, Testanpassungen, Restbereinigung

- AGENTS.md und README.md auf Craftvia umgeschrieben (Regeln, Andockpunkte,
  Stack mit Garage, tsx-Tests, Gate, Demo-Logins)
- ISMS-Dokumente entfernt (SPEC, Prototypen, Lane-Prompts, Übergaben, Konzepte
  Incidents/Framework); Fundament-Doku (Deploy, Sicherheit, Backup, Identity) bleibt
- Fundament-Tests an Craftvia-Rollen/Branding angepasst, Resttreffer
  certvia/isms in Skripten und Kommentaren bereinigt

Gate: prisma generate, migrate status, tsc, lint, build, 22/22 Testskripte grün.

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 ba7d6ac3ed
commit 1701db0a62
20 changed files with 131 additions and 73 deletions
+1 -1
View File
@@ -75,7 +75,7 @@ export function BackupTargetForm({
</div>
<div className="space-y-1.5">
<Label htmlFor="bk-bucket">Bucket</Label>
<Input id="bk-bucket" name="backupS3Bucket" defaultValue={initial.backupS3Bucket} placeholder="certvia-backups" autoComplete="off" />
<Input id="bk-bucket" name="backupS3Bucket" defaultValue={initial.backupS3Bucket} placeholder="craftvia-backups" autoComplete="off" />
</div>
<div className="space-y-1.5">
<Label htmlFor="bk-region">Region</Label>
+1 -1
View File
@@ -8,7 +8,7 @@ const buttonVariants = cva(
{
variants: {
variant: {
// Primär-Buttons mit dem Certvia-Verlauf (--grad-primary)
// Primär-Buttons in Lotsenblau (--grad-primary = Vollfarbe)
default: "bg-grad-soft text-white hover:opacity-90",
outline:
"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
+1 -1
View File
@@ -8,7 +8,7 @@ import { writeAuditLog } from "@/server/audit";
* Zweck (zwei Dinge auf einmal):
* 1. **Nach außen** nur eine generische, nichtssagende Meldung
* (`Vorgang nicht möglich.`). Interne Details — Modellnamen, die
* Isolationslogik (`Tenant isolation violation: Risk …`), fehlende
* Isolationslogik (`Tenant isolation violation: Role …`), fehlende
* Berechtigungen — dürfen den Client nicht erreichen (CWE-209). In der
* Produktion maskiert Next.js Server-Action-Fehler zwar ohnehin, in
* Entwicklung/Test aber nicht — und wir wollen die Meldung an EINER Stelle
+1 -1
View File
@@ -124,7 +124,7 @@ export async function testBackupConnection(
}
const key = `__connectivity-test__/${randomBytes(8).toString("hex")}.txt`;
const payload = Buffer.from(`certvia backup connectivity ${new Date().toISOString()}`, "utf8");
const payload = Buffer.from(`craftvia backup connectivity ${new Date().toISOString()}`, "utf8");
try {
await store.put(key, payload);
const back = await store.get(key);
+2 -2
View File
@@ -55,7 +55,7 @@ export async function buildDsgvoPackage(
entries.push({
name: "README.txt",
data:
`certvia — DSGVO-Auskunft (Art. 15/20), Einzelperson\n` +
`Craftvia — DSGVO-Auskunft (Art. 15/20), Einzelperson\n` +
`Mandant: ${tenant.name} (${tenant.slug})\n` +
`Betroffene Identity: ${subjectIdentityId}\n` +
`Erstellt: ${generatedAt}\n\n` +
@@ -72,7 +72,7 @@ export async function buildDsgvoPackage(
entries.push({
name: "README.txt",
data:
`certvia — DSGVO-Datenpaket (Art. 20 Portabilität), gesamter Mandant\n` +
`Craftvia — DSGVO-Datenpaket (Art. 20 Portabilität), gesamter Mandant\n` +
`Mandant: ${tenant.name} (${tenant.slug})\n` +
`Erstellt: ${generatedAt}\n` +
`Zeilen gesamt: ${manifest.totalRows}\n\n` +
+1 -1
View File
@@ -1,7 +1,7 @@
// Storage-Adapter (Story B4-2 → Epic S1). Gekapselte Schnittstelle für die Datei-
// Persistenz hochgeladener eigener Richtlinien und Audit-Nachweise. Aufrufer nutzen
// ausschließlich `storage`, sodass das Backend ohne UI-/Action-Änderung austauschbar
// bleibt (Konsumenten: policy-upload.ts, audit-evidence.ts).
// bleibt (Konsumenten: Dokumente-/Einsatzfoto-Uploads der Fachmodule).
//
// Backend-Wahl zur Laufzeit (Graceful Fallback):
// - Sind alle S3_*-Env gesetzt → echter S3StorageAdapter (Garage/S3-kompatibel).