diff --git a/local/docs/BOOT-PROCESS-IMPROVEMENT-PLAN.md b/local/docs/BOOT-PROCESS-IMPROVEMENT-PLAN.md index 9247f33e..2b2a2d73 100644 --- a/local/docs/BOOT-PROCESS-IMPROVEMENT-PLAN.md +++ b/local/docs/BOOT-PROCESS-IMPROVEMENT-PLAN.md @@ -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:** 3–5 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:** 3–5 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. diff --git a/local/docs/WAYLAND-IMPLEMENTATION-PLAN.md b/local/docs/WAYLAND-IMPLEMENTATION-PLAN.md index f58e8e29..a1fd1512 100644 --- a/local/docs/WAYLAND-IMPLEMENTATION-PLAN.md +++ b/local/docs/WAYLAND-IMPLEMENTATION-PLAN.md @@ -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:**