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:
co-authored by
Claude Sonnet 5
parent
ad79caeeeb
commit
52eb1bbb20
+96
-94
@@ -1,5 +1,5 @@
|
||||
# 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. -->
|
||||
<!-- Hand-written justifications and immutability notes live -->
|
||||
<!-- in MANIFEST.md alongside this auto-generated index. -->
|
||||
@@ -9,13 +9,13 @@
|
||||
| Capsule | Blocks claimed | xxHash64 | Signed |
|
||||
|---------|----------------|----------|--------|
|
||||
| `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 |
|
||||
| `doe-campaign.4th` | 4060, 4061, 4062, 4063, 4064, 4065 | `0x3d4549142d91ec20` | 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 |
|
||||
| `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-1.4th` | 4406, 4415, 4425, 4435 | `0x63e251adb0a03613` | 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-transition.4th` | 4840, 4841, 4842 | `0xbcc1a81976f0a4c9` | yes |
|
||||
| `init-l8-volatile.4th` | 4810, 4811, 4812, 4813 | `0x98caabbbd92abac4` | yes |
|
||||
| `init.4th` | 2049, 2050, 2057 | `0x214d424abd382707` | yes |
|
||||
| `lib.4th` | 4050 | `0x1c77d7c9562a5b62` | yes |
|
||||
| `init.4th` | 2049, 2050, 2057 | `0xd1022c2e4331f244` | yes |
|
||||
| `lib.4th` | 4050 | `0x4b216635c359ef73` | yes |
|
||||
| `process.4th` | 4300, 4301 | `0x781afc1dbd0294f7` | 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 |
|
||||
@@ -44,9 +44,9 @@
|
||||
|
||||
| LBN | Capsule | xxHash64 | Status |
|
||||
|-----|---------|----------|--------|
|
||||
| 2049 | `init.4th` | `0x214d424abd382707` | ok |
|
||||
| 2050 | `init.4th` | `0x214d424abd382707` | ok |
|
||||
| 2057 | `init.4th` | `0x214d424abd382707` | ok |
|
||||
| 2049 | `init.4th` | `0xd1022c2e4331f244` | ok |
|
||||
| 2050 | `init.4th` | `0xd1022c2e4331f244` | ok |
|
||||
| 2057 | `init.4th` | `0xd1022c2e4331f244` | ok |
|
||||
| 2064 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
|
||||
| 2065 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
|
||||
| 2066 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
|
||||
@@ -106,7 +106,7 @@
|
||||
| 4016 | `zuse.4th` | `0x3b31872d02a43d83` | ok |
|
||||
| 4017 | `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 |
|
||||
| 4060 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
|
||||
| 4061 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
|
||||
@@ -114,89 +114,89 @@
|
||||
| 4063 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
|
||||
| 4064 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
|
||||
| 4065 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
|
||||
| 4100 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4101 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4102 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4103 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4104 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4105 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4106 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4107 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4108 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4109 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4110 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4111 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4112 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4113 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4114 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4115 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4116 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4117 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4118 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4119 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4120 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4121 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4122 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4123 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4124 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4125 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4126 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4127 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4128 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4129 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4130 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4131 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4132 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4133 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4134 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4135 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4136 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4137 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4138 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4139 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4140 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4141 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4142 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4143 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4144 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4145 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4146 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4147 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4148 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4149 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4150 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4151 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4152 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4153 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4154 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4155 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4156 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4157 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4158 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4159 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4160 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4161 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4162 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4163 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4164 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4165 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4166 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4167 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4168 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4169 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4170 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4171 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4172 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4173 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4174 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4175 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4176 | `hermes:init.4th` | `0xfbb1208133abbeef` | ok |
|
||||
| 4177 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4178 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4179 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4180 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4181 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4182 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4100 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4101 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4102 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4103 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4104 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4105 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4106 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4107 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4108 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4109 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4110 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4111 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4112 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4113 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4114 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4115 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4116 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4117 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4118 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4119 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4120 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4121 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4122 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4123 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4124 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4125 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4126 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4127 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4128 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4129 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4130 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4131 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4132 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4133 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4134 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4135 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4136 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4137 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4138 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4139 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4140 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4141 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4142 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4143 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4144 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4145 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4146 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4147 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4148 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4149 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4150 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4151 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4152 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4153 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4154 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4155 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4156 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4157 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4158 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4159 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4160 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4161 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4162 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4163 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4164 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4165 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4166 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4167 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4168 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4169 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4170 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4171 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4172 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4173 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4174 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4175 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4176 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
| 4177 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4178 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4179 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4180 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4181 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4182 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4200 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
|
||||
| 4201 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
|
||||
| 4202 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
|
||||
@@ -236,8 +236,9 @@
|
||||
| 4840 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok |
|
||||
| 4841 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok |
|
||||
| 4842 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok |
|
||||
| 4851 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4852 | `artemis:init.4th` | `0x1859f0148048a2c1` | ok |
|
||||
| 4851 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4852 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4853 | `artemis:init.4th` | `0x87f90140dc5932df` | ok |
|
||||
| 4900 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4901 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4902 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
@@ -343,6 +344,7 @@
|
||||
| 5113 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
|
||||
| 5114 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
|
||||
| 5115 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
|
||||
| 5116 | `hermes:init.4th` | `0xc4f09ac30715b659` | ok |
|
||||
|
||||
## Conflicts
|
||||
|
||||
|
||||
@@ -487,3 +487,7 @@ Block 4852
|
||||
( LOAD-DOE: pulls in doe.4th's word-level DOE-WORK )
|
||||
( workload, for doe-campaign.4th's remote VM-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
|
||||
|
||||
@@ -461,3 +461,7 @@ Block 4153
|
||||
( LOAD-DOE: pulls in doe.4th's word-level DOE-WORK )
|
||||
( workload, for doe-campaign.4th's remote VM-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
|
||||
|
||||
@@ -20,3 +20,4 @@ S" font.4th" EXEC
|
||||
Block 2050
|
||||
( Hera boot — banner )
|
||||
BOOT-BANNER
|
||||
STARTUP-BANNER
|
||||
|
||||
@@ -10,3 +10,8 @@ Block 4050
|
||||
: CSV-COL ( n -- ) N. COMMA ;
|
||||
: CSV-LAST ( n -- ) N. CRLF ;
|
||||
: 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
@@ -176,30 +176,6 @@ static void print_uint(const char *label, uint64_t value) {
|
||||
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.
|
||||
*
|
||||
@@ -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 --
|
||||
* this exercises capsules/hermes/init.4th's actual migrated code),
|
||||
* exercised then killed again so the resting boot state stays
|
||||
* Hera-alone, per item 0.1's intent. Diagnostic only -- production
|
||||
* boot still never auto-births Hermes (init.4th's BIRTH stays
|
||||
* commented out). */
|
||||
console_println("Hermes 4.2 migration self-test: birthing...");
|
||||
/* Hermes is now a permanent fleet-foundation VM, not self-test
|
||||
* scaffolding -- FABRIC-3.md D.7 (birth-by-message-only, 2026-08-28):
|
||||
* the Tripod legs (Hera/Hermes/Artemis) must be alive session-less so
|
||||
* a later thumbdrive-attach flow has a running Hermes/Artemis to
|
||||
* message. Previously born, exercised, and KILLed by item 4.2's own
|
||||
* self-test every boot; that diagnostic exercising is gone, only the
|
||||
* birth remains. */
|
||||
console_println("Startup: birthing Hermes (fleet foundation)...");
|
||||
vm_interpret(mama, "S\" Hermes\" BIRTH");
|
||||
{
|
||||
VMRegistryEntry entry;
|
||||
if (capsule_vm_find_by_name_nocase("Hermes", &entry) == 0 &&
|
||||
entry.state == VM_STATE_LIVE) {
|
||||
VM *hermes_vm = (VM *)entry.vm_ptr;
|
||||
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());
|
||||
console_println("Startup: Hermes live");
|
||||
} 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
|
||||
* capsules/artemis/init.4th's actual migrated block-heat code.
|
||||
* Artemis's own capsule already runs a full self-test plus a
|
||||
* 30-rep stress campaign at load (ART-BOOT-ENTRY / block 4170's
|
||||
* still-enabled ART-STRESS-CAMPAIGN) -- this scaffold only adds
|
||||
* the conservation-check bracketing item 4.2's Hermes self-test
|
||||
* used, not a duplicate exercise. Diagnostic only -- production
|
||||
* boot still never auto-births Artemis (init.4th's BIRTH stays
|
||||
* commented out). */
|
||||
console_println("Artemis 4.6 migration self-test: birthing...");
|
||||
/* Artemis is now a permanent fleet-foundation VM, not self-test
|
||||
* scaffolding -- same reasoning as Hermes's own birth just above
|
||||
* (FABRIC-3.md D.7). Previously born, exercised, and KILLed by item
|
||||
* 4.6's own self-test every boot; that diagnostic exercising is gone,
|
||||
* only the birth remains. Artemis's own capsule still runs its own
|
||||
* self-test plus a 30-rep stress campaign at load
|
||||
* (ART-BOOT-ENTRY/ART-STRESS-CAMPAIGN), unaffected by this change. */
|
||||
console_println("Startup: birthing Artemis (fleet foundation)...");
|
||||
vm_interpret(mama, "S\" Artemis\" BIRTH");
|
||||
{
|
||||
VMRegistryEntry entry;
|
||||
if (capsule_vm_find_by_name_nocase("Artemis", &entry) == 0 &&
|
||||
entry.state == VM_STATE_LIVE) {
|
||||
VM *artemis_vm = (VM *)entry.vm_ptr;
|
||||
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());
|
||||
console_println("Startup: Artemis live");
|
||||
} else {
|
||||
console_println("Artemis 4.6 self-test: birth registry lookup FAILED");
|
||||
console_println("Startup: Artemis birth registry lookup FAILED");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user