ReviewOS

home-lang/home-os

Phase 0 — Truth & Toolchain (umbrella)

#22
Open chris opened this 9 days ago ·
9 days ago

Tracking issue for MASTER_PLAN.md Phase 0.

Exit gate: Home-compiled Minimum Viable Kernel boots in QEMU under CI; build system and docs stop lying. Tag: v0.1.

Subtasks (all verified locally 2026-08-24; see evidence comment):

  • A1: Parse-100 — all kernel .home files parse (410/410, closed via #23)
  • S1: Remove silent fallbacks from scripts/build.sh (closed via #24)
  • CI job parse-rate green on every commit (closed via #25)
  • CI job boot-qemu-x86_64 boots the MVK and asserts proof-of-life on serial (closed via #26)
  • MVK proof-of-life pipeline: Home → x86-64 codegen → link via kernel/linker.ld → multiboot2 image → QEMU serial (closed via #26)
  • §13 docs realignment (closed via #27)
  • Remaining for Phase 0 exit: the compiler builds the full Appendix A MVK file-set end-to-end (A2/A3/A4) — tracked as #38 (Phase 0.5 codegen widening). One hand-shaped file boots today; 3/39 Appendix A files reach codegen (scripts/mvk-compiles.sh, floored at 3).

Related: #1, #6, #7, #8, #12, #20

9 days ago

Phase 0 status snapshot (measured locally, main @ a498cd1):

$ ./scripts/parse-rate.sh --strict
parse-rate: 410/410 (100%)

$ ./scripts/build.sh mvk          # Home -> x86-64 asm -> multiboot2 ELF + flat bin
[OK] MVK built: home-kernel.bin (4.1K)

$ ./scripts/boot-test.sh          # QEMU, -serial stdio -display none
HomeOS v0.1: kernel_main reached
PASS: proof-of-life string found on serial.

$ ./scripts/mvk-compiles.sh
mvk-compiles: 3/39 Appendix A files reach codegen   (floor: 3)

Every Phase 0 gate is green except the Appendix-A-wide compile (#38). Tag v0.1 waits on #38 per the revised plan (§5.1).

9 days ago

Blocked: GitHub Actions is disabled for this repository.

No workflow has run since 2026-05-08 despite ~30 commits landing on main since then; the API returns 422 "Actions has been disabled for this repository." on workflow dispatch. The /actions/permissions endpoint reports enabled, so this is most likely an account/org-level setting or a billing/spending limit.

Until it is re-enabled, all phase gates (parse-rate, stub-register, mvk-compiles, boot-qemu-x86_64) exist only as local scripts. They were verified green locally today (see the snapshot above), but per the standing rule — every claim of completion must be CI-verifiable — Phase 0 cannot formally exit while the verifier itself is offline.

Fix: repo Settings → Actions → General (allow all), and check org/billing spending limits.

9 days ago

Phase 0 status — four of five gates green, and the fifth is now measured rather than assumed.

GateState
parse-rate✅ 410/410
stub-register✅ 7 open entries, all marked and placed
boot-qemu-x86_64✅ a Home-compiled kernel boots and prints on serial
typecheck✅ 35/35 (A2 complete — #40)
mvk-compiles✅ 35/35 (A9 complete — #38)
mvk-links⬜ 0 duplicate, 95 undefined — #41

What Phase 0 actually turned out to be about

The plan framed Phase 0 as "truth & toolchain". That was right, but not in the way it read. Three times over, the blocker was not missing capability — it was unmeasured capability, and each time the measurement found the codebase was in a different state than anyone believed:

  • build.sh had four silent fallbacks, including one that substituted an hlt-loop stub for a missing compiler and reported success (#24).
  • The stub register was a table in a document that no CI job enforced, and not one // STUB marker existed in the tree (#25).
  • The type checker already met A2's diagnostics bar and had never been run — first measurement 35/39 (#40).
  • The codegen ratchet reported 34/39 while the backend was silently emitting nothing for 1,235 constructs it did not recognise (#38).
  • The 35 files all compiled individually and had never been linked together; doing so found 13 duplicate symbols and 188 references to functions nobody wrote (#41).

Every one of those was invisible to a green build.

Scope corrections to Appendix A

The set went from 41 files to 35, in both cases because linking showed a dependency the plan had not accounted for:

  • integration.home initialised the package manager, the den shell and the Craft GUI toolkit — 61 of the 188 undefined symbols, from a single call commented "legacy integration".
  • net/socket, net/tcp, net/udp — removed by taking Appendix A's own recommendation to shrink the entry's imports.

Appendix A's "Known gaps: none — every candidate role resolved to a real file" was wrong and is corrected in the plan.

To close this issue

Drive #41 to zero, then link and boot the whole set. That is the last gate item.

Sign in to comment on this issue.