/**
 * SQLite-Persistenz-Adapter für das Zwei-Ebenen-Persistenzmodell.
 *
 * <h2>Zweck</h2>
 * <p>Dieses Paket enthält die technische SQLite-Infrastruktur der Persistenzschicht.
 * Es ist die einzige Stelle in der gesamten Anwendung, an der JDBC-Verbindungen,
 * SQL-DDL und SQLite-spezifische Typen verwendet werden. Keine JDBC- oder
 * SQLite-Typen verlassen dieses Paket in Richtung der {@code application}-
 * oder {@code domain}-Module.
 *
 * <h2>Zwei-Ebenen-Persistenzmodell</h2>
 * <p>Die Persistenz ist in genau zwei Ebenen strukturiert:
 * <ol>
 *   <li><strong>Dokument-Stammsatz</strong> ({@code document_record}-Tabelle) –
 *       eine Zeile pro eindeutigem SHA-256-Fingerprint; trägt den aktuellen
 *       Gesamtstatus, Fehlerzähler und den zuletzt bekannten Quellort.</li>
 *   <li><strong>Versuchshistorie</strong> ({@code processing_attempt}-Tabelle) –
 *       eine Zeile pro historisiertem Verarbeitungsversuch; referenziert den
 *       Stammsatz über den Fingerprint; Versuchsnummern sind pro Fingerprint
 *       monoton steigend.</li>
 * </ol>
 *
 * <h2>Schema-Initialisierung mit Flyway</h2>
 * <p>Der {@link de.gecheckt.pdf.umbenenner.adapter.out.sqlite.SqliteSchemaInitializationAdapter}
 * implementiert den
 * {@link de.gecheckt.pdf.umbenenner.application.port.out.PersistenceSchemaInitializationPort}
 * und muss <em>einmal</em> beim Programmstart aufgerufen werden, bevor die
 * Verarbeitungsschleife beginnt. Die Initialisierung unterscheidet drei Fälle:
 * leere Datenbank, bestehende Datenbank ohne Flyway-History (Baseline-Eintragung
 * nach vollständiger Schema-Prüfung) und Folgestart mit Flyway-History (idempotent).
 *
 * <h2>Fremdschlüssel</h2>
 * <p>Foreign-Key-Durchsetzung wird über {@code SQLiteConfig.enforceForeignKeys(true)}
 * auf DataSource-Ebene aktiviert, sodass jede neue Verbindung automatisch
 * {@code PRAGMA foreign_keys = ON} erhält.
 *
 * <h2>Architekturgrenze</h2>
 * <p>Alle JDBC-Verbindungen, SQL-Anweisungen und SQLite-spezifisches Verhalten sind
 * ausschließlich in diesem Paket gekapselt. Die Application-Schicht interagiert
 * ausschließlich über die Port-Interfaces in
 * {@code de.gecheckt.pdf.umbenenner.application.port.out}.
 */
package de.gecheckt.pdf.umbenenner.adapter.out.sqlite;
