docs: comprehensive fix plan (final) — KDE build chain, graphical boot, remaining gaps

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).
This commit is contained in:
2026-05-03 10:46:19 +01:00
parent 3f957ba6c2
commit 466b68a643
+197
View File
@@ -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<PathBuf> {
// Returns target/<triplet>/stage.pkgar paths
// Bug: returns target/ path when recipe is in wip/wayland/
// Fix: should return repo/<triplet>/<pkg>.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)** |