mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-03 21:28:59 +00:00
Проверка (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
Issue: #543 User-Visible: no
137 lines
12 KiB
Markdown
137 lines
12 KiB
Markdown
# 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
|