Files
craftvia/docs/PROMPT-lane-garage-code.md
T
msolarczekandClaude Opus 5 c8e6f30a27
CI / build-and-check (push) Canceled after 0s
CI / audit (push) Canceled after 0s
CI / sbom (push) Canceled after 0s
Basis: Certvia dev@a48c5fb als Fundament für Craftvia
Unveränderter Stand von certvia/dev (a48c5fb) plus Craftvia-Spezifikation
und Brandbook unter docs/craftvia/. ISMS-Module werden im Folgecommit entfernt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 11:05:39 +02:00

2.8 KiB

Kickoff-Prompt — Lane C: App-Code Garage-tauglich

Du übernimmst Lane C der Umstellung MinIO → Garage. Lies docs/KONZEPT-garage-migration.md (v. a. §3 und §4 D3). Kern: Der S3-Code bleibt inhaltlich gleich (AWS SDK v3, forcePathStyle), aber die Selbstheilung ensureBucket() (HeadBucket→CreateBucket) muss weg — Garage unterstützt S3-CreateBucket nicht; Buckets werden von Lane B vorab provisioniert.

Repo & Branch

  • origin: git.certvia.de/msolarczek/certvia — Basis-Branch dev.
  • Zweiter Remote: local-gitea = gitea.192.168.1.155.sslip.io/msolarczek/ISMS-Tool.
  • Arbeite auf feature/garage-code (aus dev), PR nach dev. Unabhängig von Lane A/B entwickelbar (gegen einen lokalen Garage-Container testen).

Scope (genau diese Dateien)

  • src/server/storage/adapter.ts — ensureBucket() anpassen.
  • src/server/storage/backup-store.ts — ensureBucket() anpassen.
  • .env.coolify.example + .env.example — Kommentare MinIO → Garage, S3_ENDPOINT-Beispiel http://garage:3900, forcePathStyle-Begründung bleibt gültig.
  • Tests unter scripts/ (neuer Smoke-Test).
  • Nicht anfassen: Compose/Infra (Lane A), Provisioning (Lane B), Fachlogik/UI.

Aufgaben

  1. ensureBucket() in beiden Stores von „HeadBucket→CreateBucket" auf nur prüfend umstellen:
    • HeadBucketCommand → wenn ok, weiter.
    • Wenn Bucket fehlt/kein Zugriff → klarer Konfigurationsfehler werfen: „Bucket <name> nicht provisioniert/kein Zugriff — Garage-Provisioning (Lane B) ausführen." Kein CreateBucketCommand mehr.
    • CreateBucketCommand-Import entfernen, wenn ungenutzt (tsc/lint sauber halten).
    • Beachte: backup-store.ts schluckt heute den Fehler still — das durch die neue, sprechende Variante ersetzen.
  2. Region/Endpoint-Doku aktualisieren (Default S3_REGION=us-east-1 bleibt, passend zu Garage-s3_region).
  3. Smoke-Test (scripts/test-garage-storage.ts o. ä.): gegen einen lokalen Garage-Container Put→Get→(List/Delete beim Backup-Store) grün; plus Negativfall „Bucket fehlt → sprechender Fehler".

Vorgaben

  • API der Storage-Abstraktion unverändert (StorageAdapter/BackupStore-Interfaces, Key-Schema, Local-/Stub-Fallback bleiben).
  • Keine neuen Pflicht-Env; S3_*-Kontrakt bleibt.
  • Validierungs-Gate vor PR: npx tsc --noEmit, Lint, npm run build, alle scripts/test-*.ts grün (inkl. neuem Test). Denk an die bekannte Falle: nichts, was Secrets liest, auf Modulebene aufrufen (Build-Kompatibilität).

Definition of Done

  • Beide ensureBucket() prüfen nur noch, mit sprechendem Fehler bei fehlendem Bucket.
  • Doku aktualisiert; Smoke-Test grün gegen lokale Garage; Gate grün.

Abhängigkeiten

Zur Laufzeit auf Lane B angewiesen (Bucket muss existieren), aber Code + Tests unabhängig entwickelbar (lokaler Garage-Container).