feat(v4.0.0): POST is the kernel's -- the boot feeds the cases, and nothing of the harness is on the node

The boot runs POST with the runner (v4/system/post.c) after the capsules:
it feeds the 538 cases to the node and judges them from outside.  A
case's printing no longer reaches the console.  What the cases define
stays in the dictionary, as in v3; the system is sealed after POST and
the boot prints PARITY:V4_SYSTEM word_count=N dict_hash=..., as v3 prints
its parity after POST.

Gone: capsules/v4/post79.4th and its blocks 7000 up; the harness words;
(CATCH) and (EMIT-HOOK), with what EMIT and the prompt loop did for them.

The generator runs v3 on the lines as the kernel sends them, without the
capsule's "T| ".  One expected result follows from that: >IN.initial
prints 6, not 9.

make -C v4 test, sanitize and hosted-check pass; amd64, aarch64 and
riscv64 boot, POST 538 of 538, word_count=411, dict_hash
0x6fb1d09418b189ee on all six: logs/20261007-105118, -105335, -105651.
T{ is unknown at the prompt; RS1 prints 42 42 before and after COLD.  A
scratch build with one expectation changed names the case and ends
PARITY:FAIL, POST: FAILED.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rajames
2026-10-07 10:59:02 -04:00
co-authored by Claude Opus 5.5
parent 2bf958ce3a
commit 4bdb210a99
20 changed files with 659 additions and 1981 deletions
+24 -2
View File
@@ -705,8 +705,30 @@ Each is tested, committed and pushed before the next.
release by asking, holes. Its acceptance is to be approved before it is
built.
**6b. POST is the kernel's.** Ruled 2026-10-07 (section 9); design
approved 2026-10-07, `NUCLEUS.md` 6.3 and section 7. Acceptance, as
approved:
approved 2026-10-07, `NUCLEUS.md` 6.3 and section 7.
**Done 2026-10-07.**
- *The cases* (`v4/system/post_cases.c`, written by `v4/tools/mkpost.py`):
the same 538, checked against the capsule case by case. One expected
result changed: `>IN.initial` prints 6 where it printed 9, because a
case's line no longer begins with the capsule's `T| `; the generator
now runs v3 on the lines as the kernel sends them.
- *The runner* (`v4/system/post.c`), tested in
`v4/tests/test_host_quit.c` with cases that must pass and cases that
must fail.
- *The boot* (`v4/system/boot.c`) runs it after the capsules, prints
`PARITY:V4_SYSTEM`, and seals. `capsules/v4/post79.4th`, `(CATCH)` and
`(EMIT-HOOK)` are gone.
- *Verified.* `make -C v4 test`, `sanitize` and `hosted-check`; three
bare-metal boots, `logs/20261007-105118` (amd64), `-105335`
(aarch64), `-105651` (riscv64). On all six: POST 538 of 538,
`word_count=411`, `dict_hash=0x6fb1d09418b189ee`. At the prompt `T{`
is unknown, and `RS1`, which a case defines, prints `42 42` before and
after `COLD`. A hosted program built with one case's expected output
changed names the case and ends `PARITY:FAIL`, `POST: FAILED`.
- What the cases define takes 1,385 cells of the dictionary space's
5,632.
Acceptance, as approved:
1. *Same verdict.* The three hosted programs and the three bare-metal
boots print `PARITY:V4_POST tests=538 pass=538 fail=0`,
`PARITY:V4_SYSTEM word_count=N dict_hash=0x...`, `PARITY:OK` and