Make Hermes and Artemis session-less fleet foundation, add STARTUP-BANNER

Per FABRIC-3.md D.7 (birth-by-message-only): the Tripod legs must be alive
session-less before any thumbdrive-attach flow has a running Hermes/Artemis
to message. kernel_main.c's item 4.2/4.6 self-tests previously birthed
both, exercised diagnostics, then explicitly KILLed them before ok> every
boot -- production boot never actually kept either alive. Stripped both
blocks down to birth-only, diagnostics and KILL removed.

Found and fixed a real regression this surfaced, not left broken: Hermes's
CD-INIT (message/channel arena init, and the thing that loads lib.4th into
her own dictionary) was only ever invoked by the self-test just removed --
nothing in hermes/init.4th itself called it. Added an unconditional CD-INIT
call at the end of her own init.4th so a real birth actually initializes
her arena, matching how Artemis's own ART-BOOT-ENTRY already runs
unconditionally at her own capsule load.

Added STARTUP-BANNER (lib.4th): a shared word reading a common
IDENTITY-BANNER buffer, printing "(no identity)" until CERTVERIFY/MINT
exist to populate it from a thumbdrive's PKI fields -- scaffolding only,
per direct instruction. Wired into each Tripod leg's own init.4th
(Hera/Hermes/Artemis); Artemis didn't load lib.4th before, added that too.

