UX-08 2c: short refusals, error texts and option texts
checks / unit (pull_request) Successful in 8m50s
infra-pin / fresh (pull_request) Successful in 2s

Validator refusals name the setting by its label and key, say what is
wrong and what to change, and keep the rejected value and limit. Option
names and descriptions are short in en and nl; citations moved to DOCS
"For installers" and the test_translations citation check now pins the
instruction on the tab and the record in DOCS. No rule, key, schema,
default or exit code changed. Allowlist 167 -> 43 (log lines only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LyR88rXETvwhTgx6yHE39p
This commit is contained in:
glenn schrooyen
2026-09-27 05:55:45 +02:00
co-authored by Claude Opus 5.5
parent e1d0970b23
commit 2c516a032c
26 changed files with 1026 additions and 1236 deletions
+3 -3
View File
@@ -2609,7 +2609,7 @@ check("arbitrage on with NO price source at all is refused - a strategy that "
"must refuse on every cycle forever looks exactly like one that is "
"running and finding nothing",
why(validate_startup_config(vbase(arbitrage_enabled=True, **P1_ON),
-5000, 5000), "NO PRICES AT ALL"))
-5000, 5000), "the site has no prices"))
check("arbitrage on with meter_source off is refused - §9.1 puts peak shaving "
"above arbitrage and an unmeasured peak cannot be shaved",
why(validate_startup_config(
@@ -2620,7 +2620,7 @@ check("a floor at or above the ceiling is refused - there is no band left "
why(validate_startup_config(
vbase(arbitrage_enabled=True, price_provider="generic_dayahead",
arbitrage_soc_floor=90, arbitrage_soc_ceiling=90, **P1_ON),
-5000, 5000), "no band left"))
-5000, 5000), "Make the lower limit the smaller number"))
check("...and the same numbers the right way round start",
validate_startup_config(
vbase(arbitrage_enabled=True, price_provider="generic_dayahead",
@@ -2629,7 +2629,7 @@ check("...and the same numbers the right way round start",
check("a NEGATIVE cycle_cost_threshold_eur is refused even with arbitrage OFF "
"- it is a cost, and a negative one is a threshold every spread clears",
why(validate_startup_config(vbase(cycle_cost_threshold_eur=-0.01),
-5000, 5000), "non-negative")
-5000, 5000), "Set it to 0 or more")
and raises(lambda: threshold_eur_kwh({"cycle_cost_threshold_eur": -1}),
ValueError))
# Rule 7's wording, which OPT-04 had to update because it named what main.py