feat(agent): нерассмотренные правила каталога видны в трекере - #1372
Open
ArtVsMark wants to merge 5 commits into
Open
feat(agent): нерассмотренные правила каталога видны в трекере#1372ArtVsMark wants to merge 5 commits into
ArtVsMark wants to merge 5 commits into
Conversation
Closes #1351 ## Что было не так Каталог правил пополняется чужими сменами, а решение «принимаем ли мы это правило и чем оно у нас держится» принимает проект. Зазор между появлением правила и решением не был виден нигде: `.rules/bindings.json` честно писал `unreviewed`, но по расписанию файл никто не открывает, а гейт полноты говорит только «ответа нет вовсе» — про правило, ответ по которому есть и означает «не дошли руки», он молчит. Замер: 30 правил со статусом `unreviewed` плюс 10, появившихся после последней сверки. Самому старому — пять дней, и узнать это можно было только вручную. ## Что сделано `scripts/rules_inbox.py` держит **один постоянный issue**: список правил без решения и метрика. **Метрика — возраст, а не только число.** Сколько дней самому старому нерассмотренному: возраст растёт сам и показывает запущенность, тогда как число показывает лишь объём и может годами стоять на месте, пока разбирают новые. **Два состояния различены.** «Не рассмотрено» (ответ есть, решения нет) и «ответа нет вовсе» (правило появилось после сверки) — разные вещи: второе роняет гейт формата, поэтому такие строки уходят первыми. **Issue находится по скрытому маркеру в теле.** Ни номер, ни заголовок для этого не годятся: номер пришлось бы где-то хранить, а хранимое состояние разъезжается ровно так же, как разъехался бы список задач в документе; заголовок меняется вместе с числом в нём. **Пустые входящие не закрываются.** Issue постоянный: следующее правило каталога появится в нём само, и заводить его заново не придётся. ## Кто запускает `tracker-guardrails.yml` — тем же ночным прогоном, что и остальные проверки трекера, сразу после клонирования каталога. ## Проверка - показ на живом каталоге: 40 нерассмотренных, самому старому 5 дн.; - 11 тестов, сеть подменена: принятое правило во входящих не висит, пустой список говорит «разобрано всё» и остаётся открытым, отсутствие даты не ломает метрику, показ без `--apply` не делает ни одного вызова; - `python scripts/preflight.py` — чисто: 5385 passed, 98 skipped. ## Чем закрывается #1351 Это последний из пяти пунктов. Ранее: `.rules/bindings.json` и гейт формата (#1360), генератор указателя на bindings (#1345), обратная ссылка в задачу-источник (#1371). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Co-Authored-By: Artem Markitanov <86671904+ArtVsMark@users.noreply.github.com>
Конфликт позиционный: и защита main (#1296), и обратная ссылка правил (#1351) дописывали шаг ночного прогона в одно место. Оба оставлены, логика ни одной стороны не менялась. Маркеры проверены прогоном: в YAML они дают не красный шаг, а прогон с нулём джобов, и снаружи это читается как «почти всё прошло». Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Co-Authored-By: Artem Markitanov <86671904+ArtVsMark@users.noreply.github.com>
ArtVsMark
enabled auto-merge (squash)
August 26, 2026 14:33
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Co-Authored-By: Artem Markitanov <86671904+ArtVsMark@users.noreply.github.com>
…les-inbox Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Co-Authored-By: Artem Markitanov <86671904+ArtVsMark@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1351
Что было не так
Каталог правил пополняется чужими сменами, а решение «принимаем ли мы это
правило и чем оно у нас держится» принимает проект. Зазор между появлением
правила и решением не был виден нигде:
.rules/bindings.jsonчестно писалunreviewed, но по расписанию файл никто не открывает, а гейт полноты говориттолько «ответа нет вовсе» — про правило, ответ по которому есть и означает «не
дошли руки», он молчит.
Замер: 30 правил со статусом
unreviewedплюс 10, появившихся после последнейсверки. Самому старому — пять дней, и узнать это можно было только вручную.
Что сделано
scripts/rules_inbox.pyдержит один постоянный issue: список правил безрешения и метрика.
Метрика — возраст, а не только число. Сколько дней самому старому
нерассмотренному: возраст растёт сам и показывает запущенность, тогда как число
показывает лишь объём и может годами стоять на месте, пока разбирают новые.
Два состояния различены. «Не рассмотрено» (ответ есть, решения нет) и
«ответа нет вовсе» (правило появилось после сверки) — разные вещи: второе роняет
гейт формата, поэтому такие строки уходят первыми.
Issue находится по скрытому маркеру в теле. Ни номер, ни заголовок для
этого не годятся: номер пришлось бы где-то хранить, а хранимое состояние
разъезжается ровно так же, как разъехался бы список задач в документе; заголовок
меняется вместе с числом в нём.
Пустые входящие не закрываются. Issue постоянный: следующее правило каталога
появится в нём само, и заводить его заново не придётся.
Кто запускает
tracker-guardrails.yml— тем же ночным прогоном, что и остальные проверкитрекера, сразу после клонирования каталога.
Проверка
список говорит «разобрано всё» и остаётся открытым, отсутствие даты не ломает
метрику, показ без
--applyне делает ни одного вызова;python scripts/preflight.py— чисто: 5385 passed, 98 skipped.Чем закрывается #1351
Это последний из пяти пунктов. Ранее:
.rules/bindings.jsonи гейт формата(#1360), генератор указателя на bindings (#1345), обратная ссылка в
задачу-источник (#1371).
Работа сделана вместе: @ArtVsMark — постановка, решения и приёмка; Claude Code — реализация.