mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-03 13:18:58 +00:00
@@ -105,6 +105,23 @@ git config core.untrackedCache true
|
||||
|
||||
## Maintenance diagnostics
|
||||
|
||||
### Labs presentation flags
|
||||
|
||||
Labs is an internal, presentation-only runtime in `src/labs.ts`; it must never
|
||||
gate config/schema migrations, persistence writes, HA services or network
|
||||
requests. Enable the current experiment with `?hp-labs=iso` (or
|
||||
`#hp-labs=iso&space=<id>`), remove it with `-iso`, and clear all flags with
|
||||
`hp-labs=off`. Known URL operations persist to
|
||||
`houseplan_card_labs_v1` without rewriting the URL. Active flags are exposed for
|
||||
diagnostics as the frozen sorted `window.__hpLabs` array.
|
||||
|
||||
To add a flag, add one unique lowercase id plus issue, `since`, `expires` and a
|
||||
non-empty summary to `LABS_FLAGS`, then cover URL/storage ordering, runtime
|
||||
subscription and expiry. Versions compare the numeric `major.minor.patch` core:
|
||||
at `expires` (including its first beta) the flag is dead and every activation
|
||||
path fails closed. Remove or graduate a flag before its expiry cycle; do not
|
||||
extend an expiry silently. See `docs/ISOMETRIC.md` for the current Stage 1 use.
|
||||
|
||||
These commands are read-only diagnostics, not release gates:
|
||||
|
||||
```bash
|
||||
@@ -115,6 +132,9 @@ npm run audit:config -- path/to/houseplan-config.json
|
||||
# Reproducible synthetic large-house report (seven measured samples + warm-up).
|
||||
npm run benchmark:large-house -- --samples=7 --warmups=1 --output=artifacts/performance/local.json
|
||||
|
||||
# Hidden isometric profile; diagnostic only outside exact-SHA Linux CI.
|
||||
npm run benchmark:large-house-isometric -- --samples=7 --warmups=1 --output=artifacts/performance/isometric-local.json
|
||||
|
||||
# Golden candidates never overwrite reviewed references.
|
||||
npm run golden:capture
|
||||
npm run golden:verify
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
# Isometric Stage 1 internals
|
||||
|
||||
Issue [#89](https://github.com/Matysh/houseplan-card/issues/89) implements a
|
||||
hidden, presentation-only volumetric View experiment. The normative contract is
|
||||
`docs/specs/089-isometric-view-stage1.md`; the fixed rendering decisions are in
|
||||
`docs/adr/089-isometric-stage1-renderer.md`.
|
||||
|
||||
## Activation and lifetime
|
||||
|
||||
The feature exists only while the `iso` entry in `src/labs.ts` is live. For the
|
||||
v1.62 cycle it can be enabled with either `?hp-labs=iso` or
|
||||
`#hp-labs=iso&space=<id>`. Query operations are applied first and hash operations
|
||||
second. `-iso` removes this flag and `off` clears every Labs flag. A known URL
|
||||
operation is persisted in `houseplan_card_labs_v1`; the URL itself is not
|
||||
rewritten.
|
||||
|
||||
The selected presentation is stored per space in `houseplan_card_view_v1`. Flat
|
||||
is always the initial default. Kiosk has no toggle but reads the saved preference.
|
||||
Editors and `houseplan-space-card` are always flat.
|
||||
|
||||
The current registry entry is live from numeric core `1.62.0` and expires at
|
||||
`1.65.0`. Thus `1.65.0-beta.1` is already expired. Malformed versions, malformed
|
||||
entries and duplicate ids fail closed. Labs never gate schemas, migrations,
|
||||
stores, service calls or network requests.
|
||||
|
||||
## Coordinate systems
|
||||
|
||||
- Plan points are the existing 1000-unit logical floor coordinates.
|
||||
- Scene points are coordinates in the effective SVG viewBox.
|
||||
- HTML devices, vacuum pucks, room labels/cards and lock markers stay
|
||||
screen-facing. Their anchors use the same `projectPlanPoint()` snapshot as the
|
||||
SVG floor.
|
||||
- `clientToScenePoint()` maps a client point to the current scene; floor hit
|
||||
testing then uses `unprojectFloorPoint()`.
|
||||
|
||||
Stage 1 uses a fixed orthographic affine camera:
|
||||
|
||||
```text
|
||||
rotDeg=0, tiltDeg=20, xyScale=1, zScale=1, origin=[500,500]
|
||||
wallHeight=64 plan units
|
||||
```
|
||||
|
||||
There is no perspective, free rotation or user tilt. Switching projections
|
||||
preserves scalar zoom and converts the view centre through logical floor space.
|
||||
`projectedFrame()` includes both floor corners and wall-top corners so fit/home
|
||||
cannot clip the volume.
|
||||
|
||||
## Geometry and composition
|
||||
|
||||
`src/iso-projection.ts` owns pure projection math. `src/iso-walls.ts` consumes
|
||||
the canonical `wallBodiesGeometry()` MultiPolygon after openings and extra
|
||||
physical bodies have been resolved. It normalizes outer/hole winding, builds one
|
||||
evenodd top path and at most one visible side per ring edge, then uses a stable
|
||||
depth/order tie-break. Complexity is O(E) in canonical ring edges.
|
||||
|
||||
The content fingerprint includes rooms, wall geometry/thickness, open cuts,
|
||||
openings, partitions, drafts, columns, scale/grid inputs, camera, wall height and
|
||||
algorithm version. It deliberately excludes `_cfgEpoch`, HA state, hover and
|
||||
`show_borders`. The per-card LRU is capped at eight scenes. Pan, zoom and HA-only
|
||||
updates reuse it.
|
||||
|
||||
Composition remains SVG-first:
|
||||
|
||||
1. the existing floor SVG and all its current live layers;
|
||||
2. explicit visible wall sides and wall top;
|
||||
3. screen-facing HTML overlays.
|
||||
|
||||
The floor keeps the same nodes and order for paper/backdrop, room fills/hover,
|
||||
Glow/spill, sun, decor/furniture, opening symbols and vacuum path/outline. Stage
|
||||
1 does not add a second light source/layer. Markers and room cards intentionally
|
||||
remain above walls without geometric occlusion.
|
||||
|
||||
## Failure boundary
|
||||
|
||||
Projection/topology failures latch flat fallback for the current
|
||||
`space|fingerprint`. One diagnostic is emitted without config, entity ids or URL
|
||||
data. The saved iso preference is retained; an explicit iso request retries the
|
||||
fingerprint, and changed geometry receives a new fingerprint. Flat rendering is
|
||||
the rollback path and does not depend on the iso cache.
|
||||
|
||||
## Deliberate Stage 1 limits
|
||||
|
||||
- door, window and gate keep their current floor-plane symbol and live state;
|
||||
- no vertical leaf/window panels, sill model or new window light;
|
||||
- no floor-edge extrusion, shadows, photorealistic materials or marker
|
||||
occlusion;
|
||||
- no volumetric editor and no volumetric `houseplan-space-card`;
|
||||
- no YAML/config option or public settings surface.
|
||||
|
||||
Golden references are accepted only from the complete reviewed Linux artifact.
|
||||
The full `large-house-isometric-v1` performance comparison is also canonical on
|
||||
the exact Linux CI SHA.
|
||||
+3
-2
@@ -17,12 +17,13 @@ change must pass through a published beta/RC before stable. Stable release
|
||||
commits are promotion-only (versions, generated bundles and release/changelog
|
||||
metadata). Only an explicit owner-approved emergency hotfix may skip this gate.
|
||||
|
||||
## Snapshot (2026-08-12)
|
||||
## Snapshot (2026-08-13)
|
||||
|
||||
| Item | State |
|
||||
|---|---|
|
||||
| Version | **v1.62.0-beta.8** everywhere (manifest, const.py, package.json, CARD_VERSION) — prerelease candidate |
|
||||
| Current local cycle | v1.62.0-beta.8 combines Window / Door / Gate placement under the Opening sub-menu, renders the full 50%-opacity placement preview over physical walls, fixes first-click editor closing and incorporates the agreed beta.7 recursive code-review hardening. Issues #89 and #103 remain specification/backlog-only. |
|
||||
| Current local cycle | v1.62.0-beta.8 combines Window / Door / Gate placement under the Opening sub-menu, renders the full 50%-opacity placement preview over physical walls, fixes first-click editor closing and incorporates the agreed beta.7 recursive code-review hardening. Issue #103 remains specification/backlog-only. |
|
||||
| Hidden Labs Stage | #89 Stage 1 implements a fixed near-top orthographic volumetric View behind the expiring `iso` Labs flag. Flat remains default; editors and `houseplan-space-card` remain flat; all existing floor live effects and HA actions are preserved. This is internal, not a released/public feature. |
|
||||
| Workflow | Owner's rule since 2026-08-07: ordinary fixes/features are made **locally, without tests and without commits**. A requested pre-release gets a production build plus the smallest targeted unit/smoke set covering the changed surfaces, one tested `dev` commit/tag and a GitHub Release with `prerelease=true`; `main` stays untouched. The complete local frontend/backend/smoke gate runs only before a stable release, after which `main` is fast-forwarded to the exact tested `dev` SHA and the GitHub Release uses `prerelease=false`. Release bodies are short and bilingual (Russian first): only significant user changes get individual bullets, while minor/code-only work is grouped as `Мелкие исправления и улучшения` / `Small fixes and improvements`; every body ends with separate links to the Russian and English changelogs. Detailed RU/EN changelog bullets may link the corresponding closed GitHub Issues; open or partially delivered issues are never presented as shipped. Telegram announcements are sent only for stable releases; beta and RC publication is silent. `docs/RELEASE-NOTES.md` is the current canonical body instance; `npm run release:prerelease -- <tag> --issues=… --yes` is the primary local publication path and the manual `Publish prerelease` workflow is its GitHub-only equivalent once present on `main`. Nothing is copied to the home instance by hand |
|
||||
| GitHub | https://github.com/Matysh/houseplan-card — [Issues](https://github.com/Matysh/houseplan-card/issues) are the canonical task records and the linked [Project v2](https://github.com/users/Matysh/projects/1) is the canonical priority/status view; both must stay current. `main` carries stable releases; pre-release tags may point directly at `dev`. Work lands on `dev` and is merged into `main` for a stable release, so `dev` is normally equal to or ahead of `main`, never behind. Push via SSH key `ha_jb` (remote git@github.com:…); API releases via the fine-grained PAT in `~/.git-credentials` (Contents R/W, issued 2026-07-23) |
|
||||
| CI | Prerelease publication requires a green exact-SHA Validate: frontend/backend, smoke (including the #73 rAF frame sampler), golden, HACS/Hassfest and a short absolute-ceiling performance smoke. Obsolete same-ref Validate runs are cancelled. Full seven-sample base/candidate performance moved to `performance.yml` (`main` push, weekly, manual); stable release assets fail closed unless Validate and Full Performance are green for the exact tagged SHA and the stable-only CDP compositor screencast finds no empty/black presented frame. |
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
- Issue: https://github.com/Matysh/houseplan-card/issues/89
|
||||
- Приоритет: **P1**, feature
|
||||
- Статус ТЗ: **на независимом ревью** (ревизия 3, решения владельца 2026-08-13).
|
||||
Ревизия 2 предшествует действующему процессу и новым визуальным референсам;
|
||||
эта редакция обязана получить независимое ревью до `S5-ready`.
|
||||
- Статус ТЗ: **принято к реализации** (ревизия 3, решения владельца и зелёное
|
||||
независимое ревью ТЗ 2026-08-13).
|
||||
Ревизия 2 предшествует действующему процессу и новым визуальным референсам.
|
||||
- Исследование и продуктовое обоснование: [`089-isometric-view.md`](089-isometric-view.md)
|
||||
(контекст; нормативен настоящий файл)
|
||||
- Историческое ревью ревизии 1 не является доступным артефактом репозитория и
|
||||
|
||||
@@ -43,7 +43,7 @@ GitHub Issues и GitHub Projects (v2) остаются единственным
|
||||
| [#50](https://github.com/Matysh/houseplan-card/issues/50) Экспорт и импорт конфигурации | [050-config-export-import.md](050-config-export-import.md) | реализовано локально; проверки на следующем пре-релизе |
|
||||
| [#58](https://github.com/Matysh/houseplan-card/issues/58) Vacuum integration coverage — Stage 1 | [058-vacuum-stage1.md](058-vacuum-stage1.md) | в реализации |
|
||||
| [#89](https://github.com/Matysh/houseplan-card/issues/89) Опциональный объёмный 2.5D/изометрический вид | [089-isometric-view.md](089-isometric-view.md) | исследование завершено; продуктовый контекст |
|
||||
| [#89](https://github.com/Matysh/houseplan-card/issues/89) Этап 1: объёмный вид за флагом Labs | [089-isometric-view-stage1.md](089-isometric-view-stage1.md) | ТЗ на ревью, ревизия 3 |
|
||||
| [#89](https://github.com/Matysh/houseplan-card/issues/89) Этап 1: объёмный вид за флагом Labs | [089-isometric-view-stage1.md](089-isometric-view-stage1.md) | ТЗ принято, ревизия 3 |
|
||||
| [#98](https://github.com/Matysh/houseplan-card/issues/98) Единая система пульсаций и активностей устройства | [098-device-pulse-system.md](098-device-pulse-system.md) | реализовано локально; ожидает prerelease/CI gate |
|
||||
|
||||
## P2
|
||||
|
||||
Reference in New Issue
Block a user