Patch release.
Fixed
- verify_gate: force UTF-8 stdout so the block JSON — whose reason string opens with "⛔" — survives Windows consoles that default to a legacy codepage (e.g. cp950). Without it
print()raisedUnicodeEncodeError, the fail-open handler swallowed it, and the Stop gate silently never blocked. Landed in #2. - verify_gate: the fail-open handler no longer swallows failures silently — before returning it appends one sanitized post-mortem line (exception class + bounded message, never the raw payload) to a gitignored
.gate_fail, in a nested try so the telemetry can't break fail-open, and bounded to keep the earliest incident lines. A silently-dying gate is now observable — that exact failure mode is what hid the cp950 bug for days. Adds test T12 (fail-then-pass verified).
Added
- Maintainer guide (
MAINTAINING.md, + 繁體中文 translation): the PR merge SOP for keeping the contributor list clean.
Changed
- Docs: the README "How it works" section (all five languages) now documents the token efficiency that falls out of the architecture — tiered model routing plus context-isolated, parallel sub-agents.
Thanks to @lepus071 for the cp950 fix in #2, and @Atistw for the .gate_fail idea in #3 (both first-time contributors).