Remove the HA Dashboard tab and the Qt WebEngine dependency (D40)
DSH-1 ended with a negative result: the Frame's system WebEngine can't be loaded, and bundling our own failed (no sandbox, ICU resources, Vulkan abort, empty page). Reverts the tab (60deb43), the container packages (0676998) and the bundler's WebEngine support (b823ff3,e2cfa8e), and updates the docs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+10
-13
@@ -57,18 +57,15 @@ Three layers; dependencies only go downward (D17).
|
||||
|
||||
- **MQTT is the only channel for everything device-related:** entities, services, availability
|
||||
(D24).
|
||||
- MQTT can't show HA as a whole (other entities' states, service calls for them), which the
|
||||
dashboard (DSH-1) needs. The dashboard gets **its own channel, separate from MQTT**:
|
||||
- MQTT can't show HA as a whole (other entities' states, service calls for them), which a
|
||||
dashboard needs. The dashboard gets **its own channel, separate from MQTT**:
|
||||
- Q2a, HA web UI in Qt WebEngine: the browser talks to HA itself (HTTP/WebSocket, HA's own
|
||||
login); config: HA URL.
|
||||
login); config: HA URL. **Failed on the Frame (D40)**: the system WebEngine can't be
|
||||
loaded, a bundled one didn't work (STEAM-FRAME.md).
|
||||
- Q2b, native QML dashboard: HA's WebSocket API with a token (Q3) as another I/O component;
|
||||
config: HA URL and token.
|
||||
- Both fit the three layers. The MVP contains the web UI test (DSH-1, D28), which also serves
|
||||
as the spike on WebEngine in the off-screen renderer; Q2/Q3 are decided for DSH-2.
|
||||
- Known DSH-1 risks: WebEngine must be initialised before the `QGuiApplication` (created by the
|
||||
platform's base constructor), so the platform needs a small change; WebEngine with our
|
||||
off-screen renderer, especially Vulkan, is untested; text fields inside the page probably
|
||||
don't open the SteamVR keyboard (fallback: log in once in a desktop mode).
|
||||
- Both fit the three layers. The web UI test (DSH-1, D28) answered Q2a with "no"; Q2/Q3 are
|
||||
decided for DSH-2, with the native dashboard as the candidate.
|
||||
|
||||
## Start-up and modes
|
||||
|
||||
@@ -102,7 +99,7 @@ Two overlay kinds in the platform (D25):
|
||||
| Main tab "Frame Assistant" (UI-1, later NOT-7, do-not-disturb) | dashboard tab | always there; SteamVR shows/hides it | ✓ |
|
||||
| Notifications | world overlay | the app (notification manager) shows/hides it | ✓ |
|
||||
| Status tab (SRV-6) | dashboard tab | exists only while cards exist (D9) | ✗ |
|
||||
| "HA Dashboard" (DSH-1, web UI test) | dashboard tab | always there | ✓ |
|
||||
| HA dashboard (DSH-2) | dashboard tab | always there | ✗ (web UI test DSH-1 removed, D40) |
|
||||
|
||||
- **World overlays (MVP):** a new overlay kind next to the dashboard tab (CLAUDE.md, "Planned
|
||||
extension"). The surface gets a kind and a placement; renders only while visible (NFR-3).
|
||||
@@ -150,7 +147,7 @@ and signals across threads are delivered through the receiver's event loop.
|
||||
| **I/O wrappers** | Data sources and actuators; know nothing about HA. One wrapper object per OpenVR interface used (e.g. `IVRSystem`, `IVRApplications`, `IVRChaperone`, `IVRSettings`). System wrappers (network, audio) later. | OpenVR ✓, system ✗ |
|
||||
| **Overlays** | View and controller of MVC (QML), as dashboard tabs or world overlays. Get their data (the model) from other objects. | ✓ |
|
||||
| **Managers** | One object per stateful feature that manages and coordinates it, using entities, services and overlays. Notification manager (MVP); status card manager (SRV-6/7) later. | notifications ✓ |
|
||||
| **HA web UI** | Encapsulates Qt WebEngine for the dashboard tab (DSH-1; Q2 for DSH-2). `src/ha/HaWebUi`, a QML singleton in the app itself (not `frameassistant_lib`: QML types must be part of the QML module). | ✓ (DSH-1) |
|
||||
| **HA web UI** | Was: Qt WebEngine for the dashboard tab (DSH-1). Dropped (D40); a native dashboard (DSH-2) would need its own object class. | ✗ |
|
||||
| **Configuration** | Settings from the JSON file, loaded once by the app as an immutable value. Each component gets the part it needs through its constructor (D19). | ✓ |
|
||||
| **App** | The managing object: owns all of the above as components and wires them together. | ✓ |
|
||||
|
||||
@@ -307,7 +304,7 @@ Layout follows common practice (e.g. Zigbee2MQTT's `…/<device>/set`); one topi
|
||||
| `mqtt.tls.ca_file` | no | system certificates | own CA, e.g. a self-signed broker certificate |
|
||||
| `mqtt.tls.cert_file` / `key_file` | no | none | client certificate, if the broker requires one |
|
||||
| `homeassistant.discovery_prefix` | no | `homeassistant` | |
|
||||
| `homeassistant.url` | for DSH-1 only | — | missing: the dashboard tab shows a hint instead of the web UI |
|
||||
| `homeassistant.url` | no | — | reserved for the dashboard (DSH-2); not used yet (D40) |
|
||||
| `notifications.timeout_s` | no | 10 | D33 |
|
||||
|
||||
- Errors (missing required values, invalid JSON, wrong types): exit with a message and exit
|
||||
@@ -447,4 +444,4 @@ Collected 2026-10-05 for the notification design.
|
||||
| D36 | 2026-10-05 | NFR-3 measured as own cost (CPU idle, frames while hidden, GPU per frame) plus an A/B comparison of the game's compositor statistics; manual in the MVP, a `--vr-stats` mode later | Measurable acceptance for NFR-3 without extra code in the MVP |
|
||||
| D37 | 2026-10-05 | The MVP is implemented in four iterations: 1 DSH-1 + configuration, 2 MQTT/HA device/UI-1, 3 sensors, 4 notifications | Small iterations (working rules); DSH-1 first because the user wants to see it early and it doesn't depend on MQTT |
|
||||
| D38 | 2026-10-05 | App-specific command-line options: the platform's base constructor takes an optional list of extra options, parses them with its own and exposes their values | The command line is parsed in the base constructor, before the derived app can contribute (`--config`); backward compatible, `--help` stays complete |
|
||||
| D39 | 2026-10-05 | DSH-1: `QtWebEngineQuick::initialize()` in `main.cpp` (no platform change); a named, persistent WebEngine profile under `~/.local/share/frameassistant/`; tab name "HA Dashboard" | WebEngine must be initialised before the `QGuiApplication`; the HA login must survive restarts |
|
||||
| D39 | 2026-10-05 | *Superseded by D40 (REQUIREMENTS.md): tab and WebEngine removed.* DSH-1: `QtWebEngineQuick::initialize()` in `main.cpp` (no platform change); a named, persistent WebEngine profile under `~/.local/share/frameassistant/`; tab name "HA Dashboard" | WebEngine must be initialised before the `QGuiApplication`; the HA login must survive restarts |
|
||||
|
||||
Reference in New Issue
Block a user