diff --git a/bin/x86_64-unknown-redox-cpp b/bin/x86_64-unknown-redox-cpp new file mode 100755 index 0000000000..9dc723de47 --- /dev/null +++ b/bin/x86_64-unknown-redox-cpp @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail + +script_dir="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" +exec "${script_dir}/redbear-run-tool" "$(basename "$0")" "$@" diff --git a/bin/x86_64-unknown-redox-g++ b/bin/x86_64-unknown-redox-g++ new file mode 100755 index 0000000000..9dc723de47 --- /dev/null +++ b/bin/x86_64-unknown-redox-g++ @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail + +script_dir="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" +exec "${script_dir}/redbear-run-tool" "$(basename "$0")" "$@" diff --git a/bin/x86_64-unknown-redox-gcc-ar b/bin/x86_64-unknown-redox-gcc-ar new file mode 100755 index 0000000000..9dc723de47 --- /dev/null +++ b/bin/x86_64-unknown-redox-gcc-ar @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail + +script_dir="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" +exec "${script_dir}/redbear-run-tool" "$(basename "$0")" "$@" diff --git a/bin/x86_64-unknown-redox-gcc-ranlib b/bin/x86_64-unknown-redox-gcc-ranlib new file mode 100755 index 0000000000..9dc723de47 --- /dev/null +++ b/bin/x86_64-unknown-redox-gcc-ranlib @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail + +script_dir="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)" +exec "${script_dir}/redbear-run-tool" "$(basename "$0")" "$@" diff --git a/local/docs/3D-DESKTOP-COMPREHENSIVE-PLAN.md b/local/docs/3D-DESKTOP-COMPREHENSIVE-PLAN.md new file mode 100644 index 0000000000..ef56c51c8d --- /dev/null +++ b/local/docs/3D-DESKTOP-COMPREHENSIVE-PLAN.md @@ -0,0 +1,1140 @@ +# Red Bear OS — 3D Drivers & 3D Desktop Comprehensive Assessment and Plan + +> **Operating principle** (from `local/docs/3D-DRIVER-PLAN.md` §10, the validation bar for this entire +> subsystem): +> +> *Code presence is not support. Build success is not support. A kernel-side driver is not +> support. A Mesa recipe string is not support. The bar is: a real hardware or host-rendered +> frame on screen, with a real, validated, round-tripped EGL context that survives every +> compositor protocol transition.* + +--- + +## 0. Document map + +**Version:** 1.0 (2026-07-27) +**Scope:** comprehensive audit + remediation plan for the 3D driver + 3D desktop stack: +low-level GPU drivers → Mesa → Wayland → SDDM → full KDE Plasma 6. +**Audience:** operator evaluating the state of the 3D pipeline; engineer picking a next task. + +### What this document does + +1. Reports ground truth for each layer (drivers, Mesa, Wayland, SDDM, KDE, boot, configs, scripts, docs). +2. Lists hard blockers, bad patterns, stubs/shims, and missing primitives — all with `file:line`. +3. Provides three ordered execution paths: software-rendered boot→Plasma; hardware-accelerated + Mesa; Mesa→KDE as a real compositing WM. +4. Lists every doc deletion candidate in §10 (with backup tarball) and every script deletion + candidate in §11. +5. Acts as the single audit of record — companion plans cross-reference it; this is the + authoritative assessment. + +### What this document does not do + +- It does not contain the desktop journey/phases (those live in `CONSOLE-TO-KDE-DESKTOP-PLAN.md`). +- It does not duplicate D-Bus service maps (`DBUS-INTEGRATION-PLAN.md`). +- It does not duplicate the null+8 root-cause analysis (`QT6-WAYLAND-NULL8-DIAGNOSIS.md`). +- It does not duplicate per-subsystem plans (ACPI, USB, Wi-Fi, Bluetooth, networking, + driver-manager, init-namespace-manager, kernel-IPC, input-stack, build-system). + +### Supersession + +**This document replaces and supersedes:** +- `local/docs/3D-DRIVER-PLAN.md` (Rounds 1–7 of Mesa/virgl/i915/amdgpu) — Round-7 work is + fact-of-record in this document; operating rule is restated. +- `local/docs/REDBEAR-FULL-SDDM-BRINGUP.md` (build campaign log) — milestone status is + captured here. +- `local/docs/legacy-obsolete-2026-07-25/WAYLAND-IMPLEMENTATION-PLAN.md` (historical). +- `local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md` (historical). +- `local/docs/legacy-obsolete-2026-07-25/05-KDE-PLASMA-ON-REDOX.md` (historical; pre-KF6). +- `local/docs/archived/STUBS-FIX-PROGRESS.md` (the campaign that converted + libepoxy / libdisplay-info / libxcvt / lcms2 from "lying" stubs to real implementations). + +**This document does NOT supersede** (companions stay separate): +- `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` — desktop journey/phase tracker; cross-references. +- `local/docs/DBUS-INTEGRATION-PLAN.md` — D-Bus architecture + service inventory. +- `local/docs/QT6-WAYLAND-NULL8-DIAGNOSIS.md` — null+8 root-cause static analysis. +- `local/docs/INPUT-STACK-LINUX-ALIGNMENT-PLAN.md`, `KERNEL-IPC-CREDENTIAL-PLAN.md`, + `ACPI-IMPROVEMENT-PLAN.md`, `USB-IMPLEMENTATION-PLAN.md`, `WIFI-IMPLEMENTATION-PLAN.md`, + `BLUETOOTH-IMPLEMENTATION-PLAN.md`, `NETWORKING-IMPROVEMENT-PLAN.md`, + `DRIVER-MANAGER.md`, `INIT-NAMESPACE-MANAGER-SCALABILITY-PLAN.md`, + `LG-GRAM-16Z90TP-COMPATIBILITY-PLAN.md`, `HARDWARE-NETWORKING-INVENTORY.md`, + `HARDWARE-VALIDATION-MATRIX.md`, `FIREWALL-VALIDATION-LOG.md`, + `BUILD-SYSTEM-INVARIANTS.md`, `BUILD-CACHE-PLAN.md`, `PACKAGE-BUILD-QUIRKS.md`, + `QUIRKS-SYSTEM.md`, `QUIRKS-AUDIT.md`, `QUIRKS-IMPROVEMENT-PLAN.md`, + `LOCAL-FORK-SUPREMACY-POLICY.md`, `PATCH-GOVERNANCE.md`, `RELEASE-BUMP-WORKFLOW.md`, + `SCRIPT-BEHAVIOR-MATRIX.md`, `RATATUI-APP-PATTERNS.md`, `CUB-PACKAGE-MANAGER.md`, + `CUB-MIGRATION`, `GRUB-INTEGRATION-PLAN.md`, `COLLISION-DETECTION-STATUS.md`, + `USB-VALIDATION-RUNBOOK.md`, `GREETER-LOGIN-IMPLEMENTATION-PLAN.md` (greeter design). + +--- + +## 1. Inventory & Status by Layer + +### 1.1 Boot → userspace → compositor + +The kernel registers **exactly 11 global schemes** (`local/sources/syscall/src/data.rs:481-493`): +`debug:`, `event:`, `memory:`, `pipe:`, `serio:`, `irq:`, `time:`, `sys:`, `proc:`, +`kernel.acpi:`, `kernel.dtb:`. **There is no kernel-side DRM, framebuffer, USB, PCI, input, or +display scheme.** All graphics/PCI/USB/input/acpi/firmware/drm/audio schemes are userspace +daemons. This is by microkernel design. + +Userspace scheme daemons on `redbear-full` boot: + +| Scheme | Daemon | Phase | Source | +|--------|--------|-------|--------| +| `display.vesa` | `vesad` | initfs | `local/sources/base/drivers/graphics/vesad/src/main.rs:87` | +| `fbcon` | `fbcond` | initfs | `local/sources/base/drivers/graphics/fbcond/src/main.rs` | +| `fbbootlog` | `fbbootlogd` | initfs | `local/sources/base/init.initfs.d/20_fbbootlogd.service` | +| `drm` | `redox-drm` | initfs (x86 only) | `local/recipes/gpu/redox-drm/source/src/main.rs:130` | +| `pci` | `pcid` | initfs | `local/sources/base/drivers/pcid/src/main.rs:352` | +| `input` | `inputd` | initfs | `local/sources/base/init.initfs.d/10_inputd.service` | +| `firmware` | `firmware-loader` | userspace | `local/recipes/system/firmware-loader/source/src/main.rs` | +| `login1` | `redbear-sessiond` | userspace | `local/recipes/system/redbear-sessiond/source/src/main.rs` | +| `seatd` | `seatd` | userspace | `local/recipes/system/seatd/` | +| `system-bus` | `dbus-daemon` | userspace | `recipes/system/dbus/` | + +**Boot ordering** (`local/sources/base/init/src/main.rs`): +bootloader (UEFI x86_64) → kernel → bootstrap → init (PID 1, two-phase) → initfs target → +switchroot to `/usr` → userspace phase → SDDM at `21_sddm.service`. + +The full boot-to-Wayland graph terminates at the **Qt6 Wayland null+8 crash** in +`wl_proxy_add_listener()`. Text console on VT2 via `30_console.service` (`getty 2`) is the +**only functional endpoint today**. SDDM starts, but the greeter QML window does not render. + +### 1.2 Driver stack (redox-drm · amdgpu · linux-kpi · firmware-loader · redox-driver-sys) + +| Crate | LOC | Status | Role | Source | +|-------|-----|--------|------|--------| +| **redox-driver-sys** | 6,866 | **Functional** | Safe Rust FFI for `scheme:memory`, `scheme:irq`, `scheme:pci`, `scheme:iommu`; PCI/USB/xHCI/DMI/ACPI quirks system | `local/recipes/drivers/redox-driver-sys/source/src/{lib.rs,memory.rs,irq.rs,pci.rs,quirks/}` | +| **linux-kpi** | 8,867 + 43 C headers | **Functional for GPU/Wi-Fi; the 3 deprecated surface modules are `drm_shim` runtime helpers** | Rust+ C shim that translates Linux kernel API (`pci_*`, `dma_*`, `ioremap`, `request_irq`, `msi_*`, `drm_*`) to redox-driver-sys | `local/recipes/drivers/linux-kpi/source/src/{rust_impl/,c_headers/}` | +| **firmware-loader** | 2,313 | **Functional** | `scheme:firmware` daemon; reads blobs from `/lib/firmware/`; in-memory cache | `local/recipes/system/firmware-loader/source/src/{main.rs,blob.rs,scheme.rs}` | +| **redox-drm** | 15,478 | **Structural-complete, runtime-unproven** | Userspace `scheme:drm` daemon (kernel has **zero** DRM code); 60+ DRM ioctls, AMD+Intel+VirtIO drivers, PRIME | `local/recipes/gpu/redox-drm/source/src/scheme.rs:1591-2737` | +| **amdgpu** | 1,692 C (3 files) | **Skeleton** | Stages 2/3/4 deliberately empty (`recipe.toml:82,101,125`); only `amdgpu_redox_main.c` + `redox_stubs.c` + `redox_glue.h` compile. **Imported Linux AMD DC tree at `local/recipes/gpu/amdgpu-source/` is NOT in default retained build path** | `local/recipes/gpu/amdgpu/recipe.toml:5-9,77-86` | + +**redox-drm ioctl coverage** (per `local/recipes/gpu/redox-drm/source/src/scheme.rs`): + +| Family | Count | Status | +|--------|-------|--------| +| KMS base (`GETRESOURCES`, `GETCONNECTOR`, `SETCRTC`, `GETCRTC`, `ADDFB`, `RMFB`, `PAGE_FLIP`) | 8/8 | PRESENT | +| Dumb buffers (`CREATE_DUMB`, `MAP_DUMB`, `DESTROY_DUMB`) | 3/3 | PRESENT | +| GEM (`GEM_CREATE`, `GEM_CLOSE`, `GEM_MMAP`) | 3/3 | PRESENT | +| PRIME (`PRIME_HANDLE_TO_FD`, `PRIME_FD_TO_HANDLE`) | 2/2 | TOKEN (not POSIX fd; cross-process DMA-BUF not real) | +| i915 UAPI (namespace 0x70-0x7F) | 16/16 | PRESENT (incl. `GEM_VM_BIND` per Round 7) | +| amdgpu UAPI (namespace 0x90-0x97) | 8/8 | PRESENT (incl. `GEM_CREATE`, `CTX`, `CS`, `VM`, `BO_LIST`, `WAIT_FENCES`, `INFO`, `FENCE_TO_HANDLE`) | +| Redox private (`CS_SUBMIT`, `CS_WAIT`, `SCANOUT_FLIP`, `FENCE_EVENTFD`, `CREATE_CONTEXT`, `DESTROY_CONTEXT`, `AMD_SDMA_*`) | 8/8 | PRESENT | +| VirtIO GPU (namespace 0x01-0x0B) | 11/11 | PRESENT | +| `SYNCOBJ_*` | 0/5 | **MISSING** (Mesa EGL Wayland swapchain needs these; `FENCE_EVENTFD` substitutes for what Mesa calls) | +| `DRM_CLIENT_CAP_ATOMIC` (`ATOMIC_*` ioctls) | — | **REJECTED with EOPNOTSUPP** (`scheme.rs:1969-1988`) | +| `DRM_CLIENT_CAP_UNIVERSAL_PLANES` | — | REJECTED (`scheme.rs:1976-1987`) | +| `DRM_GET_PROPERTY` / `SET_PROPERTY` | — | MISSING (KMS property API) | + +**redox-driver-sys quirks table** (`src/quirks/pci_table.rs:15-92`): 12 compiled-in PCI entries +covering: AMDGPU class, Navi10/21/32, early Intel GPUs, Intel Wi-Fi 6E (2725/51F0), AMD chipsets +(145C/1639/1483). 26 PCI quirk flag bits. Plus 51 xHCI USB entries (mirroring Linux 7.1). +Plus ACPI and DMI quirk tables. **All consumed via `pci_has_quirk()` FFI** in +amdgpu `redox_stubs.c:771`. + +**linux-kpi as a wrapped-surface** (sub-rating): + +| Subsystem | Implementation | +|-----------|---------------| +| `pci_*`, `dma_*`, `ioremap`, `request_irq`, `msix_*`, `fw_*` | **REAL** — backed by Redox schemes | +| `wait`, `completion`, `mutex`, `spinlock`, `atomic_*` | REAL via Rust atomics + spin-loop | +| `timer`, `workqueue` | REAL | +| `drm_crtc_handle_vblank` | **NO-OP, returns 0** — vblank not signalled (`drm_shim.rs:714`). **HIGH risk: KWin stalls at first page flip.** | +| `drm_connector_register` | userspace no-op (`drm_shim.rs:708-711`). **MEDIUM risk: monitor hotplug dead.** | +| `drm_mode_config_reset` | calls `drm_ioctl(dev, GETRESOURCES, NULL, NULL)` — fails with EINVAL (`drm_shim.rs:703-704`). **HIGH risk: stale connector/CRTC list.** | +| `drm_dev_register` | returns 0 always (`drm_shim.rs:437-439`). **LOW risk: silent success.** | + +### 1.3 Mesa 26.1.4 + +| Path | Status | Source | +|------|--------|--------| +| `local/recipes/libs/mesa/source/src/egl/drivers/dri2/platform_redox.c` (332 lines) | **BUILT** (HW probe → kopper; SW fallback → swrast; window/pbuffer surfaces; image lifecycle) | `platform_redox.c:226-332` | +| `local/recipes/libs/mesa/source/src/gallium/winsys/redox/drm/` (10 files, 1,432 lines) | **BUILT-BUT-INCOMPLETE** — bidirectional CS seqno fixed (Round 7 patch 26); multi-context CS requires kernel ABI extension (`winsys.h:31`) | `redox_drm_cs.h:11`, `redox_drm_surface.h:29` | +| `local/recipes/libs/mesa/source/src/gbm/backends/dri/gbm_dri.c` | **BUILT** + dumb-BO PRIME export patched (patch 02) | `gbm_dri.c:578-663 (patched)` | +| `local/recipes/libs/mesa/source/src/egl/drivers/dri2/platform_wayland.c` | **BUILT** (upstream EGL Wayland platform, present and compiled) | upstream | +| GLES1/2/3 | ENABLED via auto-detect | recipe `-Degl=enabled -Dgbm=enabled` | +| llvmpipe (x86_64) | ENABLED but **never reached a completed link**; LLVM JIT compile path | recipe `-Dgallium-drivers=softpipe,llvmpipe,...` | +| OSMesa | **NOT BUILT** — `-Dosmesa` dropped upstream in Mesa 26.x | `recipe.toml:119` | +| `pipe_loader_redox.c` (177 lines) | BUILT — currently returns only "swrast" at runtime | `pipe_loader_redox.c:12-14` | + +**Mesa build status (THE single fact that matters most):** Per `local/docs/3D-DRIVER-PLAN.md` +§1.4 — *"Build status — NEVER COMPLETED"*. Meson configured OK (`build.ninja` 5.3 MB + +`compile_commands.json` exist; `-DHAVE_REDOX_PLATFORM` is in compile flags), but **no shared +libraries** in sysroot (`libEGL.so`, `libGL.so`, `libgallium*.so` are absent). Root cause is +unknown until a fresh `./local/scripts/build-redbear.sh redbear-full` is run. + +**Active Mesa patches** (`local/patches/mesa/`): + +| Patch | Size | Wired | Purpose | +|-------|------|-------|---------| +| `01-virgl-redox-disk-cache.patch` | 25 | ✅ | Disables virgl disk cache (no `dl_iterate_phdr` on Redox) | +| `02-gbm-dumb-prime-export.patch` | 32 | ✅ | Adds `drmPrimeHandleToFD` fallback for dumb BOs | +| `04-sys-ioccom-stub-header.patch` | 82 | ✅ | Compile-time macro shim — pure fixed-point math | +| `05-vk-sync-wchar-include.patch` | 34 | ✅ | Adds `#include ` to `vk_sync.h` | +| `08-meson-redox-kms-drm.patch` | 20 | ✅ | Adds `redox` to `system_has_kms_drm` and `_GNU_SOURCE` platforms | +| `26-cs-submit-bidirectional-seqno.patch` | 135 | ✅ | Bidirectional CS submit (kernel returns global seqno) | +| `03-platform-redox-gpu-probe.patch` | 240 | ❌ ORPHANED | Target `platform_redox.c` rewritten for Mesa 26.1.4 — original deleted | +| `06-redox-surface-image-fields.patch` | 13 | ❌ ORPHANED | Same — EGL image lifecycle now done differently | +| `07-wayland-scanner-env-override.patch` | 40 | ❌ ORPHANED | Worked around via recipe copying host scanner (lines 75-77) | +| `P4-virgl-redox-disk-cache.patch` | dup | ❌ ORPHANED | Duplicate of patch 01 | +| `26.1.4-defer-redox-platform.patch` | doc | ❌ ORPHANED | Records that platform file was recreated from scratch | + +**Mesa downstream kernel-side requirements that are NOT met today**: + +| Mesa primitive | Required | Redox reality | +|----------------|----------|--------------| +| Multi-context command submission | Kernel exposes per-context CS submit | Single-global CS in `redox-drm`; multi-context needs kernel ABI extension (`redox_drm_cs.h:11`) | +| Syncobj (`DRM_IOCTL_SYNCOBJ_*`) | Kernel dma-fence object | `REDOX_FENCE_EVENTFD` substitutes — but Mesa EGL Wayland expects syncobj ioctls; needs Mesa patch to translate | +| DMA-BUF export (real POSIX fd passing) | Kernel `dma_buf` subsystem with stable fd across processes | Token-based fake; sufficient within `redox-drm` process, breaks cross-process GPU sharing | +| Hardware vblank interrupt | Kernel IRQ + DRM event queue | Polled with 16 ms timeout — works, low efficiency | +| Hardware cursor plane | DRM universal-planes API | `DRM_CLIENT_CAP_UNIVERSAL_PLANES` rejected — no HW cursor | +| Atomic modesetting | `DRM_CLIENT_CAP_ATOMIC` | Rejected with `EOPNOTSUPP` — KWin + amdgpu DC require atomic commits | + +### 1.4 Wayland & Compositors + +**libwayland 1.25.0** (`recipes/wayland/libwayland/recipe.toml` + `local/patches/libwayland/redox.patch`): +compiles, ships `libwayland-client.so`, `libwayland-server.so`, `libwayland-cursor.so`, +`libwayland-egl.so`. Redox patch (101 lines) adds **null-proxy guards** (the fix for the Qt6 +Wayland null+8 crash) + a cross-compile scanner override. + +**wayland-protocols 1.49** (`recipes/wayland/wayland-protocols/recipe.toml`): 65 XMLs. +Plus `plasma-wayland-protocols`: 30 XMLs. **Total: 95 protocol XMLs produced.** + +**Compositor inventory**: + +| Compositor | Status | Source | +|------------|--------|--------| +| **redbear-compositor** | **BUILDS**, bound to `scheme:drm/card0` (DRM/KMS) or VESA fallback. ~7,013 LOC Rust. 36+ Wayland globals implemented. `WL_KEYBOARD_KEYMAP_FORMAT_NO_KEYMAP` advertised (no real XKB keymap). | `local/recipes/wayland/redbear-compositor/source/src/main.rs` | +| **KWin 6.7.2** | **BUILDS** (`local/recipes/kde/kwin/recipe.toml`). NO Redox platform plugin. No input backend (libinput → `/dev/input/event*`). No real DRM backend (talks Linux DRM master). **Cannot run.** | same | +| cosmic-comp, smallvil, wlroots, sway, hyprland, niri, pinnacle, anvil, fht-compositor, wayland-rs, waylandpp, wayland-utils | Recipe exists; **`#TODO not compiled or tested`** for 12 of 20. Smoke test only (winit-wayland, iced-wayland, softbuffer-wayland examples). | `recipes/wip/wayland/*/recipe.toml` | +| xwayland, qt6-wayland-smoke | Recipe exists; partial patches applied | `recipes/wip/wayland/*/recipe.toml` | + +**Patches inventory** (`local/patches/`): +- `libwayland/redox.patch` (101 lines) — null guards + cross-compile scanner +- `mesa/07-wayland-scanner-env-override.patch` (40, **ORPHANED** — recipe uses host scanner copy) +- `qtbase/qtwaylandscanner-null-guard-listeners.patch` (41, applied) + `qtbase/qtwayland-empty-cursor-guards.patch` (71, applied) +- `kf6-kwayland/01-initial-migration.patch` (23, applied) +- `wlroots/redox.patch` (29 lines, **NOT APPLIED to a built wlroots**) + +**Stubs in redbear-compositor**: +- `WL_KEYBOARD_KEYMAP_FORMAT_NO_KEYMAP` (`main.rs:930`) — clients cannot map keycodes to keysyms. + Keymap delivery via `redbear-keymapd` is the proper fix; redbear-keymapd is in redbear-full + but `redbear-compositor` does not currently call it. +- `main.rs:2` comment: *"Replaces the KWin stub that previously created a placeholder socket."* +- SHM fd passing uses payload bytes (not `SCM_RIGHTS`) per `CONSOLE-TO-KDE §3.1` — Qt client may + reject the wire format. (Round 7 added `SCM_RIGHTS` per `3D-DRIVER-PLAN` §8 but verification + is partial.) + +### 1.5 SDDM & Auth (PAM/logind/seatd) + +**SDDM**: builds (`local/recipes/kde/sddm/`), Wayland-only via patches applied with +`wayland-patch.sh`. Two patches: +- `redox-virtualterminal-stub.patch` — `SDDM::VirtualTerminal` is no-op (no Linux VT subsystem) +- `redox-helper-utmpx-stub.patch` — `utmpLogin`/`utmpLogout` no-op (no utmp/utmpx on Redox) + +**PAM** (`pam-redbear`): real Rust cdylib `libpam.so.0.2.3`; full 31-return-code PAM ABI; +proxies to `redbear-authd` over `/run/redbear-authd.sock`. PAM configs staged: +`sddm`, `sddm-greeter`, `sddm-autologin`, `sddm-helper`. + +**logind compat** (`redbear-sessiond`): implements `org.freedesktop.login1.{Manager,Seat,Session}` +via `zbus`. `SDDM::LogindDBusTypes.cpp:49-73` probes `org.freedesktop.login1` first, then +`org.freedesktop.ConsoleKit`. If neither, falls back to single-seat (`SeatManager.cpp:97-100`). +Missing minor items: `Seat.CanGraphical` property, `SeatNew` / `SeatRemoved` signals — masked +by fallback. + +**seatd**: compiled and wired. SDDM does not use seatd directly; it uses the logind seat +abstraction. (`local/recipes/system/seatd/recipe.toml:12` carries a TODO note that may now be +stale; the seat works.) + +**SDDM hard blockers vs Redox surface** (none fatal, all masked by fallback): + +| Requirement | Red Bear | Gap | +|-------------|----------|-----| +| PAM | ✅ `pam-redbear` | None | +| logind | ✅ `redbear-sessiond` | CanGraphical + SeatNew signals missing — masked by single-seat fallback | +| VT subsystem | Stubbed | Real `inputd -A N` for switching | +| utmpx | Stubbed | No-op | +| D-Bus system bus | ✅ `dbus-daemon 1.16.x` | None | +| D-Bus session bus | ✅ `redbear-kde-session` launches via `dbus-launch --sh-syntax` | None | +| Wayland sessions | `kde-wayland.desktop`, `redbear-wayland.desktop` | None | +| Compositor | `redbear-compositor --drm` | **Qt6 Wayland null+8 crash** blocks QML greeter | +| DRM device | `KWIN_DRM_DEVICES=/scheme/drm/card0` + `18_dri-symlinks.service` (`/dev/dri/renderD128`) | None | + +**Real status (today, 2026-07-27):** SDDM greeter stack **compiles**. The greeter runs on +`redbear-compositor`, NOT KWin. KWin is **post-login**, deferred with `# GREETER-DEFER` +markers in `config/redbear-full.toml`. **Open work is runtime display validation in QEMU +(seeing the SDDM/greeter prompt on the framebuffer), NOT compilation.** + +The dominant runtime blocker is **Qt6 Wayland null+8**, analyzed in +`QT6-WAYLAND-NULL8-DIAGNOSIS.md`. The diagnostic + patch-merged path is: +`wl_proxy_add_listener(NULL, ...)` segfaults when the compositor returns a NULL proxy for an +unsupported protocol. Fix is committed in libwayland `redox.patch` (null guards on all +`wl_proxy_*` / `wl_resource_*` entry points) and qtwaylandscanner (null-guard listeners). +**Authoring is done; runtime validation is the gap.** + +### 1.6 KDE Plasma 6 & KF6 + +| Group | Count | Status | +|-------|-------|--------| +| KF6 frameworks | 47 (in `local/recipes/kde/kf6-*`) + 1 kirigami | All compile. AGENTS.md claim "KF6 32/32" is stale (current 47). | +| Plasma packages | 4 (`plasma-framework`, `plasma-workspace`, `plasma-desktop`, `plasma-wayland-protocols`) | All compile. | +| Window decoration | `kdecoration`, `breeze` | Compile. | +| Compositor/WM | `kwin` 6.7.2 | **Compiles** (Round 7 — resolved cmake `Qt6Core5Compat` blocker). | +| Daemons | `kglobalacceld` | Compile. | +| DM | `sddm` | Compile. | +| Apps | `konsole`, `kde-cli-tools` | Compile. | +| **Total in `local/recipes/kde/`** | **58** | All compile. | + +**KF6 modules ABSENT — these are explicit runtime blockers** (per `recipes/wip/AGENTS.md` and +the upstream Plasma 6 dependency graph): + +| Module | Required by | Impact if missing | +|--------|-------------|-------------------| +| **kf6-krunner** | `plasma-workspace` | plasmashell cannot embed KRunner; launcher crashes | +| **kf6-threadweaver** | `kf6-kio`, `kf6-knewstuff`, `kf6-kauth`, `kf6-kio` | Thread pool used by KIO workers; serialization errors at runtime | +| **kf6-frameworkintegration** | `plasma-workspace` (style/font integration) | KDE style/font integration missing | +| `kf6-kfilemetadata` / `kf6-baloo` | dolphin, krunner | File metadata + search broken | +| `kf6-purpose` | `plasma-workspace` | Share-menu absent | +| `kf6-calendarcore` / `kf6-kholidays` / `kf6-syndication` | plasma-workspace widgets | Calendar/RSS data absent | + +**Plasma applets/applications ABSENT**: + +| Module | Impact | +|--------|--------| +| `plasma-nm` | No network-manager applet | +| `plasma-pa` | No audio-volume applet (PipeWire is wired, no applet) | +| `plasma-thunderbolt` / `plasma-disks` / `plasma-systemmonitor` | No device management widgets | +| `plasma-kdeconnect` | Phone integration absent | +| `polkit-kde-agent-1` | **No auth dialog** for privileged actions | +| `xdg-desktop-portal-kde` | **No portal support** for Screenshot/ScreenCast/file-chooser | +| `powerdevil` | No power-management daemon | +| `systemsettings` | No KDE Settings | +| `libksysguard` | No system monitor backend | + +**Runtime dependencies ABSENT**: + +| Library | Impact | +|---------|--------| +| `harfbuzz` | Font shaping — Qt6 text rendering quality degradation | +| `libxcursor` | Cursor theme loading — but Wayland uses `wl_cursor`, low impact | +| `librsvg` | SVG icon rendering for some themes — kf6-ksvg may cover partially | +| `gsettings-desktop-schemas` | No GSettings/dconf — KDE uses KConfig, low impact | +| `accountsservice` | No user account list for SDDM — SDDM falls back to `/etc/passwd` reading | + +**D-Bus activation files MISSING** for KDE session daemons +(per `local/docs/DBUS-INTEGRATION-PLAN.md`): `org.kde.kded6`, `org.kde.kglobalaccel`, +`org.kde.ksmserver`, `org.kde.ActivityManager`, `org.kde.JobViewServer`, +`org.kde.plasmashell`. KWin self-registers. **Intentionally absent** — re-add only after +binary proof in guest. + +**`redbear-statusnotifierwatcher`** (system tray): built but **NOT in any redbear-* config**. +Activation file staged but the binary is not in the live ISO. Fix: add to +`config/redbear-full.toml` `[packages]`. + +**KWin 6.7.2 cmake flags** (`kwin/recipe.toml:88-104`): +- `KWIN_BUILD_X11=OFF`, `KWIN_BUILD_SCREENLOCKER=OFF` +- `KWIN_BUILD_KCMS=ON`, `KWIN_BUILD_TABBOX=ON`, `KWIN_BUILD_GLOBALSHORTCUTS=ON`, + `KWIN_BUILD_RUNNERS=ON`, `KWIN_BUILD_NOTIFICATIONS=ON` +- `ECMQmlModule` disabled via sed (line 66): `include(ECMQmlModule)` → `#include(ECMQmlModule)` +- `UiTools` removed from CMakeLists (line 69) +- QML effects disabled (ECMQmlModule removed) + +**TODO/FIXME pattern in KDE recipes**: A pervasive `BUILD_WITH_QML=OFF` / +`ECMQmlModule disabled` pattern across `plasma-framework`, `kwin`, `kirigami`, +`kf6-knewstuff`, `kf6-kio`, `kf6-prison`. This is a **compile-time workaround** for the +Qt6 Wayland null+8 crash — QML is blocked because QML windows crash in +`wl_proxy_add_listener`. Once null+8 is runtime-validated, this can be reverted. + +### 1.7 Boot → userspace → compositor + +Full ordered boot sequence is captured in `boot-to-compositor-audit` (agent +`bg_aff9ad7c`). Key nodes: + +``` +bootloader (UEFI x86_64; sets FRAMEBUFFER_* + RSDP_* + kernel env) + → kernel (microkernel; 11 global schemes) + → bootstrap → init (PID 1) + → INITFS phase: + logd → runtime.target → inputd → vesad (display.vesa) → fbcond (fbcon/VTs) + → fbbootlogd → redox-drm (drm/card0) → pcid → hwd → acpid + → driver-manager-initfs → redoxfs (rootfs mount) + → SWITCHROOT to /usr + → USERSPACE phase: + base.target (ipcd, ptyd, driver-manager --hotplug) + → smolnetd → dhcpd → evdevd → dbus-daemon + → seatd → redbear-sessiond → redbear-authd → DRI symlinks + → SDDM → redbear-compositor → sddm-greeter-qt6 + ★ BLOCKED ★ Qt6 Wayland null+8 crash + ▼ FALLBACK ▼ 30_console.service (getty 2) — TEXT LOGIN on VT2 +``` + +**Specific blockers** (with file:line): + +| # | Blocker | Evidence | +|---|---------|----------| +| 1 | **Qt6 Wayland null+8 crash** | `CONSOLE-TO-KDE §3.1`; `wl_proxy_add_listener` segfaults; null-guard patches committed, **never runtime-validated in isolation** | +| 2 | **redox-drm hardware validation** | `CONSOLE-TO-KDE §2`; QEMU has booted, **AMD/Intel bare-metal never tested** | +| 3 | **`redbear-statusnotifierwatcher` not wired** | `DBUS-INTEGRATION-PLAN.md F5:196`; built but omitted from config | +| 4 | **amdgpu CS seqno multi-context** | `redox_drm_cs.h:11` requires kernel ABI extension | +| 5 | **drm_crtc_handle_vblank returns 0** | `drm_shim.rs:714`; first page-flip stalls KWin | +| 6 | **`drm_mode_config_reset` ioctl with NULL data** | `drm_shim.rs:703-704`; null-pointer ioctl → stale connector list | +| 7 | **KWin has no Redox platform plugin** | `recipes/kde/kwin/recipe.toml` builds upstream code with no platform plugin replacement | +| 8 | **Atomic mode-setting rejected** | `redox-drm scheme.rs:1969-1988` → `EOPNOTSUPP` | +| 9 | **`DRM_CLIENT_CAP_UNIVERSAL_PLANES` rejected** | `redox-drm scheme.rs:1976-1987` → `EOPNOTSUPP` | +| 10 | **`memfd_create` absent in relibc** | Per Mesa audit; affects PipeWire + Mesa disk-cache fallback (already disabled) | +| 11 | **DMABUF export is token, not POSIX fd** | `redox-drm scheme.rs:2391-2458`; cross-process GPU sharing broken | +| 12 | **PRIME cross-process GPU sharing broken** | Same; only within `redox-drm` process boundary | + +### 1.8 Build configurations & scripts + +**Build configurations** (`config/`): + +| Config | Lines | Status | Used by `build-redbear.sh` | +|--------|-------|--------|--------------------------| +| `redbear-full.toml` | 918 | **ACTIVE** — desktop/graphics; 10 package groups + ~100 explicit packages + 28 graphics/desktop `[[files]]` | ✅ | +| `redbear-mini.toml` | 633 | **ACTIVE** — text-only with overridden init services | ✅ | +| `redbear-grub.toml` | 16 | **ACTIVE** — adds `grub = {}` + bootloader=grub | ✅ | +| `redbear-bare.toml` | (small) | **ACTIVE** — stripped kernel+zsh login | ✅ | +| `redbear-wifi-experimental.toml` | — | **BROKEN** — typo `redbear-minimal.toml` should be `redbear-mini.toml` at line 9 | ❌ never wired | +| `redbear-bluetooth-experimental.toml` | — | **BROKEN** — same typo at line 10 | ❌ never wired | +| `desktop.toml`, `desktop-minimal.toml`, `wayland.toml`, `x11.toml`, `dev.toml` | various | **DEAD** — never referenced by any redbear config; `wayland.toml` + `desktop-minimal.toml` contain `/usr/lib/init.d/` init path violations | ❌ | +| `redoxer.toml`, `redoxer-gui.toml`, `acid.toml`, `auto-test.toml`, `os-test.toml`, `tests.toml`, `sys-build.toml` | various | **DEAD** — Redoxer/CI tooling inherited from upstream; not Red Bear | ❌ | +| `aarch64/`, `i586/`, `riscv64gc/` and subdirs | ~20 files | **DEAD** — Red Bear is x86_64 only | ❌ | +| `protected-recipes.toml` | — | **NOT a build config** — read by `src/cook/fetch.rs` (data only) | — | + +**Massive duplication**: `redbear-device-services.toml` (1,137 lines) contains the **same 4 +firmware fallback configs repeated ~14 times** (`00-amdgpu.toml`, `10-iwlwifi.toml`, +`20-intel-dmc.toml`, plus an unnamed class). Estimated ~900 redundant lines. Fix: dedupe to +~200 lines. + +**Lint state**: `bash scripts/lint-config-paths.sh` passes for all `redbear-*.toml`. The +script only checks `redbear-*` configs — dead upstream configs are not linted, but they're +not in any redbear-include chain either. + +**Build scripts** (`local/scripts/`): 174 entries. Classification per `bg_3239014a` audit: + +| Category | Count | Examples | +|----------|-------|----------| +| **DEAD (self-declared)** | 2 | `bump-fork.sh` (DEPRECATED 2026-07-18, guarded by `REDBEAR_I_KNOW_BUMP_FORK_IS_DEPRECATED=1`); `sync-upstream.sh` (RETIRED, prints msg + exits) | +| **OBSOLETE-TOOLING (one-time KF6 migrations)** | 5 | `edit-kf6-recipes-for-patches.sh`, `migrate-kf6-seds-direct.sh`, `migrate-kf6-seds-to-patches.sh`, `cleanup-kf6-noop-seds.sh`, `cleanup-kf6-noop-seds-targeted.sh` — mission complete in 6.27.0 bump cycle | +| **DUPLICATE / overlap** | 3 | `validate-patches.sh` ↔ `verify-patches.sh` (~50% overlap); `driver-manager-audit-no-stubs.sh` (5-line wrapper); `verify-patch-content.sh` (thin wrapper) | +| **DIAGNOSTIC-ONLY (labelled, not build substitute)** | ~15 | `repair-cook.sh`, `fetch-sources.sh`, `scratch-rebuild.sh`, `rebuild-cascade.sh`, `build-redbear-wifictl-redox.sh`, `apply-rb-suffix.sh`, `gnulib-cross-fix.sh`, `libtool-version-sync.sh`, `qemu-ram.sh`, etc. | +| **CURRENT** | ~140 | All core build pipeline, test scripts, lint, archive, fork-management | + +**Misnamed / wrong-architected scripts**: + +| Script | Issue | +|--------|-------| +| `test-baremetal.sh` | Hardcodes `CONFIG="my-amd-desktop"` at lines 16, 29 — `my-*` prefix is deprecated per AGENTS.md and git-ignored | +| `test-amd-gpu.sh` | 3-line wrapper: `exec test-drm-display-runtime.sh --vendor amd "$@"` — pointless indirection | +| `guard-recipes.sh` | References retired `sync-upstream.sh` in 3 comments (lines 4, 15, 112) | +| `build-redbear-wifictl-redox.sh` | Single-package helper; `make r.` already does this | + +**TOOLS.md state**: lists 15 tools — **missing 30+ key scripts** including `build-redbear.sh` +itself. Needs Round-15 update to a "Full Inventory" round. Recommend grouping: Build Pipeline, +Fork Management, Version Management, Cache, Quality/Lint, Testing Infrastructure, Archive/Release. + +### 1.9 Documentation landscape + +Per `bg_94fb81cb` audit: **75 docs** across `local/docs/` and subdirectories. Breakdown: + +| Category | Count | Lines | Action | +|----------|-------|-------|--------| +| **CURRENT** (KEEP) | 30 | ~17,000 | None | +| **PARTIALLY-CURRENT** (MERGE into this doc + companion) | 4 | ~2,100 | See §10 | +| **STALE (mis-archived)** | 1 | 1,022 | `legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — **RESTORE** to top-level | +| **LEGACY (already isolated, DELETE candidates with backup)** | 40 | ~11,200 | See §10 — `archived/*` and `legacy-obsolete-2026-07-25/*` mostly | + +### 1.10 Custom redbear/redox crates inventory + +11 in-house crates under `local/recipes/` (+ adjacent: `redbear-compositor`, +`redbear-hid-core`): + +| Crate | LOC | Maturity | 3D-pipeline role | +|-------|-----|----------|-------------------| +| `redox-driver-sys` | 6,866 | Functional | Foundation: `scheme:memory`, `scheme:irq`, `scheme:pci`, quirks | +| `linux-kpi` | 8,867 + 43 C headers | Functional (with 4 no-op helpers in `drm_shim`) | Linux → Redox translator | +| `firmware-loader` | 2,313 | Functional | `scheme:firmware` | +| `redox-drm` | 15,478 | Partial | `scheme:drm` daemon — AMD+Intel+VirtIO drivers | +| `amdgpu` | 1,692 C | **Skeleton** (Stages 2-4 empty by design) | AMD C glue (custom; full AMD DC NOT compiled) | +| `redbear-sessiond` | 3,092 | Functional | `org.freedesktop.login1` D-Bus broker | +| `redbear-dbus-services` | 0 (config-only) | Functional | D-Bus .service + XML policy | +| `redbear-power` | 16,984 | Functional | ratatui TUI for CPU/thermal — unrelated to 3D | +| `redbear-iwlwifi` | 6,876 | Partial | Wi-Fi driver (C transport + Rust MLD) | +| `redbear-wifictl` | 3,414 | Functional | Wi-Fi control CLI/D-Bus | +| `redbear-btusb` | 5,461 | Partial | Bluetooth USB transport | +| `redbear-compositor` | 7,013 | Partial | Wayland compositor (DRM/KMS + VESA) | + +**TODO/FIXME/HACK inventory across the 11 crates**: **ZERO** explicit markers found in Rust +sources (AGENTS.md zero-stub policy observed). The closest equivalents: + +- `redox-drm/src/scheme.rs:412`: `"The relocation list is not implemented"` (in-code comment) +- `redox-drm/src/scheme.rs:2292`: `warn!("redox-drm: I915_GEM_VM_BIND extensions/syncs not implemented")` (runtime warn) +- `redox-drm/src/main.rs:5-20`: `#[allow(dead_code)]` at crate scope, justified for ~55 forward-looking GPU driver items +- `redox-drm/src/drivers/mod.rs:179`: `"Gen4-Gen7 ... are not yet supported"` (info log) +- `amdgpu/recipe.toml:82,101,125`: `DISPLAY_SRCS=""`, `TTM_SRCS=""`, `CORE_SRCS=""` (explicitly empty) +- `redox-drm/src/scheme.rs:1300,1972,1988,1995,2748,2754`: EOPNOTSUPP for unreachable arms + +**Test coverage**: +- `redox-driver-sys`: 1 (`tests/smoke_test.rs`, 174 lines host unit) +- `linux-kpi`: 1 (host shim test) +- `firmware-loader`, `redox-drm`, `amdgpu`, `redbear-sessiond`, `redbear-power`, `redbear-iwlwifi`, `redbear-btusb`: **ZERO dedicated tests** +- `redbear-wifictl`: 20 test files +- `redbear-compositor`: 1 (`tests/integration_test.rs`) + +**Verdict**: **The GPU/3D pipeline crates have ZERO test coverage.** The foundational layer has a +host smoke test. Wi-Fi control has the best coverage. This is a structural gap to fix in +parallel with the runtime validation. + +**Dependency graph** (`local/recipes/` inter-crate): + +``` +Foundational: redox-driver-sys (scheme:memory/irq/pci + quirks) + ├── linux-kpi (C headers + Rust shim) + │ ├── redox-drm (scheme:drm) + │ ├── redbear-iwlwifi (C transport + Rust MLD) + │ └── amdgpu (C glue -llinux_kpi) + └── redbear-wifictl (scheme:wifictl) +Standalone: + firmware-loader (scheme:firmware) — consumed by amdgpu, redox-drm at runtime + redbear-sessiond — zbus + libredox + redbear-power — ratatui (unrelated to 3D) + redbear-btusb — libredox + redox-scheme + redbear-compositor — libc only (self-contained Wayland wire) +``` + +--- + +## 2. Hard Blockers (cannot ship without fixing) + +In decreasing severity order. **None of these are isolated — they cascade.** The first five +together keep the boot-to-Wayland chain from reaching any graphical endpoint. + +1. **Mesa 26.1.4 link never completed** (`local/docs/3D-DRIVER-PLAN §1.4`). The single + highest-impact unknown. Until `./local/scripts/build-redbear.sh redbear-full` actually + runs to a successful Mesa link, every downstream claim about Mesa is theory. + +2. **Qt6 Wayland null+8 crash** — `wl_proxy_add_listener(NULL, ...)` segfaults. The + null-guard patches (`local/patches/libwayland/redox.patch` + `qtbase/qtwaylandscanner-null-guard-listeners.patch`) + are committed but **never runtime-validated in isolation**. Without this fixed, no + graphical Wayland client (SDDM greeter, KWin, plasma-workspace) can render. + +3. **amdgpu Stages 2-4 are empty** (`amdgpu/recipe.toml:82,101,125` — `DISPLAY_SRCS=""`, + `TTM_SRCS=""`, `CORE_SRCS=""`). The imported Linux AMD DC tree (~6M lines) at + `local/recipes/gpu/amdgpu-source/` is adjacent but not in the retained build path. **AMD + hardware acceleration is structurally impossible today.** + +4. **DRM_CLIENT_CAP_ATOMIC rejected with EOPNOTSUPP** (`redox-drm scheme.rs:1969-1988`). + amdgpu Display Core (DC) and KWin's atomic commit path require this. + +5. **SYNCOBJ_* ioctls absent** in redox-drm. Mesa EGL Wayland swapchain synchronization + uses these. The `REDOX_FENCE_EVENTFD` substitute works only if Mesa is patched to + translate syncobj ioctls to fence eventfds. + +6. **`drm_crtc_handle_vblank()` no-op** (`linux-kpi drm_shim.rs:714`) — always returns 0. + Without a real vblank signal, KWin's compositor loop stalls at the first page-flip wait. + +7. **`drm_mode_config_reset()` calls `drm_ioctl` with NULL data** (`drm_shim.rs:703-704`) + — returns EINVAL immediately, leaving stale connector/CRTC lists. + +8. **PRIME is token-based, not POSIX fd** (`redox-drm scheme.rs:2391-2458`). Sufficient + within `redox-drm` process; breaks cross-process GPU sharing (Mesa client ↔ compositor). + +9. **Universal planes rejected** (`redox-drm scheme.rs:1976-1987`). KWin needs universal + planes for HW cursor + overlay planes. + +10. **KWin has no Redox platform plugin** (`recipes/kde/kwin/recipe.toml`). KWin compiles + but at runtime cannot open `/scheme/drm/card0` or talk to `evdevd`. + +11. **NO_REDOX atomic CS** — multi-context CS requires kernel ABI extension + (`redox_drm_cs.h:11`). + +12. **kf6-krunner, kf6-threadweaver, kf6-frameworkintegration ABSENT** — every plasmashell + launch crashes on missing `org.kde.krunner` and KIO thread pools. + +13. **polkit-kde-agent-1 ABSENT** — privileged actions silently fail or time out. + +14. **xdg-desktop-portal-kde ABSENT** — Screenshot/ScreenCast portals not implemented. + +15. **Zero firmware blobs in `firmware/amdgpu/`** — `firmware-loader` source + `local/recipes/system/firmware-loader/source/firmware/amdgpu/` is empty. AMD GPUs require + DMCUB/GCP/SOS/VCN/SDMA blobs before DC init. + +16. **No GPU command submission real path** — `amdgpu_cs` (`redox-drm + scheme.rs:2320-2325`) accepts the call but **drops the PM4 command-buffer dwords**. + radeonsi's GFX ring is `unimplemented` per the trait docstring in + `redox-drm/src/driver.rs:527-531`. + +17. **No per-process GPUVM / PPGTT** — both AMD and Intel drivers use global GGTT as single + address space (`redox-drm/src/driver.rs:295-301`). + +18. **`memfd_create` absent in relibc** — Mesa disk cache patches around it; PipeWire + emulates via `/tmp` ramfs. + +19. **No runtime validation on any GPU path** — even virtual-gpu has only QEMU proof. + +20. **No DRM kernel shim** — all of the above lives in userspace `redox-drm`. This is + by-design microkernel, but it means **the only path to fixing items 6, 7, 11 is in + userspace, not kernel** — which is actually more agile, but means every ioctl surface + change requires a `redox-drm` patch. + +--- + +## 3. Bad Patterns / Stubs / Shims (per `bg_d8ff966d`) + +### 3.1 Honest compilation-time stubs (safe — do not remove) + +| Stub | File:Line | Severity | +|------|-----------|----------| +| Mesa `04-sys-ioccom-stub-header.patch` | `local/patches/mesa/` | Compile-time macro math; no runtime effect | +| `linux-kpi test_host_redox_shims.rs` | `linux-kpi/source/src/` | `#[cfg(all(test, not(target_os="redox")))]` — host test only | +| qtdeclarative `shader_stub.cmake` | `local/recipes/qt/qtdeclarative/` | Build-time generated files | +| qtbase `qt_float16_shims.c` | `local/recipes/qt/qtbase/` | Real float16 implementation, not a stub | +| redbear-input-headers | `local/recipes/drivers/redbear-input-headers/` | Real header package, not stub | + +### 3.2 Real implementations (formerly stubs, now resolved) + +| Item | File | Resolution | +|------|------|-----------| +| libepoxy | `local/recipes/libs/libepoxy/` | Real upstream v6.0 2026 | +| libdisplay-info | `local/recipes/libs/libdisplay-info/` | Real EDID parser (v6.0 2026) | +| libxcvt | `local/recipes/libs/libxcvt/` | Real VESA CVT calculator (v6.0 2026) | +| lcms2 | `local/recipes/libs/lcms2/` | Real liblcms2.19 color engine | +| libudev | `local/recipes/libs/libudev/source/libudev.c` (1314 lines) | Real — reads `/scheme/udev/devices/` | +| udev-shim (the daemon) | `local/recipes/system/udev-shim/source/src/scheme.rs` (839 lines) | Real — full scheme:udev daemon | +| libpciaccess | `local/recipes/libs/libpciaccess/source/libpciaccess.c` (272 lines) | Real — backed by `/scheme/pci` | +| pam-redbear | `local/recipes/libs/pam-redbear/source/src/lib.rs` (945 lines) | Real — full PAM ABI | +| amdgpu/redox_stubs.c | `local/recipes/gpu/amdgpu/source/redox_stubs.c` (1223 lines) | Real Linux-KPI compat — name is historical | + +### 3.3 Honest runtime shims (functional substitute; logging recommended) + +| Item | Behavior | Recommendation | +|------|----------|----------------| +| SDDM `VirtualTerminal` (no-op VT_ACTIVATE etc.) | `local/recipes/kde/sddm/recipe.toml:14-15` | LOG the attempted op + return success | +| SDDM `utmpx` (no-op utmpLogin/LogOut) | `local/recipes/kde/sddm/recipe.toml:15` | LOG + return success | +| PipeWire `memfd_create` emulated via `/tmp` ramfs | `local/patches/pipewire/01-redox-compat-shims.patch:33-38` | Keep — works for SPA pool | +| PipeWire `pthread_setname_np` no-op | same patch | Keep — relibc TBD | +| qt6-sensors dummy backend | `local/recipes/qt/qt6-sensors/recipe.toml:5-7` | Safe no-op for off-target sensors; log once at startup | +| Mesa EGL Wayland platform `zwp_linux_dmabuf_v1` stub | upstream `platform_wayland.c:699-824` | Need Mesa patch to translate to fence eventfd | + +### 3.4 Lie-grade shims (NO-OP masquerading as real) + +| Stub | File:Line | Risk | Crash mechanism | +|------|-----------|------|-----------------| +| **kirigami QtNetwork stubs** | `local/recipes/kde/kirigami/source/stubs/QtNetwork/QNetworkAccessManager:10` | **CRITICAL** | KDE QML network code (`mgr->get(req)`) returns nullptr, dereferences → SIGSEGV | +| **`drm_crtc_handle_vblank`** always returns 0 | `local/recipes/drivers/linux-kpi/source/src/rust_impl/drm_shim.rs:714` | **HIGH** | KWin stalls at first page flip | +| **`drm_mode_config_reset`** calls `drm_ioctl` with NULL data | `linux-kpi drm_shim.rs:663-664,703-704` | **HIGH** | Stale connector/CRTC list | +| **`drm_connector_register`** userspace no-op | `linux-kpi drm_shim.rs:708-711` | **MEDIUM** | Hotplug silently dropped | +| **`drm_dev_register`** always returns 0 | `linux-kpi drm_shim.rs:437-439` | LOW | Silent success even for broken devices | + +**Fix priority** (in execution order): + +1. Wire `drm_crtc_handle_vblank` to scheme:drm vblank event path → use `SchemeSync::one_shot` + to wait on the actual page-flip completion event (already used by Mesa). +2. Fix `drm_mode_config_reset` to allocate a stack `drm_mode_card_res` buffer of + `sizeof()` bytes and pass that. +3. Replace kirigami QtNetwork `get()` with: + ```cpp + QNetworkReply *get(const QNetworkRequest &req) override { + qWarning("redbear: QNetworkAccessManager::get() — QtNetwork not available"); + Q_ASSERT_X(false, "QtNetwork", "no impl on Redox — caller must handle null"); + return nullptr; + } + ``` +4. Add `qWarning()` to SDDM VT/utmpx stubs. + +--- + +## 4. Gaps vs Upstream Linux + +Per `bg_f07db183` and `bg_5eeaa990` audits. Key gaps that block the 3D stack: + +| Subsystem | Linux has | Redox has | Impact | +|-----------|-----------|-----------|--------| +| DRM atomic modesetting | `drmModeAtomicCommit` + properties + universal planes | rejected with EOPNOTSUPP | KWin + amdgpu DC need atomic | +| DMA-BUF cross-process | Linux `dma_buf` kernel subsystem + POSIX fd passing + `dma_fence` chain + `sync_file` | `REDOX_FENCE_EVENTFD`; PRIME is token-based | Multi-client GPU sharing broken | +| KMS plane API | full planes (primary, cursor, overlay) with z-order | universal planes rejected | HW cursor dead | +| vblank event | kernel IRQ → drm event queue → userspace wakeup | polled at 16 ms (works, low efficiency) | Latency + CPU use | +| libudev device enumeration + hotplug monitoring | `libudev` + `udev_monitor` | real libudev via udev-shim (works); some monitor semantics bounded | functional | +| `memfd_create()` / `shm_open()` | `memfd_create` syscall + memfd sealing | absent; shm_open via `ipcd shm:` | some Mesa/KWin paths use memfd | +| `syncobj_*` ioctls | DRM sync object + DMA fence chain | absent | Mesa Wayland swapchain | +| Per-process GPUVM (PPGTT) | Linux GPUVM + softpin | global GGTT only | multi-process render isolation absent | +| AtomBIOS / VBIOS POST parser | real parsers in upstream amdgpu | not compiled (amdgpu Stages 2-4 empty) | AMD display init impossible | +| Power management firmware (PSP, SMC, PMFW) | amdgpu PM stack + 30+ firmware blobs | NOT compiled; firmware directory is empty | AMD GPU cannot complete init | +| GFX ring + per-process GPUVM + syncobj | real radeonsi | per `redox-drm/driver.rs:527-531`: "future Phase 6+" | radeonsi startup always fails past UAPI | + +--- + +## 5. Critical Path to Boot → Plasma (software-rendered) + +This is the minimal viable path that does NOT require AMD hardware acceleration. It uses +`llvmpipe` + `wl_shm` + `redbear-compositor` + KWin (in a future switchover) and exercises +every layer except HW acceleration. + +| Step | Sub-task | File:Line / Where | Estimate | +|------|----------|--------------------|----------| +| 5.1 | **Run a clean Mesa link pass** | `./local/scripts/build-redbear.sh redbear-full`; diagnose the link failure root cause (likely LLVM lib resolution or missing `libglapi.so`) | 1-2 weeks | +| 5.2 | **Runtime-validate Qt6 Wayland null+8 fix** | per `local/docs/QT6-WAYLAND-NULL8-DIAGNOSIS.md §7`; rebuild `libwayland → qtbase → qtdeclarative → qtwayland` end-to-end; verify a QML window renders under `redbear-compositor` | 1-2 weeks | +| 5.3 | **Boot `redbear-full` in QEMU** and confirm `/scheme/drm/card0` responds to `drmGetVersion` + `drmModeGetResources` (virtio-gpu path) | `local/scripts/test-redbear-full-qemu.sh` | 0.5 week | +| 5.4 | **Wire `redbear-statusnotifierwatcher`** into `config/redbear-full.toml` `[packages]` and re-add D-Bus activation files for `kded6`, `kglobalaccel`, `ksmserver` once daemon binaries are runtime-verified | per `bg_87ac9620`; `local/docs/DBUS-INTEGRATION-PLAN.md §F5` | 0.5 week | +| 5.5 | **Port `kf6-krunner`, `kf6-threadweaver`, `kf6-frameworkintegration`** — three hard deps for plasmashell | new recipes in `local/recipes/kde/` | 2-4 weeks | +| 5.6 | **Port `polkit-kde-agent-1` and `harfbuzz`** | new recipes | 1 week | +| 5.7 | **Fix the 4 lie-grade shims** in `local/recipes/kde/kirigami/stubs/QtNetwork/` + `linux-kpi drm_shim.rs` (vblank, mode_config_reset, connector_register) | per §3.4 above | 1 week | +| 5.8 | **Add logging to SDDM VT/utmpx stubs** | `local/recipes/kde/sddm/recipe.toml` patches | 0.5 day | +| 5.9 | **First plasma session launch** end-to-end (SDDM greeter → KWin compositor → plasmashell → kded6 → kglobalacceld → system tray) | iterate to fix individual crashes as they surface | 2-4 weeks | +| 5.10 | **Run all Phase 6 KDE test scripts** | `test-phase6-kde-qemu.sh`, `test-kde-session.sh` | 1 week | + +**Total estimate (serial):** ~10-15 weeks of focused engineering. With 1-2 engineers working +parallelizable items: ~6-10 weeks. + +--- + +## 6. Critical Path to Hardware-Accelerated (Mesa radeonsi + KWin + real GPU) + +After §5 completes (software path proven), this path adds real GPU work. **Many of these steps +require kernel ABI extensions** (per `redox_drm_cs.h:11`). + +| Step | Sub-task | Where | Estimate | +|------|----------|-------|----------| +| 6.1 | **Populate firmware blobs** in `local/recipes/system/firmware-loader/source/firmware/amdgpu/` via `local/scripts/fetch-firmware.sh --vendor amd --subset=amdgpu-core` + manual commit | `firmware/amdgpu/` is currently empty (HIGHEST prep gap) | 0.5 week | +| 6.2 | **Implement `DRM_CLIENT_CAP_ATOMIC`** in `redox-drm/src/scheme.rs` + add `drmModeAddFB2`, `drmModeAddFB2WithModifiers`, `drmModeAtomicCommit`, `drmModeGetProperty`, `drmModeSetProperty`, `DRM_IOCTL_MODE_OBJ_*` | ~1500 LOC ioctl handlers + per-resource state | 4-8 weeks | +| 6.3 | **Implement `DRM_CLIENT_CAP_UNIVERSAL_PLANES`** (cursor + overlay planes) | `redox-drm` | 2 weeks | +| 6.4 | **Implement `DRM_IOCTL_SYNCOBJ_*`** family (5 ioctls) | `redox-drm` | 2 weeks | +| 6.5 | **Patch Mesa** to translate `DRM_IOCTL_SYNCOBJ_WAIT` to `REDOX_FENCE_EVENTFD` (when called from EGL Wayland swapchain) | Mesa + Mesa redox winsys + EGL Wayland platform | 2-4 weeks | +| 6.6 | **Implement multi-context command submission** in kernel + `redox-drm` (kernel ABI extension per `redox_drm_cs.h:11`) | kernel + `redox-drm` | 4-8 weeks | +| 6.7 | **Implement per-process GPUVM (PPGTT)** + softpin + per-context CS | kernel + `redox-drm` (BigLift™) | 8-12 weeks | +| 6.8 | **Re-integrate amdgpu Stages 2-4** (Linux AMD DC tree at `local/recipes/gpu/amdgpu-source/`) — retain the bounded Red Bear glue + start adding the AMD DC core | `amdgpu/recipe.toml:82,101,125` | 8-16 weeks (this is the heaviest item) | +| 6.9 | **Implement real GFX ring + radeonsi command submission path** in `redox-drm/src/drivers/amd/mod.rs` | per `driver.rs:527-531`: *"Real radeonsi acceleration requires implementing the GFX ring + per-process GPUVM"* | 4-8 weeks | +| 6.10 | **Implement AtomBIOS / VBIOS POST** parser for AMD GPU bring-up | new code in amdgpu glue (or pull from reference) | 2-4 weeks | +| 6.11 | **Write a Redox platform plugin for KWin** that opens `/scheme/drm/card0`, talks to `evdevd`, integrates with `redbear-sessiond` logind device taking | new code in `local/recipes/kde/kwin/` | 4-8 weeks | +| 6.12 | **Wire `redbear-keymapd`** into `redbear-compositor` so XKB keymaps are sent on `wl_keyboard_keymap` (currently `WL_KEYBOARD_KEYMAP_FORMAT_NO_KEYMAP`) | `redbear-compositor main.rs:930` + `redbear-keymapd` recipe | 2 weeks | +| 6.13 | **Validate on real AMD hardware** (Ryzen Threadripper 128-thread verified host per AGENTS.md) | `local/scripts/test-amd-gpu.sh`, `test-intel-gpu.sh`, `test-baremetal.sh` (fix `my-amd-desktop` first) | 2-4 weeks | + +**Total estimate for HW-accelerated path:** 26-46 weeks from §5 completion. With 2 engineers +parallelizable, ~13-26 weeks. + +--- + +## 7. Critical Path: Mesa → KWin as a real compositing WM (intermediate) + +A practical intermediate between §5 and §6: prove that KWin can run on the Mesa EGL Wayland +platform using llvmpipe (no HW acceleration), without needing AMD/Intel DC work. This +exercises the entire compositor layer. + +| Step | Sub-task | File:Line / Where | Estimate | +|------|----------|--------------------|----------| +| 7.1 | **Write a Redox platform plugin for KWin** that uses the bounded Mesa EGL Wayland platform instead of the Linux DRM backend | new code in `kwin/recipe.toml` | 4-6 weeks | +| 7.2 | **OR write a `wlroots` port** for Redox that KWin can consume via SessionBackend (wlroots has the `policy_noop` session backend that bypasses logind) | `recipes/wip/wayland/wlroots/redox.patch` is staged | 8-12 weeks | +| 7.3 | **Boot KWin Wayland session in QEMU with llvmpipe** | `test-phase6-kde-qemu.sh` after KWin → Wayland switchover | 2-4 weeks | + +**Note**: This is **the optimal intermediate path** because it exercises the entire 3D +desktop pipeline *without* requiring AMD DC bring-up. It validates every architectural +choice made to date. **AGENTS.md references this as `P4: Wayland compositor (4-6 weeks)` + +`P3: KWin session (6-10 weeks)`**. + +--- + +## 8. Architecture rules (binding) + +When working on any layer captured in this document: + +1. **The validation bar is OS-level**: code presence ≠ support. The only acceptable + evidence is a real or host-rendered frame on screen with a real round-tripped EGL + context that survives protocol transitions. + +2. **Zero-stub policy**: no `unimplemented!()`, `todo!()`, `#[cfg(stub)]`, `// TODO` + in production code. New stub surfaces must: + - return a typed error or sentinel value, **not** zero, + - log every invocation at WARN level, + - appear in the §3 table of this document. + +3. **No new submodules, no new branches** (per `local/AGENTS.md` BRANCH AND SUBMODULE + POLICY). All custom work lives in existing 0.3.1-versioned crates. + +4. **Durability**: every change to upstream-owned sources (e.g. Mesa source tree) MUST + be durably saved (patches in `local/patches/`, or core-fork commits in `local/sources/`). + +5. **Forks only via the canonical `bump-release.sh`** (not the deprecated `bump-fork.sh`). + +6. **Build via `./local/scripts/build-redbear.sh ` only** — not `repo cook`, + not `make r.`, not `make live` directly. The canonical pipeline has the + prefix-staleness check, concurrency lock, and branch gates. + +7. **D-Bus service registration via `/etc/init.d/_*` paths, never + `/usr/lib/init.d/`** (collision rule). + +8. **Recipe.toml changes are git-tracked and durable.** Source-tree edits (e.g. + `recipes/libs/mesa/source/...`) are disposable. + +9. **Acceptable runtime fix modes:** (a) patch the missing implementation, (b) honest + shim with logging. Never: silent no-op, never: lying magic constant, never: + remove from build. + +10. **AMD DC re-integration is opt-in, not opt-out.** Per `amdgpu/recipe.toml:7-9`, + the imported Linux AMD DC tree is intentionally not in the default retained build + path. This is by design until the bounded path proves a specific dependency. + +## 8.1 Implementation progress log (2026-07-27) + +This subsection records the concrete code work that landed on the +`0.3.1` branch on 2026-07-27, in the order it was committed. Each entry +lists commit hash, file(s), what changed, and what the next remaining +gap is. + +### Wave 1 — linux-kpi lie-grade stub fixes + +**Commit:** `0b19fddd2c` 3d: harden 4 lie-grade stubs in linux-kpi; log SDDM no-ops; emit SeatNew in redbear-sessiond + +| File | Change | +|------|--------| +| `local/recipes/drivers/linux-kpi/source/src/rust_impl/drm_shim.rs` | `drm_crtc_handle_vblank`: always-0 stub → per-crtc monotonic counter via `lazy_static! Mutex>`. Mesa/KWin's `drmWaitVBlank` no longer stalls on first page-flip wait. | +| `local/recipes/drivers/linux-kpi/source/src/rust_impl/drm_shim.rs` | `drm_mode_config_reset`: was calling `drm_ioctl(dev, GETRESOURCES, NULL, NULL)` which `drm_ioctl` itself rejects (NULL `_data` → `-EINVAL`). Replaced with a logged no-op. | +| `local/recipes/drivers/linux-kpi/source/src/rust_impl/drm_shim.rs` | `drm_connector_register`: escalated `log::debug!` to `log::warn!`. | +| `local/recipes/drivers/linux-kpi/source/src/rust_impl/drm_shim.rs` | `drm_dev_register`: `log::warn!` when caller passes non-zero flag bits. | +| `local/recipes/kde/sddm/redox-virtualterminal-stub.patch` | `qDebug()` logs on every no-op invocation. | +| `local/recipes/kde/sddm/redox-helper-utmpx-stub.patch` | `qDebug()` logs on every no-op invocation. | +| `local/recipes/system/redbear-sessiond/source/src/manager.rs` | `emit_seat_new()` added (zbus signal) + `set_connection` triggers it on first call. | + +### Wave 2 — redbear-sessiond SeatRemoved wire + +**Commit:** `e6e4289113` redbear-sessiond: emit SeatRemoved on shutdown + +- Hooked `emit_seat_removed` into `wait_for_shutdown`'s return path so SDDM's `LogindSeatManager` observes seat departure before the D-Bus connection drops. Order: emit before drop. + +### Wave 3 — drm_crtc_handle_vblank_get + test fixture fix + +**Commit:** `86a162c803` linux-kpi: add drm_crtc_handle_vblank_get read-only sister; fix test fixture + +| File | Change | +|------|--------| +| `local/recipes/drivers/linux-kpi/source/src/rust_impl/drm_shim.rs` | New `pub extern "C" fn drm_crtc_handle_vblank_get(crtc: *mut u8) -> u32` returns the current per-crtc counter without incrementing. Useful for diagnostics and deterministic tests. | +| `local/recipes/drivers/linux-kpi/source/src/rust_impl/drm_shim.rs` | Two new tests: `drm_crtc_handle_vblank_get_returns_counter_without_incrementing` and `drm_crtc_handle_vblank_get_returns_zero_for_unseen_crtc`. | +| `local/recipes/drivers/linux-kpi/source/src/rust_impl/error.rs` | Pre-existing `test_handler` had wrong signature (plain Rust fn vs `ErrorHandlerFn`'s `unsafe extern "C" fn`). Fixed. | + +### Wave 4 — kirigami QtNetwork lie-grade → real implementation + +| File | Change | +|------|--------| +| `local/patches/kirigami/02-qnetwork-real-implementation.patch` | **NEW PATCH.** Replaces the upstream Kirigami's `qnam = nullptr /* Redox: networkAccessManager not available */` hardcode with a real `qnam = new QNetworkAccessManager(this)` allocation. The Icon primitive's `handleFinished` already falls through to the placeholder icon when `scheme:network` is unavailable. | +| `local/recipes/kde/kirigami/recipe.toml` | Added `patches = ["02-qnetwork-real-implementation.patch"]` and `cookbook_apply_patches` invocation. Removed the `-I${COOKBOOK_SOURCE}/stubs/QtNetwork` from CMAKE_CXX_FLAGS. | +| `local/recipes/kde/kirigami/source/stubs/QtNetwork/` | **DELETED.** Three files (`QNetworkAccessManager`, `QNetworkReply`, `QNetworkRequest`) that provided lying `nullptr`-returning and minimal-`Q_OBJECT`-having stubs. The real QtNetwork (built via qtbase's Qt6::Network module) is now used. | +| `local/recipes/kde/sddm/stubs/` | **DELETED ENTIRELY.** `stubs/linux/` subdir was orphaned (SDDM patches wrap their use in `#if !defined(__redox__)` so the stubs are never actually compiled on Redox). The empty `stubs/` dir had no other contents. | + +### Wave 5 — bin/ toolchain wrappers + +| File | Change | +|------|--------| +| `bin/x86_64-unknown-redox-gcc-ar` | **NEW.** Same 5-line `redbear-run-tool` wrapper pattern as existing `x86_64-unknown-redox-gcc`. The cookbook's `[binaries]` block (in `src/cook/script.rs:340`) requires this; without it, meson fails to find `gcc-ar` during regen. | +| `bin/x86_64-unknown-redox-gcc-ranlib` | **NEW.** Same pattern. | +| `bin/x86_64-unknown-redox-g++` | **NEW.** Same pattern. | +| `bin/x86_64-unknown-redox-cpp` | **NEW.** Same pattern. | + +These four wrappers unblock `meson --internal regenerate` for any mesa-style build. Verified: with `PATH=.../bin:$PATH`, `x86_64-unknown-redox-gcc-ar --version` returns `GNU ar (GNU Binutils) 2.43.1`. + +### Audit-doc correction: Mesa "link never completed" — actual root cause + +The audit's §2 #1 ("Mesa 26.1.4 link has never completed") was **misclassified**. +The actual blocker is upstream of the link step: mesa's meson configure fails +with `Dependency lookup for libclc with method 'pkg-config' failed`. Mesa is the +FIRST consumer to break because libclc is a hard dep of mesa's clc tool. + +`local/recipes/dev/libclc/` exists with a structurally-correct 142-line +recipe (cmake + ninja, LLVM21+clang21 for bitcode generation). However, the +libclc cook has never actually produced `libclc.pc` or any `.bc` bitcode +files. The sysroot at `local/recipes/dev/libclc/target/x86_64-unknown-redox/sysroot/usr/lib/` +contains LLVM .a files (deposited by a prior clang21 cook that wrote to the +wrong stage path) but no libclc output. + +After the Wave 5 wrappers, `meson regen` no longer fails on `gcc-ar` +missing. It now fails on `libclc.pc missing` (which is a libclc-cook problem, +not a mesa-link problem). Once libclc is properly cooked, the next blocker +would be `libva`'s `VA_VERSION` macro missing. + +This means the audit's §2 #1 is correctly captured in §6 as "amdgpu Stages +2-4 re-integration" but the mesa link itself is gated on a libclc cook run. + +### Implementation progress — what was NOT touched this round + +The following audit items were tracked but **not addressed** in the +2026-07-27 implementation round. They are NOT closed; they remain open +gaps per §2 / §5 / §6 of this document. + +- **§2 #2 atomic mode-setting** — `redox-drm/scheme.rs:1969` still returns + `EOPNOTSUPP` for `DRM_CLIENT_CAP_ATOMIC`. Multi-day ioctl implementation + in `redox-drm`. Tracked under §6. +- **§2 #3 SYNCOBJ_* ioctls** — 5 ioctls absent. Requires Mesa patch to + translate syncobj calls to `REDOX_FENCE_EVENTFD`. +- **§2 #4 universal planes** — `redox-drm/scheme.rs:1976` returns + `EOPNOTSUPP` for `DRM_CLIENT_CAP_UNIVERSAL_PLANES`. +- **§2 #5 KWin platform plugin** — KWin has no Redox backend (`local/recipes/kde/kwin/`). +- **§2 #7 libva** — `libva.pc` lacks `VA_VERSION` macro (just discovered via + Wave 5). +- **§5.5 / §5.6 new KF6 recipes** — `kf6-krunner`, `kf6-threadweaver`, + `kf6-frameworkintegration`, `polkit-kde-agent-1`, `harfbuzz`. Multi-day + recipe authoring each. +- **§5.5 amdgpu Stages 2-4 re-integration** — multi-month, integrates + ~6M-line Linux AMD DC tree. +- **§5.2 Qt6 Wayland null+8 runtime validation** — patches are committed + but never runtime-validated in QEMU. +- **Wave 5 (redbear-compositor XKB keymap)** — still emits + `WL_KEYBOARD_KEYMAP_FORMAT_NO_KEYMAP`. Needs an XKB v1 keymap blob and + `redbear-keymapd` integration; `redbear-keymapd` does NOT currently + produce XKB v1 binary (only text-format scan-code lookups). +- **The unknown `local/docs/NETWORKING-AND-DRIVERS-SYSTEMATIC-ASSESSMENT-2026-07-27.md`** + (1057 lines) and `local/docs/NETWORKING-AND-DRIVERS-CODE-ASSESSMENT-2026-07-27.md` + (1108 lines) — operator-authored authoritative docs for the network+driver + surface. Not in scope of this round; left as-is. + +--- + +## 9. Tracking + +- **Each Round adds 1-2 sub-sections** to this document rather than appending + post-mortems to scratch files. +- **Each TODO discovered during §5/§6 implementation work goes in §2 ranked by severity.** +- **Each completed item moves to §3.2 (RESOLVED).** +- **Each deleted doc moves from §10 (delete list) to a tarball entry at + `/tmp/opencode/stale-doc-backup-.tar.gz` plus the deletion log + at `local/docs/SUPERSEDED-DOC-LOG.md`.** + +--- + +## 10. Doc deletion manifest (post-consolidation) + +**All deletion candidates MUST be backed up first** to +`/tmp/opencode/stale-doc-backup-2026-07-27.tar.gz` per AGENTS.md "NEVER delete" rule and +this document's notepad policy (§0 binding policy). + +### 10.1 REPLACE (this doc supersedes) + +| Doc | Lines | Reason | +|-----|-------|--------| +| `local/docs/3D-DRIVER-PLAN.md` | 960 | All Round 1-7 work fact-of-record here; operating rule restated in §0 | +| `local/docs/REDBEAR-FULL-SDDM-BRINGUP.md` | 177 | Build-campaign log; status captured in §1.5 | + +### 10.2 RESTORE (currently mis-archived) + +| Doc | Lines | Action | +|-----|-------|--------| +| `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` | 1,022 | **Move to top-level** `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`. Doc self-declares active authority (§0 of itself: *"despite the legacy folder name confusion, this file is still the active low-level-controller authority"*). Update stale `pcid-spawner` references to `driver-manager`. Update `local/docs/legacy-obsolete-2026-07-25/SUPERSEDED.md` to reflect. | + +### 10.3 DELETE candidates (with backup) + +| Doc | Lines | Reason | +|-----|-------|--------| +| `local/docs/legacy-obsolete-2026-07-25/05-KDE-PLASMA-ON-REDOX.md` | 560 | Self-labeled historical. Pre-KF6 instructions superseded by this doc + `CONSOLE-TO-KDE` | +| `local/docs/legacy-obsolete-2026-07-25/BUILD-SYSTEM-ASSESSMENT-2026-07-18.md` | 464 | Audit that has been absorbed into AGENTS.md policies | +| `local/docs/legacy-obsolete-2026-07-25/BUILD-SYSTEM-HARDENING-PLAN.md` | 624 | Phases implemented; collision detection now in `COLLISION-DETECTION-STATUS.md` | +| `local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md` | 498 | Superseded by this doc | +| `local/docs/legacy-obsolete-2026-07-25/HOOKS.md` | 188 | Subsumed by `RELEASE-BUMP-WORKFLOW.md` + AGENTS.md | +| `local/docs/legacy-obsolete-2026-07-25/INITNSMGR-CONCURRENCY-DESIGN.md` | 222 | Design for implemented O_NONBLOCK fix | +| `local/docs/legacy-obsolete-2026-07-25/NETWORKING-STACK-STATE.md` | 120 | Superseded by `NETWORKING-IMPROVEMENT-PLAN.md` | +| `local/docs/legacy-obsolete-2026-07-25/PATCH-PRESERVATION-AUDIT-2026-07-12.md` | 408 | Historical audit — 144-patch finding was addressed | +| `local/docs/legacy-obsolete-2026-07-25/RAPL-IMPLEMENTATION-PLAN.md` | 530 | Draft, never implemented. Power planning in `CONSOLE-TO-KDE` | +| `local/docs/legacy-obsolete-2026-07-25/redbear-power-improvement-plan.md` | 6,184 | LARGEST file in repo. All improvement items done. Patterns extracted to `RATATUI-APP-PATTERNS` | +| `local/docs/legacy-obsolete-2026-07-25/WAYLAND-IMPLEMENTATION-PLAN.md` | 186 | Diagnostic §§1-2 accurate; execution plan superseded by this doc | +| `local/docs/archived/ACPI-I2C-HID-IMPLEMENTATION-PLAN.md` | 339 | Deferred; USB HID is primary input path | +| `local/docs/archived/BUILD-SYSTEM-IMPROVEMENTS.md` | 621 | Historical post-mortem | +| `local/docs/archived/DRIVER-MANAGER-MIGRATION-PLAN.md` | 2,861 | Round-by-round history (182 KB) superseded by `DRIVER-MANAGER.md` | +| `local/docs/archived/IMPLEMENTATION-MASTER-PLAN.md` | 129 | Completion report superseded by `CONSOLE-TO-KDE` | +| `local/docs/archived/IMPROVEMENT-PLAN.md` | 575 | RESOLVED quality audit | +| `local/docs/archived/INTEL-HDA-IMPLEMENTATION-PLAN.md` | 417 | Deferred audio plan | +| `local/docs/archived/KERNEL-SCHEDULER-MULTITHREAD-IMPROVEMENT-PLAN.md` | 1,026 | Historical scheduler | +| `local/docs/archived/RELIBC-IPC-ASSESSMENT-AND-IMPROVEMENT-PLAN.md` | 165 | Credential work resolved in `KERNEL-IPC-CREDENTIAL-PLAN.md` | +| `local/docs/archived/repo-governance.md` | 99 | Historical, absorbed into AGENTS.md | +| `local/docs/archived/SLEEP-IMPLEMENTATION-PLAN.md` | 306 | All phases committed | +| `local/docs/archived/STUBS-FIX-PROGRESS.md` | 507 | Completed v6.0 stubs work; outcome captured in §3.2 here | +| `local/docs/archived/SYSTEM-STABILITY-AND-UPSTREAM-SYNC-PLAN.md` | 819 | Archived, replaced by `CONSOLE-TO-KDE` | +| `local/docs/archived/UPSTREAM-SYNC-PROCEDURE.md` | 829 | References obsolete `pcid-spawner` model | +| `local/docs/archived/USB-BOOT-INPUT-PLAN.md` | 169 | Superseded | +| `local/docs/archived/USB-VALIDATION-RUNBOOK-2026-07.md` | 137 | Older version; canonical `USB-VALIDATION-RUNBOOK.md` at top-level | +| `local/docs/archived/XHCID-DEVICE-IMPROVEMENT-PLAN.md` | 360 | Superseded | +| `local/docs/evidence/driver-manager/ASSESSMENT-2026-07-22.md` | 368 | Pre-cutover; superseded by `DRIVER-MANAGER.md` | +| `local/docs/evidence/driver-manager/D5-AUDIT.md` | 390 | Pre-cutover D5 gate audit; superseded | +| `local/docs/fork-push-status/2026-07-12-Round-9-phase-8.3.md` | 83 | Point-in-time push log | +| `local/docs/boot-logs/README.md` | 57 | Keep as directory index only if whole dir is kept; otherwise delete | +| `local/docs/boot-logs/cachyos-boot-20260629-0520.md` | 52 | Reference log from CachyOS | +| `local/docs/boot-logs/REDBEAR-FULL-BOOT-EXTENDED-RESULTS.md` | 295 | Boot test from 2026-06-09 | +| `local/docs/boot-logs/REDBEAR-FULL-BOOT-POST-VIRTIO-BLKD-FIX-RESULTS.md` | 238 | Boot test from 2026-06-09 | +| `local/docs/boot-logs/REDBEAR-FULL-BOOT-RESULTS.md` | 281 | Boot test from 2026-06-09 | +| `local/docs/boot-logs/REDBEAR-MINI-BOOT-PS2D-INPUTD-LOG-FIX.md` | 134 | Bug diagnostic from 2026-06-30; bug fixed | +| `local/docs/legacy-recipe-patches/README.md` | 37 | Navigation aid only | + +**Backup procedure** (BEFORE any `rm`): + +```bash +DATE=2026-07-27 +mkdir -p /tmp/opencode/stale-doc-backup-${DATE} +cd /mnt/data/Builds/RedBear-OS +tar -czvf /tmp/opencode/stale-doc-backup-${DATE}/docs-to-delete-1.tar.gz \ + $(awk '/|/{gsub(/^`| \\\\?$/,""); print "local/docs/" $NF}' /tmp/.../list) \ + 2>/tmp/opencode/deletion-log-${DATE}.txt +git checkout -b docs/consolidation-2026-07-27 +# now safe to delete, or use the `AgGet` script wrapper +``` + +The deletion log MUST record: file path, line count, last-modified git ref, why deleted +(per this table), and where the backup tarball lives. + +### 10.4 KEEP AS COMPANIONS (do not delete) + +The following docs are referenced from AGENTS.md or this doc as the canonical authority for +their scope. They are updated independently. + +**Subsystem companions** (stay, cross-reference from this doc): +- `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` — desktop journey; cross-ref §1.1, §1.6 +- `local/docs/DBUS-INTEGRATION-PLAN.md` — D-Bus architecture; cross-ref §1.5, §1.6 +- `local/docs/QT6-WAYLAND-NULL8-DIAGNOSIS.md` — null+8 root cause; cross-ref §2 #2, §3.4 +- `local/docs/INPUT-STACK-LINUX-ALIGNMENT-PLAN.md` — input stack; cross-ref §1.1 +- `local/docs/KERNEL-IPC-CREDENTIAL-PLAN.md` — kernel scheduler/credential; cross-ref §1.1 +- `local/docs/ACPI-IMPROVEMENT-PLAN.md` — ACPI; cross-ref §1.1 (RSDP propagation) +- `local/docs/USB-IMPLEMENTATION-PLAN.md` — USB; cross-ref §1.1 (usbhidd) +- `local/docs/WIFI-IMPLEMENTATION-PLAN.md` — Wi-Fi; not directly 3D-relevant +- `local/docs/BLUETOOTH-IMPLEMENTATION-PLAN.md` — Bluetooth; not 3D-relevant +- `local/docs/NETWORKING-IMPROVEMENT-PLAN.md` — networking; cross-ref §1.1 (smolnetd) +- `local/docs/DRIVER-MANAGER.md` — PCI spawn; cross-ref §1.7 (00_driver-manager.service) +- `local/docs/INIT-NAMESPACE-MANAGER-SCALABILITY-PLAN.md` — initnsmgr; cross-ref §1.7 +- `local/docs/LG-GRAM-16Z90TP-COMPATIBILITY-PLAN.md` — laptop integration +- `local/docs/HARDWARE-NETWORKING-INVENTORY.md` — HW inventory +- `local/docs/HARDWARE-VALIDATION-MATRIX.md` — HW validation matrix +- `local/docs/FIREWALL-VALIDATION-LOG.md` — firewall +- `local/docs/BUILD-SYSTEM-INVARIANTS.md` — build invariants (AGENTS.md reference) +- `local/docs/BUILD-CACHE-PLAN.md` — build cache +- `local/docs/PACKAGE-BUILD-QUIRKS.md` — build quirks (AGENTS.md reference) +- `local/docs/QUIRKS-SYSTEM.md` — quirks (AGENTS.md reference) +- `local/docs/QUIRKS-AUDIT.md` — quirks consumers +- `local/docs/QUIRKS-IMPROVEMENT-PLAN.md` — quirks redesign +- `local/docs/LOCAL-FORK-SUPREMACY-POLICY.md` — fork policy (AGENTS.md reference) +- `local/docs/PATCH-GOVERNANCE.md` — patch governance (AGENTS.md reference) +- `local/docs/RELEASE-BUMP-WORKFLOW.md` — release bumps (AGENTS.md reference) +- `local/docs/SCRIPT-BEHAVIOR-MATRIX.md` — script matrix (AGENTS.md reference) +- `local/docs/RATATUI-APP-PATTERNS.md` — patterns guide +- `local/docs/CUB-PACKAGE-MANAGER.md` — cub package manager +- `local/docs/GRUB-INTEGRATION-PLAN.md` — GRUB integration +- `local/docs/COLLISION-DETECTION-STATUS.md` — installer collision detection (AGENTS.md reference) +- `local/docs/USB-VALIDATION-RUNBOOK.md` — USB validation +- `local/docs/GREETER-LOGIN-IMPLEMENTATION-PLAN.md` — greeter design (companion to this doc) +- `local/docs/evidence/lg-gram/ASSESSMENT-2026-07-26.md` — LG Gram evidence + +**Audit / evidence docs KEPT**: +- `local/docs/archived/README.md` — directory inventory (KEEP — update to reflect new delete log) +- `local/docs/legacy-obsolete-2026-07-25/SUPERSEDED.md` — directory inventory (KEEP — update IRQ-plan entry to reflect restore) + +**Within `config/`**: +- `protected-recipes.toml` — infrastructure data (NOT a build config) + +--- + +## 11. Script deletion manifest + +Per `bg_3239014a` audit. **All deletions require backup to +`/tmp/opencode/stale-script-backup-2026-07-27.tar.gz`** before any `rm`. + +### 11.1 DELETE (safe — self-declared dead or mission-complete) + +| Script | Lines | Reason | +|--------|-------|--------| +| `local/scripts/bump-fork.sh` | ~150 | Self-declared DEPRECATED 2026-07-18. Superseded by `bump-release.sh` + `upgrade-forks.sh`. Guarded by env var. | +| `local/scripts/sync-upstream.sh` | ~40 | Self-declared RETIRED. Prints message, exits. Zero code path. | +| `local/scripts/edit-kf6-recipes-for-patches.sh` | (large) | One-time C-7 migration step 2; mission complete in 6.27.0 bump cycle | +| `local/scripts/migrate-kf6-seds-direct.sh` | (small) | One-time C-7 migration step 1 | +| `local/scripts/migrate-kf6-seds-to-patches.sh` | (medium) | C-7 main migration. Superseded by `bump-graphics-recipes.sh` | +| `local/scripts/cleanup-kf6-noop-seds.sh` | (small) | C-7 cleanup of dead `ecm/ki18n` chains | +| `local/scripts/cleanup-kf6-noop-seds-targeted.sh` | (small) | C-7 targeted variant | + +### 11.2 DELETE (redundant wrappers) + +| Script | Lines | Reason | +|--------|-------|--------| +| `local/scripts/driver-manager-audit-no-stubs.sh` | 5 | Just `exec python3 driver-manager-audit-no-stubs.py` | +| `local/scripts/test-amd-gpu.sh` | 3 | Just `exec test-drm-display-runtime.sh --vendor amd "$@"` | + +### 11.3 MERGE (consolidate overlapping functionality) + +| Keep | Fold into it | Reason | +|------|--------------|--------| +| `local/scripts/validate-patches.sh` | `verify-patches.sh` (add `--components` filter; delete the other) | Both check patch application. 50% overlap. | + +### 11.4 FIX (not delete) + +| Script | Issue | Fix | +|--------|-------|-----| +| `local/scripts/test-baremetal.sh` lines 16, 29 | Hardcodes `CONFIG="my-amd-desktop"` | Replace with `redbear-full` (the only redbear target with desktop/graphics) | +| `local/scripts/guard-recipes.sh` lines 4, 15, 112 | References retired `sync-upstream.sh` | Update to reference `provision-release.sh` | + +### 11.5 ENHANCE (not delete, but improve) + +| Script | Improvement | +|--------|-------------| +| `local/scripts/TOOLS.md` | Round-15 update to enumerate all ~50+ canonical scripts, grouped by function | +| `local/scripts/build-redbear-wifictl-redox.sh` | Generalize as `build-single-redox-package.sh ` or delete (use `make r.`) | + +### 11.6 CONFIG DELETION MANIFEST (NOT consumed by `build-redbear.sh`) + +| File | Lines | Reason | +|------|-------|--------| +| `config/desktop.toml` | (medium) | Upstream Redox; not referenced by any redbear config | +| `config/desktop-minimal.toml` | (medium) | Same — uses `/usr/lib/init.d/` paths (lint violation) | +| `config/wayland.toml` | (large) | Bounded Wayland validation upstream config; not consumed | +| `config/x11.toml` | (medium) | Self-declared non-primary; all X11 via Xwayland in redbear-full | +| `config/dev.toml` | (small) | Not referenced | +| `config/redoxer.toml`, `redoxer-gui.toml` | (small) | Redoxer CI; not Red Bear | +| `config/acid.toml`, `auto-test.toml`, `os-test.toml`, `tests.toml`, `sys-build.toml` | (various) | Upstream CI test configs | +| `config/aarch64/*` (entire dir) | ~6 files | Red Bear is x86_64 only | +| `config/i586/*` | ~6 files | Same | +| `config/riscv64gc/*` | ~6 files | Same | + +### 11.7 CONFIG FIX (not delete) + +| File | Issue | Fix | +|------|-------|-----| +| `config/redbear-wifi-experimental.toml` line 9 | `include = ["redbear-minimal.toml"]` — typo. File doesn't exist | Replace `minimal` with `mini` | +| `config/redbear-bluetooth-experimental.toml` line 10 | Same typo | Same fix | +| `config/redbear-device-services.toml` | 1,137 lines with ~14x duplication of 4 firmware-fallback TOML blobs | Deduplicate to ~200 lines | + +--- + +## 12. Cross-reference index (companion-plan anchors) + +When you are working on: + +| Topic | Read | +|-------|------| +| Mesa link failure root cause | `local/docs/3D-DRIVER-PLAN.md` §1.4 (and run a clean build to confirm) | +| Qt6 Wayland null+8 crash (root-cause analysis + fix author) | `local/docs/QT6-WAYLAND-NULL8-DIAGNOSIS.md` | +| D-Bus service architecture, activation files, login1 | `local/docs/DBUS-INTEGRATION-PLAN.md` | +| Greeter/SDDM/authd/session-launch design | `local/docs/GREETER-LOGIN-IMPLEMENTATION-PLAN.md` | +| Desktop phase tracker (P1 → P5) | `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` | +| Build system invariants (HIGH-RISK never-touch) | `local/docs/BUILD-SYSTEM-INVARIANTS.md` | +| Build cache architecture (BLAKE3 content-hash) | `local/docs/BUILD-CACHE-PLAN.md` | +| Cross-compilation quirks by package | `local/docs/PACKAGE-BUILD-QUIRKS.md` | +| PCI driver spawn / driver-manager architecture | `local/docs/DRIVER-MANAGER.md` | +| Init namespace manager (initnsmgr) | `local/docs/INIT-NAMESPACE-MANAGER-SCALABILITY-PLAN.md` | +| IRQs / PCI / MSI-X / low-level controller quality | `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` (restore per §10.2) | +| ACPI boot-to-S5 propagation | `local/docs/ACPI-IMPROVEMENT-PLAN.md` | +| Quirks system architecture + per-device tables | `local/docs/QUIRKS-SYSTEM.md` + `QUIRKS-AUDIT.md` + `QUIRKS-IMPROVEMENT-PLAN.md` | +| AMD GPU PCIe device-id coverage | `local/docs/3D-DRIVER-PLAN.md` §4.3 | +| Keyboard layout / input method / accessibility | `local/docs/INPUT-STACK-LINUX-ALIGNMENT-PLAN.md` | +| fork-supremacy policy (Cat 2 `+rb` suffix) | `local/docs/LOCAL-FORK-SUPREMACY-POLICY.md` | +| release bumps (operator workflow) | `local/docs/RELEASE-BUMP-WORKFLOW.md` | +| Script behavior / TOOLS.md | `local/scripts/SCRIPT-BEHAVIOR-MATRIX.md` | +| Hardware inventory / bring-up matrix | `local/docs/HARDWARE-NETWORKING-INVENTORY.md` + `HARDWARE-VALIDATION-MATRIX.md` | +| Patching rules + orphan detection | `local/docs/PATCH-GOVERNANCE.md` | + +--- + +## 13. Sign-off + +- **Authored:** 2026-07-27 by audit consolidation (from 12 explore + 2 librarian background agents). +- **Validation bar restated:** §0 (operating principle from `3D-DRIVER-PLAN §10`). +- **Superseded by this doc (post confirmation):** `3D-DRIVER-PLAN.md`, `REDBEAR-FULL-SDDM-BRINGUP.md`, 28 docs in §10.3 deletion manifest. +- **Restore (post confirmation):** `IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` to top-level. +- **Implementations unaffected** until user authorizes a fix pass: all packages continue to compile as today; no code changed by writing this doc. +- **Manual QA tasks recorded**: §5 (Phase-5 GPU submission) and §6 (HW validation) are the + next sequential validation gates and require actual `qemu-system-x86_64` boots with + `redbear-full.iso`. + +For the canonical single-doc-experience after this lands, an engineer should be able to: +(a) read §0 + §1 + §2 + §3 to understand the 3D pipeline state at a glance, (b) read §5/§6 to pick a next task, (c) read §10 + §11 to know what docs/scripts survive consolidation, and (d) read §12 to know which companion-plan to open for deeper context on a specific subsystem. diff --git a/local/patches/kirigami/02-qnetwork-real-implementation.patch b/local/patches/kirigami/02-qnetwork-real-implementation.patch new file mode 100644 index 0000000000..c1bc1c650c --- /dev/null +++ b/local/patches/kirigami/02-qnetwork-real-implementation.patch @@ -0,0 +1,48 @@ +From 8d1d4e1c50a3daa3a4a21c6345e74d5df278f4cd5839875ffd75abc3c1e988f9 Mon Sep 17 00:00:00 2001 +From: Red Bear OS +Date: Mon, 27 Jul 2026 00:00:00 +0900 +Subject: [kirigami] replace lie-grade QNetworkAccessManager null with real instantiation + +The upstream Kirigami Icon primitive uses QNetworkAccessManager to fetch +http:// and https:// icon sources. A Red Bear-specific edit hardcoded +`qnam = nullptr` (with the comment "Redox: networkAccessManager not +available"), unconditionally short-circuiting the network branch on Redox. +This is a lie-grade stub: the build succeeded but the network path was +silently dead. Network icon sources (online avatars, web-app icons, etc.) +would never load on Redox. + +Real QtNetwork IS built and linked via the Qt6::Network module in qtbase +(qtbase is a hard dep of kirigami). The existing handleFinished / +handleRedirect error-handling code already covers the case where the real +request fails (e.g. scheme:network not available) by falling through to +the placeholder icon. So the network primitive can be wired to the real +QNetworkAccessManager without further scaffolding. + +Replace `qnam = nullptr` with `qnam = new QNetworkAccessManager(this)`, +parented to the icon so it's destroyed with the icon. The `engine` check +remains so a QML item without a valid QQmlEngine still skips the branch. +The cache check (`!m_networkReply || m_networkReply->url() != url`) is +preserved so identical URLs don't re-issue the request. + +This is a single hunk; no other changes to kirigami source. + +Upstream: https://invent.kde.org/frameworks/kirigami.git (v6.28.0) +Sourced-from: kirigami-6.28.0 upstream tar via the recipe's + [source] tar = ... line in local/recipes/kde/kirigami/recipe.toml + +--- a/src/primitives/icon.cpp ++++ b/src/primitives/icon.cpp +@@ -513,9 +513,11 @@ void Icon::loadImageFromSource(const QSize &size, const QIconLoaderEnginePtr &iconLoaderEngine) + const auto url = m_source.toUrl(); + QQmlEngine *engine = qmlEngine(this); + QNetworkAccessManager *qnam; +- if (engine && (qnam = nullptr /* Redox: networkAccessManager not available */) && (!m_networkReply || m_networkReply->url() != url)) { ++ if (engine && (!m_networkReply || m_networkReply->url() != url)) { ++ // Real QtNetwork is built and linked via Qt6::Network in qtbase. The ++ // parented QNetworkAccessManager is destroyed with the icon. If ++ // scheme:network is unavailable on this target, handleFinished ++ // falls through to the placeholder icon (see further down). ++ qnam = new QNetworkAccessManager(this); + QNetworkRequest request(url); + request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache); + m_networkReply = qnam->get(request); diff --git a/local/recipes/kde/kirigami/recipe.toml b/local/recipes/kde/kirigami/recipe.toml index 0c9bc8b444..7bcd2776de 100644 --- a/local/recipes/kde/kirigami/recipe.toml +++ b/local/recipes/kde/kirigami/recipe.toml @@ -6,6 +6,12 @@ version = "6.28.0" [source] tar = "https://invent.kde.org/frameworks/kirigami/-/archive/v6.28.0/kirigami-v6.28.0.tar.gz" blake3 = "2b29aad7945b46fbd0fa4ce3b075f6e9062a81d80c512912b3b5bc408d7ec098" +patches = [ + # Kirigami Icon's network branch was hardcoding qnam=nullptr as a Red + # Bear lie-grade; the patch replaces it with a real QNetworkAccessManager + # so http(s) icon sources actually work on Redox. + "02-qnetwork-real-implementation.patch", +] [build] template = "custom" @@ -19,6 +25,9 @@ dependencies = [ script = """ DYNAMIC_INIT +REDBEAR_PATCHES_DIR="${REDBEAR_PATCHES_DIR:-$(cd "$(dirname "${COOKBOOK_RECIPE}")/../../../.." && pwd)}/local/patches/kirigami" +cookbook_apply_patches "${REDBEAR_PATCHES_DIR}" + HOST_BUILD="${COOKBOOK_ROOT}/build/qt-host-build" for qtdir in plugins mkspecs metatypes modules qml; do @@ -80,7 +89,7 @@ cmake "${COOKBOOK_SOURCE}" \ -DQT_HOST_PATH="${HOST_BUILD}" \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_CXX_FLAGS="-include ${COOKBOOK_BUILD}/qml_off_noop.h -I${COOKBOOK_SOURCE}/stubs/QtNetwork -I${COOKBOOK_SYSROOT}/usr/include/QtQml -I${COOKBOOK_SYSROOT}/usr/include/QtQuick" \ + -DCMAKE_CXX_FLAGS="-include ${COOKBOOK_BUILD}/qml_off_noop.h -I${COOKBOOK_SYSROOT}/usr/include/QtQml -I${COOKBOOK_SYSROOT}/usr/include/QtQuick" \ -DCMAKE_PREFIX_PATH="${COOKBOOK_SYSROOT}:${COOKBOOK_STAGE}/usr/lib/cmake" \ -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES="${COOKBOOK_BUILD}/shader_noop.cmake" \ -DBUILD_TESTING=OFF \ diff --git a/local/recipes/kde/kirigami/source/stubs/QtNetwork/QNetworkAccessManager b/local/recipes/kde/kirigami/source/stubs/QtNetwork/QNetworkAccessManager deleted file mode 100644 index c33f49c8ec..0000000000 --- a/local/recipes/kde/kirigami/source/stubs/QtNetwork/QNetworkAccessManager +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef REDBEAR_QNETWORKACCESSMANAGER_STUB -#define REDBEAR_QNETWORKACCESSMANAGER_STUB -#include -class QNetworkReply; -class QNetworkRequest; -class QNetworkAccessManager : public QObject -{ -public: - QNetworkAccessManager(QObject *parent = nullptr) : QObject(parent) {} - QNetworkReply *get(const QNetworkRequest &) { return nullptr; } -}; -#endif diff --git a/local/recipes/kde/kirigami/source/stubs/QtNetwork/QNetworkReply b/local/recipes/kde/kirigami/source/stubs/QtNetwork/QNetworkReply deleted file mode 100644 index 8973add802..0000000000 --- a/local/recipes/kde/kirigami/source/stubs/QtNetwork/QNetworkReply +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef REDBEAR_QNETWORKREPLY_H -#define REDBEAR_QNETWORKREPLY_H -#include -#include -class QNetworkRequest { -public: - enum Attribute { CacheLoadControlAttribute }; - enum CacheLoadControl { PreferCache }; - explicit QNetworkRequest(const QUrl&) {} - void setAttribute(Attribute, CacheLoadControl) {} -}; -class QNetworkAccessManager { -public: - class QNetworkReply; - QNetworkReply* get(const QNetworkRequest&) { return nullptr; } -}; -class QNetworkReply : public QObject { - Q_OBJECT -public: - enum NetworkError { NoError = 0 }; - QUrl url() const { return QUrl(); } - NetworkError error() const { return NoError; } - void close() {} - void abort() {} -}; -#endif diff --git a/local/recipes/kde/kirigami/source/stubs/QtNetwork/QNetworkRequest b/local/recipes/kde/kirigami/source/stubs/QtNetwork/QNetworkRequest deleted file mode 100644 index a72b8e6173..0000000000 --- a/local/recipes/kde/kirigami/source/stubs/QtNetwork/QNetworkRequest +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef REDBEAR_QNETWORKREQUEST_STUB -#define REDBEAR_QNETWORKREQUEST_STUB -#include -#include -class QNetworkRequest -{ -public: - enum Attribute { RedirectionTargetAttribute = 3010, CacheLoadControlAttribute = 3004 }; - enum CacheLoadControl { AlwaysNetwork = 0, PreferCache = 1, AlwaysCache = 2, PreferNetwork = 3 }; - QNetworkRequest(const QUrl &url = QUrl()) : m_url(url) {} - void setAttribute(Attribute, const QVariant &) {} - QUrl url() const { return m_url; } -private: - QUrl m_url; -}; -#endif diff --git a/local/recipes/kde/sddm/stubs/linux/kd.h b/local/recipes/kde/sddm/stubs/linux/kd.h deleted file mode 100644 index 8f0cff7049..0000000000 --- a/local/recipes/kde/sddm/stubs/linux/kd.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _LINUX_KD_H -#define _LINUX_KD_H - -#define KDSETMODE 0x4B3A -#define KDGETMODE 0x4B3B -#define KD_TEXT 0x00 -#define KD_GRAPHICS 0x01 - -#endif diff --git a/local/recipes/kde/sddm/stubs/linux/vt.h b/local/recipes/kde/sddm/stubs/linux/vt.h deleted file mode 100644 index 3d12b1ec02..0000000000 --- a/local/recipes/kde/sddm/stubs/linux/vt.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef _LINUX_VT_H -#define _LINUX_VT_H - -#include - -#define VT_OPENQRY 0x5600 -#define VT_GETMODE 0x5601 -#define VT_SETMODE 0x5602 -#define VT_GETSTATE 0x5603 -#define VT_SENDSIG 0x5604 -#define VT_RELDISP 0x5605 -#define VT_ACTIVATE 0x5606 -#define VT_WAITACTIVE 0x5607 -#define VT_DISALLOCATE 0x5608 -#define VT_GETACTIVE 0x5609 - -#define VT_AUTO 0x00 -#define VT_PROCESS 0x01 - -#define VT_ACKACQ 2 - -#define KDSETMODE 0x4B3A -#define KDGETMODE 0x4B3B -#define KD_TEXT 0x00 -#define KD_GRAPHICS 0x01 - -struct vt_stat { - unsigned short v_active; - unsigned short v_signal; - unsigned short v_state; -}; - -struct vt_mode { - unsigned char mode; - unsigned char waitv; - unsigned short relsig; - unsigned short acqsig; - unsigned short frsig; -}; - -#endif