0e60e51824
mempalace/_stdio.py states the rule in its own docstring -- "every console entry point that touches stdio needs to fix this on Windows" -- and cli.py and fact_checker.py both apply it. scripts/mempalace_repair_encoding.py, added later, does not. That matters more here than anywhere else: this tool exists for Windows users whose palace carries legacy mojibake, and it prints a before/after preview for every proposed change. Under the console codepage it was written for, the preview cannot be encoded -- the lead bytes of the corruption it detects are exactly the characters the codepage rejects -- so the run dies with UnicodeEncodeError before repairing a single drawer. Reproduced with stdout on cp936: UnicodeEncodeError: 'gbk' codec can't encode character '\xc3' in position 14: illegal multibyte sequence U+00C3 is the lead character of the à family this tool repairs. Uses replace on stdout/stderr, matching cli.py and fact_checker.py, because the preview carries verbatim drawer text that may hold surrogate halves round-tripped from filenames; strict would crash mid-preview. Related to #1122 (same exception class on the main CLI's help output) but a different entry point and a different fix -- that one can use ASCII-safe static strings, this one prints arbitrary user content.