acdream/src/AcDream.UI.Abstractions/Panels/Settings
Erik 955c618013
All checks were successful
CI / linux-portable (push) Successful in 3m46s
CI / windows-gate (push) Successful in 5m5s
CI / release (push) Successful in 1m56s
fix: make locale-independence real, not assumed — parsing, casing, comparison
Follow-up to the retail-text fix. "Green under sv-SE" is not the same as "runs
on any locale", so this establishes the latter by running the suite under
cultures chosen to break different things, and fixing what they broke.

ar-SA found a genuine defect the Swedish runner cannot see: the resolution
parser read "1920x-1" through the ambient culture, and ar-SA's negative sign is
not ASCII '-', so the parse failed and the height silently became 0 instead of
-1. Both copies of that parser (App settings targets and the UI settings store)
now parse invariantly.

Audited every remaining culture-sensitive operation in src/ rather than fixing
only what a test happened to catch:

- Numeric Parse/TryParse with no IFormatProvider: 11 sites, all reading
  MACHINE-readable input — env vars (ACDREAM_LIGHT_DEBUG, ACDREAM_NET_DROP_*,
  streaming/quality knobs), CLI arguments, "1920x1080" settings keys, a chat
  command's price argument, and the launcher's bake thread count, which is
  handed straight to a child process command line. All pinned to
  InvariantCulture.
- ToUpper()/ToLower() with no culture: none. The Turkish-I class was already
  clean, and tr-TR confirms it.
- StartsWith/EndsWith/IndexOf(string) with no StringComparison: one —
  ChatInputParser's "@" prefix test, which is a culture-sensitive comparison
  for a single ASCII character. Now the ordinal char overload.

Verified: 13,958 tests pass identically under the machine default, sv-SE,
tr-TR, ar-SA, and de-DE. (The two launcher test assemblies are excluded from
this run only because a running acdream-launcher.exe holds its own binary; the
one launcher change here is the thread-count parse.)

Dates remain on the current culture by intent, unchanged from the previous
commit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 20:11:32 +02:00
..
AudioSettings.cs docs: OP6 re-review CLOSED — slice code-complete, gate ready; doc residuals 2026-08-11 08:21:07 +02:00
CameraTurningSettings.cs feat(ui): Campaign OP slice OP6 — the Config tab 2026-08-11 07:16:35 +02:00
CharacterSettings.cs feat(ui): Character tab — per-toon settings; Phase L.0 complete 2026-04-26 18:27:07 +02:00
ChatOpacityLink.cs refactor(settings): OP9 — retire the dead F11 settings surface + fully-superseded GameplaySettings 2026-08-11 13:18:53 +02:00
ChatSettings.cs feat(ui): Campaign OP slice OP6 — the Config tab 2026-08-11 07:16:35 +02:00
DisplaySettings.cs fix #391: curated modern-only resolution list from the monitor's modes 2026-08-13 17:16:09 +02:00
MiscSettings.cs fix(ui): #409 tooltip review fix round — F1-F11 2026-08-16 20:54:15 +02:00
SettingsStore.cs fix: make locale-independence real, not assumed — parsing, casing, comparison 2026-08-19 20:11:32 +02:00
UiWindowLayout.cs fix(ui): restore modern spell formula presentation 2026-07-24 07:08:47 +02:00