Verified live on all three architectures: BIRTH for both, no KILL anywhere
in any log, and an interactive USE round-trip confirmed Hermes is
genuinely reachable post-boot, not just logged as born.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019ZGkimpfyh63EZyRkNbkPD
This commit is contained in:
Robert Allan James
2026-08-28 08:44:52 -04:00
co-authored by Claude Sonnet 5
parent ad79caeeeb
commit 52eb1bbb20
9 changed files with 27084 additions and 254 deletions
+96 -94
View File
@@ -1,5 +1,5 @@
# Capsule Block Manifest — Auto-generated # Capsule Block Manifest — Auto-generated
<!-- Generated by mkcapsule --manifest 2026-08-28T11:17:15Z --> <!-- Generated by mkcapsule --manifest 2026-08-28T12:43:09Z -->
<!-- DO NOT EDIT — re-run mkcapsule --manifest to refresh. --> <!-- DO NOT EDIT — re-run mkcapsule --manifest to refresh. -->
<!-- Hand-written justifications and immutability notes live --> <!-- Hand-written justifications and immutability notes live -->
<!-- in MANIFEST.md alongside this auto-generated index. --> <!-- in MANIFEST.md alongside this auto-generated index. -->
@@ -9,13 +9,13 @@
| Capsule | Blocks claimed | xxHash64 | Signed | | Capsule | Blocks claimed | xxHash64 | Signed |
|---------|----------------|----------|--------| |---------|----------------|----------|--------|
| `ACL.4th` | 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4015 | `0xd781d22148ff171d` | yes | | `ACL.4th` | 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4015 | `0xd781d22148ff171d` | yes |
| `artemis:init.4th` | 4110, 4111, 4112, 4113, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4177, 4178, 4179, 4180, 4181, 4182, 4851, 4852 | `0x1859f0148048a2c1` | yes | | `artemis:init.4th` | 4110, 4111, 4112, 4113, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4177, 4178, 4179, 4180, 4181, 4182, 4851, 4852, 4853 | `0x87f90140dc5932df` | yes |
| `common:msg.4th` | 4055 | `0x850a0382344ea6c4` | yes | | `common:msg.4th` | 4055 | `0x850a0382344ea6c4` | yes |
| `doe-campaign.4th` | 4060, 4061, 4062, 4063, 4064, 4065 | `0x3d4549142d91ec20` | yes | | `doe-campaign.4th` | 4060, 4061, 4062, 4063, 4064, 4065 | `0x3d4549142d91ec20` | yes |
| `doe.4th` | 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107 | `0xf154616d248e861f` | yes | | `doe.4th` | 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107 | `0xf154616d248e861f` | yes |
| `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 | `0x9b1d061339cea98d` | yes | | `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 | `0x9b1d061339cea98d` | 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 | `0x720792b4fc758156` | 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 | `0x720792b4fc758156` | yes |
| `hermes:init.4th` | 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4114, 4115, 4116, 4117, 4118, 4119, 4120, 4121, 4142, 4143, 4144, 4145, 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159, 4175, 4176 | `0xfbb1208133abbeef` | yes | | `hermes:init.4th` | 4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4114, 4115, 4116, 4117, 4118, 4119, 4120, 4121, 4142, 4143, 4144, 4145, 4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159, 4175, 4176, 5116 | `0xc4f09ac30715b659` | yes |
| `init-0.4th` | 2200, 2201 | `0xd0a9550baf786bb3` | yes | | `init-0.4th` | 2200, 2201 | `0xd0a9550baf786bb3` | yes |
| `init-1.4th` | 4406, 4415, 4425, 4435 | `0x63e251adb0a03613` | yes | | `init-1.4th` | 4406, 4415, 4425, 4435 | `0x63e251adb0a03613` | yes |
| `init-2.4th` | 4506, 4515, 4525, 4535, 4545 | `0xf113b3d0bcccae47` | yes | | `init-2.4th` | 4506, 4515, 4525, 4535, 4545 | `0xf113b3d0bcccae47` | yes |
@@ -32,8 +32,8 @@
| `init-l8-temporal.4th` | 4830, 4831 | `0x51abd4c138246651` | yes | | `init-l8-temporal.4th` | 4830, 4831 | `0x51abd4c138246651` | yes |
| `init-l8-transition.4th` | 4840, 4841, 4842 | `0xbcc1a81976f0a4c9` | yes | | `init-l8-transition.4th` | 4840, 4841, 4842 | `0xbcc1a81976f0a4c9` | yes |
| `init-l8-volatile.4th` | 4810, 4811, 4812, 4813 | `0x98caabbbd92abac4` | yes | | `init-l8-volatile.4th` | 4810, 4811, 4812, 4813 | `0x98caabbbd92abac4` | yes |
| `init.4th` | 2049, 2050, 2057 | `0x214d424abd382707` | yes | | `init.4th` | 2049, 2050, 2057 | `0xd1022c2e4331f244` | yes |
| `lib.4th` | 4050 | `0x1c77d7c9562a5b62` | yes | | `lib.4th` | 4050 | `0x4b216635c359ef73` | yes |
| `process.4th` | 4300, 4301 | `0x781afc1dbd0294f7` | yes | | `process.4th` | 4300, 4301 | `0x781afc1dbd0294f7` | yes |
| `sdk.4th` | 5109, 5110, 5111, 5112, 5113, 5114, 5115 | `0x008fdbbb62c94a3a` | yes | | `sdk.4th` | 5109, 5110, 5111, 5112, 5113, 5114, 5115 | `0x008fdbbb62c94a3a` | yes |
| `turtle.4th` | 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108 | `0x4d470418ca543365` | yes | | `turtle.4th` | 5100, 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108 | `0x4d470418ca543365` | yes |
@@ -44,9 +44,9 @@
| LBN | Capsule | xxHash64 | Status | | LBN | Capsule | xxHash64 | Status |
|-----|---------|----------|--------| |-----|---------|----------|--------|
| 2049 | `init.4th` | `0x214d424abd382707` | ok | | 2049 | `init.4th` | `0xd1022c2e4331f244` | ok |
| 2050 | `init.4th` | `0x214d424abd382707` | ok | | 2050 | `init.4th` | `0xd1022c2e4331f244` | ok |
| 2057 | `init.4th` | `0x214d424abd382707` | ok | | 2057 | `init.4th` | `0xd1022c2e4331f244` | ok |
| 2064 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok | | 2064 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
| 2065 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok | | 2065 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
| 2066 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok | | 2066 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
@@ -106,7 +106,7 @@
| 4016 | `zuse.4th` | `0x3b31872d02a43d83` | ok | | 4016 | `zuse.4th` | `0x3b31872d02a43d83` | ok |
| 4017 | `zuse.4th` | `0x3b31872d02a43d83` | ok | | 4017 | `zuse.4th` | `0x3b31872d02a43d83` | ok |
| 4018 | `zuse.4th` | `0x3b31872d02a43d83` | ok | | 4018 | `zuse.4th` | `0x3b31872d02a43d83` | ok |
| 4050 | `lib.4th` | `0x1c77d7c9562a5b62` | ok | | 4050 | `lib.4th` | `0x4b216635c359ef73` | ok |
| 4055 | `common:msg.4th` | `0x850a0382344ea6c4` | ok | | 4055 | `common:msg.4th` | `0x850a0382344ea6c4` | ok |
| 4060 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok | | 4060 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
| 4061 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok | | 4061 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
@@ -114,89 +114,89 @@
| 4063 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok | | 4063 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
| 4064 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok | | 4064 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
| 4065 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok | | 4065 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
| 4100 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4100 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4101 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4101 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4102 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4102 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4103 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4103 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4104 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4104 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4105 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4105 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4106 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4106 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4107 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4107 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4108 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4108 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4109 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4109 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4110 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4110 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4111 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4111 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4112 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4112 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4113 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4113 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4114 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4114 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4115 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4115 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4116 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4116 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4117 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4117 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4118 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4118 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4119 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4119 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4120 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4120 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4121 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4121 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4122 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4122 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4123 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4123 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4124 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4124 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4125 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4125 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4126 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4126 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4127 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4127 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4128 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4128 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4129 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4129 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4130 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4130 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4131 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4131 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4132 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4132 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4133 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4133 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4134 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4134 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4135 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4135 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4136 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4136 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4137 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4137 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4138 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4138 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4139 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4139 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4140 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4140 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4141 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4141 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4142 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4142 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4143 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4143 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4144 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4144 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4145 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4145 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4146 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4146 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4147 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4147 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4148 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4148 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4149 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4149 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4150 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4150 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4151 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4151 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4152 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4152 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4153 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4153 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4154 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4154 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4155 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4155 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4156 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4156 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4157 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4157 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4158 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4158 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4159 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4159 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4160 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4160 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4161 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4161 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4162 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4162 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4163 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4163 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4164 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4164 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4165 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4165 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4166 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4166 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4167 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4167 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4168 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4168 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4169 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4169 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4170 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4170 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4171 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4171 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4172 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4172 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4173 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4173 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4174 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4174 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4175 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4175 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4176 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok | | 4176 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
| 4177 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4177 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4178 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4178 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4179 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4179 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4180 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4180 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4181 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4181 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4182 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4182 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4200 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok | | 4200 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
| 4201 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok | | 4201 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
| 4202 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok | | 4202 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
@@ -236,8 +236,9 @@
| 4840 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok | | 4840 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok |
| 4841 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok | | 4841 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok |
| 4842 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok | | 4842 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok |
| 4851 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4851 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4852 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok | | 4852 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4853 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
| 4900 | `fabric.4th` | `0x9b1d061339cea98d` | ok | | 4900 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
| 4901 | `fabric.4th` | `0x9b1d061339cea98d` | ok | | 4901 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
| 4902 | `fabric.4th` | `0x9b1d061339cea98d` | ok | | 4902 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
@@ -343,6 +344,7 @@
| 5113 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok | | 5113 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
| 5114 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok | | 5114 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
| 5115 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok | | 5115 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
| 5116 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
## Conflicts ## Conflicts
+4
View File
@@ -487,3 +487,7 @@ Block 4852
( LOAD-DOE: pulls in doe.4th's word-level DOE-WORK ) ( LOAD-DOE: pulls in doe.4th's word-level DOE-WORK )
( workload, for doe-campaign.4th's remote VM-EXEC. ) ( workload, for doe-campaign.4th's remote VM-EXEC. )
: LOAD-DOE ( -- ) S" doe.4th" EXEC ; : LOAD-DOE ( -- ) S" doe.4th" EXEC ;
Block 4853
( D.7: Artemis didn't load lib.4th before; needs it now. )
S" lib.4th" EXEC
STARTUP-BANNER
+4
View File
@@ -461,3 +461,7 @@ Block 4153
( LOAD-DOE: pulls in doe.4th's word-level DOE-WORK ) ( LOAD-DOE: pulls in doe.4th's word-level DOE-WORK )
( workload, for doe-campaign.4th's remote VM-EXEC. ) ( workload, for doe-campaign.4th's remote VM-EXEC. )
: LOAD-DOE ( -- ) S" doe.4th" EXEC ; : LOAD-DOE ( -- ) S" doe.4th" EXEC ;
Block 5116
( CD-INIT ran only via the old self-test; birth needs it now. )
CD-INIT
STARTUP-BANNER
+1
View File
@@ -20,3 +20,4 @@ S" font.4th" EXEC
Block 2050 Block 2050
( Hera boot — banner ) ( Hera boot — banner )
BOOT-BANNER BOOT-BANNER
STARTUP-BANNER
+5
View File
@@ -10,3 +10,8 @@ Block 4050
: CSV-COL ( n -- ) N. COMMA ; : CSV-COL ( n -- ) N. COMMA ;
: CSV-LAST ( n -- ) N. CRLF ; : CSV-LAST ( n -- ) N. CRLF ;
: Q.SHOW ( q -- ) Q.PRINT CR ; : Q.SHOW ( q -- ) Q.PRINT CR ;
CREATE IDENTITY-BANNER 128 ALLOT
VARIABLE IDENTITY-BANNER-LEN 0 IDENTITY-BANNER-LEN !
: STARTUP-BANNER ( -- ) IDENTITY-BANNER-LEN @ 0= IF
." (no identity)" CR EXIT THEN
IDENTITY-BANNER IDENTITY-BANNER-LEN @ TYPE CR ;
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
+20 -160
View File
@@ -176,30 +176,6 @@ static void print_uint(const char *label, uint64_t value) {
console_println(buf); console_println(buf);
} }
#ifdef STARFORTH_ENABLE_VM
/**
* @brief Verify a known word is still reachable in a VM's dictionary.
*
* Diagnostic-only: confirms @c vm_find_word() can still walk the chain
* from @c vm->latest to a word defined early in Hermes's capsule
* (MSG-COOL-ALL, block 4108). Added after item 4.2's self-test bisection
* found an amd64-only in-place corruption of an existing dictionary entry
* during MSG-DELIVER-ALL -- here/latest stay unchanged (no reallocation),
* so a lookup is a cheap signal. NOTE: an earlier version of this comment
* attributed the corruption to GDB perturbing execution timing; that is
* unconfirmed and more likely just a parity/dict-hash boot-gate failure
* triggered by the debugger session itself (a software breakpoint's 0xCC
* patch landing in memory the loader then overwrote) -- don't propagate
* "timing-sensitive" as an established finding.
*/
static void hermes_dict_check(VM *hermes_vm, const char *checkpoint) {
DictEntry *e = vm_find_word(hermes_vm, "MSG-COOL-ALL", 12);
console_puts(" Dict-check ");
console_puts(checkpoint);
console_println(e ? ": OK" : ": FAIL (MSG-COOL-ALL unreachable)");
}
#endif
/** /**
* @brief Print a boot-information summary from the UEFI memory map to the console. * @brief Print a boot-information summary from the UEFI memory map to the console.
* *
@@ -837,157 +813,41 @@ static void kernel_main_deep(BootInfo *boot_info) {
} }
} }
/* item 4.2 self-test: a REAL birth (not synthetic, unlike 4.1a's -- /* Hermes is now a permanent fleet-foundation VM, not self-test
* this exercises capsules/hermes/init.4th's actual migrated code), * scaffolding -- FABRIC-3.md D.7 (birth-by-message-only, 2026-08-28):
* exercised then killed again so the resting boot state stays * the Tripod legs (Hera/Hermes/Artemis) must be alive session-less so
* Hera-alone, per item 0.1's intent. Diagnostic only -- production * a later thumbdrive-attach flow has a running Hermes/Artemis to
* boot still never auto-births Hermes (init.4th's BIRTH stays * message. Previously born, exercised, and KILLed by item 4.2's own
* commented out). */ * self-test every boot; that diagnostic exercising is gone, only the
console_println("Hermes 4.2 migration self-test: birthing..."); * birth remains. */
console_println("Startup: birthing Hermes (fleet foundation)...");
vm_interpret(mama, "S\" Hermes\" BIRTH"); vm_interpret(mama, "S\" Hermes\" BIRTH");
{ {
VMRegistryEntry entry; VMRegistryEntry entry;
if (capsule_vm_find_by_name_nocase("Hermes", &entry) == 0 && if (capsule_vm_find_by_name_nocase("Hermes", &entry) == 0 &&
entry.state == VM_STATE_LIVE) { entry.state == VM_STATE_LIVE) {
VM *hermes_vm = (VM *)entry.vm_ptr; console_println("Startup: Hermes live");
console_println("Hermes 4.2 self-test: exercising migrated words...");
hermes_dict_check(hermes_vm, "at self-test start");
hermes_vm->error = 0;
vm_interpret(hermes_vm, "CD-INIT");
print_uint(" DBG err after CD-INIT=", (uint64_t)hermes_vm->error);
hermes_dict_check(hermes_vm, "after CD-INIT");
hermes_vm->error = 0;
vm_interpret(hermes_vm, "HERMES-MSG-TEST . CR");
print_uint(" DBG err after MSG-TEST=", (uint64_t)hermes_vm->error);
hermes_dict_check(hermes_vm, "after MSG-TEST");
hermes_vm->error = 0;
vm_interpret(hermes_vm, "HERMES-STATUS");
print_uint(" DBG err after STATUS=", (uint64_t)hermes_vm->error);
hermes_dict_check(hermes_vm, "after STATUS");
hermes_vm->error = 0;
vm_interpret(hermes_vm, "MSG-DELIVER-ALL");
print_uint(" DBG err after DELIVER-ALL=", (uint64_t)hermes_vm->error);
hermes_dict_check(hermes_vm, "after DELIVER-ALL");
hermes_vm->error = 0;
vm_interpret(hermes_vm, "MSG-REDELIVER-NACKED");
print_uint(" DBG err after REDELIVER=", (uint64_t)hermes_vm->error);
hermes_vm->error = 0;
vm_interpret(hermes_vm, "MSG-COOL-ALL");
print_uint(" DBG err after MSG-COOL-ALL=", (uint64_t)hermes_vm->error);
hermes_vm->error = 0;
vm_interpret(hermes_vm, "MSG-REAP");
print_uint(" DBG err after MSG-REAP=", (uint64_t)hermes_vm->error);
hermes_vm->error = 0;
vm_interpret(hermes_vm, "CH-COOL-ALL CH-REAP-SAFE");
print_uint(" DBG err after CH-COOL/REAP=", (uint64_t)hermes_vm->error);
hermes_vm->error = 0;
vm_interpret(hermes_vm, "Q.1 3 / COMMON-CH @ CH-HEAT!");
print_uint(" DBG err after CH-HEAT!=", (uint64_t)hermes_vm->error);
hermes_vm->error = 0;
vm_interpret(hermes_vm, "HERMES-STATUS");
print_uint(" DBG err after TICK=", (uint64_t)hermes_vm->error);
hermes_vm->error = 0;
console_puts("Hermes 4.2 self-test: HERMES-K=");
vm_interpret(hermes_vm, "HERMES-K .");
console_println("");
print_uint(" DBG err after HERMES-K=", (uint64_t)hermes_vm->error);
/* Side-by-side with the Stadium's own view, same checkpoint --
* if these two disagree, HERMES-K's FORTH-side arena scan is
* seeing different residents than stadium_resident_sum()'s
* ownership+bitmap view (a real, separate finding, not the
* Q.SLOT admission-heat fix's job to explain). */
print_uint(" DBG stadium_resident_sum(Hermes)=", stadium_resident_sum(entry.vm_id));
print_uint(" DBG stadium_reservoir_peek(Hermes)=", stadium_reservoir_peek(entry.vm_id));
/* item 4.2 Done-when: "a resident cell's evict-credit landing
* in the correct VM's reservoir ... not just asserted from
* reading the code" -- explicitly evict the common channel
* (CH-FREE-NODE -> STADIUM-EVICT), a known resident from
* CD-INIT's own COMMON-INIT, same credit path stadium_admit()'s
* density-fallback eviction uses. resident_sum dropping and
* reservoir rising by the same amount is the proof: the freed
* cell's heat landed back in Hermes's own reservoir, not lost
* or credited to Hera. */
console_println("Hermes 4.2 self-test: before eviction:");
print_uint(" Hermes resident_sum=", stadium_resident_sum(entry.vm_id));
print_uint(" Hermes reservoir=", stadium_reservoir_peek(entry.vm_id));
console_println("Hermes 4.2 self-test: forcing an explicit eviction (COMMON-CH)...");
hermes_vm->error = 0;
vm_interpret(hermes_vm, "COMMON-CH @ . CR");
print_uint(" DBG err after COMMON-CH@=", (uint64_t)hermes_vm->error);
hermes_vm->error = 0;
vm_interpret(hermes_vm, "COMMON-CH @ CH-FREE-NODE");
print_uint(" DBG err after CH-FREE-NODE=", (uint64_t)hermes_vm->error);
console_println("Hermes 4.2 self-test: after eviction:");
print_uint(" Hermes resident_sum=", stadium_resident_sum(entry.vm_id));
print_uint(" Hermes reservoir=", stadium_reservoir_peek(entry.vm_id));
/* item 4.2 Done-when: both VMs' conservation checks close
* independently -- Hermes's own resident+reservoir sum first,
* then Hera's again (unaffected by Hermes's activity above). */
stadium_words_print_boot_diagnostics(entry.vm_id);
vm_interpret(mama, "S\" Hermes\" KILL");
console_println("Hermes 4.2 self-test: killed, resting state restored");
stadium_words_print_boot_diagnostics(vm_uuid_hera());
} else { } else {
console_println("Hermes 4.2 self-test: birth registry lookup FAILED"); console_println("Startup: Hermes birth registry lookup FAILED");
} }
} }
/* item 4.6 self-test: a REAL birth (not synthetic), exercising /* Artemis is now a permanent fleet-foundation VM, not self-test
* capsules/artemis/init.4th's actual migrated block-heat code. * scaffolding -- same reasoning as Hermes's own birth just above
* Artemis's own capsule already runs a full self-test plus a * (FABRIC-3.md D.7). Previously born, exercised, and KILLed by item
* 30-rep stress campaign at load (ART-BOOT-ENTRY / block 4170's * 4.6's own self-test every boot; that diagnostic exercising is gone,
* still-enabled ART-STRESS-CAMPAIGN) -- this scaffold only adds * only the birth remains. Artemis's own capsule still runs its own
* the conservation-check bracketing item 4.2's Hermes self-test * self-test plus a 30-rep stress campaign at load
* used, not a duplicate exercise. Diagnostic only -- production * (ART-BOOT-ENTRY/ART-STRESS-CAMPAIGN), unaffected by this change. */
* boot still never auto-births Artemis (init.4th's BIRTH stays console_println("Startup: birthing Artemis (fleet foundation)...");
* commented out). */
console_println("Artemis 4.6 migration self-test: birthing...");
vm_interpret(mama, "S\" Artemis\" BIRTH"); vm_interpret(mama, "S\" Artemis\" BIRTH");
{ {
VMRegistryEntry entry; VMRegistryEntry entry;
if (capsule_vm_find_by_name_nocase("Artemis", &entry) == 0 && if (capsule_vm_find_by_name_nocase("Artemis", &entry) == 0 &&
entry.state == VM_STATE_LIVE) { entry.state == VM_STATE_LIVE) {
VM *artemis_vm = (VM *)entry.vm_ptr; console_println("Startup: Artemis live");
console_println("Artemis 4.6 self-test: ARTEMIS-K after boot-time load:");
artemis_vm->error = 0;
vm_interpret(artemis_vm, "ARTEMIS-K .");
console_println("");
print_uint(" DBG err after ARTEMIS-K=", (uint64_t)artemis_vm->error);
print_uint(" DBG stadium_resident_sum(Artemis)=", stadium_resident_sum(entry.vm_id));
print_uint(" DBG stadium_reservoir_peek(Artemis)=", stadium_reservoir_peek(entry.vm_id));
/* item 4.6 Done-when: "a resident cell's evict-credit landing
* in the correct VM's reservoir", same check 4.2 made for
* Hermes. Allocate one fresh block explicitly, confirm the
* reservoir/resident split, free it, confirm both settle
* back the same way. */
console_println("Artemis 4.6 self-test: explicit alloc/free round-trip...");
artemis_vm->error = 0;
vm_interpret(artemis_vm, "BLK-ALLOC DUP . CR");
print_uint(" DBG err after BLK-ALLOC=", (uint64_t)artemis_vm->error);
print_uint(" Artemis resident_sum (post-alloc)=", stadium_resident_sum(entry.vm_id));
print_uint(" Artemis reservoir (post-alloc)=", stadium_reservoir_peek(entry.vm_id));
artemis_vm->error = 0;
vm_interpret(artemis_vm, "BLK-FREE");
print_uint(" DBG err after BLK-FREE=", (uint64_t)artemis_vm->error);
print_uint(" Artemis resident_sum (post-free)=", stadium_resident_sum(entry.vm_id));
print_uint(" Artemis reservoir (post-free)=", stadium_reservoir_peek(entry.vm_id));
console_println("Artemis 4.6 self-test: ARTEMIS-K after round-trip:");
artemis_vm->error = 0;
vm_interpret(artemis_vm, "ARTEMIS-K .");
console_println("");
/* item 4.6 Done-when: both VMs' conservation checks close
* independently -- Artemis's own resident+reservoir sum
* first, then Hera's again (unaffected by Artemis's
* activity above). */
stadium_words_print_boot_diagnostics(entry.vm_id);
vm_interpret(mama, "S\" Artemis\" KILL");
console_println("Artemis 4.6 self-test: killed, resting state restored");
stadium_words_print_boot_diagnostics(vm_uuid_hera());
} else { } else {
console_println("Artemis 4.6 self-test: birth registry lookup FAILED"); console_println("Startup: Artemis birth registry lookup FAILED");
} }
} }