Commit Graph
4264 Commits
Author SHA1 Message Date
Claudeandclaude[bot] 8c9c0089a4 test(hooks): derive the pre-push fixture from the hook's import tree (#766)
HOOK_FILES in test/pre-push-gate.test.mjs listed the hook's modules by hand.
After #729 process-gate pulled in review-doc-guard and friends, and #737
broke Validate with a new transitive import (model-usage.mjs) that the list
did not carry: the temporary repository lacked the module and the hook died
with ERR_MODULE_NOT_FOUND.

The list is now computed: the hook itself, the scripts it runs by path
(`$repo_root/scripts/...`, today process-gate.mjs and pre-push-gate.mjs), and
the transitive closure of their local imports (static import/export ... from,
side-effect imports, literal dynamic import() and new URL(..., import.meta.url)
reads). gate-small.mjs stays out: the test writes its stub. A referenced file
that does not exist fails loudly instead of shortening the list. On the
current tree the derived set equals the old manual one.

Witness: a copy of the hook tree with a new module imported from
model-usage.mjs (with its own import, a dynamic import and a data read) gets
all four files automatically. Checked by hand: the old manual list with such
an import makes the real-hook test fail with ERR_MODULE_NOT_FOUND, the
derived list passes. Module names in the witness are built from base names,
because check-inputs reads a `scripts/...` string literal as a data leaf and
stops following that module's imports.

