docs(reviews): record owner-authorized self-review for #793

Issue: #793
User-Visible: no
This commit is contained in:
Matysh
2026-10-05 09:39:44 +03:00
parent 841bad4e79
commit 865312e0b0
2 changed files with 86 additions and 1 deletions
+84
View File
@@ -0,0 +1,84 @@
# Code review #793 — guard label pipe stability
Вердикт: зелёный · заход r1 · блокирующих циклов 0/2 · High: 0 · Medium: 0 · Low: 0.
## Основание и материал
Саморевью и ручное слияние разрешены владельцем 2026-10-05 ответом «да»
на вопрос о таком исключении именно для #793. Это не результат модели CI:
[автоматический раунд](https://github.com/Matysh/houseplan-card/actions/runs/37273206239)
остановился без structured_output и не вынес вердикта.
- Issue: https://github.com/Matysh/houseplan-card/issues/793
- Материал: `841bad4e79d2d6beecf87be61ffdad4008e58fff`.
- База: `9ebc430983ec1d17d17a5f206aed653f6d818afa`.
- Скоуп: `.github/workflows/_process.yml`, `test/review-doc-guard.test.mjs`.
- Трек: show, инфраструктура; продуктовый код не затронут.
## Корректность и находки
Находок High/Medium/Low нет. Старый `grep -q` мог закрыть вход после первого
совпадения; SIGPIPE у пишущего `printf` делает pipeline неуспешным при pipefail.
Guard трактует это как снятие S7 и успешно заканчивает шаг с пустым stage.
Новый `grep -Fx ... > /dev/null` дочитывает поток и сопоставляет полную метку
буквально. Ошибка чтения/отсутствие метки не становятся разрешением запуска.
Тест исполняет извлечённый реальный шаг workflow с fake gh, а не копию логики
guard. Большой снимок вынуждает проявиться прежней ошибке. Исходные восемь
проверок выбора трека сохранены; улучшена только диагностика падения.
Отрицательные случаи требуют отказа при отсутствии S7, похожей метке,
blocked и review-4. Нет retry, отключения pipefail или ослабления oracle.
Ограничение вывода: точное планирование процессов, вызвавшее первоначальный
сбой на двух коротких метках, повторно не получено. Подтверждены механизм
уязвимости и тот же observable failure на расширенном снимке; это не обещание
отсутствия всех возможных причин нестабильности suite.
## Доказательства
| AC | Чем доказан | Чем краснеет |
|---|---|---|
| Существующая S7 сохраняет stage=code, лимит и полный снимок меток | Новый #793 regression на настоящем bash с pipefail | До правки workflow выполнен FAIL: stage пуст при status 0; после правки PASS |
| Отсутствие метки и блокировки не допускают ревью | Четыре отрицательных случая в новом тесте | Разрешённый stage или неверная причина не проходят точные assertions |
| Приоритет треков и fail-closed compare не изменены | Исходные восемь вариантов r1 #695 | Прежние точные stage/limit/labels, включая ask, несколько треков и недоказанный compare |
| Проверка | Результат |
|---|---|
| `node --test --test-name-pattern=#793 test/review-doc-guard.test.mjs` до исправления workflow | FAIL по ожидаемому симптому; `C:/Temp/hp793-red.log` |
| `node --test test/review-doc-guard.test.mjs` после исправления | 71/71 PASS, без пропусков; `C:/Temp/hp793-guard-green.log` |
| `npm run gate:small`, WSL Ubuntu/ext4, Node 22.23.2, SHA материала | Все девять проверок PASS, 62 с; `C:/Temp/hp793-gate.log` |
| [Validate 37272906621](https://github.com/Matysh/houseplan-card/actions/runs/37272906621) | success на точном SHA материала: typecheck, build, unit, бандл и предполётные проверки |
| `node scripts/process-gate.mjs --range origin/dev..HEAD --issues --report` | PASS; ожидаемое сообщение об инфраструктурном диапазоне без класса A |
| `git diff --check` | PASS |
Результаты исполнены при реализации и перепроверены по логам и SHA при
саморевью; заново весь неизменный набор не запускался. Другой агент также
прочитал окончательный дифф без находок и исполнил два новых теста: 2/2 PASS.
## Риски и непроверенное
Async/host: исправлено раннее закрытие pipe, свидетель работает в Linux/WSL.
Данные/права: проверены блокировки, разрешения API не расширяются.
Геометрия, визуал продукта, touch и runtime performance не меняются.
Пользовательских величин, требующих единого источника, в диффе нет.
Golden, performance, полный browser suite, HA-harness и мутанты не запускались:
эти поверхности не меняются; smoke-select не выбрал frontend-смоки. Проверки
S4 отдельно не добавлены: общий has() разобран чтением, не отдельным запуском S4.
Другие shell-обвязки из #766 остаются вне скоупа. Main-обёртки не меняются,
зеркало не нужно. Changelog не нужен: User-Visible: no.
Рекомендация: слить проверенный материал в dev по разрешённому исключению,
затем S8. Issue не закрывать до беты.
---
<!-- material-anchors: сгенерировано конвейером (#414) -->
## Материал раунда
- Ветка: `issue/793-guard-harness-stability`, коммит `841bad4e79d2` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
- Дерево материала: `5d94375818d1a2ef164066224efed9f77c4374ce`
```
git log --all --format='%H %T' | grep 5d94375818d1
```
+2 -1
View File
@@ -1,11 +1,12 @@
# Индекс ревью
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 294, issue: 146. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 295, issue: 147. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
| Issue | Документ | Этап · раунд | Вердикт | H | M | Находки | Файлы |
|---|---|---|---|---:|---:|---|---|
| бета v1.79.0-beta.2 | [SHIP-REVIEW-v1.79.0-beta.2.md](SHIP-REVIEW-v1.79.0-beta.2.md) | пакетное ревью ship · — | ⚪ — | 0 | 0 | — | — |
| бета v1.79.0-beta.1 | [SHIP-REVIEW-v1.79.0-beta.1.md](SHIP-REVIEW-v1.79.0-beta.1.md) | пакетное ревью ship · — | ⚪ — | 0 | 0 | — | — |
| #793 | [CODE-REVIEW-793-r1.md](CODE-REVIEW-793-r1.md) | code · r1 | 🟢 зелёный | 0 | 0 | — | — |
| #791 | [CODE-REVIEW-791-r1.md](CODE-REVIEW-791-r1.md) | code · r1 | 🟢 зелёный | 0 | 0 | — | — |
| #790 | [CODE-REVIEW-790-r1.md](CODE-REVIEW-790-r1.md) | code · r1 | 🟢 зелёный | 0 | 0 | — | — |
| #789 | [SPEC-REVIEW-789-r1.md](SPEC-REVIEW-789-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | — | — |