Define local overlay governance

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-15 12:57:07 +01:00
parent 67839a0914
commit 7ea90d2893
+144 -6
View File
@@ -31,6 +31,67 @@ make all CONFIG_NAME=redbear-full # Rebuild with latest
Red Bear OS tracks the Redox OS build system as upstream. The `local/` directory
survives upstream updates untouched.
## SOURCE-OF-TRUTH RULE (VERY IMPORTANT)
Treat the repository as two different layers with different durability guarantees:
### 1. Upstream-owned layer — disposable, refreshable every day
These paths are expected to be replaced, refetched, or regenerated when upstream changes:
- `recipes/*/source/`
- most of `recipes/` outside our symlinked `local/recipes/*` overlays
- `config/desktop.toml`, `config/minimal.toml`, and other mainline configs
- generated build outputs under `target/`, `build/`, `repo/`, and recipe-local `target/*`
For relibc specifically, **`recipes/core/relibc/source/` is upstream-owned working source**, not
Red Bears durable storage location. We may build and validate there, but we must not rely on that
tree alone to preserve Red Bear work.
### 2. Red Bear-owned layer — durable, must survive upstream refresh
These paths are our actual long-term source of truth:
- `local/patches/` — all durable changes to upstream-owned source trees
- `local/recipes/` — Red Bear recipe overlays and new packages
- `local/docs/` — Red Bear planning, validation, and integration documentation
- tracked Red Bear configs such as `config/redbear-*.toml`
If we can fetch fresh upstream sources tomorrow, reapply `local/patches/*`, relink
`local/recipes/*`, and rebuild successfully, then the work is in the right place.
If a change exists only inside an upstream-owned `recipes/*/source/` tree, then it is **not yet
preserved**, even if the current build happens to pass.
### Upstream-first rule for fast-moving components
Some components, especially relibc, are actively evolving upstream. For those areas, Red Bear must
prefer the upstream solution whenever upstream already solves the same problem.
That means:
- if our local patch solves a gap that upstream still has, keep the patch carrier
- if upstream lands an equivalent or better solution, prefer upstream and shrink or drop our local patch
- do not keep a Red Bear patch just because it existed first; keep it only while it still provides unique value
For relibc specifically, patch carriers should be treated as **temporary compatibility overlays**,
not a permanent fork strategy.
### Daily-upstream-safe workflow
For any change to upstream-owned source:
1. make the minimal working change in the live source tree if needed for validation
2. prove it builds/tests against the real recipe
3. mirror that delta into `local/patches/<component>/...`
4. update `local/docs/...` so the rebuild/reapply story is explicit
5. assume the live upstream source tree may be thrown away and recreated at any time
The success criterion is therefore:
> We can pull renewed upstream sources every day, reapply Red Bears local overlays, and still
> build the project successfully.
```bash
# Automated sync (preferred):
./local/scripts/sync-upstream.sh # Fetch + rebase + check patches
@@ -78,7 +139,7 @@ redox-master/ ← git pull updates mainline Redox
│ ├── patches/
│ │ ├── kernel/ ← Kernel patches (ACPI, x2APIC)
│ │ ├── base/ ← Base patches (acpid fixes, power methods, pcid /config endpoint)
│ │ ├── relibc/ ← relibc patches (POSIX: eventfd, signalfd, timerfd)
│ │ ├── relibc/ ← relibc compatibility overlays still needed beyond upstream (eventfd, signalfd, timerfd, waitid, SysV IPC)
│ │ ├── bootloader/ ← Bootloader patches
│ │ └── installer/ ← Installer patches (ext4 filesystem support)
│ ├── Assets/ ← Branding assets (icon, loading background)
@@ -90,7 +151,10 @@ redox-master/ ← git pull updates mainline Redox
│ │ ├── fetch-firmware.sh ← Download AMD firmware
│ │ ├── build-amd.sh ← Legacy AMD-specific build (use build-redbear.sh)
│ │ ├── test-amd-gpu.sh ← AMD GPU test script
│ │ ── test-baremetal.sh ← Bare metal test script
│ │ ── test-baremetal.sh ← Bare metal test script
│ │ ├── validate-vm-network-baseline.sh ← Static repo-level VM networking baseline check
│ │ ├── test-vm-network-qemu.sh ← QEMU launcher for the VirtIO VM networking baseline
│ │ └── test-vm-network-runtime.sh ← In-guest runtime check for the VM networking baseline
│ └── docs/ ← Integration docs
```
@@ -106,6 +170,47 @@ redox-master/ ← git pull updates mainline Redox
# Live ISO
./local/scripts/build-redbear.sh redbear-live && make live CONFIG_NAME=redbear-live
# VM-network baseline validation helpers
./local/scripts/validate-vm-network-baseline.sh
./local/scripts/test-vm-network-qemu.sh redbear-minimal
# Then run inside the guest:
# ./local/scripts/test-vm-network-runtime.sh
# Phase 3 runtime-substrate validation
./local/scripts/test-phase3-runtime-substrate.sh --qemu redbear-desktop
# Low-level controller validation
./local/scripts/test-xhci-irq-qemu.sh --check
./local/scripts/test-msix-qemu.sh
./local/scripts/test-iommu-qemu.sh
./local/scripts/test-usb-storage-qemu.sh
# The current xHCI proof checks for an interrupt-driven mode in boot logs.
# The current MSI-X proof uses the live virtio-net path in QEMU.
# The current IOMMU proof checks for the AMD IOMMU device plus guest boot reachability.
# The USB storage proof currently verifies whether usbscsid autospawns without hitting crash-class errors.
# Phase 4 Wayland runtime validation
./local/scripts/build-redbear.sh redbear-wayland
./local/scripts/test-phase4-wayland-qemu.sh
# Then run inside the guest:
# redbear-phase4-wayland-check
# Phase 5 desktop/network plumbing validation
./local/scripts/build-redbear.sh redbear-full
./local/scripts/test-phase5-network-qemu.sh --check
# Then run inside the guest:
# redbear-phase5-network-check
# Phase 6 KDE session-surface validation
./local/scripts/build-redbear.sh redbear-kde
./local/scripts/test-phase6-kde-qemu.sh --check
# Then run inside the guest:
# redbear-phase6-kde-check
# redbear-netctl user-facing alias
redbear-netctl --help
# Or manually:
make all CONFIG_NAME=redbear-desktop
@@ -130,6 +235,31 @@ When mainline updates affect our work:
| rsext4 | ext4 crate API changes | `local/recipes/core/ext4d/source/` Cargo.toml |
| Installer | ext4 dispatch, filesystem selection | `local/patches/installer/redox.patch` |
## PLANNING NOTES
- `docs/07-RED-BEAR-OS-IMPLEMENTATION-PLAN.md` is the canonical public execution plan.
- `local/docs/AMD-FIRST-INTEGRATION.md` remains the deeper AMD-specific technical roadmap, but AMD
and Intel machines are now equal-priority Red Bear OS targets.
- `local/docs/PHASE-0-3-REASSESSMENT.md` explains how to read the early phases consistently when
the historical hardware-enablement phases and newer product-enablement phases use different
numbering.
- `local/docs/WIFI-IMPLEMENTATION-PLAN.md` is the current Wi-Fi architecture and rollout plan,
including the bounded role of `linux-kpi` and the native wireless control-plane direction.
- `local/docs/USB-IMPLEMENTATION-PLAN.md` and `local/docs/BLUETOOTH-IMPLEMENTATION-PLAN.md` should
also be treated as first-class subsystem plans, not as side notes.
- `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` is the current umbrella plan for
IRQ delivery, MSI/MSI-X quality, IOMMU validation, and other low-level controller completeness work.
The current execution order for these subsystem plans is:
1. IRQ / low-level controller quality
2. USB maturity
3. Wi-Fi native control plane and first driver family
4. Bluetooth controller + host path
5. desktop/session compatibility on top of those runtime services
Do not present USB, Wi-Fi, Bluetooth, or low-level controller work as optional or secondary.
## FILESYSTEMS
Red Bear OS supports two filesystems:
@@ -241,6 +371,9 @@ local/Assets/
```
redbear-live.toml
└── redbear-desktop.toml
├── redbear-legacy-base.toml ← Neutralize broken base legacy init scripts
├── redbear-device-services.toml ← Shared firmware-loader / evdevd / udev service wiring
├── redbear-netctl.toml ← Shared Red Bear network profile files + netctl boot service
├── desktop.toml (mainline)
│ ├── desktop-minimal.toml
│ │ └── minimal.toml
@@ -248,9 +381,9 @@ redbear-live.toml
│ └── server.toml
│ └── minimal.toml
│ └── base.toml
└── [packages] redbear-release, redox-driver-sys, linux-kpi,
firmware-loader, redox-drm, cub, redbear-hwutils,
redbear-netctl, evdevd, udev-shim, redbear-meta
└── [packages] redbear-release, redbear-hwutils, redbear-netctl,
firmware-loader, evdevd, udev-shim, redbear-info,
mc, cub
NOTE: ext4d is inherited from desktop.toml (mainline package)
NOTE: cub is included via redbear-desktop.toml and depends on the custom
recipe symlink (recipes/system/cub → local/recipes/system/cub) being
@@ -267,6 +400,11 @@ redbear-full.toml
└── redbear-device-services.toml ← Shared firmware-loader / evdevd / udev service wiring
└── redbear-netctl.toml ← Shared Red Bear network profile files + netctl boot service
redbear-wayland.toml
└── wayland.toml (mainline-derived Wayland profile)
└── runtime surface: orbital-wayland → smallvil
└── validation entrypoints: test-phase4-wayland-qemu.sh + redbear-phase4-wayland-check
redbear-kde.toml
└── desktop.toml (mainline)
└── redbear-legacy-base.toml ← Neutralize broken base legacy init scripts
@@ -281,7 +419,7 @@ redbear-minimal.toml
└── redbear-device-services.toml ← Shared firmware-loader / evdevd / udev service wiring
└── redbear-netctl.toml ← Shared Red Bear network profile files + netctl boot service
└── [packages] redbear-release, redbear-hwutils, redbear-netctl,
redox-driver-sys, firmware-loader, evdevd, udev-shim
firmware-loader, evdevd, udev-shim, redbear-info
```
Config comparison: