Commit Graph
1009 Commits
Author SHA1 Message Date
Sergey Matyunin 0d91c1e18e fix: make plan visuals grid-scale invariant
Issue: #239
User-Visible: yes
2026-08-22 13:45:26 +03:00
claude[bot] a4e8dd7ba7 docs: review document for #239
Issue: #239
User-Visible: no
2026-08-22 10:03:10 +00:00
Sergey Matyunin e8b3c861b2 docs(spec): add proof matrix for grid scale
Issue: #239
User-Visible: no
2026-08-22 12:59:18 +03:00
claude[bot] da597da274 docs: review document for #239
Issue: #239
User-Visible: no
2026-08-22 09:58:21 +00:00
Sergey Matyunin 4c065f5ec4 docs(spec): define grid-scale visual invariance
Issue: #239
User-Visible: no
2026-08-22 12:49:46 +03:00
claude[bot] 1af0cc1711 docs: review document for #238
Validate / docs (push) Failing after 26s
Validate / provenance (push) Successful in 1m18s
Validate / process-gate (push) Failing after 1m9s
Validate / changes (push) Successful in 1m0s
Validate / reuse (push) Successful in 43s
Validate / hacs (push) Failing after 21s
Validate / hassfest (push) Failing after 18s
Validate / frontend (push) Successful in 7m27s
Validate / backend (push) Failing after 10m17s
Validate / golden (push) Failing after 12m29s
Validate / performance_smoke (push) Failing after 13m26s
Validate / smoke (push) Failing after 40m7s
Issue: #238
User-Visible: no
2026-08-22 09:40:27 +00:00
Sergey Matyunin 18cd0c8b01 docs: refresh rebased screenshot provenance
Issue: #238
User-Visible: no
2026-08-22 12:25:40 +03:00
claude[bot]andSergey Matyunin ace6e62f89 docs: review document for #238
Issue: #238
User-Visible: no
2026-08-22 12:25:05 +03:00
Sergey Matyunin 2652bb360d fix: sync #238 bundle and lock shared order
Issue: #238
User-Visible: no
2026-08-22 12:25:05 +03:00
claude[bot]andSergey Matyunin 7c6e631560 docs: review document for #238
Issue: #238
User-Visible: no
2026-08-22 12:25:05 +03:00
Sergey Matyunin cb19b7d52e feat: measure opening preview to inner faces
Issue: #238
User-Visible: yes
2026-08-22 12:24:49 +03:00
claude[bot]andSergey Matyunin 06c7934667 docs: review document for #238
Issue: #238
User-Visible: no
2026-08-22 12:24:49 +03:00
Sergey Matyunin 5582e9a35d docs(spec): define opening inner-distance guides
Issue: #238
User-Visible: no
2026-08-22 12:24:49 +03:00
Matysh 636d0a56fa ci: name check-docs in the review gate set
Issue: #237
User-Visible: no
2026-08-22 11:43:55 +03:00
Matysh 9e71334cb4 docs: refresh documentation screenshots and require check-docs
Issue: #237
User-Visible: no
2026-08-22 11:42:55 +03:00
Matysh 142f7ec121 test: grow the draft chain by clicks, as the product does
Issue: #234
User-Visible: no
2026-08-22 11:40:12 +03:00
Matysh 1391aeacfe test: follow the room-delete dialog instead of window.confirm
Issue: #228
User-Visible: no
2026-08-22 11:40:11 +03:00
Matysh 3aba493b25 fix: compile test-build inside the mutant worktree
Issue: #235
User-Visible: no
2026-08-22 11:24:37 +03:00
claude[bot] 6bd197ffd7 docs: review document for #228
Issue: #228
User-Visible: no
2026-08-22 08:14:31 +00:00
claude[bot]andSergey Matyunin 55d5a560ad docs: review document for #228
Issue: #228
User-Visible: no
2026-08-22 10:56:38 +03:00
Sergey Matyunin 691cea074b fix: close plan repair review findings
Issue: #228
User-Visible: yes
2026-08-22 10:56:38 +03:00
claude[bot]andSergey Matyunin 8fc3ec783b docs: review document for #228
Issue: #228
User-Visible: no
2026-08-22 10:56:23 +03:00
Sergey Matyunin 2f968996b1 fix: make plan drawing fail closed
Issue: #228
User-Visible: yes
2026-08-22 10:56:22 +03:00
claude[bot]andSergey Matyunin 9a131cca25 docs: review document for #228
Issue: #228
User-Visible: no
2026-08-22 10:55:08 +03:00
Sergey Matyunin e44b3c97b0 docs: specify plan drawing repairs
Issue: #228
User-Visible: no
2026-08-22 10:55:08 +03:00
claude[bot] 66ffd6fdda docs: review document for #233
Validate / docs (push) Failing after 23s
Validate / provenance (push) Successful in 1m15s
Validate / process-gate (push) Failing after 1m14s
Validate / changes (push) Successful in 1m0s
Validate / hacs (push) Skipped
Validate / hassfest (push) Skipped
Validate / reuse (push) Successful in 47s
Validate / backend (push) Skipped
Validate / frontend (push) Successful in 8m16s
Validate / golden (push) Failing after 13m4s
Validate / performance_smoke (push) Failing after 13m7s
Validate / smoke (push) Failing after 34m13s
Issue: #233
User-Visible: no
2026-08-22 07:22:40 +00:00
Matysh 81f38689bb test: prove the atomic profile on a genuinely split edge (#233 r1 M1,M2)
Issue: #233
User-Visible: no
2026-08-22 10:13:50 +03:00
claude[bot] bff47f522b docs: review document for #233
Issue: #233
User-Visible: no
2026-08-22 06:57:57 +00:00
Matysh abfaae3e38 feat: measure resize labels between wall faces
Issue: #233
User-Visible: yes
2026-08-22 09:45:15 +03:00
claude[bot] 969847a4c4 docs: review document for #233
Issue: #233
User-Visible: no
2026-08-22 00:26:11 +00:00
Matysh bc8c368db9 docs(spec): keep a passage full length, read thickness atomically
Spec review r1 returned two blocking findings and both were right.

A measured side that is itself a passage would have been shortened by its
neighbouring walls, while insetContour — the very function the area label
already uses — treats that joint as a flat cap and shortens nothing. Length
and area would have diverged again, at a different boundary, which is the
defect this task exists to remove. The zero rule now comes first and returns
the full centreline length for an open side.

The thickness source was wrong as a matter of fact, not of taste: an
existing test shows thicknessCmAt returns 0 for a whole-edge query against a
partially set thickness, so a split-thickness edge would have silently
stopped shortening. Half-depths now come from roomWallProfile, the atomic
profile that innerContourForRoom already uses for the area, so one edge is
resolved by one mechanism.

Two acceptance criteria and two mutation guards added for the closed
findings.

Issue: #233
User-Visible: no
2026-08-22 03:20:06 +03:00
claude[bot] 0312104527 docs: review document for #233
Issue: #233
User-Visible: no
2026-08-22 00:13:35 +00:00
Matysh 77fa698a27 docs(spec): register the #233 spec in the index
Issue: #233
User-Visible: no
2026-08-22 03:00:05 +03:00
Matysh 7b0747888c docs(spec): measure resize labels between wall faces
Issue: #233
User-Visible: no
2026-08-22 02:58:37 +03:00
Matysh dc9ced2fb4 docs: extend the freshness contract to smokes
Validate / docs (push) Failing after 24s
Validate / reuse (push) Successful in 48s
Validate / process-gate (push) Failing after 1m22s
Validate / provenance (push) Successful in 1m22s
Validate / changes (push) Successful in 1m18s
Validate / hacs (push) Failing after 16s
Validate / hassfest (push) Failing after 23s
Validate / frontend (push) Successful in 4m39s
Validate / backend (push) Failing after 7m35s
Validate / golden (push) Failing after 10m17s
Validate / performance_smoke (push) Failing after 11m19s
Validate / smoke (push) Failing after 23m53s
The contract named benchmark and golden tooling, which is exactly why the smoke
launcher was allowed to skip the check for so long. It now covers every browser
check, names where each one gets it, and records why a stale bundle is worse
than a plain failure: part of the assertions go red and part stay green.

Issue: #236
User-Visible: no
2026-08-22 02:05:35 +03:00
Matysh 61c874953a fix: verify demo bundle freshness for smokes too
Golden runs, benchmarks and documentation captures each called
assertFreshDemoBundle; the smoke launcher never did, so all ~128 smokes could
silently test a stale demo/srv/assets bundle. On #234 that cost a round of
analysis: three assertions went red and a fourth went green, because the old
code was wrong in two places that agreed with each other, and a mixed result
reads as a logic defect rather than a stale artefact.

launch() now runs the check once for every smoke, against the repository root
rather than the serving root — demo/srv has no src/** to fingerprint.
HP_ALLOW_STALE_BUNDLE=1 skips it for debugging and warns out loud, because a
guard that says nothing when it steps aside is the silent success this project
keeps removing. A mutation entry proves the call cannot quietly disappear.

Issue: #236
User-Visible: no
2026-08-22 02:03:36 +03:00
Matysh 09b5d394a5 fix: verify demo bundle freshness for smokes too
Golden runs, benchmarks and documentation captures each called
assertFreshDemoBundle; the smoke launcher never did, so all ~128 smokes could
silently test a stale demo/srv/assets bundle. On #234 that cost a round of
analysis: three assertions went red and a fourth went green, because the old
code was wrong in two places that agreed with each other, and a mixed result
reads as a logic defect rather than a stale artefact.

launch() now runs the check once for every smoke, against the repository root
rather than the serving root — demo/srv has no src/** to fingerprint.
HP_ALLOW_STALE_BUNDLE=1 skips it for debugging and warns out loud, because a
guard that says nothing when it steps aside is the silent success this project
keeps removing. A mutation entry proves the call cannot quietly disappear.

Issue: #236
User-Visible: no
2026-08-22 01:53:24 +03:00
Matysh e4b4f33c6d fix: verify demo bundle freshness for smokes too
Golden runs, benchmarks and documentation captures each called
assertFreshDemoBundle; the smoke launcher never did, so all ~128 smokes could
silently test a stale demo/srv/assets bundle. On #234 that cost a round of
analysis: three assertions went red and a fourth went green, because the old
code was wrong in two places that agreed with each other, and a mixed result
reads as a logic defect rather than a stale artefact.

launch() now runs the check once for every smoke, against the repository root
rather than the serving root — demo/srv has no src/** to fingerprint.
HP_ALLOW_STALE_BUNDLE=1 skips it for debugging and warns out loud, because a
guard that says nothing when it steps aside is the silent success this project
keeps removing. A mutation entry proves the call cannot quietly disappear.

Issue: #236
User-Visible: no
2026-08-22 01:47:47 +03:00
Matysh 5fd9716906 fix: verify demo bundle freshness for smokes too
Golden runs, benchmarks and documentation captures each called
assertFreshDemoBundle; the smoke launcher never did, so all ~128 smokes could
silently test a stale demo/srv/assets bundle. On #234 that cost a round of
analysis: three assertions went red and a fourth went green, because the old
code was wrong in two places that agreed with each other, and a mixed result
reads as a logic defect rather than a stale artefact.

launch() now runs the check once for every smoke, against the repository root
rather than the serving root — demo/srv has no src/** to fingerprint.
HP_ALLOW_STALE_BUNDLE=1 skips it for debugging and warns out loud, because a
guard that says nothing when it steps aside is the silent success this project
keeps removing. A mutation entry proves the call cannot quietly disappear.

Issue: #236
User-Visible: no
2026-08-22 01:46:39 +03:00
Matysh 1fb3a5754e fix: verify demo bundle freshness for smokes too
Golden runs, benchmarks and documentation captures each called
assertFreshDemoBundle; the smoke launcher never did, so all ~128 smokes could
silently test a stale demo/srv/assets bundle. On #234 that cost a round of
analysis: three assertions went red and a fourth went green, because the old
code was wrong in two places that agreed with each other, and a mixed result
reads as a logic defect rather than a stale artefact.

launch() now runs the check once for every smoke, against the repository root
rather than the serving root — demo/srv has no src/** to fingerprint.
HP_ALLOW_STALE_BUNDLE=1 skips it for debugging and warns out loud, because a
guard that says nothing when it steps aside is the silent success this project
keeps removing. A mutation entry proves the call cannot quietly disappear.

Issue: #236
User-Visible: no
2026-08-22 01:45:56 +03:00
claude[bot] 0df5db8b1c docs: review document for #234
Validate / docs (push) Failing after 20s
Validate / reuse (push) Successful in 55s
Validate / changes (push) Successful in 1m13s
Validate / provenance (push) Failing after 1m21s
Validate / process-gate (push) Failing after 1m22s
Validate / hacs (push) Failing after 15s
Validate / hassfest (push) Failing after 11s
Validate / frontend (push) Successful in 3m23s
Validate / backend (push) Failing after 4m25s
Validate / golden (push) Failing after 9m54s
Validate / performance_smoke (push) Failing after 11m9s
Validate / smoke (push) Failing after 20m20s
Issue: #234
User-Visible: no
2026-08-21 16:56:20 +00:00
Sergey Matyunin c8e9597228 fix: resolve chain segment thickness in one place
Issue: #234
User-Visible: yes
2026-08-21 19:42:42 +03:00
claude[bot]andSergey Matyunin 67505f8343 docs: review document for #234
Issue: #234
User-Visible: no
2026-08-21 19:41:37 +03:00
MatyshandSergey Matyunin b2024c6626 docs(spec): state that i18n is untouched, name the zero case
The spec review found the i18n section missing outright — the analysis
comment claimed it was untouched, the document itself said nothing, and a
DoR section cannot be inferred from a comment. It now says so explicitly,
and adds that the absence of i18n files from the diff is part of the
contract rather than an accident.

The waived Low is closed too: the old wallChainSegments treated a recorded
zero as valid while the new contract requires strictly positive values, so
zero is now named in the AC1 examples instead of being derivable from the
prose.

Issue: #234
User-Visible: no
2026-08-21 19:41:37 +03:00
claude[bot]andSergey Matyunin b7a9cc4edf docs: review document for #234
Issue: #234
User-Visible: no
2026-08-21 19:41:37 +03:00
MatyshandSergey Matyunin f4098fcf09 docs(spec): register the #234 spec in the index
Issue: #234
User-Visible: no
2026-08-21 19:41:37 +03:00
MatyshandSergey Matyunin 05b2c74442 docs(spec): define one thickness resolver for a wall chain
Issue: #234
User-Visible: no
2026-08-21 19:41:37 +03:00
claude[bot] 1e2eba95b1 docs: review document for #230
Issue: #230
User-Visible: no
2026-08-21 14:07:33 +00:00
Codex 6836561340 fix: the four unit mutants of #230 have to build test-build first (#230 r1 H2)
Гейт мутаций работает в изолированном `git worktree`, где `test-build/` не
существует: юнит-гвард, идущий сразу в `node --test`, падает с
`ERR_MODULE_NOT_FOUND` ещё на чистом прогоне — то есть не проверяет ничего, а
еженедельный прогон реестра останавливается на первом же таком мутанте и не
доходит до остальных. Соседние юнит-мутанты этого не допускают: их гвард
начинается с `npx tsc -p tsconfig.test.json && node scripts/fix-test-build.mjs`.
Четыре мутанта #230 теперь тоже.

Проверено штатным харнессом, а не вручную: `node scripts/mutation-gate.mjs
--id=<каждый>` — «поймано 1 из 1» для всех семи мутантов задачи, включая три
смоковых, которые и раньше работали.

Тем же дефектом страдают юнит-мутанты #220 и #229 — это чужой скоуп и предмет
[#235](https://github.com/Matysh/houseplan-card/issues/235); здесь не трогаю.

Issue: #230
User-Visible: no
2026-08-21 16:49:33 +03:00
CodexandCodex 6811cc0908 test: accept reviewed #230 hatch goldens
Две сцены и только они: `large-house-zoom-040-dark` (шаг штриховки был 20
юнитов, стал 8) и `large-house-zoom-250-dark` (был 3.2, стал 8). Расхождение
осмотрено покадрово: меняется только плотность штриховки тел стен, колонн и
перегородок — геометрия, цвета, устройства и свет идентичны. Это прямое
следствие решения владельца §4.2 ТЗ, ради которого зумовая компенсация и
убиралась.

Принято `npm run golden:accept -- --reviewed`. `accept` переснимает весь набор,
поэтому пять сцен, разошедшихся на шуме рендера
(`isometric-large-warm-remount-dark`, `room-label-parity-plan-dark`,
`tray-medium-group-en`, `wall-junctions-plan-preview-light`,
`wall-junctions-plan-t-dark`), возвращены к прежним байтам вместе с их хэшами
в индексе: `verify` считал их совпадающими в пределах допуска, и принимать их
задача #230 права не имеет.

Baseline-Reviewed — прогон, где job `golden` прошёл на Linux ровно на этих
эталонах.

Issue: #230
User-Visible: no
Release: v1.67.0-beta.1
Baseline-Reviewed: https://github.com/Matysh/houseplan-card/actions/runs/32480753934
2026-08-21 16:42:32 +03:00