Commit Graph
352 Commits
Author SHA1 Message Date
Sergey Matyunin bca3bfd52c fix: prevent mixed-role walls during resize
Issue: #289
User-Visible: yes
2026-08-24 15:19:40 +03:00
Sergey Matyunin 89658c20fe build: prepare v1.67.0-beta.9 candidate
Issue: #279
Issue: #280
Issue: #281
User-Visible: yes
2026-08-24 10:54:02 +03:00
Sergey Matyunin 07bd1a6781 fix: reconcile outer walls before resize
Issue: #281
User-Visible: yes
2026-08-24 10:43:33 +03:00
Sergey Matyunin 38ea8a9b9e fix: validate optimize opening rehosts
Issue: #280
User-Visible: yes
2026-08-24 10:33:05 +03:00
Sergey Matyunin c0c30d645a fix: preserve near-orthogonal wall junctions
Issue: #279
User-Visible: yes
2026-08-24 10:27:13 +03:00
Sergey Matyunin 8aa7fc970c Release v1.67.0-beta.8 candidate
Package the reviewed Optimize reconciliation, safe fixed-topology Resize and wall-union isolation fixes from #276, #277 and #278 as the eighth v1.67 prerelease candidate.

Issue: #278
User-Visible: yes
2026-08-24 09:39:11 +03:00
Sergey Matyunin 8156f80140 fix: isolate wall union failures and guard geometry writes
Issue: #278
User-Visible: yes
2026-08-24 08:48:37 +03:00
Sergey Matyunin 2e22ed7938 fix: stop resize before lossy metadata rekey
Issue: #277
User-Visible: yes
2026-08-24 07:10:27 +03:00
Sergey Matyunin 6335b0e519 fix: make room resize topology-safe
Issue: #277
User-Visible: yes
2026-08-24 07:03:24 +03:00
Sergey Matyunin a605611105 fix: reconcile coincident partitions during Optimize
Issue: #276
User-Visible: yes
2026-08-24 05:27:20 +03:00
Sergey Matyunin ca8390366f Release v1.67.0-beta.7 candidate
Package the reviewed orthogonal multi-wall strip containment fix from #275 as the seventh v1.67 prerelease candidate.

Issue: #275
User-Visible: yes
2026-08-24 02:29:41 +03:00
Sergey Matyunin 7bcc5b285b fix: preserve orthogonal wall strips at multi-wall joins
Issue: #275
User-Visible: yes
2026-08-24 01:47:22 +03:00
Sergey Matyunin 8d2a0505e3 Release v1.67.0-beta.6 candidate
Package the reviewed S8 fixes for finite and hole-free wall junctions, topology-safe Optimize cleanup, and wireless-controller presentation parity.

