r2 H1: INDEX.md — снимок каталога, и ребейз ветки на dev, получивший чужие
документы ревью, устаревал его молча. Теперь `--commit-if-stale` пересобирает
и коммитит индекс коммитом конвейера после приведения к dev (process.yml) и
после ребейза кандидата (merge-candidate.mjs); тест «индекс свеж» сравнивает
закоммиченный файл с пересборкой и красит Validate при расхождении.
r2 M1: находка без заголовка — первый абзац секции, склеенный из перенесённых
строк, без маркера буллета и кода `**M1.**`; «не найдено», служебные скобки
«(унаследовано…)» — не находка. Нумерованные пункты тоже забирают перенесённые
строки. Мутант reviews-index-paragraph-tail. PROCESS.md §2.10 дополнен.
Issue: #635
User-Visible: no
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 992, issue: 345. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 997, issue: 346. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
| Issue | Документ | Этап · раунд | Вердикт | H | M | Находки | Файлы |
|---|---|---|---|---:|---:|---|---|
| #639 | [CODE-REVIEW-639-r1.md](CODE-REVIEW-639-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | Новая запись smoke-links.mjs для smoke_space_settings_form.mjs | `smoke-links.mjs``smoke_space_settings_form.mjs``scripts/smoke-links.mjs``demo/smoke_space_settings_form.mjs``src/editors/space-form.ts``form-kit.ts` |
| #639 | [CODE-REVIEW-639-r1.md](CODE-REVIEW-639-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | Новая запись smoke-links.mjs для smoke_space_settings_form.mjs описывает проверку, кото… | `smoke-links.mjs``smoke_space_settings_form.mjs``scripts/smoke-links.mjs``demo/smoke_space_settings_form.mjs``src/editors/space-form.ts``form-kit.ts` |
| #625 | [CODE-REVIEW-625-r1.md](CODE-REVIEW-625-r1.md) | code · r1 | 🟡 жёлтый | 0 | 0 | Три из четырёх точек вызова validate_active_marker_ids не имеют ни одного теста, exerci…; AC5 текстуально обещает «отдельные тесты сохраняют поведение при отсутствующем length» …; store.py:async_save_config_state — controller.async_flush() и последующий controller.re… | `custom_components/houseplan/websocket_api.py``test_validation.py` |
| #613 | [SPEC-REVIEW-613-r1.md](SPEC-REVIEW-613-r1.md) | spec · r1 | 🟡 жёлтый | 1 | 1 | High. Принятое предположение о scroll-инвалидации не работает в основном заявленном сце…; Medium (в скоупе), сопутствует H1. AC1/AC2 не требуют, чтобы smoke-контейнер пересекал … | `demo/serve.mjs` |
@@ -31,7 +36,7 @@
| #607 | [SPEC-REVIEW-607-r1.md](SPEC-REVIEW-607-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | предварительный блок ## AC в начале тела issue называет несуществующую кнопку | — |
| #607 | [CODE-REVIEW-607-r1.md](CODE-REVIEW-607-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | новые guard'ы AC4 проверяются только смоком, но не зарегистрированы в scripts/mutation-… | `scripts/mutation-registry.mjs``demo/smoke_dialog_modal_recovery.mjs``scripts/mutation-gate.mjs` |
| #598 | [CODE-REVIEW-598-r1.md](CODE-REVIEW-598-r1.md) | code · r1 | 🔴 красный | 1 | 3 | AC8 (эталоны) не выполнен: golden:verify красный на этом SHA; AC2/AC3 нарушены: изменён один из «неприкосновенных» .srcrow-смоков; Сегментированный переключатель обещан в семи местах ТЗ, реализован в одном; AC5 доказан мутантом только наполовину; AC1 не имеет обещанного автотеста для диалога «Пространство» (закрыто чтением) | `src/editors/general-settings-dialog.ts``src/editors/space-settings-dialog.ts``src/editors/marker-dialog.ts``demo/smoke_tap_run.mjs``smoke_general_settings.mjs``smoke_tap_run.mjs``demo/smoke_marker_dialog_cards.mjs``space-settings-dialog.ts` |
| #597 | [SPEC-REVIEW-597-r1.md](SPEC-REVIEW-597-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | AC2 заявляет проверку «ни одно из пяти правил не лежит в листе панели литералом», но; К3/AC3 заявляют байт-в-байт неизменность выхода formKitCss(CARD_DIALOG_FORM_KIT), но | `src/summary-panel-editor-style.ts``test/form-kit.test.mjs``test/styles-split.test.mjs``styles-split.test.mjs` |
| #597 | [SPEC-REVIEW-597-r1.md](SPEC-REVIEW-597-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | AC2 заявляет проверку «ни одно из пяти правил не лежит в листе панели литералом», но на…; К3/AC3 заявляют байт-в-байт неизменность выхода formKitCss(CARD_DIALOG_FORM_KIT), но на… | `src/summary-panel-editor-style.ts``test/form-kit.test.mjs``test/styles-split.test.mjs``styles-split.test.mjs` |
| #594 | [SPEC-REVIEW-594-r2.md](SPEC-REVIEW-594-r2.md) | spec · r2 | 🟡 жёлтый | 0 | 1 | Раздел «i18n» ТЗ не называет ключи для текста заголовков четырёх новых карточек-групп | — |
| #594 | [SPEC-REVIEW-594-r2.md](SPEC-REVIEW-594-r2.md) | spec · r2 | 🟡 жёлтый | 0 | 1 | Раздел «i18n» ТЗ не называет ключи для текста заголовков четырёх новых карточек-групп (… | — |
| #593 | [SPEC-REVIEW-593-r1.md](SPEC-REVIEW-593-r1.md) | spec · r1 | 🔴 красный | 1 | 0 | Оба продуктовых решения (Р1 «кактус → plant», Р2 «при отказе чанка не рисуется ничего»)…; М1. AC9 и §7 заявляют защиту трёх бюджетов через npm run bundle:budget, но код гейта фа… | `PROCESS.md``docs/FURNITURE.md``scripts/bundle-manifest.mjs``furniture-plan-art.generated.ts``furniture-menu-art.generated.ts``scripts/bundle-budget.mjs` |
| #593 | [SPEC-REVIEW-593-r2.md](SPEC-REVIEW-593-r2.md) | spec · r2 | 🔴 красный | 1 | 0 | (new). Раздел §3 Q3 и AC10 заявляют, что владелец «публично подтвердил... авторство и M… | `test/furniture-assets.test.mjs``assets/furniture/houseplan-0.3.0/README.md``pack.json``LICENSE.md``README.md``assets/furniture/houseplan-0.3.0/pack.json``PROCESS.md` |
| #593 | [CODE-REVIEW-593-r1.md](CODE-REVIEW-593-r1.md) | code · r1 | 🟡 жёлтый | 0 | 2 | docs/ARCHITECTURE.md не обновлён, хотя ТЗ явно называет это условием; сцена tray-narrow-palette-en меняется, но не объявлена в списке golden-приёмки | `docs/ARCHITECTURE.md``docs/FURNITURE.md``docs/images/screenshots.json``demo/golden/matrix.mjs``scripts/golden-acceptance.mjs``artifacts/golden/golden-report.json` |
| #592 | [CODE-REVIEW-592-r1.md](CODE-REVIEW-592-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | «перенесённая» строка в гейте no-new-any матчится по всему диффу, а не по паре файлов р…; Нет — все второстепенные наблюдения либо покрыты объяснением автора (device-icon-state-… | `scripts/no-new-any.mjs``brand-new-feature.ts``room-settings-dialog.ts``space-settings-dialog.ts``test/no-new-any.test.mjs``test/houseplan-source.mjs` |
| #588 | [SPEC-REVIEW-588-r1.md](SPEC-REVIEW-588-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 0 | М1. Три ветки пылесоса, явно включённые в скоуп, не имеют ни одного AC/теста/мутанта; М2. docs/USER-GUIDE.ru.md и docs/FILTERING.md описывают «подсветку убираемой комнаты» п…; Не найдено значимых Low-находок сверх М1/М2. Формулировка «чем краснеет» AC6 («правка л… | `src/houseplan-card.ts``houseplan-card.ts``test/device-presentation-policy.test.mjs``smoke_static_icon.mjs``device-value-badge.ts``device-pulse.ts``demo/smoke_static_icon.mjs``docs/USER-GUIDE.ru.md` |
| #588 | [SPEC-REVIEW-588-r1.md](SPEC-REVIEW-588-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 0 | М1. Три ветки пылесоса, явно включённые в скоуп, не имеют ни одного AC/теста/мутанта; М2. docs/USER-GUIDE.ru.md и docs/FILTERING.md описывают «подсветку убираемой комнаты» п… | `src/houseplan-card.ts``houseplan-card.ts``test/device-presentation-policy.test.mjs``smoke_static_icon.mjs``device-value-badge.ts``device-pulse.ts``demo/smoke_static_icon.mjs``docs/USER-GUIDE.ru.md` |
| #588 | [SPEC-REVIEW-588-r2.md](SPEC-REVIEW-588-r2.md) | spec · r2 | 🟡 жёлтый | 0 | 0 | Третий факт AC6 (отсутствие .vacwarn) не доказывается способом, который сам же AC6 назы…; Новых Low-находок в дельте не найдено. Low из r1 (нечёткость «чем краснеет» AC7/бывший … | `demo/smoke_static_icon.mjs``src/vacuum-routes.ts``demo/smoke_vacuum_multifloor.mjs``smoke_vacuum_multifloor.mjs` |
| #584 | [SPEC-REVIEW-584-r1.md](SPEC-REVIEW-584-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | влияние на touch не названо; 1. Раздел «UX» и «скоуп/не-скоуп» не оформлены отдельными заголовками | `docs/TOUCH-SUPPORT.md` |
| #584 | [SPEC-REVIEW-584-r1.md](SPEC-REVIEW-584-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | влияние на touch не названо; 1. Раздел «UX» и «скоуп/не-скоуп» не оформлены отдельными заголовками. Содержание по фа… | `docs/TOUCH-SUPPORT.md` |
| #584 | [CODE-REVIEW-584-r1.md](CODE-REVIEW-584-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | рост ленивого чанка furniture-plan-art.generated не назван числом, как того требует соб… | `scripts/bundle-budget.mjs` |
| #583 | [CODE-REVIEW-583-r1.md](CODE-REVIEW-583-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | Золотой (golden) семантический контракт для iso-дверей не обновлён под новое | `demo/golden/run.mjs``demo/golden/matrix.mjs``src/iso-openings.ts``test/iso-openings.test.mjs``test/isometric-contract.test.mjs``demo/smoke_isometric_contract.mjs``matrix.mjs` |
| #583 | [CODE-REVIEW-583-r1.md](CODE-REVIEW-583-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | Золотой (golden) семантический контракт для iso-дверей не обновлён под новое поведение … | `demo/golden/run.mjs``demo/golden/matrix.mjs``src/iso-openings.ts``test/iso-openings.test.mjs``test/isometric-contract.test.mjs``demo/smoke_isometric_contract.mjs``matrix.mjs` |
| #580 | [SPEC-REVIEW-580-r1.md](SPEC-REVIEW-580-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | ТЗ не отвечает на несколько обязательных пунктов §7.1 / чек-листа DoR; Контракт п.4 использует немодальную формулировку («может оставаться | `docs/SCOPE.md``PROCESS.md``docs/TOUCH-SUPPORT.md``docs/SUN.md` |
| #580 | [SPEC-REVIEW-580-r1.md](SPEC-REVIEW-580-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | ТЗ не отвечает на несколько обязательных пунктов §7.1 / чек-листа DoR §2.5, оставляя их…; Контракт п.4 использует немодальную формулировку («может оставаться видимым»), которую … | `docs/SCOPE.md``PROCESS.md``docs/TOUCH-SUPPORT.md``docs/SUN.md` |
| #579 | [CODE-REVIEW-579-r1.md](CODE-REVIEW-579-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | AC4 (матрица day cycle/Glow/room fills/hatching/фон) не имеет тестового доказательства; AC2 не имеет именованного мутанта. У AC2 («бюджет сохранён») нет специального | `test/live-viewport.test.mjs``demo/smoke_live_pan_coverage.mjs``demo/screencast_visual_continuity.mjs``demo/srv/demo.html``src/houseplan-card.ts` |
| #579 | [CODE-REVIEW-579-r1.md](CODE-REVIEW-579-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | AC4 (матрица day cycle/Glow/room fills/hatching/фон) не имеет тестового доказательства; AC2 не имеет именованного мутанта. У AC2 («бюджет сохранён») нет специального MUTANT_DE… | `test/live-viewport.test.mjs``demo/smoke_live_pan_coverage.mjs``demo/screencast_visual_continuity.mjs``demo/srv/demo.html``src/houseplan-card.ts` |
| #578 | [SPEC-REVIEW-578-r1.md](SPEC-REVIEW-578-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | i18n закрыт только косвенно; сценарий «новый mouse pointerdown сразу после pinch» не назван явно ни в одном AC | `test/touch-gesture-click-guard.test.mjs` |
| #577 | [SPEC-REVIEW-577-r1.md](SPEC-REVIEW-577-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | раздел «Release-артефакты» не называет два документа, которые эта же задача обязана обн… | `docs/CHANGELOG.md``.ru.md``docs/SUN.md``docs/USER-GUIDE.ru.md``docs/TESTING.md``docs/WALL-THICKNESS.md``docs/CONFIG-COMPATIBILITY.md``WALL-THICKNESS.md` |
| #561 | [SPEC-REVIEW-561-r1.md](SPEC-REVIEW-561-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | ТЗ не называет явно влияние на touch/View/kiosk — обязательный, блокирующий; Разделы «сценарий» и «что человек увидит до/после» не оформлены отдельными | `docs/TOUCH-SUPPORT.md` |
| #561 | [SPEC-REVIEW-561-r1.md](SPEC-REVIEW-561-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | ТЗ не называет явно влияние на touch/View/kiosk — обязательный, блокирующий пункт DoR (…; Разделы «сценарий» и «что человек увидит до/после» не оформлены отдельными подзаголовка… | `docs/TOUCH-SUPPORT.md` |
| #553 | [CODE-REVIEW-553-r2.md](CODE-REVIEW-553-r2.md) | code · r2 | 🟡 жёлтый | 0 | 1 | Регрессионный тест #553 не защищает от отката формулировки, ради которого; Стале-цитата правила в §11.4 после правки формулировки §5 | `test/review-doc-guard.test.mjs``PROCESS.md``AGENTS.md` |
| #553 | [CODE-REVIEW-553-r2.md](CODE-REVIEW-553-r2.md) | code · r2 | 🟡 жёлтый | 0 | 1 | Регрессионный тест #553 не защищает от отката формулировки, ради которого заведён; Стале-цитата правила в §11.4 после правки формулировки §5 | `test/review-doc-guard.test.mjs``PROCESS.md``AGENTS.md` |
| #514 | [CODE-REVIEW-514-r3.md](CODE-REVIEW-514-r3.md) | code · r3 | 🟡 жёлтый | 0 | 1 | фолбэк-токен E2E_DISPATCH_TOKEN, если он scoped только на houseplan-e2e, молча ломает p…; High не найдено. Medium вне скоупа не найдено — единственный Medium (M1) целиком внутри… | `release.yml``scripts/e2e-gate.mjs``e2e-gate.mjs``.github/workflows/release.yml``houseplan-e2e/e2e.yml``e2e.yml``validate-gate.mjs``PROCESS.md` |
| #514 | [CODE-REVIEW-514-r3.md](CODE-REVIEW-514-r3.md) | code · r3 | 🟡 жёлтый | 0 | 1 | фолбэк-токен E2E_DISPATCH_TOKEN, если он scoped только на houseplan-e2e, молча ломает p… | `release.yml``scripts/e2e-gate.mjs``e2e-gate.mjs``.github/workflows/release.yml``houseplan-e2e/e2e.yml``e2e.yml``validate-gate.mjs``PROCESS.md` |
| #510 | [CODE-REVIEW-510-r1.md](CODE-REVIEW-510-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | Отменённый (cancelled) dispatch-прогон читается как красный, а не игнорируется — то же …; Не найдено требующих записи — единственная спорная деталь (M1) достаточно | `scripts/validate-gate.mjs``scripts/merge-candidate.mjs``validate.yml``validate-gate.mjs``test/validate-gate.test.mjs``test/merge-candidate.test.mjs``scripts/release-gate.mjs` |
| #509 | [SPEC-REVIEW-509-r1.md](SPEC-REVIEW-509-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | отсутствует раздел «Принятые технические предположения» (PROCESS.md §7.1); контракт п.4 (прежнее значение при инвалидации мемо, без скелета) не доказан ни одним AC; критерий отказа от лёгкого трека не назван явно | `SPEC-REVIEW-505-r1.md``docs/specs/493-...md` |
| #509 | [SPEC-REVIEW-509-r2.md](SPEC-REVIEW-509-r2.md) | spec · r2 | 🟢 зелёный | 0 | 0 | способ инъекции счётчика вызовов для AC3 остался неназванным | `wall-thickness.ts` |
| #508 | [SPEC-REVIEW-508-r1.md](SPEC-REVIEW-508-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | AC3 называет несуществующее доказательство: golden-сценариев summary- в; В ТЗ лёгкого трека нет раздела «откат»; Целевой файл документации для фразы про футер не определён; Влияние на производительность не названо явно | `demo/capture_summary_panel_505.mjs``docs/UX-MODES.md``docs/ARCHITECTURE.md` |
| #508 | [SPEC-REVIEW-508-r1.md](SPEC-REVIEW-508-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | AC3 называет несуществующее доказательство: golden-сценариев summary- в репозитории нет; В ТЗ лёгкого трека нет раздела «откат»; Целевой файл документации для фразы про футер не определён. Пункт 3 «Изменений» называе…; Влияние на производительность не названо явно. DoR (§2.5) требует явного «нет», если вл… | `demo/capture_summary_panel_505.mjs``docs/UX-MODES.md``docs/ARCHITECTURE.md` |
| #485 | [CODE-REVIEW-485-r1.md](CODE-REVIEW-485-r1.md) | code · r1 | 🔴 красный | 6 | 6 | «partial» не существует как состояние здоровья; смешанные и полностью; гонка teardown/await воскрешает HA-подписки после выгрузки интеграции; нет проверки «то же устройство» для верифицированного адаптера LD2450; «Настроить на плане» отказывает для комнаты без контура вместо; известные занятые зоны (zones_v1) никогда не рисуются на плане; смена HA-привязки маркера может молча удалить уже сохранённую | `custom_components/houseplan/radar.py``__init__.py``custom_components/houseplan/radar_validation.py``radar.py``src/editors/radar-section.ts``radar-model.ts``radar-editor.ts``editors/radar-section.ts` |
| #485 | [CODE-REVIEW-485-r2.md](CODE-REVIEW-485-r2.md) | code · r2 | 🟡 жёлтый | 0 | 1 | M-1 (продолжение M6 из r1, закрыто частично). Три из четырёх числовых гардов; чтению (src/editors/radar-section.ts:185-197, ключ radar.no_contour | `radar_geometry.py``src/radar-geometry.ts``test/radar-geometry.test.mjs``radar_websocket.py``test_ha_radar_websocket.py``custom_components/houseplan/websocket_api.py``docs/specs/485-radar-presence-stage1.md``custom_components/houseplan/__init__.py` |
| #485 | [CODE-REVIEW-485-r4.md](CODE-REVIEW-485-r4.md) | code · r4 | 🟢 зелёный | 0 | 0 | пусто). Не эскалирую третий раунд подряд по той же логике r2/r3: защитные | `radar.py` |
| #485 | [CODE-REVIEW-485-r1.md](CODE-REVIEW-485-r1.md) | code · r1 | 🔴 красный | 6 | 6 | «partial» не существует как состояние здоровья; смешанные и полностью устаревшие данные…; гонка teardown/await воскрешает HA-подписки после выгрузки интеграции. custom_component…; нет проверки «то же устройство» для верифицированного адаптера LD2450. custom_component…; «Настроить на плане» отказывает для комнаты без контура вместо предупреждения и незанят…; известные занятые зоны (zones_v1) никогда не рисуются на плане. grep -n "zone" src/rada…; смена HA-привязки маркера может молча удалить уже сохранённую, откалиброванную конфигур… | `custom_components/houseplan/radar.py``__init__.py``custom_components/houseplan/radar_validation.py``radar.py``src/editors/radar-section.ts``radar-model.ts``radar-editor.ts``editors/radar-section.ts` |
| #485 | [CODE-REVIEW-485-r2.md](CODE-REVIEW-485-r2.md) | code · r2 | 🟡 жёлтый | 0 | 1 | M-1 (продолжение M6 из r1, закрыто частично). Три из четырёх числовых гардов калибровоч…; Фикс H4 (комната без контура открывает мастер с предупреждением) корректен по чтению (s… | `radar_geometry.py``src/radar-geometry.ts``test/radar-geometry.test.mjs``radar_websocket.py``test_ha_radar_websocket.py``custom_components/houseplan/websocket_api.py``docs/specs/485-radar-presence-stage1.md``custom_components/houseplan/__init__.py` |
| #476 | [CODE-REVIEW-476-r1.md](CODE-REVIEW-476-r1.md) | code · r1 | 🟡 жёлтый | 0 | 0 | AC4: защита от обхода невалидного HEX повторным «ОК» не имеет постоянного; AC3/§7.2.4: заявленная защита «клик не проваливается в план/toolbar под; (git diff слепил две записи объекта). Чисто косметика, синтаксис и typecheck | `scripts/mutation-gate.mjs``SPEC-REVIEW-476-r1.md``demo/smoke_color_picker.mjs``scripts/smoke-links.mjs``src/houseplan-card.ts` |
| #476 | [CODE-REVIEW-476-r1.md](CODE-REVIEW-476-r1.md) | code · r1 | 🟡 жёлтый | 0 | 0 | AC4: защита от обхода невалидного HEX повторным «ОК» не имеет постоянного свидетеля в s…; AC3/§7.2.4: заявленная защита «клик не проваливается в план/toolbar под поверхностью» н…; src/houseplan-card.ts:5932 — invalidHex: …, confirm: … на одной строке (git diff слепил… | `scripts/mutation-gate.mjs``SPEC-REVIEW-476-r1.md``demo/smoke_color_picker.mjs``scripts/smoke-links.mjs``src/houseplan-card.ts` |
| #475 | [SPEC-REVIEW-475-r1.md](SPEC-REVIEW-475-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | job и guardFiles() не покрывают гарды бэкенда, хотя они уже есть в реестре | `.test.mjs``scripts/mutation-gate.mjs``custom_components/houseplan/frontend_registration.py``tests_backend/test_ha_frontend_registration.py``mutation-gate.mjs``.github/workflows/validate.yml``src/wall-merge.ts` |
@@ -330,8 +335,8 @@
| #462 | [SPEC-REVIEW-462-r2.md](SPEC-REVIEW-462-r2.md) | spec · r2 | 🟡 жёлтый | 0 | 1 | новый контракт lovelace.resource_mode: yaml не подтверждён и; числовой touch-target 44×44; SHA не назван в вердикт-комментарии r1 | `SPEC-REVIEW-462-r1.md` |
| #449 | [CODE-REVIEW-449-r1.md](CODE-REVIEW-449-r1.md) | code · r1 | 🔴 красный | 3 | 3 | custom_components/houseplan/frontend/ не синхронизирован с dist/: пользователь не получ…; docs-гейт красный: скрипты не пересняты после правки src/; заявленное доказательство AC3 красное: demo/smoke_kiosk_pan_lock.mjs; bundle budget: запас ушёл ниже шумовой полосы; мутант room-fit-enters-kiosk-double-tap-sequence больше ничего не ловит; ТЗ (AC5) обещает «targeted production-bundle smoke для device, opening и room | `dist/houseplan-assets/houseplan-card-CbNfZuwV.js``custom_components/houseplan/frontend/houseplan-assets/houseplan-card-BgNWi9NC.js``test/bundle-tree-committed.test.mjs``test/release-contract.test.mjs``dist/houseplan-card.js``src/houseplan-card.ts``src/room-fit.ts``demo/smoke_kiosk_pan_lock.mjs` |
| #449 | [CODE-REVIEW-449-r1.md](CODE-REVIEW-449-r1.md) | code · r1 | 🔴 красный | 3 | 3 | custom_components/houseplan/frontend/ не синхронизирован с dist/: пользователь не получ…; docs-гейт красный: скрипты не пересняты после правки src/; заявленное доказательство AC3 красное: demo/smoke_kiosk_pan_lock.mjs; $ npm test → not ok: "#438 полоса шире наблюдаемого шума метрики" error: 'сверху меньше…; bundle budget: запас ушёл ниже шумовой полосы; мутант room-fit-enters-kiosk-double-tap-sequence больше ничего не ловит | `dist/houseplan-assets/houseplan-card-CbNfZuwV.js``custom_components/houseplan/frontend/houseplan-assets/houseplan-card-BgNWi9NC.js``test/bundle-tree-committed.test.mjs``test/release-contract.test.mjs``dist/houseplan-card.js``src/houseplan-card.ts``src/room-fit.ts``demo/smoke_kiosk_pan_lock.mjs` |
| #448 | [CODE-REVIEW-448-r1.md](CODE-REVIEW-448-r1.md) | code · r1 | 🟡 жёлтый | 0 | 2 | docs/RELEASE-NOTES.md потерял пункт #447 в обеих секциях; AGENTS.md §«Labs flags» не обновлён и описывает контракт, которого больше нет; Не найдено сверх M1/M2 | `docs/RELEASE-NOTES.md``docs/DEVELOPMENT.md``AGENTS.md``src/labs.ts``docs/ISOMETRIC.md``docs/STATUS.md` |
| #448 | [CODE-REVIEW-448-r1.md](CODE-REVIEW-448-r1.md) | code · r1 | 🟡 жёлтый | 0 | 2 | docs/RELEASE-NOTES.md потерял пункт #447 в обеих секциях; AGENTS.md §«Labs flags» не обновлён и описывает контракт, которого больше нет | `docs/RELEASE-NOTES.md``docs/DEVELOPMENT.md``AGENTS.md``src/labs.ts``docs/ISOMETRIC.md``docs/STATUS.md` |
| #437 | [SPEC-REVIEW-437-r1.md](SPEC-REVIEW-437-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | Раздел 10 «i18n и визуальное соответствие» пропускает французскую; Термин viewAllowed в формуле §5.3 не введён явно; Систематически пропущены пробелы перед числами в ряде мест текста | `docs/specs/437-summary-panel.md``src/i18n/fr.json``docs/CHANGELOG.md``docs/CHANGELOG.ru.md``docs/USER-GUIDE.ru.md``CONTRIBUTING.md` |
| #437 | [SPEC-REVIEW-437-r1.md](SPEC-REVIEW-437-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | Раздел 10 «i18n и визуальное соответствие» пропускает французскую локаль, которая являе…; Термин viewAllowed в формуле §5.3 не введён явно; Систематически пропущены пробелы перед числами в ряде мест текста | `docs/specs/437-summary-panel.md``src/i18n/fr.json``docs/CHANGELOG.md``docs/CHANGELOG.ru.md``docs/USER-GUIDE.ru.md``CONTRIBUTING.md` |
| #437 | [CODE-REVIEW-437-r1.md](CODE-REVIEW-437-r1.md) | code · r1 | 🟡 жёлтый | 0 | 4 | существующий смок demo/smoke_kiosk.mjs падает необработанным исключением на этом SHA; исключение «удалённого устройства» в подсчёте Q2 не имеет свидетеля; tap-target реордер/удаления в форме настроек меньше заявленных 44×44 CSS px; идентичность карточки (AC21) не имеет ни выделенного резолвера, ни свидетеля теста | `demo/smoke_kiosk.mjs``src/houseplan-card.ts``scripts/smoke-select.mjs``src/summary-panel-metrics.ts``test/summary-panel.test.mjs``src/summary-panel-style.ts``summary-panel-editor.ts``docs/TOUCH-SUPPORT.md` |
| #437 | [CODE-REVIEW-437-r2.md](CODE-REVIEW-437-r2.md) | code · r2 | 🟡 жёлтый | 0 | 1 | регресс восстановления камеры View при возврате из редактора, унаследован из r1-материа…; prepareCameraCommand, bootSoftCancel, stagePointerDown (houseplan-card.ts) объединяют п…; та же строка import { measuredCardHeaderHeight, settleSoftStageLayout } from './boot-so…; src/summary-panel-identity.ts: structuralPath() по-прежнему строит идентичность через c… | `demo/smoke_zoom_out.mjs``docs/houseplan-card.ts``smoke_zoom_out.mjs``houseplan-editor-runtime.ts``src/boot-soft-layout.ts``houseplan-card.ts``src/summary-panel-identity.ts` |
| #400 | [CODE-REVIEW-400-r1.md](CODE-REVIEW-400-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | Мутант furniture-edge-handles-steal-the-corner не воспроизводит регрессию, которую обяз…; AC4 доказан не тем видом теста, что назван в ТЗ; Число «2 654 Б gzip» для 38 help-строк в docs/ARCHITECTURE.md не | `scripts/mutation-gate.mjs``src/houseplan-card.ts``.github/workflows/mutation-gate.yml``test/align-candidates.test.mjs``demo/smoke_align_guides.mjs``docs/ARCHITECTURE.md` |
| #400 | [CODE-REVIEW-400-r1.md](CODE-REVIEW-400-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | Мутант furniture-edge-handles-steal-the-corner не воспроизводит регрессию, которую обяз…; AC4 доказан не тем видом теста, что назван в ТЗ; Число «2 654 Б gzip» для 38 help-строк в docs/ARCHITECTURE.md не перепроверено независимо | `scripts/mutation-gate.mjs``src/houseplan-card.ts``.github/workflows/mutation-gate.yml``test/align-candidates.test.mjs``demo/smoke_align_guides.mjs``docs/ARCHITECTURE.md` |
| #400 | [CODE-REVIEW-400-r2.md](CODE-REVIEW-400-r2.md) | code · r2 | 🟡 жёлтый | 0 | 1 | Дополнительно к находке r1: комментарий автора от 2026-08-31T05:14:07Z заявляет закрыти… | `src/houseplan-card.ts``smoke_furniture.mjs` |
| #399 | [SPEC-REVIEW-399-r1.md](SPEC-REVIEW-399-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | «План автотестов» (п.4) не обновлён вслед за AC5 и описывает как раз ту слабую версию, … | `docs/specs/399-backend-gate-honesty.md``validate.yml``mutation-gate.yml` |
| #385 | [SPEC-REVIEW-385-r1.md](SPEC-REVIEW-385-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | Контракт (в) описывает предикат isRelease неполно, что рискует; «План автотестов» ссылается на несуществующий тестовый паттерн; DoR-примечание не называет явно влияние на производительность; Формулировка «(б)–(г) — «мелкие уточнения»» в Release-артефактах | `docs/specs/385-audit-lows.md``scripts/process-gate.mjs``AGENTS.md``src/houseplan-editor-runtime.ts``src/houseplan-card.ts` |
| #385 | [SPEC-REVIEW-385-r1.md](SPEC-REVIEW-385-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | Контракт (в) описывает предикат isRelease неполно, что рискует разойтись с AC4; «План автотестов» ссылается на несуществующий тестовый паттерн. Текст: «паттерн существ…; DoR-примечание не называет явно влияние на производительность. PROCESS.md §2.5 требует …; Формулировка «(б)–(г) — «мелкие уточнения»» в Release-артефактах двусмысленна. Раздел U… | `docs/specs/385-audit-lows.md``scripts/process-gate.mjs``AGENTS.md``src/houseplan-editor-runtime.ts``src/houseplan-card.ts` |
| #360 | [SPEC-REVIEW-360-r1.md](SPEC-REVIEW-360-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | не назван обязательный touch-статус фичи; не описано, что сохранение свойств уже существующего объекта; Не найдено содержательных Low-находок сверх названных Medium; текст ТЗ | `docs/TOUCH-SUPPORT.md``houseplan-editor-runtime.ts` |
| #360 | [SPEC-REVIEW-360-r1.md](SPEC-REVIEW-360-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | не назван обязательный touch-статус фичи. docs/TOUCH-SUPPORT.md (раздел «Documentation …; не описано, что сохранение свойств уже существующего объекта перезаписывает тот же deco… | `docs/TOUCH-SUPPORT.md``houseplan-editor-runtime.ts` |
| #337 | [CODE-REVIEW-337-r1.md](CODE-REVIEW-337-r1.md) | code · r1 | 🔴 красный | 5 | 3 | Warm-remount коммитит editor mode в обход loader-гейта — падения на; Kiosk-контролы, явно названные в принятом ТЗ eager (§6.3: «kiosk; Безопасность resize «fail-closed» сломана: принудительный отказ; Стрелочная навигация по вкладкам инвентаря устройств падает с; Визуальная порча вторичного тулбара Device editor + 3 неподтверждённых; Два существующих smoke ожидают, что houseplan-card-editor уже | `src/houseplan-card.ts``docs/WARM-REMOUNT.md``demo/smoke_preloader_lifecycle.mjs``demo/smoke_warm_dialogs.mjs``demo/smoke_warm_owners.mjs``docs/SCOPE.md``demo/smoke_kiosk.mjs``demo/smoke_room_resize.mjs` |
| #337 | [CODE-REVIEW-337-r2.md](CODE-REVIEW-337-r2.md) | code · r2 | 🔴 красный | 2 | 1 | Warm-remount editor-камера теряет бит-точность — визуальный «прыжок»; фикс устранил исключение, но обнажил под ним ещё один, ранее не наблюдаемый; (→ [#346](https://github.com/Matysh/houseplan-card/issues/346)). Golden-эталоны | `demo/smoke_warm_dialogs.mjs``docs/WARM-REMOUNT.md``src/houseplan-card.ts` |
| #337 | [CODE-REVIEW-337-r3.md](CODE-REVIEW-337-r3.md) | code · r3 | 🔴 красный | 1 | 0 | check-docs красный на ревьюемом SHA — стало устаревшим ровно из-за; Нет находок этого уровня в дельте r2→r3 | `scripts/source-fingerprint.mjs``src/houseplan-card.ts``docs/images/screenshots.json``docs/specs/337-lazy-editor-chunk.md``PROCESS.md` |
| #337 | [CODE-REVIEW-337-r1.md](CODE-REVIEW-337-r1.md) | code · r1 | 🔴 красный | 5 | 3 | Warm-remount коммитит editor mode в обход loader-гейта — падения на уже существующих sm…; Kiosk-контролы, явно названные в принятом ТЗ eager (§6.3: «kiosk controls остаются eage…; Безопасность resize «fail-closed» сломана: принудительный отказ preflight-проверки всё …; Стрелочная навигация по вкладкам инвентаря устройств падает с необработанным исключение…; Визуальная порча вторичного тулбара Device editor + 3 неподтверждённых golden-дельты по…; Два существующих smoke ожидают, что houseplan-card-editor уже зарегистрирован на страни… | `src/houseplan-card.ts``docs/WARM-REMOUNT.md``demo/smoke_preloader_lifecycle.mjs``demo/smoke_warm_dialogs.mjs``demo/smoke_warm_owners.mjs``docs/SCOPE.md``demo/smoke_kiosk.mjs``demo/smoke_room_resize.mjs` |
| #337 | [CODE-REVIEW-337-r2.md](CODE-REVIEW-337-r2.md) | code · r2 | 🔴 красный | 2 | 1 | Warm-remount editor-камера теряет бит-точность — визуальный «прыжок» кадра, воспроизвод…; фикс устранил исключение, но обнажил под ним ещё один, ранее не наблюдаемый дефект в то… | `demo/smoke_warm_dialogs.mjs``docs/WARM-REMOUNT.md``src/houseplan-card.ts` |
| #337 | [CODE-REVIEW-337-r3.md](CODE-REVIEW-337-r3.md) | code · r3 | 🔴 красный | 1 | 0 | check-docs красный на ревьюемом SHA — стало устаревшим ровно из-за этого коммита, AC13 … | `scripts/source-fingerprint.mjs``src/houseplan-card.ts``docs/images/screenshots.json``docs/specs/337-lazy-editor-chunk.md``PROCESS.md` |
| #331 | [SPEC-REVIEW-331-r1.md](SPEC-REVIEW-331-r1.md) | spec · r1 | 🔴 красный | 1 | 4 | Ключ узла квантуется через round(), а не через уже принятый в этом; Собственный пример AC1 не проходит собственный порог инцидентности; Не решено, распространяется ли fail-closed §2.6 на сторону; Максимальная ветвь ищется DFS-перебором вариантов; наихудшая; Release-артефакты не называют docs/USER-GUIDE.ru.md; §1 не отвечает на два обязательных продуктовых вопроса ТЗ в открытой | `docs/specs/331-junction-limit-precision.md``src/coordinate-canonicalization.ts``custom_components/houseplan/coordinate_canonicalization.py``coordinate_canonicalization.py``custom_components/houseplan/junction_limits.py``docs/USER-GUIDE.ru.md``check-docs.mjs``docs/SCOPE.md` |
| #331 | [SPEC-REVIEW-331-r2.md](SPEC-REVIEW-331-r2.md) | spec · r2 | 🟡 жёлтый | 0 | 1 | M-r2-1 (наследник M2, закрыт частично). AC6 не различает сторону; §6 «Риски» (2) описывает механизм, которого §2.3 больше не содержит | `docs/specs/331-junction-limit-precision.md` |
| #331 | [SPEC-REVIEW-331-r1.md](SPEC-REVIEW-331-r1.md) | spec · r1 | 🔴 красный | 1 | 4 | Ключ узла квантуется через round(), а не через уже принятый в этом репозитории cross-la…; Собственный пример AC1 не проходит собственный порог инцидентности; Не решено, распространяется ли fail-closed §2.6 на сторону previous, и не создаёт ли эт…; Максимальная ветвь ищется DFS-перебором вариантов; наихудшая сложность не оценена и не …; Release-артефакты не называют docs/USER-GUIDE.ru.md; §1 не отвечает на два обязательных продуктовых вопроса ТЗ в открытой форме — какая перс… | `docs/specs/331-junction-limit-precision.md``src/coordinate-canonicalization.ts``custom_components/houseplan/coordinate_canonicalization.py``coordinate_canonicalization.py``custom_components/houseplan/junction_limits.py``docs/USER-GUIDE.ru.md``check-docs.mjs``docs/SCOPE.md` |
| #331 | [SPEC-REVIEW-331-r2.md](SPEC-REVIEW-331-r2.md) | spec · r2 | 🟡 жёлтый | 0 | 1 | M-r2-1 (наследник M2, закрыт частично). AC6 не различает сторону (previous/candidate) —…; §6 «Риски» (2) описывает механизм, которого §2.3 больше не содержит («максимальная ветв… | `docs/specs/331-junction-limit-precision.md` |
| #309 | [SPEC-REVIEW-309-r1.md](SPEC-REVIEW-309-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | Отсутствуют несколько обязательных разделов §7.1, включая оба продуктовых; docs/WALL-THICKNESS.md («Junction tooling»: «sixteen close-up golden scenes | `docs/specs/309-junction-visual-limit.md``docs/WALL-THICKNESS.md``docs/CHANGELOG.md``docs/CHANGELOG.ru.md``docs/specs/README.md``demo/golden/matrix.mjs``AGENTS.md` |
| #309 | [SPEC-REVIEW-309-r2.md](SPEC-REVIEW-309-r2.md) | spec · r2 | 🟡 жёлтый | 0 | 1 | Раздел «Скоуп и не-скоуп» (§3.6) не закрывает находку r1 полностью, и одна из | `src/wall-thickness.ts``docs/WALL-THICKNESS.md``PROCESS.md``docs/TOUCH-SUPPORT.md` |
| #309 | [SPEC-REVIEW-309-r3.md](SPEC-REVIEW-309-r3.md) | spec · r3 | 🟢 зелёный | 0 | 1 | Нумерация AC в §5 разъезжается: новая строка помечена «7a», но названа в | `PROCESS.md` |
| #309 | [SPEC-REVIEW-309-r1.md](SPEC-REVIEW-309-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | Отсутствуют несколько обязательных разделов §7.1, включая оба продуктовых; §3.5 и §4 повторяют формулировку «Все 16 junction-сцен» из docs/WALL-THICKNESS.md («Jun… | `docs/specs/309-junction-visual-limit.md``docs/WALL-THICKNESS.md``docs/CHANGELOG.md``docs/CHANGELOG.ru.md``docs/specs/README.md``demo/golden/matrix.mjs``AGENTS.md` |
| #309 | [SPEC-REVIEW-309-r2.md](SPEC-REVIEW-309-r2.md) | spec · r2 | 🟡 жёлтый | 0 | 1 | Раздел «Скоуп и не-скоуп» (§3.6) не закрывает находку r1 полностью, и одна из двух его … | `src/wall-thickness.ts``docs/WALL-THICKNESS.md``PROCESS.md``docs/TOUCH-SUPPORT.md` |
| #309 | [SPEC-REVIEW-309-r3.md](SPEC-REVIEW-309-r3.md) | spec · r3 | 🟢 зелёный | 0 | 1 | Нумерация AC в §5 разъезжается: новая строка помечена «7a», но названа в прозе «AC8», а… | `PROCESS.md` |
| #309 | [CODE-REVIEW-309-r1.md](CODE-REVIEW-309-r1.md) | code · r1 | 🔴 красный | 0 | 1 | npm test красный на проверяемом SHA; AC5 доказана не буквально как записано в ТЗ | `test/golden-matrix.test.mjs``demo/golden/matrix.mjs``demo/golden/README.md``docs/specs/309-junction-visual-limit.md``test/fixtures/309-junction-teeth.json``smoke_junction_holes.mjs``302-junction-artifacts.json``scripts/wall-strip-containment.mjs` |
| #306 | [CODE-REVIEW-306-r1.md](CODE-REVIEW-306-r1.md) | code · r1 | 🟡 жёлтый | 0 | 0 | 1 Гейты — что прогнано; 2 Что НЕ прогонялось и почему; Отчёт «Оптимизировать планы» показывает退ый термин «виртуальный»/«virtual»; docs/CHANGELOG.md/docs/CHANGELOG.ru.md не содержат обязательного; Четыре i18n-ключа из таблицы §15 ТЗ реализованы не под тем именем/точным | `src/i18n/en.json``ru.json``src/houseplan-card.ts``src/plan-optimizer.ts``plan-optimizer.ts``houseplan-card.ts``docs/CHANGELOG.md``docs/CHANGELOG.ru.md` |
| #306 | [CODE-REVIEW-306-r1.md](CODE-REVIEW-306-r1.md) | code · r1 | 🟡 жёлтый | 0 | 0 | 1 Гейты — что прогнано; 2 Что НЕ прогонялось и почему; Отчёт «Оптимизировать планы» показывает退ый термин «виртуальный»/«virtual», который это …; docs/CHANGELOG.md/docs/CHANGELOG.ru.md не содержат обязательного предупреждения о backu…; Четыре i18n-ключа из таблицы §15 ТЗ реализованы не под тем именем/точным текстом | `src/i18n/en.json``ru.json``src/houseplan-card.ts``src/plan-optimizer.ts``plan-optimizer.ts``houseplan-card.ts``docs/CHANGELOG.md``docs/CHANGELOG.ru.md` |
| #306 | [CODE-REVIEW-306-r2.md](CODE-REVIEW-306-r2.md) | code · r2 | 🟢 зелёный | 0 | 0 | 1 Гейты — что прогнано лично; 2 Что НЕ прогонялось и почему; 3 Разбор смок-выборки по дельте | — |
| #304 | [CODE-REVIEW-304-r1.md](CODE-REVIEW-304-r1.md) | code · r1 | 🟡 жёлтый | 1 | 0 | два golden-сценария неродственных фич стали «different» на канонической Linux CI и не п…; буквально такой же топологией (golden использует смежный, но не идентичный golden-coinc… | `demo/golden/harness.mjs``demo/golden/matrix.mjs` |
| #304 | [CODE-REVIEW-304-r1.md](CODE-REVIEW-304-r1.md) | code · r1 | 🟡 жёлтый | 1 | 0 | два golden-сценария неродственных фич стали «different» на канонической Linux CI и не п…; AC1 фиксирует «шесть узлов» через частный unit/smoke fixture, а не через golden-сцену с… | `demo/golden/harness.mjs``demo/golden/matrix.mjs` |
| #292 | [SPEC-REVIEW-292-r1.md](SPEC-REVIEW-292-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | обещание в §5 не имеет технической опоры и не проверяется ни одним AC; отсутствуют разделы, обязательные по PROCESS.md §7.1 и принятые в соседних ТЗ той же по…; AC1–AC8 не помечают явно способ доказательства | `docs/specs/292-resize-availability-audit.md``src/resize.ts``src/i18n/en.json``src/i18n/ru.json``PROCESS.md``292-resize-availability-audit.md``277-safe-resize.md``276-coincident-partition-reconciliation.md` |
| #291 | [SPEC-REVIEW-291-r1.md](SPEC-REVIEW-291-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | Отсутствуют обе обязательные продуктовые секции §7.1, и новый видимый UI; Нет разделов «Риски» и «Откат», обязательных по DoR (§2.5) и присутствующих; AC3 иллюстрирует вывод CLI текстом, который не совпадает с реальным; Issue #291 называет себя «Стадия 1 из ADR #282», хотя реальная Stage 1 | `docs/specs/291-lattice-coordinate-write-barrier.md``docs/SCOPE.md``src/i18n/ru.json``docs/specs/252-optimize-orphan-layout-report.md``docs/specs/279-near-orthogonal-junction.md``docs/specs/226-entity-parent-dedup.md``scripts/model-invariants.mjs``docs/adr/282-wall-geometry-representation.md` |
| #291 | [SPEC-REVIEW-291-r2.md](SPEC-REVIEW-291-r2.md) | spec · r2 | 🟡 жёлтый | 0 | 1 | Раздел «i18n», обязательный по цепочке §7.1, отсутствует; новые строки; (из r1) — пример CLI-вывода в AC3 остаётся текстово рассинхронизирован | `docs/specs/291-lattice-coordinate-write-barrier.md``PROCESS.md``src/i18n/en.json``src/i18n/ru.json``docs/specs/252-optimize-orphan-layout-report.md``docs/specs/094-universal-state-toggle.md` |
| #291 | [SPEC-REVIEW-291-r3.md](SPEC-REVIEW-291-r3.md) | spec · r3 | 🟢 зелёный | 0 | 0 | Точность (число знаков/округление) нового placeholder {cm} в; (из r1) — тело issue #291 всё ещё называет задачу «Стадия 1 из ADR | `docs/specs/291-lattice-coordinate-write-barrier.md``src/houseplan-card.ts``model-invariants.mjs` |
| #291 | [SPEC-REVIEW-291-r1.md](SPEC-REVIEW-291-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | Отсутствуют обе обязательные продуктовые секции §7.1, и новый видимый UI предъявлен как…; Нет разделов «Риски» и «Откат», обязательных по DoR (§2.5) и присутствующих в каждом со…; AC3 иллюстрирует вывод CLI текстом, который не совпадает с реальным форматом инструмента; Issue #291 называет себя «Стадия 1 из ADR #282», хотя реальная Stage 1 ADR #282 — это «… | `docs/specs/291-lattice-coordinate-write-barrier.md``docs/SCOPE.md``src/i18n/ru.json``docs/specs/252-optimize-orphan-layout-report.md``docs/specs/279-near-orthogonal-junction.md``docs/specs/226-entity-parent-dedup.md``scripts/model-invariants.mjs``docs/adr/282-wall-geometry-representation.md` |
| #291 | [SPEC-REVIEW-291-r2.md](SPEC-REVIEW-291-r2.md) | spec · r2 | 🟡 жёлтый | 0 | 1 | Раздел «i18n», обязательный по цепочке §7.1, отсутствует; новые строки отчёта Optimize …; остаётся. Не относится к файлу ТЗ, не блокирует | `docs/specs/291-lattice-coordinate-write-barrier.md``PROCESS.md``src/i18n/en.json``src/i18n/ru.json``docs/specs/252-optimize-orphan-layout-report.md``docs/specs/094-universal-state-toggle.md` |
| #291 | [SPEC-REVIEW-291-r3.md](SPEC-REVIEW-291-r3.md) | spec · r3 | 🟢 зелёный | 0 | 0 | Точность (число знаков/округление) нового placeholder {cm} в gs.optimize_lattice_summar…; остаётся. Не относится к файлу ТЗ, не блокирует | `docs/specs/291-lattice-coordinate-write-barrier.md``src/houseplan-card.ts``model-invariants.mjs` |
| #291 | [CODE-REVIEW-291-r1.md](CODE-REVIEW-291-r1.md) | code · r1 | 🟡 жёлтый | 0 | 2 | AC4 не доказан ни автотестом, ни явной записью; docs/USER-GUIDE.ru.md не обновлён; не блокируют, зафиксированы без правки | `smoke_lattice_write_barrier.mjs``smoke_optimize_coordinate_canonicalization.mjs``docs/USER-GUIDE.ru.md``docs/USER-GUIDE.md``src/i18n/ru.json` |
| #290 | [SPEC-REVIEW-290-r1.md](SPEC-REVIEW-290-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | Отсутствуют обязательные разделы §7.1 «риски» и «откат»; AC исходного issue про npm run invariants на реальных данных и; AC4 неточно называет источник fixture | `docs/specs/290-near-axis-authoring-and-repair.md``docs/specs/277-safe-resize.md``docs/specs/279-near-orthogonal-junction.md``scripts/model-invariants.mjs``44.json``test/fixtures/279-near-orthogonal-junction.json` |
| #290 | [SPEC-REVIEW-290-r1.md](SPEC-REVIEW-290-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 2 | Отсутствуют обязательные разделы §7.1 «риски» и «откат»; AC исходного issue про npm run invariants на реальных данных и видимое снижение числа п…; AC4 неточно называет источник fixture | `docs/specs/290-near-axis-authoring-and-repair.md``docs/specs/277-safe-resize.md``docs/specs/279-near-orthogonal-junction.md``scripts/model-invariants.mjs``44.json``test/fixtures/279-near-orthogonal-junction.json` |
| #289 | [SPEC-REVIEW-289-r1.md](SPEC-REVIEW-289-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 3 | раздел «Риски» отсутствует полностью; раздел «Откат» отсутствует полностью; 6 из 9 AC не указывают способ доказательства; терминология «рукоятка» вместо канонической «ручка»; i18n-ключ не назван по имени | `docs/RESIZE.md``demo/smoke_room_resize.mjs``test/resize.test.mjs``docs/USER-GUIDE.ru.md``src/resize.ts``src/i18n/en.json``ru.json` |
| #282 | [CODE-REVIEW-282-r2.md](CODE-REVIEW-282-r2.md) | code · r2 | 🔴 красный | 2 | 0 | npm test красный: диагностика больше не соответствует контракту, который сама же проверяет; AC7 нарушен: opening на обычной стене исчезает со Static-карточки после миграции в v8 | `test/open-passage-contract.test.mjs``demo/smoke_open_passage.mjs``src/space-render.ts``space-card.ts``ARCHITECTURE.md``src/wall-segment-model.ts``space-render.ts``src/houseplan-card.ts` |
| #282 | [CODE-REVIEW-282-r3.md](CODE-REVIEW-282-r3.md) | code · r3 | 🔴 красный | 1 | 0 | AC7 всё ещё нарушен: Static-карточка рисует сплошную стену прямо по месту прохода после… | `src/space-render.ts``src/wall-segment-model.ts``space-render.ts``houseplan-card.ts``demo/smoke_open_passage.mjs``src/logic.ts``docs/SCOPE.md``smoke_open_passage.mjs` |
| #277 | [SPEC-REVIEW-277-r1.md](SPEC-REVIEW-277-r1.md) | spec · r1 | ⚪ — | 0 | 3 | нет обязательного раздела «риски» (§7.1); нет обязательного «что человек увидит до и после» одной фразой без терминов реализации …; из плана тестов выпала обязательная анонимизированная fixture реального плана | `docs/specs/277-safe-resize.md` |
| #277 | [CODE-REVIEW-277-r1.md](CODE-REVIEW-277-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | Кэш допустимости (eligibility) на самом деле не memoизирует дорогую; Мёртвый код и устаревший комментарий: rszSel теперь ничего не | `src/houseplan-card.ts``docs/ARCHITECTURE.md``demo/fixtures/large-house.mjs``benchmark_safe_resize.mjs` |
| #277 | [CODE-REVIEW-277-r1.md](CODE-REVIEW-277-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | Кэш допустимости (eligibility) на самом деле не memoизирует дорогую часть — рендер руч…; Мёртвый код и устаревший комментарий: rszSel теперь ничего не рендерит, хотя всё ещё вы… | `src/houseplan-card.ts``docs/ARCHITECTURE.md``demo/fixtures/large-house.mjs``benchmark_safe_resize.mjs` |
| #277 | [CODE-REVIEW-277-r2.md](CODE-REVIEW-277-r2.md) | code · r2 | 🟢 зелёный | 0 | 0 | Находка предыдущего раунда (M1) закрыта полностью — см. раздел ниже. Новых находок в пр… | `docs/reviews/CODE-REVIEW-277-r1.md``src/houseplan-card.ts` |
| #276 | [SPEC-REVIEW-276-r1.md](SPEC-REVIEW-276-r1.md) | spec · r1 | 🔴 красный | 1 | 3 | Заявленный Redo для серверной отмены Optimize не существует и не заявлен как новая работа; Раздел «Риски» отсутствует — обязательный пункт DoR; Не перечислены затронутые файлы и модули — обязательный пункт DoR; Ссылка на несуществующий канонический документ docs/PLAN-OPTIMIZE.md | `src/houseplan-card.ts``docs/USER-GUIDE.ru.md``docs/ARCHITECTURE.md``docs/specs/275-multiwall-strip-containment.md``src/plan-optimizer.ts``src/wall-merge.ts``src/physical-geometry.ts``docs/PLAN-OPTIMIZE.md` |
| #253 | [SPEC-REVIEW-253-r1.md](SPEC-REVIEW-253-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | риск MAX_WALLS=500 от роста числа записей не упомянут в разделе рисков | `custom_components/houseplan/validation.py` |
| #253 | [SPEC-REVIEW-253-r1.md](SPEC-REVIEW-253-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | риск MAX_WALLS=500 от роста числа записей не упомянут в разделе рисков. Новый контракт … | `custom_components/houseplan/validation.py` |
| #244 | [SPEC-REVIEW-244-r1.md](SPEC-REVIEW-244-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | Не назван пункт DoR «влияние на touch» | `docs/TOUCH-SUPPORT.md` |
| #244 | [SPEC-REVIEW-244-r1.md](SPEC-REVIEW-244-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | Не назван пункт DoR «влияние на touch». PROCESS.md §2.5 требует явно назвать влияние на… | `docs/TOUCH-SUPPORT.md` |
| #244 | [CODE-REVIEW-244-r1.md](CODE-REVIEW-244-r1.md) | code · r1 | 🔴 красный | 2 | 0 | Именованный в АС смок demo/smoke_orphan_space_references.mjs красный; Регрессия контракта #113: последнее занятое пространство больше не удаляется | `demo/smoke_orphan_space_references.mjs``space-deletion.test.mjs``test_ha_websocket.py``CONFIG-COMPATIBILITY.md``USER-GUIDE.md``demo/smoke_optional_space_model.mjs` |
| #242 | [CODE-REVIEW-242-r1.md](CODE-REVIEW-242-r1.md) | code · r1 | 🟡 жёлтый | 1 | 1 | AC4 не выполнен: flip_v не меняет направление 10° поворота ворот на общей стене и на не…; заявленный golden-охват в handoff занижен на порядок; обязательные по §12.3 новые сцены… | `src/houseplan-card.ts``src/render/opening-symbol.ts``wall-thickness.ts``docs/WALL-THICKNESS.md``docs/ARCHITECTURE.md``docs/ISOMETRIC.md``docs/USER-GUIDE.ru.md``test/opening-symbol.test.mjs` |
| #242 | [CODE-REVIEW-242-r2.md](CODE-REVIEW-242-r2.md) | code · r2 | 🟢 зелёный | 0 | 0 | точный список из 67 существующих golden-сцен на самом деле содержит 2 сцены, не задетые… | `docs/TESTING.md``demo/golden/matrix.mjs``test/golden-matrix.test.mjs` |
| #239 | [SPEC-REVIEW-239-r1.md](SPEC-REVIEW-239-r1.md) | spec · r1 | ⚪ — | 0 | 1 | §13 Acceptance criteria не указывает способ доказательства для AC13; §10 «Данные, i18n...» не называет конкретный текст/ключ новой imperial | `docs/specs/230-hatch-density-normalization.md``docs/specs/238-opening-inner-distances.md` |
| #239 | [SPEC-REVIEW-239-r1.md](SPEC-REVIEW-239-r1.md) | spec · r1 | ⚪ — | 0 | 1 | §13 Acceptance criteria не указывает способ доказательства для AC13, AC14, AC16, и это …; §10 «Данные, i18n...» не называет конкретный текст/ключ новой imperial- подписи внутри … | `docs/specs/230-hatch-density-normalization.md``docs/specs/238-opening-inner-distances.md` |
| #234 | [CODE-REVIEW-234-r2.md](CODE-REVIEW-234-r2.md) | code · r2 | 🟢 зелёный | 0 | 0 | Диагноз и контракт по коду; Гейты — прогнаны на HEAD (c8e9597) в этой сессии; AC — чем доказано; Взаимодействие с #229 (ребейз) | — |
| #233 | [SPEC-REVIEW-233-r1.md](SPEC-REVIEW-233-r1.md) | spec · r1 | ⚪ — | 2 | 0 | Контракт §6 не покрывает открытую сторону, к которой ведёт продуктовое решение §4.3 (High); §7 приписывает thicknessCmAt поведение, которого у неё нет: заявлено фактом, не провере… | `docs/specs/233-resize-inner-dimensions.md``src/wall-thickness.ts``docs/WALL-THICKNESS.md``test/wall-thickness.test.mjs``wall-thickness.ts` |
| #233 | [CODE-REVIEW-233-r1.md](CODE-REVIEW-233-r1.md) | code · r1 | 🟡 жёлтый | 0 | 2 | тест AC6b не строит сценарий, который он заявляет (и который был H2); не хватает мутанта из принятого §11 ТЗ | `test/wall-thickness.test.mjs``docs/specs/233-resize-inner-dimensions.md``scripts/mutation-gate.mjs` |
| #226 | [SPEC-REVIEW-226-r1.md](SPEC-REVIEW-226-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | в скоупе задачи; Не найдено находок, которые стоило бы фиксировать отдельно и не чинить | `docs/FILTERING.md``PROCESS.md` |
| #225 | [SPEC-REVIEW-225-r1.md](SPEC-REVIEW-225-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | в скоупе задачи; Не найдено находок, которые стоило бы фиксировать отдельно и не | `import_export.py` |
| #220 | [CODE-REVIEW-220-r1.md](CODE-REVIEW-220-r1.md) | code · r1 | 🔴 красный | 1 | 2 | материализация неверно определяет «зависимые от порядка» маркеры: обычный маркер устрой…; перетаскивание вкладки не захватывает указатель: отпускание за пределами панели оставля…; мутационный гейт реализован не полностью относительно принятого §14 ТЗ | `src/space-order.ts``src/devices.ts``houseplan-card.ts``test/space-order.test.mjs``docs/TOUCH-SUPPORT.md``demo/smoke_space_tab_reorder.mjs``docs/specs/220-space-tab-reorder.md``scripts/mutation-gate.mjs` |
| #219 | [SPEC-REVIEW-219-r1.md](SPEC-REVIEW-219-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | в скоупе задачи; Не найдено находок, которые стоило бы фиксировать отдельно и не чинить | `docs/USER-GUIDE.ru.md``AGENTS.md``docs/TESTING.md``TESTING.md``USER-GUIDE.ru.md` |
| #199 | [SPEC-REVIEW-199-r1.md](SPEC-REVIEW-199-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | Английский текст сообщения об отказе и подсказки не зафиксирован; $sha.» — переменная не подставлена. Это дефект комментария, не ТЗ; на | `docs/specs/199-optimize-geometry-preflight.md``docs/specs/223-optimize-coordinate-canonicalization.md` |
| #199 | [SPEC-REVIEW-199-r1.md](SPEC-REVIEW-199-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | Английский текст сообщения об отказе и подсказки не зафиксирован дословно — только «экв…; Хендофф-комментарий автора ТЗ в issue содержит артефакт шаблона: «Коммит: $sha.» — пере… | `docs/specs/199-optimize-geometry-preflight.md``docs/specs/223-optimize-coordinate-canonicalization.md` |
| #152 | [SPEC-REVIEW-152-r1.md](SPEC-REVIEW-152-r1.md) | spec · r1 | 🔴 красный | 2 | 2 | ни один AC не указывает способ доказательства; потерян отдельный проверяемый AC про синхронность hit targets во время перехода; accessibility-раздел выдаёт «существующую accessible-подпись» за факт, хотя такой досту…; «существующий» double-click/tap fit-all на фоне на деле существует только в kiosk; «нужно изменить UX». По факту#28закрыт not_planned 2026-08-14 — до | `docs/specs/152-room-click-fit.md``docs/specs/146-four-phase-sun-background.md``docs/specs/138-adjacent-room-autoclose.md``docs/specs/146-...md``AGENTS.md``src/houseplan-card.ts``docs/SCOPE.md``docs/UX-MODES.md` |
| #152 | [SPEC-REVIEW-152-r1.md](SPEC-REVIEW-152-r1.md) | spec · r1 | 🔴 красный | 2 | 2 | ни один AC не указывает способ доказательства; потерян отдельный проверяемый AC про синхронность hit targets во время перехода; accessibility-раздел выдаёт «существующую accessible-подпись» за факт, хотя такой досту…; «существующий» double-click/tap fit-all на фоне на деле существует только в kiosk; Low-1. §10 обсуждает#28как открытую задачу, которой перед реализацией «нужно изменить… | `docs/specs/152-room-click-fit.md``docs/specs/146-four-phase-sun-background.md``docs/specs/138-adjacent-room-autoclose.md``docs/specs/146-...md``AGENTS.md``src/houseplan-card.ts``docs/SCOPE.md``docs/UX-MODES.md` |
| #152 | [CODE-REVIEW-152-r1.md](CODE-REVIEW-152-r1.md) | code · r1 | 🔴 красный | 1 | 2 | demo/smoke_pan_any_zoom.mjs падает необработанным исключением — новый код не переживает…; Подпись комнаты в редакторах Devices/Decor получает нерабочую клавиатурную кнопку — нар…; Защита AC15 (запрет saveZoom для reason room) не зарегистрирована в mutation-gate, хотя…; 1. AC5 (вложенные комнаты) и AC9 (retarget между двумя разными комнатами | `demo/smoke_pan_any_zoom.mjs``src/houseplan-card.ts``smoke_backdrop.mjs``smoke_editor_gestures.mjs``smoke_hide_layers.mjs``smoke_pan_any_zoom.mjs``houseplan-card.ts``validate.yml` |
| #152 | [CODE-REVIEW-152-r1.md](CODE-REVIEW-152-r1.md) | code · r1 | 🔴 красный | 1 | 2 | demo/smoke_pan_any_zoom.mjs падает необработанным исключением — новый код не переживает…; Подпись комнаты в редакторах Devices/Decor получает нерабочую клавиатурную кнопку — нар…; Защита AC15 (запрет saveZoom для reason room) не зарегистрирована в mutation-gate, хотя…; 1. AC5 (вложенные комнаты) и AC9 (retarget между двумя разными комнатами во время tween… | `demo/smoke_pan_any_zoom.mjs``src/houseplan-card.ts``smoke_backdrop.mjs``smoke_editor_gestures.mjs``smoke_hide_layers.mjs``smoke_pan_any_zoom.mjs``houseplan-card.ts``validate.yml` |
| #150 | [CODE-REVIEW-150-r1.md](CODE-REVIEW-150-r1.md) | code · r1 | 🔴 красный | 1 | 0 | Собственный AC7-smoke красный при первом запуске — фикстура не включает show_borders, а… | `demo/smoke_wall_thickness_transition.mjs``src/wall-thickness.ts``src/houseplan-card.ts``demo/smoke_split_corner_wall.mjs``AGENTS.md``docs/WALL-THICKNESS.md``docs/TESTING.md``smoke_split_corner_wall.mjs` |
| #146 | [SPEC-REVIEW-146-r1.md](SPEC-REVIEW-146-r1.md) | spec · r1 | 🟢 зелёный | 0 | 1 | azimuth тайно расширяет owner-решение о fallback-триггерах на саму фазу; «что человек увидит» длиннее одной фразы и использует термины реализации; нет буквальной touch-editor метки по docs/TOUCH-SUPPORT.md | `docs/specs/146-four-phase-sun-background.md``docs/TOUCH-SUPPORT.md` |
@@ -902,7 +907,7 @@
| #137 | [SPEC-REVIEW-137-r1.md](SPEC-REVIEW-137-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | терминология инструмента «Контур» вместо «Контур комнаты»; «что человек увидит» длиннее одной фразы; типы доказательства AC12–AC14 не входят буквально в перечень §2.5; план golden не описывает явно, чем доказывается forced-colours | `docs/specs/137-plan-snap-overlay.md``src/i18n/ru.json``docs/USER-GUIDE.ru.md``PROCESS.md``demo/golden/matrix.mjs``harness.mjs` |
| #132 | [SPEC-REVIEW-132-r1.md](SPEC-REVIEW-132-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | §2 использует термин реализации «host-сегмент»; нет обязательного маркера Touch editor: … по docs/TOUCH-SUPPORT.md; i18n-раздел не перечисляет конкретные ключи en/ru | `docs/specs/132-partition-openings.md``PROCESS.md``docs/USER-GUIDE.ru.md``docs/TOUCH-SUPPORT.md` |
| #132 | [CODE-REVIEW-132-r1.md](CODE-REVIEW-132-r1.md) | code · r1 | 🔴 красный | 1 | 3 | импорт/дублирование space с partition-hosted проёмом всегда отклоняется; находки (заведены отдельными issue); → #186 — нет jamb safety margin; → #187 — fallback-гвард источника света не fail-dark «по построению»; → #188 — тест junction-patch не умеет падать | `custom_components/houseplan/import_export.py``custom_components/houseplan/validation.py``validation.py``tests_backend/test_ha_import_export.py``src/partition-openings.ts``src/space-render.ts``src/houseplan-card.ts``src/wall-thickness.ts` |
| #132 | [CODE-REVIEW-132-r2.md](CODE-REVIEW-132-r2.md) | code · r2 | 🟢 зелёный | 0 | 1 | Нет. High-1 из r1 исправлен корректно (см. «Как проверялось» — фикс, тест и; Второй компонент этого коммита восстанавливает presentation-cut для; → #189 — presentation snap-overlay не режет ось независимой перегородки в месте её собс…; Нет новых Low в этом цикле. Три Low из SPEC-REVIEW-132-r1 были закрыты до | `demo/serve.mjs``src/houseplan-card.ts``src/plan-snap-overlay.ts``docs/CANVAS.md``smoke_partition_openings.mjs` |
| #132 | [CODE-REVIEW-132-r2.md](CODE-REVIEW-132-r2.md) | code · r2 | 🟢 зелёный | 0 | 1 | Нет. High-1 из r1 исправлен корректно (см. «Как проверялось» — фикс, тест и зелёный CI); Второй компонент этого коммита восстанавливает presentation-cut для legacy room-wall op…; → #189 — presentation snap-overlay не режет ось независимой перегородки в месте её собс…; Нет новых Low в этом цикле. Три Low из SPEC-REVIEW-132-r1 были закрыты до начала кода (… | `demo/serve.mjs``src/houseplan-card.ts``src/plan-snap-overlay.ts``docs/CANVAS.md``smoke_partition_openings.mjs` |
| #74 | [CODE-REVIEW-74-r1.md](CODE-REVIEW-74-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | новый Undo/Redo toolbar рендерится без иконок из-за неактуального demo/srv/assets/icons…; AC2 «два устройства в LIFO-порядке» не продемонстрирован реальным перетаскиванием двух …; AC13 «доступные имена на поддерживаемых ширинах» проверены на одной ширине/теме | `demo/srv/assets/icons.js``docs/specs/074-device-position-undo.md``demo/smoke_device_position_history.mjs``src/command-stack.ts``test/command-stack.test.mjs``src/houseplan-card.ts``demo/golden/matrix.mjs``demo/smoke_editor_tabs.mjs` |
| #62 | [SPEC-REVIEW-62-r1.md](SPEC-REVIEW-62-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | CONTRIBUTING.md останется противоречить новому contribution flow; AC2 не имеет явного маркера «Доказательство:» в отличие от остальных; AC5 и AC8 подмешивают в доказательство слово «inspection» (inspection | `CONTRIBUTING.md``docs/specs/062-i18n-registry.md``src/i18n.ts``src/i18n/registry.ts``src/editor.ts` |
| #62 | [SPEC-REVIEW-62-r1.md](SPEC-REVIEW-62-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | CONTRIBUTING.md останется противоречить новому contribution flow — AC9 не покрывает сущ…; AC2 не имеет явного маркера «Доказательство:» в отличие от остальных восьми AC. Формули…; AC5 и AC8 подмешивают в доказательство слово «inspection» (inspection compiled schema, … | `CONTRIBUTING.md``docs/specs/062-i18n-registry.md``src/i18n.ts``src/i18n/registry.ts``src/editor.ts` |
| #57 | [SPEC-REVIEW-57-r1.md](SPEC-REVIEW-57-r1.md) | spec · r1 | 🟢 зелёный | 0 | 1 | ТЗ молча сужает названные в issue call sites: «ripple» пропущен, параллельная семья «Об…; нет буквальной декларации Touch editor: … по docs/TOUCH-SUPPORT.md | `docs/specs/057-color-opacity-picker.md``src/houseplan-card.ts``houseplan-card.ts``docs/TOUCH-SUPPORT.md``docs/specs/068-help-affordance.md` |
| #57 | [CODE-REVIEW-57-r1.md](CODE-REVIEW-57-r1.md) | code · r1 | 🟢 зелёный | 0 | 0 | реализация меняет визуальный рендер ещё в 4 golden-сценариях, не названных нигде в ТЗ/T… | `docs/TESTING.md` |
| #54 | [SPEC-REVIEW-54-r1.md](SPEC-REVIEW-54-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | нет обязательного раздела «Затронутые файлы и модули»; имя персоны не совпадает с таблицей docs/SCOPE.md; формулировка AC14 «backend/HA contract smoke on Linux CI» не согласована; численные performance-бюджеты не зафиксированы в ТЗ, откладываются на | `PROCESS.md``226-entity-parent-dedup.md``238-opening-inner-distances.md``264-resize-controller.md``340-config-set-revision.md``348-german-localization.md``docs/SCOPE.md``AGENTS.md` |
| #54 | [SPEC-REVIEW-54-r1.md](SPEC-REVIEW-54-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | нет обязательного раздела «Затронутые файлы и модули». PROCESS.md §2.5 (DoR) требует бу…; имя персоны не совпадает с таблицей docs/SCOPE.md. §1 ТЗ: «Персона — Enthusiast/Power U…; формулировка AC14 «backend/HA contract smoke on Linux CI» не согласованас явным заявле…; численные performance-бюджеты не зафиксированы в ТЗ, откладываются на измеренный dev-ст… | `PROCESS.md``226-entity-parent-dedup.md``238-opening-inner-distances.md``264-resize-controller.md``340-config-set-revision.md``348-german-localization.md``docs/SCOPE.md``AGENTS.md` |
| #54 | [CODE-REVIEW-54-r1.md](CODE-REVIEW-54-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | невалидный ответ Zigbee2MQTT на верном топике зависает на полный 150-секундный таймаут …; custom_components/houseplan/diagnostics.py:41 отдаёт config.get("settings", {}) без фил…; pushDirectionalLink (zigbee-topology.ts:114-126) маркирует код duplicate_link как для б…; плотность диффа в нескольких местах указывает на автоматическую вставку без переноса ст… | `src/zigbee-topology-runtime.ts``custom_components/houseplan/diagnostics.py``docs/CONFIG-COMPATIBILITY.md``docs/SUPPORT-PRIVACY.md``support_package.py``diagnostics.py``zigbee-topology.ts``houseplan-card.ts` |
| #43 | [SPEC-REVIEW-43-r3.md](SPEC-REVIEW-43-r3.md) | spec · r3 | 🟢 зелёный | 0 | 1 | Требование к источнику rate-limit не зафиксировано в ТЗ, хотя код и тесты; Продакшн-канал ha_webhook целиком зависит от одной автоматизации на личном | `docs/specs/043-private-support-report.md``scripts/support-relay/tests/test_relay.py``hp_relay/app.py``app.py``scripts/support-relay/README.md` |
| #43 | [SPEC-REVIEW-43-r3.md](SPEC-REVIEW-43-r3.md) | spec · r3 | 🟢 зелёный | 0 | 1 | Требование к источнику rate-limit не зафиксировано в ТЗ, хотя код и тесты уже реализуют…; Продакшн-канал ha_webhook целиком зависит от одной автоматизации на личном Home Assista… | `docs/specs/043-private-support-report.md``scripts/support-relay/tests/test_relay.py``hp_relay/app.py``app.py``scripts/support-relay/README.md` |
| #43 | [SPEC-REVIEW-43-r4.md](SPEC-REVIEW-43-r4.md) | spec · r4 | 🟡 жёлтый | 0 | 1 | §9.2 закрывает находку r3 частично: описывает доверие к X-Forwarded-For как безусловный… | `scripts/support-relay/hp_relay/app.py``config.py``hp_relay/app.py` |
| #42 | [SPEC-REVIEW-42-r1.md](SPEC-REVIEW-42-r1.md) | spec · r1 | ⚪ — | 0 | 2 | AC5 не покрывает коды, эмитируемые не литералом в send_error(...); раздел «i18n» (обязателен по PROCESS.md §7.1) отсутствует; повторное использование err.…; Разделы «UX» и «Модель данных и миграция», формально обязательные по | `docs/specs/042-backend-engineering-quality.md``websocket_api.py``validation.py``junction_limits.py``houseplan-card.ts``src/i18n/en.json``src/i18n/ru.json` |
| #42 | [SPEC-REVIEW-42-r1.md](SPEC-REVIEW-42-r1.md) | spec · r1 | ⚪ — | 0 | 2 | AC5 не покрывает коды, эмитируемые не литералом в send_error(...); раздел «i18n» (обязателен по PROCESS.md §7.1) отсутствует; повторное использование err.…; Разделы «UX» и «Модель данных и миграция», формально обязательные по PROCESS.md §7.1 ка… | `docs/specs/042-backend-engineering-quality.md``websocket_api.py``validation.py``junction_limits.py``houseplan-card.ts``src/i18n/en.json``src/i18n/ru.json` |
| #42 | [SPEC-REVIEW-42-r2.md](SPEC-REVIEW-42-r2.md) | spec · r2 | 🟡 жёлтый | 0 | 1 | AC5 и её мутант не синхронизированы с исправленным блоком 5; критерий приёмки снова нед… | `docs/specs/042-backend-engineering-quality.md` |
| #42 | [SPEC-REVIEW-42-r3.md](SPEC-REVIEW-42-r3.md) | spec · r3 | 🟡 жёлтый | 0 | 1 | MarkerControlError описан в блоке 5/AC5 только по двум префиксным семействам; ~14 её ли… | `docs/specs/042-backend-engineering-quality.md``validation.py``websocket_api.py` |
| #42 | [SPEC-REVIEW-42-r4.md](SPEC-REVIEW-42-r4.md) | spec · r4 | 🔴 красный | 0 | 1 | заявленный метод извлечения кода MarkerControlError («regex по вызовам MarkerControlErr… | `docs/specs/042-backend-engineering-quality.md``validation.py` |
| #42 | [CODE-REVIEW-42-r1.md](CODE-REVIEW-42-r1.md) | code · r1 | 🔴 красный | 2 | 0 | no-new-any красный на HEAD: новый необоснованный any; requirements_test.txt невозможно установить: бэкенд-CI не работал ни разу | `src/houseplan-card.ts``scripts/no-new-any.mjs``.github/workflows/mutation-gate.yml` |
| #42 | [CODE-REVIEW-42-r2.md](CODE-REVIEW-42-r2.md) | code · r2 | 🔴 красный | 2 | 0 | docs-гейт красный: манифест скриншотов не совпадает ни с одним закоммиченным файлом; AC1 (coverage-baseline) недоказан прогоном ветки, но блокер внешний и уже заведён; ruff-долг scripts/+tests_backend/ шире объявленного include, но вне CI-скоупа; golden-расхождений на самом деле 8, не 4, но все вне скоупа #42 | `docs/images/screenshots.json``capture.mjs``validate.yml``tests_backend/test_backend_quality.py` |
| #42 | [CODE-REVIEW-42-r6.md](CODE-REVIEW-42-r6.md) | code · r6 | 🟡 жёлтый | 0 | 1 | Mypy strict (блок 3, AC4) не имеет механизма исполнения в CI — только; 1. pyproject.toml [tool.ruff] include перечисляет | `validate.yml``mutation-gate.yml``const.py``projection.py``plans.py``scripts/gate-reuse.mjs``tests_backend/test_validation.py``scripts/process-gate.mjs` |
| #42 | [CODE-REVIEW-42-r6.md](CODE-REVIEW-42-r6.md) | code · r6 | 🟡 жёлтый | 0 | 1 | Mypy strict (блок 3, AC4) не имеет механизма исполнения в CI — только текстовый контрак…; 1. pyproject.toml [tool.ruff] include перечисляет scripts/.py и tests_backend//.py нара… | `validate.yml``mutation-gate.yml``const.py``projection.py``plans.py``scripts/gate-reuse.mjs``tests_backend/test_validation.py``scripts/process-gate.mjs` |
| #39 | [SPEC-REVIEW-39-r1.md](SPEC-REVIEW-39-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 4 | нет обязательных продуктовых разделов §7.1 «сценарий» и «что человек увидит»; i18n-раздел не перечисляет ключи, DoR §2.5 не закрыть; нет разделов «Риски» и «Release-артефакты», обязательных по §7.1; AC4 объединяет два разных момента наступления hard без единого UI-контракта | `docs/specs/039-large-backdrops.md` |
| #39 | [CODE-REVIEW-39-r1.md](CODE-REVIEW-39-r1.md) | code · r1 | 🟡 жёлтый | 0 | 3 | отмена гард-диалога во время busy не отменяет применение; «одно число, один источник» нарушено для HARD_DIMENSION; AC8 (EXIF-ориентация) не доказан ни тестом, ни явной записью; AC3/AC9 в ТЗ помечены «паритет-юнит», а по факту паритет base64 | `src/backdrop-pick.ts``src/hp-dialog.ts``demo/serve.mjs``backdrop-pick.ts``backdrop-probe.ts``PROCESS.md``docs/TESTING.md``demo/smoke_backdrop_guard.mjs` |
| #39 | [CODE-REVIEW-39-r1.md](CODE-REVIEW-39-r1.md) | code · r1 | 🟡 жёлтый | 0 | 3 | отмена гард-диалога во время busy не отменяет применение; «одно число, один источник» нарушено для HARD_DIMENSION; AC8 (EXIF-ориентация) не доказан ни тестом, ни явной записью; AC3/AC9 в ТЗ помечены «паритет-юнит», а по факту паритет base64 (b64ParityWithLegacyLoo… | `src/backdrop-pick.ts``src/hp-dialog.ts``demo/serve.mjs``backdrop-pick.ts``backdrop-probe.ts``PROCESS.md``docs/TESTING.md``demo/smoke_backdrop_guard.mjs` |
| #39 | [CODE-REVIEW-39-r2.md](CODE-REVIEW-39-r2.md) | code · r2 | 🟢 зелёный | 0 | 0 | два из трёх новых stillCurrent()-чеков не имеют собственного мутанта | `src/backdrop-pick.ts``src/backdrop-probe.ts``smoke_backdrop_guard.mjs` |
| #33 | [SPEC-REVIEW-33-r1.md](SPEC-REVIEW-33-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 3 | статус implemented не существует ни в перечислении, ни в каноне; 4 из 7 «const-деклараций фронта» для parity-теста не существуют; AC6 описывает несуществующее поведение как «расширение теста» | `scripts/config-field-registry.mjs``docs/CONFIG-COMPATIBILITY.md``houseplan-card.ts``houseplan-editor-runtime.ts``CONFIG-COMPATIBILITY.md``src/logic.ts``src/types.ts``src/plan-optimizer.ts` |
| #33 | [CODE-REVIEW-33-r1.md](CODE-REVIEW-33-r1.md) | code · r1 | 🟡 жёлтый | 0 | 3 | AC7-тест не может поймать то, для чего он написан; Дубликат записи в обоих CHANGELOG и в ARCHITECTURE.md; config-audit.mjs расширил exit-code 3 за пределы согласованного контракта, и для decisi… | `test/config-schema-parity.test.mjs``scripts/config-schema-manifest.json``scripts/config-schema.json``src/houseplan-card.ts``config-schema.json``docs/CHANGELOG.md``docs/CHANGELOG.ru.md``docs/ARCHITECTURE.md` |
| #33 | [CODE-REVIEW-33-r2.md](CODE-REVIEW-33-r2.md) | code · r2 | 🟢 зелёный | 0 | 0 | AC6 не имеет штатного регрессионного теста на изолированные decision-required/drop-on-v… | `test/config-audit.test.mjs``oldest-supported.json` |
| #32 | [SPEC-REVIEW-32-r1.md](SPEC-REVIEW-32-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | DoR-пункт «влияние на производительность и бюджеты названо» не закрыт | `docs/specs/032-unified-danger-confirmation.md``hp-confirm.ts``AGENTS.md``docs/specs/337-lazy-editor-chunk.md``bundle-budget.mjs` |
| #32 | [SPEC-REVIEW-32-r1.md](SPEC-REVIEW-32-r1.md) | spec · r1 | 🟡 жёлтый | 0 | 1 | DoR-пункт «влияние на производительность и бюджеты названо» не закрыт, хотя задача доба… | `docs/specs/032-unified-danger-confirmation.md``hp-confirm.ts``AGENTS.md``docs/specs/337-lazy-editor-chunk.md``bundle-budget.mjs` |
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.