18a6d2d824
gates / gates (push) Successful in 1s
Six pushes in a row turned CI red while the local pre-push hook was green. The alarm mail's own text says what that means and that it outranks the push it interrupted. Cause, found by contrast rather than by reading a log: check-copy-i18n.py imports PyYAML and is the ONLY gate in this repo importing anything outside the standard library. The workflow's own header says the runner is "a host-mode container with python3 and git and nothing else". The gate raised ImportError before checking anything, so catalog_gates.py exited non-zero on every push, clean ones included. The fix is a DEGRADED MODE, not a skip: without PyYAML the gate runs the check that needs no parser and matters most — every frozen Hungarian string must still occur verbatim in its app's bytes — and then prints in full what it did NOT check. Same division catalog_gates.py already uses for engine-major on a shallow clone. Measured before claimed: 1 030 of 1 032 frozen strings appear byte-for-byte in the raw files; the two that do not are romm help_texts whose YAML escapes an inner double quote, so the escaped spelling is accepted too. 1 032 of 1 032 found, so the degraded check convicts nothing honest. Five new decoy cases run with PyYAML shadowed by a module that refuses to import — what CI actually executes. 38 cases in total. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS