mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
docs: #399 spec revision 2 per SPEC-REVIEW-399-r1
User-Visible: no Issue: #399
This commit is contained in:
@@ -3,7 +3,8 @@
|
||||
- Issue: https://github.com/Matysh/houseplan-card/issues/399
|
||||
- Приоритет: P2, infra; полный трек — класс B (конфигурация гейта, workflow,
|
||||
тесты), три несвязанные поверхности в одном issue по решению аудита
|
||||
- Ревизия: 1 (2026-08-31)
|
||||
- Ревизия: 2 (2026-08-31) — по SPEC-REVIEW-399-r1 (Medium: перебор по каталогу,
|
||||
а не по паре имён)
|
||||
|
||||
## Сценарий
|
||||
|
||||
@@ -78,9 +79,19 @@ if (!/pytest-homeassistant-custom-component|tests_backend\/requirements\.txt/.te
|
||||
версий — ровно то, от чего защищались в #392 — гейт не заметит: исчезнут обе
|
||||
зацепки разом.
|
||||
|
||||
**Контракт**: отсутствие зацепок — отказ, а не пропуск. Если workflow ставит
|
||||
зависимости бэкенда, он обязан делать это из файла пинов; если не ставит вовсе
|
||||
— это тоже утверждение, которое надо доказать, а не предположить.
|
||||
Вторая половина той же дыры: проверка перебирает **жёстко заданный массив**
|
||||
`['validate.yml', 'mutation-gate.yml']`, а не каталог. Новый workflow с
|
||||
неверсионированной установкой гейт не увидит просто потому, что его нет в
|
||||
списке — и это ровно тот способ, которым #392 уже случился: корректность
|
||||
держалась на том, что никто не добавит третий файл.
|
||||
|
||||
**Контракт**: проверка перебирает **все** `.github/workflows/*.yml`. Для
|
||||
каждого файла возможны ровно два исхода: либо он ставит зависимости бэкенда —
|
||||
и тогда обязан делать это из `tests_backend/requirements.txt`, либо он их не
|
||||
ставит — и тогда это утверждение проверяется явно (в файле нет установки
|
||||
python-зависимостей), а не выводится из отсутствия подстроки. Появление нового
|
||||
workflow, ставящего зависимости мимо файла пинов, краснеет само, без правки
|
||||
списка.
|
||||
|
||||
## Скоуп / не-скоуп
|
||||
|
||||
@@ -122,10 +133,15 @@ include`) и/или шаг линта в `.github/workflows/validate.yml`,
|
||||
- **AC4**. `test/validate-workflow.test.mjs` отказывает, когда в workflow нет
|
||||
ни имени пакета, ни пути к файлу пинов. Доказательство: тест на синтетическом
|
||||
workflow без обеих зацепок → красный.
|
||||
- **AC5**. Проверка при этом не ломается на workflow, которые бэкенд-зависимости
|
||||
не ставят вовсе (если такие есть в репозитории): для них условие формулируется
|
||||
явно, а не через отсутствие подстроки. Доказательство: перечисление файлов,
|
||||
которые проверка обходит, зафиксировано в самом тесте.
|
||||
- **AC5**. Проверка перебирает каталог `.github/workflows/*.yml`, а не
|
||||
фиксированный список имён. Для файла, который зависимостей бэкенда не
|
||||
ставит, это доказывается явно — в нём нет установки python-пакетов, — а не
|
||||
выводится из отсутствия подстроки. Доказательство: тест на синтетическом
|
||||
каталоге, где третий workflow ставит `pip install pytest` без версий →
|
||||
красный, хотя в прежнем списке из двух имён его бы не было. Сегодня в
|
||||
репозитории девять workflow, установку python-зависимостей делают два
|
||||
(`validate.yml`, `mutation-gate.yml`) — это факт, который проверка обязана
|
||||
вывести сама, а не принять на веру.
|
||||
- **AC6**. Существующие гейты не ослаблены: `npm test`, `ruff` по текущему
|
||||
CI-скоупу и `mypy` strict остаются зелёными.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user