mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-07 23:19:14 +00:00
@@ -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 | — | — |
|
||||
|
||||
@@ -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 -->
|
||||
Reference in New Issue
Block a user