Issue: #766
User-Visible: no
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-10-06 23:05:58 +00:00
Claudeandclaude[bot] cb97274ea7 test(harness): run workflow steps the way the runner does (#766)
Thirteen test harnesses executed workflow `run:` bodies with their own bash
flags. Four of them used `bash -eo pipefail` "as in Actions", but the runner
executes a step without `shell:` as `bash -e {0}`: pipefail comes only from an
explicit `shell: bash` or from `set -o pipefail` in the body. The harness
supplied protection the step did not have, so a step that lost its pipefail
stayed green in tests (#729, #737, #751); the reverse also happened - the
#793 guard test was red only because of the harness flag.

test/helpers/workflow-step.mjs resolves the shell like the runner (step ->
jobs.<id>.defaults.run.shell -> workflow defaults.run.shell -> unset), maps it
to the runner's command lines (unset -> `bash -e {0}`, bash -> `bash
--noprofile --norc -e -o pipefail {0}`, sh, python, custom templates with
{0}), writes the body to a file and executes it by path. Unsupported YAML or
shells are refused loudly instead of guessed. All step-executing tests now go
through runStep(findStep(...)).

Witnesses: a step whose left pipeline side fails is green without a shell
(negative test) and red with `shell: bash`, job defaults or `set -o pipefail`;
the #751 executed test now also shows that the same real steps without their
pipefail line stay green, i.e. the test sees a removed pipefail; a guard fails
on any test that runs a step with its own bash flags. TESTING.md rule 7 names
the helper.

Issue: #766
User-Visible: no
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-10-06 23:05:58 +00:00
claude[bot] 32334a173a docs(reviews): индекс после сдвига каталога (#768)
Issue: #768
User-Visible: no
2026-10-06 23:01:07 +00:00
claude[bot] 42b8004af3 docs(reviews): индекс после сдвига каталога (#768)
Issue: #768
User-Visible: no
2026-10-06 23:01:07 +00:00
claude[bot] 0615c38e5e docs: review document for #768
Issue: #768
User-Visible: no
2026-10-06 23:01:07 +00:00
Claudeandclaude[bot] 1ef639461e fix(wait-verdict): recognise merge outcomes through OUTCOME_SIGNS (#768)
The waiter knew two of the eleven merge-candidate outcomes, and those
through copied prefixes. A red or stuck candidate, a moving dev, a push
refusal (#705) or a failed merge step went unrecognised. In the window where
the comment is already posted but the label still reads S7, the author waited
until the timeout. Once the label moved to S6, only «S7 → S6» was printed and
the reason was lost.

Comments are now classified by merge-candidate's own catalog (outcomeOf)
first, then by the pipeline's own comments as before. The outcomes are
mapped by kind, not collapsed into one error:
- terminal refusals (reject-stale, conflict, validation-red, give-up,
  push-refused[-workflow] at merge and rebase stage, error) — exit 3 with
  their own reason even while S7 is unchanged;
- validation-missing (the merge stopped waiting for Validate) — exit 3,
  with «no code change needed, re-apply S7 after a green Validate»;
- rereview — printed, the wait goes on: the task is already back in S7 and
  the new round starts by itself;
- a green merge has no sign in the catalog — the S8 label reports it (0).
A label change keeps exit 0 and now carries the reason in its lines. The
round anchor (latest S4/S7), the baseline for older comments, blocked and
review-4 are unchanged. «stale» and «merge-conflict» stay in
PIPELINE_EVENTS: they are the fallback for pre-#752 bodies, and
process-metrics.mjs imports them by kind.

Tests use the actual bodies from commentFor/describePushRefusal; each of the
four new cases is red on the original wait-verdict.mjs. The new mutant
wait-verdict-merge-outcomes-unknown was checked by hand: its guard goes
red. AGENTS.md, where the exit codes are described, is updated to match.

Issue: #768
User-Visible: no
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-10-06 23:01:07 +00:00
claude[bot] 2561d80a1a docs(reviews): индекс после сдвига каталога (#777)
Issue: #777
User-Visible: no
2026-10-06 22:56:45 +00:00
claude[bot] d6703ac0c2 docs: review document for #777
Issue: #777
User-Visible: no
2026-10-06 22:56:45 +00:00
Claudeandclaude[bot] 2cb58dbab6 test(iso-overlay): match the virtual probe by TypeScript path key (#777)
On Windows the fixture-type test failed with "Cannot read properties of
undefined (reading 'text')". TypeScript normalizes root file names before
it asks the compiler host (C:\repo\test\probe.mjs becomes
C:/repo/test/probe.mjs), while the host compared that name with the
node:path string by ===. The probe was never served, the program had no
probe file, and the verdict read undefined.text. The module-resolution
filter compared dirname(containing) with TEST_DIR the same way, so on
Windows it let ../test-build/* and node:* imports resolve.

The host now compares names by the compiler's own key: '/' separators and
the host's getCanonicalFileName (case-insensitive where the file system
is). readFile serves the probe as well. A source file the check depends on
that is missing from the program now fails with its name, the compiler's
own diagnostic and a truncated list of the files the program knows,
instead of a TypeError.

Portability witness, runnable on Linux: the program builder takes the path
implementation, root and file system, and a new test builds the same
program over this checkout seen as C:\houseplan-card\ through path.win32
with case-insensitive names. It asserts that the probe is found, that the
dead-field verdict equals the native one, and that nothing under test-build
is looked up. With the old === comparisons it is red (probe missing,
test-build looked up); with the old lookup it reproduces the Windows
TypeError. The dead-field and direct-call witnesses are unchanged.

Issue: #777
User-Visible: no
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-10-06 22:56:45 +00:00
Claude 083d4d6e33 perf(kiosk): open the scale dialog without the editor runtime (#763)
A 3 s hold in kiosk mode opens the per-screen size dialog. The core card
draws it (`_renderKioskDialog`, `hp-dialog` from the core bundle, core
i18n keys) and the summary-panel runtime, which every card connects on
mount, saves it. Yet `_kioskDialog` was listed in `editorRuntimeRequested`,
so every hold on a wall tablet downloaded the whole editor chunk; with the
chunk unreachable the kiosk also showed "Could not load the editor" (#757
only capped the retries). Dropping it from the condition is the whole fix;
the loader and the gesture are untouched.

Proof: new smoke_kiosk_scale_no_editor runs a cold page, a real 3.4 s touch
hold (CDP synthesizeTapGesture: a long press, not a tap on the new backdrop),
sliders by keyboard, Reset/Close taps, a second hold to reopen, the chunk
refused by the network, and the ordinary editor entry as control. On dev it
is red in 3 network checks (chunk fetched; refused chunk = 2 requests and a
toast); with the fix all 20 checks pass. smoke_lazy_editor_chunk case (a)
pinned the old cycle and now asserts zero requests and zero notices; the
(checked by hand). New mutant kiosk-scale-dialog-loads-editor-runtime
(caught by hand), listed under browser lifecycle guards; the smoke is
linked in smoke-links because it names none of the touched members.

Issue: #763
User-Visible: yes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-10-07 00:49:47 +03:00
claude[bot] 7fbc97a296 docs(reviews): индекс после сдвига каталога (#808)
Проверка (CI) / Предполёт: документация, провенанс, процесс (push) Canceled after 0s
Проверка (CI) / Классификация изменённых файлов (push) Canceled after 0s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Canceled after 0s
Проверка (CI) / HACS: валидация репозитория (push) Canceled after 0s
Проверка (CI) / Hassfest: манифест интеграции (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (1/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (2/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (3/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (4/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (5/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (6/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Canceled after 0s
Проверка (CI) / Смоки в браузере (шард 1 из 3) (push) Canceled after 0s
Проверка (CI) / Бандл головы dev для стенда (push) Canceled after 0s
Проверка (CI) / Смоки в браузере (шард 2 из 3) (push) Canceled after 0s
Проверка (CI) / Смоки в браузере (шард 3 из 3) (push) Canceled after 0s
Проверка (CI) / Смоки: все шарды зелёные (push) Canceled after 0s
Проверка (CI) / Golden-кадры против принятых эталонов (push) Canceled after 0s
Проверка (CI) / Перф-смок: бюджет времени кадра (push) Canceled after 0s
Проверка (CI) / Геометрия: TS/Python parity исполнена (push) Canceled after 0s
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Canceled after 0s
Проверка (CI) / Доказательство выполненных проверок (push) Canceled after 0s
Issue: #808
User-Visible: no
2026-10-06 21:27:11 +00:00
claude[bot] e10e482a63 docs: review document for #808
Issue: #808
User-Visible: no
2026-10-06 21:27:07 +00:00
Claude ec9462a457 chore(golden): accept the route arrowhead over the battery (#808)
device-battery-zigbee-overlap-dark: the parent-caption arrowhead now paints
over the battery indicator instead of disappearing under it. Reviewed against
the old baseline; the remaining 204 scenes passed in the same full run.

Issue: #808
User-Visible: no
Release: v1.80.0-beta.7
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/37526387243
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-10-06 23:49:06 +03:00
Claude ef47d4c5a1 fix(zigbee): stale after an hour; routes paint over battery indicators (#808)
A topology snapshot is labelled stale after one hour instead of five
minutes. Nothing refreshes the map on its own and a Zigbee2MQTT scan alone
can take more than ten minutes, so the old age marked almost every map. A
failed refresh still marks the retained snapshot stale at once.

Route lines and arrows now paint over battery indicators. Endpoint markers
rise above the route layer as a whole (#464), battery included, so the
overlay renders a copy of the routes one level higher (z 9, before the
captions in DOM order) clipped to the endpoint battery frames. The frames
are measured in the existing layout frame of the overlay; outside them the
picture is unchanged: endpoint cores stay above routes, captions above
routes and batteries (#792 AC7). The copy carries no data-hp, so route
counts and selectors stay as they were; parent-caption arrows update in both
layers.

Tests: smoke_device_battery_zigbee gains a local link whose route crosses a
whole battery frame — the hovered endpoint's and the neighbour endpoint's,
Flat and 2.5D, sampled along the drawn line. On dev three of the four probes
are red (2.5D neighbours are not raised today). New mutant
zigbee-route-copy-under-battery (manually red); the parent-LQI mutant anchor
follows the refactored route list. smoke_zigbee_topology_hover age fixtures
move to the one-hour boundary. The golden routes control hides both layers;
device-battery-zigbee-overlap-dark changes (arrowhead now over the battery)
and needs acceptance via ci:golden.

Issue: #808
User-Visible: yes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-10-06 23:49:06 +03:00
Sergey Matyunin bda25d26c2 test(smoke): follow segmented battery control
The volumetric settings smoke still expected the retired battery checkbox.
Assert the three radio segments in their real DOM order after the established
Display toggles.

Issue: #807
User-Visible: no
v1.80.0-beta.6
2026-10-06 22:53:06 +03:00
Sergey Matyunin e49083d6ec Release v1.80.0-beta.6 candidate
Ship the reviewed battery-indicator shadow and per-device opt-out together
with the global All / Low only / None display modes. Rebuild the committed
bundle, refresh the pixel-identical documentation fingerprint, and tighten
the beta ratchets.

Issue: #806
Issue: #807
User-Visible: yes
Release: v1.80.0-beta.6
2026-10-06 22:35:14 +03:00
claude[bot] 8cff278c78 docs(reviews): индекс после сдвига каталога (#807)
Issue: #807
User-Visible: no
2026-10-06 18:36:59 +00:00
claude[bot] a1a404e419 docs: review document for #807
Issue: #807
User-Visible: no
2026-10-06 18:36:55 +00:00
Claude 7dc5a69ec2 test(settings): find the background segment by its radio name (#807)
smoke_settings_dialog_cards took the first radiogroup of General settings as
the background segment. The battery choice of #807 is a segmented control in
the Display card above it, so the smoke now selects the group that owns the
gs-bg-mode radios.

Issue: #807
User-Visible: no
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-10-06 21:15:01 +03:00
Claude 2e1661b23d chore(monolith): raise bundleBytes for the low-only battery mode (#807)
bundleBytes 2 712 875 → 2 715 446 (+2 571, over the 2 000 band). Clean dev
after #806 already measures 2 714 174 (+1 299 for the per-device opt-out and
the shadow, inside the band); #807 adds +1 272: the three-way mode resolver
and writer, the segmented control replacing the toggle in General settings
with its three option labels, and the batteryLowOnly option passed by View,
static card, space-card render and the device dialog preview. hostRefs
5 072 stays inside its band and is not raised.

Issue: #807
User-Visible: no
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-10-06 21:08:26 +03:00
Claude 8c726d753e feat(battery): low-only option for the device battery indicator (#807)
General settings offer All / Low only / None for battery indicators as a
three-button segmented control, the same visual as the light-source choice
in the device dialog. Low only keeps just the red low state (below 20 %, or
a binary battery sensor that is on); normal, warning and unknown are hidden.

Storage keeps #792 compatibility: absent = All, false = None, the exact
string "low" = Low only. The backend accepts bool or "low" and refuses any
other value; old frontends read "low" as All, old backends refuse to save it
(documented in CONFIG-COMPATIBILITY). One presentation option
(batteryLowOnly) filters the resolved indicator, so View, kiosk, 2.5D,
space-card and the device dialog preview share the same rule.

Track raised ship -> show: new i18n keys, a new config value and Python.

Tests: unit (mode resolver, write, dirty, low-only presentation), backend
validator and support package, smoke_device_battery (low-only keeps only
red), smoke_general_settings_form (radios, save/reopen/clean, All removes
the key). New mutant battery-low-only-shows-every-state; the backend mutant
anchor moves to the new validator.

Issue: #807
User-Visible: yes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
2026-10-06 20:59:11 +03:00
claude[bot] f398b50037 docs(reviews): индекс после сдвига каталога (#806)
Issue: #806
User-Visible: no
2026-10-06 17:51:30 +00:00
claude[bot] 16b4197409 docs: review document for #806
Issue: #806
User-Visible: no
2026-10-06 17:51:26 +00:00
Matysh 16f5a30f62 chore(golden): принимает средний фон индикаторов заряда
Эталон подтверждает увеличенную тень четырёх состояний и трёх размеров
непосредственно на нейтральной серой плоскости. Полная матрица: 205 сцен.

Issue: #806
User-Visible: no
Release: v1.80.0-beta.6
Baseline-Reviewed-Local: sha256:d5e785e772731545943419b719df10f952592b82bbfb65db61a6727892d8b61c
2026-10-06 20:25:09 +03:00
Matysh 3bfd3f4161 test(golden): фиксирует средний фон батарей
Issue: #806
User-Visible: no
Release: v1.80.0-beta.6
2026-10-06 20:14:58 +03:00
Matysh 1d2d23f104 test(golden): добавляет средний фон батарей
Issue: #806
User-Visible: no
Release: v1.80.0-beta.6
2026-10-06 20:02:02 +03:00
claude[bot] b83dd2021f docs: review document for #806
Issue: #806
User-Visible: no
2026-10-06 17:00:31 +00:00
Matysh 7812a26f18 fix(schema): синхронизирует поле скрытия заряда
Issue: #806
User-Visible: no
Release: v1.80.0-beta.6
2026-10-06 19:28:45 +03:00
Matysh 8a6f523b1a chore(golden): принимает тень индикаторов заряда
Проверены светлый, тёмный и мобильный масштабы, перекрытие Zigbee и
сцена диалога с новой локальной настройкой. Остальные 199 сцен совпали.

Issue: #806
User-Visible: no
Release: v1.80.0-beta.6
Baseline-Reviewed-Local: sha256:453d95ec28670c0e2b0d962acaf1fb2aa715178944b3796402cc7a4e50808d8a
2026-10-06 19:20:05 +03:00
Matysh ab9dc1fb46 feat(battery): добавляет тень и локальное скрытие индикатора
Issue: #806
User-Visible: yes
2026-10-06 18:59:09 +03:00
claude[bot] 705889cc37 docs: review document for #806
Issue: #806
User-Visible: no
2026-10-06 15:38:58 +00:00
claude[bot] e12c04568a docs: review document for #806
Issue: #806
User-Visible: no
2026-10-06 15:33:13 +00:00
Matysh d50efcb56e docs(release): refresh screenshot fingerprint for v1.80.0-beta.5
Проверка (CI) / Предполёт: документация, провенанс, процесс (push) Canceled after 0s
Проверка (CI) / Классификация изменённых файлов (push) Canceled after 0s
Проверка (CI) / Переиспользование: это дерево уже проверено (push) Canceled after 0s
Проверка (CI) / HACS: валидация репозитория (push) Canceled after 0s
Проверка (CI) / Hassfest: манифест интеграции (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (1/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (2/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (3/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (4/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (5/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Мутанты по диффу (6/6): затронутые свидетели краснеют (push) Canceled after 0s
Проверка (CI) / Фронтенд: типы, юниты, мутанты, синхрон бандла (push) Canceled after 0s
Проверка (CI) / Бандл головы dev для стенда (push) Canceled after 0s
Проверка (CI) / Смоки в браузере (шард 1 из 3) (push) Canceled after 0s
Проверка (CI) / Смоки в браузере (шард 2 из 3) (push) Canceled after 0s
Проверка (CI) / Смоки в браузере (шард 3 из 3) (push) Canceled after 0s
Проверка (CI) / Смоки: все шарды зелёные (push) Canceled after 0s
Проверка (CI) / Golden-кадры против принятых эталонов (push) Canceled after 0s
Проверка (CI) / Перф-смок: бюджет времени кадра (push) Canceled after 0s
Проверка (CI) / Геометрия: TS/Python parity исполнена (push) Canceled after 0s
Проверка (CI) / Бэкенд: pytest в Home Assistant (push) Canceled after 0s
Проверка (CI) / Доказательство выполненных проверок (push) Canceled after 0s
All eleven documentation frames are pixel-identical in the pinned Linux environment; update only their source fingerprint for the release candidate.

Issue: #792

Issue: #804

Issue: #776

User-Visible: no

Release: v1.80.0-beta.5
v1.80.0-beta.5
2026-10-06 17:30:47 +03:00
Matysh 25f463a933 Release v1.80.0-beta.5 candidate
Ship battery indicators, resilient room creation from partial wall faces, and
deterministic late smoke-error accounting. Rebuild the committed bundle and
tighten the beta ratchets.

Issue: #792
Issue: #804
Issue: #776
User-Visible: yes
Release: v1.80.0-beta.5
2026-10-06 17:22:40 +03:00
claude[bot] 63b6b48d03 docs(reviews): индекс после сдвига каталога (#776)
Issue: #776
User-Visible: no
2026-10-06 14:06:44 +00:00
claude[bot] 323fa70f96 docs: review document for #776
Issue: #776
User-Visible: no
2026-10-06 14:06:44 +00:00
Matyshandclaude[bot] 3e98ac4dde fix(test): include late page errors in smoke teardown verdict
Count delivered page errors after awaited browser close. Exercise the public
harness lifecycle with deterministic negative subprocess cases and retain the
unchanged Chromium probes for the real transport. Move the premature-snapshot
mutation witness to the deterministic Node suite.

Issue: #776
User-Visible: no
2026-10-06 14:06:44 +00:00
claude[bot] 3ee8663bfa docs: review document for #774
Issue: #774
User-Visible: no
2026-10-06 14:04:02 +00:00
claude[bot] 7015a2c454 docs: review document for #774
Issue: #774
User-Visible: no
2026-10-06 13:51:49 +00:00
claude[bot] aa62145621 docs(reviews): индекс после сдвига каталога (#792)
Issue: #792
User-Visible: no
2026-10-06 13:32:55 +00:00
claude[bot] 602305417b docs: review document for #792
Issue: #792
User-Visible: no
2026-10-06 13:32:51 +00:00
Matysh 97e6504e9c chore(golden): accept focused battery Zigbee overlap reference
Review the actual 420x140 frame from the complete attested WSL capture of
published 88bdd513e. The caption covers 70/70 sampled battery pixels;
coreChanged=0 and exposedRoute=49. All 203 existing scenes passed and their
PNG bytes remain untouched. Accept exactly the single declared new scene.

Issue: #792
User-Visible: no
Release: v1.80.0-beta.4
Baseline-Reviewed-Local: sha256:4918901746d50a9b8876c6683f9d4e71ce6782c2c02c680c836d0cd1af1b0765
2026-10-06 16:10:02 +03:00
Matysh 88bdd513ec test(golden): cover battery and Zigbee caption overlap
Address the in-scope Medium from CODE-REVIEW-792-r1 with a deterministic
golden scenario that uses actual topology rendering and overlapping battery
ink. Keep the existing battery boards and their reviewed images unchanged.
Align the English guide's setting name with the shipped locale (Low).

Issue: #792
User-Visible: no
2026-10-06 16:04:07 +03:00
claude[bot] b94112b8c4 docs: review document for #792
Issue: #792
User-Visible: no
2026-10-06 12:52:30 +00:00
Matysh 3c091e7ef8 fix(settings): preserve established Display option order
Append battery visibility after the existing tooltip, radar and volumetric
controls. The established 2.5D setting remains third. Extend the existing
browser oracle to allow exactly the new fourth option while preserving
its original first-three ordering requirement.

Full Validate 37461167422 exposed the ordering regression. It was reproduced
locally before the change; volumetric_setting, general_settings_form and
settings_dialog_cards all pass after it. Record the final gzip measurement.

Issue: #792
User-Visible: yes
2026-10-06 15:22:16 +03:00
Matysh 9951e6ba10 chore(golden): accept three MDI battery indicator scenes
Full 203-scene capture from published d4d48bb040
on pinned WSL/ext4 toolchain: 200 unchanged scenes and three new scenes;
105 environment witnesses passed (required floor: 10).
Reviewed light/dark boards and mobile framing against owner-approved MDI
glyphs and the designer's sizes, gaps and colors. Correct measured gzip
documentation by three bytes after the final source fingerprint settled.

Issue: #792
User-Visible: no
Release: v1.80.0-beta.4
Baseline-Reviewed-Local: sha256:7e238b1840401f791e00e53f5c77388006a0b04cc8d4e535775b3a5dc9f9db03
2026-10-06 15:04:00 +03:00
Matysh d4d48bb040 feat(devices): show own-device battery state with standard HA icons
Resolve one stable battery source independently of the functional device face,
include battery-only ticks in immutable render snapshots, and add a default-on
shared preference. Keep LED strips excluded and Zigbee captions above the
passive, out-of-flow indicator. Use the owner's accepted four MDI icons in the
designer's frame geometry and colours.

Include resolver/backend/browser/pixel contracts and three new golden scenes.
Recalibrate the owner-approved absolute/raw size budgets; preserve the existing
initial View rolling ceiling and band. Lazy extraction remains separate #805.

Issue: #792
User-Visible: yes
2026-10-06 14:43:19 +03:00
claude[bot] d787c02687 docs: review document for #792
Issue: #792
User-Visible: no
2026-10-06 10:56:30 +00:00
claude[bot] b9145d3e85 docs(reviews): индекс после сдвига каталога (#804)
Issue: #804
User-Visible: no
2026-10-06 10:14:27 +00:00
claude[bot] 6651d854d0 docs: review document for #804
Issue: #804
User-Visible: no
2026-10-06 10:14:23 +00:00