From 466b68a643eabfcef67157d847f55e36aaa45ac4 Mon Sep 17 00:00:00 2001 From: Vasilito Date: Sun, 3 May 2026 10:46:19 +0100 Subject: [PATCH] =?UTF-8?q?docs:=20comprehensive=20fix=20plan=20(final)=20?= =?UTF-8?q?=E2=80=94=20KDE=20build=20chain,=20graphical=20boot,=20remainin?= =?UTF-8?q?g=20gaps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consolidated from all audits, QEMU testing, and implementation sessions. P0: KDE build chain broken — libwayland pkgar staging race in cookbook. Fix requires investigation of src/cook/package.rs pkgar path lookup. P1: Graphical boot testing — dbus-daemon, sessiond, compositor, greeter. P2: 7 remaining gaps — ion shell, shadow support, polkit, scrollback. Includes cookbook tool investigation areas and total effort estimate (~12 days per developer). --- local/docs/COMPREHENSIVE-FIX-PLAN-FINAL.md | 197 +++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 local/docs/COMPREHENSIVE-FIX-PLAN-FINAL.md diff --git a/local/docs/COMPREHENSIVE-FIX-PLAN-FINAL.md b/local/docs/COMPREHENSIVE-FIX-PLAN-FINAL.md new file mode 100644 index 00000000..245ab4e7 --- /dev/null +++ b/local/docs/COMPREHENSIVE-FIX-PLAN-FINAL.md @@ -0,0 +1,197 @@ +# Red Bear OS — Comprehensive Fix Plan (Final) + +**Date**: 2026-05-03 +**Status**: 13 patches, redbear-mini boots, redbear-full KDE chain broken +**QEMU verified**: ✅ text console boot, ❌ graphical desktop build + +--- + +## 0. Current State + +``` +Build: 13 patches → base ✅ base-initfs ✅ userutils ✅ +Boot: redbear-mini → UEFI → 25+ services → console login ✅ + redbear-full → build fails at kf6-kitemviews (pkgar race) +Hardware: QEMU x86_64. VESA, PS/2, USB HID, PCI, ACPI — all functional. +``` + +### Completed (all sessions) + +| # | Item | Status | +|---|------|--------| +| 1 | Build system atomicity (staging + rollback) | ✅ | +| 2 | Patch normalization (diff --git → ---/+++) | ✅ | +| 3 | Workspace pollution cleanup | ✅ | +| 4 | --allow-protected CLI flag | ✅ | +| 5 | PS/2 LED feedback + InputProducer | ✅ | +| 6 | USB HID hardening (validation, retry, lookup table) | ✅ | +| 7 | Init colored ANSI output | ✅ | +| 8 | XKB bridge (redbear-keymapd) | ✅ | +| 9 | ACPI shutdown hardening | ✅ | +| 10 | Persistent logging (logd → /var/log/system.log) | ✅ | +| 11 | DRM + USB initfs service files | ✅ | +| 12 | Network drivers in initfs (e1000d, rtl8168d, smolnetd, dhcpd) | ✅ | +| 13 | Login rate limiting | ✅ | +| 14 | Documentation (4 audit docs, 9 stale archived) | ✅ | + +--- + +## 1. P0 — Blocker: KDE Build Chain + +### Problem +`make live CONFIG_NAME=redbear-full` fails: +``` +cook kf6-kitemviews - failed +failed to install 'libwayland/stage.pkgar' in 'kf6-kitemviews/sysroot.tmp': +No such file or directory +``` + +`libwayland` builds successfully but its `stage.pkgar` is missing when `kf6-kitemviews` needs it. + +### Root Cause Analysis + +The cookbook tool (`src/cook/`) has a dependency staging race: +1. `libwayland` builds → publishes pkgar to `repo/` +2. `kf6-kitemviews` depends on `libwayland` +3. Cookbook installs dependencies into `sysroot.tmp` before building +4. The pkgar file is looked up at `recipes/wip/wayland/libwayland/target/.../stage.pkgar` +5. This path is incorrect — pkgar should be looked up in `repo/` not `target/` + +### Fix + +**File**: `src/cook/` — investigate `pkgar` push/install logic. + +| Step | Action | +|------|--------| +| 1 | Read `src/cook/package.rs` — `package_source_paths()` function | +| 2 | Read `src/cook/cook_build.rs` — how sysroot.tmp is populated | +| 3 | Trace the pkgar lookup path for `kf6-kitemviews` → `libwayland` | +| 4 | Fix the path lookup to use `repo/` directory instead of `target/` | +| 5 | Rebuild: `make live CONFIG_NAME=redbear-full` | +| 6 | Verify: kf6-kitemviews builds, ISO created | + +**Estimated effort**: 4-8 hours (investigation + fix + rebuild) + +--- + +## 2. P1 — Graphical Boot Path + +After fixing the KDE build chain, the graphical boot needs runtime validation. + +### Components to Test + +| Component | Binary | Expected | +|-----------|--------|----------| +| dbus-daemon | /usr/bin/dbus-daemon | System bus starts, responds to `dbus-send` | +| redbear-sessiond | /usr/bin/redbear-sessiond | Registers `org.freedesktop.login1`, responds to ListSessions | +| seatd | /usr/bin/seatd | Seat management | +| redbear-compositor | /usr/bin/redbear-compositor | Wayland compositor starts | +| KWin | /usr/bin/kwin_wayland | KWin connects to compositor | +| redbear-greeter | /usr/bin/redbear-greeter | Graphical login screen on framebuffer | + +### Test Procedure + +```bash +# Build +make live CONFIG_NAME=redbear-full + +# Boot with VNC (for remote graphical access) +qemu-system-x86_64 -m 4096 \ + -drive file=build/x86_64/redbear-full/harddrive.img,format=raw \ + -drive if=pflash,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd,readonly=on \ + -drive if=pflash,file=/tmp/OVMF_VARS.fd \ + -vnc :0 + +# Connect via VNC viewer and observe graphical boot +# Login via VNC greeter or switch to VT2 (Ctrl+Alt+F2) for text console +``` + +### Acceptance Criteria + +| Gate | Requirement | +|------|-------------| +| G1 | dbus-daemon starts without errors | +| G2 | redbear-sessiond registers on D-Bus system bus | +| G3 | `dbus-send --system --dest=org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager.ListSessions` returns valid data | +| G4 | Wayland compositor initializes (no crash) | +| G5 | Greeter displays on framebuffer (or text login on VT2 as fallback) | + +--- + +## 3. P2 — Remaining Gaps (from previous audits) + +| # | Item | Priority | Effort | Status | +|---|------|----------|--------|--------| +| P2-1 | ion shell job control (fg/bg/Ctrl-Z/&) | High | 3d | Not started | +| P2-2 | ion shell tab completion | High | 2d | Not started | +| P2-3 | /etc/shadow support | High | 4h | Blocked (redox_users crate) | +| P2-4 | polkit enforcement | Medium | 3h | Blocked (needs D-Bus runtime) | +| P2-5 | fbcond scrollback buffer | Medium | 4h | Not started | +| P2-6 | ACPI sleep states (S3/S4) | Low | 2d | Not started | +| P2-7 | Thermal daemon | Low | 2d | Not started | + +--- + +## 4. Implementation Order + +``` +DAY 1-2: P0 — Fix KDE build chain (pkgar staging race) + → Rebuild redbear-full + → Boot graphical image + +DAY 3: P1 — Test graphical boot components + → D-Bus validation + → sessiond/Listsessions test + → Greeter/console verification + +DAY 4-5: P2-1 — ion job control + → Background process table + → fg/bg/jobs builtins + → Ctrl-Z / SIGTSTP handling + +DAY 6: P2-2 — ion tab completion + → PATH command completion + → File path completion + +DAY 7: P2-3/P2-5 — Shadow support + fbcond scrollback + (if redox_users permits shadow; else document limitation) +``` + +--- + +## 5. Cookbook Tool — Specific Areas to Investigate + +### pkgar path issue + +```rust +// src/cook/package.rs — likely location +fn package_source_paths(pkg_name: &str, ...) -> Vec { + // Returns target//stage.pkgar paths + // Bug: returns target/ path when recipe is in wip/wayland/ + // Fix: should return repo//.pkgar path +} +``` + +### Dependency staging order + +```rust +// src/cook/cook_build.rs — sysroot.tmp population +fn build_deps_sysroot(deps: &[CookRecipe], sysroot: &Path) { + for dep in deps { + // Should check repo/ for pkgar, not target/ + let pkgar = dep.repo_pkgar_path(); // propose: new method + install_pkgar(pkgar, sysroot); + } +} +``` + +--- + +## 6. Total Effort + +| Phase | Items | Effort | +|-------|-------|--------| +| P0 — KDE build fix | 1 item | 4-8h | +| P1 — Graphical boot test | 5 components | 4h | +| P2 — Remaining gaps | 7 items | ~80h | +| **Total** | **13 items** | **~12 days (1 dev)** |