Move fabric.4th + font.4th to hestia/init.4th -- FABRIC-3.6.md tasks 1.6+1.7 (merged)

Tasks 1.6 and 1.7 are not independent, and the punchlist's split was
wrong: font.4th calls G-LINE/G-ELLIPSE, which are fabric.4th's own
words. Confirmed live before committing to an approach -- removed only
fabric.4th's EXEC from init.4th, left font.4th's in place, booted
amd64: Hera's boot floods with UNKNOWN WORD: 'G-LINE'/'G-ELLIPSE' the
moment font.4th loads (logs/20260919-171047/amd64/, kept as evidence).
Reverted that partial state, asked Captain Bob how to proceed given
neither task can independently pass its own three-arch-boot check, and
was told to use best practices.

Moved both together, in their original relative order, into a new
capsules/hestia/init.4th block 4988 -- a deliberate, documented
deviation from "one task, one commit," not a bundling of convenience.

Three-arch boot clean: amd64/aarch64/riscv64 all reach [zuse@Hera] ok>,
zero UNKNOWN WORD. Hestia's dict_hash identical across all three
architectures. Verified the shrink/grow live, not just inferred from
hash movement: HERE reads 20008 in Hera, 63040 in Hestia post-move.
CART-PLOT in Hera is UNKNOWN WORD; the identical call routed into
Hestia via VM-EXEC reaches the word and fails on a stack underflow
instead, proof it exists there since an unknown word can't underflow.

mkcapsule --lint capsules/ clean, 38 files / 0 violations. MANIFEST.md
updated: init.4th's block 2049 entry no longer lists fabric.4th/
font.4th; hestia/init.4th's entry gains block 4988.

