From 5d0e2c90bddfabf3a06cc984736b5a23894d0e63 Mon Sep 17 00:00:00 2001 From: Marcus van Elst Date: Thu, 23 Apr 2026 08:11:36 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20Issue=20#13:=20Warnschwelle=20f=C3=BCr=20?= =?UTF-8?q?max.title.length=20auf=2010=E2=80=9339=20angehoben?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neue Warnschwellen: 10–39 Warnung (Absender benötigt 15–20 Zeichen), 40–99 unkritisch, 100–120 Warnung (verschlüsselte Volumes). Tests, Validator-Implementierungen, Smoke-Tests und Docs konsistent angepasst. Co-Authored-By: Claude Sonnet 4.6 --- docs/gui-bedienanleitung.md | 6 +++--- docs/specs/V2_6_-_Spezifikation.md | 6 +++--- .../in/gui/GuiEditorValidationSmokeTest.java | 2 +- .../StartConfigurationValidator.java | 8 ++++---- .../StartConfigurationValidatorTest.java | 16 +++++++++++++++- .../editor/EditorConfigurationValidator.java | 14 +++++++------- .../EditorConfigurationValidatorTest.java | 18 +++++++++++++++++- 7 files changed, 50 insertions(+), 20 deletions(-) diff --git a/docs/gui-bedienanleitung.md b/docs/gui-bedienanleitung.md index 2fa2f8b..38510da 100644 --- a/docs/gui-bedienanleitung.md +++ b/docs/gui-bedienanleitung.md @@ -286,9 +286,9 @@ Validierungsregeln für `max.title.length` (Feld „Max. Titellänge (Zeichen)" | Kein Wert / leer | Fehler – Pflichtfeld, Konfiguration nicht lauffähig | | Keine Ganzzahl (z. B. „abc") | Fehler – ungültiger Typ | | Kleiner als 10 | Fehler – Minimum ist 10 Zeichen | -| 10 – 19 | Warnung – Titellänge unter 20 Zeichen ist für die meisten Dokumente nicht empfohlen | -| 20 – 99 | Normaler Betrieb, keine Meldung | -| 100 – 120 | Warnung – Dateiname wird sehr lang, Kompatibilität mit verschlüsselten Volumes prüfen | +| 10 – 39 | Warnung – Titellänge unter 40 Zeichen – KI-Ergebnisse können unvollständig sein, da Absender allein bereits 15–20 Zeichen benötigt | +| 40 – 99 | Normaler Betrieb, keine Meldung | +| 100 – 120 | Warnung – Hohe Titellänge – Kompatibilität mit verschlüsselten Volumes prüfen | | Größer als 120 | Fehler – überschreitet sicheres Limit für verschlüsselte Volumes | Warnungen verhindern das Speichern nicht. Fehler markieren den Stand als nicht lauffähig; Speichern ist dennoch erlaubt, jedoch erscheint ein deutlicher Hinweis im Meldungsbereich. diff --git a/docs/specs/V2_6_-_Spezifikation.md b/docs/specs/V2_6_-_Spezifikation.md index e22756d..bb383bb 100644 --- a/docs/specs/V2_6_-_Spezifikation.md +++ b/docs/specs/V2_6_-_Spezifikation.md @@ -59,9 +59,9 @@ für den Basistitel (143 − 18 = 125, mit Puffer auf 120 gerundet). | Keine Ganzzahl (z. B. „abc", „1.5") | Fehler | Ungültiger Typ, Start wird abgebrochen | | < 1 | Fehler | Wert muss positiv sein, Start wird abgebrochen | | 1–9 | Fehler | Minimum ist 10 Zeichen, Start wird abgebrochen | -| 10–19 | Warnung | „Titellänge unter 20 Zeichen ist für die meisten Dokumente nicht empfohlen" | -| 20–99 | OK | Normaler Betrieb, keine Meldung | -| 100–120 | Warnung | „Hohe Titellänge – Dateiname wird sehr lang, Kompatibilität mit verschlüsselten Volumes prüfen" | +| 10–39 | Warnung | „Titellänge unter 40 Zeichen – KI-Ergebnisse können unvollständig sein, da Absender allein bereits 15–20 Zeichen benötigt" | +| 40–99 | OK | Normaler Betrieb, keine Meldung | +| 100–120 | Warnung | „Hohe Titellänge – Kompatibilität mit verschlüsselten Volumes prüfen" | | > 120 | Fehler | Überschreitet sicheres Limit für verschlüsselte Synology-Volumes, Start wird abgebrochen | --- diff --git a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorValidationSmokeTest.java b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorValidationSmokeTest.java index 9693217..df22ac6 100644 --- a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorValidationSmokeTest.java +++ b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorValidationSmokeTest.java @@ -514,7 +514,7 @@ class GuiEditorValidationSmokeTest { } /** - * Smoke test: a value in the lower warning band (10..19) produces a field finding that is + * Smoke test: a value in the lower warning band (10..39) produces a field finding that is * not marked as ERROR. * * @throws Exception if the FX thread task fails or times out diff --git a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidator.java b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidator.java index 0424aff..be4f013 100644 --- a/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidator.java +++ b/pdf-umbenenner-adapter-out/src/main/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidator.java @@ -230,7 +230,7 @@ public class StartConfigurationValidator { * * Non-blocking warnings (logged but accepted): * @@ -249,9 +249,9 @@ public class StartConfigurationValidator { + "). Überschreitet sicheres Limit für verschlüsselte Synology-Volumes."); return; } - if (value <= 19) { - LOG.warn("Titellänge {} unter 20 Zeichen ist für die meisten Dokumente nicht empfohlen", - value); + if (value <= 39) { + LOG.warn("Titellänge {} unter 40 Zeichen – KI-Ergebnisse können unvollständig sein, " + + "da Absender allein bereits 15–20 Zeichen benötigt", value); } else if (value >= 100) { LOG.warn("Titellänge {} ist hoch – Kompatibilität mit verschlüsselten Volumes " + "(Limit ~143 Zeichen inkl. Datumspräfix) prüfen", diff --git a/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidatorTest.java b/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidatorTest.java index 841bc45..e2b2272 100644 --- a/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidatorTest.java +++ b/pdf-umbenenner-adapter-out/src/test/java/de/gecheckt/pdf/umbenenner/adapter/out/bootstrap/validation/StartConfigurationValidatorTest.java @@ -991,7 +991,21 @@ class StartConfigurationValidatorTest { void validate_succeedsForLowWarnRange() throws Exception { StartConfiguration config = buildValidConfigWithMaxTitleLength(15); assertDoesNotThrow(() -> validator.validate(config), - "Werte im Bereich 10..19 sind zulässig (nur Warnung im Log)"); + "Werte im Bereich 10..39 sind zulässig (nur Warnung im Log)"); + } + + @Test + void validate_succeedsForLowWarnRangeUpperBoundary() throws Exception { + StartConfiguration config = buildValidConfigWithMaxTitleLength(39); + assertDoesNotThrow(() -> validator.validate(config), + "Wert 39 ist zulässig (nur Warnung im Log)"); + } + + @Test + void validate_succeedsForNormalRangeLowerBoundary() throws Exception { + StartConfiguration config = buildValidConfigWithMaxTitleLength(40); + assertDoesNotThrow(() -> validator.validate(config), + "Wert 40 ist unkritisch (kein Log-Warn)"); } @Test diff --git a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorConfigurationValidator.java b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorConfigurationValidator.java index 3762f69..a92fd73 100644 --- a/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorConfigurationValidator.java +++ b/pdf-umbenenner-application/src/main/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorConfigurationValidator.java @@ -68,7 +68,7 @@ public class EditorConfigurationValidator { // Grenzen für die maximale Basistitel-Länge. private static final int TITLE_LENGTH_MIN = 10; private static final int TITLE_LENGTH_MAX = 120; - private static final int TITLE_LENGTH_LOW_WARN_THRESHOLD = 20; + private static final int TITLE_LENGTH_LOW_WARN_THRESHOLD = 40; private static final int TITLE_LENGTH_HIGH_WARN_THRESHOLD = 100; /** @@ -237,10 +237,10 @@ public class EditorConfigurationValidator { *
  • < {@value #TITLE_LENGTH_MIN}: Fehler (Minimum)
  • *
  • > {@value #TITLE_LENGTH_MAX}: Fehler (sicheres Maximum für verschlüsselte Volumes)
  • *
  • {@value #TITLE_LENGTH_MIN}–{@value #TITLE_LENGTH_LOW_WARN_THRESHOLD} (einschließlich - * 19): Warnung (unter 20 Zeichen selten empfehlenswert)
  • + * 39): Warnung (unter 40 Zeichen – KI-Ergebnisse können unvollständig sein) *
  • ≥ {@value #TITLE_LENGTH_HIGH_WARN_THRESHOLD}: Warnung (Kompatibilitätsrisiko * mit verschlüsselten Volumes)
  • - *
  • andernfalls (20–99): kein Befund
  • + *
  • andernfalls (40–99): kein Befund
  • * * * @param rawValue Rohwert aus dem Editor; nie {@code null} @@ -275,17 +275,17 @@ public class EditorConfigurationValidator { } if (value < TITLE_LENGTH_LOW_WARN_THRESHOLD) { findings.add(EditorValidationFinding.warning(FIELD_MAX_TITLE_LENGTH, - "Titellänge unter " + TITLE_LENGTH_LOW_WARN_THRESHOLD - + " Zeichen ist für die meisten Dokumente nicht empfohlen (aktuell: " + "Titellänge unter 40 Zeichen – KI-Ergebnisse können unvollständig sein, " + + "da Absender allein bereits 15–20 Zeichen benötigt (aktuell: " + value + ").")); return; } if (value >= TITLE_LENGTH_HIGH_WARN_THRESHOLD) { findings.add(EditorValidationFinding.warning(FIELD_MAX_TITLE_LENGTH, - "Hohe Titellänge: Kompatibilität mit verschlüsselten Volumes prüfen " + "Hohe Titellänge – Kompatibilität mit verschlüsselten Volumes prüfen " + "(aktuell: " + value + ").")); } - // 20–99: unkritisch, kein Befund + // 40–99: unkritisch, kein Befund } // ========================================================================= diff --git a/pdf-umbenenner-application/src/test/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorConfigurationValidatorTest.java b/pdf-umbenenner-application/src/test/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorConfigurationValidatorTest.java index 31ec4be..858804d 100644 --- a/pdf-umbenenner-application/src/test/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorConfigurationValidatorTest.java +++ b/pdf-umbenenner-application/src/test/java/de/gecheckt/pdf/umbenenner/application/validation/editor/EditorConfigurationValidatorTest.java @@ -591,9 +591,25 @@ class EditorConfigurationValidatorTest { } @Test - void validate_maxTitleLength_twenty_producesNoFinding() { + void validate_maxTitleLength_twenty_producesWarning() { EditorValidationReport report = validator.validate(inputWithMaxTitleLength("20")); + assertThat(report.findingsFor(EditorConfigurationValidator.FIELD_MAX_TITLE_LENGTH)) + .anyMatch(f -> f.severity() == EditorValidationSeverity.WARNING); + } + + @Test + void validate_maxTitleLength_thirtyNine_producesWarning() { + EditorValidationReport report = validator.validate(inputWithMaxTitleLength("39")); + + assertThat(report.findingsFor(EditorConfigurationValidator.FIELD_MAX_TITLE_LENGTH)) + .anyMatch(f -> f.severity() == EditorValidationSeverity.WARNING); + } + + @Test + void validate_maxTitleLength_forty_producesNoFinding() { + EditorValidationReport report = validator.validate(inputWithMaxTitleLength("40")); + assertThat(report.findingsFor(EditorConfigurationValidator.FIELD_MAX_TITLE_LENGTH)) .isEmpty(); }