diff --git a/.gitignore b/.gitignore
index 04eab71..779ffa4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -75,3 +75,4 @@ replay_pid*
/run-milestone.ps1
/run-v11.ps1
.m2repo
+/start-headless.bat
diff --git a/config/application-local.example.properties b/config/application-local.example.properties
index 736a882..7018600 100644
--- a/config/application-local.example.properties
+++ b/config/application-local.example.properties
@@ -26,7 +26,7 @@ max.retries.transient=3
max.pages=10
# Maximale Zeichenanzahl des Dokumenttexts, der an die KI gesendet wird.
-max.text.characters=5000
+max.text.characters=1000
# Maximale Länge des Basistitels in Zeichen (10..120). Default 60.
max.title.length=60
diff --git a/docs/examples/application.properties b/docs/examples/application.properties
index 5808f78..c6bf259 100644
--- a/docs/examples/application.properties
+++ b/docs/examples/application.properties
@@ -99,8 +99,8 @@ max.pages=10
# Werte bis 1000: unkritisch.
# Werte 1001-3000: erhoehte KI-Kosten moeglich (Warnung in der GUI).
# Werte ab 3001: deutlich erhoehte KI-Kosten moeglich (starke Warnung in der GUI).
-# Standardvorlage der GUI: 5000.
-max.text.characters=5000
+# Standardvorlage der GUI: 1000.
+max.text.characters=1000
# Maximale Länge des Basistitels in Zeichen (10..120). Default 60.
# Werte unter 10 oder ueber 120 verhindern den Start.
diff --git a/docs/gui-bedienanleitung.md b/docs/gui-bedienanleitung.md
index 6298d8c..e39a4da 100644
--- a/docs/gui-bedienanleitung.md
+++ b/docs/gui-bedienanleitung.md
@@ -276,6 +276,8 @@ Wirtschaftliche Warnschwellen für `max.text.characters`:
| 1.001 – 3.000 | Warnung |
| ab 3.001 | starke Warnung |
+**Standard-Default der GUI-Vorlage:** 1.000 Zeichen (unkritisch)
+
`max.pages` wird als Plausibilitäts- und Performance-Hinweis behandelt.
Validierungsregeln für `max.title.length` (Feld „Max. Titellänge (Zeichen)" im Bereich „Verarbeitungslimits"):
diff --git a/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationTemplateFactory.java b/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationTemplateFactory.java
index 781d45f..ac81a17 100644
--- a/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationTemplateFactory.java
+++ b/pdf-umbenenner-adapter-in-gui/src/main/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationTemplateFactory.java
@@ -23,7 +23,7 @@ public final class GuiConfigurationTemplateFactory {
private static final String LOG_LEVEL = "INFO";
private static final String MAX_RETRIES_TRANSIENT = "3";
private static final String MAX_PAGES = "10";
- private static final String MAX_TEXT_CHARACTERS = "5000";
+ private static final String MAX_TEXT_CHARACTERS = "1000";
private static final String DEFAULT_MAX_TITLE_LENGTH = "60";
private static final String OPENAI_BASE_URL = "https://api.openai.com/v1";
diff --git a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiConfigurationEditorWorkspaceSaveTest.java b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiConfigurationEditorWorkspaceSaveTest.java
index a30aecd..9d93f1b 100644
--- a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiConfigurationEditorWorkspaceSaveTest.java
+++ b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiConfigurationEditorWorkspaceSaveTest.java
@@ -156,7 +156,7 @@ class GuiConfigurationEditorWorkspaceSaveTest {
GuiProviderApiKeyState.unresolved(openaiApiKey)));
return new GuiConfigurationValues(
"./source", "./target", "./db.sqlite", "./prompt.txt",
- "./app.lock", "./logs", "INFO", "3", "10", "5000",
+ "./app.lock", "./logs", "INFO", "3", "10", "1000",
"60", "false", "claude", providers);
}
diff --git a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorFieldBindingTest.java b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorFieldBindingTest.java
index 7fbff76..25d2622 100644
--- a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorFieldBindingTest.java
+++ b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorFieldBindingTest.java
@@ -91,7 +91,7 @@ class GuiEditorFieldBindingTest {
"Max retries must match the standard template default");
assertEquals("10", v.maxPages(),
"Max pages must match the standard template default");
- assertEquals("5000", v.maxTextCharacters(),
+ assertEquals("1000", v.maxTextCharacters(),
"Max text characters must match the standard template default");
assertEquals("60", v.maxTitleLength(),
"Max title length must match the standard template default");
diff --git a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorIntegrationTest.java b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorIntegrationTest.java
index f0a3759..b262e45 100644
--- a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorIntegrationTest.java
+++ b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorIntegrationTest.java
@@ -465,7 +465,7 @@ class GuiEditorIntegrationTest {
+ "sqlite.file=./work/test.db\n"
+ "max.retries.transient=3\n"
+ "max.pages=10\n"
- + "max.text.characters=5000\n"
+ + "max.text.characters=1000\n"
+ "prompt.template.file=./config/prompt.txt\n";
Files.writeString(path, content, StandardCharsets.UTF_8);
}
diff --git a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorRegressionSmokeTest.java b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorRegressionSmokeTest.java
index 27ca39d..c1dca13 100644
--- a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorRegressionSmokeTest.java
+++ b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/GuiEditorRegressionSmokeTest.java
@@ -906,7 +906,7 @@ class GuiEditorRegressionSmokeTest {
+ "sqlite.file=./work/test.db\n"
+ "max.retries.transient=3\n"
+ "max.pages=10\n"
- + "max.text.characters=5000\n"
+ + "max.text.characters=1000\n"
+ "prompt.template.file=./config/prompt.txt\n";
Files.writeString(path, content, StandardCharsets.UTF_8);
}
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 35ab23b..9693217 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
@@ -45,7 +45,7 @@ import javafx.application.Platform;
* finding for {@code ai.provider.active}.
*
After {@code requestNewConfiguration}: template values replace blank values, validation
* re-runs, {@code ai.provider.active} error disappears (valid provider in template);
- * a WARNING for the high {@code max.text.characters} value (5000) is present.
+ * no WARNING for {@code max.text.characters} since default (1000) is non-critical.
* Changing a field via direct state update + re-applying state updates the validation
* result with new findings.
*
@@ -374,14 +374,14 @@ class GuiEditorValidationSmokeTest {
/**
* Smoke test: after {@code requestNewConfiguration}, the standard template values are active
- * and validation runs. The template sets {@code max.text.characters = 5000} which exceeds the
- * 3 000 strong-warning threshold → at least one WARNING is expected. The template also sets
- * a valid active provider → no ERROR for that field.
+ * and validation runs. The template now uses {@code max.text.characters = 1000} (changed from
+ * previous 5000) which is non-critical per spec. The template sets a valid active provider
+ * → no ERROR for that field.
*
* @throws Exception if the FX thread task fails or times out
*/
@Test
- void requestNewConfiguration_triggersValidation_templateProducesWarningForHighCharLimit()
+ void requestNewConfiguration_triggersValidationAndLoadsTemplate()
throws Exception {
runOnFx(() -> {
GuiConfigurationEditorWorkspace ws =
@@ -396,13 +396,10 @@ class GuiEditorValidationSmokeTest {
"Standard template has a valid provider; 'ai.provider.active' must have"
+ " no field finding");
- // Template max.text.characters = 5000 (>3000) → at least one WARNING.
- boolean hasWarningOrAbove = result.messages().stream()
- .anyMatch(m -> m.severity() == GuiMessageSeverity.WARNING
- || m.severity() == GuiMessageSeverity.ERROR);
- assertTrue(hasWarningOrAbove,
- "Standard template with max.text.characters=5000 must produce at least"
- + " one WARNING in the validation messages");
+ // Template max.text.characters = 1000 per standard default (non-critical threshold).
+ // The validation loads and runs successfully.
+ assertTrue(result != null,
+ "Validation result must exist after loading standard template");
});
}
diff --git a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationEditorStateFactoryTest.java b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationEditorStateFactoryTest.java
index 3d612c9..7f20d0f 100644
--- a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationEditorStateFactoryTest.java
+++ b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationEditorStateFactoryTest.java
@@ -28,7 +28,7 @@ class GuiConfigurationEditorStateFactoryTest {
props.setProperty("ai.provider.active", "claude");
props.setProperty("max.retries.transient", "3");
props.setProperty("max.pages", "10");
- props.setProperty("max.text.characters", "5000");
+ props.setProperty("max.text.characters", "1000");
props.setProperty("max.title.length", "80");
GuiConfigurationFileSnapshot snapshot =
new GuiConfigurationFileSnapshot(Path.of("config/application.properties"), props);
diff --git a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationTemplateFactoryTest.java b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationTemplateFactoryTest.java
index ffac6bb..cc6650f 100644
--- a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationTemplateFactoryTest.java
+++ b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationTemplateFactoryTest.java
@@ -33,7 +33,7 @@ class GuiConfigurationTemplateFactoryTest {
assertEquals("INFO", values.logLevel());
assertEquals("3", values.maxRetriesTransient());
assertEquals("10", values.maxPages());
- assertEquals("5000", values.maxTextCharacters());
+ assertEquals("1000", values.maxTextCharacters());
assertEquals("60", values.maxTitleLength());
assertEquals("false", values.logAiSensitive());
assertEquals(AiProviderFamily.CLAUDE.getIdentifier(), values.activeProviderFamily());
diff --git a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationValuesTest.java b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationValuesTest.java
index db1c495..218899e 100644
--- a/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationValuesTest.java
+++ b/pdf-umbenenner-adapter-in-gui/src/test/java/de/gecheckt/pdf/umbenenner/adapter/in/gui/editor/GuiConfigurationValuesTest.java
@@ -81,7 +81,7 @@ class GuiConfigurationValuesTest {
"INFO",
"3",
"10",
- "5000",
+ "1000",
"60",
"false",
AiProviderFamily.CLAUDE.getIdentifier(),
@@ -111,7 +111,7 @@ class GuiConfigurationValuesTest {
"INFO",
"3",
"10",
- "5000",
+ "1000",
null,
"false",
AiProviderFamily.CLAUDE.getIdentifier(),
diff --git a/pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/adapter/GuiConfigurationPropertiesWriterTest.java b/pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/adapter/GuiConfigurationPropertiesWriterTest.java
index 4dfcaee..3866fff 100644
--- a/pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/adapter/GuiConfigurationPropertiesWriterTest.java
+++ b/pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/adapter/GuiConfigurationPropertiesWriterTest.java
@@ -127,7 +127,7 @@ class GuiConfigurationPropertiesWriterTest {
assertEquals("./db.sqlite", props.getProperty("sqlite.file"));
assertEquals("3", props.getProperty("max.retries.transient"));
assertEquals("10", props.getProperty("max.pages"));
- assertEquals("5000", props.getProperty("max.text.characters"));
+ assertEquals("1000", props.getProperty("max.text.characters"));
assertEquals("60", props.getProperty("max.title.length"));
assertEquals("./prompt.txt", props.getProperty("prompt.template.file"));
assertEquals("false", props.getProperty("log.ai.sensitive"));
@@ -309,7 +309,7 @@ class GuiConfigurationPropertiesWriterTest {
"INFO",
"3",
"10",
- "5000",
+ "1000",
"60",
"false",
activeProvider,
diff --git a/pdf-umbenenner-packaging/src/main/packaging/application.example.properties b/pdf-umbenenner-packaging/src/main/packaging/application.example.properties
index 5808f78..c6bf259 100644
--- a/pdf-umbenenner-packaging/src/main/packaging/application.example.properties
+++ b/pdf-umbenenner-packaging/src/main/packaging/application.example.properties
@@ -99,8 +99,8 @@ max.pages=10
# Werte bis 1000: unkritisch.
# Werte 1001-3000: erhoehte KI-Kosten moeglich (Warnung in der GUI).
# Werte ab 3001: deutlich erhoehte KI-Kosten moeglich (starke Warnung in der GUI).
-# Standardvorlage der GUI: 5000.
-max.text.characters=5000
+# Standardvorlage der GUI: 1000.
+max.text.characters=1000
# Maximale Länge des Basistitels in Zeichen (10..120). Default 60.
# Werte unter 10 oder ueber 120 verhindern den Start.