fix(build): отрицательные сканы приёмки проверяют форму кода, а не прозу
Комментарий, объясняющий, почему чего-то больше нет, обязан называть это по
имени. Скан по голой подстроке такой комментарий от кода не отличает и падает
на документации к выполненной им же работе. Найдено три таких гейта, все на
пути ближайшей сборки:
скан иконок -> блочный комментарий в SvgIcon/sprite.ts
скан имён раннеров -> слово `systemd-run` в прозе firewall.ts
скан cancelFirewall... -> комментарий о разделении функции
Второй сломан моим же комментарием из 2259f7c. Третий сломан с момента своего
появления (330a63b) и не падал только потому, что сборка до него не доходила:
её останавливали более ранние гейты.
Исправления по форме, а не удалением комментариев:
- скан прежних имён раннеров требует, чтобы перед именем не стоял дефис. В
JavaScript идентификатор после дефиса не начинается, поэтому исключение
точное и ни один настоящий вызов не пропускает;
- скан cancelFirewallRollback ищет имя со скобкой, то есть объявление или
вызов, а не упоминание;
- литеральный скан по virtual:svg-icons-register удалён: его роль исполняет
более сильный и более ранний гейт — production `vite build`, где активный
импорт неразрешимого виртуального модуля роняет сборку bundle. Оставлены две
точные проверки: отсутствие плагина в package.json и вызов registerSvgIcons
в main.ts.
В шапке acceptance.sh зафиксировано правило для отрицательных сканов и
ограничение code_without_comments: строчные комментарии он отбрасывает,
блочные — нет, и блок-парсер сознательно не заводится (наивный стриппер
спотыкается о `/*` внутри строк и регулярных выражений, а это ложный PASS).
Все отрицательные сканы приёмки прогнаны по текущему дереву: срабатываний
больше нет; новые шаблоны проверены на синтетическом регрессе — ловят.
This commit is contained in:
@@ -1448,6 +1448,31 @@ hy2xs-orchestrator doctor
|
||||
74. обещанное окно отката — контракт systemd, а не намерение: у транзиентного таймера явно задан `AccuracySec=1s`, иначе умолчание `AccuracySec=1min` превращало «45 секунд» в 45–105
|
||||
75. состояние guard читает один наблюдатель: `status` берёт его у того же кода, что и барьер, и сообщает `unknown` вместо тихого «guard'ов нет» при отказе systemd
|
||||
76. ни один релизный гейт не подаёт вывод в поиск с флагом `-q` через пайплайн: под `set -o pipefail` оборванный продюсер отдаёт 141, и «совпадение найдено» превращается в ненулевой код — для отрицательных проверок это ложный PASS. Сравнение идёт через here-string, и возврат пайплайна запрещён отдельной приёмкой
|
||||
77. отрицательные сканы по дереву исходников формулируют **синтаксическую форму**, а не подстроку: вызов — имя со скобкой или обратной кавычкой, импорт — `import` со спецификатором, зависимость — ключ в `package.json`. Прозаическое упоминание удалённой вещи разрешено, иначе гейт запрещает документировать собственную работу
|
||||
|
||||
### Почему отрицательный скан не ищет подстроку
|
||||
|
||||
Комментарий, объясняющий, почему чего-то больше нет, обязан называть это по
|
||||
имени. Скан по голой подстроке такой комментарий не отличает от кода и падает
|
||||
ровно на документации к выполненной им же работе. В этом файле урок оплачен
|
||||
пять раз: скан versions contract ловил сам себя на `/hui`; dead-route скан
|
||||
падал на `router_test.go`, который перечисляет удалённые маршруты, чтобы
|
||||
доказать их отсутствие; скан иконок — на блочном комментарии о замене плагина;
|
||||
скан прежних имён раннеров — на слове `systemd-run` в прозе; скан
|
||||
`cancelFirewallRollback` — на комментарии о её разделении.
|
||||
|
||||
`code_has` отбрасывает **строчные** комментарии (`//`, `#`), но не блочные
|
||||
`/* … */`. Блок-парсер сознательно не заводится: наивный стриппер спотыкается
|
||||
о `/*` внутри строк и регулярных выражений и может вычистить настоящий код —
|
||||
а это ложный PASS, то есть лекарство хуже болезни. Для файлов с блочными
|
||||
комментариями формулируется синтаксическая форма либо утверждение опирается на
|
||||
более сильный гейт.
|
||||
|
||||
Пример последнего: литерального скана по `virtual:svg-icons-register` больше
|
||||
нет. Его роль исполняет production `vite build`, который проходит раньше:
|
||||
активный `import "virtual:svg-icons-register"` при отсутствующем плагине не
|
||||
разрешается резолвером, и сборка bundle падает. Проверяется исполняемый импорт,
|
||||
а не совпадение подстроки.
|
||||
|
||||
### Почему пайплайн в `grep -q` запрещён
|
||||
|
||||
|
||||
Reference in New Issue
Block a user