The MVK boots (#26), but kernel/src/mvk_poc.home is written to fit the kernel backend's current shape: integer literals, local function calls, and simple-form inline assembly. That is why its proof-of-life message is spelled out through 32 putc() calls instead of printed from a string.
The distance from that file to the 41-file MVK set in MASTER_PLAN Appendix A is the largest remaining piece of Phase 0. The original plan collapsed it into one bullet ("the home compiler builds the MVK file-set end-to-end"); it is a dozen independent features. Tracked here as A9 and MASTER_PLAN §5 Phase 0.5.
The ladder
Each step adds exactly one language feature and must still boot and print. A step is done when a kernel using that feature passes boot-qemu-x86_64. Ordered because each depends on the last:
- String literals in
.rodata— replaces theputc()spelling with a realprint() - Arrays and indexing
- Structs and field access
while/forover data- Function pointers
- Imports across files
const/comptimeevaluation- Volatile MMIO load/store semantics (milestone A3 — also the prerequisite for ever un-stubbing S8 honestly, #36)
The ratchet
A CI job mvk-compiles records how many of the 41 Appendix A files reach codegen. The number may never fall. This replaces "does the tree compile" — an all-or-nothing question that reads "no" for months and tells nobody anything — with a number that moves every week.
Diagnostics are a deliverable
Every file that fails to compile must fail with file:line:col, expected/found types, and a suggested fix (the A2 bar). A compile ratchet whose failures are not actionable is just a number.
Housekeeping
- Consolidate the two serial implementations (
kernel/src/serial.home,kernel/src/drivers/serial.home) before either becomes a compile target — noted in Appendix A's known gaps.
Most of the work here lands in home-lang/home, per decision D2.