mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-05 22:29:05 +00:00
docs(review): approved independent specification review for #789
Issue: #789 User-Visible: no
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
# Индекс ревью
|
||||
|
||||
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 290, issue: 144. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
|
||||
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 291, issue: 145. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). 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 | — | — |
|
||||
| #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 | — | — |
|
||||
| #788 | [CODE-REVIEW-788-r1.md](CODE-REVIEW-788-r1.md) | code · r1 | 🟢 зелёный | 0 | 0 | — | — |
|
||||
| #781 | [CODE-REVIEW-781-r1.md](CODE-REVIEW-781-r1.md) | code · r1 | 🟢 зелёный | 0 | 0 | утверждение на уровне решения по-прежнему не различает границу | `test/process-pending-round.test.mjs` |
|
||||
| #780 | [SPEC-REVIEW-780-r1.md](SPEC-REVIEW-780-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 5 | · Medium — в редакторе устройств нет «существующего контекстного лотка» и модели выделения; · Medium — поведение бэкенда на висящую ссылку не определено и ломает сохранение «старо…; · Medium — запрет поднимать бюджеты исполним только ленивой загрузкой, а ТЗ её не требует; · Medium — смещение от грани не определено для стен нулевой толщины и смешанных лент; · Medium — AC17 не проверяем: нет порогов; · Low — D назван «диаметром устройства пространства», а такой величины нет | `validation.py` `scripts/bundle-budget.mjs` `types.ts` `houseplan-card.ts` |
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
# SPEC-REVIEW-789-r1 — performance-долг LED 50×50
|
||||
|
||||
Вердикт: зелёный · заход r1 · блокирующих циклов 0/4 · High: 0 · Medium: 0 · Low: 0 · маршрут: fix · Документ: docs/reviews/SPEC-REVIEW-789-r1.md
|
||||
|
||||
## Полномочия и независимость
|
||||
|
||||
Формальное ревью ТЗ выполнено отдельным локальным агентом, **не автором ТЗ и не автором реализации**. Владелец явно разрешил заменить недоступную модель независимым локальным reviewer; разрешение из ведущего чата передано координатором 2026-10-04 (+03:00). Это исключение только для способа ревью, не разрешение считать реализацию/performance завершёнными без AC.
|
||||
|
||||
[Автоматический S4 run 37152909229](https://github.com/Matysh/houseplan-card/actions/runs/37152909229) завершился failure без `structured_output`; ошибка лично сверена в failed log. Содержательного модельного вердикта не было. Предварительные локальные оценки и исправления M1/M2 не публиковались как формальные блокирующие циклы; настоящее ревью — первый формальный r1. Предварительный файл `C:/Temp/hp789-spec-review.md` не давал права менять этап до нового разрешения владельца.
|
||||
|
||||
Рецензент не менял issue/метки/репозиторий и не публиковал документ. Создан только разрешённый внешний файл; `docs/reviews/...` — назначение для координатора.
|
||||
|
||||
## Материал раунда
|
||||
|
||||
- Issue: https://github.com/Matysh/houseplan-card/issues/789.
|
||||
- Актуальное тело перечитано полностью; SHA-256 точной UTF-8 JSON-строки body без дополнительного перевода строки: **`79b99d208f55211eb33595e4c3ba500e156a91ccd85f4029237350e3056aaa62`**, 18680 bytes.
|
||||
- Хеш побайтно совпадает с предварительно проверенным ТЗ. Текст не устарел; содержательной дельты от предварительной зелёной оценки нет.
|
||||
- Текущие метки: `S4-spec-review`, `track:ask`, `ci:full`, `P1`, `bug`; issue открыт.
|
||||
- Базовый repo/process material: `24e48935c3b2d7887a41c544d062a6ea78ed13d6`, tree `9370770a85da3559786503b44e6ce491ddf47b78`; remote dev при проверке всё ещё на этом SHA.
|
||||
- Задача #790 прямо исключена из scope; её зелёный кодовый вердикт и короткий perf smoke не являются доказательством AC3 этой задачи.
|
||||
|
||||
## Объём и унаследованные выводы
|
||||
|
||||
Проверяется **только готовность ТЗ**: сценарий, scope, проверяемость, непротиворечивость AC, безопасность альтернатив и регрессионный план. Черновик реализации, новые тесты, диагностические улучшения и последующий performance-результат не являются материалом этого вердикта.
|
||||
|
||||
Из независимой предварительной оценки, заново сверенной с неизменным телом, унаследованы: соответствие SCOPE (плавная работа большого плана без новых настроек); допустимость owner-local batching; необходимость ordinary Glow regressions при изменении shared lifecycle; content-based invalidation, ограниченные кэши, lazy-loading; отсутствие миграции/UI/i18n/service изменений и scope creep.
|
||||
|
||||
Точные цифры исходного красного измерения записаны в ТЗ как диагностика базы. Настоящее ревью не перепроверяло их benchmark-прогоном и не объявляет погашенным performance-долг.
|
||||
|
||||
## Полнота и проверяемость AC
|
||||
|
||||
| AC | Оценка ТЗ и обязательное будущее доказательство |
|
||||
| --- | --- |
|
||||
| AC1 — нет линейного fan-out | Структурный результат измерим: 50 источников → ровно 1 pending entering-frame, не более 1 update, все steady. Управляемый scheduler и названная отрицательная мутация обнаруживают прежний fan-out. Явно требуются 2 owner, ordinary/LED, normal/reduced-motion, off-before-frame, rapid off/on, prune, space switch, disconnect и stale callback |
|
||||
| AC2 — сохранение изображения/переходов | Существующие независимые unit/raster witnesses остаются без ослабления. При raster-изменении требуется executable before/after с нулём отличающихся пикселей, включая полосу стены и конечный цветной композит; не только algebra/белая маска. Есть browser fade/rapid-toggle/main/static/ordinary и визуальный просмотр реальных проблемных мест без публикации private export |
|
||||
| AC3 — долг действительно погашен | Явные общие бюджеты 1500/150 ms и отдельная task-acceptance 10% margin: p95 50×50 ≤1350/135 ms. Неизменные 10×5/50×50/no-LED, 7 samples/1 warmup/20 cycles. Один выбранный exact-SHA Linux run с comparison_ref базы, все образцы сохраняются; валидный провал не заменяется повтором |
|
||||
| AC4 — не потеряны соседние свойства | Camera/HA/color: ноль geometry recomputes/роста кэша, стабильные DOM identities; geometry/openings инвалидируют. Disconnect очищает callback/scene; no-LED не грузит LED-field chunk. Shared lifecycle требует ordinary Glow и полного существующего performance без маскировки чужого долга |
|
||||
|
||||
## Закрытие предварительных уточнений
|
||||
|
||||
| Замечание предварительной оценки | Чем закрыто в актуальном body |
|
||||
| --- | --- |
|
||||
| M1: «измеримый запас» без точного pass/fail и протокола | AC3 задаёт 1350/135 ms при неизменных 1500/150, один full Linux run на точном выбранном SHA, фиксированную comparison_ref, сохранение всех raw samples. Повтор разрешён лишь при доказанном инфраструктурном сбое до валидного замера; валидный красный результат остаётся в отчёте |
|
||||
| M2: прежний distance oracle не покрывал полосу стены/цветное compositing | AC2 требует zero-pixel before/after по 7 geometry × 3 radii × 2 directions × scales 1/2/4, все пиксели стены; дополнительно closed rectangle/door, цвет #75c52a alpha 0.43 и перекрытие двух полупрозрачных цветов на сером. Итоговый композит сравнивается независимо от distance/falloff oracle |
|
||||
|
||||
Обе неоднозначности закрыты. Новых обязательных правок не обнаружено.
|
||||
|
||||
## Достижимость без обещания результата
|
||||
|
||||
Перенос visibility clip — **гипотеза, не обязательная реализация**. Zero-pixel witness является фильтром допустимости: неэквивалентный кандидат нужно отклонить, а не увеличивать AA-допуск. Сообщённый внешний эксперимент с 252 отличающимися сравнениями по этому ТЗ не проходит; он в данном формальном ревью не повторялся и не используется как доказательство будущего кода.
|
||||
|
||||
Такое отклонение не делает ТЗ невыполнимым по определению: scheduling/DOM-equivalent batching и безопасный render-pass reuse остаются допустимыми направлениями. Но ни они, ни сам текст ТЗ **не доказывают**, что camera p95 достигнет 135 ms. Если запас не достигнут, AC3 требует продолжить анализ/реализацию, а не закрыть issue.
|
||||
|
||||
Если raster structure в итоговом диффе не меняется, это нужно явно записать; неисполненный эксперимент нельзя объявлять зелёным. Существующие unit/raster/lifecycle/smoke и полный performance при этом всё равно обязательны. Сохранение точного raster у #789 не подменяется ограниченным golden-допуском #790: это разные AC.
|
||||
|
||||
Owner-local batching не должен соединять карточки, реанимировать удалённые источники или обновлять disconnected owner; эти lifecycle риски названы и покрыты исполняемыми требованиями. Reuse внутри одного render pass не заменяет scene fingerprint идентичностью config. Scope не допускает уменьшения fixture, числа событий, точности, света на mobile или повышения budget.
|
||||
|
||||
## Что проверено и чего не проверял
|
||||
|
||||
- Проверено: актуальные body/hash/labels, remote base, отсутствие дельты ТЗ; сценарий и обязательные разделы, достижимая формулировка критериев без обещания performance, завершение M1/M2, обязательный план отрицательных и соседних witnesses, отсутствие новых продуктовых вопросов.
|
||||
- Проверено: автоматический S4 run не дал structured verdict; owner exception явно отделён от отказа модели.
|
||||
- **Не проверено:** реализация/черновик, корректность нового scheduler, завершение camera optimization, новые unit/smoke/golden, итоговый Linux performance или фактический запас 1350/135. Никаких benchmark/heavy test прогонов в этом ревью не было.
|
||||
- Нет GitHub/label/source/branch mutations. Частичная диагностика реализации не выдана за готовый результат.
|
||||
|
||||
## Итог
|
||||
|
||||
High 0 / Medium 0 / Low 0. **ТЗ готово к разработке: зелёный независимый spec verdict на body `79b99d…aaa62`.** Координатор может опубликовать его и выполнить разрешённый владельцем переход к готовности/разработке. Это **не code approval и не разрешение merge #789 по одному spec verdict**: для завершения нужны реализация всех AC, обязательные exact-SHA gates и отдельное независимое код-ревью.
|
||||
|
||||
---
|
||||
|
||||
## Якоря для публикации
|
||||
|
||||
- Material head: `24e48935c3b2d7887a41c544d062a6ea78ed13d6`.
|
||||
- Material tree: `9370770a85da3559786503b44e6ce491ddf47b78`.
|
||||
- Issue body: `79b99d208f55211eb33595e4c3ba500e156a91ccd85f4029237350e3056aaa62`.
|
||||
- Verdict: `green`; route: `fix`; High: 0; Medium: 0; Low: 0.
|
||||
- Exception: owner-authorized independent local spec reviewer replacing failed model stage; no implementation/performance acceptance inferred.
|
||||
Reference in New Issue
Block a user