docs(hygiene): ARCHITECTURE.md — карта, а не хроника (#680)

Волна 3 эпика #674. ARCHITECTURE.md 2330 → 653 строки: система координат
прототипа 1489×1053, разделы Hidden Isometric Stage 2/4 (текущее — ISOMETRIC.md,
история — ADR 122/570), хроники «Additions v1.28–v1.41» и «Audit follow-ups»
сняты; подсистемы — короткое описание со ссылкой на канонический документ.
Устаревшее исправлено по коду: дерево Layout (store.py, frontend_registration,
весь список модулей), хранилища (config, layout, virtual_lights, trails),
ленивые локали de и fr, таблица WS API (31 + 3 команды, #256-проекция,
space/delete, files/cleanup без keep, контент через /api/houseplan/content),
DevItem без несуществующих полей, отказ help/feedback по support_api.

Всё ещё верное и не записанное в другом месте перенесено в канонические
документы: DEVICE-PRESENTATION (заметки реализации, Action authority, черновик
диалога), RADAR (карта реализации), VACUUM (владение кодом), CANVAS (icon_size,
--hp-cell-visual-scale, барьер записи координат), FILTERING (#44, каталог),
DECOR-EDITOR §7 (инварианты бэкенда ассетов), WALL-THICKNESS (§1 идентичность
и нулевые стены, §2 кэши, §4 hover/туннели/острова, §6 удаление комнаты,
§9 failed-core, §11 завершение цепочки и комната по грани), ISOMETRIC
(isoPlaneMatrix, iso-overlays, створки, служебные атрибуты), LIGHT (Glow над
заливкой #55, формула и screen-смешение), CONFIG-COMPATIBILITY (манифест схемы
#33, Masonry-слоты #561, квадратный холст v1.48, устаревшие URL контента,
layout/set #356), SCOPE (таблица владельцев при сборке файлов), WARM-REMOUNT
§5 (холодная загрузка и визуальная непрерывность), UX-MODES (порядок
стартового пространства), PDF-EXPORT (граница реализации), FURNITURE (adopt,
BOOT_MAX_MS). Раздел TESTING «Backend quality gates (#42)» и строка
DEVELOPMENT о bundle-freshness — из того же разбора, в предыдущем коммите.

Issue: #680
User-Visible: no
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
This commit is contained in:
Claude
2026-09-27 22:33:04 +03:00
parent 696f5a789f
commit 4bc3e9baa6
16 changed files with 977 additions and 2231 deletions
+14
View File
@@ -52,6 +52,15 @@ as the SEEDER of initial hidden flags.
"Group", scene-like models, bridges, myheat children, and individual lamp
devices in an area covered by a light group (when group folding is on).
The two inputs of that rule are visible settings, not hidden knobs (#44):
`settings.group_lights` and `settings.exclude_integrations` are edited in the
Devices catalog's **Discovery filters** section. One resolver,
`effectiveExcludedIntegrations()` (`devices.ts`), feeds discovery, the
materialisation seed and room climate on both cards; the section's preview diffs
the real `seedHiddenBindings()` and `buildDevices()` outputs for current and
draft settings, so no second copy of the filter logic exists. Both fields are
`current` in the field registry (#33).
The seeder runs on the editing client (write permission required) whenever
devices rebuild, and creates `hidden: true` stub markers for non-physical
devices in BOUND areas that have NO marker. It is idempotent: marked devices
@@ -89,6 +98,11 @@ the old behaviour until an editing client materialises it.
`device-inbox.ts` projection. Exact bindings stay in one user-intent category
(`on_plan`, `available`, `hidden`, `readd`); HA disabled/orphaned/unverified
is an independent operational status and never silently moves a row.
The binding picker and the catalog share the pure `bindingCandidates()`
eligibility helper; filtering and paging run only after the full candidate
snapshot, so large registries cannot hide later exact entities.
`buildDeviceInbox()` combines runtime devices, markers, tombstones, HA binding
statuses and `new_device_ids` without owning persistence or Lit state.
- **Show hidden on plan** in that catalog is LOCAL, ephemeral state of the
current editor session. A disabled ghost is grey and explicitly labelled;
it cannot be dragged or shown until the binding is activated in HA. Its