/**
 * SQLite persistence adapter for the two-level persistence model.
 *
 * <h2>Purpose</h2>
 * <p>This package contains the technical SQLite infrastructure for the persistence
 * layer. It is the only place in the entire application where JDBC connections, SQL DDL,
 * and SQLite-specific types are used. No JDBC or SQLite types leak into the
 * {@code application} or {@code domain} modules.
 *
 * <h2>Two-level persistence model</h2>
 * <p>Persistence is structured in exactly two levels:
 * <ol>
 *   <li><strong>Document master record</strong> ({@code document_record} table) —
 *       one row per unique SHA-256 fingerprint; carries the current overall status,
 *       failure counters, and the most recently known source location.</li>
 *   <li><strong>Processing attempt history</strong> ({@code processing_attempt} table) —
 *       one row per historised processing attempt; references the master record via
 *       fingerprint; attempt numbers are monotonically increasing per fingerprint.</li>
 * </ol>
 *
 * <h2>Schema initialisation timing</h2>
 * <p>The {@link de.gecheckt.pdf.umbenenner.adapter.out.sqlite.SqliteSchemaInitializationAdapter}
 * implements the
 * {@link de.gecheckt.pdf.umbenenner.application.port.out.PersistenceSchemaInitializationPort}
 * and must be called <em>once</em> at program startup, before the batch document
 * processing loop begins. There is no lazy or hidden initialisation during document
 * processing.
 *
 * <h2>Architecture boundary</h2>
 * <p>All JDBC connections, SQL statements, and SQLite-specific behaviour are strictly
 * confined to this package. The application layer interacts exclusively through the
 * port interfaces defined in
 * {@code de.gecheckt.pdf.umbenenner.application.port.out}.
 */
package de.gecheckt.pdf.umbenenner.adapter.out.sqlite;
