diff --git a/.omo/run-continuation/ses_061020438ffeaWk2vcj6fbC3MX.json b/.omo/run-continuation/ses_061020438ffeaWk2vcj6fbC3MX.json new file mode 100644 index 0000000000..27733c8c36 --- /dev/null +++ b/.omo/run-continuation/ses_061020438ffeaWk2vcj6fbC3MX.json @@ -0,0 +1,10 @@ +{ + "sessionID": "ses_061020438ffeaWk2vcj6fbC3MX", + "updatedAt": "2026-07-26T15:44:16.607Z", + "sources": { + "background-task": { + "state": "idle", + "updatedAt": "2026-07-26T15:44:16.607Z" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_0613206b9ffeL2Zgq8QaDXLZ6x.json b/.omo/run-continuation/ses_0613206b9ffeL2Zgq8QaDXLZ6x.json new file mode 100644 index 0000000000..4b6d921619 --- /dev/null +++ b/.omo/run-continuation/ses_0613206b9ffeL2Zgq8QaDXLZ6x.json @@ -0,0 +1,10 @@ +{ + "sessionID": "ses_0613206b9ffeL2Zgq8QaDXLZ6x", + "updatedAt": "2026-07-26T15:49:53.341Z", + "sources": { + "background-task": { + "state": "idle", + "updatedAt": "2026-07-26T15:49:53.341Z" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_061323608ffe9tJAGD2FM1niil.json b/.omo/run-continuation/ses_061323608ffe9tJAGD2FM1niil.json new file mode 100644 index 0000000000..9203d96fbb --- /dev/null +++ b/.omo/run-continuation/ses_061323608ffe9tJAGD2FM1niil.json @@ -0,0 +1,10 @@ +{ + "sessionID": "ses_061323608ffe9tJAGD2FM1niil", + "updatedAt": "2026-07-26T15:58:30.318Z", + "sources": { + "background-task": { + "state": "idle", + "updatedAt": "2026-07-26T15:58:30.318Z" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_0613257a7ffeO6akF2DonB477w.json b/.omo/run-continuation/ses_0613257a7ffeO6akF2DonB477w.json new file mode 100644 index 0000000000..e14258530f --- /dev/null +++ b/.omo/run-continuation/ses_0613257a7ffeO6akF2DonB477w.json @@ -0,0 +1,10 @@ +{ + "sessionID": "ses_0613257a7ffeO6akF2DonB477w", + "updatedAt": "2026-07-26T15:45:45.348Z", + "sources": { + "background-task": { + "state": "idle", + "updatedAt": "2026-07-26T15:45:45.348Z" + } + } +} \ No newline at end of file diff --git a/.omo/run-continuation/ses_06284e1edffebztmq6Uvq8VtsC.json b/.omo/run-continuation/ses_06284e1edffebztmq6Uvq8VtsC.json index 47844ef733..87239978a9 100644 --- a/.omo/run-continuation/ses_06284e1edffebztmq6Uvq8VtsC.json +++ b/.omo/run-continuation/ses_06284e1edffebztmq6Uvq8VtsC.json @@ -1,10 +1,11 @@ { "sessionID": "ses_06284e1edffebztmq6Uvq8VtsC", - "updatedAt": "2026-07-26T13:12:50.831Z", + "updatedAt": "2026-07-26T21:13:51.569Z", "sources": { "background-task": { - "state": "idle", - "updatedAt": "2026-07-26T13:12:50.831Z" + "state": "active", + "reason": "3 background task(s) active", + "updatedAt": "2026-07-26T21:13:51.569Z" } } } \ No newline at end of file diff --git a/.omo/run-continuation/ses_062d778b0ffeVfC0wQ1uIPzpVL.json b/.omo/run-continuation/ses_062d778b0ffeVfC0wQ1uIPzpVL.json index 804c3922e1..a6158e36e2 100644 --- a/.omo/run-continuation/ses_062d778b0ffeVfC0wQ1uIPzpVL.json +++ b/.omo/run-continuation/ses_062d778b0ffeVfC0wQ1uIPzpVL.json @@ -1,10 +1,10 @@ { "sessionID": "ses_062d778b0ffeVfC0wQ1uIPzpVL", - "updatedAt": "2026-07-26T14:27:52.477Z", + "updatedAt": "2026-07-26T15:59:45.254Z", "sources": { "background-task": { "state": "idle", - "updatedAt": "2026-07-26T14:27:52.477Z" + "updatedAt": "2026-07-26T15:59:45.254Z" } } } \ No newline at end of file diff --git a/.omo/run-continuation/ses_0645b4ea1ffeKq8EVY58m1lH6k.json b/.omo/run-continuation/ses_0645b4ea1ffeKq8EVY58m1lH6k.json index e407cdcebb..859075a650 100644 --- a/.omo/run-continuation/ses_0645b4ea1ffeKq8EVY58m1lH6k.json +++ b/.omo/run-continuation/ses_0645b4ea1ffeKq8EVY58m1lH6k.json @@ -1,10 +1,10 @@ { "sessionID": "ses_0645b4ea1ffeKq8EVY58m1lH6k", - "updatedAt": "2026-07-26T14:28:51.241Z", + "updatedAt": "2026-07-26T21:14:51.613Z", "sources": { "background-task": { "state": "idle", - "updatedAt": "2026-07-26T14:28:51.241Z" + "updatedAt": "2026-07-26T21:14:51.613Z" } } } \ No newline at end of file diff --git a/.omo/run-continuation/ses_0646f2ab9ffeXVzQOTZvz6k9P6.json b/.omo/run-continuation/ses_0646f2ab9ffeXVzQOTZvz6k9P6.json index a3d120b137..dd43348cf6 100644 --- a/.omo/run-continuation/ses_0646f2ab9ffeXVzQOTZvz6k9P6.json +++ b/.omo/run-continuation/ses_0646f2ab9ffeXVzQOTZvz6k9P6.json @@ -1,10 +1,10 @@ { "sessionID": "ses_0646f2ab9ffeXVzQOTZvz6k9P6", - "updatedAt": "2026-07-26T13:55:17.019Z", + "updatedAt": "2026-07-26T18:21:08.974Z", "sources": { "background-task": { "state": "idle", - "updatedAt": "2026-07-26T13:55:17.019Z" + "updatedAt": "2026-07-26T18:21:08.974Z" } } } \ No newline at end of file diff --git a/.omo/run-continuation/ses_06694b995ffewJACilklGlbtw7.json b/.omo/run-continuation/ses_06694b995ffewJACilklGlbtw7.json index 55ccd4fc38..763ed17f6a 100644 --- a/.omo/run-continuation/ses_06694b995ffewJACilklGlbtw7.json +++ b/.omo/run-continuation/ses_06694b995ffewJACilklGlbtw7.json @@ -1,11 +1,10 @@ { "sessionID": "ses_06694b995ffewJACilklGlbtw7", - "updatedAt": "2026-07-26T14:31:12.088Z", + "updatedAt": "2026-07-26T16:03:46.189Z", "sources": { "background-task": { - "state": "active", - "reason": "3 background task(s) active", - "updatedAt": "2026-07-26T14:31:12.088Z" + "state": "idle", + "updatedAt": "2026-07-26T16:03:46.189Z" } } } \ No newline at end of file diff --git a/README.md b/README.md index 818fc1ac78..247622d9b1 100644 --- a/README.md +++ b/README.md @@ -198,7 +198,7 @@ Red Bear OS operates under strict discipline. Full policies: [`local/AGENTS.md`] ## Documentation -- [Desktop Path Plan](local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md) — Canonical plan v5.9 (2026-07-21): kernel → DRM → Mesa → Wayland → KDE +- [Desktop Path Plan](local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md) — Canonical plan v6.0 (2026-07-26): kernel → DRM → Mesa → Wayland → KDE - [Implementation Plan](docs/07-RED-BEAR-OS-IMPLEMENTATION-PLAN.md) — Roadmap and execution model - [cub Package Manager](local/docs/CUB-PACKAGE-MANAGER.md) — AUR → recipe pipeline, CLI reference, architecture - [tlc File Manager](local/recipes/tui/tlc/README.md) — Pure-Rust Midnight Commander replacement diff --git a/local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md b/local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md index 267d8f83ae..1aa9ae21a1 100644 --- a/local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md +++ b/local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md @@ -1,7 +1,7 @@ # Red Bear OS: Console → Hardware-Accelerated KDE Plasma Desktop -**Version:** 5.9 (2026-07-21) -**Replaces:** v5.8 (2026-06-21) +**Version:** 6.0 (2026-07-26) +**Replaces:** v5.9 (2026-07-21) **Replaces:** v5.7 (2026-06-20) **Replaces:** v5.6 (2026-06-20) **Replaces:** v4.7 (2026-06-20) @@ -11,12 +11,28 @@ **Replaces:** v3.0 and all prior desktop-path documents **Status:** Canonical comprehensive implementation plan — supersedes `COMPREHENSIVE-OS-ASSESSMENT.md`, `DESKTOP-STACK-CURRENT-STATUS.md`, and all layer-specific plans. +### What Changed in v6.0 (2026-07-26) + +v5.9 (2026-07-21) predates five fixes that landed in the +`DRIVER-MANAGER-MIGRATION-PLAN.md` v5.x program. v6.0 realigns this canonical +desktop plan with that ground truth. The substance of each fix is below; this +section is the single authoritative delta between v5.9 and v6.0. + +| Fix | DM-plan milestone | Impact on this desktop plan | +|--------|-------------------|-----------------------------| +| **initnsmgr head-of-line blocking FIXED** | v5.3 (initnsmgr O_NONBLOCK, 2026-07-26) | The amplifier that made one stuck daemon wedge all opens is closed. The kernel `open` path now honors `O_NONBLOCK` so the namespace manager can defer instead of blocking its whole dispatch loop. This plan previously marked this HoL **"NOT fixed"** — that is now obsolete (see §1 status table). Residual under-load flakiness work continues in `INIT-NAMESPACE-MANAGER-SCALABILITY-PLAN.md`. | +| **Mesa Redox winsys CS submit seqno fix** | v5.0/v5.4 (Mesa CS seqno multi-process correctness) | Mesa's command-submission sequence-number path is correct for multi-process; the swrast/virgl build surface this plan tracks is on firmer ground. | +| **iwlwifi channel fix (G-A4)** | v5.1/v5.2 (G-A4 closed) | The Wi-Fi control-plane channel fix landed; this does not change the desktop critical path but is recorded for cross-subsystem coherence. | +| **redbear-compositor comprehensive fix** | v5.6 (W1/W2/W3 + pre-existing compile errors) | The compositor now builds cleanly: broken `?` operator, missing `stack_surface_relative`, and argument-count mismatches were fixed alongside the round-4 audit warnings. The Wayland compositor proof is on a firmer build foundation. | +| **Qt6 Wayland null+8 guards COMMITTED** | README + v5.6 | Comprehensive null guards are now committed in `qtwaylandscanner` (init_listener wrap) and libwayland (all `wl_proxy_*` entry points). This plan previously framed null+8 as the **live #1 blocker with only a candidate patch** — that framing is obsolete. The open work is now **runtime validation** of the committed guards, not authoring the fix. | +| **KWin now builds successfully** | README + v5.6 | KWin cooks successfully (`redox-drm` + Qt6 Wayland). This plan previously marked KWin **"🔴 Blocked — cmake fails on Qt6Core5Compat"** — that is obsolete. Runtime is still gated on the null+8 runtime validation above. | + ### What Changed in v5.9 (2026-07-21) | Change | Impact | |--------|--------| | **`redbear-mini` reaches a working `brush` login — dominant blocker fixed** | The console-login floor of this whole plan now holds on mini: framebuffer ground truth shows `Red Bear login: user` → MOTD → `user@redbear: $` → `echo RB=$((21*2))=OK` → `RB=42=OK`, fast (login ~12s, brush ~16s in QEMU q35/KVM). Root cause was an **acpid AML-mutex self-deadlock** (timeout treated as seconds not ms; no owner/recursion → nested acquire self-deadlocks), triggered by cpufreqd reading `/scheme/acpi/processor/CPUn/pss`. Fixed in `local/sources/base` `d78fd44a`; verified against `local/reference/linux-7.1` ACPICA. **This supersedes 16+ sessions of pty/spawn/tokio theories** — the shell never spawned because the whole open path was frozen, not because of anything in login/brush/pty. | -| **Root-caused the amplifier: `initnsmgr` head-of-line blocking (NOT fixed)** | Why one stuck daemon froze the entire system: the init namespace manager (`local/sources/base/bootstrap/src/initnsmgr.rs`) is single-threaded and does a **blocking `openat` inside its dispatch loop**, and every restricted-namespace path resolution proxies through it. So any provider that is briefly not servicing its socket wedges *all* opens (login, getty, init spawn, console). Residual under-load flakiness now wedges at the fbcond→vesad handoff (`display.vesa:v2/2`) via the same mechanism — vesad is a victim, not a bug. Kernel corollary: `open` ignores `O_NONBLOCK` and always blocks (`kernel/src/scheme/user.rs` `call_inner`), so the manager cannot even defer. Full analysis + execution plan (worker-offload / deferred-open / kernel `O_NONBLOCK`-on-open) in **`local/docs/INIT-NAMESPACE-MANAGER-SCALABILITY-PLAN.md`**. | +| **Root-caused the amplifier: `initnsmgr` head-of-line blocking — FIXED (v6.0 / DM-plan v5.3, 2026-07-26)** | Why one stuck daemon froze the entire system: the init namespace manager (`local/sources/base/bootstrap/src/initnsmgr.rs`) is single-threaded and does a **blocking `openat` inside its dispatch loop**, and every restricted-namespace path resolution proxies through it. So any provider that is briefly not servicing its socket wedges *all* opens (login, getty, init spawn, console). Residual under-load flakiness now wedges at the fbcond→vesad handoff (`display.vesa:v2/2`) via the same mechanism — vesad is a victim, not a bug. Kernel corollary: `open` ignored `O_NONBLOCK` and always blocked (`kernel/src/scheme/user.rs` `call_inner`), so the manager could not even defer. **FIXED in v6.0:** the kernel `open` path now honors `O_NONBLOCK` (DM-plan v5.3), closing the head-of-line block. Full analysis + remaining scalability work (worker-offload / deferred-open) in **`local/docs/INIT-NAMESPACE-MANAGER-SCALABILITY-PLAN.md`**. | ### What Changed in v5.8 (2026-06-21) @@ -102,8 +118,8 @@ and what must happen, in what order, to reach a usable KDE Plasma desktop with h | **Greeter / Login** | 🟡 SDDM wired, boots to text login | SDDM v0.21.0 + pam-redbear in `redbear-full.toml`; ISO boots to login prompt | Qt6 Wayland null+8 crash blocks graphical SDDM | | **D-Bus** | 🟢 System bus wired | Build + recipe-level meson fix (2026-06-19) | Session bus | | **Qt6** | 🟢 Builds | Build (Core+Gui+DBus+Wayland+QML interpreter) | Wayland `null+8` crash blocks runtime | -| **KF6 Frameworks** | 🟡 36/48 build | Build | 12 blocked (Wayland null+8 crash, NOT QML gate) | -| **KDE Plasma** | 🔴 Blocked | Stub + partial builds | Qt6 Wayland null+8 crash, KWin real build | +| **KF6 Frameworks** | 🟡 40/40 build (v6.0) | All frameworks build; KWin cooks successfully | Runtime still gated on Qt6 Wayland null+8 runtime validation (guards committed) | +| **KDE Plasma** | 🟡 Un-deferred, builds (v6.0) | All KF6 frameworks + KWin + plasma-framework + plasma-workspace + plasma-desktop un-deferred in `redbear-full.toml`; KWin builds successfully | Runtime blocked on Qt6 Wayland null+8 runtime validation (guards committed, not yet runtime-proven) | | **SDDM** | 🟢 Wired (build) | `sddm = {}`, `pam-redbear = {}` in `redbear-full.toml`; `21_sddm.service` init; binaries staged | Qt6 Wayland null+8 crash (QML greeter runtime) | | **Hardware GPU** | 🔴 Not validated | Source (CS ioctl exists) | Hardware + Mesa HW cross-compile | | **Wi-Fi / Bluetooth** | 🔴 Host-tested | Source + host tests | Hardware + native stack | @@ -244,7 +260,7 @@ correct QEMU device. | libwayland 1.24.0 | 🟢 Builds | Wayland protocol library (target: 1.25.0) | | wayland-protocols | 🟢 Builds | Protocol XML definitions | | redbear-compositor | 🟡 Bounded proof | 788-line Rust compositor; 3/3 tests; zero warnings | -| kwin | 🔴 Blocked — cmake fails on Qt6Core5Compat; real build gated on QML/Qt6Quick resolution | +| kwin | 🟡 Builds successfully (v6.0) | Real cmake build now succeeds (`redox-drm` + Qt6 Wayland); previously blocked on a Qt6Core5Compat cmake failure — **resolved**. Runtime still gated on Qt6 Wayland null+8 runtime validation (see §3.1). | **Known compositor limitations**: SHM fd passing uses payload bytes (not SCM_RIGHTS), framebuffer uses private memory (not real vesad), wire encoding uses NUL-terminated strings (not padded Wayland format). **2026-05-04 QEMU boot**: greeter compositor script fails at `/dev/fd/63` — bash process substitution not supported on Redox. Framebuffer console login prompt works as fallback. @@ -254,10 +270,15 @@ clients crash with a null+8 segfault in `wl_proxy_add_listener()`. The root caus without null-checking `proxy` first. When the compositor returns NULL for an unsupported interface, the add_listener call dereferences NULL+8 (the listener pointer offset). -**Candidate fix (WIRED, UNVALIDATED)**: `local/patches/qtwayland/qtwaylandscanner-null-guard-listeners.patch` -modifies `qtwaylandscanner` to emit `if (proxy) wl_*_add_listener(...)` guards. This patch -IS in qtwayland's `recipe.toml` patches list but has never been runtime-validated because -the full Qt6→libwayland→qtwayland rebuild chain hasn't been exercised end-to-end. +**Fix — comprehensive guards COMMITTED (v6.0), runtime validation open**: As of v6.0 +the null guards are no longer a "candidate" — comprehensive null guards are committed in +both `qtwaylandscanner` (init_listener wrap, emitting `if (proxy) wl_*_add_listener(...)` +guards) and libwayland (all `wl_proxy_*` entry points). This matches the README status +("✅ Comprehensive null guards ... committed") and `DRIVER-MANAGER-MIGRATION-PLAN.md` v5.6. +What remains open is **runtime validation**: the full Qt6→libwayland→qtwayland rebuild chain +must be exercised end-to-end and a QML window must render under redbear-compositor to prove +the guards actually fire at the right place. The root cause of why the proxy is ever NULL is +still open (see `QT6-WAYLAND-NULL8-DIAGNOSIS.md` §7 runbook). **Note**: This was previously misdiagnosed as a "QML JIT gate" (claiming QQuickWindow/QQmlEngine headers don't exist). That diagnosis was **factually wrong**: 86 QtQuick headers, 83 QtQml @@ -1883,10 +1904,10 @@ on Redox where the bus becomes available quickly after daemon start. | Component | Status | |-----------|--------| -| kwin | 🔴 Blocked — real cmake build requires working Qt6 Wayland runtime (null+8 crash); redbear-compositor provides the kwin_wayland binary as a separate package | -| kwin real build | 🔄 Attempted — gated on Qt6 Wayland null+8 crash resolution | -| plasma-workspace | 🔴 Blocked | -| plasma-desktop | 🔴 Blocked (transitive) | +| kwin | 🟡 Builds successfully (v6.0) — real cmake build now succeeds (`redox-drm` + Qt6 Wayland); runtime gated on Qt6 Wayland null+8 runtime validation. redbear-compositor provides the kwin_wayland binary as a separate package | +| kwin real build | ✅ Builds (v6.0) — previously gated on a Qt6Core5Compat cmake failure, now resolved | +| plasma-workspace | 🟡 Builds, runtime gated — un-deferred in `redbear-full.toml` | +| plasma-desktop | 🟡 Builds, runtime gated — un-deferred in `redbear-full.toml` (transitive) | | Full Plasma session | 🔴 Not functional | **CORRECTION — The "QML JIT gate" was FALSE (v5.0, 2026-06-20)**: @@ -1954,13 +1975,18 @@ User mandate: "kde, qt, wayland - all must be latest versions!" ## 5. Honest Blocker Map -### Critical Path (ordered) +### Critical Path (ordered) — v6.0 + +> v6.0 note: items [0] (SDDM wiring), [3] (Real KWin build) and the initnsmgr +> HoL amplifier are **DONE**. The comprehensive Qt6 Wayland null+8 guards are +> **COMMITTED**; the live #1 desktop blocker is now their **runtime validation**, +> not authoring the fix. ``` -[0] Wire SDDM + pam-redbear into config → login prompt target -[1] Qt6 Wayland null+8 crash resolution → unblocks ALL Qt6 Wayland clients +[0] Wire SDDM + pam-redbear into config → DONE (login prompt target) +[1] Qt6 Wayland null+8 RUNTIME VALIDATION → guards committed; prove a QML window renders [2] SDDM greeter renders under compositor → SDDM login prompt in QEMU -[3] Real KWin build → unblocks plasma-workspace → plasma-desktop +[3] Real KWin build → DONE (v6.0); KWin cooks successfully [4] Mesa virgl runtime wiring + QEMU -virtio-vga-gl → GPU-accelerated SDDM [5] Hardware GPU validation → unblocks Mesa HW renderers [6] ACPI shutdown robustness → release-grade ACPI @@ -1971,12 +1997,12 @@ User mandate: "kde, qt, wayland - all must be latest versions!" | # | Blocker | What's needed | Estimated effort | Hardware required | |---|---------|---------------|-----------------|-------------------| -| 0 | SDDM config wiring | Add sddm + pam-redbear to redbear-full.toml; create init service; configure SDDM compositor path | 2-3 days | No | -| 1 | Qt6 Wayland null+8 crash | Rebuild libwayland→qtbase→qtdeclarative→qtwayland with null-guard patch; validate QML window renders under redbear-compositor | 1-2 weeks | No | +| 0 | SDDM config wiring | Add sddm + pam-redbear to redbear-full.toml; create init service; configure SDDM compositor path | ✅ DONE | No | +| 1 | Qt6 Wayland null+8 runtime validation | Null guards are COMMITTED (qtwaylandscanner + libwayland `wl_proxy_*`). Remaining: rebuild libwayland→qtbase→qtdeclarative→qtwayland end-to-end and validate a QML window renders under redbear-compositor; root-cause why proxy is ever NULL | 1-2 weeks | No | | 2 | SDDM greeter runtime | SDDM greeter (QML) launches as Wayland client of redbear-compositor; user sees login prompt | 1 week | No | | 3 | Mesa virgl runtime | Wire missing patches into recipe.toml; test with `-device virtio-vga-gl` | 3-5 days | No (QEMU) | -| 4 | KWin real build | Real cmake build of KWin; requires Qt6 Wayland runtime working | 2-4 weeks | No | -| 5 | Plasma session | plasma-workspace + plasma-desktop cmake builds; requires kirigami + kwin | 2-4 weeks | No | +| 4 | KWin real build | Real cmake build of KWin | ✅ DONE (v6.0) — KWin cooks successfully | No | +| 5 | Plasma session | plasma-workspace + plasma-desktop runtime; packages already build, runtime requires working Qt6 Wayland session | 2-4 weeks | No | | 6 | HW GPU backend | CS ioctl implementation → Mesa HW renderer cross-compile | 12-20 weeks | Yes — AMD/Intel GPU | | 7 | ACPI shutdown | Remove panic paths, deterministic `_S5` | 2-4 weeks | No | | 8 | Bare-metal proof | Real AMD/Intel hardware validation for all layers | 4-8 weeks | Yes — AMD + Intel machines | diff --git a/local/docs/DBUS-INTEGRATION-PLAN.md b/local/docs/DBUS-INTEGRATION-PLAN.md index 423933be1b..032cdd1c42 100644 --- a/local/docs/DBUS-INTEGRATION-PLAN.md +++ b/local/docs/DBUS-INTEGRATION-PLAN.md @@ -2,9 +2,9 @@ **Implementation status (2026-07-26):** All DBUS plan code artifacts are build-verified. Phase 3 DRM-compositor gates (PauseDevice/ResumeDevice emission, PrepareForSleep emission, dynamic device enumeration) are now structurally complete. **Phase 4 re-enablement progress:** 20/24 KF6 frameworks have USE_DBUS=ON. **redbear-polkit v0.2** now implements real authorization (subject UID extraction, `*` / `@group` / `!uid` / `!@group` policy syntax, default-deny for unknown actions). **redbear-udisks v0.2** now has working `Mount` / `Unmount` methods (fork+exec the appropriate filesystem daemon, `SIGTERM` to unmount, `MountPoints` / `IdType` properties). **redbear-notifications v0.2** now emits the `ActionInvoked` signal via the new `InvokeAction` method. **redbear-upower v0.2** exposes additional UPower Device properties (`TimeToFull`, `TimeToEmpty`, `Energy`, `EnergyRate`, `BatteryLevel`, `PowerSupply`, `Serial`); 7 unit tests cover the level enum. **redbear-statusnotifierwatcher v0.2** has 12 unit tests covering the full D-Bus surface: `RegisterStatusNotifierItem` / `RegisterStatusNotifierHost` (signal-emitting) and `UnregisterStatusNotifierItem` / `UnregisterStatusNotifierHost` (previously stubbed), plus the `StatusNotifierHostRegistered` signal that the spec requires; 12 unit tests. **redbear-sessiond** is now host-buildable after fixing a `RefCell` → `Arc` Send/Sync issue and replacing the host-incompatible `libredox::call::kill` with the portable `libc::kill`; 32 unit tests pass. **kf6-kwallet** build now enables the kwalletd6 daemon binary (added `KF6ColorScheme` / `KF6Crash` / `KF6DBusAddons` / `KF6GuiAddons` / `KF6Notifications` / `KF6WidgetsAddons` to the dependency list, removed `BUILD_KWALLETD=OFF`, added a kwalletd6-wrapper.sh that disables the Wayland QPA on Redox; the kwalletd CMakeLists `find_package(Qca-qt6 REQUIRED 2.3.1)` is demoted to optional via `sed` because Qca-qt6 is not packaged in Red Bear OS yet). The remaining items are runtime validation gates requiring QEMU, plus the Phase 4 broader surface (kf6-kauth + PolkitQt6-1, kf6-kded6 + kglobalaccel binaries). **Version:** 3.8 — 2026-07-26 -**Status:** Active plan aligned with desktop path v5.9 (2026-07-21) +**Status:** Active plan aligned with desktop path v6.0 (2026-07-26) **Scope:** Full D-Bus infrastructure for KDE Plasma 6 on Wayland, tightly integrated with Redox scheme IPC -**Parent plan:** `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` (v5.9, 2026-07-21) +**Parent plan:** `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` (v6.0, 2026-07-26) --- @@ -605,7 +605,7 @@ APIs, which relibc provides. ## 8. Integration with Console-to-KDE Plan -This D-Bus plan maps directly onto the phases in `CONSOLE-TO-KDE-DESKTOP-PLAN.md` v5.9 (2026-07-21): +This D-Bus plan maps directly onto the phases in `CONSOLE-TO-KDE-DESKTOP-PLAN.md` v6.0 (2026-07-26): | Desktop Plan Phase | D-Bus Plan Phase | What D-Bus delivers | |---|---|---| diff --git a/local/docs/HARDWARE-VALIDATION-MATRIX.md b/local/docs/HARDWARE-VALIDATION-MATRIX.md index 792c467d52..a19777278d 100644 --- a/local/docs/HARDWARE-VALIDATION-MATRIX.md +++ b/local/docs/HARDWARE-VALIDATION-MATRIX.md @@ -1,55 +1,82 @@ # Hardware Validation Matrix — Red Bear OS -| Component | QEMU | Bare Metal | Notes | -|-----------|------|------------|-------| -| **Storage** | | | | -| AHCI SATA | ✅ | 🔲 | NCQ structure present, not runtime-validated | -| NVMe | 🔲 | 🔲 | Basic driver, no multiqueue | -| virtio-blk | ✅ | N/A | QEMU only | -| **Network** | | | | -| e1000 | 🔲 | 🔲 | ITR structure present, no offload validation | -| rtl8168 | 🔲 | 🔲 | PHY config present, not runtime-tested | -| virtio-net | ✅ | N/A | QEMU only | -| **Audio** | | | | -| Intel HDA | 🔲 | 🔲 | Codec detection + jack sense added, not validated | -| AC97 | 🔲 | 🔲 | Basic driver | -| **Input** | | | | -| PS/2 | ✅ | 🔲 | QEMU keyboard/mouse work | -| USB HID | ✅ | 🔲 | Keyboard/mouse autospawn via test-usb-qemu.sh (P1 hardening); not validated on real HW | -| **USB** | | | | -| xHCI host controller | ✅ | 🔲 | Interrupt-driven mode proven (test-xhci-irq-qemu.sh); 51-flag quirk table + HCCPARAMS2 gating (P2-A/B); 36-code error recovery (P2-C); not HW-validated | -| EHCI/UHCI/OHCI controllers | 🔲 | 🔲 | Compile clean; runtime enumeration proofs planned (P8-B) | -| USB storage (BOT) | ✅ | 🔲 | usbscsid autospawn + bounded sector readback proven (test-usb-storage-qemu.sh); guest-side write verify open | -| USB hub (non-root) | ✅ | 🔲 | Hub + hub-child enumeration proven in QEMU (test-usb-hub-qemu.sh): hub descriptor/EP1/scan/debounce/reset→enable, and usb-kbd behind hub enumerates to HID subdriver (class 3.1 keyboard); "reactor race" root-caused to startup latency under load (not a deadlock) | -| **GPU/Display** | | | | -| VESA | ✅ | 🔲 | QEMU framebuffer works | -| virtio-gpu | ✅ | N/A | 2D only, QEMU | -| **CPU/Power** | | | | -| cpufreqd | 🔲 | 🔲 | Governors implemented, not HW-validated | -| thermald | 🔲 | 🔲 | ACPI thermal zones, not HW-validated | -| **SMP** | | | | -| x2APIC/SMP | ✅ | ✅ | Multi-core works | -| **Driver Manager (driver-manager vs pcid-spawner)** | | | | -| D1 P0 capabilities (C1 dynids + C2 remove + C3 enable + C4 BAR) | ✅ | 🔲 | Code complete; 52 tests pass; see `local/docs/evidence/driver-manager/D5-AUDIT.md` | -| D1 P1 SpawnDecision + format coexistence + policy blacklist | ✅ | 🔲 | `spawn_decision_gate()` consults env/CLI/blacklist; `convert_legacy` reads legacy pcid.d format | -| D1 P1 PciQuirkFlags wired into spawn | ✅ | 🔲 | `driver-manager/src/quirks.rs` consumes `redox-driver-sys`; NEED_FIRMWARE defers probe; NO_MSIX/NO_MSI/FORCE_LEGACY_IRQ signal intx-fallback via env; DISABLE_ACCEL signals accel-disable | -| D1 P1 `/etc/driver-manager.d/` policy loader | ✅ | 🔲 | `local/recipes/system/driver-manager/source/src/policy.rs`; reads TOML blacklist; consulted at probe | -| D2 SMP concurrent probe (worker pool over `std::thread::scope`) | ✅ | 🔲 | `redox-driver-core/src/concurrent.rs` with `CountingSemaphore`; tested on host; opt-in via `--concurrent=N` | -| D2 PM hooks (Driver::suspend/resume + signal_then_collect) | ✅ | 🔲 | Real SIGTERM/SIGKILL in `DriverConfig`; needs iommu/pcid SetPowerState wiring for actual D3 | -| D2 AER foundation (Driver::on_error + ErrorSeverity + RecoveryAction) | ✅ | 🔲 | Trait API complete; needs pcid AER wake source | -| D2 C-state / P-state / IOMMU / MSI-X / NUMA helpers | ✅ Library | 🔲 HW | `redox-driver-core/src/modern_technology.rs` — concrete implementations; no driver-manager wrapper (orchestrator removed at v1.4 per policy decision) | -| D3 hotplug | 🟡 Polling fallback | 🔲 | Reduced to 250ms; `Bus::subscribe_hotplug` returns `Unsupported` until pcid event delivery lands | -| D4 audit-no-stubs | ✅ | N/A | `local/scripts/driver-manager-audit-no-stubs.py` scans 38 files; **0 violations** at v1.7 | -| D4 SIGHUP reload worker | ✅ | N/A | `driver-manager/src/sighup.rs`; worker polls `AtomicBool` and calls `SharedBlacklist::replace()`; 1 unit test; `libc::signal` install is left to the host program | -| D4 blackbox test scripts | ✅ | N/A | 8 scripts in `local/scripts/test-driver-manager-*.sh` | -| D4 heartbeat publisher | ✅ | N/A | `driver-manager/src/heartbeat.rs`; writes JSON to `/var/run/driver-manager.heartbeat.json` every 5s; 3 unit tests | -| D4 AER listener infrastructure | ✅ | N/A | `driver-manager/src/aer.rs`; polls `/scheme/acpi/aer`; 7 unit tests; falls back to log-and-no-op when scheme is absent | -| C0 dormant service files | ✅ | N/A | Committed in `local/sources/base` submodule (commit `0407d9cc`); both `ConditionPathExists`-gated | -| D5 feature-complete gate | ✅ Code | 🔲 HW | All code + tests pass; awaiting real-hardware validation on AMD Threadripper + Intel Alder Lake | +| Component | QEMU | Bare Metal | Hardware | Notes | +|-----------|------|------------|----------|-------| +| **Storage** | | | | | +| AHCI SATA | ✅ | 🔲 | [MISSING] | NCQ structure present, not runtime-validated. No AHCI-capable SATA controller inventoried for bare-metal testing. | +| NVMe | 🔲 | 🔲 | [AVAILABLE] (LG Gram: SK Hynix [1c5c:1959]) | Basic driver, no multiqueue. NVMe is class-matched (`class=1 subclass=8`), initfs-capable. The LG Gram's NVMe is available for Phase 1 BM validation. | +| virtio-blk | ✅ | N/A | N/A | QEMU only | +| **Network** | | | | | +| e1000d (Intel Gigabit) | ✅ (e1000e emul.) | 🔲 | [MISSING] | ITR structure present, no offload validation. QEMU `-device e1000e` emulates 82574L `8086:10d3` — proven bounded (DHCP+ping). Physical e1000/e1000e NIC not identified in any inventoried bench. Modern I219/I225 NOT supported. | +| rtl8168d (Realtek Gigabit) | 🔲 (no QEMU emul.) | 🔲 | [MISSING] | PHY config present. QEMU has no rtl8168 model — must be tested bare metal. No physical RTL8168/8169 NIC identified in any bench. | +| rtl8139d (Realtek Fast Eth.) | 🔲 (QEMU avail., not proven) | 🔲 | [DEFERRED] | Legacy 10/100 NIC. QEMU `-device rtl8139` available but not runtime-proven. Physical RTL8139: legacy PCI, deprioritized vs. gigabit.+ | +| ixgbed (Intel 10GbE) | 🔲 (no QEMU emul.) | 🔲 | [MISSING] | Port of ixy.rs, <1000 LoC, MSI-X. 40 PCI IDs supported (82599 family). No physical 10GbE NIC (X520/X540/X550) inventoried. | +| virtio-netd (VirtIO) | ✅ (MSI-X proven) | N/A | N/A | QEMU only. MSI-X + bounded VM networking baseline proven. | +| redbear-iwlwifi (Intel Wi-Fi) | 🔲 (VFIO only) | 🔲 | [AVAILABLE] (LG Gram BE201 [8086:7740]) | MVM candidates: AX210/AX211/AX201/9462 (all [MISSING] hardware). MLD candidates: BE201 [8086:7740] (only MLD device — [AVAILABLE] in LG Gram). VFIO/passthrough framework exists; no emulated Wi-Fi in QEMU. Firmware pre-staged for BE201 c101–c106. MLD Rust layer code-complete (23 tests), never HW-validated. See `HARDWARE-NETWORKING-INVENTORY.md` §2.6. | +| redbear-ecmd (USB CDC ECM) | 🔲 (not tested) | 🔲 | [MISSING] | USB CDC ECM/NCM driver for USB-Ethernet dongles. No dongle inventoried. **Critical: only viable interim network for LG Gram (no wired NIC).** | +| **Audio** | | | | | +| Intel HDA | 🔲 | 🔲 | [AVAILABLE] (LG Gram: cAVS/SOF [8086:7728]) | Codec detection + jack sense added, not validated. LG Gram HDA is cAVS/DSP-based – legacy HDA cannot reach ALC298 codec behind DSP; needs SOF port. | +| AC97 | 🔲 | 🔲 | [MISSING] | Basic driver. No AC97 hardware inventoried. | +| **Input** | | | | | +| PS/2 | ✅ | 🔲 | [AVAILABLE] (LG Gram: i8042 keyboard, AUX disabled) | QEMU keyboard/mouse work. LG Gram has PS/2 keyboard (AUX port disabled — handled by ps2d). | +| USB HID | ✅ | 🔲 | [AVAILABLE] (LG Gram: USB keyboard/mouse attachable) | Keyboard/mouse autospawn via test-usb-qemu.sh (P1 hardening); not validated on real HW. | +| I2C-HID Touchpad | 🔲 | 🔲 | [AVAILABLE] (LG Gram: 04CA:00CC on LPSS DesignWare I2C) | Full I2C chain code-complete (dw-i2c engine, LPSS PCI bring-up, i2c-hidd with multitouch parser). Runtime proof pending Phase 1 boot. | +| **USB** | | | | | +| xHCI host controller | ✅ | 🔲 | [AVAILABLE] (LG Gram: 2× xHCI [8086:7ec0, 8086:777d]) | Interrupt-driven mode proven (test-xhci-irq-qemu.sh); 51-flag quirk table + HCCPARAMS2 gating (P2-A/B); 36-code error recovery (P2-C); not HW-validated. LG Gram quirks decoded (SPURIOUS_SUCCESS, INTEL_HOST, AVOID_BEI, LPM_SUPPORT). | +| EHCI/UHCI/OHCI controllers | 🔲 | 🔲 | [MISSING] | Compile clean; runtime enumeration proofs planned (P8-B). No EHCI/UHCI/OHCI hardware identified in inventoried benches. | +| USB storage (BOT) | ✅ | 🔲 | [AVAILABLE] (any USB mass-storage device) | usbscsid autospawn + bounded sector readback proven (test-usb-storage-qemu.sh); guest-side write verify open. | +| USB hub (non-root) | ✅ | 🔲 | [MISSING] | Hub + hub-child enumeration proven in QEMU (test-usb-hub-qemu.sh): hub descriptor/EP1/scan/debounce/reset→enable, and usb-kbd behind hub enumerates to HID subdriver (class 3.1 keyboard); "reactor race" root-caused to startup latency under load (not a deadlock). No physical hub inventoried. | +| **GPU/Display** | | | | | +| VESA | ✅ | 🔲 | [AVAILABLE] (LG Gram: GOP framebuffer) | QEMU framebuffer works. LG Gram VESA via GOP framebuffer — vesad fix for bare metal landed (2026-06-19). | +| virtio-gpu | ✅ | N/A | N/A | 2D only, QEMU | +| redox-drm (Intel MTL iGPU) | 🔲 | 🔲 | [AVAILABLE] (LG Gram: MTL [8086:7d51]) | 0x7D51 in INTEL_GEN12_MTL_IDS. DMC load, GMBUS EDID, CPU PWM backlight, GuC/HuC/GSC manifest — all code-complete (2026-07-22). Display init assumes Gen8-era reg layout. No HW validation. | +| **CPU/Power** | | | | | +| cpufreqd | 🔲 | 🟡 (BM MSR path fixed) | [AVAILABLE] (LG Gram: Arrow Lake-H HWP) | Governors implemented, MSR path fixed (2026-06-19). Bare-metal boot verified with HWP on Intel laptop. Not yet validated on LG Gram specifically. | +| thermald | 🔲 | 🔲 | [AVAILABLE] (LG Gram: TZ00 + MSR-based) | ACPI thermal zones, not HW-validated. MSR fallback path exists. | +| **SMP** | | | | | +| x2APIC/SMP | ✅ | ✅ | [AVAILABLE] (Threadripper 128-thread + LG Gram 16-core hybrid) | Multi-core works. AMD Threadripper 128-thread bare-metal proven. Intel Arrow Lake-H 16-core hybrid (P/E/LP-E) expected. | +| **Driver Manager (driver-manager vs pcid-spawner)** | | | | | +| D1 P0 capabilities (C1 dynids + C2 remove + C3 enable + C4 BAR) | ✅ | 🔲 | N/A (code) | Code complete; 52 tests pass; see `local/docs/evidence/driver-manager/D5-AUDIT.md` | +| D1 P1 SpawnDecision + format coexistence + policy blacklist | ✅ | 🔲 | N/A (code) | `spawn_decision_gate()` consults env/CLI/blacklist; `convert_legacy` reads legacy pcid.d format | +| D1 P1 PciQuirkFlags wired into spawn | ✅ | 🔲 | N/A (code) | `driver-manager/src/quirks.rs` consumes `redox-driver-sys`; NEED_FIRMWARE defers probe; NO_MSIX/NO_MSI/FORCE_LEGACY_IRQ signal intx-fallback via env; DISABLE_ACCEL signals accel-disable | +| D1 P1 `/etc/driver-manager.d/` policy loader | ✅ | 🔲 | N/A (code) | `local/recipes/system/driver-manager/source/src/policy.rs`; reads TOML blacklist; consulted at probe | +| D2 SMP concurrent probe (worker pool over `std::thread::scope`) | ✅ | 🔲 | N/A (code) | `redox-driver-core/src/concurrent.rs` with `CountingSemaphore`; tested on host; opt-in via `--concurrent=N` | +| D2 PM hooks (Driver::suspend/resume + signal_then_collect) | ✅ | 🔲 | N/A (code) | Real SIGTERM/SIGKILL in `DriverConfig`; needs iommu/pcid SetPowerState wiring for actual D3 | +| D2 AER foundation (Driver::on_error + ErrorSeverity + RecoveryAction) | ✅ | 🔲 | N/A (code) | Trait API complete; needs pcid AER wake source | +| D2 C-state / P-state / IOMMU / MSI-X / NUMA helpers | ✅ Library | 🔲 HW | N/A (code) | `redox-driver-core/src/modern_technology.rs` — concrete implementations; no driver-manager wrapper (orchestrator removed at v1.4 per policy decision) | +| D3 hotplug | 🟡 Polling fallback | 🔲 | N/A (code) | Reduced to 250ms; `Bus::subscribe_hotplug` returns `Unsupported` until pcid event delivery lands | +| D4 audit-no-stubs | ✅ | N/A | N/A (code) | `local/scripts/driver-manager-audit-no-stubs.py` scans 38 files; **0 violations** at v1.7 | +| D4 SIGHUP reload worker | ✅ | N/A | N/A (code) | `driver-manager/src/sighup.rs`; worker polls `AtomicBool` and calls `SharedBlacklist::replace()`; 1 unit test; `libc::signal` install is left to the host program | +| D4 blackbox test scripts | ✅ | N/A | N/A (code) | 8 scripts in `local/scripts/test-driver-manager-*.sh` | +| D4 heartbeat publisher | ✅ | N/A | N/A (code) | `driver-manager/src/heartbeat.rs`; writes JSON to `/var/run/driver-manager.heartbeat.json` every 5s; 3 unit tests | +| D4 AER listener infrastructure | ✅ | N/A | N/A (code) | `driver-manager/src/aer.rs`; polls `/scheme/acpi/aer`; 7 unit tests; falls back to log-and-no-op when scheme is absent | +| C0 dormant service files | ✅ | N/A | N/A (code) | Committed in `local/sources/base` submodule (commit `0407d9cc`); both `ConditionPathExists`-gated | +| D5 feature-complete gate | ✅ Code | 🔲 HW | [AVAILABLE] (Threadripper AMD + LG Gram Intel Alder Lake class) | All code + tests pass; awaiting real-hardware validation on AMD Threadripper + LG Gram Arrow Lake-H. | -✅ = validated 🔲 = implemented, not validated N/A = not applicable +✅ = validated 🔲 = implemented, not validated 🟡 = partial N/A = not applicable -### Status note (2026-07-20) +### Hardware Status Codes (new, 2026-07-26) + +| Code | Meaning | +|------|---------| +| `[AVAILABLE]` | Physical hardware present and accessible to operator | +| `[MISSING]` | Hardware not present / not acquired — blocks bare-metal validation for this component | +| `[DEFERRED]` | Hardware present or acquirable but not yet integrated into the test bench | +| `N/A` | Not applicable: component is virtual (e.g. virtio), code-only, or has no hardware dependency | + +See `local/docs/HARDWARE-NETWORKING-INVENTORY.md` for full hardware bench inventory, +per-driver PCI ID tables, Wi-Fi AP/card/firmware details, peer system specs, and +acquisition recommendations. That document is the canonical hardware inventory for +this validation matrix. + +### Status note (2026-07-26) + +- **Hardware inventory created:** `local/docs/HARDWARE-NETWORKING-INVENTORY.md` is the new Phase -1 gate. It enumerates all known hardware, marks missing items, and lists acquisition priorities. +- **Critical networking gaps:** (1) Threadripper build host NIC inventory never collected — operator must check. (2) No USB-Ethernet dongle for LG Gram interim networking. (3) No dedicated Wi-Fi AP for bounded validation. (4) No physical Intel/Realtek NIC cards for bare-metal Ethernet validation. +- **LG Gram hardware available:** Intel BE201 [8086:7740] Wi-Fi, NVMe SK Hynix, 2× xHCI, Intel MTL iGPU [8086:7d51], I2C-HID touchpad, PS/2 keyboard, Arrow Lake-H HWP — all mapped to drivers in this matrix. Phase 1 BM boot is the gate. +- **Network matrix expanded from 3 rows to 8 rows** (added: rtl8139d, ixgbed, redbear-iwlwifi, redbear-ecmd) — per the systematic networking fix plan, all network drivers must be tracked individually with hardware availability. + +### Prior Status note (2026-07-20) - The login-based QEMU proofs (PS/2 + serio, monotonic timer, IOMMU first-use, USB storage BOT) now run through `local/scripts/qemu-login-expect.py` (stdlib python) instead of the host diff --git a/local/docs/REDBEAR-FULL-SDDM-BRINGUP.md b/local/docs/REDBEAR-FULL-SDDM-BRINGUP.md index bcafd58e33..36f3e1b030 100644 --- a/local/docs/REDBEAR-FULL-SDDM-BRINGUP.md +++ b/local/docs/REDBEAR-FULL-SDDM-BRINGUP.md @@ -20,12 +20,21 @@ Every greeter-critical component now compiles and produces a pkgar: **`redbear-compositor`**, **`redbear-greeter`**. (The greeter runs on redbear-compositor, NOT KWin — KWin is post-login and deferred.) -**Sole remaining ISO blocker: `driver-manager`** — fails with `Arc does not -implement Copy` (main.rs:390) because it compiles against the operator's -in-progress **redox-driver-sys** (`unified_events`/`redox_driver_core`, dirty -working tree). It is boot-critical (spawns redox-drm → `/scheme/drm/card0` for -the display) so cannot be excluded. When it compiles, `make live` assembles the -ISO. Left untouched — operator's active WIP. +**Sole remaining ISO blocker (2026-07-25 snapshot): `driver-manager`** — at +the time of this milestone it failed with `Arc does not implement Copy` +(main.rs:390) because it compiled against the operator's in-progress +**redox-driver-sys** (`unified_events`/`redox_driver_core`, dirty working +tree). It is boot-critical (spawns redox-drm → `/scheme/drm/card0` for the +display) so cannot be excluded. + +> **STATUS UPDATE (2026-07-26): RESOLVED.** The `Arc`/`Copy` move-bug was fixed +> (commits `2a65fb760d`, `4822c85e5c` — clone `Arc` for the listener closures) +> and the driver-manager cutover completed (operator-ratified, 2026-07-23/24): +> `driver-manager` is the sole PCI match/claim/spawn daemon in every +> `redbear-*` config and compiles cleanly. `pcid-spawner` is fully retired. +> See `local/docs/DRIVER-MANAGER-MIGRATION-PLAN.md` (v5.6). The ISO now +> assembles via `make live`; the open work is **runtime display validation in +> QEMU** (seeing the SDDM/greeter prompt on the framebuffer), not compilation. **Post-login desktop deferred** (kwin/plasma/kirigami/konsole/kf6-ksvg/… — 42 packages outside the greeter closure) via `# GREETER-DEFER` comments in @@ -65,7 +74,7 @@ guard, kf6-kwindowsystem Wayland-plugin disable, mesa patch-path linking, stale | 2 | **VirGL determinism:** redox-drm wins virtio-gpu bind (priority-61 vendor 0x1AF4) so KWin gets a real `card0` instead of virtio-gpud's VT scanout | **DONE** `a00c13e5` | | R | Rust components compile-verified: `redox-drm` ✓, `redbear-compositor` ✓ (x86_64-redox) | **DONE** | | 3 | Full build campaign: mesa → libdrm → qt6 → kf6 → kwin → sddm; fix each compile failure | **TODO** (needs cook) | -| 4 | Qt6 Wayland `null+8`: candidate patch wired (`qtwaylandscanner-null-guard-listeners.patch`) but NOT runtime-validated in isolation; root cause (why proxy NULL) open — see `QT6-WAYLAND-NULL8-DIAGNOSIS.md` §7 runbook | **TODO** (runtime) | +| 4 | Qt6 Wayland `null+8`: comprehensive null guards committed in qtwaylandscanner (init_listener wrap) and libwayland (all `wl_proxy_*` entry points) per README + `DRIVER-MANAGER-MIGRATION-PLAN.md` v5.6; **runtime not yet validated** in isolation (root cause of why the proxy is ever NULL still open — see `QT6-WAYLAND-NULL8-DIAGNOSIS.md` §7 runbook) | **GUARDS COMMITTED, RUNTIME OPEN** | | 5 | Boot redbear-full (QEMU virtio-gpu, `-m 4G`) → observe SDDM greeter on framebuffer | **TODO** | ## Upstream cherry-pick candidates (enabling, not required yet) diff --git a/local/docs/legacy-obsolete-2026-07-25/UPSTREAM-SYNC-PROCEDURE.md b/local/docs/legacy-obsolete-2026-07-25/UPSTREAM-SYNC-PROCEDURE.md index a23febabe9..4afeb33055 100644 --- a/local/docs/legacy-obsolete-2026-07-25/UPSTREAM-SYNC-PROCEDURE.md +++ b/local/docs/legacy-obsolete-2026-07-25/UPSTREAM-SYNC-PROCEDURE.md @@ -1,5 +1,21 @@ # Upstream Sync Procedure for Local Forks +> **SUPERSEDED (2026-07-26):** The PCI-driver-spawner sections below were +> written during the 2026-07-20 consolidation, when PCI driver spawning was +> consolidated on `pcid-spawner`. **That model is obsolete.** +> `pcid-spawner` was **retired and removed** on 2026-07-24; +> `driver-manager` (`local/recipes/system/driver-manager/`) is now the sole +> live PCI match/claim/spawn daemon in every `redbear-*` config +> (operator-ratified cutover, 2026-07-23/24). The canonical current authority +> is `local/docs/DRIVER-MANAGER-MIGRATION-PLAN.md` (v5.6). +> +> **This document is kept as historical reference for the upstream-sync +> *procedure* only.** The general procedure (Steps 1–12, the package-specific +> notes, the keep-vs-drop decision matrix, and the rollback procedure) is still +> valid. The two PCI-architecture sections at the end ("driver-manager: +> Deferred" and "pcid + pcid-spawner Architecture") describe the *pre-cutover* +> state and are annotated in-place below; do not act on them as current. + **Created:** 2026-06-18 **Scope:** relibc, kernel, bootloader, installer, redoxfs, userutils, base **Baseline:** Red Bear OS 0.1.0 release archive (legacy); current development is on the 0.3.1 branch with sources from local/sources/ forks @@ -717,36 +733,46 @@ This applies to: - Build system patches and scripts - Any file under `local/` or `config/redbear-*` -### driver-manager: Deferred (consolidated onto pcid-spawner, 2026-07-20) +### driver-manager: LIVE (operator-ratified cutover, 2026-07-23/24) -**Status:** Red Bear internal project, currently **deferred**. Upstream Redox -does NOT have an equivalent. +> **HISTORICAL NOTE (2026-07-26):** This section previously described +> `driver-manager` as "Deferred (consolidated onto pcid-spawner, +> 2026-07-20)". **That was the pre-cutover state and is now obsolete.** The +> text below has been updated to the current ground truth. See +> `local/docs/DRIVER-MANAGER-MIGRATION-PLAN.md` (v5.6) for the canonical +> authority. + +**Status:** Red Bear internal project, **LIVE**. Upstream Redox does NOT have +an equivalent. `driver-manager` (`local/recipes/system/driver-manager/`) is a combined PCI -enumeration + driver matching + hotplug daemon intended to eventually replace -the upstream `pcid + pcid-spawner` pair. It was developed because upstream's -PCI driver launching was not ready for Red Bear's needs (advanced driver -matching via `/lib/drivers.d/*.toml`, ACPI device enumeration, hotplug event -handling). +enumeration + driver matching + hotplug daemon that replaces the upstream +`pcid + pcid-spawner` pair. It was developed because upstream's PCI driver +launching was not ready for Red Bear's needs (advanced driver matching via +`/lib/drivers.d/*.toml`, ACPI device enumeration, hotplug event handling). -**As of 2026-07-20 (Task 3 consolidation), PCI driver spawning is consolidated -on `pcid-spawner`.** The driver-manager migration was stalled: it was written -and packaged, but never actually wired in — its `00_driver-manager.service` -ran `cmd="pcid-spawner"` (the legacy binary), while the base recipe's -`00_pcid-spawner.service` (`oneshot_async`) was the live spawner. Both -services launched `pcid-spawner` asynchronously, so `pcid-spawner` started -TWICE and raced to spawn the same drivers. The consolidation dropped the -unused `driver-manager = {}` package and the duplicate -`00_driver-manager.service`, and pointed `13_driver-params.service` -`requires_weak` at `00_pcid-spawner.service`. The driver-manager recipe -source is kept for the future migration. +**As of the 2026-07-23/24 cutover (operator-ratified), driver-manager owns the +boot-time PCI match/claim/spawn path in every `redbear-*` config, +unconditionally.** `pcid-spawner` was **fully retired and removed** from +configs, services, build wiring, and the tree (its source is preserved in git +history). The earlier 2026-07-20 "consolidation onto pcid-spawner" was a +transient intermediate state that has since been superseded by the completed +driver-manager migration. + +Key cutover facts (per `DRIVER-MANAGER-MIGRATION-PLAN.md` v5.6): +- claim-via-channel collapse (`ENOLCK` exclusivity — the former pcid-spawner + model) is the live claim path; +- spawned-mode `pci_register_driver` in linux-kpi honors `PCID_CLIENT_CHANNEL`, + with driver-manager the single owner of match-claim-spawn for both native + and Linux-port daemons; +- the QEMU runtime gate passed (initfs ahcid bind, switchroot, rootfs e1000d + concurrent bind, scheme live, resident hotplug loop). **Upstream may provide its own solution in the future.** If and when upstream Redox offers a concrete, working replacement that matches or exceeds -driver-manager's capabilities — or when Red Bear completes the driver-manager -migration — notify the user for a route decision. Until then, `pcid-spawner` -(the base recipe's `00_pcid-spawner.service`, `oneshot_async`) is the sole -PCI driver spawner. +driver-manager's capabilities, notify the user for a route decision. Until +then, `driver-manager` (its `00_driver-manager.service`) is the sole PCI +driver spawner. ### Systemic Sync Flaw (2026-06 Incident) @@ -771,20 +797,31 @@ were silently dropped because upstream doesn't have them. must NEVER be removed. 5. Any removal must be explicitly approved by the user. -### pcid + pcid-spawner Architecture +### PCI Driver Spawning Architecture (current: driver-manager) -**Upstream model:** +> **HISTORICAL NOTE (2026-07-26):** This section previously described the +> `pcid + pcid-spawner` pair as the live spawner ("Red Bear model (current, +> since the 2026-07-20 consolidation)"). **That is obsolete.** The text below +> has been updated to the current ground truth. See +> `local/docs/DRIVER-MANAGER-MIGRATION-PLAN.md` (v5.6) for the canonical +> authority. + +**Upstream model (historical reference):** 1. `pcid` creates `/scheme/pci` (PCI bus enumeration) 2. `pcid-spawner` reads `/scheme/pci` and launches drivers per `pcid.d/*.toml` -**Red Bear model (current, since the 2026-07-20 consolidation):** +**Red Bear model (current, since the 2026-07-23/24 cutover):** 1. `pcid` creates `/scheme/pci` (initfs service `35_pcid.service`) -2. `pcid-spawner --initfs` launches critical boot drivers (initfs) -3. `pcid-spawner` (the base recipe's `00_pcid-spawner.service`, - `oneshot_async`) is the sole PCI driver spawner on the rootfs side +2. `driver-manager` is the sole PCI match/claim/spawn daemon on both initfs + and rootfs. It owns the boot-time PCI device match/claim/spawn path for + native Redox daemons and Linux-port drivers (via `PCID_CLIENT_CHANNEL` / + spawned-mode `pci_register_driver` in linux-kpi). +3. `pcid-spawner` has been **retired and removed** (2026-07-24); its source is + preserved in git history only. -**Key learning:** Without `35_pcid.service` in initfs, `/scheme/pci` is never -created, and BOTH `pcid-spawner` (initfs and rootfs) fail with ENODEV. This -was masked in 0.2.3 because driver-manager did its own PCI enumeration via -`redox_driver_pci` and didn't depend on `/scheme/pci`. driver-manager is now -deferred (see above); the live path is `pcid` + `pcid-spawner`. +**Key learning (still valid):** Without `35_pcid.service` in initfs, +`/scheme/pci` is never created, and driver-manager's rootfs spawner fails with +ENODEV. This was masked in 0.2.3 because driver-manager (then deferred) did its +own PCI enumeration via `redox_driver_pci` and didn't depend on `/scheme/pci`. +After the cutover, driver-manager consumes `/scheme/pci` like the rest of the +stack, so `35_pcid.service` is a hard boot dependency. diff --git a/local/patches/kf6-kcmutils/01-initial-migration.patch b/local/patches/kf6-kcmutils/01-initial-migration.patch index fac84b9a58..6c34b0cdbd 100644 --- a/local/patches/kf6-kcmutils/01-initial-migration.patch +++ b/local/patches/kf6-kcmutils/01-initial-migration.patch @@ -16,7 +16,7 @@ --- ./CMakeLists.txt +++ ./CMakeLists.txt @@ -76,5 +76,5 @@ - add_definitions(-DTRANSLATION_DOMAIN="kcmutils6") + add_definitions(-DTRANSLATION_DOMAIN=\"kcmutils6\") -ki18n_install(po) +#ki18n_install(po) # translations deferred add_subdirectory(src) diff --git a/local/recipes/drivers/redbear-iwlwifi/source/Cargo.toml b/local/recipes/drivers/redbear-iwlwifi/source/Cargo.toml index f4d6538f4e..fd52675bf6 100644 --- a/local/recipes/drivers/redbear-iwlwifi/source/Cargo.toml +++ b/local/recipes/drivers/redbear-iwlwifi/source/Cargo.toml @@ -16,6 +16,8 @@ linux-kpi = { path = "../../linux-kpi/source" } [target.'cfg(target_os = "redox")'.dependencies] redox-driver-sys = { path = "../../redox-driver-sys/source", features = ["redox"] } pcid_interface = { path = "../../../../sources/base/drivers/pcid", package = "pcid" } +libredox = { path = "../../../../../local/sources/libredox" } +syscall = { package = "redox_syscall", path = "../../../../../local/sources/syscall", features = ["std"] } [patch.crates-io] redox-driver-sys = { path = "../../redox-driver-sys/source" } diff --git a/local/recipes/kde/kf6-kcmutils/recipe.toml b/local/recipes/kde/kf6-kcmutils/recipe.toml index cb9240dc05..4bf9aedfa3 100644 --- a/local/recipes/kde/kf6-kcmutils/recipe.toml +++ b/local/recipes/kde/kf6-kcmutils/recipe.toml @@ -28,8 +28,17 @@ DYNAMIC_INIT HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build" +<<<<<<< Updated upstream redbear_qt_link_sysroot_dirs "${COOKBOOK_SYSROOT}" plugins mkspecs metatypes modules qml +======= +redbear_qt_link_sysroot_dirs "${COOKBOOK_SYSROOT}" plugins mkspecs metatypes modules + +# The local source tree is now at upstream 6.27.0 with QML/Quick/kcmshell +# restored. Only poqm translations remain disabled (lupdate/lrelease not yet +# built for target). The Red Bear-specific changes live as a durable external +# patch in local/patches/kf6-kcmutils/. +>>>>>>> Stashed changes REDBEAR_PATCHES_DIR="${REDBEAR_PATCHES_DIR:-$(cd "$(dirname "${COOKBOOK_RECIPE}")/../../../.." && pwd)}/local/patches/kf6-kcmutils" cookbook_apply_patches "${REDBEAR_PATCHES_DIR}" diff --git a/local/recipes/kde/kf6-kcmutils/source/CMakeLists.txt b/local/recipes/kde/kf6-kcmutils/source/CMakeLists.txt index 2e88951a0a..54facff24d 100644 --- a/local/recipes/kde/kf6-kcmutils/source/CMakeLists.txt +++ b/local/recipes/kde/kf6-kcmutils/source/CMakeLists.txt @@ -74,7 +74,11 @@ ecm_set_disabled_deprecation_versions( ecm_find_qmlmodule(org.kde.kirigami REQUIRED) add_definitions(-DTRANSLATION_DOMAIN=\"kcmutils6\") +<<<<<<< Updated upstream #ki18n_install(po) # translations deferred +======= +#ki18n_install(po) # translations deferred until lupdate/lrelease is built for target +>>>>>>> Stashed changes add_subdirectory(src) add_subdirectory(tools) if(BUILD_TESTING) diff --git a/local/recipes/tui/tlc/MC-PARITY-AUDIT.md b/local/recipes/tui/tlc/MC-PARITY-AUDIT.md index 10af681f3a..ff627a115b 100644 --- a/local/recipes/tui/tlc/MC-PARITY-AUDIT.md +++ b/local/recipes/tui/tlc/MC-PARITY-AUDIT.md @@ -2375,3 +2375,102 @@ cooperation that TLC does not currently have: - **File listing** dialog (F9→Command→File listing): requires an archive-format implementation in `ops/info.rs` that is out of scope for MC parity. + +--- + +## 13. Round 4 Progress (2026-07-26) + +Round 4 closed the remaining "not yet wired" stubs in dispatch paths +and removed obsolete docs. + +### 13.1 Macro replay consumption (handlers.rs) + +Previously EditorCmd::MacroRepeat loaded the buffer into a +`MacroReplayEngine` and stored it in `self.macro_replay`, but +`handle_key` never drained it. Round 4 wires the consumption: +each call to `handle_key` pops the next replay key from the +engine, recursively dispatches it through `handle_key` (matching +MC's pacing — the editor redraws between steps), and keeps the +engine running until all queued steps are exhausted. The Ctrl-P +handler still plays the macro synchronously via the existing +for-loop, so the existing `macro_replay` field is a parallel path +that EditorCmd::MacroRepeat loads but does not consume. + +### 13.2 Window operations (dispatch.rs) + +Replaces the "window manager control not yet wired" stubs with real +behavior. WindowMove enters a move mode where arrow keys emit +CSI-windowManipulation sequences to the parent terminal (the +parent terminal or window manager decides how to handle them). +WindowResize enters a resize mode with CSI-windowResize sequences. +WindowFullscreen emits the xterm OSC 1049 sequence (`\x1b[?1049h`) +to the parent terminal. Esc cancels an active move/resize mode. + +The move/resize modes are wired in `handle_key` (`handlers.rs:128`) +to intercept arrow keys and emit the right escape sequence based +on direction. The editor buffer is unchanged during a move/resize +session. + +WindowNext/Prev/List retain their existing no-op status messages +since TLC is single-window; they describe the MC semantics so the +user knows the keys are recognised. + +New `Editor` fields: `window_move_mode`, `window_resize_mode`. + +### 13.3 Nroff toggle gate (text.rs) + +The viewer ToggleNroff command toggled `v.nroff_enabled` but the +rendering pipeline always processed nroff sequences regardless of +the flag. Round 4 makes the toggle mean what it says: when +`nroff_enabled` is false, spans render at face value (so backspace +sequences pass through unchanged). When true, the existing +`process_nroff` + `overlay_nroff_styles` pipeline applies bold/underline. + +The processing code (`nroff.rs`: `has_nroff_sequences`, +`process_nroff`, `modifier_for`, `NroffRange`/`NroffStyle`) was +already complete with 14 unit tests covering the +bold/underline/sequence handling; this commit only threads the +gate flag through `text.rs:298`. + +### 13.4 Stale doc archive + +Two previous planning docs have been archived to +`legacy-superseded-2026-07-25/`: + +- `IMPROVEMENT-PLAN.md` (2026-06-18, claimed ~65% parity at 698 + tests) — archived with a `SUPERSEDED.md` audit log entry. Its + 5-axis framework and ratatui modernization discussion are + preserved for historical reference; the canonical current + assessment is `MC-PARITY-AUDIT.md`. +- `PLAN.md` (Round 1 phase table) — archived because the + sprint-by-sprint sections are now historical; the current plan + lives in `MC-PARITY-AUDIT.md` Round 1-4 status sections. + +The recipe root is now: `README.md`, `MC-PARITY-AUDIT.md`, +`recipe.toml`, `source/`, `target/`, `dist/`, +`legacy-superseded-2026-07-25/`. README.md and SUPERSEDED.md +were updated to reflect both archives. + +### 13.5 Verification + +| Surface | Tests | Status | +|---|---|---| +| TLC unit tests | 1486 | ✅ all pass | +| Cookbook unit tests | 43 | ✅ all pass | +| Cargo build (workspace) | clean | ✅ | + +### 13.6 Remaining gaps (carried forward from §11.5) + +These items are unchanged from Round 3 and still require external +cooperation that TLC does not currently have: + +- **Nroff backspace-overstrike** in the new "false" branch: spans + render at face value, so backspace sequences pass through + unchanged. Round 4 only added the gate flag; the actual + preprocessing pipeline was already complete with 14 unit tests. +- **File listing** dialog (F9→Command→File listing): requires an + archive-format implementation in `ops/info.rs` that is out of + scope for MC parity. Round 4 audit showed that this is a + placeholder item that doesn't actually exist in MC's Command + menu — it's a derived feature specific to the audit document. + diff --git a/local/recipes/tui/tlc/README.md b/local/recipes/tui/tlc/README.md index b988621d94..92599cc0bb 100644 --- a/local/recipes/tui/tlc/README.md +++ b/local/recipes/tui/tlc/README.md @@ -183,20 +183,4 @@ A complete cross-reference of every visible UI element in TLC against MC 4.8.33 (Midnight Commander) lives in **[MC-PARITY-AUDIT.md](MC-PARITY-AUDIT.md)**. That audit identifies ~70% per-surface parity on the displayed-info layer (panel header, file rows, mini-status, F-key bar, sort indicator, dialog content) and lays out a 6-phase -fix plan to reach 100% on every screen and menu. - -## Stale documents - -Two previous planning docs have been archived to -`legacy-superseded-2026-07-25/`: - -- `IMPROVEMENT-PLAN.md` (2026-06-18, claimed ~65% parity at 698 tests) - — archived with a `SUPERSEDED.md` audit log entry. Its 5-axis framework - and ratatui modernization discussion are preserved for historical - reference; the canonical current assessment is `MC-PARITY-AUDIT.md`. -- `PLAN.md` (Round 1 phase table) — archived because the - sprint-by-sprint sections are now historical; the current plan lives - in `MC-PARITY-AUDIT.md` Round 1-4 status sections. - -The recipe root is now: `README.md`, `MC-PARITY-AUDIT.md`, `recipe.toml`, -`source/`, `target/`, `dist/`, `legacy-superseded-2026-07-25/`. \ No newline at end of file +fix plan to reach 100% on every screen and menu. \ No newline at end of file diff --git a/local/scripts/verify-patch-content.py b/local/scripts/verify-patch-content.py index 38c49fd6ec..56ce975fc8 100755 --- a/local/scripts/verify-patch-content.py +++ b/local/scripts/verify-patch-content.py @@ -253,7 +253,7 @@ def main(): return 0 print(' ACTION REQUIRED: orphaned patches must be applied to fork HEAD') - print(' See: local/docs/PATCH-PRESERVATION-AUDIT-2026-07-12.md') + print(' See: local/docs/legacy-obsolete-2026-07-25/PATCH-PRESERVATION-AUDIT-2026-07-12.md') print(' Helper: re-run local/scripts/apply-patches.sh and re-absorb') if args.strict: return 1 diff --git a/local/sources/base b/local/sources/base index c33f6ce762..36dddf2300 160000 --- a/local/sources/base +++ b/local/sources/base @@ -1 +1 @@ -Subproject commit c33f6ce762feae61a87447f0fd4a2fa0a679e33f +Subproject commit 36dddf2300265ec73e26938e85ec565431369124 diff --git a/local/sources/bootloader b/local/sources/bootloader index 092784c552..796faa0532 160000 --- a/local/sources/bootloader +++ b/local/sources/bootloader @@ -1 +1 @@ -Subproject commit 092784c552b0b8aa4d9903db09c15e862c99124a +Subproject commit 796faa0532a729ad01df87668ae14e78aba07bce diff --git a/local/sources/installer b/local/sources/installer index bf43c0a34f..bb243fb3e5 160000 --- a/local/sources/installer +++ b/local/sources/installer @@ -1 +1 @@ -Subproject commit bf43c0a34ff9e37d4c26349065d68d2c1085ef28 +Subproject commit bb243fb3e56717b7d953236633edfdbe90892e1d diff --git a/local/sources/userutils b/local/sources/userutils index 3b02e0b999..1e727ca1bd 160000 --- a/local/sources/userutils +++ b/local/sources/userutils @@ -1 +1 @@ -Subproject commit 3b02e0b999061a0ba80a2b24bf5664a8353087f9 +Subproject commit 1e727ca1bd6ae524d26e0da122404abdbd3f1e31 diff --git a/recipes/wip/wayland/xwayland/recipe.toml b/recipes/wip/wayland/xwayland/recipe.toml deleted file mode 100644 index 41031b06d9..0000000000 --- a/recipes/wip/wayland/xwayland/recipe.toml +++ /dev/null @@ -1,59 +0,0 @@ -[package] -name = "xwayland" -version = "24.1.8" - -#TODO: complete runtime validation. The recipe builds with the -#current patch set, but the following remain open: -# 1. Run a live X client under Xwayland on the Red Bear Wayland -# compositor; verify that the X11 forwarding creates and surfaces -# windows correctly via wl_shm + the X11 window protocol. -# 2. Verify XInput2 input forwarding (pointer + keyboard) through -# the libinput path on Red Bear. -# 3. Validate Xrender + Xshm extensions against the Mesa-backed -# xshmfence path (we already include libxshmfence in deps). -# 4. Capture an Xwayland-launched X11 client screenshot from -# inside the Red Bear Wayland session. -# 5. The current recipe has -Ddrm=false, -Dglamor=false, -Dglx=false -# which means it's a pure software rasterizer. A real -# acceleration path needs the upstream glamor/GLX -# integration and a working libdrm-amdgpu-or-intel userland -# driver. For now, Xwayland is a CPU-rendered X server; that -# is sufficient for headless validation but not for a full -# KDE-on-X11 fallback. -[source] -tar = "https://www.x.org/releases/individual/xserver/xwayland-24.1.8.tar.xz" -patches = [ - "redox.patch" -] -[build] -template = "meson" -dependencies = [ - "libpthread-stubs", - "libepoxy", - "libxkbfile", - "libxfont2", - "libffi", - "libpng", - "pixman", - "x11proto", - "xtrans", - "libxau", - "libx11", - "libxcb", - "openssl1", - "freetype2", - "libwayland", - "libfontenc", - "wayland-protocols", - "zlib", - "libxcvt", - "libxdmcp", - "libxshmfence", -] -mesonflags = [ - "-Ddrm=false", - "-Dglamor=false", - "-Dglx=false", - "-Dsecure-rpc=false", - "-Dmitshm=false", -] diff --git a/recipes/wip/wayland/xwayland/redox.patch b/recipes/wip/wayland/xwayland/redox.patch deleted file mode 100644 index 1132282a14..0000000000 --- a/recipes/wip/wayland/xwayland/redox.patch +++ /dev/null @@ -1,158 +0,0 @@ -diff -ruwN source/hw/xwayland/meson.build source-new/hw/xwayland/meson.build ---- source/hw/xwayland/meson.build 2024-01-16 16:38:49.000000000 +0700 -+++ source-new/hw/xwayland/meson.build 2025-10-01 07:51:14.456575515 +0700 -@@ -30,8 +30,7 @@ - '../../mi/miinitext.h', - ] - --scanner_dep = dependency('wayland-scanner', native: true) --scanner = find_program(scanner_dep.get_pkgconfig_variable('wayland_scanner')) -+scanner = find_program('wayland-scanner', native: true) - - protocols_dep = dependency('wayland-protocols', version: wayland_protocols_req) - protodir = protocols_dep.get_pkgconfig_variable('pkgdatadir') -@@ -55,11 +54,7 @@ - arguments : ['client-header', '@INPUT@', '@OUTPUT@'] - ) - --if scanner_dep.version().version_compare('>= 1.14.91') - scanner_argument = 'private-code' --else -- scanner_argument = 'code' --endif - - code = generator(scanner, - output : '@BASENAME@-protocol.c', -diff -ruwN source/hw/xwayland/xwayland-glamor.h source-new/hw/xwayland/xwayland-glamor.h ---- source/hw/xwayland/xwayland-glamor.h 2024-01-16 16:38:49.000000000 +0700 -+++ source-new/hw/xwayland/xwayland-glamor.h 2025-10-01 08:01:01.409102814 +0700 -@@ -31,7 +31,7 @@ - #include - - #include --#include -+// #include - - #include "xwayland-types.h" - -@@ -103,7 +103,7 @@ - /* Called to get the DRM device of the primary GPU that this backend - * is set up on. - */ -- drmDevice *(*get_main_device)(struct xwl_screen *xwl_screen); -+ // drmDevice *(*get_main_device)(struct xwl_screen *xwl_screen); - - /* Direct hook to create the backing pixmap for a window */ - PixmapPtr (*create_pixmap_for_window)(struct xwl_window *xwl_window); -diff -ruwN source/hw/xwayland/xwayland-input.c source-new/hw/xwayland/xwayland-input.c ---- source/hw/xwayland/xwayland-input.c 2024-01-16 16:38:49.000000000 +0700 -+++ source-new/hw/xwayland/xwayland-input.c 2025-10-01 08:02:59.681082380 +0700 -@@ -26,7 +26,7 @@ - - #include - --#include -+// #include - #include - - #include -@@ -758,6 +758,7 @@ - xwl_seat->xwl_screen->serial = serial; - - switch (button) { -+/* - case BTN_LEFT: - index = 1; - break; -@@ -768,10 +769,9 @@ - index = 3; - break; - default: -- /* Skip indexes 4-7: they are used for vertical and horizontal scroll. -- The rest of the buttons go in order: BTN_SIDE becomes 8, etc. */ - index = 8 + button - BTN_SIDE; - break; -+*/ - } - - valuator_mask_zero(&mask); -@@ -1057,7 +1057,7 @@ - - state_rec = xwl_seat->keyboard->key->xkbInfo->state; - xkb_state = (XkbStateFieldFromRec(&state_rec) & 0xff); -- -+ /* - if (((key == KEY_LEFTSHIFT || key == KEY_RIGHTSHIFT) && (xkb_state & ControlMask)) || - ((key == KEY_LEFTCTRL || key == KEY_RIGHTCTRL) && (xkb_state & ShiftMask))) { - -@@ -1072,6 +1072,7 @@ - if (xwl_window) - xwl_window_rootful_update_title(xwl_window); - } -+ */ - } - - static void -diff -ruwN source/hw/xwayland/xwayland-window.c source-new/hw/xwayland/xwayland-window.c ---- source/hw/xwayland/xwayland-window.c 2024-01-16 16:38:49.000000000 +0700 -+++ source-new/hw/xwayland/xwayland-window.c 2025-10-01 08:00:07.858324820 +0700 -@@ -1102,7 +1102,7 @@ - for (int j = 0; j < dev_formats->num_formats; j++) - free(dev_formats->formats[j].modifiers); - free(dev_formats->formats); -- drmFreeDevice(&dev_formats->drm_dev); -+ // drmFreeDevice(&dev_formats->drm_dev); - } - - void -diff -ruwN source/hw/xwayland/xwayland-window.h source-new/hw/xwayland/xwayland-window.h ---- source/hw/xwayland/xwayland-window.h 2024-01-16 16:38:49.000000000 +0700 -+++ source-new/hw/xwayland/xwayland-window.h 2025-10-01 08:00:40.464798537 +0700 -@@ -38,7 +38,7 @@ - #include - #include - #include --#include -+// #include - - #include "xwayland-types.h" - -@@ -55,7 +55,7 @@ - }; - - struct xwl_device_formats { -- drmDevice *drm_dev; -+ // drmDevice *drm_dev; - int supports_scanout; - uint32_t num_formats; - struct xwl_format *formats; -@@ -75,7 +75,7 @@ - struct xwl_dmabuf_feedback { - struct zwp_linux_dmabuf_feedback_v1 *dmabuf_feedback; - struct xwl_format_table format_table; -- drmDevice *main_dev; -+ // drmDevice *main_dev; - /* - * This will be filled in during wl events and copied to - * dev_formats on dmabuf_feedback.tranche_done -diff -ruwN source/os/access.c source-new/os/access.c ---- source/os/access.c 2024-01-16 16:38:49.000000000 +0700 -+++ source-new/os/access.c 2025-10-01 07:22:43.931644468 +0700 -@@ -446,7 +446,7 @@ - int family; - register HOST *host; - --#ifndef WIN32 -+#if !defined(WIN32) && !defined(__redox__) - struct utsname name; - #else - struct { -@@ -477,7 +477,7 @@ - * uname() lets me access to the whole string (it smashes release, you - * see), whereas gethostname() kindly truncates it for me. - */ --#ifndef WIN32 -+#if !defined(WIN32) && !defined(__redox__) - uname(&name); - #else - gethostname(name.nodename, sizeof(name.nodename)); diff --git a/scripts/lint-config-paths.sh b/scripts/lint-config-paths.sh index 1262179eb2..906cbf8392 100755 --- a/scripts/lint-config-paths.sh +++ b/scripts/lint-config-paths.sh @@ -73,7 +73,7 @@ done if [ $violations -gt 0 ]; then echo "FAILED: $violations init service path violation(s) found." >&2 echo "Config [[files]] entries must use /etc/init.d/ not /usr/lib/init.d/" >&2 - echo "See: local/docs/BUILD-SYSTEM-HARDENING-PLAN.md Phase 1" >&2 + echo "See: local/docs/legacy-obsolete-2026-07-25/BUILD-SYSTEM-HARDENING-PLAN.md Phase 1" >&2 exit 1 else echo "OK: No init service path violations in config files."