Issue: #271
Issue: #272
Issue: #273
Issue: #274
User-Visible: yes
2026-08-24 00:13:35 +03:00
Sergey Matyunin c9b8497f58 fix: keep wireless controller face consistent
Issue: #274
User-Visible: yes
2026-08-23 22:24:32 +03:00
Sergey Matyunin 3fedcaf1d5 fix: open multi-wall bevel holes to exterior
Issue: #272
User-Visible: yes
2026-08-23 21:23:42 +03:00
Sergey Matyunin e3b635aba2 fix(walls): bound multi-wall repairs to finite rays
Issue: #271
User-Visible: yes
2026-08-23 21:06:20 +03:00
Sergey Matyunin 105a8f70eb fix: collapse thickness island beside one T-node
Issue: #273
User-Visible: yes
2026-08-23 20:20:03 +03:00
Sergey Matyunin 1d0e0c5ab8 chore(release): prepare v1.67.0-beta.5
Issue: #258
Issue: #261
Issue: #262
User-Visible: yes
2026-08-23 18:40:44 +03:00
Sergey Matyunin 8cdf6b4894 fix: restore one child of a deleted device
Issue: #262
User-Visible: yes
2026-08-23 16:32:12 +03:00
Sergey Matyunin 0dc6c39784 fix: retain bounded T-junction masonry
Issue: #261
User-Visible: yes
2026-08-23 15:35:27 +03:00
Sergey Matyunin 61bf537b58 docs: correct wall-key changelog claim
Issue: #258
User-Visible: no
2026-08-23 14:40:14 +03:00
Sergey Matyunin 28eaf86662 fix: stabilize wall keys across storage round-trips
Issue: #258
User-Visible: yes
2026-08-23 14:21:36 +03:00
Sergey Matyunin 8c7e8bc9d1 chore(release): prepare v1.67.0-beta.4
Issue: #249
Issue: #251
Issue: #252
Issue: #253
Issue: #256
User-Visible: yes
2026-08-23 12:06:29 +03:00
Sergey Matyunin bfdeb493cb fix: preserve wall thickness across partial resize
Issue: #253
User-Visible: yes
2026-08-23 11:42:43 +03:00
Sergey Matyuninandclaude[bot] 36b5a8c36c fix: clean orphaned Optimize positions
Issue: #252
User-Visible: yes
2026-08-23 08:06:22 +00:00
Sergey Matyunin 2cb7c73cad fix: separate controller and target availability
Issue: #251
User-Visible: yes
2026-08-23 08:08:17 +03:00
Sergey Matyuninandclaude[bot] 21db2b2898 fix: preserve bounded multi-wall floor geometry
Issue: #249
User-Visible: yes
2026-08-23 03:47:19 +00:00
Sergey Matyuninandclaude[bot] 29904df6ee fix: bound multi-wall junction bevels
Issue: #249
User-Visible: yes
2026-08-23 03:47:19 +00:00
Sergey Matyunin 9c5eacfd02 chore(release): prepare v1.67.0-beta.3
Issue: #244
Issue: #248
Issue: #250
User-Visible: yes
2026-08-23 02:42:37 +03:00
Sergey Matyunin 0eb9ffe480 fix: keep flipped openings on wall centerline
Issue: #250
User-Visible: yes
2026-08-23 01:59:26 +03:00
Sergey Matyunin cbdd5a7e73 fix: keep Optimize idempotent across storage reload
Issue: #248
User-Visible: yes
2026-08-23 01:13:27 +03:00
Sergey Matyunin 6a151d1ead fix: preserve markers when deleting final space
Issue: #244
User-Visible: yes
2026-08-23 00:35:48 +03:00
Sergey Matyunin f6f877e393 fix(spaces): repair orphaned plan references
Issue: #244
User-Visible: yes
2026-08-23 00:34:55 +03:00
Sergey Matyunin 1af9cfce42 Release v1.67.0-beta.2 candidate
Issue: #231
Issue: #242
Issue: #243
User-Visible: yes
2026-08-22 23:46:11 +03:00
Sergey Matyunin a65db3985d fix(openings): preserve gate flip turn direction
Address code review H1 by keeping gate flip direction observable without a second vertical mirror. Add fail-closed golden contracts, smoke coverage, and a mutation guard for the affected opening-symbol geometry.

Issue: #242
User-Visible: yes
2026-08-22 21:14:37 +03:00
Sergey Matyunin 6d6db12c79 fix(openings): center symbols across wall depth
Issue: #242
User-Visible: yes
2026-08-22 20:23:20 +03:00
Sergey Matyunin e6ac0337d0 fix(tabs): restore captured mouse reordering
Issue: #243
User-Visible: yes
2026-08-22 19:42:15 +03:00
Sergey Matyuninandclaude[bot] 09ab9266c0 fix: render decor above room fills
Issue: #231
User-Visible: yes
2026-08-22 15:58:00 +00:00
Sergey Matyunin dcb752db73 Release v1.67.0-beta.1 candidate
Package the reviewed post-v1.66 Plan precision, geometry durability, backup, ordering, and marker-deduplication work as the first v1.67 prerelease. Versions, production bundles, bilingual changelogs, release notes, status, and documentation provenance are synchronized.

