Решили: все scripts/*.ps1 обязаны иметь UTF-8 BOM; инвариант держит EditMode-тест ToolingScriptEncodingTests, а не комментарий в скрипте.

Почему: девять скриптов из одиннадцати не парсились в Windows PowerShell 5.1 — той оболочке, которая у Макса по умолчанию. Отвергли альтернативу «переписать под 5.1»: она была бы работой не по адресу. Ровно те два файла, у которых BOM уже был, парсились нормально — значит дело не в синтаксисе седьмой версии, а в сигнатуре. Настоящих 7-only конструкций во всех одиннадцати нашлась одна: Set-Content -Encoding utf8NoBOM в ветке -Meta у compile-check.ps1. Имени utf8NoBOM в 5.1 нет вовсе, а её utf8 — это UTF-8 с сигнатурой, которой в .meta быть не должно; поэтому замена не на другое имя кодировки, а на явный UTF8Encoding($false) через System.IO.File — он даёт одинаковый байт в обеих оболочках.

Дом инварианта выбран по правилу «инвариант между файлами идёт в тест»: нарушается он снаружи и молча. Любой агент или редактор, сохранивший файл «просто в UTF-8», ломает консоль Макса, а в pwsh 7 всё продолжает работать — автор правки ничего не замечает. Комментарий внутри скрипта такую правку не остановит, потому что её делает тот, кто скрипт не читал.

Грабли: ошибка не называет кодировку. 5.1 без сигнатуры читает файл как ANSI, кириллица в комментариях превращается в мусор, в мусоре разъезжаются кавычки — и падает парсер, до первой строки логики. В консоль при этом уезжает «отсутствует закрывающий знак )» с номером случайной строки. Чинить по такому сообщению можно долго и не туда; диагноз даёт не чтение кода, а сравнение: у кого BOM есть — работает.

Второе: цена ошибки была выше, чем кажется по списку файлов. Среди девяти — compile-check.ps1, которым по HARD-правилу проверяется каждая правка .cs. Инструмент, введённый чтобы не морозить редактор, у Макса не запускался вообще.

Третье: тест на первом прогоне поймал вендорные Activate.ps1 из Python-venv аудио-пайплайна (scripts/audio/.venv*/). Область сузили до путей без скрытых папок — venv в .gitignore, и его кодировка не наша забота.

Четвёртое, и оно оказалось второй половиной той же болезни: BOM чинит только чтение самого скрипта, но не чтение данных. Get-Content без -Encoding UTF8 в 5.1 читает уже .md и .xml как ANSI. check-wiki-links.ps1 после починки BOM запустился — и выдал битые ссылки с кракозябрами там, где в pwsh 7 гейт зелёный на 415 файлах. Гейт, который врёт красным, хуже незапускающегося: первому верят. Явная кодировка проставлена во всех местах чтения текста.

Отдельно оставлены check-journal-quotes.ps1 и journals.ps1: у них в шапке #Requires -Version 7.0. Это не дефект — оба работают с архивом диалогов агента, Макс их руками не гоняет, и падают они внятным сообщением про версию, а не мусором.

Владелец правды: тест Guildmaster.Tests.EditMode.ToolingScriptEncodingTests, scripts/compile-check.ps1 (ветка -Meta), scripts/check-wiki-links.ps1 (чтение .md).