Fix Issue #13: Warnschwelle für max.title.length auf 10–39 angehoben

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 <noreply@anthropic.com>
This commit is contained in:
2026-04-23 08:11:36 +02:00
parent c61108fe1b
commit 5d0e2c90bd
7 changed files with 50 additions and 20 deletions
@@ -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 {
* <li>&lt; {@value #TITLE_LENGTH_MIN}: Fehler (Minimum)</li>
* <li>&gt; {@value #TITLE_LENGTH_MAX}: Fehler (sicheres Maximum für verschlüsselte Volumes)</li>
* <li>{@value #TITLE_LENGTH_MIN}{@value #TITLE_LENGTH_LOW_WARN_THRESHOLD} (einschließlich
* 19): Warnung (unter 20 Zeichen selten empfehlenswert)</li>
* 39): Warnung (unter 40 Zeichen KI-Ergebnisse können unvollständig sein)</li>
* <li>&ge; {@value #TITLE_LENGTH_HIGH_WARN_THRESHOLD}: Warnung (Kompatibilitätsrisiko
* mit verschlüsselten Volumes)</li>
* <li>andernfalls (2099): kein Befund</li>
* <li>andernfalls (4099): kein Befund</li>
* </ul>
*
* @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 1520 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 + ")."));
}
// 2099: unkritisch, kein Befund
// 4099: unkritisch, kein Befund
}
// =========================================================================
@@ -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();
}