v0.5.3: LC_ALL=C scoped to sitter's string handling; hooks and the wrapped command inherit the operator locale (#75)
v0.5.3 — LC_ALL=C no longer leaks into hooks and the wrapped command (#75)
Seven functions in sitter assigned LC_ALL=C as a bare global. When the operator had LC_ALL exported (containers, CI), those assignments overwrote the exported value mid-run, so --on-fail hooks observed LC_ALL=C instead of the operator's locale.
Fixed
json_quote,sanitize_expect_value,truncate_utf8,emit_expect_event,build_ask_event_record:local LC_ALL=C.invoke_hook,emit_event: assignment removed; the 512-bytedetail_truncatedcount moves to abyte_lengthhelper so noLC_ALL=Cframe is alive when the hook is spawned (bash locals inherit the export attribute of an exported global).--on-failhooks and the wrapped command now inherit the operator'sLC_ALL/LANGunchanged. Sitter's internal string-handling helpers and the explicitly scoped replay pipelines still run underLC_ALL=C.
Tests
hook_sees_operator_locale(run + expect/sweep hook paths, unset control, 513-byte multibytedetail_truncated).ledger_sweep_exported_locale_equivalence(sweep rows bytewise identical under LANG-only /LC_ALL=C.UTF-8/en_US.UTF-8/C).
Docs: docs/reference.md, docs/reference.ja.md.