summaryrefslogtreecommitdiff
path: root/ocaml/BOOT_PROCESS.md
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-10-06 17:07:33 +0700
committerpolwex <polwex@sortug.com>2025-10-06 17:07:33 +0700
commita4615148975bed241ae26ffa2655dc9c407107d8 (patch)
treebd127b13f0027cd2870b8f016c5658465785d3df /ocaml/BOOT_PROCESS.md
parent256376afffe66faa239a6a6aaebb8f68a9c6cbe4 (diff)
maybe now maybe now
Diffstat (limited to 'ocaml/BOOT_PROCESS.md')
-rw-r--r--ocaml/BOOT_PROCESS.md47
1 files changed, 47 insertions, 0 deletions
diff --git a/ocaml/BOOT_PROCESS.md b/ocaml/BOOT_PROCESS.md
index 08987ef..5a621b6 100644
--- a/ocaml/BOOT_PROCESS.md
+++ b/ocaml/BOOT_PROCESS.md
@@ -57,6 +57,53 @@ CLAUDE:
**Status in OCaml:** ❌ Not applicable for solid pill boot path
+---
+
+## ✨ CRITICAL DISCOVERY: Ivory Pill Structure (2025-01-06)
+
+**Finding:** The ivory.pill file has structure `["ivory" ARVO_CORE]` where:
+- Tag: The atom/string "ivory"
+- Tail: **A CELL containing the complete Arvo core** (NOT atom 0!)
+
+**Verified by:** `test/examine_ivory.ml` which loads and analyzes ivory.pill:
+```
+Tag: ivory
+Tail type: CELL
+Tail is a CELL
+Head type: cell
+Tail type: cell
+✓ Has slot 2 and 3 (it's a cell with head and tail)
+```
+
+**This means:**
+1. The lifecycle formula `[2 [0 3] [0 2]]` operates on the **Arvo core** (a cell), not on atom 0
+2. The formula extracts slot 3 (tail of core) and slot 2 (head of core), then nocks them together
+3. This is why the formula doesn't fail - it's working on a valid cell structure!
+
+**Boot sequence clarification:**
+- `_cv_lite()` extracts `tal` from `["ivory" tal]` → `tal` is the **Arvo core**
+- `u3v_life(tal)` runs the lifecycle formula **on the Arvo core itself**
+- The result is the updated/initialized Arvo kernel
+
+**Mystery resolved:**
+The confusing C Vere log showing "eve=null" must refer to a DIFFERENT usage context (possibly for solid pills or after the ivory is bootstrapped). The ivory pill tail is definitely a CELL, not null!
+
+**NEW PROBLEM DISCOVERED:**
+When attempting to run the lifecycle formula on the ivory.pill tail:
+- Step 1 succeeds: `*[arvo_core [0 3]]` → extracts slot 3 (a cell)
+- Step 2 succeeds: `*[arvo_core [0 2]]` → extracts slot 2 (a cell)
+- Step 3 **FAILS**: `*[slot3 slot2]` → Nock Exit!
+
+This means the ivory.pill file's Arvo core **cannot be executed** by the lifecycle formula!
+
+**HYPOTHESIS:**
+The embedded ivory pill in C Vere (from ivory.c) might be DIFFERENT from the ivory.pill FILE. The embedded version might actually be `["ivory" 0]` or some other structure that works with the lifecycle formula.
+
+**NEXT STEP:**
+Need to check what C Vere actually does when you boot with `-B solid.pill`. Does it:
+1. Load embedded ivory first? OR
+2. Skip ivory entirely and boot directly from solid pill?
+
```c