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:
2026-10-05 23:04:24 +02:00
co-authored by Claude Opus 5.5
parent e2cfa8ea5b
commit c5c176644a
19 changed files with 59 additions and 278 deletions
+10 -13
View File
@@ -30,7 +30,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
it reports headset/environment sensors to Home Assistant, offers services Home Assistant can
call (e.g. notifications in the headset), and shows a Home Assistant dashboard as a SteamVR
dashboard tab. Status: the overlay platform works; the Home Assistant parts are being built
(implementation iteration 1: settings file and the "HA Dashboard" web UI tab).
(implementation iteration 1: settings file; the web UI tab was dropped, see REQUIREMENTS.md D40).
**Start every session by reading `docs/PROGRESS.md`** (current state, next steps, log).
@@ -61,7 +61,7 @@ cmake --preset native-debug && cmake --build --preset native-debug # system Qt
ctest --preset native-debug # all tests
build/native-debug/bin/tst_inputbridge clickUsesGlCoordinates # one QtTest function
build/native-debug/bin/frame-assistant --desktop # UI preview in a window, no SteamVR
build/native-debug/bin/frame-assistant --snapshot x.png # x-0.png (main tab), x-dashboard.png
build/native-debug/bin/frame-assistant --snapshot x.png # one frame via the real offscreen path
scripts/container-build.sh cross # x86_64 → aarch64 against the Frame's system Qt (default)
scripts/container-build.sh native # same for the host arch (use on the Frame)
scripts/container-build.sh cross-bundle # fallback: self-contained, Qt bundled (also native-bundle)
@@ -72,9 +72,8 @@ build/native-debug/bin/frame-assistant --graphics-api vulkan --benchmark 600 #
```
- Use `--snapshot` and then read the PNGs to check UI or rendering changes without a headset.
With several surfaces it writes `<name>-<id>.png` per surface (`-0` for the main tab's
empty id). Snapshot and benchmark don't load the settings, so the "HA Dashboard" tab shows
its "no URL" hint there.
With several surfaces it writes `<name>-<id>.png` per surface (`-0` for an empty id).
Snapshot and benchmark don't load the settings.
- Overlay and desktop mode need a settings file; pass a test one with `--config <path>`.
- `tst_render` runs once per backend (`VRDASH_TEST_API`, separate CTest entries, because the
Qt graphics API is process-global). It QSKIPs without a GPU context or when Vulkan isn't
@@ -198,16 +197,16 @@ into Qt events.
`create()` (e.g. give the constructor a required `QObject* parent` and init it `{nullptr}`).
- **App code layout:** logic without SteamVR or rendering goes into the static library
`frameassistant_lib` (`src/config/`, …), which the app and its tests link. QML types
(`QML_ELEMENT`, e.g. `src/ha/HaWebUi`) go into `QML_SOURCES` of `vrdash_add_dashboard()`:
(`QML_ELEMENT`) go into `QML_SOURCES` of `vrdash_add_dashboard()`:
they must be part of the QML module. The generated type registration includes their
headers by file name only, so their directory is on the app's include path.
- **Settings** (`src/config/Config`) are loaded once in `Dashboard::prepare()` (overlay and
desktop mode) and passed on as an immutable value (DESIGN.md, D19).
- **Qt WebEngine** ("HA Dashboard" tab): `QtWebEngineQuick::initialize()` runs in `main()`
before the app object, because it must precede the `QGuiApplication`. `HaWebUi` creates a
persistent profile under `~/.local/share/frameassistant/webengine` with the Qt 6.8 API
(setters on `QQuickWebEngineProfile`). Qt ≥ 6.9 logs a hint to use
`WebEngineProfilePrototype` instead, which the Frame's Qt 6.8 doesn't have.
- **No Qt WebEngine** (REQUIREMENTS.md, D40): the Frame's system WebEngine can't be loaded, and bundling our own
failed (STEAM-FRAME.md). Don't link it: the whole app would fail to start on the Frame.
- **Check Frame libraries by loading, not by file:** before relying on a system library, check
`ldd <lib> | grep "not found"` and that its package version matches the rest of Qt
(`pacman -Q | grep qt6-`).
- **moc and raw string literals:** a raw string containing `//` (e.g. a URL) makes moc treat
the rest as a comment; it then misses `Q_OBJECT` classes in that file (link error "vtable
for …"). In moc'ed files, write such text as normal string literals (`tst_config` uses
@@ -333,5 +332,3 @@ Check these when testing on the device, and update this list:
- The restructured app code (base class `DashboardApplication`, `Surface`, `Overlay` base,
active-surface navigation) has only been tested off the device so far.
- Several dashboard tabs from one process (works in `tst_surfaces`, not tried in SteamVR).
- Qt WebEngine in the off-screen renderer (Vulkan and OpenGL), the SteamVR keyboard in web
page input fields, and the persistent login ("HA Dashboard" tab, DSH-1).