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

12 KiB
Raw Blame History

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).


Материал раунда

  • Ветка: dev, коммит 4a91d5cbe88d — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
  • Дерево материала: d88d3e161f7336c02a9cdd1bfa679804cf42041d
    git log --all --format='%H %T' | grep d88d3e161f73
    
  • Тело issue: 18a8083126ef98f841e6dd8e670203f8c016ea805af7a9dbefcc54aacb7d7cf1
  • Вердикт конвейера: green · High 0