Files
houseplan-card/docs/reviews/SPEC-REVIEW-543-r2.md
T
claude[bot] 3342910b27
Проверка (CI) / Классификация изменённых файлов (push) Successful in 21s
Проверка (CI) / Мутанты по диффу (1/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (2/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (3/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (4/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (5/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (6/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Предполётные проверки: документация, провенанс, процесс (push) Failing after 36s
Проверка (CI) / HACS: валидация репозитория (push) Failing after 22s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 58s
Проверка (CI) / Hassfest: манифест интеграции (push) Failing after 16s
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Failing after 45s
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 12m10s
Проверка (CI) / Смоки в браузере (шард 1 из 3) (push) Skipped
Проверка (CI) / Смоки в браузере (шард 2 из 3) (push) Skipped
Проверка (CI) / Смоки в браузере (шард 3 из 3) (push) Skipped
Проверка (CI) / Смоки: все шарды зелёные (push) Skipped
Проверка (CI) / Golden-кадры против принятых эталонов (push) Skipped
Проверка (CI) / Перф-смок: бюджет времени кадра (push) Skipped
docs: review document for #543
Issue: #543
User-Visible: no
2026-09-12 18:57:06 +00:00

137 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SPEC-REVIEW-543-r2
Issue: #543 · Этап: spec (PROCESS.md §2.4) · Заход: r2 · блокирующих циклов
израсходовано 1 из 4
Материал: тело issue #543, раздел `## ТЗ`, на момент ревью (метка
`S4-spec-review` после комментария автора «Правка ТЗ после SPEC-REVIEW r1»).
Предыдущий раунд — `docs/reviews/SPEC-REVIEW-543-r1.md`, вердикт жёлтый,
единственная находка Medium в скоупе, материал того раунда: тело issue с
sha256 `06cae6bc0c1c834e055a858a18d406231ff7a696f929be70277a82a675f6779a`,
дерево `bd3acd278b0c6dd3d0cc572096f8c0d2c7e3b38c`, код проверялся на
`6d2facc2e37724a6e6e1a96c5e026aa24b595a07`.
Продуктовый код между раундами не менялся: этот SHA — коммит «docs: review
document for #544» (документация, класс C), рабочая копия сейчас стоит на
`4a91d5cbe88d6868947f2d7f73c9830869478b56` — тоже только документационный
коммит («docs: review document for #543», публикация r1). Ни одного файла
класса A/B между `6d2facc2` и текущим HEAD не добавлено и не изменено;
единственное продуктовое изменение в этом диапазоне (`6502f516` fix для
#544) уже входило в дерево, которое читал r1. Технические утверждения ТЗ,
завязанные на код (К1–К9, ссылки на строки), это не затрагивает — код,
который читал r1, идентичен коду сейчас.
## Дельта раунда
По собственному комментарию автора («Правка ТЗ после SPEC-REVIEW r1»,
2026-09-12T18:52:19Z) правка ограничена тремя точками текста тела issue,
все — закрытие единственной находки r1:
1. формулировка `AC7`;
2. строка про `test/config-adoption-ownership.test.mjs` в разделе «Ожидаемые
файлы и модули»;
3. добавление отдельного пункта «отдельный поведенческий unit coordinator»
в тот же список файлов.
Остальной текст ТЗ (сценарий, что человек увидит, подтверждённая причина,
скоуп/не-скоуп, К1–К9, UX, модель данных, i18n, AC1–AC6/AC8/AC9, план
автотестов пп.1–6 кроме списка файлов, риски, откат, release-артефакты,
принятые технические предположения) не тронут — сверено построчным чтением
текущего тела issue против содержания, которое цитирует и пересказывает
`SPEC-REVIEW-543-r1.md`, расхождений не найдено. Дельта локальна (§2.10):
код не менялся, контракт поведения не менялся, новая подсистема не
затронута — объём разбора сокращается до дельты и её последствий.
## Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
| Medium (в скоупе): `AC7` и «Ожидаемые файлы и модули» называли `test/config-adoption-ownership.test.mjs` свидетелем поведенческого async-порядка, хотя это статический regex-ratchet #500, не видящий async вообще | Текст `AC7` и списка файлов теперь прямо исключают этот файл из доказательной базы #543 и явно называют единственным поведенческим свидетелем `test/config-adoption.test.mjs`; для нового coordinator-модуля назван отдельный «поведенческий unit», не смешанный с ratchet-файлом | `AC7`: «Статический ratchet `test/config-adoption-ownership.test.mjs` не является свидетелем async-порядка и в доказательную базу #543 не входит.» · «Ожидаемые файлы и модули»: «…отдельный поведенческий unit coordinator; …» и «`test/config-adoption-ownership.test.mjs` остаётся неизменным статическим ratchet #500 и не доказывает async-порядок #543.» (тело issue #543, текущая редакция) |
Проверено чтением точной итоговой формулировки, а не заявлением автора о
том, что она изменена: обе фразы выше процитированы из текущего тела issue.
Двусмысленности, которую нашёл r1 (можно было прочитать как «этот файл —
свидетель»), в новой формулировке нет: предложение утверждает обратное явно
и с указанием номера задачи.
## Унаследовано из r1
Без повторной проверки принято всё, что не затронуто дельтой — со ссылкой на
`docs/reviews/SPEC-REVIEW-543-r1.md` и материал того раунда (тело issue
sha256 `06cae6bc0c1c834e055a858a18d406231ff7a696f929be70277a82a675f6779a`,
код на `6d2facc2e37724a6e6e1a96c5e026aa24b595a07`):
- соответствие `docs/SCOPE.md` (J1/J6), продуктовая рамка сценария и «что
человек увидит до/после» — не изменились текстуально;
- построчная сверка технических утверждений с кодом: `_reloadConfigOnly`
(`src/houseplan-card.ts:4417,4466-4501`), `adoptAuthoritativeGated`
(`src/config-adoption.ts:428-460`), шесть call sites
`_adoptAuthoritative`/`adoptAuthoritativeGated`, все `_reloadConfigOnly(true)`
call sites, `docs/ARCHITECTURE.md:1375-1393` (#500), прецедент
`_liveSyncGeneration`/`_liveSyncConnection`, термин «route leave» — код не
менялся, вывод остаётся в силе;
- контракт К1–К9 — текст идентичен, содержательно не проверялся повторно;
- AC1–AC6, AC8, AC9 — формулировки не изменились, доказательства (`unit`,
`smoke`, `lifecycle matrix`, `force/reset`, `mutation`, `gates`) не
затронуты дельтой;
- план автотестов пп.1–6 (кроме уточнения в списке файлов, разобранного
выше) — не изменился;
- риски (6 пунктов), откат, release-артефакты, «Принятые технические
предположения» (5 пунктов) — не изменились;
- обоснование полного трека (нарушенные критерии `small`) — не изменилось;
- продуктовых вопросов владельцу нет и не было — согласие с r1.
## Что перепроверено заново (по дельте)
- `AC7` целиком — прочитан в текущей редакции, однозначен: единственный
поведенческий свидетель — `test/config-adoption.test.mjs`, порядок
`compare → asset readiness → continuity → adopt → reload tail → caller
hook` и раздельная обработка current/superseded asset failure сформулированы
без изменений относительно r1 (только вычеркнута ссылка на ratchet-файл).
Новых дефектов формулировки не внесено.
- Раздел «Ожидаемые файлы и модули» — новая структура списка не создаёт
противоречия с `AC7`, `AC8` (`scripts/mutation-gate.mjs` назван и там, и
там) и планом автотестов (`отдельный поведенческий unit coordinator`
соответствует плану автотестов п.2 — «добавить unit request-owner/
coordinator»). Само по себе имя нового unit-файла не зафиксировано — это
укладывается в «Принятые технические предположения», решается на
код-ревью, продуктовым вопросом не является.
- Проверено, что правка не расширила и не сузила скоуп/не-скоуп и не создала
нового технического спора автора и ревьюера, требующего отдельного цикла:
правка чисто редакционная, устраняет саму находку без побочных эффектов.
## Что не проверялось и почему
- Продуктовый код реализации (`src/config-adoption.ts`, будущий
request-owner/coordinator модуль, `demo/smoke_config_reload_race.mjs`,
мутант AC8) — не существует на этом этапе, предмет код-ревью.
- Гейты `typecheck`/`test`/`build`/`golden`/`invariants` — не прогонялись:
на этапе ТЗ продуктового кода к задаче ещё нет, гонять их не по чему;
унаследовано из r1, за раунд между r1 и r2 продуктовый код #543 не
появился.
- Частота гонки на реальном HA — не измерялась, аудит и ТЗ прямо признают
это неизмеренным; унаследовано из r1.
- Полное повторное построчное чтение кода — не выполнялось: код не менялся
между раундами (см. «Материал» выше), только вычитка дельты текста ТЗ.
## Вердикт
Зелёный. Единственная находка r1 (Medium, в скоупе) закрыта точной правкой
текста `AC7` и списка файлов, проверено по итоговой формулировке, а не по
заявлению автора. Новых находок дельта не создала. High: 0, Medium: 0.
Готово к переходу в «Готово к разработке» (`S5-ready`).
---
<!-- material-anchors: сгенерировано конвейером (#414) -->
## Материал раунда
- Ветка: `dev`, коммит `4a91d5cbe88d` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
- Дерево материала: `d88d3e161f7336c02a9cdd1bfa679804cf42041d`
```
git log --all --format='%H %T' | grep d88d3e161f73
```
- Тело issue: `18a8083126ef98f841e6dd8e670203f8c016ea805af7a9dbefcc54aacb7d7cf1`
- Вердикт конвейера: `green` · High 0