Commit Graph
2068 Commits
Author SHA1 Message Date
Matyshandclaude[bot] ac625833f2 docs: accept rebased smooth zoom captures
Canonical capture: https://github.com/Matysh/houseplan-card/actions/runs/33318316300

Issue: #82
User-Visible: no
2026-08-30 16:11:35 +00:00
Matyshandclaude[bot] 511b1bb980 docs: accept settled smooth zoom captures
Canonical capture: https://github.com/Matysh/houseplan-card/actions/runs/33318010989

Issue: #82
User-Visible: no
2026-08-30 16:11:35 +00:00
Matyshandclaude[bot] 23b94b2e61 test: wait for settled camera in docs capture
Issue: #82
User-Visible: no
2026-08-30 16:11:35 +00:00
Matyshandclaude[bot] 7d50628672 fix: preserve structural adoption guard
Issue: #82
User-Visible: no
2026-08-30 16:11:35 +00:00
Matyshandclaude[bot] 4a202a0379 docs: refresh smooth zoom screenshots
Canonical capture: https://github.com/Matysh/houseplan-card/actions/runs/33317712876

Issue: #82
User-Visible: no
2026-08-30 16:11:35 +00:00
Matyshandclaude[bot] e2464cbb48 feat: add smooth viewport zoom transitions
Issue: #82
User-Visible: yes
2026-08-30 16:11:35 +00:00
claude[bot] ad10803a29 docs: review document for #82
Issue: #82
User-Visible: no
2026-08-30 16:11:35 +00:00
Matyshandclaude[bot] bb79ece0b3 docs: actualize smooth zoom specification
Issue: #82
User-Visible: no
2026-08-30 16:11:35 +00:00
Sergey Matyuninandclaude[bot] 2cf82d9156 docs: specify smooth viewport zoom
Issue: #82
User-Visible: no
2026-08-30 16:11:35 +00:00
Matysh e98f869826 ci: name the right issue in the range summary
Живой прогон #2157 показал огрех формулировки: база диапазона (#388)
представилась заголовком «База классификации (#387)». Текст верный, ссылка
чужая — читатель уходит не в тот issue разбираться, почему диапазон такой.

Заголовок теперь следует режиму, а не общей ветке кода. Закреплено тестом на
оба режима и обе формулировки.

Issue: #388
User-Visible: no
2026-08-30 19:05:24 +03:00
Matysh e39cd3dfa1 docs: refresh the screenshot fingerprint after the typing fix
Правка типов в #390 пересобрала бандл, а в него вшит отпечаток исходников —
скриншот-индекс стал формально протухшим, хотя ни один пиксель измениться не
мог: аннотации типов стираются, эмит тот же.

Это не рассуждение, а измерение. Канонический прогон «Скриншоты
документации» #130 (workflow_dispatch, ref=dev) снял кадры пином и вынес
вердикт:

  --- изменившихся PNG: 0
  --- Chromium: было «151.0.7922.34», стало «151.0.7922.34»
  --- oxipng: было «oxipng 10.2.0», стало «oxipng 10.2.0»
  ВЕРДИКТ: ничего не изменилось, принимать нечего.

Единственное, что изменилось в артефакте, — screenshots.json. Здесь ровно
он и обновлён: sourceFingerprint и десять sourceSha256 сцен. Хеши картинок,
версия браузера и версия упаковщика не тронуты — проверено полем за полем.

Issue: #390
User-Visible: no
2026-08-30 18:42:41 +03:00
claude[bot] 4e69078f90 docs: review document for #389
Issue: #389
User-Visible: no
2026-08-30 15:33:51 +00:00
Matysh 32c70ecd19 fix: stop the schema dump from poisoning the HA harness
Красный backend на dev — это два независимых дефекта, и ни один не был виден
в диффе.

Первый, 85 падений. scripts/dump-config-schema.py подменяет
custom_components и custom_components.houseplan пустышками, чтобы прочитать
схему без Home Assistant, и оставляет их в sys.modules навсегда. Вызывает его
в том числе pytest: tests_backend/test_config_schema_manifest.py идёт первым
по алфавиту. Дальше HA просил у загрузчика custom_components.houseplan,
получал пустышку без async_setup и отказывался поднимать интеграцию — «No
setup or config entry setup function defined». Каждый тест харнесса падал на
_setup с «assert False», и ни один не намекал на причину: подмена работает
для подмодулей, потому что __path__ у пустышки настоящий.

Подмена не убрана — без неё скрипт не выполнит свою задачу. Она стала
обратимой: sys.modules снимается до и возвращается после, включая отсутствие
ключа. Обратимость закреплена тестом.

Второй, 1 падение. test_furniture_flip_flags_survive_coordinate_
canonicalization_unchanged требовал CONFIG_SCHEMA(result) == result, но схема
на минимальном конфиге достраивает markers и settings и приводит целые к
float — тождества там нет и не было. Проверяется теперь неподвижная точка:
повторная валидация не меняет канонический вид, а флаги её переживают.

Диагностика шла через CI: в песочнице HA-харнесс не поднять, поэтому
временная ветка experiment/389-diag печатала, что именно видит загрузчик.
Она показала модуль без __file__ и без единого атрибута — namespace-подобную
пустышку, — и это вывело на подмену.

Issue: #389
User-Visible: no
2026-08-30 18:31:42 +03:00
claude[bot] 12165aae46 docs: review document for #390
Issue: #390
User-Visible: no
2026-08-30 14:47:55 +00:00
Matysh cbf5cc1baa fix: type the five any that slipped past the gate
Пять мест, найденных при разборе #388: они проехали мимо гейта #342, пока
диапазоны были узкими, и он их больше не покажет.

Кэш климата (houseplan-card.ts) сравнивается только по ссылке, значение не
читается ни разу — поэтому hass стал `unknown`: он и запрещает случайно
воспользоваться содержимым, и не врёт про форму объекта, которую HA нам не
обещает. Правила и маркеры типизированы по-настоящему, их типы известны.

Реестр HA (houseplan-editor-runtime.ts) описан минимальной структурной
формой: код читает ровно два поля и оба защищённо, так что форма честнее
`any` — она говорит, на что код опирается.

Ключ i18n `device_inbox.reason_excluded_integration` не нуждался в приведении
вовсе: он есть в словаре. Шаблонный ключ приведён к `I18nKey`, как уже
сделано в этом файле строкой 8013 — это утверждение о пространстве ключей, а
не отключение проверок; `as any` заодно снимал контроль и со второго
аргумента.

Поведение не меняется: аннотации типов стираются, эмит тот же. Бандл
пересобран, потому что в него вшит отпечаток исходников.

Issue: #390
User-Visible: no
2026-08-30 17:36:23 +03:00
Matysh 66db451280 ci: prove the range by judgement, not by a green verdict
Правка #388 уронила dev, и виновата подмена предиката. Я взял доказательством
`conclusion=success`, то есть оправдательный вердикт. Гейтам диапазона нужен
другой факт: судили ли этот коммит вообще. Упавший прогон коммит судил —
вердикт вынесен, автор его видел; переоткрывать такой коммит диапазоном не
надо. Не судил только отменённый.

Цена ошибки была наглядной. Backend на dev красный несколько дней по своей
причине (test_ha_import_export), успешных прогонов нет вовсе, поэтому база
уезжала на десятки коммитов назад. На 83d646c — docs-коммите — гейт
«новый код не добавляет any» предъявил 5 чужих находок из e4e1e370 и
8d431d6d и уронил frontend. Ровно тот сценарий обвинения невиновного, ради
которого делался #386, только устроенный мной.

Теперь `judgedShas` считает судимыми завершённые прогоны с любым вердиктом,
кроме cancelled, а `greenShas` остаётся для классификации (#387): там вопрос
другой — доказано ли, что тяжёлые гейты на этом дереве ПРОШЛИ. Два вопроса,
два предиката, и путать их дорого.

Запрос к API стал `status=completed` — надмножество, нужный предикат
применяет скрипт.

Issue: #388
User-Visible: no
2026-08-30 17:11:53 +03:00
Codex 3ae3ec0f48 docs: #42 spec revision 6 — final r4 fix by owner arbitration
User-Visible: no
Issue: #42
2026-08-30 17:04:34 +03:00
claude[bot] 83d646c51e docs: review document for #74
Проверка (CI) / Классификация изменённых файлов (push) Successful in 25s
Проверка (CI) / HACS: валидация репозитория (push) Skipped
Проверка (CI) / Hassfest: манифест интеграции (push) Skipped
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Skipped
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 52s
Проверка (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) Skipped
Проверка (CI) / Предполётные проверки: документация, провенанс, процесс (push) Failing after 1m59s
Issue: #74
User-Visible: no
2026-08-30 13:54:24 +00:00
Matysh 6d73d6e909 docs: refresh device editor screenshots
Issue: #74
User-Visible: no
2026-08-30 16:44:57 +03:00
Matysh 2e30daa399 test: include device history icons in demo harness
Issue: #74
User-Visible: no
2026-08-30 16:39:06 +03:00
claude[bot] 4b5c9f2382 docs: review document for #74
Issue: #74
User-Visible: no
2026-08-30 13:38:16 +00:00
Matysh a6b0850a0c test: update device alignment guide fixture
Issue: #74
User-Visible: no
2026-08-30 16:24:48 +03:00
Matyshandclaude[bot] fc63f3bf36 test: align device drag regression smokes
Issue: #74
User-Visible: no
2026-08-30 13:16:27 +00:00
Matyshandclaude[bot] bdf81fad58 feat: add device position undo history
Issue: #74
User-Visible: yes
2026-08-30 13:16:27 +00:00
Matyshandclaude[bot] 857537c620 docs: apply review notes for device position undo
Issue: #74
User-Visible: no
2026-08-30 13:16:27 +00:00
claude[bot] 861cb0ec94 docs: review document for #74
Issue: #74
User-Visible: no
2026-08-30 13:16:27 +00:00
Matyshandclaude[bot] df92f8d448 docs: actualize device position undo specification
Issue: #74
User-Visible: no
2026-08-30 13:16:27 +00:00
Sergey Matyuninandclaude[bot] f049d3b1eb docs: specify device position undo
Issue: #74
User-Visible: no
2026-08-30 13:16:27 +00:00
claude[bot] f0e0542c64 docs: review document for #42
Issue: #42
User-Visible: no
2026-08-30 13:03:44 +00:00
Codex 84008a0a8f docs: #42 spec revision 5 per SPEC-REVIEW-42-r3
User-Visible: no
Issue: #42
2026-08-30 15:55:26 +03:00
Matysh 65339f63ad ci: judge the push range from the last proven-green ancestor
#387 закрыл классификацию — какие job запускать. Здесь остаток того же
дефекта: гейты, которые судят сам диапазон коммитов. Провенанс, процессный
гейт и «новый код не добавляет any» брали диапазон от головы предыдущего
пуша, а concurrency отменяет прогон предыдущего пуша штатно. Тогда его
коммиты не судит никто: свой прогон отменён, а следующий пуш сравнивает уже
с ними. Окно не закрывается никогда.

Уязвим был прямой пуш в dev — основной режим конвейера. На ветках дефекта
нет: no-new-any там всегда считает от merge-base, а resolveValidationRange
подменяет осиротевший before на origin/dev (#315).

База стала последним предком с успешно завершённым Validate. Фолбэк, когда
такого нет, сознательно оставлен прежним — before, но с пометкой в summary
«диапазон недоказуем». Расширять диапазон здесь нельзя: гейт, который сам
красит прогон, лишил бы следующий пуш зелёного предка и запер dev в
красноте навсегда. Фолбэк обязан не зависеть от собственного успеха гейта.
Дыра сужается с «всегда, когда прогон предыдущего пуша отменён» до «когда
во всём окне обхода нет ни одного успешного прогона».

Находки no-new-any теперь называют коммит, добавивший строку: диапазон стал
шире, и без имени источника сообщение обвиняло бы того, кто пушнул
следующим, — ровно то, что чинили в #386 для golden.

Issue: #388
User-Visible: no
2026-08-30 15:55:08 +03:00
claude[bot] 6542d190ea docs: review document for #42
Issue: #42
User-Visible: no
2026-08-30 12:52:23 +00:00
Codex 5bdde98b50 docs: #42 spec revision 4 per SPEC-REVIEW-42-r2
User-Visible: no
Issue: #42
2026-08-30 15:46:41 +03:00
claude[bot] 6ee53e6171 docs: review document for #42
Issue: #42
User-Visible: no
2026-08-30 12:45:18 +00:00
Codex 0ed83c36f0 docs: #42 spec revision 3 per SPEC-REVIEW-42-r1
User-Visible: no
Issue: #42
2026-08-30 15:40:40 +03:00
claude[bot] e270bd7137 docs: review document for #42
Issue: #42
User-Visible: no
2026-08-30 12:39:05 +00:00
Matysh 50851dc3f9 ci: classify against the last proven-green ancestor
Диапазон классификации брался от `github.event.before` — головы предыдущего
пуша. Это допущение «до этого уже проверено», и оно неверно ровно тогда,
когда прогон предыдущего пуша не завершился. А не завершается он штатно:
concurrency отменяет его следующим пушем.

На #86 (r5) это дало ложный зелёный: push 04da7eb1 тронул dist/** и
frontend/**, его прогон отменили через три минуты; следующий push fa146fb1
тронул только docs/images/**, классификация сравнила эти два коммита и
выставила frontend=false. Job «Фронтенд», а за ней golden, smoke и backend
оказались skipped — прогон при этом success. Маркеры переиспользования эти
гейты тоже не подтверждали: `Cache not found` по всем четырём.

Теперь база — самый новый предок HEAD, для которого Validate ДЕЙСТВИТЕЛЬНО
завершился успешно; если такого нет, диапазон расширяется до merge-base с
dev, то есть до всего вклада ветки. Работает по индукции: цепочка узких
диффов покрывает всё изменённое с последней настоящей проверки, а одно
незавершённое звено теперь расширяет диапазон, а не сужает.

Недоступность API не роняет job: пустой ответ опускает базу до merge-base,
то есть в сторону большего объёма проверок.

Защита от force-push (#347) сохранена: механизм, из-за которого merge-base
врал на переписанной истории, до конца не разобран, и снимать защиту, не
объяснив её, — способ получить #347 второй раз.

Issue: #387
User-Visible: no
2026-08-30 15:35:56 +03:00
Codex 582d673a2d docs: #42 spec revision 2 — mechanism + baseline stage, measured facts
User-Visible: no
Issue: #42
2026-08-30 15:28:52 +03:00
claude[bot] f7ac00f895 docs: review document for #86
Проверка (CI) / Классификация изменённых файлов (push) Successful in 28s
Проверка (CI) / HACS: валидация репозитория (push) Skipped
Проверка (CI) / Hassfest: манифест интеграции (push) Skipped
Проверка (CI) / Предполётные проверки: документация, провенанс, процесс (push) Failing after 39s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Successful in 48s
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Skipped
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Failing after 5m39s
Проверка (CI) / Смоки в браузере (шард 1 из 3) (push) Skipped
Проверка (CI) / Смоки в браузере (шард 2 из 3) (push) Skipped
Проверка (CI) / Смоки в браузере (шард 3 из 3) (push) Skipped
Проверка (CI) / Смоки: все шарды зелёные (push) Skipped
Проверка (CI) / Golden-кадры против принятых эталонов (push) Skipped
Проверка (CI) / Перф-смок: бюджет времени кадра (push) Skipped
Issue: #86
User-Visible: no
2026-08-30 12:23:19 +00:00
Matysh fa146fb133 docs: accept rebased settings help screenshots
Refresh the canonical documentation frames after rebasing #86 onto the
current dev branch and visually reviewing all ten scenarios.

Issue: #86
User-Visible: no
2026-08-30 14:55:54 +03:00
Matysh 04da7eb18f build: refresh rebased settings help bundles
Rebuild both canonical bundle trees after rebasing #86 onto the merged
discovery-filter changes.

Issue: #86
User-Visible: no
Release: v1.70.0-beta.1
2026-08-30 14:53:00 +03:00
claude[bot]andMatysh 00a7d7d43d docs: review document for #86
Issue: #86
User-Visible: no
2026-08-30 14:49:33 +03:00
Matysh cd9bd54801 test: accept 200 percent help baselines
Accept the two reviewed Linux DPR 2 help frames and refresh the two
documentation images changed by the rebased dev bundle.

Issue: #86
User-Visible: no
Release: v1.70.0-beta.1
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/33308795628
2026-08-30 14:49:33 +03:00
Matysh 981b6b25e8 test: add reviewed 200 percent help goldens
Capture the general-settings help surface at 390 CSS pixels and DPR 2 in
both themes, assert its viewport contract, and teach the golden runner to
select a renderer scale per scenario.

Issue: #86
User-Visible: no
2026-08-30 14:49:27 +03:00
claude[bot]andMatysh cd7c53cd97 docs: review document for #86
Issue: #86
User-Visible: no
2026-08-30 14:49:19 +03:00
Matysh 74ec0199fa test: prove settings help at 200 percent zoom
Exercise the effective Chromium renderer contract for 200% browser zoom and
assert that the trigger and tooltip stay visible, the dialog does not gain
horizontal overflow, and opening help leaves stage geometry unchanged.

Issue: #86
User-Visible: no
2026-08-30 14:49:19 +03:00
claude[bot]andMatysh 6dcf1e4345 docs: review document for #86
Issue: #86
User-Visible: no
2026-08-30 14:49:18 +03:00
Matysh 8e4fa54477 docs: accept rebased settings help screenshots
Accept the complete Linux Chromium documentation set captured after rebasing
change also replaces the uncompressed dev set with the pinned oxipng output.

Issue: #86
User-Visible: no
Release: v1.70.0-beta.1
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/33306281294
2026-08-30 14:49:18 +03:00
Matysh 244271835f test: cover cold onboarding settings help
Exercise the real lazy onboarding runtime, verify all five space help controls,
and prove that opening help neither mutates the draft nor eagerly loads the
editor runtime.

Issue: #86
User-Visible: no
2026-08-30 14:49:08 +03:00
claude[bot]andMatysh e5f773ce76 docs: review document for #86
Issue: #86
User-Visible: no
2026-08-30 14:49:08 +03:00