Issue: #199
Issue: #220
Issue: #223
Issue: #224
Issue: #225
Issue: #226
Issue: #228
Issue: #229
Issue: #230
Issue: #233
Issue: #234
Issue: #238
Issue: #239
User-Visible: yes
2026-08-22 17:18:20 +03:00
Sergey Matyunin 7105e645d9 fix: sync live wall thickness preview
Issue: #234
User-Visible: yes
2026-08-22 16:49:29 +03:00
Sergey Matyunin 482afb73eb feat: block unsafe Optimize geometry
Issue: #199
User-Visible: yes
2026-08-22 16:29:33 +03:00
Sergey Matyunin 4a798e3e13 fix: canonicalize persisted geometry
Issue: #224
User-Visible: yes
2026-08-22 14:47:38 +03:00
Sergey Matyunin 0d91c1e18e fix: make plan visuals grid-scale invariant
Issue: #239
User-Visible: yes
2026-08-22 13:45:26 +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
Sergey Matyunin 691cea074b fix: close plan repair review findings
Issue: #228
User-Visible: yes
2026-08-22 10:56:38 +03:00
Sergey Matyunin 2f968996b1 fix: make plan drawing fail closed
Issue: #228
User-Visible: yes
2026-08-22 10:56:22 +03:00
Matysh abfaae3e38 feat: measure resize labels between wall faces
Issue: #233
User-Visible: yes
2026-08-22 09:45:15 +03: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
CodexandCodex edf1cca8e3 feat: hatch density is a distance, not a count of units (#230)
Одна и та же стена 15 см выглядела на планах с разным `cell_cm` по-разному:
шаг паттерна был константой в юнитах, а толщина стены переводится в юниты через
`cell_cm`, — значит число полос было пропорционально `1/cell_cm`. Разброс между
крайними масштабами достигал 25 раз, а при `cell_cm ≥ 10` в стену не попадало
и одной полосы: штриховка вырождалась в случайные штрихи или исчезала.

Шаг стал физической величиной: `wallHatchStepUnits(cellCm)` возвращает
`8 × (5 / cell_cm)` — это 9.6 см плана при любом масштабе сетки и ровно
исторические 8 юнитов при эталонном `cell_cm: 5`, так что старые планы не
двигаются. Толщина штриха следует за шагом, поэтому соотношение «штрих к
просвету» тоже перестало зависеть от масштаба.

Формула из описания issue (`cell_cm / 5`) не годилась: она увеличивает шаг там,
где стена и без того тонкая в юнитах, и разброс не исчезает, а растёт — 39
полос против 0.06 на краях диапазона. Множитель обратный; на эту ошибку
поставлен отдельный мутант `hatch-step-inverted`.

Зумовая компенсация `1/zoom` убрана по решению владельца (§4.2 ТЗ): стена,
которая меняет штриховку при зуме, — это тот же дефект, только по другой оси.
От каши на дальнем конце зума защищает второй порог `wallHatchNeedsSolid`
рядом с существующим `wallBodyNeedsSolid`; шаг клампится в [0.5, 80] юнитов,
чтобы патологический `cell_cm` не выродил паттерн.

Статический рендерер (`space-render.ts`) нёс собственную константу 8 и вообще
не знал про зум — то есть уже сегодня расходился с картой при любом зуме,
кроме единицы. Теперь оба читают шаг из одной функции; смок проверяет, что они
согласны между собой, а не только каждый сам с собой.

Два golden-эталона переснято осознанно (`golden:accept -- --reviewed`):
`large-house-zoom-040-dark` (шаг был 20 юнитов, стал 8) и
`large-house-zoom-250-dark` (был 3.2, стал 8). Расхождение осмотрено: меняется
только плотность штриховки тел стен, колонн и перегородок, геометрия и цвета
идентичны. Остальные 80 сцен не тронуты — `accept` переснимает весь набор, и
пять сцен, разошедшихся на шуме рендера, возвращены к прежним байтам вместе с
их хэшами в индексе.

Issue: #230
User-Visible: yes
2026-08-21 15:12:08 +03:00
Codex e6be43b90f feat: a straight wall is one record, not a row of seams (#229)
Рисование прямой стены в несколько кликов оставляло по записи на каждый
отрезок. Швы невидимы, пока их не тронешь: выделение хватает кусок,
перетаскивание ломает стену пополам, толщина задаётся пофрагментно. У стен
комнат этого давно нет — `normalizeWallIntervals` схлопывает каждый сплошной
участок одной толщины. Независимые перегородки жили по другому правилу.

Новый чистый модуль `src/wall-merge.ts` даёт им то же правило:

- `mergeCollinearPartitions` сращивает соседей одинаковой толщины и
  направления до неподвижной точки, но только там, где узел никому не нужен.
  Узел остаётся, если в него приходит третья перегородка, стена комнаты
  (стороной, а не только вершиной), колонна или конец сохранённого черновика.
- Направление выжившей записи канонизируется лексикографически: иначе одна и
  та же физическая стена выходила то a→b, то b→a в зависимости от порядка
  входа, и каждый host.t вдоль неё переворачивался вместе с ней.
- `applyOpeningMoves` переносит проёмы на выжившую запись: и авторитетный
  `host`, и legacy-проекцию `x/y/angle`, которую рисует старый читатель
  конфига (docs/CONFIG-COMPATIBILITY.md, #132). Проекция здесь не кэш —
  канонизация направления разворачивает угол на 180°.

Рисование сращивает только свою цепочку и то, чего она коснулась (§8.6 ТЗ):
молча править чужие швы в стороне оно не вправе — для этого есть
«Оптимизировать планы» с предпросмотром, отчётом и отменой. Оптимизация
проходит по всему пространству без seed-ограничения и отдельной строкой
сообщает, сколько записей исчезло.

Issue: #229
User-Visible: yes
2026-08-21 12:40:34 +03:00