diff --git a/FABRIC-3.5.md b/FABRIC-3.5.md index bcfb1324..4d6bbeaa 100644 --- a/FABRIC-3.5.md +++ b/FABRIC-3.5.md @@ -2418,3 +2418,153 @@ which is precisely the kind of claim that survives formalization. - ⬜ **Item 18** (§XVI.7) — the empty-floor halt. **Still the last undecided design item.** - Sequence otherwise unchanged (§XXIII.6): surgical strip first, build, formal re-verification last. + +--- + +## XXVI. The close protocol: doc sweep → SBOM → master HEAD → tag → close this document (Captain Bob, 2026-09-19) + +**Captain Bob, verbatim:** "and documentation sweep, SBOM + spdx before we make it masters head +and tag it. That's when FABRIC-3.5.md is closed." + +So the tail of the sequence is fixed, and this document now has a defined close condition: + +1. Build work (§XXIII.6), ending with the Isabelle/HOL pass (§XXV.2). +2. **Documentation sweep** (§XXVI.1). +3. **SBOM + SPDX regeneration** (§XXVI.2). +4. **Merge to `master` HEAD** (§XXVI.4). +5. **Tag** (§XXVI.3). +6. **Close `FABRIC-3.5.md`** (§XXVI.5). + +### XXVI.1 — The documentation sweep, inventoried + +Item 20 has been accumulating known-stale claims throughout this document. Consolidated, so the +sweep is a checklist rather than a hunt. **Every entry below was traced, not recalled:** + +**`.claude/CLAUDE.md`** — four separate errors found during this design pass: +- "23 Isabelle/HOL theory files (18 core + 5 ACL)" → **52**, all in `proof/ROOT` (§XXV.2). +- `LITHOS_VERSION` "currently `2.0.1`" → **`2.0.0`** (`Makefile.starkernel:83`); `FABRIC-3.md` + §I.2 corrected it down on 2026-09-04 and CLAUDE.md never followed. +- The ACL-pinning three-way contradiction (§XXIV.4) — its own hard rule vs. its own later + advice vs. `ACL.4th`/`kernel_main.c`'s live behaviour. +- `mkcapsule`'s "1024-byte-per-block" framing → the real constraints are block range + `[2048, 5120)` and a **16-content-line** cap (§XVIII.4, per §XXXII.2's own correction, still + outstanding). +- Plus, after this reshuffle: the Tripod described as "(Hera the Mama VM, two Hermes instances, + Artemis)" becomes **Hera / Artemis / Hestia**, and the superseded-subsystem note must add + `FABRIC-3.5.md`. + +**`capsules/MANIFEST.md`** (§XIII.2) — block 4055's "immutable ABI" claim that `FABRIC-2.md:2773` +already declared stale, and block 2049's wrong contents list. Correct **as the files they +describe are stripped** (§XXII.5), so the manifest never describes a file that no longer exists. + +**Superseded subsystem docs** — `.claude/TRIPOD.md`, `HERMES.md`, `ARTEMIS.md`, `CONSOLE.md` +already carry superseded headers, but after this reshuffle they describe a fleet that no longer +exists. Same for `docs/03-architecture/tripod/{TRIPOD,HERMES,ARTEMIS,README}.md`, which +`.claude/CLAUDE.md` still lists as current for Tripod. **Decide deliberately: update, or mark +archival and point at `FABRIC-3.5.md`.** Not a silent edit either way. + +**Also in scope:** `capsules/README.md` (lists `hermes/init.4th` as a live personality), +`ROADMAP.md` / `docs/lithosananke/ROADMAP.md`, `CHANGELOG.md`, `README.md`, +`docs/lithosananke/SYSTEM_ARCHITECTURE.md` and `M7.1.md`, and `proof/COVERAGE.md` (after the +§XXV pass — and per §XXV.3 its *boundary* statement matters more than its file count). +`capsules/BLOCK_MAP.md` is a generated artifact; regenerate, don't hand-edit. + +### XXVI.2 — SBOM: a real target, and currently stale + +**`make sbom`** (`Makefile:740-752`) runs **syft**: +`syft dir:. -o spdx-json=sbom.spdx.json -o spdx=sbom.spdx`. Reproducible, not hand-maintained — +so this step is "run the target and commit the output," provided `syft` is available. + +Two things to check rather than assume: +- **The committed SBOM was generated 2026-07-24** (`sbom.spdx`'s own `Created:` field) — + roughly two months stale before this reshuffle adds or removes a single file. +- **`DocumentName: StarForth`**, not LithosAnanke — plausibly an artifact of the monorepo split, + since `syft` derives it from the directory name. Worth a look during the sweep; a bill of + materials naming the wrong product is exactly the kind of thing a licensee or patent reviewer + reads literally. +- The target lives in the **hosted `Makefile`**, not `Makefile.starkernel`. + +### XXVI.3 — The tag: version semantics here are real, and `2.0.1` is not available + +**Tags are sacred ground** (`.claude/CLAUDE.md`) — "each tag has logs attached proving its +state." And this project has already corrected itself once on exactly this, so the policy must +be read before choosing, not after. + +Per `FABRIC-3.md` §I.2 (2026-09-04), `Makefile.starkernel`'s own versioning policy is +**semantic, not sequential**: +- **`v2.0.0`** = the QEMU release line, even-major/LTS. +- **`v2.0.1`** = the SER5 **hardware-track** line (RDRAND backend + thumbdrive image goal). + +§I.2 rolled `LITHOS_VERSION` *back* from 2.0.1 to 2.0.0 precisely because "claiming `2.0.1` +implies hardware-track progress that was never actually verified on real hardware." **That +verification is still `FABRIC-3.md`'s open topic.** This reshuffle is QEMU-only work. + +**So `2.0.1` must not be used for this**, and the version for the reshuffle is a genuine +decision — **Captain Bob's, not this document's.** The shape of it: a structural Tripod change +on the QEMU line reads as a minor bump (`v2.1.0`) rather than a patch, and `VERSION` (the +embedded engine, currently `3.1.0`) likely moves too, since `BIRTH` registration, the new +Hera-only word and the messaging layer all change. Both are hand-edited in +`Makefile.starkernel` — the `bump-z`/`bump-y` targets were removed 2026-08-15 as non-functional +and must not be resurrected from memory. + +### XXVI.4 — Unexpected remote state, to investigate before the merge — not to clean up + +Traced 2026-09-19 against `origin`. **Reported, not acted on**, per the standing rule about +unfamiliar state: + +- **`refs/heads/v2.0.1` still exists** at `fcba5282`. `FABRIC-3.md` §I.2 item 5 records that + branch as deleted "local and `origin`" on 2026-09-04, having first confirmed it a strict + ancestor, and concludes "`master` is the repo's only branch from here on." **It is not.** + Either the deletion did not take or the branch was recreated. Worth resolving before a tag is + cut, since the whole point of §I.2 was that the `v2.0.1` *name* carries a claim. +- **`refs/pull/1/head` exists** at `bcf41e5` — this document's own §XIII commit. A pull request + was opened against this branch at some point; this session did not create one, and + `.claude/CLAUDE.md`'s subversion-like workflow says "no pull requests unless explicitly + requested." Check what it is before merging, in case the intended path is through it. + +### XXVI.5 — How this document closes + +`FABRIC-3.5.md` closes when the tag exists. The close is a dated header in the form +`FABRIC-2.md` uses — **"Status: CLOSED/ARCHIVAL as of ``"** — stating what the document +produced and naming the tag it closed at. + +**Two things the close must get right**, both established in this document's own opening: + +1. **It does not trigger the carry-forward chain.** The `FABRIC-0 → -1 → -2 → -3` discipline + triggers on *closing* a document and hands its open items to a successor. This document is + not in that chain — it is a standalone topic document — so **closing it creates no + successor and hands nothing forward.** +2. **`FABRIC-3.md` remains open, living and authoritative for its own topic** (bare metal + boot). Nothing here supersedes it, and closing this document does not close that one. + +Any item still open at close time is either carried into `FABRIC-3.md` explicitly (if it has +become bare-metal-boot work) or recorded in the close header as deliberately unfinished — never +silently dropped. + +### XXVI.6 — Punch list, complete + +**Design phase: complete.** One item (18) still carries an unmade decision; the rest is +execution. + +| # | Item | § | +|---|---|---| +| 1 | **Surgical strip — Category A.** Precedes everything | §XXII.6 | +| 2 | Hestia: relocate `fabric.4th` + `font.4th`; move `PLOT`/`FB-*` registration | §XVIII.9 | +| 3 | Hestia's block range vs. `capsule-reserved.txt`, avoiding 4997 | §XVIII.4 | +| 4 | Hestia into `is_fleet_foundation`; birth at `kernel_main.c:865`; switch registration | §XIX.6 | +| 5 | §XVIII.6's headless invariant stated in the implementation | §XVIII.6 | +| 6 | Kernel-Hermes; the sinking latch; `SOS` type 10 | §III, §XXI, §XXIII | +| 7 | `BIRTH` generalization + ACL/DNA inheritance | §VI, §XV.1 | +| 8 | The Hera-only suicide word (`SCUTTLE` recommended); pin beside `BIRTH` | §XXIV | +| 9 | **⬜ DECIDE: item 18** — the empty-floor halt when Hera is already gone | §XVI.7 | +| 10 | Teardown paths reach `STADIUM-EVICT`; verify via `fleet_conserved` | §XV.4 | +| 11 | Category B strips, each as coding proves the item dead | §XXII.4 | +| 12 | Isabelle/HOL pass — deliverable is the restated boundary | §XXV | +| 13 | Documentation sweep | §XXVI.1 | +| 14 | `make sbom`; check `Created:` and `DocumentName` | §XXVI.2 | +| 15 | Resolve the stray `v2.0.1` branch and PR #1 | §XXVI.4 | +| 16 | **⬜ DECIDE: version**, then merge to `master` and tag | §XXVI.3 | +| 17 | Close this document | §XXVI.5 | + +**No code is authorized by this document.** Per Captain Bob's Law, nothing on this list starts +without an explicit instruction.