docs: review document for #805

Issue: #805
User-Visible: no
This commit is contained in:
claude[bot]
2026-10-07 04:51:34 +00:00
parent 150b5a166b
commit df69718cec
2 changed files with 189 additions and 1 deletions
+2 -1
View File
@@ -1,6 +1,6 @@
# Индекс ревью
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 338, issue: 171. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 339, issue: 171. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
| Issue | Документ | Этап · раунд | Вердикт | H | M | Находки | Файлы |
|---|---|---|---|---:|---:|---|---|
@@ -17,6 +17,7 @@
| #806 | [CODE-REVIEW-806-r1.md](CODE-REVIEW-806-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | AC1 доказан не для всех заявленных трёх фонов | `demo/golden/matrix.mjs` `demo/golden/device-battery.mjs` `demo/smoke_device_battery.mjs` `matrix.mjs` |
| #806 | [CODE-REVIEW-806-r2.md](CODE-REVIEW-806-r2.md) | code · r2 | 🟢 зелёный | 0 | 0 | — | — |
| #805 | [SPEC-REVIEW-805-r1.md](SPEC-REVIEW-805-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | Открытый продуктовый вопрос без blocked и без батч-комментария владельцу (§7.1, §2.5). …; Вопрос 2 («Пересчёт потолка lazy editor») — технический вопрос, ошибочно вынесенный вла… | `scripts/bundle-budget.mjs` |
| #805 | [SPEC-REVIEW-805-r2.md](SPEC-REVIEW-805-r2.md) | spec · r2 | 🟢 зелёный | 0 | 0 | — | — |
| #804 | [SPEC-REVIEW-804-r1.md](SPEC-REVIEW-804-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | — | — |
| #804 | [CODE-REVIEW-804-r1.md](CODE-REVIEW-804-r1.md) | code · r1 | 🟢 зелёный | 0 | 0 | — | — |
| #802 | [SPEC-REVIEW-802-r1.md](SPEC-REVIEW-802-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | — | — |
+187
View File
@@ -0,0 +1,187 @@
# SPEC-REVIEW-805-r2
Issue: #805 — «Стартовый граф View: вынести опциональные рантаймы и
редакторские стили за lazy-границы»
Этап: spec (PROCESS.md §2.4) · Трек: ask (§5) · Заход: r2 · блокирующих
циклов 1/4 (израсходован вердиктом r1, зелёный новый цикл не образует).
Материал: тело issue #805, раздел `## ТЗ` плюс вводные разделы, редакция на
момент ревью (sha256 `08c9072b…5cda5cca` локального снимка тела). Продуктовый
код по #805 на дереве не существует (`git log --all --oneline | grep
'issue/805'` — пусто; рабочая копия на `aca88acf`, `git status` чистый).
Route: fix (зафиксирован промптом конвейера, #726).
## Скоуп
Не изменился с r1: чистая оптимизация стартового графа View без изменения
видимого поведения — перенос CSS-правил, нужных только ленивому editor
runtime, из `dialogs.styles.ts` и `editorSecondaryStyles` в новый ленивый
лист, вносимый конструктором `HouseplanEditorRuntime`. Полный разбор скоупа,
AC1–AC8, рисков, отката и release-артефактов выполнен в r1
(`docs/reviews/SPEC-REVIEW-805-r1.md`) и переносится сюда без изменений —
содержимое ТЗ после r1 не менялось ни в одной технической детали (см.
«Дельта r1 → r2» ниже).
## Как проверялось
1. **Дельта r1 → r2 — точно, а не по памяти.** Через
`gh api graphql … userContentEdits` подняты все три пред-правочных снимка
тела issue и построен текстовый diff между снимком непосредственно перед
правкой 2026-10-07T04:44:33Z и текущим телом. Diff показывает **ровно**
четыре места правки, и ни одного больше:
- `## Скоуп`: «вопрос 2 владельцу» → «Принято предположительно»;
- `## Риски`, пункт про пересчёт потолка: «и вопрос владельцу» →
«ревьюер ТЗ принял пересчёт как штатный (SPEC-REVIEW-805-r1, L1)»;
- `## Принято предположительно`: добавлен абзац про пересчёт
`LAZY_EDITOR_GZIP_CEILING` со ссылкой на снятие ревьюером (L1);
- `## Вопросы владельцу` → `## Решения владельца`: пункт 2 (технический,
L1) удалён из списка, пункт 1 получил факт «Ответ владельца
2026-10-07: принять» вместо «По умолчанию: принять» и формулировки
«что меняется от ответа».
Ни один AC, порог, число, раздел риска, контракт поведения или план
автотестов не тронут. Это подтверждает и собственное заявление автора в
комментарии «AC, контракт и числа не менялись» — не на слово, а по diff.
2. **Таймлайн меток и комментариев** (`gh api … /issues/805/timeline`)
сверен с требуемым процессом §7.1 паттерном (precedent #792, цитируемый
r1): `S4-spec-review` → `S3-spec` (23:10:47, после жёлтого r1) → отдельный
комментарий-вопрос владельцу (23:59:46) → `blocked` (23:59:48) → ответ
владельца зафиксирован в комментарии (04:44:44) → `blocked` и `S3-spec`
сняты, `S4-spec-review` восстановлен (04:44:46). Полное совпадение с
прописанным в r1 фиксом M1, без пропущенных шагов.
3. **Повторная сверка фактов о коде**, те же точки, что проверял r1 на SHA
`2561d80a`, теперь — на материальном SHA `aca88acf` (дерево «ушло
вперёд» за счёт #769/#808 и релизных коммитов; дельта локальна, но
факты, на которые опирается ТЗ, перепроверены, а не унаследованы вслепую,
поскольку правки #769 именно в области бюджетов были прямо вероятны):
- `scripts/bundle-budget.mjs:51,398,664,665` — `INITIAL_VIEW_GZIP_BUDGET
= 320_000`, `INITIAL_VIEW_GZIP_CEILING = 302_803`,
`LAZY_EDITOR_GZIP_CEILING = 244_872`, `LAZY_GRAPH_CEILING_BAND =
2_000` — байт-в-байт совпадают с числами «Факт до изменений» в ТЗ и с
тем, что подтвердил r1. #769 («raise bundleBytes for the per-floor
area memo») правит другую метрику (монолитный `bundleBytes`), эти
константы не затронул.
- `src/styles/dialogs.styles.ts:394,627,827,1126` — `.radarcoordinates`,
`.vacpicker`, `.vaccalbar`, `hp-dialog .supportbody` на тех же
строках, что в r1 (файл не менялся между `2561d80a` и `aca88acf`).
- `src/houseplan-card.ts:143,12991` — `editorSecondaryStyles`
по-прежнему импортируется и стоит в `static styles = [cardStyles,
editorSecondaryStyles]` (смещение на 16 строк — косметика несвязанных
правок, сама конструкция не изменилась).
Расхождений с ТЗ не найдено; базовые цифры, от которых считаются AC1 и
AC7 (≥4000 Б, ≤+6000 Б), остаются в силе на материальном SHA.
4. Прочитаны `docs/SCOPE.md` → `AGENTS.md` → `docs/process/REVIEWER.md` →
PROCESS.md §2.4, §2.5, §2.10, §7.1, §4, §8, §12 — в части, применимой к
повторному раунду по локальной дельте.
Гейты (`tsc`, `npm test`, `npm run build`, `bundle:budget`, golden, smoke,
invariants, backend pytest) **не прогонялись**: продуктового кода по #805
нет ни на одном дереве, этап spec их не требует (PROCESS.md §2.4, прецедент
r1), а зависимости/Chromium на этапе spec не ставятся (#696). Точечная
сверка констант `bundle-budget.mjs` выше — чтение, не исполнение гейта.
## Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
| **M1 (Medium, в скоупе).** Продуктовый вопрос 1 «Обмен байтами» ушёл в `S4-spec-review` без `blocked` и без отдельного батч-комментария владельцу (§7.1/§2.5), хотя сама ТЗ называла его критическим для выбора кандидата. | Полный паттерн #792 повторён: отдельный комментарий-вопрос владельцу → `blocked` поверх `S3-spec` → фактический ответ владельца зафиксирован в комментарии и перенесён в тело issue → `blocked` снят. | Комментарии issue #805, 2026-10-06T23:59:46Z («Вопрос владельцу… ставлю blocked») и 2026-10-07T04:44:44Z («Ответ владельца… принять. Снимаю blocked»); таймлайн меток `blocked` labeled 23:59:48 / unlabeled 04:44:46; тело issue, раздел «Решения владельца», пункт 1: «Ответ владельца 2026-10-07: принять.» |
| **L1 (Low, снято ревьюером).** Вопрос 2 (пересчёт `LAZY_EDITOR_GZIP_CEILING`) — технический, ошибочно вынесенный владельцу; снят ревьюером с решением «разрешить» без действий автора, кроме переноса записи в «Принято предположительно» при следующей правке. | Запись перенесена из «Вопросы владельцу» в «Принято предположительно» со ссылкой на снятие ревьюером; перекрёстные упоминания в «Скоупе» и «Рисках» приведены в соответствие (больше не ссылаются на несуществующий «вопрос владельцу»). | Тело issue, раздел «Принято предположительно»: «Вопрос снят ревьюером как технический (SPEC-REVIEW-805-r1, L1)»; раздел «Риски», пункт «Пересчёт потолка редактора»: та же ссылка; раздел «Скоуп», последний пункт списка «Входит»: ссылка заменена на «Принято предположительно». |
## Унаследовано из r1
Без повторной вычитки целиком, с перепроверкой только тех фактов, где
дерево могло разойтись (см. «Как проверялось», п. 3), принято из
`docs/reviews/SPEC-REVIEW-805-r1.md` (материал r1 — SHA `2561d80a`, дерево
`d27c593b`):
- Обязательные разделы §7.1 присутствуют по существу (сценарий, видимый
результат, проблема, скоуп/не-скоуп, контракт поведения, UX, модель
данных/i18n/touch, план автотестов, риски, откат, release-артефакты).
- Каждый AC1–AC8 однозначен, с численным порогом или перечислимым
множеством, способом доказательства и красным вариантом; защитные AC не
имеют пустого столбца «чем краснеет».
- Раздел «Принято предположительно» корректно отделяет инженерные
развилки от продуктовых решений.
- Трек `ask` обоснован (асинхронный первый кадр, перф-риск на нескольких
поверхностях, решения владельца внутри).
- Бюджеты согласованы с #699 (`ratchets tighten` — отдельный штатный шаг,
не эта задача).
- Touch закрыт явной записью со ссылкой на AC2/AC4.
- Утверждений о коде, не подтверждённых деревом и не помеченных как
предположение, не найдено.
## Находки
### High
Нет.
### Medium (в скоупе)
Нет.
### Low
Нет.
## Что проверено и корректно
- Делта r1 → r2 ограничена ровно тем, что заявлено в закрывающем
комментарии автора: две организационные правки (M1, L1), ноль правок
по существу ТЗ. Проверено построчным diff, а не на слово.
- Процессный паттерн закрытия M1 (отдельный комментарий, `blocked`,
зафиксированный ответ владельца, снятие `blocked`) совпадает с
прецедентом #792, который сам r1 указал как образец.
- DoR §2.5 «открытых продуктовых вопросов нет» теперь выполнен: в теле
issue не осталось ни одного «вопроса владельцу» — ни продуктового, ни
технического (точечный grep по «вопрос» в теле issue даёт одно
вхождение, и это ссылка на уже снятую находку L1, а не открытый вопрос).
- Факты о коде, на которые опирается ТЗ (бюджетные константы,
`dialogs.styles.ts`, `static styles` карточки), перепроверены на текущем
материальном SHA `aca88acf` и совпадают с тем, что подтвердил r1 на
`2561d80a` — дрейфа от коммитов, прошедших между раундами (#769 и
релизные docs-коммиты), не обнаружено.
- Весь технический разбор r1 (AC, риски, план автотестов, release-
артефакты) остаётся в силе: текст, который это описывает, не менялся.
## Чего не проверял
- Исполнение гейтов — не требуется на этапе spec, продуктового кода по
#805 нет ни на одном дереве (см. «Как проверялось»).
- Полный построчный разбор всех 378 правил `dialogs.styles.ts» по правилу
отбора — вне объёма spec-ревью что в r1, что здесь; это предмет
статического unit-теста AC6 на этапе реализации.
- Подлинность канала, по которому зафиксирован «ответ владельца в чате
сессии» (комментарий 2026-10-07T04:44:44Z) — технически непроверяема
извне диалога; это тот же способ фиксации, которым в этом репозитории
уже закрывались решения владельца по другим задачам (#792 и ранее), и
r1 этот канал не оспаривал. Если у владельца есть возражение по
зафиксированному ответу — это основание для нового цикла, а не находка
этого ревью.
- Содержимое любого локального чернового кода по #805 — по §2.4/§11.8
ревью ТЗ черновик не читает и доводом не считает.
## Вердикт
Зелёный. Делта между r1 и r2 ограничена ровно процессным фиксом находки M1
(батч-комментарий владельцу, `blocked`, зафиксированный ответ, снятие
`blocked`) и косметическим переносом записи L1, который сам r1 уже разрешил
без действий автора. Построчный diff тела issue подтверждает, что AC,
контракт поведения, числа и риски не менялись. DoR §2.5 выполнен: открытых
продуктовых вопросов не осталось. Точечная перепроверка фактов о коде на
текущем материальном SHA (`aca88acf`, ушедшем вперёд `2561d80a` на #769 и
релизные коммиты) не нашла расхождений с текстом ТЗ. High: 0, Medium: 0.
ТЗ готово к `S5-ready`.
---
<!-- material-anchors: сгенерировано конвейером (#414) -->
## Материал раунда
- Ветка: `dev`, коммит `aca88acf4df1` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
- Дерево материала: `f6090c792bceed006c358961564c1cc71d4aa809`
```
git log --all --format='%H %T' | grep f6090c792bce
```
- Тело issue: `c6e535f9915a93f73e07a06a393dec6a4cced77f26c528f026cb9d6a7b975e80`
- Вердикт конвейера: `green` · High 0 · маршрут `fix`
<!-- hp:usage input_tokens=3858 output_tokens=23125 cache_creation_input_tokens=120703 cache_read_input_tokens=1500232 num_turns=25 -->