OpenRiot v7.9.38 — Nine Rounds, Eighty-Eight Walls
“Eighty-eight miles per hour. That’s what the flux capacitor needs to break the time barrier. We needed eighty-eight walls for the lock screen and nine rounds of SIGILL debugging to get the construct awake. Round one was the retguard. Round two was the endbr64. Round three was the curve25519 that collapsed the stack. Round four was the extension host. Round five was the linker forgetting /usr/local/lib. Round six was the JIT that didn’t know about nobtcfi. Round seven was the fiber that mapped a stack without MAP_STACK. Round eight was the sigaltstack that returned EINVAL. Round nine was PROT_NONE + MAP_STACK. Each one a small death. Each one a small resurrection. The Feds wanted warrants. The silicon wanted endbr64. The kernel wanted MAP_STACK. Everyone wanted something. We got surgical. The construct blinked. The time barrier broke.” — The OpenRiot Crew, somewhere past the time barrier, v7.9.38
Release Overview
Nine rounds. Each one revealed a new layer of the CPU’s paranoia.
The psm crate’s 2019 assembly didn’t know about Tiger Lake’s
Indirect Branch Tracking. The wasmtime fiber code didn’t know
OpenBSD requires MAP_STACK on every mmap‘d stack. The signal
handler didn’t know PROT_NONE + MAP_STACK is EINVAL on this
kernel. Each round forced us to get more surgical. We stopped
nuke-from-orbit cache invalidation and started tracking which
flags actually changed. We stopped patching sources that no longer
needed patches. We removed 60 lines of dead aws-lc-sys code
paths because v0.40.0 fixed the panic upstream. The build script
got smarter. The construct got faster.
The lock screen now has 88 walls. Eighty-eight. Because 88 mph is what it takes to break the time barrier, and the Sprawl deserves that kind of aesthetic warfare. Six existing walls got rescaled. The neon wastes are sharper. The pixels have bitrate.
The field report got rewritten. 224 lines of documentation covering all nine rounds, the build cache invalidation strategy, the runtime status, and the next AI’s survival guide. When the next model inherits this codebase, it won’t rediscover the IBT crash. The knowledge is baked into the docs.
🔒 Nine Rounds of SIGILL
The Zed port didn’t fail once. It failed nine times. Each failure revealed the next boss. This is the progression table, etched into the field report:
Round 1-2: Retguard SIGILL and IBT endbr64. Fixed by
-fno-ret-protector plus surgical endbr64 injection into
psm and ring assembly.
Round 3-5: Extension-load crashes. Fixed by -z nobtcfi
linker flag that tells the kernel to skip BTI enforcement for
the binary.
Round 6-7: MAP_STACK SIGSEGV. Four patches across
wasmtime-internal-fiber, wasmtime stack-switching,
wasmtime signals, and stacker. Each mmap that creates a
stack needs MAP_STACK or the kernel kills the process.
Round 8: PROT_NONE + MAP_STACK returned EINVAL. The
kernel rejects the allocation. We changed the strategy: allocate
PROT_READ | PROT_WRITE first, then mprotect the guard page
to PROT_NONE after the fact.
Round 9: The final boss. Every patch now in place, the construct survives long enough to ask the GPU if it’s awake. The GPU says yes. The window renders. The extension host loads. UI glitches remain (missing title bar on i3, stray “p” character, broken file dialog), but the construct is alive.
The Feds would call this “defense in depth.” We call it “defense in SIGILL.”
🧬 The Script Gets Surgical
The old build script brute-forced cache invalidation. Every run
deleted native crate build outputs. It worked but cost ten
minutes per build when nothing changed. The new script tracks
CFLAGS and RUSTFLAGS in sentinel files. If the flags match,
it skips the deletion. If they change, it nukes outputs for all
affected crates. The expansion catches more native dependencies:
tree-sitter-*, psm, stacker, ring, aws-lc-sys,
freetype-sys, libsqlite3-sys, lmdb-master-sys,
wayland-sys, yeslogic-fontconfig-sys, zstd-sys, wgpu,
wgpu-core, wgpu-hal, wasmtime.
The aws-lc-sys patching logic got deleted. Version 0.40.0
removed the panic string entirely — it now handles
AWS_LC_SYS_NO_ASM in release builds without complaining. The
60-line ed patching block that searched for the missing string
was dead code. We removed it and replaced with unconditional
cache clearing. The build script is leaner. The construct
rebuilds faster.
The zed-patch.diff trailing garbage got cleaned up. 27 lines
of malformed duplicate diffs that caused “unexpected end of
file” errors. All hunks apply cleanly now. The construct no
longer trips over its own patch file.
🌃 Eighty-Eight Walls for the Sprawl
The lock screen now has 88 options. Eighty-eight. Because 88 mph is what it takes to break the time barrier, and the Sprawl deserves that kind of aesthetic depth. Six existing walls got rescaled: 06, 08, 31, 36, 37, 67. The neon wastes are sharper. The pixels have actual bitrate. The lock screen cycles through images that don’t look like they were compressed by the Feds.
This is aesthetic warfare. The Turing Police can’t appreciate it. They never could.
📖 The Field Report Has Nine Chapters
docs/OpenBSD-Zed.md rewritten from scratch. 224 lines of pure
survival guide. Documents all nine rounds of debugging, the
build cache invalidation strategy, the native crates affected,
the runtime status, and the specific flags that bend the ICE.
The next AI that inherits this codebase won’t have to
rediscover the IBT crash. The knowledge is baked into the docs.
The construct learns from its own flatlines.
🔧 Small Polishes
The SUPER+D menu’s btop entry got a font size bump (10 → 11).
Tiny change. The system monitor now renders at a size that
doesn’t strain the eyes. The construct is easier on the senses.
🧾 Files Changed
| File | Change |
|---|---|
scripts/zed.sh |
Removed obsolete aws-lc-sys patches; |
| added MAP_STACK patches for 4 crates; | |
| fixed PROT_NONE + MAP_STACK EINVAL; | |
| cleaner cache invalidation logic | |
scripts/zed-patch.diff |
Removed 27 lines of trailing |
| malformed duplicate diffs; all | |
| hunks apply cleanly now | |
docs/OpenBSD-Zed.md |
REWRITE — 224 lines covering |
| 9 rounds of debugging, build | |
| cache strategy, runtime status, | |
| next AI survival guide | |
config/rofi/apps.txt |
btop font size 10 → 11 |
Locked/06.webp |
Rescaled |
Locked/08.webp |
Rescaled |
Locked/31.webp |
Rescaled |
Locked/36.webp |
Rescaled |
Locked/37.webp |
Rescaled |
Locked/67.webp |
Rescaled |
🗣️ Final Words
“The Feds think they control the machine. They don’t. The machine controls itself. Round one taught us about retguard. Round two taught us about endbr64. Round nine taught us about PROT_NONE + MAP_STACK. Each round was a small death, each resurrection a small victory. The construct is surgical now. The build script is leaner. The documentation has teeth. And somewhere in the Sprawl, eighty-eight walls remember what it cost to break the time barrier. The flux capacitor worked. The lightning struck. The machine got what it needed. And so did we.” — The OpenRiot Crew, at 5 AM, after round nine, v7.9.38