/**
 * Inbound ports (use cases) for the application.
 * <p>
 * Inbound ports define the contracts for interacting with the application from external adapters.
 * All calls flow FROM adapters INTO the application through these ports.
 * <p>
 * Central inbound port:
 * <ul>
 *   <li>{@link de.gecheckt.pdf.umbenenner.application.port.in.BatchRunProcessingUseCase}
 *       — The primary use case for executing a complete batch run</li>
 * </ul>
 * <p>
 * Return models:
 * <ul>
 *   <li>{@link de.gecheckt.pdf.umbenenner.application.port.in.BatchRunOutcome}
 *       — Structured result of a batch run, designed for exit code mapping</li>
 * </ul>
 * <p>
 * Progress observation (for interactive inbound adapters):
 * <ul>
 *   <li>{@link de.gecheckt.pdf.umbenenner.application.port.in.BatchRunProgressObserver}
 *       — Optional observer that receives per-run and per-candidate callbacks during a run</li>
 *   <li>{@link de.gecheckt.pdf.umbenenner.application.port.in.BatchRunCancellationToken}
 *       — Optional cooperative cancellation token polled between candidates</li>
 *   <li>{@link de.gecheckt.pdf.umbenenner.application.port.in.DocumentCompletionEvent},
 *       {@link de.gecheckt.pdf.umbenenner.application.port.in.DocumentCompletionStatus},
 *       {@link de.gecheckt.pdf.umbenenner.application.port.in.RunSummary}
 *       — Event and summary value types carried to the observer</li>
 * </ul>
 * <p>
 * <p>
 * Query use cases (for GUI adapters):
 * <ul>
 *   <li>{@link de.gecheckt.pdf.umbenenner.application.port.in.ResolveHistoricalFileNameUseCase}
 *       — Resolves the last known target filename for a document identified by its fingerprint</li>
 * </ul>
 * <p>
 * Architecture Rule: Inbound ports are independent of implementation and contain no business logic.
 * They define "what can be done to the application". All dependencies point inward;
 * adapters depend on ports, not vice versa.
 */
package de.gecheckt.pdf.umbenenner.application.port.in;
