diff --git a/FABRIC-3.5.md b/FABRIC-3.5.md index 50ba1f7f..afec2402 100644 --- a/FABRIC-3.5.md +++ b/FABRIC-3.5.md @@ -2564,7 +2564,7 @@ execution. | 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 | +| 16 | **Version RULED `2.1.0`** (§XXVIII); merge to `master`, tag `v2.1.0`. Engine `VERSION` still open | §XXVIII | | 17 | Close this document | §XXVI.5 | **No code is authorized by this document.** Per Captain Bob's Law, nothing on this list starts @@ -2663,3 +2663,100 @@ habit to carry into the build. **Punch list (§XXVI.6) stands as written, with item 9 now closed and one decision outstanding: the version number (§XXVI.3).** No code is authorized. + +--- + +## XXVIII. RULING: this release is `2.1.0` (Captain Bob, 2026-09-19) + +`LITHOS_VERSION` becomes **`2.1.0`**, and the tag cut at §XXVI's close is **`v2.1.0`**. + +### XXVIII.1 — Checked against the real policy, not §I.2's paraphrase + +§XXVI.3 worked from `FABRIC-3.md` §I.2's summary. The authoritative statement is the roadmap +table in `Makefile.starkernel` itself (lines ~74–82), which is more specific: + +``` +# Roadmap (per docs/lithosananke/ROADMAP.md "Release Versioning Policy" and +# FABRIC-2.md §G — X.0.0 = QEMU release, X.5.0 = hardware bare-metal release): +# v1.0.x — serial-only production (released) +# v1.5.x — framebuffer VT100 terminal/console milestone (released) +# v2.0.0 — QEMU release (even major = LTS): three-arch QEMU story complete +# v2.0.1 — SER5 hardware-track line: RDRAND backend + generic thumbdrive image goal +# v2.2.0 — amd64 bare-metal (Beelink SER5) — see ROADMAP "Board-by-board rollout" +# v2.5.0 — hardware bare-metal release: real per-arch RNG + real-board boot +``` + +**`2.1.0` is unallocated** — the ladder currently steps 2.0.0 → 2.0.1 → 2.2.0 → 2.5.0. So the +ruling takes a genuine gap rather than overloading an existing rung, and it lands correctly: + +- **Below `v2.2.0` (amd64 bare-metal) and `v2.5.0` (hardware bare-metal release)** — right, + because this reshuffle is QEMU-only work and must claim no hardware progress. That was §I.2's + entire concern when it rolled the version back. +- **Does not disturb `v2.0.1`'s meaning** as the SER5 hardware-track *line*. That name keeps + what it means; nothing is reused. +- **Consistent with `X.0.0` = QEMU / `X.5.0` = hardware bare-metal** — a minor bump inside the + 2.x QEMU-side band, before the hardware rungs. + +A structural change to the Tripod, a new kernel-resident arbiter and a generalized `BIRTH` are +comfortably a minor-version event rather than a patch. + +### XXVIII.2 — The roadmap table must gain a `2.1.0` line, in three places + +The table above is not decoration — it is how the next person reads the ladder. Left alone it +will step 2.0.1 → 2.2.0 with a released `v2.1.0` tag sitting in a gap the table does not +mention. **Add the line wherever the table lives:** + +1. `Makefile.starkernel` (the copy above, beside the `LITHOS_VERSION` edit itself). +2. `docs/lithosananke/ROADMAP.md`, "Release Versioning Policy" — the comment names it as the + upstream source. +3. `FABRIC-2.md` §G is the origin of the scheme but is **CLOSED/ARCHIVAL** — **cite it, do not + edit it.** Amending a closed document to match a later decision is exactly what this series' + discipline forbids. + +### XXVIII.3 — A trap the documentation sweep must not walk into, with precedent + +**`Makefile.starkernel` is not a `.md` file, and this project has already been bitten by +exactly that.** `FABRIC-3.md` §I.2 records it plainly: a FABRIC-series rename looked complete +but had silently skipped `Makefile.starkernel`, `Kconfig.kernel`, `scripts/bleach_zuse_img.sh`, +**four `proof/*.thy` files** and `src/starkernel/arch/amd64/isr.S` — + +> the original sweep's file-list only matched `--include=*.md/*.c/*.h/*.4th`, which silently +> skipped every file without one of those four extensions. Found by re-grepping with the +> extensions **excluded** instead of included. + +**So item 13's sweep (§XXVI.1) must grep by exclusion, not inclusion**, and must expect +version/policy/citation text in Makefiles, `Kconfig.*`, `scripts/*.sh`, `proof/*.thy`, `.S` +sources and `.gitea/workflows/`. The technique §I.2 used to fix it — ordered placeholder +substitution, one pass per file — is the recorded-working method and should be reused rather +than reinvented. + +**And the same exclusion that §I.2 made deliberately still applies:** +`.claude/settings.local.json`'s historical command log and `ClaudeEXPORT/` are frozen audit +records — **rewriting them would falsify an audit trail, not fix a stale citation.** Leave them. + +### XXVIII.4 — Still unruled: `VERSION`, the embedded engine string + +`LITHOS_VERSION` and `VERSION` are independently tracked (`.claude/CLAUDE.md`, and confirmed at +`Makefile.starkernel:83-84`). **`2.1.0` settles the kernel version; the engine version +`VERSION ?= 3.1.0` is not settled by it.** + +It plausibly moves — this reshuffle changes `BIRTH`'s registration, adds a Hera-only word, +relocates the framebuffer primitives' registration and replaces the messaging layer, all of +which are engine-side. But it is a separate string with its own meaning, and +`.claude/CLAUDE.md` warns it "does not auto-sync with the standalone StarForth repo's own +version." **Captain Bob's call, at tag time.** + +Both are hand-edited. The `bump-z`/`bump-y` targets were removed 2026-08-15 as non-functional +(they referenced fields that never existed in the generated `include/version.h`) and must not +be resurrected from memory. + +### XXVIII.5 — Punch list + +- ✅ **Version — RULED**: `LITHOS_VERSION = 2.1.0`, tag `v2.1.0` (§XXVIII). +- ⬜ **Roadmap-table line added in two live places**, `FABRIC-2.md` §G cited not edited + (§XXVIII.2). Folds into item 13. +- ⬜ **Item 13's sweep greps by exclusion**, per §XXVIII.3's precedent. +- ⬜ **`VERSION` (engine) — one decision outstanding**, at tag time (§XXVIII.4). + +**Every design question is ruled and the release number is set.** What remains is execution, +one engine-version call, and the close.