v3.1.0
Плагин работает во втором харнессе. Кроме Claude Code его теперь можно поставить в
OpenCode — строкой в opencode.json, закреплённой на этот же тег этого же репозитория.
Механика гейта общая: одно ядро, одни инструменты, одни навыки и субагенты. Для тех, кто
работает в Claude Code, не меняется ничего — отсюда минорный номер.
Контуры
code: без изменений.
arch: без изменений.
xml: без изменений.
hygiene: без изменений.
оркестратор: логика взвода, формат состояния и тексты вынесены в общее ядро
hooks/gate-core.mjs. Хуки Claude Code стали тонкими обёртками над ним:
ввод-вывод харнесса снаружи, решение внутри. Поведение прежнее, и это
проверяется теми же тестами, что и до выноса.
Точки переключения через окружение, все с обратносовместимыми умолчаниями:
`QG_STATE_DIR` — каталог состояния (по умолчанию `.claude/.state`);
`QG_PROJECT_DIR` — корень проекта, первым в цепочке перед `CLAUDE_PROJECT_DIR`;
`QG_ROOT` — корень пакета, избавляет навык от перебора кандидатов;
`QG_DATA_DIR` — каталог анализатора, сильнее `CLAUDE_PLUGIN_DATA`.
Установка в OpenCode
"plugin": ["1c-quality-gate@git+https://github.com/Romandredan/1c-quality-gate.git#v3.1.0"]Пакет ставит сам OpenCode, копировать в проект нечего. Состав объявляется хуком config:
навыки через config.skills.paths, команды и субагенты разбором поставляемых .md,
MCP стандартов записью в config.mcp. Инструменты агент находит по QG_ROOT из хука
shell.env — механизм штатный, а не наследование окружения процесса.
Тег закрепляйте: без него OpenCode тянет текущее состояние main, и два харнесса
разъезжаются. Единственный ручной шаг — две строки в .gitignore проекта, названы в
docs/OPENCODE.md.
Гейт в OpenCode мягкий. Эквивалента Stop-хука с отказом в завершении сессии там нет:
плагин ловит session.idle и возвращает агента к работе, не более трёх раз на неизменный
состав правок. Исчерпание лимита пишется в журнал записью gate-surrendered — отказ от
проверки остаётся наблюдаемым фактом. Требования к снятию не смягчены: release
по-прежнему требует машиночитаемый след, валидатор общий для обоих харнессов.
Что перестанет проходить
Нет. Ни одна проверка не ужесточена, новых обязательных записей следа не появилось,
пороги не менялись: отчёт, проходивший валидатор в 3.0.0, проходит и здесь.
Ломающие изменения
Нет. Установка Claude Code, расположение состояния, имена проверок, флаги и коды возврата
не менялись. Каталог анализатора остался прежним и общим для обоих харнессов: бинарник
закреплён по версии и SHA-256, для Claude Code и OpenCode он побайтово один, и вторая
копия стоила бы шестидесяти мегабайт. QG_DATA_DIR перекрывает путь, если он не нужен.
Миграция
Не требуется, .1c-quality-gate.json не меняется.
Закреплённая версия анализатора
0.2.73
Минимальная версия Claude Code
Не меняется.
Благодарности
@BaniBaushev — замысел и основная работа: общее ядро, плагин OpenCode, субагенты и
команды, документация второго харнесса. Пять заходов ревью, и на каждый — разбор по
существу, а не отписка. Отдельно стоит назвать два места, где правка пришла вместе с
тестом, воспроизводящим дефект: отвергнутый абсолютный путь в QG_STATE_DIR и подключение
наборов тестов к общему прогону.
Проверено живьём на OpenCode 1.18.25: пакет ставится из git-спецификации и разворачивается
целиком; регистрируются пять навыков, три субагента и MCP v8std; правка .bsl взводит
гейт в .opencode/.state, gate.mjs status из оболочки агента его видит, release снимает
маркер; analyzer-run.mjs поднимает bsl-analyzer 0.2.73 с подтверждённым часовым.
Тестов 596 → 602. Наборы gate-core.test.mjs (44 проверки) и opencode-plugin.test.mjs
(43) подключены к общему прогону — прежде они существовали, проходили и не запускались ни
в CI, ни локально.