diff --git a/docs/specs/399-backend-gate-honesty.md b/docs/specs/399-backend-gate-honesty.md index b356e92a..cada8a5f 100755 --- a/docs/specs/399-backend-gate-honesty.md +++ b/docs/specs/399-backend-gate-honesty.md @@ -3,8 +3,8 @@ - Issue: https://github.com/Matysh/houseplan-card/issues/399 - Приоритет: P2, infra; полный трек — класс B (конфигурация гейта, workflow, тесты), три несвязанные поверхности в одном issue по решению аудита -- Ревизия: 2 (2026-08-31) — по SPEC-REVIEW-399-r1 (Medium: перебор по каталогу, - а не по паре имён) +- Ревизия: 3 (2026-08-31) — по SPEC-REVIEW-399-r2 (Medium: план тестов повторял + снятую формулировку AC5) ## Сценарий @@ -152,8 +152,14 @@ include`) и/или шаг линта в `.github/workflows/validate.yml`, 1. Пин фронтенда совпадает с ожидаемой версией закреплённого HA (AC1). 2. Списки деревьев в `include` и в шаге линта совпадают (AC2). 3. Синтетический workflow без обеих зацепок → проверка пинов краснеет (AC4). -4. Явный список обходимых файлов зафиксирован; добавление нового файла в - workflows без обновления списка краснеет (AC5). +4. Каталог `.github/workflows/*.yml` перебирается целиком: синтетический + третий workflow с `pip install pytest` без версий краснеет **без** правки + каких-либо списков в тесте (AC5). Списка обходимых файлов в тесте нет и + быть не должно — файл, не ставящий python-зависимостей, распознаётся по + собственному содержимому. +5. Реальный каталог проверяется тем же кодом: девять workflow, установка + python-зависимостей найдена ровно в двух — это вывод проверки, а не + зафиксированное в ней ожидание (AC5). **Мутанты** (`scripts/mutation-gate.mjs`): @@ -161,6 +167,9 @@ include`) и/или шаг линта в `.github/workflows/validate.yml`, `validate-workflow.test.mjs` красный. - `lint-scope-drifts`: добавить дерево в `include`, не тронув workflow → контракт скоупа красный. +- `workflow-scan-hardcodes-the-list`: заменить перебор каталога на + фиксированный список имён → пункт 4 плана красный (иначе от снятой + конструкции ничто не удерживает). ## Риски