From b7a2412e8882b0c8fb3f7768f46ea1f3d78452da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 17 May 2026 04:11:45 +0300 Subject: [PATCH] =?UTF-8?q?fix(adr):=20adr-judge=20lefthook=20job=20?= =?UTF-8?q?=E2=80=94=20Python=20UTF-8=20mode=20for=20Cyrillic=20diffs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit adr-judge crashed (UnicodeEncodeError: surrogate '\udc98') when the staged diff contained non-ASCII content: Python reads piped stdin with the Windows cp1251 console codepage, not UTF-8, so a Cyrillic diff mis-decodes into surrogates and dies at diff_text.encode('utf-8'). '-X utf8' forces Python UTF-8 mode. Task 5's red-test probe was ASCII, so the crash went unseen until Task 6's Cyrillic docs/architecture files. adr-judge's file reads already use explicit encoding='utf-8'; only stdin was affected. Co-Authored-By: Claude Opus 4.7 (1M context) --- lefthook.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lefthook.yml b/lefthook.yml index 5f778f7a..3a21660e 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -121,8 +121,10 @@ pre-commit: # правила к staged-дифу. Вендорен из adr-kit v0.13.1 (MIT) → tools/adr-judge.py; # пере-вендорить после `/adr-kit:upgrade`. Без --llm → только regex, без вызова # Claude API, нулевая стоимость (AK6). Без glob — adr-judge нужен весь staged-диф. + # `-X utf8` обязателен: stdin Python на Windows = cp1251; диф с кириллицей иначе + # ломается на surrogate → UnicodeEncodeError (crash, не ADR-violation). - name: adr-judge - run: git diff --cached --unified=0 | python tools/adr-judge.py --diff - --adr-dir docs/adr/ + run: git diff --cached --unified=0 | python -X utf8 tools/adr-judge.py --diff - --adr-dir docs/adr/ fail_text: | adr-judge: staged-изменение нарушает задокументированное архитектурное решение (ADR). Смотри file:line выше и docs/adr/ADR-*.md.