fix(v4.0.0): POST leaves nothing, as v3 really does; and what the review of step 6b found
Captain Bob was told that v3 leaves the words POST's cases define in the
dictionary, and ruled that v4 should. That was false: v3's run_test_suite
puts the dictionary back after each word's cases (test_common.c:333,
:365). Shown that, he ruled that POST leaves nothing. The boot now
seals the system, runs POST, and has the node do COLD, whose printing is
not shown; PARITY:V4_SYSTEM is the system as sealed.
A case the node does not come back from ends POST there, named, with how
many were not run: it would have stalled the boot for hours, where the
capsule had ended it. The runner's test of it now uses a word that
really never ends.
hosted-check also requires that RS1 and T{ are unknown after boot, and
boots a program whose POST has failing cases (tests/post_cases_fail.c):
PARITY:FAIL, POST: FAILED, no prompt, none of a case's printing shown.
Comments and documents that still named the POST capsule or its two
hooks are brought up to date; NUCLEUS.md 6.3 says what v3 does, with the
lines, and how the wrong ruling came about.
make -C v4 test, sanitize and hosted-check pass; amd64, aarch64 and
riscv64 boot, POST 538 of 538, word_count=314, dict_hash
0x220ab283a504a3b3 on all six: logs/20261007-112638, -112901, -113220.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
eda6577a53
commit
18adf59091
+18
-10
@@ -753,15 +753,21 @@ Each is tested, committed and pushed before the next.
|
||||
- *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.
|
||||
- *First built* with what the cases define left in the dictionary
|
||||
(`4bdb210a`; `logs/20261007-105118`, `-105335`, `-105651`).
|
||||
- *Review, 2026-10-07*, by a fresh reviewer. It found that v3 does not
|
||||
leave them (above, and `NUCLEUS.md` 6.3), and that a case the node did
|
||||
not come back from would have stalled the boot for hours where the
|
||||
capsule had ended it. Changed: the boot seals, runs POST, and has the
|
||||
node do `COLD`; the runner ends POST at such a case and names it;
|
||||
`hosted-check` boots a program whose POST has failing cases
|
||||
(`v4/tests/post_cases_fail.c`) and requires `PARITY:FAIL`, `POST:
|
||||
FAILED`, no prompt, and none of a case's printing on the console.
|
||||
- *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.
|
||||
bare-metal boots, `logs/20261007-112638` (amd64), `-112901`
|
||||
(aarch64), `-113220` (riscv64). On all six: POST 538 of 538,
|
||||
`word_count=314`, `dict_hash=0x220ab283a504a3b3`. At the prompt `T{`
|
||||
and `RS1` are unknown words, and `HERE` is 8300.
|
||||
|
||||
Acceptance, as approved:
|
||||
1. *Same verdict.* The three hosted programs and the three bare-metal
|
||||
@@ -771,8 +777,10 @@ Each is tested, committed and pushed before the next.
|
||||
2. *Nothing of the harness is on the node.* At the prompt `T{` is an
|
||||
unknown word, and `(CATCH)` and `(EMIT-HOOK)` are gone from the
|
||||
nucleus.
|
||||
3. *What the cases define is there.* A word a case defines can be used
|
||||
at the prompt after boot, and survives `COLD`.
|
||||
3. ~~What the cases define is there.~~ **Reversed 2026-10-07:** *POST
|
||||
leaves nothing.* A word a case defines is unknown at the prompt
|
||||
after boot. (The first form rested on a false statement about v3;
|
||||
`NUCLEUS.md` 6.3.)
|
||||
4. *The judge can fail.* Given a case with a wrong expected stack, one
|
||||
with wrong expected output, one that must end in an error and does
|
||||
not, and one that ends in an error and must not, the runner reports
|
||||
|
||||
Reference in New Issue
Block a user