Authorized by Captain Bob ("Use best practices.").

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Robert Allan James
2026-09-19 17:25:23 -04:00
co-authored by Claude Sonnet 5
parent 487769e18a
commit 5afb33049f
13 changed files with 40538 additions and 23 deletions
+29 -2
View File
@@ -379,9 +379,36 @@ Hestia; headless policy intact.
the idle prompt for 5–10s on all three architectures and confirmed it **stopped growing**
(last real output, `StarForth CLI`/`ok>`, with nothing appended after) rather than flooding
or silently stalling mid-boot. No compiler warnings.
- [ ] **1.6** — Move `fabric.4th` from `init.4th` to `hestia/init.4th`. *Check:* Hera's dict
- [x] **1.6** — Move `fabric.4th` from `init.4th` to `hestia/init.4th`. *Check:* Hera's dict
shrinks, Hestia's grows; cross-arch identity holds.
- [ ] **1.7** — Move `font.4th` likewise. *Check:* same.
**Merged with task 1.7 into one commit — see that entry.** Real dependency discovered
while attempting 1.6 alone, not a convenience bundling: recorded here and there.
- [x] **1.7** — Move `font.4th` likewise. *Check:* same.
2026-09-19 · **finding, not a defect: 1.6 and 1.7 are not independent, and doing 1.6 alone
breaks Hera's boot.** `font.4th` calls `G-LINE`/`G-ELLIPSE`, which are `fabric.4th`'s own
words (`fabric.4th` blocks 5000–5002 per `font.4th`'s own comment). Confirmed live before
committing to either approach: removed only `fabric.4th`'s `EXEC` from `init.4th`, left
`font.4th`'s in place, booted amd64 — Hera's boot floods with `UNKNOWN WORD: 'G-LINE'`/
`'G-ELLIPSE'` the moment `font.4th` loads (`logs/20260919-171047/amd64/`, kept as evidence,
not deleted). Reverted that partial state immediately (`git checkout --
capsules/init.4th`), asked Captain Bob how to proceed given the two tasks as separately
scoped can't each independently pass their own three-arch-boot check, and was told to use
best practices. **Merged both into this one commit**, moving `fabric.4th` and `font.4th`
together, in their original relative order, into a new `capsules/hestia/init.4th` block
4988 — a deliberate, documented deviation from "one task, one commit," not a bundling of
convenience.
`logs/20260919-171942/amd64/`, `logs/20260919-172123/aarch64/`,
`logs/20260919-172253/riscv64/` — all three reach `[zuse@Hera] ok>`, zero `UNKNOWN WORD`.
Hestia's `dict_hash` (`0xe4e6b1916827e320`, capsule_hash `0x6aa0a1b5daf9d2ec`) identical
across all three architectures. **Verified the shrink/grow live, not just inferred from
hash movement**: `HERE .` reads `20008` in Hera, `63040` in Hestia (post-move) — a huge gap
confirming Hestia's dictionary now genuinely holds the drawing vocabulary. `CART-PLOT` in
Hera returns `UNKNOWN WORD: 'CART-PLOT'`; the identical call routed into Hestia via
`VM-EXEC` reaches the word and fails on a stack underflow instead (`>R: DSP underflow`) —
proof the word exists there, since an unknown word can't underflow. `mkcapsule --lint
capsules/` clean, 38 files, 0 violations. `MANIFEST.md` updated: `init.4th`'s block 2049
entry no longer lists `fabric.4th`/`font.4th`; `hestia/init.4th`'s entry gains block 4988.
- [ ] **1.8** — Move `PLOT`/`FB-WIDTH`/`FB-HEIGHT` registration to Hestia's table **only**.
*Check:* **positively verify** a non-Hestia VM calling `PLOT` gets `UNKNOWN WORD`.
- [ ] **1.9** — Assert §XVIII.6's headless invariant: Hestia's birth sets no
+9 -8
View File
@@ -1,5 +1,5 @@
# Capsule Block Manifest — Auto-generated
<!-- Generated by mkcapsule --manifest 2026-09-19T21:05:35Z -->
<!-- Generated by mkcapsule --manifest 2026-09-19T21:22:50Z -->
<!-- DO NOT EDIT — re-run mkcapsule --manifest to refresh. -->
<!-- Hand-written justifications and immutability notes live -->
<!-- in MANIFEST.md alongside this auto-generated index. -->
@@ -18,14 +18,14 @@
| `fabric.4th` | 4900, 4901, 4902, 4903, 4904, 4905, 4906, 4907, 4908, 4909, 4910, 4911, 4912, 4913, 4914, 4915, 4916, 4917, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 5000, 5001, 5002 | `0x9d9489cbeca4099b` | yes |
| `font.4th` | 4925, 4926, 4927, 4928, 4929, 4930, 4931, 4932, 4933, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4955, 4956, 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4985 | `0x3f305911500c78f6` | yes |
| `hermes:init.4th` | 4153, 4855, 5116 | `0x2df61924448a6812` | yes |
| `hestia:init.4th` | 4986, 4987 | `0x3d3a87c3509ab7f3` | yes |
| `hestia:init.4th` | 4986, 4987, 4988 | `0x6aa0a1b5daf9d2ec` | yes |
| `init-l8-diverse.4th` | 4820, 4821, 4822 | `0xaa293201a6c91838` | yes |
| `init-l8-omni.4th` | 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079 | `0x5979e314d6452045` | yes |
| `init-l8-stable.4th` | 4806 | `0xdc3830f189063a9a` | yes |
| `init-l8-temporal.4th` | 4830, 4831 | `0x51abd4c138246651` | yes |
| `init-l8-transition.4th` | 4840, 4841, 4842 | `0xbcc1a81976f0a4c9` | yes |
| `init-l8-volatile.4th` | 4810, 4811, 4812, 4813 | `0x98caabbbd92abac4` | yes |
| `init.4th` | 2049, 2050, 2057 | `0x1ef4939ed32ec1e6` | yes |
| `init.4th` | 2049, 2050, 2057 | `0x97e74b7abd3d3366` | yes |
| `lib.4th` | 4050 | `0x4b216635c359ef73` | yes |
| `multiuser-doe.4th` | 5044, 5045, 5046, 5047, 5048, 5049, 5050, 5051, 5052, 5053, 5054, 5055 | `0x22140588ee7c39e6` | yes |
| `sdk.4th` | 5109, 5110, 5111, 5112, 5113, 5114, 5115 | `0x008fdbbb62c94a3a` | yes |
@@ -51,9 +51,9 @@
| LBN | Capsule | xxHash64 | Status |
|-----|---------|----------|--------|
| 2049 | `init.4th` | `0x1ef4939ed32ec1e6` | ok |
| 2050 | `init.4th` | `0x1ef4939ed32ec1e6` | ok |
| 2057 | `init.4th` | `0x1ef4939ed32ec1e6` | ok |
| 2049 | `init.4th` | `0x97e74b7abd3d3366` | ok |
| 2050 | `init.4th` | `0x97e74b7abd3d3366` | ok |
| 2057 | `init.4th` | `0x97e74b7abd3d3366` | ok |
| 2064 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
| 2065 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
| 2066 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
@@ -328,8 +328,9 @@
| 4983 | `font.4th` | `0x3f305911500c78f6` | ok |
| 4984 | `font.4th` | `0x3f305911500c78f6` | ok |
| 4985 | `font.4th` | `0x3f305911500c78f6` | ok |
| 4986 | `hestia:init.4th` | `0x3d3a87c3509ab7f3` | ok |
| 4987 | `hestia:init.4th` | `0x3d3a87c3509ab7f3` | ok |
| 4986 | `hestia:init.4th` | `0x6aa0a1b5daf9d2ec` | ok |
| 4987 | `hestia:init.4th` | `0x6aa0a1b5daf9d2ec` | ok |
| 4988 | `hestia:init.4th` | `0x6aa0a1b5daf9d2ec` | ok |
| 5000 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
| 5001 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
| 5002 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
+10 -9
View File
@@ -49,7 +49,7 @@ Blocks: **2049–2052, 2057**
| Block | Immutable | Justification |
|-------|-----------|---------------|
| 2049 | No | Hera VM init: `VM-TREE`/`VM-PARENT`/`VM-CHILDREN`; loads `ACL.4th`, `block-acl.4th`, `zuse-eligibility.4th`, `lib.4th`, `fabric.4th`, `font.4th`, `common:messaging.4th` + `MSG-CD-INIT`. **Corrected 2026-09-19** — previously listed `compudynamics`, `common:msg`, `fleet-k` and `process`; none of those are loaded here. `compudynamics.4th`/`fleet-k.4th` were already deleted (`9323f776`, see "Deleted capsules" below); `common:msg.4th`/`process.4th` are stripped in this same pass (FABRIC-3.6.md tasks 0.2/0.3) and were never `EXEC`'d from this block even before that |
| 2049 | No | Hera VM init: `VM-TREE`/`VM-PARENT`/`VM-CHILDREN`; loads `ACL.4th`, `block-acl.4th`, `zuse-eligibility.4th`, `lib.4th`, `common:messaging.4th` + `MSG-CD-INIT`. **Corrected 2026-09-19 (twice)** — first pass removed a stale listing of `compudynamics`/`common:msg`/`fleet-k`/`process` (none loaded here; two already-deleted, two stripped in the same pass, FABRIC-3.6.md tasks 0.2/0.3). Second pass (same day): `fabric.4th`/`font.4th` **removed** from this list — relocated to `hestia/init.4th` (FABRIC-3.6.md tasks 1.6/1.7), Hera no longer loads either |
| 2050 | No | BOOT-BANNER call — separated so the banner block can be swapped without touching init logic |
| 2051 | No | TRIPOD-TEST — 6 acceptance gates per TRIPOD.md. Dead EVENT-WAIT step replaced with HERMES-TICK liveness check (`3436d564`) |
| 2052 | No | TRIPOD-TEST invocation block |
@@ -433,19 +433,20 @@ Hermes (see above). The table below reflects the actual current footprint.
### `hestia/init.4th` — Hestia VM (third Tripod leg, bind point)
Blocks: **4986–4987** (allocated 4986–4996, FABRIC-3.6.md task 1.1; only 2 of the 11 used so far)
Blocks: **4986–4988** (allocated 4986–4996, FABRIC-3.6.md task 1.1; 3 of the 11 used so far)
Added 2026-09-19 (FABRIC-3.6.md task 1.2, Tripod/kernel reshuffle — see FABRIC-3.5.md §II/§IV).
Reconstitutes the Tripod as Hera/Artemis/Hestia; Hermes stays live and fleet-foundation
throughout Phase 1–3 (FABRIC-3.6.md §XXXIV.4), so Hestia joins the messaging fabric on a fresh
slot rather than reusing Hermes's — see block 4987's own justification below. No `fabric.4th`/
`font.4th` yet (tasks 1.6/1.7 relocate their `EXEC` from `init.4th` to here); not yet birthed
(task 1.4).
Added 2026-09-19 (FABRIC-3.6.md tasks 1.2/1.4/1.6/1.7, Tripod/kernel reshuffle — see
FABRIC-3.5.md §II/§IV). Reconstitutes the Tripod as Hera/Artemis/Hestia; Hermes stays live and
fleet-foundation throughout Phase 1–3 (FABRIC-3.6.md §XXXIV.4), so Hestia joins the messaging
fabric on a fresh slot rather than reusing Hermes's — see block 4987's own justification below.
Birthed (task 1.4) and owns the drawing fabric (`fabric.4th`/`font.4th`, tasks 1.6/1.7 — see
block 4988).
| Block | Immutable | Justification |
|-------|-----------|---------------|
| 4986 | No | `WELCOME` banner word + call. Not immutable: message text may change |
| 4987 | No | Joins `COMMON-CH` on slot **11** (Hera/Hermes/Artemis hold 0/1/2, identities hold 3–10, `messaging.4th:78-85`) — a fresh slot, not Hermes's, since Hermes is still live. **Deliberately does not add a `VM-NAME-REG` entry for "Hestia"** in `messaging.4th`'s `VM-NAMES-INIT` — Phase 1's gate is "messaging untouched," and adding a name means editing that file. Hestia is `COMMON-CH`-reachable by raw slot today, not yet `VM-EXEC`-addressable by name; whichever task first needs name lookup (birth, task 1.4, or later) settles where that one line goes. Not immutable: this is expected to be revisited once name lookup is needed |
| 4988 | No | `S" fabric.4th" EXEC` + `S" font.4th" EXEC` — moved here from `init.4th` (Hera), tasks 1.6/1.7, **merged into one commit rather than done separately as the punchlist originally split them**: `font.4th` calls `G-LINE`/`G-ELLIPSE`, which are `fabric.4th`'s own words, so moving one without the other strands the dependency in whichever VM keeps only half — confirmed live, moving `fabric.4th` alone floods Hera's boot with `UNKNOWN WORD: 'G-LINE'`. Order preserved (`fabric.4th` before `font.4th`), matching `init.4th`'s own prior load order. Not immutable: may grow if more of the drawing/font surface relocates here |
| 4987 | No | Joins `COMMON-CH` on slot **11** (Hera/Hermes/Artemis hold 0/1/2, identities hold 3–10, `messaging.4th:78-85`) — a fresh slot, not Hermes's, since Hermes is still live. **Deliberately does not add a `VM-NAME-REG` entry for "Hestia"** in `messaging.4th`'s `VM-NAMES-INIT` — Phase 1's gate is "messaging untouched," and adding a name means editing that file. Hestia is `COMMON-CH`-reachable by raw slot today, not yet `VM-EXEC`-addressable by name; whichever task first needs name lookup settles where that one line goes. Not immutable: this is expected to be revisited once name lookup is needed |
### Deleted capsules (historical)
+11 -2
View File
@@ -1,9 +1,18 @@
Block 4986
( Hestia -- WELCOME. Third Tripod leg (Hera/Artemis/Hestia, )
( FABRIC-3.5.md SII/SIV), bind point + eventual drawing )
( fabric owner. No fabric.4th/font.4th yet -- tasks 1.6/1.7.)
( FABRIC-3.5.md SII/SIV), bind point + drawing fabric owner. )
: WELCOME ( -- ) LOG-INFO" Hestia: loaded" ;
WELCOME
Block 4988
( fabric.4th/font.4th moved here from init.4th (Hera) -- )
( FABRIC-3.6.md tasks 1.6/1.7, merged into one commit: they )
( are not independent -- font.4th's G-LINE/G-ELLIPSE calls )
( are fabric.4th's own words, so moving one without the )
( other breaks whichever VM keeps only half the pair. Order )
( preserved: fabric.4th before font.4th, same as init.4th's )
( own load order before this move. )
S" fabric.4th" EXEC
S" font.4th" EXEC
Block 4987
( Hestia joins COMMON-CH as a full messaging participant, )
( same pattern Hermes/Artemis already use. Fresh slot 11: )
-2
View File
@@ -17,8 +17,6 @@ S" ACL.4th" EXEC
S" block-acl.4th" EXEC
S" zuse-eligibility.4th" EXEC
S" lib.4th" EXEC
S" fabric.4th" EXEC
S" font.4th" EXEC
( SXX: same pattern Hermes/Artemis/console/mint already use. )
S" common:messaging.4th" EXEC
MSG-CD-INIT
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff