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
+16
View File
@@ -62,6 +62,22 @@ typedef struct {
unsigned word_count;
void (*serve)(v4_node *n, unsigned request);
/* THE KERNEL'S REGISTRY (MESH.md 9a; #189, ENGINE step 4 Phase 1). A
* request that is not a block's and not one of the kernel's words goes
* to `request`, if there is one: it returns 1 when it served the request
* -- or refused it, raising error 12 on the node itself (v4/manage.h) --
* and 0 when it is not one of its; then the request is error 12, as
* before. 0: none (the hosted product). */
int (*request)(void *self, v4_node *n, v4_cell request);
void *request_self;
/* The kernel's own capsules, by name, loaded after the boot's
* (forth79.4th) and before the system is sealed, so POST runs on them
* and COLD comes back to them: on bare metal, centre.4th and hera.4th
* (#189). 0 of them: the hosted product. */
const char *const *capsules;
unsigned capsule_count;
} v4_boot;
/* What `key` returns when it has no character. */