Read ADRs selectively by scope. Accepted records remain historical contracts;
the supersession columns identify only explicit replacement, not later feature
growth.
| ADR | Title | Status | Scope | Supersedes | Superseded by |
|---|---|---|---|---|---|
| 0001 | Start with AArch64 on QEMU virt | Accepted | Architecture strategy | - | - |
| 0002 | AArch64 IRQ path via GICv2 and timer | Accepted | AArch64 IRQ | - | - |
| 0003 | Preemptive IRQ-return switching | Accepted | Scheduler/ABI | - | - |
| 0004 | Boot/exception separation | Accepted | AArch64 exceptions | - | - |
| 0005 | One-shot timer deadline engine | Accepted | Time | - | - |
| 0006 | Time-owned timed events | Accepted | Time/scheduler | - | 0032 (timed wait identity only) |
| 0007 | DTB memory map and frame allocator | Accepted | Memory | - | - |
| 0008 | AArch64 soft-float target | Accepted | Build/ABI | - | - |
| 0009 | Bootstrap heap on frame allocation | Accepted | Memory | - | - |
| 0010 | IRQ-safe heap policy | Accepted | Memory/RT | - | 0029 (heap lock ownership only) |
| 0011 | Preallocated scheduler/time structures | Accepted | Scheduler/time | - | 0028 (saved-frame backing only) |
| 0012 | Bounded mailbox IPC | Accepted | IPC | - | 0029 (lock naming only), 0032 (waiter identity only) |
| 0013 | Mailbox timeout semantics | Accepted | IPC/time | - | 0032 (timeout identity and loser cleanup only) |
| 0014 | Bounded kernel thread lifecycle | Accepted | Threads | - | 0032 (join waiter identity), 0033 (slot identity and stack/context ownership) |
| 0015 | AArch64 high-half MMU | Accepted | AArch64/MMU | - | - |
| 0016 | First AArch64 EL0 process | Accepted | Userspace/MMU | - | - |
| 0017 | Process table and user faults | Accepted | Processes | - | 0032 (join/wait registration identity), 0033 (main-thread join and user-stack ownership) |
| 0018 | Userspace ELF loader only | Accepted | Loader | - | - |
| 0019 | Readonly ramfs and FD table | Accepted | FD ABI; original backing partially replaced | - | 0021 (backing only) |
| 0020 | UART stdin and shell | Accepted | Console/userspace | - | 0032 (stdin waiter identity only) |
| 0021 | CPIO initramfs root | Accepted | Filesystem backing | 0019 (backing only) | - |
| 0022 | Minimal process control | Accepted | Processes/syscalls | - | 0033 (main-thread resource transfer and reap) |
| 0023 | Directory FDs and getdents64 | Accepted | Filesystem ABI | - | - |
| 0024 | Process cwd and path traversal | Accepted | Filesystem/process | - | - |
| 0025 | Automated testing and releases | Accepted | Verification/release | - | - |
| 0026 | Agent-oriented development workflow | Accepted | Repository workflow | - | - |
| 0027 | Typed active context and syscall boundary | Accepted | Kernel/AArch64 context boundary | - | 0028 (saved-frame bridge only) |
| 0028 | Typed saved context and scheduler ownership | Accepted | Scheduler/AArch64 context ownership | 0011 (saved-frame backing), 0027 (saved-frame bridge) | - |
| 0029 | Local IRQ and task preemption exclusion | Accepted | Synchronization/memory/RT | 0010 (heap lock ownership), 0012 (lock naming) | 0030 (transitional preemption backend only) |
| 0030 | Nested preemption control and deferred rescheduling | Accepted | Synchronization/scheduler/RT | 0029 (transitional preemption backend only) | - |
| 0031 | Centralized scheduler state transitions | Accepted | Scheduler/lifecycle/RT | - | 0032 (blocked-state identity), 0033 (thread-only transition identity and terminology) |
| 0032 | Typed wait registrations and external wake ownership | Accepted | Scheduler/waits/RT | 0006 (timed wait identity), 0012 (waiter identity), 0013 (timeout identity and loser cleanup), 0014 (join waiter identity), 0017 (join/wait registration identity), 0020 (stdin waiter identity), 0031 (blocked-state identity) | 0033 (active wait ownership and diagnostic kind removal) |
| 0033 | Unified thread model and scheduler/process separation | Accepted | Scheduler/process/memory ownership | 0014 (slot identity and stack/context ownership), 0017 (main-thread join and user-stack ownership), 0022 (main-thread resource transfer and reap), 0031 (thread-only transition identity), 0032 (active wait ownership and diagnostic kind removal) | - |
| 0034 | Process subsystem module boundaries | Accepted | Process source boundaries | - | - |
Use TEMPLATE.md for new decisions.