FABRIC-3.5.md §XXVI: the close protocol, and this document's close condition

Captain Bob, 2026-09-19: documentation sweep and SBOM/SPDX before making
it master's head and tagging, and that is when FABRIC-3.5.md closes. The
tail of the sequence is now fixed and the document has a defined end.

Consolidates item 20 into a real checklist rather than a hunt. CLAUDE.md
alone accumulated four traced errors during this design pass: 23 theory
files against an actual 52, LITHOS_VERSION 2.0.1 against an actual 2.0.0
that FABRIC-3 §I.2 corrected down and CLAUDE.md never followed, the
three-way ACL-pinning contradiction, and the stale 1024-byte mkcapsule
framing. Plus the Tripod membership itself. MANIFEST corrections ride the
strip so the manifest never describes a file that no longer exists, and
the superseded subsystem docs need a deliberate update-or-archive call
rather than a silent edit.

SBOM is a real syft target in the hosted Makefile, so the step is run and
commit -- but the committed output is dated 2026-07-24 and its
DocumentName says StarForth rather than LithosAnanke, plausibly a
monorepo-split artifact. A bill of materials naming the wrong product is
read literally by exactly the audiences it exists for.

Flags that the version for this work is a real decision and that 2.0.1 is
not available for it. Per §I.2 the policy is semantic: 2.0.0 is the QEMU
line, 2.0.1 is the SER5 hardware track, and §I.2 rolled the version back
precisely because claiming 2.0.1 implies hardware verification that is
still FABRIC-3's open topic. This reshuffle is QEMU-only work.

Reports two pieces of unexpected remote state without acting on either.
refs/heads/v2.0.1 still exists although §I.2 records deleting it and
concludes master is the only branch; and refs/pull/1/head exists against
this branch although this session opened no pull request and the repo's
workflow forbids them unless asked.

Records how the close is written: FABRIC-2's dated CLOSED/ARCHIVAL form,
naming the tag, creating no successor since this document is not in the
carry-forward chain, and leaving FABRIC-3 open and authoritative for its
own topic.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VkM1zHGvBerLF6aqkHPweP
This commit is contained in:
Claude
2026-09-19 10:48:48 +00:00
parent ae18f773ce
commit ea1c630eca
+150
View File
@@ -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 `<date>`"** — 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.