# Persistenz + Source-Artifact-Lifecycle (Loop 1, B-04)

Tabellen (supabase-migration-qaf-differences.sql + Folgemigrationen):
qaf_batch, qaf_file, qaf_part, qaf_summary_metric, qaf_manufacturing_step,
qaf_comparison, qaf_step_match, qaf_summary_diff, qaf_manufacturing_diff,
(+ tags, title, user-inputs, g60, multi-file, process-mappings, RLS-Modell).

Source-Artifact-Stand:
- Upload → QAF_UPLOAD_BUCKET via signed URL; Objekte ANALYSIERTER Dateien
  bleiben bewusst im Bucket (actions.ts, discardQafUploads-Doku)
- `qaf_file.storage_key` existiert als Spalte, wird vom Code NIE geschrieben
- `qaf_file.file_hash` (SHA-256) wird geschrieben (3 Stellen in actions.ts)
- Rehydration (`rehydrateFile`) liefert Werte+Zellen, KEINE Formeln/Blattnamen

Loop-5-Konsequenz: Befüllen + Reparse-Pfad + Bestands-Rückverknüpfung
(Storage-Listing), keine Schema-Migration.
