Commit Graph
2407 Commits
Author SHA1 Message Date
Codex ebc577d27e docs: ARCHITECTURE называет 60 символов и отсутствие примитивов (#593, ревью r1 M1)
Medium 1 по делу: ТЗ §9 называло условие явно — «если там названо число 44 или
союз с примитивами», — условие сработало, а правки не было. Абзац про ленивый
граф арта (#474) до сих пор говорил «the 44 SVG drawings» и молчал о том, что
двенадцати примитивов больше нет.

Теперь там 60 и прямо сказано: библиотека состоит только из дизайнерского арта,
поэтому чанка ждут все предметы, а не 48 из 60. Это же снимает последнее место в
документации, где жило прежнее обещание «двенадцать рисуются всегда» (Q2).

Issue: #593
User-Visible: no
2026-09-19 14:30:35 +03:00
claude[bot] f721307d0f docs: review document for #593
Issue: #593
User-Visible: no
2026-09-19 11:21:53 +00:00
Claude 7df2740f1c feat(furniture): пакет 0.4.0 — 60 дизайнерских символов вместо 44 плюс 12 примитивов
Встроенная библиотека мебели была смешанной: 44 предмета рисовал дизайнер, а
12 — код, прямоугольниками и эллипсами в unit box. Они выбивались из стиля, и
три категории меню (`computer`, `hood`, `oven`) вообще не открывались, потому
что вида сверху для них не было.

Пакет 0.4.0 перерисовывает все 56 существующих публичных ID и добавляет четыре
новых: `computer`, `hood`, `oven`, `cactus`. Каталог становится равен поставке:
60 символов, 32 непустые категории.

Совместимость. Ни один сохранённый план не мигрирует: положение, размер,
поворот, отражение, цвет, прозрачность и толщина линии не трогаются, а
default-размеры всех 56 прежних ID совпадают со старыми до числа — таблица
зашита в `test/furniture.test.mjs`, чтобы сдвиг было видно тестом, а не глазами.

Ловушка, ради которой примитивы удалены целиком. Библиотека собиралась союзом
каталога и `LEGACY_FURNITURE`, и обе половины несли ОДНИ И ТЕ ЖЕ публичные ID.
`BY_ID` — это `Map`, она оставляет последнюю запись, поэтому примитив молча
побеждал дизайнерский рисунок, который его заменял: задача выглядит выполненной,
12 предметов не обновились, ни один существующий тест этого не видит. Поэтому
`LEGACY_FURNITURE`, `RETAINED_IDS`, тип `Prim`, `box()` и `primitivePathD`
удалены, а на дубликаты в каталоге стоит тест и мутант.

Два продуктовых решения владельца (#593):

- `cactus` живёт в категории `plant`, а не `exercise`, как предлагал пакет:
  плитка «Тренажёр» рисует тренажёр, и открывать её на кактус — врать о
  содержимом палитры. `exercise` остаётся скрытой пустой категорией, непустых
  становится 32, а не 33;
- при отказе ленивого чанка с рисунками не рисуется НИЧЕГО. Прежде 12
  примитивов рисовались всегда, и `docs/FURNITURE.md` это обещал; обещание
  снято. Это единственное место, где задача ухудшает наблюдаемое поведение, и
  оно проверяется смоком, а не словом.

Бюджеты. Ревью ТЗ показало, что «бюджет ленивого графа защищён» было
заявлением без гейта: размеры печатались в отчёт и ни с чем не сравнивались.
Добавлены `lazyGraphCeilingViolation` и два настоящих потолка со своим мутантом.
Стартовый граф ушёл ниже полосы, поэтому `INITIAL_VIEW_GZIP_CEILING` опущен
292 400 → 291 400 — вторая половина храповика, без которой выигрыш отыграется.

Провенанс. Документ пакета воссоздан под 0.4.0: грант владельца, имя архива и
его SHA-256. Это единственная исполнимая защита от повторения истории #159, и
она не ослаблена — число проверок в тесте не уменьшилось, а мутант подменяет
хеш и обязан её покраснить.

Свидетели: пять новых мутантов, новая golden-сцена `furniture-new-symbols-light`
для четырёх новых ID, матрица 63 → 64. Шестой мутант правится, а не добавляется:
`furniture-placement-needs-art` ссылался на удалённое поле `g` и переставал
компилироваться — раннер честно отличал это от «пойман» и отчитывался
setup-failure. Ложь мутанта осталась прежней по смыслу, убрана только ветка про
примитив.

i18n: 7 ключей × 4 локали. `furn.cat_exercise` не добавлен — категория скрыта.

Issue: #593
User-Visible: yes
2026-09-19 13:38:49 +03:00
claude[bot] ad20e23cc4 docs: review document for #594
Проверка (CI) / Классификация изменённых файлов (push) Successful in 36s
Проверка (CI) / HACS: валидация репозитория (push) Skipped
Проверка (CI) / Hassfest: манифест интеграции (push) Skipped
Проверка (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) Skipped
Проверка (CI) / Предполёт: документация, провенанс, процесс (push) Failing after 47s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Failing after 1m1s
Проверка (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
Проверка (CI) / Геометрия: TS/Python parity исполнена (push) Skipped
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Skipped
Проверка (CI) / Доказательство выполненных проверок (push) Failing after 45s
Issue: #594
User-Visible: no
2026-09-19 08:35:45 +00:00
claude[bot]andClaude 2fd166f955 docs: review document for #594
Issue: #594
User-Visible: no
2026-09-19 11:08:06 +03:00
ClaudeandClaude 44c3f0ab63 test: закрыть отпечаток документации и добить свидетеля полей (#594)
Две находки код-ревью r1 из трёх; третья — эталоны — снаружи песочницы, см.
комментарий в issue.

**Отпечаток скриншотов.** `check-docs` краснел ожидаемо: отпечаток считается от
всего `src/**`, а диф его трогает. Прогнал `npm run docs:accept -- --identical`
— все одиннадцать кадров совпали с закоммиченными **попиксельно**, поэтому
принят только отпечаток исходников (`b678af43`), ни один PNG не переснят. Это
и есть доказательство среды по правилу #334/#401: снимать можно где угодно,
принять получится лишь там, где кадры воспроизводятся.

**Свидетель полей.** Ревьюер прав: снимок черновика доказывал «пишет только
своё» для трёх полей из восьми, а перетипизированный `FILL_CHOICES` и выбор
зоны исполнимого oracle не имели вовсе. Добавлены две проверки по образцу
соседних: смена зоны меняет только `_areaSel`, смена режима заливки — только
`_roomFill`. Зона переключается на «Без зоны»: свободных зон в фикстуре может
не остаться, а этот вариант есть всегда, и имя уже заполнено, поэтому
автоподстановка имени по зоне в игру не вступает.

Issue: #594
User-Visible: no
2026-09-19 11:08:05 +03:00
claude[bot]andClaude b53cca01d3 docs: review document for #594
Issue: #594
User-Visible: no
2026-09-19 11:08:04 +03:00
ClaudeandClaude 4344ede13a feat: общий набор контролов формы и диалог комнаты по нему (#594)
Шаг 1 эпика #591. Набор поднят из редактора боковой панели — он сделан по
макетам дизайнера и уже живёт в продукте, — а не собран заново по прототипу.

Стили набора выдаёт генератор, параметризованный именами: контейнер формы,
префикс классов, карточки, футер и токены цвета. Это не украшение архитектуры,
а условие переезда панели на общий источник: тест с замороженной фикстурой
показывает, что с параметрами панели генератор отдаёт её нынешние правила
дословно — карточку, обводку фокуса, выключенное состояние и ряд-переключатель.
После этого переезд станет подстановкой, а не редизайном, и пиксели панели не
дрогнут. Сама панель в этом коммите не тронута.

Диалог комнаты собран в четыре карточки: «Основное», «Заливка», «Источники»,
«Размеры шрифтов». Порядок полей прежний, записи прежние — те же ключи
черновика, те же условия «Сохранить», тот же `hp-color-opacity` с атомарной
записью цвета и прозрачности. Пояснения уехали под «?» у заголовков групп
(решение владельца 18.09), выбор источника стал сегментированным
переключателем — под капотом это по-прежнему радиогруппа, поэтому стрелки и
скринридер работают как раньше.

Два измерения определили форму решения, и оба стоило сделать до кода.

Первое: лист набора в синхронном графе дал +1459 Б gzip и пробил потолок
initial View на 415 Б. Диалоги — инструмент администратора, во View их не
открывают, поэтому лист уехал в ленивый редакторский граф и вносится в теневой
корень при открытии диалога — тем же способом, которым это делает боковая
панель. Потолок не поднимался.

Второе: `css` с интерполяцией запрещён минификатором сборки (он намеренно
падает, чтобы не зависеть от рантайма), поэтому лист собирается `unsafeCSS`.
Цена — несжатые пробелы генератора, замерено 59 Б gzip; копия литералом стоила
бы расхождения с генератором, то есть единого источника.

Оставшийся рост initial View — 291 356 → 291 872 Б (+516) — это четыре текста
подсказок в двух встроенных локалях. Тексты сокращены до одного предложения:
подсказка под «?» и должна быть короткой.

`_renderRoomSource` переехал в модуль комнаты вместе со стабом карточки: у него
остался ровно один потребитель.

Issue: #594
User-Visible: yes
2026-09-19 11:08:03 +03:00
claude[bot] e249e3dbc2 docs: review document for #596
Issue: #596
User-Visible: no
2026-09-19 07:43:58 +00:00
claude[bot] 0ebefbb189 docs: review document for #593
Issue: #593
User-Visible: no
2026-09-19 06:19:11 +00:00
claude[bot] 41722e159b docs: review document for #595
Issue: #595
User-Visible: no
2026-09-19 06:12:46 +00:00
claude[bot] 2167d43968 docs: review document for #593
Issue: #593
User-Visible: no
2026-09-19 06:03:36 +00:00
claude[bot] dcd6657581 docs: review document for #593
Issue: #593
User-Visible: no
2026-09-19 00:24:41 +00:00
claude[bot] 073c45b043 docs: review document for #594
Проверка (CI) / Классификация изменённых файлов (push) Successful in 17s
Проверка (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 31s
Проверка (CI) / HACS: валидация репозитория (push) Failing after 22s
Проверка (CI) / Hassfest: манифест интеграции (push) Failing after 21s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Failing after 38s
Проверка (CI) / Геометрия: TS/Python parity исполнена (push) Skipped
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Skipped
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 7m40s
Проверка (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
Проверка (CI) / Доказательство выполненных проверок (push) Failing after 17s
Issue: #594
User-Visible: no
2026-09-18 20:16:21 +00:00
claude[bot] df7a62c82e docs: review document for #594
Issue: #594
User-Visible: no
2026-09-18 19:59:37 +00:00
claude[bot] 7ce9e6437f docs: review document for #592
Issue: #592
User-Visible: no
2026-09-18 19:31:17 +00:00
claude[bot] d244329857 docs: review document for #592
Issue: #592
User-Visible: no
2026-09-18 17:34:42 +00:00
claude[bot] b49b124cc6 docs: review document for #592
Issue: #592
User-Visible: no
2026-09-18 16:15:53 +00:00
claude[bot] 8ec85ac0f6 docs: review document for #592
Issue: #592
User-Visible: no
2026-09-18 15:55:17 +00:00
Claude 01fe735079 docs: убрать из документации отклонённую подсветку убираемой комнаты (#589)
Проверка (CI) / Геометрия: TS/Python parity исполнена (push) Successful in 2m50s
Проверка (CI) / Классификация изменённых файлов (push) Successful in 20s
Проверка (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 41s
Проверка (CI) / HACS: валидация репозитория (push) Failing after 15s
Проверка (CI) / Hassfest: манифест интеграции (push) Failing after 22s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 44s
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Failing after 6m13s
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 7m57s
Проверка (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
Проверка (CI) / Доказательство выполненных проверок (push) Failing after 18s
`USER-GUIDE.ru.md`, `FILTERING.md` и `VACUUM.md` описывали «подсветку
убираемой комнаты» пылесоса как существующую фичу, которую подавляет
«Всегда статичный значок». Фичи нет: #12 закрыт `not_planned` 2026-08-27,
`room_highlight` встречается в `src/**` ровно один раз — объявлением поля
схемы в `types.ts:184`, без единого runtime-потребителя.

Формулировка уже утекла как факт в ТЗ #588 (ревью ТЗ r1, M2). Правится
источник: везде остаются только реально существующие слои — puck, след и
предупреждение о маршруте на несопоставленной карте. В `VACUUM.md` поле
схемы помечено как зарезервированное: оно принимается и сохраняется, чтобы
старые планы читались, но ничего не рисует.

Issue: #589
User-Visible: no
2026-09-18 16:08:02 +03:00
Claude 87a76bbff5 docs: убрать PDF из строки чек-листа нового режима (#588)
Находка Low код-ревью r1: архитектурный PDF-экспорт вообще не рисует маркеры
устройств — ни в одном режиме (`src/pdf/pdf-scene.ts`, намеренное ограничение
с 2026-09-07). Строка чек-листа требовала от ручного тестировщика проверить
поверхность, которой нет, и превращала давнее свойство архитектуры в
кажущийся дефект нового режима.

Issue: #588
User-Visible: no
2026-09-18 14:52:15 +03:00
claude[bot] 31864488a7 docs: review document for #588
Issue: #588
User-Visible: no
2026-09-18 11:44:41 +00:00
Claude 99e1765d22 feat: режим «Значение + статичный значок» (#588)
Пятый вариант «Отображение»: маркер показывает выбранное значение и при этом
никогда не меняет цвет — ни по состоянию, ни по тревоге, ни по недоступности,
ни под цвет RGB-света, ни по активности.

Четыре прежних режима задавали одним выбором две независимые вещи: что
нарисовано внутри маркера и красится ли он состоянием. Поэтому вместо
сравнения с одним токеном появились два производных предиката рядом с
`normalizeDeviceDisplay` — `displayWantsValue` и `displayIsNeutral`, — и их
спрашивают политика, слой пульсации, внешний бейдж, редактор и три ветки
живого слоя пылесоса.

Две ловушки, из-за которых режим не сводится к одной строке в словаре:

- быстрый путь «статичному маркеру источники не нужны» (`sourceDetails: false`)
  — это основной путь рендера плана, карточки пространства и PDF. Он оставлен
  только режиму без значения: иначе число пропало бы именно на плане и
  осталось в предпросмотре редактора;
- три ветки живого пылесоса сравнивают режим строкой и не читают политику,
  поэтому зелёная политика их не гарантирует. Свидетель держит две
  конфигурации карты: сопоставленная доказывает puck и след, несопоставленная
  — бейдж маршрута (при совпадающей калибровке маршрут `ready`, и бейджа не
  было бы ни в одном режиме). Бейдж проверяется при наполненном буфере
  позиций, иначе его отсутствие объяснялось бы первой веткой.

Потолок initial View перецентрирован 291_700 → 292_400 без изменения общего
бюджета: измеренный факт 291 346 Б оставлял под прежним центром 354 Б —
внутри шумовой полосы метрики.

Эталон: в `device-icon-state-table-{light,dark}` включённая RGB-лампа
переведена в новый режим. Кадры обязаны разойтись; приёмка — отдельным
коммитом класса D с полного линуксового артефакта Validate.

Issue: #588
User-Visible: yes
2026-09-18 13:40:57 +03:00
claude[bot] 03aaad3e2b docs: review document for #588
Issue: #588
User-Visible: no
2026-09-18 08:54:38 +00:00
claude[bot] eaaba7ab42 docs: review document for #588
Issue: #588
User-Visible: no
2026-09-18 08:44:10 +00:00
claude[bot] 5b7add94d1 docs: review document for #588
Issue: #588
User-Visible: no
2026-09-18 08:29:07 +00:00
Claude a6185e295d Prepare v1.77.0-beta.1
Package the reviewed furniture footprint fix with synchronized release metadata; the golden-manifest platform, composite CI proof, strict screenshot-freshness switch and stable Full Performance base ride along internally.

Release: v1.77.0-beta.1
Issue: #571
Issue: #573
Issue: #584
Issue: #586
Issue: #587
User-Visible: yes
2026-09-18 09:32:55 +03:00
claude[bot] 0de14ead71 docs: review document for #571
Проверка (CI) / Классификация изменённых файлов (push) Successful in 18s
Проверка (CI) / Мутанты по диффу (1/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (4/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (5/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (6/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (2/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (3/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Предполёт: документация, провенанс, процесс (push) Failing after 31s
Проверка (CI) / HACS: валидация репозитория (push) Failing after 22s
Проверка (CI) / Hassfest: манифест интеграции (push) Failing after 22s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 43s
Проверка (CI) / Геометрия: TS/Python parity исполнена (push) Successful in 2m39s
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Failing after 5m47s
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 7m38s
Проверка (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
Проверка (CI) / Доказательство выполненных проверок (push) Failing after 16s
Issue: #571
User-Visible: no
2026-09-17 20:59:57 +00:00
Codex f77bdaf52e docs: переснять индекс скриншотов после правки run.mjs (#571)
Разовая плата за провенанс: `demo/golden/run.mjs` входит в корпус отпечатка
исходников, поэтому правка объявила индекс скриншотов документации устаревшим.
Снято workflow «Скриншоты документации» (прогон 35270230061, ref — ветка
задачи). Все одиннадцать кадров совпали с закоммиченными **байт-в-байт**:
принят только отпечаток, картинки не менялись — сбор провенанса ничего не
рисует.

`check-docs --strict` зелёный.

Issue: #571
User-Visible: no
2026-09-17 23:23:37 +03:00
claude[bot] df9031b1ba docs: review document for #573
Issue: #573
User-Visible: no
2026-09-17 19:40:37 +00:00
Claude 2ea1e5e62a ci: reviewed run судится только release-потребителем (#573, ревью r1 M1)
`loadGithubProofContext` спрашивал объявленный `Baseline-Reviewed` run для
любого потребителя, а `evaluateCiProof` судил его при `reviewedRun: null` —
merge и review начинали зависеть от доступности старого run по чужой причине.
Теперь запрос делается только с `withReviewedRun` (release-gate передаёт его
вместе с ожиданиями), а проверка стоит внутри `if (expected)` — рядом со
сверкой evidence, где ей и место. Тест: без ожиданий merge/review green при
reviewedRun undefined/null/пустом; фейковый fetch доказывает, что запроса нет.

Issue: #573
User-Visible: no
2026-09-17 22:26:19 +03:00
claude[bot] da156dd10b docs: review document for #573
Issue: #573
User-Visible: no
2026-09-17 19:17:34 +00:00
Claude 47f36e571c ci: proof различает продуктовое дерево и overlay эталонов (#573)
Приёмка эталонов на beta.3 (`ad4000f9`) стоила второго полного Validate —
22 минуты, из них 17–22 на шард мутантов. Причина одна: корпус отпечатка
(`source-fingerprint.mjs`) называет `demo/golden` строкой-каталогом, а
замыкание входов раскрывало каталог во все текстовые файлы под ним, включая
`baselines-index.json`. Индекс становился входом smoke, performance_smoke и
каждого гарда через `serve.mjs`: на реальной паре C→B ключи smoke/perf были
DIFFERENT, отпечатки 181 из 183 браузерных свидетелей менялись, журнал их не
пропускал.

- `check-inputs.mjs`: `BASELINE_OVERLAY` — раскрытие каталога не выдаёт
  overlay; явный корень golden и явная ссылка на файл — как были. На паре
  C→B: ключи smoke/perf/parity/backend same, golden DIFFERENT; отпечатки
  743 из 744 равны; план мутантов B с журналом C — 0–1 на шард вместо 38–44
- `ci-proof.mjs`: составное evidence — product tree без overlay, overlay
  (tree, sha256 индекса, run из `Baseline-Reviewed`), content-ключи всех
  реюзных job (исполненных тоже); `evaluateCiProof({expected, reviewedRun})`
  сверяет с локальным расчётом, fail-closed на ключ, tree, индекс, reviewed
  run, маркер с чужим ключом; proof без evidence при ожиданиях — stale
- `release-gate.mjs` / `release-prerelease.mjs`: ожидания считаются на
  checkout кандидата (`candidateExpectations`), чужой checkout — notice
- мутанты: `baseline-overlay-leaks-into-every-key`,
  `proof-trusts-evidence-it-could-verify`,
  `reused-marker-key-unchecked-against-candidate`,
  `product-tree-identity-counts-baselines`; перенацелен
  `ci-proof-ignores-run-attempt`
- docs: TESTING (правило overlay), DEVELOPMENT (evidence в release proof),
  STATUS

Issue: #573
User-Visible: no
2026-09-17 22:00:15 +03:00
claude[bot] 06bf9b6921 docs: review document for #584
Проверка (CI) / Классификация изменённых файлов (push) Successful in 20s
Проверка (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 34s
Проверка (CI) / HACS: валидация репозитория (push) Failing after 19s
Проверка (CI) / Hassfest: манифест интеграции (push) Failing after 27s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Failing after 44s
Проверка (CI) / Геометрия: TS/Python parity исполнена (push) Skipped
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Skipped
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 6m17s
Проверка (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
Проверка (CI) / Доказательство выполненных проверок (push) Failing after 15s
Issue: #584
User-Visible: no
2026-09-16 21:19:57 +00:00
claude[bot] 62d86e0f83 docs: review document for #584
Issue: #584
User-Visible: no
2026-09-16 21:12:40 +00:00
Codex 9bf41ec305 test: принять эталоны мебели и индекс скриншотов (#584)
Девять golden-кадров приняты с полного линуксового артефакта Validate (прогон
35144164510, `full=true` на материале задачи); остальные 163 сохранены без
изменений, свидетелей среды 107.

Каждый разошедшийся кадр просмотрен глазами и объяснён:

- шесть мебельных (`furniture-variants-*`, `furniture-placement-preview-light`,
  `furniture-plan-art-dark`, `furniture-transform-*`) — предметы занимают
  заявленный бокс целиком. Там же видна вторая правка: у значка «Журнальный
  стол, круглый» четыре ножки встали по местам внутри круга, а раньше две
  болтались у нижнего края — ровно тот механизм смещения деталей, который
  назван в шапке issue;
- два декоративных (`decor-over-opaque-hover-light`, `decor-over-glow-base-dark`)
  — в сцене стоит диван, его контур дорос до границ бокса; форма, цвет и
  положение прежние;
- `isometric-stage3-overlays-dark` — та же мебель в скрытом 2.5D-виде.

Посторонних изменений нет: расхождение 0,16–1,48 % пикселей кадра и целиком
внутри силуэтов мебели.

Индекс скриншотов документации переснят там же (прогон 35144241294): все
одиннадцать кадров совпали с закоммиченными байт-в-байт, принят только
отпечаток — мебель ни в один кадр документации не попадает.

Трейлер `Release:` называет ближайшую бету линейки по образцу #577 и #580;
если номер линейки окажется другим, он правится при подготовке кандидата.

Issue: #584
User-Visible: no
Release: v1.77.0-beta.1
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/35144164510
2026-09-16 23:11:44 +03:00
Codex ef3bc6d133 fix: габарит мебели равен заявленным размерам (#584)
Указанные ширина и глубина теперь совпадают с видимым габаритом предмета.
Раньше рисунок занимал внутри своего бокса около 88 % стороны, поэтому
«Кухонный напольный модуль» 60 × 60 выглядел меньше «Посудомоечной машины»
60 × 60 примерно на 14 % по стороне и на 30 % по площади: цифры совпадали,
картинка врала.

Пак `fix-584-1` от дизайнера (issue, комментарий от 16.09) проверен исполнением
своей метрикой, а не его отчётом: границы считаются аналитически по той же
математике, что у продакшен-экспорта в PDF. Все 44 плановых SVG заполняют
`viewBox` с худшим отклонением 0.000000 при допуске ТЗ 0,1; `pack.json` и 33
иконки меню побайтно прежние. Для сравнения, прежний набор в `dev` давал 65
нарушений того же контракта.

Что сделано в коде:

- `scripts/svg-path-bounds.mjs` — границы рисунка по настоящим экстремумам
  кривых (дуги приводятся к кубикам). Контрольные точки в габарит не входят:
  иначе «заполняет бокс» проверялось бы по выпуклой оболочке и поля проходили
  бы мимо. Генератор — `.mjs` и обязан работать без сборки TypeScript, поэтому
  разбор здесь свой; тест сверяет его с `parseSvgPath` продакшена на всей
  библиотеке, чтобы реализации не разъехались молча.
- `scripts/furniture-path-join.mjs` — склейка нескольких `<path>` с
  канонизацией только начального `moveto`. Приём подсказан патчем в поставке
  дизайнера; реализация и свидетели свои. Прежний `paths.join(' ')` продолжал
  координаты предыдущего пути: замер показал, что у иконок меню `stairs` и `tv`
  части рисунка уезжали за `viewBox` 110 × 110 — до 119. Теперь склейка
  побайтно воспроизводит «каждый путь из своего нуля».
- генератор проверяет плановый символ по контракту: один путь, подконтуры с
  абсолютной `M`, рисунок заполняет `viewBox` (допуск 0,1).
- `src/furniture.ts` — legacy `plant` растянут от центра в 1/0.96. Это
  единственный из двенадцати retained-примитивов с полями (0.02…0.98 unit box);
  форма прежняя, габарит стал заявленным.

Свидетели: `test/furniture-visual-bounds.test.mjs` (AC1–AC3, AC5 и сверка двух
реализаций границ) и `test/furniture-path-join.test.mjs` (AC4, включая реальные
`stairs`/`tv`). У AC1 есть положительный контроль: та же функция обязана видеть
поля на геометрии из шапки issue — утверждение «полей нет» стоит ровно столько,
сколько стоит измерение. Мутанты `furniture-symbol-may-keep-inner-padding` и
`furniture-paths-joined-without-reset` возвращают прежнее поведение и краснеют;
прогнаны лично через `mutation-gate --id=`.

Миграции пользовательских данных нет: координаты, размеры, поворот и
зеркалирование сохраняются.

npm test 2743/2742/0 fail, typecheck чистый, furniture:check зелёный.

Issue: #584
User-Visible: yes
2026-09-16 23:02:11 +03:00
claude[bot] e0b16c76d7 docs: review document for #584
Проверка (CI) / Классификация изменённых файлов (push) Successful in 27s
Проверка (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 46s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 1m17s
Проверка (CI) / HACS: валидация репозитория (push) Failing after 20s
Проверка (CI) / Hassfest: манифест интеграции (push) Failing after 17s
Проверка (CI) / Геометрия: TS/Python parity исполнена (push) Successful in 3m24s
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Failing after 8m20s
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 11m18s
Проверка (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
Проверка (CI) / Доказательство выполненных проверок (push) Failing after 16s
Issue: #584
User-Visible: no
2026-09-16 19:50:17 +00:00
claude[bot] 1c0ed73133 docs: review document for #584
Issue: #584
User-Visible: no
2026-09-16 19:42:43 +00:00
claude[bot] 7c5fd32a08 docs: review document for #586
Issue: #586
User-Visible: no
2026-09-16 19:23:02 +00:00
Codex 21923c344d docs: пересняты и приняты кадры документации (#586)
Долг, который копился ровно потому, что гейт свежести не включался. Последняя
приёмка (`1734b077`) была отпечаток-онли — `acceptance.lastWriteWasFingerprintOnly:
true`, — а сами картинки лежат с `15e0efe3`. С тех пор индекс разошёлся с
`src/**` и на кандидате обязан был краснеть, но краснеть ему было нечем.

Снято workflow «Скриншоты документации» (прогон 35137580137, `ref=dev`,
Chromium 151.0.7922.34, oxipng 10.2.0) — теми же, что и закоммиченный набор.
Семь кадров совпали с закоммиченными байт-в-байт: это и есть доказательство
среды по #401, порог свидетелей 2.

Разошлись четыре, и все четыре — подпиксельная кайма, а не содержимое:

| кадр | отличий всего | из них >10 | maxΔ |
|---|---|---|---|
| view-desktop | 177 (0,02 %) | 0 | 10 |
| view-touch | 83 (0,03 %) | 2 | 17 |
| room-card | 85 (0,17 %) | 0 | 10 |
| device-info | 137 (0,02 %) | 0 | 5 |

Посмотрел глазами при шестикратном увеличении: у `room-card` меняется свечение
красной подписи «35» на пару единиц канала, у `view-touch` — сглаживание
зелёного значка; геометрия, палитра, подписи и композиция те же.

Отдельно проверил, что это не шум съёмки: перезапустил тот же прогон вторым
заходом и сравнил артефакты — **все одиннадцать кадров совпали байт-в-байт**.
Харнесс детерминирован, значит расхождение принесено кодом, а не раннером, и
объявлять его декларацией — правильно, а не удобно.

`check-docs --strict` зелёный.

Issue: #586
User-Visible: no
2026-09-16 22:06:17 +03:00
claude[bot] 303c0843e7 docs: review document for #587
Issue: #587
User-Visible: no
2026-09-16 18:50:14 +00:00
Codex ca74a5c2ee Release v1.76.0
Promotion-only на вершине v1.76.0-beta.5: семь источников версии, снимки
собранного бандла и релизные метаданные. Продуктовый код в этом коммите не
двигается.

Линейка агрегируется от стабильной v1.75.0. Пользователю: щипковое
масштабирование в приложении Home Assistant больше не рвёт картинку — на
больших планах с фоном «Следует за Солнцем» пропали фиксированные белые
провалы (#582), план перестал переключаться между режимами композитинга
посреди жеста (#579), а щипок, начатый на значке устройства, не запускает его
действие и не открывает два окна сразу (#578, #563). Появился выбор источника
солнечных лучей — от внутренних или внешних углов окна (#577). «Как у
пространства» снова возвращает комнате цвет пространства и лечит застрявшие
(#581). Близко стоящие значки не перехватывают нажатие друг у друга, а
клавиатурный фокус получает ту же подсказку, что и мышь (#564, #565). План,
изменённый в другом браузере, не откатывается (#543), и при перетаскивании у
края не появляется пустая полоса (#544). Мельче: #561, #554, #545, #580.
Внутреннее в линейке: #583, #547, #556, #560, #566, #567, #568, #569.

Из тела исключён #580: этот дефект жил только внутри бета-линейки — режим
внешних углов окна (#577) не выходил ни в одном стабильном релизе, поэтому
пользователю он «исправлением» не является. В ченджлоге он остаётся.

Записано, а не замолчано: индекс свежести скриншотов документации устарел с
коммита 699ab471, а гейт Validate, который обязан был это поймать, лишь
предупреждает — режим выбирается сравнением с многострочным выводом CLI
(#586). Одиннадцать кадров документации от той правки измениться не могли: ни
одна из сцен не рисует скрытый 2.5D-вид, а отпечаток считается по всему
`src/**`. Пересъёмка требует Chromium, которого в этой песочнице нет.

npm test 2720/2719/1 fail (только bundle-tree до этого коммита), typecheck
чистый, контракт релиза зелёный на всех семи источниках, тело проходит #328
(`release:notes --verify`), check-docs зелёный кроме отпечатка скриншотов.

Issue: #582
User-Visible: yes
Release: v1.76.0
2026-09-16 15:34:35 +03:00
Codex c4cd1f6af6 Кандидат v1.76.0-beta.5 после починки перфоманса
Трейлер `Release:` просит CI прогнать тяжёлые гейты — смоки, golden и полное
сравнение производительности — на этом SHA: кандидат 1734b077 был задержан
собственным гейтом производительности изометрии, регрессия из #583 починена
коммитом выше по §11.4 (та же задача, без повторного ревью, команда и её
результат записаны в issue).

Issue: #583
User-Visible: no
Release: v1.76.0-beta.5
2026-09-16 13:58:51 +03:00
Claude 1734b077af Prepare v1.76.0-beta.5
Package the reviewed sun-ray occlusion, room-colour inheritance and HA Companion day-cycle compositor fixes with synchronized release metadata; the hidden 2.5D refinement rides along internally.

Release: v1.76.0-beta.5
Issue: #580
Issue: #581
Issue: #582
Issue: #583
User-Visible: yes
2026-09-16 10:25:10 +03:00
claude[bot] 632e3969f5 docs: review document for #583
Проверка (CI) / Смоки в браузере (шард 1 из 3) (push) Skipped
Проверка (CI) / Смоки в браузере (шард 3 из 3) (push) Skipped
Проверка (CI) / Смоки: все шарды зелёные (push) Skipped
Проверка (CI) / Golden-кадры против принятых эталонов (push) Skipped
Проверка (CI) / Перф-смок: бюджет времени кадра (push) Skipped
Проверка (CI) / Геометрия: TS/Python parity исполнена (push) Skipped
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Skipped
Проверка (CI) / Предполёт: документация, провенанс, процесс (push) Failing after 46s
Проверка (CI) / Классификация изменённых файлов (push) Successful in 40s
Проверка (CI) / HACS: валидация репозитория (push) Skipped
Проверка (CI) / Hassfest: манифест интеграции (push) Skipped
Проверка (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) Skipped
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Failing after 1m7s
Проверка (CI) / Смоки в браузере (шард 2 из 3) (push) Skipped
Проверка (CI) / Доказательство выполненных проверок (push) Failing after 24s
Issue: #583
User-Visible: no
2026-09-16 07:08:33 +00:00
claude[bot] 8ae551167c docs: review document for #583
Issue: #583
User-Visible: no
2026-09-16 06:01:12 +00:00
Sergey Matyunin 5cae93501c fix: refine hidden 2.5D presentation (#583)
Issue: #583
User-Visible: no
2026-09-16 02:57:47 +03:00
claude[bot] ec2b3f3274 docs: review document for #583
Issue: #583
User-Visible: no
2026-09-15 18:18:06 +00:00
claude[bot] 5867ee02b6 docs: review document for #582
Проверка (CI) / Мутанты по диффу (4/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (5/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (6/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / HACS: валидация репозитория (push) Failing after 46s
Проверка (CI) / Hassfest: манифест интеграции (push) Failing after 59s
Проверка (CI) / Предполёт: документация, провенанс, процесс (push) Failing after 1m34s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 1m22s
Проверка (CI) / Геометрия: TS/Python parity исполнена (push) Successful in 3m28s
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 9m8s
Проверка (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
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Failing after 6m3s
Проверка (CI) / Доказательство выполненных проверок (push) Failing after 16s
Проверка (CI) / Классификация изменённых файлов (push) Successful in 33s
Проверка (CI) / Мутанты по диффу (1/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (2/6): затронутые свидетели краснеют (push) Skipped
Проверка (CI) / Мутанты по диффу (3/6): затронутые свидетели краснеют (push) Skipped
Issue: #582
User-Visible: no
2026-09-15 11:10:06 +00:00