openspec archive harness-retro: change → openspec/changes/archive/2026-10-24-harness-retro/; openspec/specs/harness-retro/spec.md (22 требования), hook-guards — MODIFIED «Регрессионный корпус хуков»; известные ошибки корпуса вынесены в отдельное требование, чтобы текст требования был ≤ 500 символов (validate --strict). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
34 lines
3.1 KiB
Markdown
34 lines
3.1 KiB
Markdown
# Spec Delta: hook-guards
|
||
|
||
## MODIFIED Requirements
|
||
|
||
### Requirement: Регрессионный корпус хуков
|
||
Пакет SHALL содержать корпус вызовов хуков из реальных транскриптов и живых случаев. Каждая запись MUST иметь идентификатор, ожидаемый вердикт `allow|block` и код класса.
|
||
|
||
Корпус MUST состоять из сегментов: строка-шапка `{home, layout}`, за ней записи этого сегмента. Для каждого сегмента строится своя песочница с раскладкой из его шапки. Корпус MUST прогоняться через хуки тестами пакета по источникам и `doctor.sh` по установленным копиям.
|
||
|
||
Запись с полем `known: "<маркер находки>"` — известная ошибка текущих хуков:
|
||
- её расхождение с ожидаемым вердиктом MUST NOT давать FAIL;
|
||
- совпадение вердикта при наличии `known` MUST давать FAIL `KNOWN-FIXED`, чтобы пометку сняли.
|
||
|
||
#### Scenario: Расхождение в тестах пакета
|
||
- **WHEN** хук из `hooks/` выносит по записи корпуса без `known` вердикт, отличный от ожидаемого
|
||
- **THEN** `bash tests/run.sh` печатает FAIL с идентификатором и классом записи и завершается с ненулевым кодом
|
||
|
||
#### Scenario: Отчёт doctor
|
||
- **WHEN** запущен `doctor.sh` при установленных хуках
|
||
- **THEN** в разделе самотеста есть строка `корпус хуков: <совпало>/<всего>`, расхождения перечислены с идентификаторами
|
||
- **AND** при наличии записей `known` строка продолжается `, известных ошибок <K>`
|
||
|
||
#### Scenario: Сегменты с разной раскладкой
|
||
- **WHEN** корпус содержит сегмент пилота 12.10 и сегмент ретро с другим домашним каталогом и другими репозиториями
|
||
- **THEN** каждая запись прогоняется в песочнице своего сегмента, и вердикты совпадают с ожидаемыми
|
||
|
||
#### Scenario: Известная ошибка
|
||
- **WHEN** запись имеет `expected: allow`, `known: "RT-21"`, а текущий guard-main её блокирует
|
||
- **THEN** тест корпуса не падает, в выводе запись отмечена как известная ошибка
|
||
|
||
#### Scenario: Известная ошибка исправлена
|
||
- **WHEN** запись имеет `known: "RT-21"`, а текущие хуки выносят ожидаемый вердикт
|
||
- **THEN** тест корпуса печатает FAIL `KNOWN-FIXED` с идентификатором записи
|