feat(zigbee): show provider-confirmed parents and coordinator routes

Replace inferred BFS topology with confirmed end-device parents and active
router routes from ZHA and Zigbee2MQTT. Fail closed on ambiguous evidence,
preserve stale snapshots, and request routing tables without hover traffic.
Use solid LQI-coloured arrows, plan-scaled unknown-LQI outlines, and named
unplaced targets. Add provider/runtime/visual regression coverage.

Owner authorized author self-review and merge to dev while the review model
is unavailable; no release or issue closure is included.

Issue: #798
User-Visible: yes
This commit is contained in:
Matysh
2026-10-05 14:57:23 +03:00
parent 0d64547643
commit 370c082f31
31 changed files with 2033 additions and 874 deletions
+11 -3
View File
@@ -33,11 +33,11 @@ that transition events alone prove disposal.
| --- | ---: | --- |
| Performance threshold | 4 | The witness measures real browser wall-time or frame work; a pure assertion cannot prove the budget. |
| Browser harness integrity | 4 | The mutation breaks page-error, round-trip or page-registration observation in the browser harness itself. |
| Paint, cascade and layer composition | 37 | The invariant depends on computed CSS, SVG paint, clipping, stacking or pixels produced by Chromium. |
| Paint, cascade and layer composition | 40 | The invariant depends on computed CSS, SVG paint, clipping, stacking or pixels produced by Chromium. |
| Pointer geometry and trusted interaction | 49 | The invariant depends on hit testing, pointer capture, touch/keyboard dispatch or live DOM geometry. |
| Responsive DOM layout | 38 | The invariant depends on measured element boxes, responsive breakpoints, native/HA dialog shells or focusable target size. |
| Custom-element and HA browser lifecycle | 103 | The invariant crosses Lit/custom-element lifecycle, browser storage/events, lazy loading or a complete HA-card state transition. |
| **Total** | **235 / 200** | Above the guideline `mutation-gate --check` warns rather than fails (#699); each guard above it is held by its own reason in this inventory and its `because`. |
| **Total** | **238 / 200** | Above the guideline `mutation-gate --check` warns rather than fails (#699); each guard above it is held by its own reason in this inventory and its `because`. |
## Measured effect
@@ -93,6 +93,11 @@ The mutation breaks page-error, round-trip or page-registration observation in t
The invariant depends on computed CSS, SVG paint, clipping, stacking or pixels produced by Chromium.
The #798 Zigbee witnesses exercise the mounted SVG for local and parent-bubble
routes in both themes and at minimum/default/maximum plan zoom. Unknown-LQI
outlines must scale with the plan, including live CSS projection; known-LQI
parent routes must retain the same line/arrow color as local routes.
- `daycycle-outline-not-promoted`
- `daycycle-outline-promoted-on-inner-paper`
- `daycycle-static-outline-promoted-on-inner-paper`
@@ -130,6 +135,9 @@ The invariant depends on computed CSS, SVG paint, clipping, stacking or pixels p
- `value-static-icon-keeps-live-vacuum`
- `value-static-icon-keeps-route-warning`
- `value-static-icon-keeps-vacuum-overlay`
- `zigbee-topology-parent-lqi-discarded`
- `zigbee-topology-unknown-arrow-outline-removed`
- `zigbee-topology-unknown-outline-ignores-plan-zoom`
### Pointer geometry and trusted interaction
@@ -332,6 +340,6 @@ The invariant crosses Lit/custom-element lifecycle, browser storage/events, lazy
- `zigbee-topology-hovered-endpoint-elevation-removed`
- `zigbee-topology-overlay-double-live-projection`
- `zigbee-topology-overlay-layer-lowered`
- `zigbee-topology-unknown-casing-gaps-filled`
- `zigbee-topology-solid-route-dashed`
- `zigbee-topology-unknown-casing-removed`
- `zigbee-topology-unrelated-markers-raised`