diff --git a/local/docs/INPUT-STACK-LINUX-ALIGNMENT-PLAN.md b/local/docs/INPUT-STACK-LINUX-ALIGNMENT-PLAN.md index a61372aa74..58462fd0ae 100644 --- a/local/docs/INPUT-STACK-LINUX-ALIGNMENT-PLAN.md +++ b/local/docs/INPUT-STACK-LINUX-ALIGNMENT-PLAN.md @@ -390,6 +390,30 @@ duplication/ordering faults this structure removes by construction. - Boot check: a test client can `GrabDevice`, receive raw events, `Ungrab`, and the console resumes. **Stage 5 — Wire the compositor via seat (unblocks `redbear-full`).** + +> **Blocker analysis (2026-07-24, from reading `redbear-compositor/source/src/main.rs`):** +> Two concrete prerequisites, neither runtime-testable today: +> 1. **Compositor event-loop restructure.** The compositor uses a *blocking* +> `for stream in self.listener.incoming()` accept loop (`:1409`) and drains key +> events only *reactively* when a client poke arrives (`:2555`). Worse, +> `ClientState` (`:1145`) **does not store the client's `UnixStream`**, so no +> input source can push `wl_keyboard` events to the focused client. Real input +> requires: store per-client stream fds; multiplex the input fd + client +> sockets (poll loop or a dedicated input-reader thread); proactively send +> `wl_keyboard.enter/key/modifiers` to the focused client on input arrival. +> 2. **The desktop cannot run without DRM/Mesa.** The compositor renders via +> `/scheme/drm/card0`; on mini/QEMU there is no DRM card +> ([[full-wayland-build-cascade-2026-07]]), so the compositor never starts and +> nothing here can be validated. This is desktop bring-up, gated on the Mesa +> EGL/DRI port — **not** a continuation of the input-core work. +> +> When those clear, the wiring is: compositor opens `/scheme/evdev` (evdevd's +> Linux-evdev output — reuses evdevd's orbclient→evdev keycode translation, no +> re-implementation), calls inputd `set_vt_mode(vt, graphics=true)` to suppress +> the text console, ships a real XKB keymap fd (replacing the `/dev/null` stub at +> `:3380`), and dispatches `wl_keyboard` to the focused surface (keycode = evdev +> code − 8). + - **Promote `seatd` to a local source package** (per §4b decision): flip `recipe.toml [source]` from `git = jackpot51/seatd` to `path = "source"`; remove the leftover nested `source/.git` (so it's a plain vendored tree like evdevd, not an embedded clone) and the stray `target/` in the recipe dir;