feat(kernel): Hera in the kernel's fabric and registry; centre.4th and hera.4th on her

#189, ENGINE step 4 Phase 1, Task 5a. Captain Bob, 2026-11-13: "Full
births now"; "Hera as now, in a fabric".

- sk_v4.c: the kernel's fabric (v4/fabric.h), Hera's node at its one
  place, entered in its registry (v4/manage.h) as node 10. The registry's
  answers are real: a birth is "no room" -- the fabric has one place
  until 5b; CAPSULE-OPEN/-LINE read the kernel's capsule directory,
  checked as the boot checks (no capsule of F18 code is there until 5b);
  a born node's parity line. She is not told her number: the boot's
  console addresses node 0 (told 10, the boot stopped after POST -- kept,
  labelled, logs/20261113-132712).
- boot.h/boot.c: v4_boot's `request` hook (the registry's requests) and
  `capsules` (the kernel's own, loaded before the seal, so POST runs on
  them). hosted.c sets neither: the hosted product's boot is as it was.
- kernel/Makefile: manage.c in the kernel's v4 engine.
- qemu_session.py: a v4 acceptance boot asks NODE-ME . and wants 0.
- v4-dictionary.tsv: the 55 words of centre.4th and hera.4th, written
  from their source and manage.h; mkdictionary.py loads the kernel's
  capsules into the hosted system before WORDS, so the live list is the
  kernel's -- 375 words.
- .claude/memory/rules.md, rule 6: every boot command under timeout 570.

Seen to fail first (logs/20261113-132410): NODE-ME was an unknown word.
After: amd64 NODE-ME . gives 0 ok; POST 539/539; word_count 375. v4
suite: test, test-32 99 programs 0 failures; v4-checks 79 under the
sanitizers 0 failures, the hosted builds alike.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RzZgrf7V7Zk2iczBXDRbm
This commit is contained in:
Claude
2026-11-13 14:24:27 +00:00
parent c32cd04388
commit f10d2bc835
21 changed files with 348 additions and 24 deletions
@@ -139,10 +139,17 @@ own sources.
Each its own increment, each test first, each a boot:
- [ ] **5a. A fabric in the kernel, Hera in it.** `v4/src/fabric.c` and `manage.c` into the kernel
build; Hera, node 10, at a place of a kernel fabric, entered in the registry; the prompt's lines go
to her through it. `centre.4th` and `hera.4th` loaded on her: `NODE-ME` answers her place (word
count and `dict_hash` change).
- [x] **5a. A fabric in the kernel, Hera in it.** Ruled 2026-11-13 (Captain Bob): **"Hera as now, in
a fabric"** -- she boots by `v4_boot_run` as before (the hosted product's parity kept), and her node
is place 0 of the kernel's fabric (`sk_v4.c`), entered in the registry as node 10; her registry
requests go to `v4_manage_serve` through `v4_boot`'s new `request` hook, and `centre.4th` and
`hera.4th` are loaded on her through its new `capsules` list -- before the seal, so POST runs on
them. The fabric has one place: `NODE-BORN` is answered "no room" until 5b. `CAPSULE-OPEN/-LINE`
read the kernel's capsule directory, checked as the boot checks; no capsule of F18 code is there
until 5b. She is not told her number ((ME) stays 0): the boot's console addresses node 0. Word
count 375 (55 from the two capsules), each in the dictionary; `mkdictionary.py` loads the kernel's
capsules into the hosted system before `WORDS`, so the live list is the kernel's.
Seen to fail first: the acceptance check `NODE-ME .` gave UNKNOWN WORD; then `0 ok`.
- [ ] **5b. Births.** `NODE-BORN`: room for a node from the kernel's heap, a place in the fabric, a
Stadium quota granted from Hera's under the new node's key (`stadium_node_key(number)`), its
opcode patrons; `NODE-KILL` gives the room and the quota back. The capsule words