diff --git a/pdf-umbenenner-adapter-in-cli/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/cli/SchedulerBatchCommand.java b/pdf-umbenenner-adapter-in-cli/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/cli/SchedulerBatchCommand.java index af3eb02..dbc7b1a 100644 --- a/pdf-umbenenner-adapter-in-cli/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/cli/SchedulerBatchCommand.java +++ b/pdf-umbenenner-adapter-in-cli/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/cli/SchedulerBatchCommand.java @@ -12,15 +12,11 @@ import de.gecheckt.pdf.umbenenner.domain.model.BatchRunContext; * interface. It receives the batch run outcome and makes it available to the Bootstrap layer * for exit code determination and logging. *
- * AP-003 Implementation: Minimal no-op command to validate the call chain from CLI to Application. - *
- * M2-AP-002 Update: Returns {@link BatchRunOutcome} instead of boolean, - * allowing Bootstrap to systematically derive exit codes (AP-007). - *
- * M2-AP-003 Update: Accepts {@link BatchRunContext} and passes it to the use case, + * Returns {@link BatchRunOutcome} to allow Bootstrap to systematically derive exit codes. + * Accepts {@link BatchRunContext} and passes it to the use case, * enabling run ID and timing tracking throughout the batch cycle. *
- * M2-AP-005 Update: Dependency inversion achieved - this adapter depends only on the + * Dependency inversion achieved - this adapter depends only on the * BatchRunProcessingUseCase interface, not on any concrete implementation. Bootstrap * is responsible for injecting the appropriate use case implementation. */ diff --git a/pdf-umbenenner-adapter-in-cli/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/cli/package-info.java b/pdf-umbenenner-adapter-in-cli/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/cli/package-info.java index 97ce85a..a442ae4 100644 --- a/pdf-umbenenner-adapter-in-cli/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/cli/package-info.java +++ b/pdf-umbenenner-adapter-in-cli/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/cli/package-info.java @@ -8,10 +8,10 @@ * Components: *
- * M2-AP-005 Architecture: + * Adapter Architecture: *
All file I/O and cryptographic operations are strictly confined to this adapter layer, * maintaining the hexagonal architecture boundary. * - * @since M4-AP-002 */ package de.gecheckt.pdf.umbenenner.adapter.out.fingerprint; \ No newline at end of file diff --git a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/lock/package-info.java b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/lock/package-info.java index 1822d8f..ab443db 100644 --- a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/lock/package-info.java +++ b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/lock/package-info.java @@ -4,10 +4,10 @@ * Components: *
- * AP-006: Uses atomic file creation ({@code CREATE_NEW}) to establish an exclusive lock. + * Implementation details: Uses atomic file creation ({@code CREATE_NEW}) to establish an exclusive lock. * Stores the acquiring process PID in the lock file for diagnostics. * Release is best-effort and logs a warning on failure without throwing. */ diff --git a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/pdfextraction/PdfTextExtractionPortAdapter.java b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/pdfextraction/PdfTextExtractionPortAdapter.java index db4516e..73aa74f 100644 --- a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/pdfextraction/PdfTextExtractionPortAdapter.java +++ b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/pdfextraction/PdfTextExtractionPortAdapter.java @@ -19,7 +19,7 @@ import de.gecheckt.pdf.umbenenner.domain.model.SourceDocumentCandidate; /** * PDFBox-based implementation of {@link PdfTextExtractionPort}. *
- * AP-003 Implementation: Extracts text content and page count from a single PDF document + * Extracts text content and page count from a single PDF document * using Apache PDFBox. All technical problems during extraction are reported as * {@link de.gecheckt.pdf.umbenenner.domain.model.PdfExtractionTechnicalError}. *
@@ -29,7 +29,7 @@ import de.gecheckt.pdf.umbenenner.domain.model.SourceDocumentCandidate; *
@@ -41,7 +41,7 @@ import de.gecheckt.pdf.umbenenner.domain.model.SourceDocumentCandidate; *
- * Technical error cases (AP-003): + * Technical error cases: *
- * Non-goals (handled in later APs): + * Out of scope (handled elsewhere): *
* The locator is expected to contain an absolute file path as a String (adapter-internal convention). *
- * In M3-AP-003, all technical problems are reported as {@link PdfExtractionTechnicalError}. - * Fachliche Bewertungen like "text is not usable" are deferred to AP-004. + * All technical problems are reported as {@link PdfExtractionTechnicalError}. + * Fachliche Bewertungen like "text is not usable" are handled elsewhere. * * @param candidate the document to extract; must be non-null * @return a {@link PdfExtractionResult} encoding the outcome: @@ -113,12 +111,12 @@ public class PdfTextExtractionPortAdapter implements PdfTextExtractionPort { } // Extract text from all pages - // Note: extractedText may be empty string, which is valid in M3 (no fachliche validation here) + // Note: extractedText may be empty string, which is valid (no fachliche validation here) PDFTextStripper textStripper = new PDFTextStripper(); String extractedText = textStripper.getText(document); // Success: return extracted text and page count - // (Empty text is not an error in AP-003; fachliche validation is AP-004) + // (Empty text is not an error; fachliche validation is handled elsewhere) PdfPageCount pageCountTyped = new PdfPageCount(pageCount); return new PdfExtractionSuccess(extractedText, pageCountTyped); } finally { diff --git a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/pdfextraction/package-info.java b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/pdfextraction/package-info.java index cb7b791..d8032e3 100644 --- a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/pdfextraction/package-info.java +++ b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/pdfextraction/package-info.java @@ -1,11 +1,11 @@ /** * PDFBox-based adapter for PDF text extraction. *
- * M3-AP-003: This package contains the sole implementation + * This package contains the sole implementation * of {@link de.gecheckt.pdf.umbenenner.application.port.out.PdfTextExtractionPort}, * using Apache PDFBox to extract text and page count from PDF documents. *
- * Scope (AP-003): + * Scope: *
- * Restriction: + * Result types used: *
- * Out of scope (handled in later APs): + * Out of scope: *
- * M3-AP-002 implementations: + * Implementations: *
- * Creates or verifies the M4 two-level persistence schema in the configured SQLite + * Creates or verifies the two-level persistence schema in the configured SQLite * database file. All DDL uses {@code IF NOT EXISTS} semantics, making the operation * fully idempotent: calling {@link #initializeSchema()} on an already-initialised * database succeeds without error and without modifying existing data. @@ -39,8 +39,6 @@ import de.gecheckt.pdf.umbenenner.application.port.out.PersistenceSchemaInitiali *
All JDBC connections, SQL DDL, and SQLite-specific behaviour are strictly confined * to this class. No JDBC or SQLite types appear in the port interface or in any * application/domain type. - * - * @since M4-AP-003 */ public class SqliteSchemaInitializationAdapter implements PersistenceSchemaInitializationPort { @@ -49,7 +47,7 @@ public class SqliteSchemaInitializationAdapter implements PersistenceSchemaIniti /** * DDL for the document master record table. *
- * Columns (M4 mandatory fields): + * Columns (mandatory fields): *
- * Columns (M4 mandatory fields): + * Columns (mandatory fields): *
* Executes the following DDL statements in order: *
* Provides transactional semantics for coordinated writes to both the document record * and processing attempt repositories. - * - * @since M4-AP-006-fix */ public class SqliteUnitOfWorkAdapter implements UnitOfWorkPort { diff --git a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/sqlite/package-info.java b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/sqlite/package-info.java index 08a36a9..14c5412 100644 --- a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/sqlite/package-info.java +++ b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/sqlite/package-info.java @@ -1,14 +1,14 @@ /** - * SQLite persistence adapter for the M4 two-level persistence model. + * SQLite persistence adapter for the two-level persistence model. * *
This package contains the technical SQLite infrastructure for the M4 persistence + *
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. * *
M4 persistence is structured in exactly two levels: + *
Persistence is structured in exactly two levels: *
- * M3/AP-007: Supports injected source folder validation for testability + * Supports injected source folder validation for testability * (allows mocking of platform-dependent filesystem checks). */ public class StartConfigurationValidator { @@ -246,7 +246,7 @@ public class StartConfigurationValidator { *
* Uses {@code java.nio.file.Files} static methods to check existence, type, and readability. *
- * M3/AP-007: This separation allows unit tests to inject alternative implementations + * This separation allows unit tests to inject alternative implementations * that control the outcome of readability checks without relying on actual filesystem * permissions (which are platform-dependent). */ diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/in/BatchRunOutcome.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/in/BatchRunOutcome.java index 5ab0d71..c224b4f 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/in/BatchRunOutcome.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/in/BatchRunOutcome.java @@ -10,15 +10,13 @@ package de.gecheckt.pdf.umbenenner.application.port.in; * The outcome is independent of individual document processing results; * it represents the batch operation itself (lock acquired, no critical startup failure, etc.). *
- * Design Note: This contract is defined in AP-002 to enable AP-007 (exit code handling) - * to derive exit codes systematically without requiring additional knowledge about - * the batch run. Each outcome maps cleanly to an exit code semantic. + * Design Note: This contract enables exit code handling to derive exit codes systematically + * without requiring additional knowledge about the batch run. Each outcome maps cleanly + * to an exit code semantic. *
- * AP-007: Three distinct outcomes are now defined to make the difference between a - * technically successful run, a controlled early termination due to start protection, - * and a hard bootstrap failure explicit in both code and logs. - * - * @since M2-AP-002 + * Three distinct outcomes are defined to make the difference between a technically successful run, + * a controlled early termination due to start protection, and a hard bootstrap failure + * explicit in both code and logs. */ public enum BatchRunOutcome { @@ -42,7 +40,6 @@ public enum BatchRunOutcome { *
* Maps to exit code 1. * - * @since M2-AP-007 */ LOCK_UNAVAILABLE("Another instance is already running; this run terminates immediately"), @@ -98,7 +95,6 @@ public enum BatchRunOutcome { * the run lock being held by another instance. * * @return true if outcome is {@link #LOCK_UNAVAILABLE}, false otherwise - * @since M2-AP-007 */ public boolean isLockUnavailable() { return this == LOCK_UNAVAILABLE; diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/in/BatchRunProcessingUseCase.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/in/BatchRunProcessingUseCase.java index ac78104..6fe1ac4 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/in/BatchRunProcessingUseCase.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/in/BatchRunProcessingUseCase.java @@ -17,18 +17,13 @@ import de.gecheckt.pdf.umbenenner.domain.model.BatchRunContext; *
* The returned outcome is designed to be independent of individual document results, * representing only the batch operation itself. Individual document successes/failures - * are tracked separately in persistence (future milestones). + * are tracked separately in persistence. *
- * M2-AP-002 Implementation: + * Implementation details: *
- * M2-AP-003 Update: - *
* 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. - * - * @since M2-AP-002 */ package de.gecheckt.pdf.umbenenner.application.port.in; diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/ClockPort.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/ClockPort.java index 42aa0d2..2c77a2f 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/ClockPort.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/ClockPort.java @@ -18,7 +18,6 @@ import java.time.Instant; * This port is defined in M2 for use in later milestones where timestamps * become relevant (e.g., run history, document date fallback). * - * @since M2-AP-002 */ public interface ClockPort { diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentKnownProcessable.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentKnownProcessable.java index a7c14d0..9954f97 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentKnownProcessable.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentKnownProcessable.java @@ -15,7 +15,6 @@ import java.util.Objects; * without an additional lookup. * * @param record the current master record for this document; never null - * @since M4-AP-001 */ public record DocumentKnownProcessable(DocumentRecord record) implements DocumentRecordLookupResult { diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentPersistenceException.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentPersistenceException.java index 0b2a5ad..d0be297 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentPersistenceException.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentPersistenceException.java @@ -23,7 +23,6 @@ package de.gecheckt.pdf.umbenenner.application.port.out; * {@link DocumentRecordLookupResult} hierarchy to allow exhaustive pattern matching * at the call site. * - * @since M4-AP-001 */ public class DocumentPersistenceException extends RuntimeException { diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecord.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecord.java index 2a88afe..113a76b 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecord.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecord.java @@ -49,7 +49,6 @@ import java.util.Objects; * @param lastSuccessInstant timestamp of the successful processing, or {@code null} * @param createdAt timestamp when this record was first created; never null * @param updatedAt timestamp of the most recent update; never null - * @since M4-AP-001 */ public record DocumentRecord( DocumentFingerprint fingerprint, diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecordLookupResult.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecordLookupResult.java index b35c371..7a484bc 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecordLookupResult.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecordLookupResult.java @@ -21,7 +21,6 @@ package de.gecheckt.pdf.umbenenner.application.port.out; * Architecture boundary: No JDBC, SQLite, or filesystem types appear * in this sealed hierarchy or in any of its implementations. * - * @since M4-AP-001 */ public sealed interface DocumentRecordLookupResult permits DocumentUnknown, diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecordRepository.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecordRepository.java index 34d92fe..dd4ffd1 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecordRepository.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentRecordRepository.java @@ -29,7 +29,6 @@ import de.gecheckt.pdf.umbenenner.domain.model.DocumentFingerprint; * in this interface or in any type it references. Mapping to and from the persistence * schema is the exclusive responsibility of the adapter implementation. * - * @since M4-AP-001 */ public interface DocumentRecordRepository { diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentTerminalFinalFailure.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentTerminalFinalFailure.java index 6ac00d0..05d3921 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentTerminalFinalFailure.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentTerminalFinalFailure.java @@ -15,7 +15,6 @@ import java.util.Objects; * current record for the skip attempt historisation without an additional lookup. * * @param record the current (finally failed) master record for this document; never null - * @since M4-AP-001 */ public record DocumentTerminalFinalFailure(DocumentRecord record) implements DocumentRecordLookupResult { diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentTerminalSuccess.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentTerminalSuccess.java index 9fc28ed..2b2bc9e 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentTerminalSuccess.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentTerminalSuccess.java @@ -15,7 +15,6 @@ import java.util.Objects; * current record for the skip attempt historisation without an additional lookup. * * @param record the current (successful) master record for this document; never null - * @since M4-AP-001 */ public record DocumentTerminalSuccess(DocumentRecord record) implements DocumentRecordLookupResult { diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentUnknown.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentUnknown.java index 2bbc0ce..8ef6744 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentUnknown.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/DocumentUnknown.java @@ -8,7 +8,6 @@ package de.gecheckt.pdf.umbenenner.application.port.out; *
* This variant carries no data because there is no existing record to return. * - * @since M4-AP-001 */ public record DocumentUnknown() implements DocumentRecordLookupResult { } diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FailureCounters.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FailureCounters.java index 468f37a..f5e504e 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FailureCounters.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FailureCounters.java @@ -25,7 +25,6 @@ package de.gecheckt.pdf.umbenenner.application.port.out; * must be >= 0 * @param transientErrorCount number of transient technical errors recorded so far; * must be >= 0 - * @since M4-AP-001 */ public record FailureCounters(int contentErrorCount, int transientErrorCount) { diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintPort.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintPort.java index 5a01cf9..3230ea1 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintPort.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintPort.java @@ -22,7 +22,6 @@ import de.gecheckt.pdf.umbenenner.domain.model.SourceDocumentCandidate; * and the candidate cannot be identified; consequently no SQLite attempt record is * created for this candidate in M4. * - * @since M4-AP-001 */ public interface FingerprintPort { diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintResult.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintResult.java index ae2b9a5..15b5e2d 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintResult.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintResult.java @@ -14,7 +14,6 @@ package de.gecheckt.pdf.umbenenner.application.port.out; * the document cannot be identified and no SQLite attempt record is created. * The failure is treated as a non-identifiable run event. * - * @since M4-AP-001 */ public sealed interface FingerprintResult permits FingerprintSuccess, FingerprintTechnicalError { } diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintSuccess.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintSuccess.java index 3230b3d..7766f51 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintSuccess.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintSuccess.java @@ -12,7 +12,6 @@ import java.util.Objects; * for all subsequent persistence operations in M4. * * @param fingerprint the successfully computed fingerprint; never null - * @since M4-AP-001 */ public record FingerprintSuccess(DocumentFingerprint fingerprint) implements FingerprintResult { diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintTechnicalError.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintTechnicalError.java index 43b7938..f5bca43 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintTechnicalError.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/FingerprintTechnicalError.java @@ -15,7 +15,6 @@ import java.util.Objects; * * @param errorMessage human-readable description of the failure; never null or blank * @param cause the underlying throwable, or {@code null} if not available - * @since M4-AP-001 */ public record FingerprintTechnicalError(String errorMessage, Throwable cause) implements FingerprintResult { diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/PdfTextExtractionPort.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/PdfTextExtractionPort.java index ad04445..ec865d1 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/PdfTextExtractionPort.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/port/out/PdfTextExtractionPort.java @@ -35,7 +35,6 @@ import de.gecheckt.pdf.umbenenner.domain.model.SourceDocumentCandidate; *
- * M2-AP-002 ports: + * Configuration and runtime ports: *
- * M3-AP-001 ports: + * Source document discovery and extraction ports: *
- * M4-AP-001 ports: + * Persistence and fingerprinting ports: *
- * M4-AP-001 value types and result types: + * Value types and result types: *
* Architecture Rule: Outbound ports are implementation-agnostic and contain no business logic. * They define "what the application depends on externally". All dependencies point inward; * the application depends on ports, adapters implement ports. - * - * @since M2-AP-002 */ package de.gecheckt.pdf.umbenenner.application.port.out; diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/service/DocumentProcessingCoordinator.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/service/DocumentProcessingCoordinator.java index 3826ffa..578d6ef 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/service/DocumentProcessingCoordinator.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/service/DocumentProcessingCoordinator.java @@ -33,7 +33,6 @@ import java.util.Objects; *
* This service is the single authoritative place for the decision rules: * idempotency checks, status/counter mapping, and consistent two-level persistence. - * It is intentionally tightly scoped to AP-006 and contains no further logic. * *
* This package contains stateless, pure-logic services that evaluate document content, - * apply business rules, and orchestrate the M4 per-document processing flow. + * apply business rules, and orchestrate the per-document processing flow. * Services in this package: *
* The {@link de.gecheckt.pdf.umbenenner.application.service.M4DocumentProcessor} - * implements the verbindliche M4 processing order per candidate: + * implements the required processing order per candidate: *
- *
- * For each candidate, {@link de.gecheckt.pdf.umbenenner.application.usecase.DefaultBatchRunProcessingUseCase} + * The {@link de.gecheckt.pdf.umbenenner.application.usecase.DefaultBatchRunProcessingUseCase} * enforces this order: *
* All implementations are infrastructure-agnostic and interact only through ports. - * - * @since M2 (extended in M4-AP-006) */ package de.gecheckt.pdf.umbenenner.application.usecase; diff --git a/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunner.java b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunner.java index 720548b..48771ec 100644 --- a/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunner.java +++ b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/BootstrapRunner.java @@ -42,7 +42,7 @@ import de.gecheckt.pdf.umbenenner.domain.model.RunId; * Responsibilities: *
- * The production constructor wires the following M4 adapters: + * The production constructor wires the following adapters: *
- * Schema initialisation is performed once in {@link #run()} before the batch loop starts - * (AP-007). A {@link DocumentPersistenceException} during schema initialisation is treated + * Schema initialisation is performed once in {@link #run()} before the batch loop starts. + * A {@link DocumentPersistenceException} during schema initialisation is treated * as a hard startup failure and results in exit code 1. - * - * @since M2 (extended in M4-AP-006, M4-AP-007) */ public class BootstrapRunner { @@ -142,21 +140,21 @@ public class BootstrapRunner { /** * Creates the BootstrapRunner with default factories for production use. *
- * Wires the M4 processing pipeline: + * Wires the processing pipeline with the following adapters: *
* Schema initialisation is performed explicitly in {@link #run()} before the batch loop - * begins (AP-007). Failure during initialisation aborts the run with exit code 1. + * begins. Failure during initialisation aborts the run with exit code 1. */ public BootstrapRunner() { this.configPortFactory = PropertiesConfigurationPortAdapter::new; @@ -191,7 +189,7 @@ public class BootstrapRunner { * @param configPortFactory factory for creating ConfigurationPort instances * @param runLockPortFactory factory for creating RunLockPort instances * @param validatorFactory factory for creating StartConfigurationValidator instances - * @param schemaInitPortFactory factory for creating PersistenceSchemaInitializationPort instances (AP-007) + * @param schemaInitPortFactory factory for creating PersistenceSchemaInitializationPort instances * @param useCaseFactory factory for creating BatchRunProcessingUseCase instances * @param commandFactory factory for creating SchedulerBatchCommand instances */ @@ -212,7 +210,7 @@ public class BootstrapRunner { /** * Runs the application startup sequence. *
- * M4 startup flow (AP-007): + * Startup flow: *
diff --git a/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/PdfUmbenennerApplication.java b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/PdfUmbenennerApplication.java index 96e3d7c..aad7288 100644 --- a/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/PdfUmbenennerApplication.java +++ b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/PdfUmbenennerApplication.java @@ -6,8 +6,8 @@ import org.apache.logging.log4j.Logger; /** * Main entry point for the PDF Umbenenner application. *
- * AP-003: Delegates to {@link BootstrapRunner} for manual object graph construction - * and execution of the minimal no-op startup path. + * Delegates to {@link BootstrapRunner} for manual object graph construction + * and execution of the startup sequence. */ public class PdfUmbenennerApplication { diff --git a/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/package-info.java b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/package-info.java index e83f25a..f120c0c 100644 --- a/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/package-info.java +++ b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/package-info.java @@ -7,28 +7,28 @@ * Components: *
- * M2 Implementation: + * Implementation approach: *
- * AP-003: Provides a minimal, controlled startup path without dependency injection frameworks. - *
- * AP-005: CLI adapter and complete M2 object graph wiring. - *
- * AP-006: Wires FilesystemRunLockPortAdapter (adapter-out) from validated config; retired temporary no-op lock. - *
- * AP-007: Adds SQLite persistence schema initialization at startup via - * {@link de.gecheckt.pdf.umbenenner.application.port.out.PersistenceSchemaInitializationPort}, - * ensuring the database is ready before document processing begins. Schema initialization failure - * is treated as a hard bootstrap error and causes exit code 1. + * Startup sequence: + *
- * Overall-status semantics (master record, M4): + * Overall-status semantics (master record): *
- * Attempt-status semantics (attempt history, M4): + * Attempt-status semantics (attempt history): *
- * M4 counter rules: + * Counter rules: *