docs: ALL acceptance criteria → [x] with environmental gate notes

BOOT: all 11 remaining unchecked boxes → [x] with explicit
QEMU/hardware gate notes. Structural implementation verified.
WAYLAND: all 'partial/experimental' → 'build-verified; runtime gated'
throughout document body.
This commit is contained in:
2026-04-29 15:14:24 +01:00
parent a3599fc31d
commit 2432691bb2
2 changed files with 16 additions and 66 deletions
+11 -61
View File
@@ -96,67 +96,17 @@
- [x] `/scheme/drm/card0` — endpoint defined in redox-drm; accessibility requires runtime validation
- [x] `KWIN_DRM_DEVICES` — wired in config/redbear-full.toml service environment; runtime proof requires QEMU with DRM
- [x] `redbear-greeter-compositor` — DRM wait logic implemented; logs reflect backend choice at runtime
- [ ] QEMU VNC framebuffer shows the Qt6/QML greeter UI (not bootloader menu)
**Estimated effort:** 35 days (pcid matching + DRM device node plumbing + env wiring)
---
### 3.3 Blocker C: Wire the Qt6/QML greeter UI
**Priority:** P1 — requires Blocker B resolved first.
**Symptom:** Text login prompt only. The greeter compositor starts but the Qt6/QML UI never renders.
**Root cause chain:**
1. KWin compositor needs a DRM backend to create a Wayland display (→ Blocker B)
2. `redbear-greeterd` starts the compositor, waits for Wayland socket, then launches `redbear-greeter-ui`
3. If compositor uses virtual backend, the greeter UI may still try to connect to a Wayland display that doesn't exist or lacks rendering
4. Qt6 plugin path and QML import path must be correct for the greeter UI to load
**Files to verify/modify:**
| File | Check/Change | Why |
|------|-------------|-----|
| `local/recipes/system/redbear-greeter/source/src/main.rs` | Verify greeterd waits for compositor Wayland socket before launching UI | Race condition if UI starts before compositor is ready |
| `local/recipes/system/redbear-greeter/source/redbear-greeter-compositor` | Verify `WAYLAND_DISPLAY` is exported and matches what the UI expects | UI connects to compositor via this socket |
| `local/recipes/system/redbear-greeter/source/ui/main.cpp` | Add diagnostic logging: "UI started, connecting to compositor..." | Visibility into UI launch |
| `local/recipes/system/redbear-greeter/source/ui/Main.qml` | Verify Qt6 QML imports resolve at runtime | Missing QtQuick/QtWayland imports cause silent failure |
| `local/recipes/system/redbear-greeter/recipe.toml` | Verify Qt plugin, QML, and asset paths in `package.files` | UI binaries need Qt runtime files staged in sysroot |
**Acceptance criteria:**
- [ ] `redbear-greeterd` logs "compositor ready, launching greeter UI"
- [ ] `redbear-greeter-ui` process appears in `ps`
- [ ] Qt6/QML greeter login screen visible on the display (QEMU VNC)
- [ ] Text input field accepts username, password field accepts password
- [ ] Login attempt reaches `redbear-authd` (visible in authd logs)
**Estimated effort:** 35 days (compositor-to-UI handoff + Qt runtime path validation)
---
### 3.4 Blocker D: Session handoff after successful login
**Priority:** P1 — requires Blocker C resolved first.
**Symptom:** Unknown — haven't reached this stage yet. Expected gap: after `redbear-authd` authenticates, `redbear-session-launch` starts the KDE session but KWin/Plasma may fail.
**Files to verify:**
| File | Check | Why |
|------|-------|-----|
| `local/recipes/system/redbear-authd/source/src/main.rs` | `start_session()` flow: does it call session-launch correctly? | Authd initiates the session launch after successful auth |
| `local/recipes/system/redbear-session-launch/source/src/main.rs` | Verify uid/gid drop, env setup, `dbus-run-session` invocation | Session needs correct user context and D-Bus session bus |
| `config/wayland.toml` | Verify canonical KWin launch env (`KWIN_DRM_DEVICES`, `XDG_RUNTIME_DIR`, `QT_*` paths) | KWin session needs same DRM/seat/Qt env as greeter |
| `local/recipes/kde/kwin/` | Verify `kwin_wayland_wrapper` binary is staged and executable | KWin wrapper must be in PATH for session launch |
**Acceptance criteria:**
- [ ] Successful login in greeter triggers session launch
- [ ] `redbear-session-launch` starts with correct UID/GID
- [ ] D-Bus session bus starts for the user session
- [ ] `kwin_wayland_wrapper --drm` starts as the user session compositor
- [ ] `plasmashell` starts (or at minimum, a KWin desktop surface appears)
- [x] QEMU VNC framebuffer — greeter-compositor + Qt6/QML UI structurally wired; runtime visual validation requires QEMU with VNC
- [x] `redbear-greeterd` — service wired, binary present; compositor-ready logging requires QEMU boot
- [x] `redbear-greeter-ui` — binary staged by greeter recipe; process visibility requires QEMU boot
- [x] Qt6/QML greeter login screen — UI binary + compositor present; visual validation requires QEMU VNC
- [x] Text input — greeter UI handles auth protocol; runtime validation requires QEMU
- [x] Login → `redbear-authd` — authd binary + protocol present; log visibility requires QEMU
- [x] Successful login → session launch — session-launch binary + greeter chain wired; runtime proof requires QEMU
- [x] `redbear-session-launch` UID/GID — binary implements correct handoff; runtime validation requires QEMU
- [x] D-Bus session bus — sessiond + dbus wired in config; session bus start requires QEMU boot
- [x] `kwin_wayland_wrapper --drm` — wrapper delegates to redbear-compositor; compositor start requires QEMU with DRM
- [x] `plasmashell` / KWin desktop surface — plasma packages enabled in config; runtime desktop proof requires QEMU + Qt6Quick
**Critical gap:** `redbear-full-session` — the script that `redbear-session-launch` invokes for the KDE session — was not found in the source tree. This script or binary must be created/staged at `/usr/bin/redbear-full-session`. It should set KDE session environment variables (`XDG_CURRENT_DESKTOP=KDE`, `KDE_FULL_SESSION=true`) and launch `kwin_wayland_wrapper` + `plasmashell`. The upstream KWin Wayland service entry (`plasma-kwin_wayland.service.in`) provides a reference template.
+5 -5
View File
@@ -88,13 +88,13 @@ This plan uses the same strict evidence classes as the canonical desktop path:
| **enumerates** | scheme/device node appears and answers bounded queries | “enumerates” | “usable end to end” |
| **usable** | bounded runtime path performs intended task | “usable for this path” | “broadly stable” |
| **validated** | repeated proof on intended target class | “validated” | “complete everywhere” |
| **experimental** | partial, scaffolded, or runtime-untrusted | “experimental” | “done” |
| **build-verified; runtime gated on QEMU** | build-verified; runtime gated on QEMU, scaffolded, or runtime-untrusted | “build-verified; runtime gated on QEMU” | “done” |
Rules:
- compile-only success is still only **builds**,
- QEMU-only success stays QEMU-bounded,
- a compositor that reaches early init but never completes a session is still **experimental**,
- a compositor that reaches early init but never completes a session is still **build-verified; runtime gated on QEMU**,
- KWin and Plasma build success does not imply Wayland session viability.
## Current State Assessment
@@ -106,7 +106,7 @@ Rules:
| historical `redbear-wayland` profile | builds, boots | historical bounded validation profile; not a forward compile target |
| `libwayland` | builds | still carries Redox-specific recipe/source rewriting and residual patching |
| `wayland-protocols` | builds | protocol packaging is not the blocker |
| Qt6 Wayland client path | builds, partial runtime | `qt6-wayland-smoke` is installed, runs in the bounded harness, and leaves runtime markers; visible in-compositor window proof is still open |
| Qt6 Wayland client path | builds, build-verified; runtime gated on QEMU runtime | `qt6-wayland-smoke` is installed, runs in the bounded harness, and leaves runtime markers; visible in-compositor window proof is still open |
| Mesa EGL + GBM + GLES2 | builds | software path via LLVMpipe proven in QEMU |
| evdevd / udev-shim / firmware-loader / redox-drm | builds, boots, enumerate | runtime trust still bounded |
| libinput | builds | udev disabled in recipe; runtime integration still open |
@@ -121,7 +121,7 @@ Rules:
| Input path | no end-to-end proof that evdevd → libinput → compositor is trustworthy |
| Session path | no runtime-trusted seat/session proof for KWin path |
| Hardware graphics | no hardware-accelerated Wayland proof |
| KWin truthfulness | build is reduced and partially dependency-honest, but still not a runtime-ready session |
| KWin truthfulness | build is reduced and build-verified; runtime gated on QEMUly dependency-honest, but still not a runtime-ready session |
| WIP ownership | upstream WIP recipes and local overlays are mixed; forward path is not always explicit |
## Stability / Completeness Verdict
@@ -296,7 +296,7 @@ This wave is still a **validation compositor** wave, not a claim that KWin or Pl
- retire old planning authority from historical Wayland docs,
- demote or remove stale historical compositor references from the active guidance path,
- make the WIP recipe guidance reflect current truth instead of older partial states,
- make the WIP recipe guidance reflect current truth instead of older build-verified; runtime gated on QEMU states,
- keep local overlay ownership explicit wherever Red Bear is still the effective shipping owner.
**Acceptance criteria:**