Compare commits
109
Commits
09857b7228
...
master
+4
-4
@@ -5,11 +5,11 @@
|
||||
---
|
||||
|
||||
> **SUPERSEDED (Captain Bob, 2026-08-15).** This document is no longer authoritative.
|
||||
> `FABRIC.md`/`FABRIC-2.md` (repo root — read `FABRIC-2.md` first, it is the current/living
|
||||
> `FABRIC-0.md`/`FABRIC-1.md` (repo root — read `FABRIC-1.md` first, it is the current/living
|
||||
> one) are the sole design-of-record for Artemis work now. Kept here as historical record
|
||||
> only; do not read this for current design authority, and do not cite it in place of
|
||||
> `FABRIC.md`/`FABRIC-2.md`. Artemis becoming the pre-Artemis-closeout blocker (item 4.6) is
|
||||
> tracked in `FABRIC-2.md`, not here. See `.claude/CLAUDE.md`'s own pointer.
|
||||
> `FABRIC-0.md`/`FABRIC-1.md`. Artemis becoming the pre-Artemis-closeout blocker (item 4.6) is
|
||||
> tracked in `FABRIC-1.md`, not here. See `.claude/CLAUDE.md`'s own pointer.
|
||||
|
||||
---
|
||||
|
||||
@@ -148,7 +148,7 @@ for this scope. `capsules/artemis/init.4th` implements the full flat-pool
|
||||
target above.
|
||||
|
||||
**Corrected 2026-08-13 — the "boots live in the Tripod fleet... on every
|
||||
kernel boot" claim below is stale since item 0.1 (`FABRIC.md` Phase 0),
|
||||
kernel boot" claim below is stale since item 0.1 (`FABRIC-0.md` Phase 0),
|
||||
same pattern already found and fixed in `TRIPOD.md`.** Two distinct things
|
||||
were being conflated: Artemis's block-storage *device* (the virtio-blk
|
||||
disk, `disk/artemis.img`) genuinely does auto-attach at the C level at
|
||||
|
||||
+10
-9
@@ -10,12 +10,13 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||
|
||||
> **Superseded subsystem docs (Captain Bob, 2026-08-15):** `.claude/TRIPOD.md`,
|
||||
> `.claude/HERMES.md`, `.claude/ARTEMIS.md`, and `.claude/CONSOLE.md` are all superseded —
|
||||
> `FABRIC.md` and `FABRIC-2.md` (both design history/archival as of 2026-08-25) and
|
||||
> `FABRIC-3.md` (current/living, read this one first) are the sole authoritative source for
|
||||
> Tripod/Hermes/Artemis/Console work now. The four subsystem docs remain in the repo as
|
||||
> historical record only; each carries its own superseded-header pointing here. Do not treat
|
||||
> them as current, do not read them for design authority, and do not cite them in place of
|
||||
> `FABRIC.md`/`FABRIC-2.md`/`FABRIC-3.md`.
|
||||
> `FABRIC-0.md`, `FABRIC-1.md`, and `FABRIC-2.md` (all design history/archival as of
|
||||
> 2026-09-04) and `FABRIC-3.md` (current/living, topic: bare metal boot, read this one first)
|
||||
> are the sole authoritative source for Tripod/Hermes/Artemis/Console work now. The four
|
||||
> subsystem docs remain in the repo as historical record only; each carries its own
|
||||
> superseded-header pointing here. Do not treat them as current, do not read them for design
|
||||
> authority, and do not cite them in place of `FABRIC-0.md`/`FABRIC-1.md`/`FABRIC-2.md`/
|
||||
> `FABRIC-3.md`.
|
||||
|
||||
> **Scope:** This repo is LithosAnanke — the bare-metal UEFI kernel that boots StarForth
|
||||
> directly on hardware. StarForth (the hosted FORTH-79 VM) has its own separate repository
|
||||
@@ -133,14 +134,14 @@ The word-level ACL system is fully implemented, including kernel parity. Key con
|
||||
- Measured overhead: +0.0054%–+0.0088% across all 9 cells; CV = 0.000%
|
||||
- Report confirmed to exist: `experiments/bare_metal/analysis/report/bare_metal_doe_report.pdf`
|
||||
(~2MB, with LaTeX source and figures) — patent support material
|
||||
- **Correction (found 2026-08-20/21, `FABRIC-2.md` §§M–T):** the "ACL-RWT" name itself was
|
||||
- **Correction (found 2026-08-20/21, `FABRIC-1.md` §§M–T):** the "ACL-RWT" name itself was
|
||||
wrong — the Rolling-Window-of-Truth mechanism it was named after was dead code, removed
|
||||
2026-07-08 (`ACL-RECHECK-RW` was never reachable — `acl_recheck()` only ever looks up the
|
||||
11-char `ACL-RECHECK`, never the 14-char `-RW` variant). What this campaign actually
|
||||
measured was the live `ACL-TTL` mechanism under a misleading name, and at `-O0`, before
|
||||
real compiler optimization landed. The corrected, current figure — same live mechanism,
|
||||
correct name, re-run on the current substrate — is **+0.0603% ACL-TTL enforcement overhead,
|
||||
architecture-independent, CV=0.000%** (`FABRIC-2.md` §T, memory
|
||||
architecture-independent, CV=0.000%** (`FABRIC-1.md` §T, memory
|
||||
`project_acl_ttl_overhead_final.md`). Use that number, not the one above.
|
||||
|
||||
**Before writing or modifying any `.4th` capsule file**, read `experiments/bare_metal/README.md`
|
||||
@@ -211,7 +212,7 @@ Output: `build/<arch>/kernel/starkernel_loader.efi` + `build/<arch>/kernel/stark
|
||||
Two independently tracked version strings flow into the generated `include/version.h`:
|
||||
`VERSION` (`Makefile.starkernel` — the embedded StarForth engine version, currently `3.1.0`;
|
||||
note this does **not** auto-sync with the standalone StarForth repo's own version) and
|
||||
`LITHOS_VERSION` (`Makefile.starkernel` — the kernel version, currently `1.5.4`).
|
||||
`LITHOS_VERSION` (`Makefile.starkernel` — the kernel version, currently `2.0.1`).
|
||||
|
||||
### Build configuration (Kconfig — real, wired, not vestigial)
|
||||
|
||||
|
||||
+3
-3
@@ -20,11 +20,11 @@
|
||||
|
||||
> **SUPERSEDED (Captain Bob, 2026-08-15).** This document is no longer authoritative, and its
|
||||
> core premise below ("Console is a 4th Tripod VM, Quadrupod, StarForth-dialect-only") was
|
||||
> architecturally reversed by a later, decided ruling: `FABRIC.md` §17.5 — the framebuffer is
|
||||
> architecturally reversed by a later, decided ruling: `FABRIC-0.md` §17.5 — the framebuffer is
|
||||
> a **utility**, not a patron, not a VM. What actually shipped is direct C
|
||||
> (`src/starkernel/hal/console.c`/`vt100.c`/`framebuffer.c` plus keyboard drivers), called
|
||||
> straight from the kernel, no Hera-spawned Console VM anywhere. `FABRIC.md`/`FABRIC-2.md`
|
||||
> (repo root — read `FABRIC-2.md` first) are the sole design-of-record for Console/framebuffer
|
||||
> straight from the kernel, no Hera-spawned Console VM anywhere. `FABRIC-0.md`/`FABRIC-1.md`
|
||||
> (repo root — read `FABRIC-1.md` first) are the sole design-of-record for Console/framebuffer
|
||||
> work now. Kept here as historical record only. See `.claude/CLAUDE.md`'s own pointer.
|
||||
|
||||
---
|
||||
|
||||
+2
-2
@@ -5,10 +5,10 @@
|
||||
---
|
||||
|
||||
> **SUPERSEDED (Captain Bob, 2026-08-15).** This document is no longer authoritative.
|
||||
> `FABRIC.md`/`FABRIC-2.md` (repo root — read `FABRIC-2.md` first, it is the current/living
|
||||
> `FABRIC-0.md`/`FABRIC-1.md` (repo root — read `FABRIC-1.md` first, it is the current/living
|
||||
> one) are the sole design-of-record for Hermes work now. Kept here as historical record
|
||||
> only — note its message-layout table (8 cells) is confirmed stale against the real shipped
|
||||
> capsule (9 cells, `capsules/hermes/init.4th`), see `FABRIC-2.md`. Do not read this for
|
||||
> capsule (9 cells, `capsules/hermes/init.4th`), see `FABRIC-1.md`. Do not read this for
|
||||
> current design authority. See `.claude/CLAUDE.md`'s own pointer.
|
||||
|
||||
---
|
||||
|
||||
+4
-4
@@ -5,10 +5,10 @@
|
||||
---
|
||||
|
||||
> **SUPERSEDED (Captain Bob, 2026-08-15).** This document is no longer authoritative.
|
||||
> `FABRIC.md`/`FABRIC-2.md` (repo root — read `FABRIC-2.md` first, it is the current/living
|
||||
> `FABRIC-0.md`/`FABRIC-1.md` (repo root — read `FABRIC-1.md` first, it is the current/living
|
||||
> one) are the sole design-of-record for Tripod work now. Kept here as historical record
|
||||
> only; do not read this for current design authority, and do not cite it in place of
|
||||
> `FABRIC.md`/`FABRIC-2.md`. See `.claude/CLAUDE.md`'s own pointer.
|
||||
> `FABRIC-0.md`/`FABRIC-1.md`. See `.claude/CLAUDE.md`'s own pointer.
|
||||
|
||||
---
|
||||
|
||||
@@ -35,8 +35,8 @@ or work execution logic in Hera — stop. You have the wrong VM.
|
||||
|
||||
## The Immediate Goal
|
||||
|
||||
**Corrected 2026-08-13 — stale since item 0.1 (`FABRIC.md` Phase 0), flagged in
|
||||
`FABRIC-2.md` §A item 5.3, never fixed until now.** This section used to say Hera spawns
|
||||
**Corrected 2026-08-13 — stale since item 0.1 (`FABRIC-0.md` Phase 0), flagged in
|
||||
`FABRIC-1.md` §A item 5.3, never fixed until now.** This section used to say Hera spawns
|
||||
Hermes and Artemis automatically at boot. She does not, by deliberate design: item 0.1
|
||||
pruned `capsules/init.4th` to boot Hera alone (confirmed current —
|
||||
`capsules/init.4th` births no other VM). Hermes and Artemis-as-VM-patron births happen
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@ corrected to the valid SMC32 encoding (`0x84000009`).
|
||||
Full three-arch DoE campaign (`L8-DOE`, 48 trials each) re-run clean on all
|
||||
three architectures post-fix: stress campaigns 30/30 PASS, clean `BYE` exit,
|
||||
no exceptions. Full investigation trail, evidence, and dead ends in
|
||||
`FABRIC-2.md` Sections H and I.
|
||||
`FABRIC-1.md` Sections H and I.
|
||||
|
||||
## 2026-07-24 — Kernel 3-arch acceptance test re-run; amd64 dict_hash non-determinism root-caused (`lithosananke`)
|
||||
|
||||
|
||||
+17
-17
@@ -1,8 +1,8 @@
|
||||
# FABRIC.md — the Stadium
|
||||
# FABRIC-0.md — the Stadium
|
||||
|
||||
**Status: CLOSED, 2026-08-12.** This document is archival. It is not edited further and no
|
||||
new work is added to it — everything still open as of the closure date was carried forward
|
||||
into **`FABRIC-2.md`**, which is now the living document. Read `FABRIC-2.md` first for
|
||||
into **`FABRIC-1.md`**, which is now the living document. Read `FABRIC-1.md` first for
|
||||
current status; come back here only for the historical design argument and decision record
|
||||
behind it.
|
||||
|
||||
@@ -20,7 +20,7 @@ places were found where something had actually been resolved by later work but t
|
||||
document's own note was never updated (§19.6 #3, §21.5 #4, the §25.7 `stadium_owner[idx]`
|
||||
bullet, and item 4.5's own parent checkbox) — those four are fixed in place below, since
|
||||
they were bookkeeping errors, not open work. Everything else genuinely still open is in
|
||||
`FABRIC-2.md`.
|
||||
`FABRIC-1.md`.
|
||||
|
||||
**How to read what remains.** §1–15 are the original design argument, written before any
|
||||
code was examined. §16 onward are findings and decisions made against the actual tree, in
|
||||
@@ -35,7 +35,7 @@ quotes that reproduce an earlier section verbatim, and in §12's preserved quest
|
||||
which several sections quote.
|
||||
|
||||
**On `docs/lithosananke/ROADMAP.md`.** As of 2026-08-11, Captain Bob stated this document
|
||||
superseded ROADMAP.md entirely. That still holds, transitively, through `FABRIC-2.md` now.
|
||||
superseded ROADMAP.md entirely. That still holds, transitively, through `FABRIC-1.md` now.
|
||||
|
||||
---
|
||||
|
||||
@@ -375,7 +375,7 @@ Ten minutes on paper. It confirmed the design and caught one case, which is what
|
||||
|
||||
## 10. Sequencing
|
||||
|
||||
**FABRIC.md first, then Hermes native on the fabric, then measure, then Console, then
|
||||
**FABRIC-0.md first, then Hermes native on the fabric, then measure, then Console, then
|
||||
Artemis last.**
|
||||
|
||||
> **Amended by §16.5 and §21.2.** This ordering is still right for the *subsystems*, but it
|
||||
@@ -419,7 +419,7 @@ re-running it. Automated, but budget for it.
|
||||
This is why the admission test comes before code.
|
||||
|
||||
**Early signal:** ARTEMIS.md, HERMES.md, CONSOLE.md and TRIPOD.md each currently describe
|
||||
their own heat mechanics. After FABRIC.md, each should shrink to roughly three lines —
|
||||
their own heat mechanics. After FABRIC-0.md, each should shrink to roughly three lines —
|
||||
what an entry is here, what heat means, what the reap event is. If any one of them gets
|
||||
*longer*, that subsystem is fighting the fabric, and you will know which one before
|
||||
writing code.
|
||||
@@ -1562,7 +1562,7 @@ noun was overloaded.
|
||||
2.1** — `vm_physics_touch()` was restated on the virtual tick (no `now_ns` parameter at
|
||||
all), closing exactly the gap this point raised. This item's own cross-reference (*Refs:*
|
||||
§19.6 #3) points back here; this note closes the loop the other direction. Never annotated
|
||||
here at the time (found during the 2026-08-12 FABRIC-2.md audit).
|
||||
here at the time (found during the 2026-08-12 FABRIC-1.md audit).
|
||||
|
||||
---
|
||||
|
||||
@@ -1623,13 +1623,13 @@ There is no renormalisation anywhere. `vm_physics_conserved()` tests a genuine i
|
||||
dropped. **The "guarded, shouldn't happen" description was only half right** — the
|
||||
Hera-is-root case was reachable via `S" Hera" KILL` (`mama_word_kill()` called
|
||||
`vm_physics_retire()` before `capsule_vm_kill()`'s own Hera guard ran), fixed 2026-08-13
|
||||
(`FABRIC-2.md` §C). The broken-parent-chain case remains genuinely unreachable
|
||||
(`FABRIC-1.md` §C). The broken-parent-chain case remains genuinely unreachable
|
||||
(`parent_vm_id` is set once at birth, never rewritten) and is not tracked further.
|
||||
2. ~~**Truncation** (`:304-305`). The proportional fan-out computes
|
||||
`(moved_total * heat) / others_total` per VM in integer arithmetic. The shares sum to
|
||||
*less than* `moved_total`. **Every multi-VM touch loses a little heat**, so the sum drifts
|
||||
downward monotonically. `VM_PHYSICS_EPSILON_Q48` is 3277 — 5% of `Q48_ONE` — so given
|
||||
enough touches this would eventually trip.~~ **WRONG, corrected 2026-08-13** (`FABRIC-2.md`
|
||||
enough touches this would eventually trip.~~ **WRONG, corrected 2026-08-13** (`FABRIC-1.md`
|
||||
§B "Fleet heat leak," investigated when item 4.2 made this measurable) — the truncated
|
||||
`share` is what actually moves on *both* sides of `vm_physics_transfer()`, so the fleet
|
||||
sum cannot drift from this path; only path 1 above can. Left standing here per this
|
||||
@@ -1655,7 +1655,7 @@ conservation law the project makes claims about. It is small per touch and may b
|
||||
tolerable, but it is monotonic, and nobody has measured how far it drifts over a long run.~~
|
||||
**WRONG, corrected 2026-08-13** — see the strikethrough correction on path 2 above. Path 1
|
||||
(the dying-VM-is-root/broken-chain drop) is the only live defect; it is tracked in
|
||||
`FABRIC-2.md` §C, not here, per this document's closure.
|
||||
`FABRIC-1.md` §C, not here, per this document's closure.
|
||||
|
||||
### 20.3 Nesting — §12 Q6 is less open than it looks
|
||||
|
||||
@@ -1898,7 +1898,7 @@ level it was born on.
|
||||
4. ~~**§20.5 #4 remains open.**~~ **RESOLVED by item 1.7 (§25.2), 2026-08-04** — this
|
||||
section (§21.5) was written before that ruling and never updated to point to it. Bounded
|
||||
by a Kconfig-tunable cap, default 2, enforced at VM-birth time. See §20.5 #4 for the full
|
||||
resolution. Stale cross-reference, not new work (found during the 2026-08-12 FABRIC-2.md
|
||||
resolution. Stale cross-reference, not new work (found during the 2026-08-12 FABRIC-1.md
|
||||
audit).
|
||||
|
||||
---
|
||||
@@ -3672,7 +3672,7 @@ document and committing that amendment as its own item.*
|
||||
> - Self-test scaffolding (`kernel_main.c`, diagnostic-only, not production code):
|
||||
> +119 / −0, 1 file.
|
||||
> - **Total: 12 implementation files, +759 / −120 (879 lines changed).**
|
||||
> - **File count:** 12 implementation files (13 including this write-up in `FABRIC.md`
|
||||
> - **File count:** 12 implementation files (13 including this write-up in `FABRIC-0.md`
|
||||
> itself).
|
||||
- [ ] **4.3 — Console.** Settles 1.11 as part of the work. *Refs:* §17.5.
|
||||
|
||||
@@ -5109,7 +5109,7 @@ document and committing that amendment as its own item.*
|
||||
- [x] **4.4c — Wire `console_fb_init()` into the boot path.** Found while verifying 4.4d
|
||||
(below) by screendump — not a bug in 4.4a/4.4b, a pre-existing, deliberate gap.
|
||||
`kernel_main.c:830-834` has an explicit comment: *"console.c / vt100.c are superseded by
|
||||
the Console drawing-fabric redesign (FABRIC.md §27) and are deliberately not invoked
|
||||
the Console drawing-fabric redesign (FABRIC-0.md §27) and are deliberately not invoked
|
||||
here... `fb_init()` wires the raw GOP framebuffer directly... nothing else touches it."*
|
||||
Only raw `fb_init()` runs; `console_fb_init()` (which calls `vt100_init()`) is never
|
||||
called anywhere in the boot sequence. Consequence, confirmed by screendump: `vt100_putc()`
|
||||
@@ -6261,11 +6261,11 @@ document and committing that amendment as its own item.*
|
||||
|
||||
> **Parent closed 2026-08-12.** All six sub-items (4.5a–4.5f) below are `[x]` done; 4.5f's
|
||||
> own done-when is satisfied by 4.4g's real landing, not a separate pass. This checkbox was
|
||||
> never flipped at the time — pure bookkeeping, not new work (found during the FABRIC-2.md
|
||||
> never flipped at the time — pure bookkeeping, not new work (found during the FABRIC-1.md
|
||||
> audit). One real loose end surfaced by 4.5f's own text, not closed by any of this: the
|
||||
> ACL-RWT DoE campaign's overhead numbers (CLAUDE.md, "+0.0054%–+0.0088%") were all measured
|
||||
> at `-O0`, before this item enabled real optimization — nobody has re-measured or even
|
||||
> asked whether they're still comparable. Carried forward to FABRIC-2.md.
|
||||
> asked whether they're still comparable. Carried forward to FABRIC-1.md.
|
||||
|
||||
- [x] **4.5a — Full ISR/interrupt-context global-state audit, all three architectures.**
|
||||
Investigation only, no code change. For each architecture, enumerate every vector actually
|
||||
@@ -6797,7 +6797,7 @@ so.*
|
||||
folded into item 4.2's scope by explicit Captain Bob ruling**, fixed and verified: a
|
||||
resident cell's evict-credit lands in the correct VM's reservoir with two VMs holding
|
||||
quotas (Hera + Hermes), not just asserted from reading the code. This bullet was never
|
||||
struck through at the time; stale, not new work (found during the 2026-08-12 FABRIC-2.md
|
||||
struck through at the time; stale, not new work (found during the 2026-08-12 FABRIC-1.md
|
||||
audit). See item 4.2's *Done when* list and its 2026-08-05 addendum.
|
||||
- **Taxonomy and lexicon.** Raised by Captain Bob 2026-08-04, mid-item-3.1. This document's
|
||||
physics-flavored vocabulary (heat, mass, density, patron, Stadium, and the rest) needs a
|
||||
@@ -6805,7 +6805,7 @@ so.*
|
||||
covers the growing set of Kconfig build knobs (`STADIUM_MAX_VM_COUNT` and its siblings) so
|
||||
the terminology in code, Kconfig help text, and this document stays one language instead
|
||||
of drifting apart. Not scoped, not placed in a phase. Captain Bob: "I guess that we didn't
|
||||
finish out FABRIC.md quite as much as we thought."
|
||||
finish out FABRIC-0.md quite as much as we thought."
|
||||
|
||||
### 25.7.1 Second review pass — 2026-08-03, pre-coding. Awaiting rulings.
|
||||
|
||||
+4420
File diff suppressed because it is too large
Load Diff
+4769
-4357
File diff suppressed because it is too large
Load Diff
+1668
-3439
File diff suppressed because it is too large
Load Diff
+106
@@ -0,0 +1,106 @@
|
||||
# FABRIC-4.md — forward-looking design notes
|
||||
|
||||
**Status:** Not a successor to `FABRIC-3.md` and not a punch-list document. `FABRIC-3.md` is
|
||||
the current living document (bare metal boot, opened 2026-09-04, successor to the now-closed
|
||||
`FABRIC-2.md`) — nothing here supersedes it, and this file doesn't follow the
|
||||
close-and-carry-forward discipline `FABRIC-0.md` → `FABRIC-1.md` → `FABRIC-2.md` → `FABRIC-3.md`
|
||||
used (that chain triggers on *closing* a document; `FABRIC-3.md` isn't closed). This is a
|
||||
separate, lower-discipline scratchpad for design ideas caught early — theory-stage,
|
||||
pre-punch-list, often missing a stated "why" on purpose (captured as raised, not fully
|
||||
justified yet). An idea graduates out of here into `FABRIC-3.md` (or wherever the living
|
||||
document is by then) once it has a real scope, not before.
|
||||
|
||||
---
|
||||
|
||||
## 1. Stadium-level "wheel" — a second clock alongside the heartbeat (2026-09-03)
|
||||
|
||||
Raised in conversation with Captain Bob, theory stage — no code, no scope, deliberately not
|
||||
punch-listed yet.
|
||||
|
||||
**The mechanism.** A second clock, independent of but derived from the true heartbeat
|
||||
(`HeartbeatState`, Loop #7), advanced by a fixed-point (Q48.16, this project's standard)
|
||||
phase accumulator: each master heartbeat tick adds a `rate` scalar to the wheel's own
|
||||
`phase`; whenever `phase` crosses `1.0` the wheel fires (advances its own state) and the
|
||||
crossing remainder carries forward. This is a continuous scalar, not an integer tick-divisor
|
||||
— `rate` can sit anywhere, including above `1.0`. A wheel with `rate > 1` fires more than
|
||||
once per master tick (multiple threshold-crossings per tick, remainder still carried); one
|
||||
with `rate < 1` accumulates across several master ticks before firing once. Nothing about the
|
||||
mechanism privileges either side of `1.0` — "runs ahead of baseline" and "runs stretched
|
||||
behind baseline" are the same math with a different scalar.
|
||||
|
||||
**What feeds it.** Not a new signal source — this wheel listens to two already-real, already-
|
||||
built mechanisms: `rolling_window_of_truth.c` (Loop #2's circular-buffer execution history —
|
||||
`rolling_window_measure_diversity()`, `rolling_window_find_hottest_word()`,
|
||||
`rolling_window_count_transition()`, `rolling_window_pattern_capture_rate()`,
|
||||
`rolling_window_is_warm()`) and `inference_engine.c` (Loops #5/#6 — `InferenceOutputs`:
|
||||
decay-slope, variance-inflection point, fit quality). Both exist today at the **per-VM**
|
||||
level (each patron/word-owning VM has its own rolling window and runs its own inference
|
||||
pass) — the wheel itself is meant to live at the **Stadium** level, one layer up. This is a
|
||||
genuinely new axis: nothing today aggregates RWOT/inference-engine output across the whole
|
||||
Stadium floor into one fleet-wide signal. **Open, not decided:** what the aggregation actually
|
||||
is (sum across patrons? mean? the hottest patron's own values only? something else) — flagged
|
||||
in conversation, not resolved.
|
||||
|
||||
**What it's for.** Not a sieve itself. The wheel is a *scheduler/gate*: it decides *when* to
|
||||
slip an appropriate sieve into a stack of sieves that doesn't exist yet (see §2 below) —
|
||||
running its own clock, potentially ahead of the true heartbeat, is what buys it lead time to
|
||||
notice a transition worth reacting to before the baseline heartbeat would get there on its
|
||||
own. It is not itself the thing doing the sieving.
|
||||
|
||||
**Build sequencing, decided in conversation.** `rate` starts as a fixed build parameter (same
|
||||
shape as `ACL-BASE-TTL`/`Q.SLOT` — a plain constant or Kconfig symbol, not adaptive from day
|
||||
one). Reasoning, Captain Bob's own: a fixed rate is the only version that can go through this
|
||||
project's existing DoE apparatus and produce a clean, attributable measurement (rate held
|
||||
constant, everything else varies) — if the rate self-tunes from day one there's no fixed
|
||||
baseline to compare "does the wheel actually help" against. Only *after* a real, measured
|
||||
baseline exists does `rate` itself graduate to adaptive/self-tuning — reusing the same
|
||||
inference-engine machinery the wheel already listens to, not new plumbing. This mirrors the
|
||||
L8 Jacquard selector's own real history: hardcoded compudynamics constant first, later
|
||||
replaced by the VM Fleet Attractor's dynamically-inferred rate
|
||||
(`docs/working/architecture/VM-FLEET-ATTRACTOR-DESIGN-20260705.md`). Same graduation, one
|
||||
level up the stack.
|
||||
|
||||
**Explicitly not decided yet, per Captain Bob ("we'll talk about why later"):**
|
||||
- The actual *purpose* — why this wheel, what real problem it solves. Deferred on purpose.
|
||||
- The sieve stack itself — what a "sieve" is concretely, what gets sieved, how many. A larger,
|
||||
separate vision (128–256 wheels, each fed by an "appropriate" — possibly learned/neural,
|
||||
vocabulary not yet resolved against anything this codebase currently has — source, forming
|
||||
a coincidence-pattern sieve) was raised earlier in the same conversation as a *distinct*,
|
||||
further-out idea; this single-wheel scheduler is deliberately scoped smaller and doesn't
|
||||
presuppose that larger picture is right.
|
||||
- Whether "trivial to add a wheel" (an earlier framing) still matters once there's only one —
|
||||
a generic `{rate, phase, state}` table is a premature abstraction for a single instance;
|
||||
build the one wheel concretely first, generalize only if/when a second one is actually
|
||||
needed (this project's own standing convention — three similar lines beat a premature
|
||||
abstraction).
|
||||
|
||||
## 2. A pinned GPIO VM per real-hardware board (2026-09-04)
|
||||
|
||||
Raised in conversation with Captain Bob during `FABRIC-3.md` §IV/§V's bare-metal-boot
|
||||
planning — theory stage, no code, no scope, deliberately not punch-listed yet.
|
||||
|
||||
**The idea, as stated:** the Raspberry Pi 5 will need a special pinned VM dedicated to GPIO —
|
||||
presumably following the same Tripod precedent Hermes/Artemis already established (a
|
||||
permanently-pinned, born-at-boot VM with a fixed role, per `FABRIC-2.md` §H.1's "pinned
|
||||
sessions never leave" model). Whether the Milk-V Mars needs the same treatment is explicitly
|
||||
**not yet decided** — Captain Bob's own framing: "same for Milk-V (? not sure here)." Worth
|
||||
noting the Mars does have its own 40-pin GPIO header (§VI), so the question isn't "does it
|
||||
have GPIO" but whether it needs its own *dedicated pinned VM* for it the same way the Pi 5
|
||||
does, or whether GPIO access there fits some other shape.
|
||||
|
||||
**Why a dedicated VM, not just a C driver, presumably (not yet confirmed as the actual
|
||||
reasoning — inferred from the Tripod precedent, not stated outright):** GPIO is shared,
|
||||
stateful hardware that multiple capsules/patrons might want to touch — the same category of
|
||||
problem Hermes (messaging) and Artemis (block storage) already solve by being a dedicated,
|
||||
addressable VM other patrons talk to, rather than a bare C primitive anyone can call directly.
|
||||
|
||||
**Explicitly not decided yet:**
|
||||
- Whether Milk-V Mars needs the same pinned-VM treatment, or something else.
|
||||
- What this VM's own vocabulary/interface would look like (a `GPIO-READ`/`GPIO-WRITE`-shaped
|
||||
word set? something richer, given the Pi 5's GPIO header also muxes UART/SPI per §IV.1?).
|
||||
- Whether this is one pinned VM per board doing double duty (GPIO + whatever else that board's
|
||||
bring-up needs) or GPIO specifically warrants its own separate VM distinct from, say, a
|
||||
future UART-handling VM.
|
||||
- How this interacts with §IV.1's own still-open native-boot-flow work — a GPIO VM needs GPIO
|
||||
register addresses from the DTB the same way the rest of that bring-up does, so this idea
|
||||
isn't independent of that work, just downstream of it.
|
||||
+14
-9
@@ -66,15 +66,20 @@ config HEARTBEAT_SLOPE_VALIDATION_FREQUENCY
|
||||
revalidation runs.
|
||||
|
||||
config EMERGENCY_CONSOLE_ENABLED
|
||||
bool "Interactive fault handler / error-recovery REPL (EMERGENCY_CONSOLE_ENABLED)"
|
||||
default y
|
||||
bool "Interactive fault handler / debug-escape REPL (EMERGENCY_CONSOLE_ENABLED)"
|
||||
default n
|
||||
help
|
||||
y = REPL recovers from errors and continues (interactive
|
||||
fallthrough surface). Set to n for production, embedded, or
|
||||
high-security builds where an error should not hand control back
|
||||
to an interactive console. Applies to both the hosted VM and the
|
||||
kernel build; the kernel's emergency_console VM flag additionally
|
||||
applies only to the bare `ok>` REPL -- zuse sessions are always
|
||||
subject to ACL regardless of this setting.
|
||||
Decided 2026-09-05: no console for the running system unless a
|
||||
thumbdrive is present -- n (the new default) is the production/
|
||||
high-security posture. When n: the kernel boots headless (no
|
||||
banner, no prompt, no interactive surface at all) until a real
|
||||
identity logs in via an attached thumbdrive (a regular user's
|
||||
WIREBIND login or Zuse's own attach/genesis-mint -- neither is
|
||||
special), and a runtime error halts the VM rather than handing
|
||||
control back to an interactive console (no fallthrough surface).
|
||||
Set to y only for debugging/recovery builds: the kernel shows its
|
||||
interactive console immediately at boot regardless of any
|
||||
thumbdrive, and REPL errors recover and continue instead of
|
||||
halting. Applies to both the hosted VM and the kernel build.
|
||||
|
||||
endmenu
|
||||
|
||||
+11
-11
@@ -46,7 +46,7 @@ config STADIUM_VM_MEMORY_PERCENT
|
||||
(kmalloc_get_stats(), taken AFTER the cell array's own allocation),
|
||||
divided by VM_MEMORY_SIZE (5 MiB, include/vm.h), floored to 1 so Hera
|
||||
can always boot. No upper ceiling -- birth is refused once the
|
||||
computed bound is reached (FABRIC.md item 1.5's refusal behaviour is
|
||||
computed bound is reached (FABRIC-0.md item 1.5's refusal behaviour is
|
||||
unchanged), it just isn't a compile-time guess anymore. Default of
|
||||
50% is an untuned placeholder, not a derived optimum, same DoE-later
|
||||
treatment as STADIUM_MEMORY_PERCENT.
|
||||
@@ -55,7 +55,7 @@ config STADIUM_CONTAINS_DEPTH_MAX
|
||||
int "Patron containment chain depth cap (STADIUM_CONTAINS_DEPTH_MAX)"
|
||||
default 5
|
||||
help
|
||||
Hard bound on how many patrons deep a `contains` chain (FABRIC.md
|
||||
Hard bound on how many patrons deep a `contains` chain (FABRIC-0.md
|
||||
item 1.1, the ninth cell wire) may nest. A patron with a non-none
|
||||
`contains` link cannot be reaped -- reap-gating enforcement of
|
||||
this bound is item 3.5's scope, not yet implemented. Distinct
|
||||
@@ -71,12 +71,12 @@ config STADIUM_CAPACITY_TICK
|
||||
transfer-slope estimate (vm_physics_tick() -- a passive median
|
||||
recompute over recent touch samples, not a capacity/transfer
|
||||
decision itself), expressed in virtual ticks -- never wall-clock.
|
||||
Wired in 2026-08-15 (FABRIC-2.md F.2/§12 Q5): this counter is fed
|
||||
Wired in 2026-08-15 (FABRIC-1.md F.2/§12 Q5): this counter is fed
|
||||
by EVERY live VM's own vm_tick(), not one VM's, so it previously
|
||||
shared HEARTBEAT_INFERENCE_FREQUENCY (1000) and fired roughly
|
||||
(live VM count) times faster than a single VM's own heat-inference
|
||||
gate -- backwards from the "order of magnitude apart" minimum
|
||||
(FABRIC.md §22.4). Default of 4000 is a flat, untuned placeholder
|
||||
(FABRIC-0.md §22.4). Default of 4000 is a flat, untuned placeholder
|
||||
picked to roughly restore that separation at Tripod's known
|
||||
4-VM topology (Hera + two Hermes + Artemis) -- not computed from
|
||||
live VM count at runtime, deliberately: a fixed constant, same
|
||||
@@ -90,11 +90,11 @@ config STADIUM_MEMORY_PERCENT
|
||||
help
|
||||
The Stadium's global cell array is sized at boot from
|
||||
pmm_get_stats().free_bytes, taken at the point of allocation
|
||||
(FABRIC.md item 3.2, §17.6 position (b): "sized at boot from the
|
||||
(FABRIC-0.md item 3.2, §17.6 position (b): "sized at boot from the
|
||||
memory budget", not a hardcoded cell count). This is the fraction
|
||||
of that free-byte figure the array claims, rounded down to whole
|
||||
64-byte cells. Default of 1% is conservative -- comfortably clears
|
||||
the ~4096-cells-per-VM illustrative figure in FABRIC.md §23.3
|
||||
the ~4096-cells-per-VM illustrative figure in FABRIC-0.md §23.3
|
||||
against a QEMU -m 1024 test config while leaving the kernel heap
|
||||
and everything else nearly all of physical memory.
|
||||
|
||||
@@ -102,7 +102,7 @@ config STADIUM_WORD_HEAT_QUANTUM
|
||||
int "Q48.16 heat quantum moved per word touch/starter-grant (STADIUM_WORD_HEAT_QUANTUM)"
|
||||
default 2048
|
||||
help
|
||||
FABRIC.md §17.7 (item 4.1): the fixed Q48.16 amount transferred between
|
||||
FABRIC-0.md §17.7 (item 4.1): the fixed Q48.16 amount transferred between
|
||||
a VM's Stadium reservoir and a word patron's cell on every touch
|
||||
(already-resident) or starter-grant admission attempt (non-resident,
|
||||
Option B). Q48_ONE is 65536; the default of 2048 is Q48_ONE divided by
|
||||
@@ -116,7 +116,7 @@ config STADIUM_WORD_COOL_RATE_Q48
|
||||
int "Q48.16 fraction of resident heat removed per tick (STADIUM_WORD_COOL_RATE_Q48)"
|
||||
default 21845
|
||||
help
|
||||
FABRIC.md §17.7 (item 4.1): redirects Loop #3's decay shape onto
|
||||
FABRIC-0.md §17.7 (item 4.1): redirects Loop #3's decay shape onto
|
||||
Stadium word-patron heat instead of discarding it -- cooled heat
|
||||
returns to the VM's reservoir rather than vanishing, so this must be a
|
||||
fraction of the patron's OWN current heat removed per elapsed tick
|
||||
@@ -132,7 +132,7 @@ config STADIUM_BLOCK_HEAT_QUANTUM
|
||||
int "Q48.16 heat quantum moved per block touch/starter-grant (STADIUM_BLOCK_HEAT_QUANTUM)"
|
||||
default 2048
|
||||
help
|
||||
FABRIC-3.md §B (MIGRATE punch-list item): same role as
|
||||
FABRIC-2.md §B (MIGRATE punch-list item): same role as
|
||||
STADIUM_WORD_HEAT_QUANTUM above, for block patrons touched via
|
||||
BLOCK/BUFFER/UPDATE (stadium_block_dispatch(), stadium_blocks.c).
|
||||
Default matches the word quantum -- no evidence yet that blocks need a
|
||||
@@ -144,7 +144,7 @@ config STADIUM_BLOCK_COOL_RATE_Q48
|
||||
int "Q48.16 fraction of resident block heat removed per tick (STADIUM_BLOCK_COOL_RATE_Q48)"
|
||||
default 21845
|
||||
help
|
||||
FABRIC-3.md §B (MIGRATE punch-list item): same role as
|
||||
FABRIC-2.md §B (MIGRATE punch-list item): same role as
|
||||
STADIUM_WORD_COOL_RATE_Q48 above, for block patrons. Default matches
|
||||
the word cool rate for the same reason the heat quantum above does --
|
||||
untuned placeholder, not a derived optimum.
|
||||
@@ -153,7 +153,7 @@ config STADIUM_BLOCK_TRACK_CAP_MULT
|
||||
int "Multiplier on stadium_cell_count() for the block residency table's capacity"
|
||||
default 2
|
||||
help
|
||||
FABRIC-3.md §B (MIGRATE punch-list item): stadium_blocks.c's
|
||||
FABRIC-2.md §B (MIGRATE punch-list item): stadium_blocks.c's
|
||||
(quota_slot, lbn) -> cell_index hash table is a fixed-capacity
|
||||
open-addressing table sized at stadium_blocks_init() as
|
||||
stadium_cell_count() * this value. At most stadium_cell_count() blocks
|
||||
|
||||
+132
-15
@@ -71,12 +71,16 @@ MAKEFLAGS += -j$(NPROC)
|
||||
endif
|
||||
|
||||
# Version
|
||||
# Roadmap:
|
||||
# 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 (current)
|
||||
# v2.0.0 — StarForth SDK release; v2.x.x development begins from there
|
||||
# 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
|
||||
VERSION ?= 3.1.0
|
||||
LITHOS_VERSION ?= 1.5.4
|
||||
LITHOS_VERSION ?= 2.0.0
|
||||
|
||||
# ==============================================================================
|
||||
# BUILD PATHS
|
||||
@@ -101,6 +105,20 @@ DOE_LATEST_DIR := experiments/bare_metal/latest
|
||||
|
||||
CAPSULES_DIR ?= capsules
|
||||
ARTDISK ?= disk/artemis.img
|
||||
# XHCI_PORTS -- real top-level port count the qemu-xhci controller exposes on the
|
||||
# xhci0.0 bus (p2 == p3 == this value; these are the SAME physical dual-role ports
|
||||
# counted from the USB2 and USB3 register sets respectively, NOT additive to p2+p3 --
|
||||
# confirmed live 2026-09-06, the stock default p2=4,p3=4 exposes exactly 4 real ports,
|
||||
# not 8). Every usb-storage device attached below or via QEMU_EXTRA must get its own
|
||||
# explicit port=N less than this value: exceed it and QEMU silently drops the overflow
|
||||
# onto an auto-inserted internal USB2 hub, which the xHCI/BOT driver correctly refuses
|
||||
# to treat as Mass Storage (root cause of the FABRIC-3.md §IX.5 "4th-device enumeration
|
||||
# failure" -- misread as a driver bug at the time, it never was one). Sized with real
|
||||
# headroom above the current 9-device identity roster (Zuse + 8 minted identities)
|
||||
# rather than matching it exactly, per Bob's standing ruling against hardcoding a bound
|
||||
# to today's scale (FABRIC-3.md §VII.4). Override if a future test needs more, e.g.
|
||||
# `make -f Makefile.starkernel qemu XHCI_PORTS=32`.
|
||||
XHCI_PORTS ?= 16
|
||||
# ZUSEDISK -- Zuse's own minted USB thumbdrive, attached by default so a
|
||||
# plain `make qemu` lands already authenticated into the Zuse identity
|
||||
# (Captain Bob, 2026-08-28). Attached at QEMU launch time via -drive/
|
||||
@@ -110,7 +128,7 @@ ARTDISK ?= disk/artemis.img
|
||||
# xhci_poll_events() alone is purely hotplug-event-driven and would never
|
||||
# see a device present before controller reset. Override to "" (empty) to
|
||||
# boot without Zuse attached, e.g. `make -f Makefile.starkernel qemu ZUSEDISK=`.
|
||||
ZUSEDISK ?= disk/zuse.img
|
||||
ZUSEDISK ?= disk/thumbdrives/zuse-thumb-ident.img
|
||||
# Precomputed (not inlined as $(if ...,...)) because the drive/device specs
|
||||
# below are comma-heavy and GNU make's $(if) function splits its own
|
||||
# arguments on every top-level comma -- inlining it silently truncated the
|
||||
@@ -118,7 +136,7 @@ ZUSEDISK ?= disk/zuse.img
|
||||
# dropped, confirmed live via `ps aux` showing the truncated qemu command
|
||||
# line (2026-08-28).
|
||||
ifneq ($(strip $(ZUSEDISK)),)
|
||||
ZUSEDISK_QEMU_ARGS := -drive if=none,id=zusedrv,file=$(ZUSEDISK),format=raw -device usb-storage,bus=xhci0.0,drive=zusedrv
|
||||
ZUSEDISK_QEMU_ARGS := -drive if=none,id=zusedrv,file=$(ZUSEDISK),format=raw -device usb-storage,bus=xhci0.0,port=1,drive=zusedrv
|
||||
else
|
||||
ZUSEDISK_QEMU_ARGS :=
|
||||
endif
|
||||
@@ -129,7 +147,7 @@ MKCAPSULE_SRC = tools/mkcapsule.c tools/pkcs8_ed25519.c \
|
||||
src/starkernel/crypto/sha512.c
|
||||
MKCAPSULE_BIN = $(BUILD_DIR)/tools/mkcapsule
|
||||
# Milestone 6 (Phase 8): the snakeoil intermediate's private key, generated
|
||||
# offline outside this repo entirely (see FABRIC-3.md's Phase 8 §Milestone 6
|
||||
# offline outside this repo entirely (see FABRIC-2.md's Phase 8 §Milestone 6
|
||||
# writeup) -- not present in CI or a fresh checkout, so signing is skipped
|
||||
# gracefully ($(wildcard ...) below) rather than failing the build. Override
|
||||
# with `make SIGN_KEY=/path/to/key.pem ...` on a machine that holds it.
|
||||
@@ -223,7 +241,7 @@ LOADER_LD ?= $(LD)
|
||||
# has no dynamic linker to populate a GOT, so those reads silently returned
|
||||
# NULL. PLATFORM_TIME_NO_INLINE (removed 2026-08-06) was a symbol-specific
|
||||
# workaround for the same underlying bug, made unnecessary once amd64 got
|
||||
# the real fix; see FABRIC.md for the write-up).
|
||||
# the real fix; see FABRIC-0.md for the write-up).
|
||||
COMMON_CFLAGS := \
|
||||
-std=c99 -Wall -Werror -Wextra \
|
||||
-O2 -U_FORTIFY_SOURCE \
|
||||
@@ -266,7 +284,9 @@ DOE_SEED ?= 12345
|
||||
# EMERGENCY_CONSOLE_ENABLED is blanket-forwarded (unlike the opt-in-only
|
||||
# knobs below), so it's repointed through the Kconfig bridge the same way
|
||||
# as the hosted Makefile's STRICT_PTR (Phase 3) -- Phase 4 heartbeat family.
|
||||
$(eval $(call kconfig_bool,EMERGENCY_CONSOLE_ENABLED,1))
|
||||
# Default flipped 0 (was 1) 2026-09-05: headless-until-login is now the
|
||||
# production default (Kconfig.heartbeat's own default n, same decision).
|
||||
$(eval $(call kconfig_bool,EMERGENCY_CONSOLE_ENABLED,0))
|
||||
LOADER_CFLAGS := $(LOADER_BASE_CFLAGS) -I$(KERNEL_SRC)/vm
|
||||
KERNEL_CFLAGS := $(COMMON_CFLAGS) -D__STARKERNEL__ -I$(KERNEL_SRC)/vm
|
||||
|
||||
@@ -475,6 +495,7 @@ endif
|
||||
|
||||
KERNEL_SRCS_BASE := \
|
||||
$(KERNEL_SRC)/kernel_main.c \
|
||||
$(KERNEL_SRC)/boot/cmdline.c \
|
||||
$(wildcard $(KERNEL_SRC)/hal/*.c) \
|
||||
$(wildcard $(KERNEL_SRC)/memory/*.c) \
|
||||
$(wildcard $(KERNEL_SRC)/math/*.c) \
|
||||
@@ -524,7 +545,8 @@ LOADER_EXTRA_SRCS := \
|
||||
$(KERNEL_SRC)/vm/q48_stubs.c \
|
||||
$(KERNEL_SRC)/vm/stadium.c \
|
||||
$(KERNEL_SRC)/vm/stadium_words.c \
|
||||
$(KERNEL_SRC)/vm/stadium_blocks.c
|
||||
$(KERNEL_SRC)/vm/stadium_blocks.c \
|
||||
$(KERNEL_SRC)/vm/session.c
|
||||
|
||||
KERNEL_EXTRA_SRCS := $(LOADER_EXTRA_SRCS)
|
||||
|
||||
@@ -554,6 +576,7 @@ KERNEL_OBJS := \
|
||||
|
||||
.PHONY: all clean clean-kernel kernel kernel-all
|
||||
.PHONY: qemu qemu-esp qemu-gdb
|
||||
.PHONY: thumbdrive iso-usb
|
||||
.PHONY: info help
|
||||
|
||||
# ==============================================================================
|
||||
@@ -759,7 +782,18 @@ QEMU_DISPLAY ?= gtk
|
||||
# boot). Existing use: attaching a disposable USB test image for WRITE(10)
|
||||
# validation, e.g.
|
||||
# QEMU_EXTRA="-drive if=none,id=usbtest,file=disk/usbwrite-test.img,format=raw \
|
||||
# -device usb-storage,bus=xhci0.0,drive=usbtest"
|
||||
# -device usb-storage,bus=xhci0.0,port=2,drive=usbtest"
|
||||
# Give every extra usb-storage device its own explicit port= (ZUSEDISK_QEMU_ARGS
|
||||
# above already claims port 1), distinct from every other device attached on
|
||||
# bus=xhci0.0 -- without it, QEMU's own port auto-assignment fills the
|
||||
# controller's real top-level ports in device order and then silently drops
|
||||
# any further device behind an auto-inserted internal USB2 hub, which the
|
||||
# xHCI/BOT driver correctly refuses to treat as Mass Storage (confirmed live,
|
||||
# 2026-09-06, root cause of the FABRIC-3.md §IX.5 "4th-device enumeration
|
||||
# failure" -- it was never a driver bug, the emulated controller only exposes
|
||||
# 4 real ports for p2=4,p3=4 despite the port count parameters implying 8).
|
||||
# The qemu-xhci controller below is sized via XHCI_PORTS (see its own doc comment
|
||||
# above) to give real ports to Zuse plus every identity drive attached this way.
|
||||
QEMU_EXTRA ?=
|
||||
|
||||
qemu: all
|
||||
@@ -807,7 +841,7 @@ ifeq ($(ARCH),amd64)
|
||||
-cdrom $(QEMU_ISO) -boot d \
|
||||
-drive id=artdisk,file=$(ARTDISK),format=raw,if=none \
|
||||
-device virtio-blk-pci,drive=artdisk \
|
||||
-device qemu-xhci,id=xhci0 \
|
||||
-device qemu-xhci,id=xhci0,p2=$(XHCI_PORTS),p3=$(XHCI_PORTS) \
|
||||
$(ZUSEDISK_QEMU_ARGS) \
|
||||
-object rng-random,id=rng0,filename=/dev/urandom \
|
||||
-device virtio-rng-pci,rng=rng0 \
|
||||
@@ -891,7 +925,7 @@ else ifeq ($(ARCH),aarch64)
|
||||
-drive id=artdisk,file=$(ARTDISK),format=raw,if=none \
|
||||
-device virtio-blk-pci,drive=artdisk \
|
||||
-device virtio-keyboard-pci,addr=0x3 \
|
||||
-device qemu-xhci,id=xhci0,addr=0x4 \
|
||||
-device qemu-xhci,id=xhci0,addr=0x4,p2=$(XHCI_PORTS),p3=$(XHCI_PORTS) \
|
||||
$(ZUSEDISK_QEMU_ARGS) \
|
||||
-object rng-random,id=rng0,filename=/dev/urandom \
|
||||
-device virtio-rng-pci,rng=rng0,addr=0x5 \
|
||||
@@ -981,7 +1015,7 @@ else ifeq ($(ARCH),riscv64)
|
||||
-drive id=artdisk,file=$(ARTDISK),format=raw,if=none \
|
||||
-device virtio-blk-pci,drive=artdisk,addr=0x1 \
|
||||
-device virtio-keyboard-pci,addr=0x3 \
|
||||
-device qemu-xhci,id=xhci0,addr=0x4 \
|
||||
-device qemu-xhci,id=xhci0,addr=0x4,p2=$(XHCI_PORTS),p3=$(XHCI_PORTS) \
|
||||
$(ZUSEDISK_QEMU_ARGS) \
|
||||
-object rng-random,id=rng0,filename=/dev/urandom \
|
||||
-device virtio-rng-pci,rng=rng0,addr=0x5 \
|
||||
@@ -1000,7 +1034,88 @@ else ifeq ($(ARCH),riscv64)
|
||||
echo "=== Extracting DOE CSV ==="; \
|
||||
bash scripts/extract_doe.sh $$LOG $$CSV || true; \
|
||||
cp $$CSV $(DOE_LATEST_DIR)/riscv64.csv 2>/dev/null || true
|
||||
endif
|
||||
endif
|
||||
|
||||
# thumbdrive — build a generic UEFI-bootable GPT/FAT32 disk image that can be
|
||||
# written directly to a USB thumbdrive (dd) and boots on real amd64 UEFI
|
||||
# hardware (e.g. Beelink SER5) as well as under QEMU. This is the "generic
|
||||
# thumbdrive bootable OS" image for the v2.5.0/SER5 bare-metal path: the
|
||||
# monolithic loader embeds the whole kernel, so the ESP needs only the UEFI
|
||||
# fallback boot path EFI/BOOT/BOOT<ARCH>.EFI. Storage on real hardware is the
|
||||
# USB BOT/xHCI path (already live), not virtio.
|
||||
thumbdrive: all
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
@if ! which sgdisk >/dev/null 2>&1; then echo "Error: sgdisk not found. Install gdisk (apt-get install gdisk)."; exit 1; fi
|
||||
@if ! which mkfs.fat >/dev/null 2>&1; then echo "Error: mkfs.fat not found. Install dosfstools (apt-get install dosfstools)."; exit 1; fi
|
||||
@case "$(ARCH)" in \
|
||||
amd64) BOOTNAME="BOOTX64.EFI" ;; \
|
||||
aarch64) BOOTNAME="BOOTAA64.EFI" ;; \
|
||||
riscv64) BOOTNAME="BOOTRISCV64.EFI" ;; \
|
||||
*) echo "Error: no thumbdrive EFI boot name for ARCH=$(ARCH)"; exit 1 ;; \
|
||||
esac; \
|
||||
# Geometry: 128 MiB disk (262144 sectors), GPT partition 1 spans sectors \
|
||||
# 2048..262110 (the GPT last-usable sector for this disk size), i.e. \
|
||||
# 260063 sectors. The FAT32 ESP image MUST match the partition size \
|
||||
# exactly; a larger ESP overruns the disk (GPT grows corrupt) or \
|
||||
# spills past the partition end, both of which made earlier builds \
|
||||
# unbootable on hardware. \
|
||||
DISK=$(BUILD_DIR)/starkernel-thumbdrive.img; \
|
||||
ESP_SECTORS=260063; \
|
||||
rm -f $$DISK $(BUILD_DIR)/thumbdrive-esp.img; \
|
||||
dd if=/dev/zero of=$(BUILD_DIR)/thumbdrive-esp.img bs=512 count=$$ESP_SECTORS 2>/dev/null; \
|
||||
mkfs.fat -F 32 -n "STARKERNEL" $(BUILD_DIR)/thumbdrive-esp.img >/dev/null 2>&1; \
|
||||
mmd -i $(BUILD_DIR)/thumbdrive-esp.img ::/EFI; \
|
||||
mmd -i $(BUILD_DIR)/thumbdrive-esp.img ::/EFI/BOOT; \
|
||||
mcopy -i $(BUILD_DIR)/thumbdrive-esp.img $(LOADER_EFI) ::/EFI/BOOT/$$BOOTNAME; \
|
||||
printf 'FS0:\\EFI\\BOOT\\%s\r\n' "$$BOOTNAME" > $(BUILD_DIR)/thumbdrive-startup.nsh; \
|
||||
mcopy -i $(BUILD_DIR)/thumbdrive-esp.img $(BUILD_DIR)/thumbdrive-startup.nsh ::/startup.nsh; \
|
||||
dd if=/dev/zero of=$$DISK bs=1M count=128 2>/dev/null; \
|
||||
sgdisk -n 1:2048:0 -t 1:ef00 -c 1:"EFI System" $$DISK >/dev/null 2>&1; \
|
||||
dd if=$(BUILD_DIR)/thumbdrive-esp.img of=$$DISK bs=512 seek=2048 conv=notrunc 2>/dev/null; \
|
||||
rm -f $(BUILD_DIR)/thumbdrive-esp.img $(BUILD_DIR)/thumbdrive-startup.nsh; \
|
||||
echo "Thumbdrive image: $$DISK"; \
|
||||
echo "Write to a USB stick with: dd if=$$DISK of=/dev/sdX bs=4M status=progress"
|
||||
|
||||
|
||||
# iso-usb — build a PURE UEFI isohybrid ISO for the Iso Image Writer workflow
|
||||
# (GNOME Disks "Restore Disk Image...", or dd). Writes a single .iso to a USB
|
||||
# stick as a raw image; the ISO carries a clean GPT with an EFI System
|
||||
# Partition holding EFI/BOOT/BOOT<ARCH>.EFI, so real UEFI firmware (e.g.
|
||||
# Beelink SER5) scans the ESP and boots it. No GRUB, no isolinux, no MBR boot
|
||||
# code — the protective MBR template is zeroed (partition metadata only).
|
||||
# Also still boots under QEMU via -cdrom. This is the novice path: one ISO,
|
||||
# picked with a GUI, written to the stick.
|
||||
iso-usb: all
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
@if ! which xorriso >/dev/null 2>&1; then echo "Error: xorriso not found. Install xorriso (apt-get install xorriso)."; exit 1; fi
|
||||
@if ! which mformat >/dev/null 2>&1 || ! which mmd >/dev/null 2>&1 || ! which mcopy >/dev/null 2>&1; then echo "Error: mtools not found. Install mtools (apt-get install mtools)."; exit 1; fi
|
||||
@case "$(ARCH)" in \
|
||||
amd64) BOOTNAME="BOOTX64.EFI" ;; \
|
||||
aarch64) BOOTNAME="BOOTAA64.EFI" ;; \
|
||||
*) echo "Error: iso-usb EFI boot name only defined for amd64/aarch64 yet"; exit 1 ;; \
|
||||
esac; \
|
||||
ISODIR=$(BUILD_DIR)/iso-usb; \
|
||||
rm -rf $$ISODIR; mkdir -p $$ISODIR; \
|
||||
dd if=/dev/zero of=$$ISODIR/efi.img bs=512 count=8192 2>/dev/null; \
|
||||
mformat -i $$ISODIR/efi.img :: >/dev/null 2>&1; \
|
||||
mmd -i $$ISODIR/efi.img ::/EFI; mmd -i $$ISODIR/efi.img ::/EFI/BOOT; \
|
||||
mcopy -i $$ISODIR/efi.img $(LOADER_EFI) ::/EFI/BOOT/$$BOOTNAME; \
|
||||
printf 'FS0:\\EFI\\BOOT\\%s\r\n' "$$BOOTNAME" > $$ISODIR/startup.nsh; \
|
||||
mcopy -i $$ISODIR/efi.img $$ISODIR/startup.nsh ::/startup.nsh; \
|
||||
head -c 432 /dev/zero > $$ISODIR/protmbr.bin; \
|
||||
ISO=$(BUILD_DIR)/starkernel-iso-usb.iso; \
|
||||
rm -f $$ISO; \
|
||||
xorriso -as mkisofs \
|
||||
-V STARKERNEL -r -J \
|
||||
-isohybrid-mbr $$ISODIR/protmbr.bin \
|
||||
-eltorito-alt-boot -e efi.img -no-emul-boot \
|
||||
-isohybrid-gpt-basdat \
|
||||
-o $$ISO $$ISODIR >/dev/null 2>&1; \
|
||||
rm -rf $$ISODIR; \
|
||||
echo "Iso Image Writer ISO (pure UEFI): $$ISO"; \
|
||||
echo " In GNOME Disks, pick the ISO with 'Restore Disk Image...' and select your USB stick."; \
|
||||
echo " Or: dd if=$$ISO of=/dev/sdX bs=4M status=progress"
|
||||
|
||||
|
||||
# qemu-esp — interactive dev boot from FAT directory (no disk image rebuild,
|
||||
# no auto-kill/timeout/DOE-injection logic — stays up until you quit it
|
||||
@@ -1134,6 +1249,8 @@ help:
|
||||
@echo " qemu — clean boot, serial tee'd live + logs/<session>/<arch>/ + DOE CSV → doe/ (all arches)"
|
||||
@echo " qemu-esp — quick boot from FAT directory (amd64, aarch64)"
|
||||
@echo " qemu-gdb — boot with GDB stub on :1234"
|
||||
@echo " thumbdrive — build generic GPT/FAT32 UEFI disk image (write to a USB stick with dd; real-hardware/SER5 path)"
|
||||
@echo " iso-usb — build UEFI isohybrid ISO for Iso Image Writer / GNOME Disks 'Restore Disk Image...' (novice path; real-hardware/SER5)"
|
||||
@echo ""
|
||||
@echo "QEMU display:"
|
||||
@echo " QEMU_DISPLAY=gtk — framebuffer window backend for 'qemu' goal (default: gtk)"
|
||||
|
||||
+31
-31
@@ -513,9 +513,9 @@ Slide 2: "Formally: f(t) = f₀ * e^(-λt)"
|
||||
**Added 2026-08-13**, closing a real, acknowledged documentation-debt item: the physics
|
||||
vocabulary built on top of the original heat/decay/inference model above (patron, mass,
|
||||
density, Stadium, and the Kconfig knob names built on them) accumulated across
|
||||
`FABRIC.md`/`FABRIC-2.md` without an explicit statement, in one place, that these are named
|
||||
`FABRIC-0.md`/`FABRIC-1.md` without an explicit statement, in one place, that these are named
|
||||
analogies — the same discipline Section III already applies to "heat," extended to the
|
||||
newer terms. Definitions below are drawn directly from `FABRIC.md`'s own DECIDED sections
|
||||
newer terms. Definitions below are drawn directly from `FABRIC-0.md`'s own DECIDED sections
|
||||
(cited inline), not invented here.
|
||||
|
||||
### 9.1 The metaphor, restated for this layer
|
||||
@@ -537,7 +537,7 @@ LITERAL IMPLEMENTATIONS (No Metaphor):
|
||||
K → Σ execution_heat_q48 across live entries, conserved at 1.0
|
||||
```
|
||||
|
||||
The Stadium metaphor is a **venue**, not a building: §2 (`FABRIC.md`) is explicit that a
|
||||
The Stadium metaphor is a **venue**, not a building: §2 (`FABRIC-0.md`) is explicit that a
|
||||
patron *arrives and departs* — the Stadium holds what is live, not everything that exists.
|
||||
That is the load-bearing distinction between "Stadium" and "warehouse" below, and it is why
|
||||
the dictionary-at-rest is warehouse, not Stadium, even though every dictionary entry is
|
||||
@@ -549,29 +549,29 @@ the dictionary-at-rest is warehouse, not Stadium, even though every dictionary e
|
||||
*Definition*: The Stadium's fixed-size unit of storage — a patron header, or a continuation
|
||||
cell owned by exactly one patron.
|
||||
*Formal*: A closed, two-constructor sum type: `Cell = Header | Continuation(owner)`, fixed
|
||||
at build time (`FABRIC.md` §3).
|
||||
*Measurement*: Proposed size 64 bytes (`FABRIC.md` §23.3, **not yet built** — see
|
||||
`FABRIC-2.md`'s §23.4 #2 closure: the one real patron kind actually shipped, Hermes
|
||||
at build time (`FABRIC-0.md` §3).
|
||||
*Measurement*: Proposed size 64 bytes (`FABRIC-0.md` §23.3, **not yet built** — see
|
||||
`FABRIC-1.md`'s §23.4 #2 closure: the one real patron kind actually shipped, Hermes
|
||||
messages, did not adopt this cell shape).
|
||||
*Category*: Storage unit.
|
||||
*Warning*: Not a pointer target — links between cells are Stadium-array indices, never
|
||||
addresses (`FABRIC.md` §3, §13).
|
||||
addresses (`FABRIC-0.md` §3, §13).
|
||||
|
||||
**Code field**
|
||||
*Definition*: A closed-enumeration behaviour tag stored in a patron header, dispatched by
|
||||
the engine rather than branched on by kind.
|
||||
*Formal*: `behaviour ∈ {MIGRATE, DELIVER, EXPIRE, COOL, ...}` — a fixed datatype, not an
|
||||
open extension point (`FABRIC.md` §3, §13, §18.3).
|
||||
open extension point (`FABRIC-0.md` §3, §13, §18.3).
|
||||
*Category*: Dispatch mechanism.
|
||||
*Note*: This is deliberately **the entire type system** — the engine never asks what kind
|
||||
of patron it holds, only what its code field says to do (`FABRIC.md` §3).
|
||||
of patron it holds, only what its code field says to do (`FABRIC-0.md` §3).
|
||||
|
||||
**Density**
|
||||
*Definition*: A patron's heat share divided by its mass — heat per unit of occupied
|
||||
Stadium floor space.
|
||||
*Formal*: `density(p) = heat(p) / mass(p)`, derived, never stored (`FABRIC.md` §19.2).
|
||||
*Formal*: `density(p) = heat(p) / mass(p)`, derived, never stored (`FABRIC-0.md` §19.2).
|
||||
*Measurement*: Used for ranking and admission (denser evicts sparser), not computed by a
|
||||
separate scheduler — it is read, not decided (`FABRIC.md` §19.3).
|
||||
separate scheduler — it is read, not decided (`FABRIC-0.md` §19.3).
|
||||
*Category*: Derived quantity.
|
||||
*Warning*: This is the one place the thermodynamic metaphor is literal in form (quantity
|
||||
per unit volume) even though heat itself remains metaphorical.
|
||||
@@ -581,65 +581,65 @@ per unit volume) even though heat itself remains metaphorical.
|
||||
*Formal*: `K = Σ execution_heat_q48`, held at `Q48_ONE` (1.0) by construction — verified by
|
||||
`vm_physics_conserved()` (`capsule_vm_physics.c`).
|
||||
*Measurement*: A correctness check, not a diagnostic — it is 1.0 by construction and can
|
||||
never itself signal system state (`FABRIC.md` §14, §19.1). Entropy over the heat
|
||||
never itself signal system state (`FABRIC-0.md` §14, §19.1). Entropy over the heat
|
||||
*distribution* is the actual instrument; K is not.
|
||||
*Category*: Invariant.
|
||||
*Warning*: Not an occupancy ratio (`Σmass / capacity`) — that definition was considered and
|
||||
explicitly rejected because it contradicts the already-implemented, tested mechanism
|
||||
(`FABRIC.md` §19.1).
|
||||
(`FABRIC-0.md` §19.1).
|
||||
|
||||
**Mass**
|
||||
*Definition*: The number of Stadium cells a patron occupies — its footprint.
|
||||
*Formal*: Integer ≥ 1, an entry field independent of heat; never enters K
|
||||
(`FABRIC.md` §3, §19.2).
|
||||
(`FABRIC-0.md` §3, §19.2).
|
||||
*Category*: Structural quantity, not conserved.
|
||||
*Note*: A large patron is not "referenced" from the Stadium — it simply occupies more
|
||||
cells. By-reference storage is reserved for things outside the Stadium entirely
|
||||
(`FABRIC.md` §19.3, §23.1).
|
||||
(`FABRIC-0.md` §19.3, §23.1).
|
||||
|
||||
**Mass conservation vs. heat conservation**
|
||||
*Definition*: Two independent invariants that must not be confused. Heat (K) is conserved
|
||||
globally and moved by traffic. Mass is conserved *per patron* during a residency —
|
||||
identity and mass never change as a side effect of use — but is not a fleet-wide summed
|
||||
invariant the way heat is (`FABRIC.md` §24.2).
|
||||
invariant the way heat is (`FABRIC-0.md` §24.2).
|
||||
|
||||
**Patron**
|
||||
*Definition*: A live thing occupying a Stadium cell or linked run of cells — the unit the
|
||||
Stadium actually holds.
|
||||
*Formal*: One structure, no variants, no type field — identified by its code field's
|
||||
behaviour, not by a kind tag (`FABRIC.md` §3, §13).
|
||||
behaviour, not by a kind tag (`FABRIC-0.md` §3, §13).
|
||||
*Measurement*: Nine header wires: identity, heat, TTL, pin, link, code field, mass,
|
||||
payload, contains (`FABRIC.md` §3, with amendments cited in place).
|
||||
payload, contains (`FABRIC-0.md` §3, with amendments cited in place).
|
||||
*Category*: The Stadium's sole occupant type.
|
||||
*Known kinds (as of this writing)*: words (dictionary — fully migrated and live via
|
||||
`stadium_word_dispatch()`, `FABRIC.md` §16.3/§17.7), blocks (Artemis), messages (Hermes — shipped with a
|
||||
**different** shape than this header, see `FABRIC-2.md`'s §23.4 #2 closure), VMs (Tripod,
|
||||
`FABRIC.md` §20), dirty events (console, `FABRIC.md` §17.5). Five kinds, not four — an
|
||||
earlier draft undercounted (`FABRIC.md` §1).
|
||||
`stadium_word_dispatch()`, `FABRIC-0.md` §16.3/§17.7), blocks (Artemis), messages (Hermes — shipped with a
|
||||
**different** shape than this header, see `FABRIC-1.md`'s §23.4 #2 closure), VMs (Tripod,
|
||||
`FABRIC-0.md` §20), dirty events (console, `FABRIC-0.md` §17.5). Five kinds, not four — an
|
||||
earlier draft undercounted (`FABRIC-0.md` §1).
|
||||
|
||||
**Reap**
|
||||
*Definition*: The event that ends a patron's residency — not destruction, a return of its
|
||||
cells and remaining heat to the pool.
|
||||
*Formal*: Consumed on delivery (messages), on redraw (dirty events), on cooling below floor
|
||||
(VMs), or on eviction by a denser newcomer (`FABRIC.md` §17.2, §17.5, §19.3).
|
||||
(VMs), or on eviction by a denser newcomer (`FABRIC-0.md` §17.2, §17.5, §19.3).
|
||||
*Category*: Lifecycle event.
|
||||
|
||||
**Stadium**
|
||||
*Definition*: A single, bounded region of memory outside any VM, holding everything
|
||||
currently live.
|
||||
*Formal*: A fixed-size array of cells, index-linked (not pointer-linked), allocated at
|
||||
boot before any VM exists, not part of the heap (`FABRIC.md` §2, §17.6).
|
||||
boot before any VM exists, not part of the heap (`FABRIC-0.md` §2, §17.6).
|
||||
*Measurement*: Per-VM quota over a single global cell pool, elastic under pressure,
|
||||
arbitrated by Hera (`FABRIC.md` §22) — not per-VM physical regions.
|
||||
arbitrated by Hera (`FABRIC-0.md` §22) — not per-VM physical regions.
|
||||
*Category*: The bounded live-state substrate this whole vocabulary describes.
|
||||
*Warning*: "Live" is the operative word — the Stadium holds what is live, not everything
|
||||
that exists. A dictionary word sitting cold and unexecuted is warehouse, not Stadium, even
|
||||
once the dictionary itself migrates into this representation (`FABRIC.md` §2, §16.3).
|
||||
once the dictionary itself migrates into this representation (`FABRIC-0.md` §2, §16.3).
|
||||
|
||||
**Warehouse**
|
||||
*Definition*: What lies beneath the Stadium — storage for things not currently live.
|
||||
*Formal*: Artemis (block storage) and the resting dictionary are warehouse; the Stadium is
|
||||
the floor above it (`FABRIC.md` §17.5's three-category taxonomy: warehouse / Stadium /
|
||||
the floor above it (`FABRIC-0.md` §17.5's three-category taxonomy: warehouse / Stadium /
|
||||
utility).
|
||||
*Category*: Storage layer, outside the engine's live-state model.
|
||||
|
||||
@@ -647,7 +647,7 @@ utility).
|
||||
*Definition*: External infrastructure the Stadium consumes but never contains — beside the
|
||||
building, not inside or beneath it.
|
||||
*Formal*: The framebuffer and devices generally; the engine never learns about a utility's
|
||||
existence, which is what makes it a boundary rather than an exception (`FABRIC.md` §17.5).
|
||||
existence, which is what makes it a boundary rather than an exception (`FABRIC-0.md` §17.5).
|
||||
*Category*: Third taxonomy category, coordinate with warehouse and Stadium, not a
|
||||
sub-case of either.
|
||||
|
||||
@@ -655,7 +655,7 @@ sub-case of either.
|
||||
|
||||
Per Bob's own flag: code, Kconfig, and documentation terminology must not drift apart.
|
||||
The table below is the current, verified wiring status of every `STADIUM_*` Kconfig
|
||||
symbol — confirmed by direct source grep during the `FABRIC-2.md` closure work this
|
||||
symbol — confirmed by direct source grep during the `FABRIC-1.md` closure work this
|
||||
vocabulary accompanies, not assumed from the symbol's name or Kconfig help text alone.
|
||||
|
||||
| Kconfig symbol | Vocabulary term | Wiring status (2026-08-13) |
|
||||
@@ -664,8 +664,8 @@ vocabulary accompanies, not assumed from the symbol's name or Kconfig help text
|
||||
| `STADIUM_MEMORY_PERCENT` | Stadium capacity sizing | **Live** — read in `stadium.c` |
|
||||
| `STADIUM_WORD_HEAT_QUANTUM` | Heat (word-patron admission) | **Live** — read in `stadium_words.c` |
|
||||
| `STADIUM_WORD_COOL_RATE_Q48` | Heat decay rate (word patrons) | **Live** — read in `stadium_words.c` |
|
||||
| `STADIUM_CONTAINS_DEPTH_MAX` | `contains` wire depth cap (§3, §8) | **Declared, not yet enforced** — reap-gating enforcement is item 3.5's scope, not implemented (`FABRIC-2.md` §A item 5.3 area; not a bug, a known sequencing gap) |
|
||||
| `STADIUM_CAPACITY_TICK` | Capacity-loop cadence, distinct from heat's (§22.4) | **Dead** — declared with the correct intended default (1000, matching §22.4's precedent) but never read by any code path; only appearance beyond its own default is a compile-time `> 0` static assertion in `stadium.h`. Found and reported during this session's §12 Q5 closure (`FABRIC-2.md`) — `vm_physics_heartbeat_tick()` still literally shares `HEARTBEAT_INFERENCE_FREQUENCY` instead |
|
||||
| `STADIUM_CONTAINS_DEPTH_MAX` | `contains` wire depth cap (§3, §8) | **Declared, not yet enforced** — reap-gating enforcement is item 3.5's scope, not implemented (`FABRIC-1.md` §A item 5.3 area; not a bug, a known sequencing gap) |
|
||||
| `STADIUM_CAPACITY_TICK` | Capacity-loop cadence, distinct from heat's (§22.4) | **Dead** — declared with the correct intended default (1000, matching §22.4's precedent) but never read by any code path; only appearance beyond its own default is a compile-time `> 0` static assertion in `stadium.h`. Found and reported during this session's §12 Q5 closure (`FABRIC-1.md`) — `vm_physics_heartbeat_tick()` still literally shares `HEARTBEAT_INFERENCE_FREQUENCY` instead |
|
||||
|
||||
This table is a snapshot, not a promise — it will drift the moment any of these symbols is
|
||||
wired or unwired. Re-verify against source before relying on it for anything past a casual
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# LithosAnanke v1.5.4
|
||||
# LithosAnanke v2.0.1
|
||||
|
||||
**UEFI-bootable FORTH microkernel.** Boots from firmware, initialises memory and interrupts, then runs the StarForth VM as its sole userspace runtime. No libc. No OS. Just stone and necessity.
|
||||
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
> Tripod/Stadium/word-level ACL existed, and before "Phase 1 Starting (HAL)" had any of the
|
||||
> meaning it has now. Kept for historical record only. For current status, see
|
||||
> `docs/lithosananke/ROADMAP.md` (repo-specific, LithosAnanke roadmap) and
|
||||
> `FABRIC.md`/`FABRIC-2.md`/`FABRIC-3.md` (design history and current work) — not this
|
||||
> `FABRIC-0.md`/`FABRIC-1.md`/`FABRIC-2.md` (design history and current work) — not this
|
||||
> document.
|
||||
|
||||
**Version**: 1.0
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
# Raspberry Pi 5 native boot media
|
||||
|
||||
What goes on the SD card for the native (non-UEFI) boot path (FABRIC-3.md §IV):
|
||||
|
||||
- `config.txt` — checked in here, done (§IV.3 item 6).
|
||||
- `bcm2712-rpi-5-b.dtb` — Raspberry Pi firmware's own stock DTB; not built by this
|
||||
project, copied from the firmware release the card is otherwise built from.
|
||||
- `kernel_2712.img` — **does not exist yet.** `config.txt` names it, but no build target
|
||||
in `Makefile.starkernel` currently emits a raw image by this name at load address
|
||||
0x80000 — item 1 (entry stub) explicitly scoped a separate-image build target as future
|
||||
work, not part of that item. Building this file is the remaining prerequisite before
|
||||
item 7 (assembling the card) is possible.
|
||||
@@ -0,0 +1,62 @@
|
||||
# LithosAnanke native (non-UEFI) boot config for Raspberry Pi 5 (BCM2712).
|
||||
# FABRIC-3.md §IV.3 item 6 -- see that section's own doc comment for the
|
||||
# research trail behind each line (confirmed against raspberrypi.com's
|
||||
# current config.txt reference and a real, working Pi 5 bare-metal
|
||||
# project's own checked-in config.txt, not assumed from general Pi
|
||||
# knowledge).
|
||||
|
||||
# Load our own kernel image directly -- no UEFI, no Linux. kernel_2712.img
|
||||
# is the real filename Pi 5/500/CM5 firmware looks for first (its own
|
||||
# 16K-page-size build); naming our own image this exactly, rather than
|
||||
# falling back to kernel8.img, removes any ambiguity about which file the
|
||||
# firmware picks up.
|
||||
kernel=kernel_2712.img
|
||||
|
||||
# Disable the firmware's Linux-compatible-image sanity check. Without
|
||||
# this, official docs describe it as checking for "a compatible Device
|
||||
# Tree file before attempting to boot" and warn that "older non-compatible
|
||||
# kernels would be loaded and then hang" -- documented specifically as the
|
||||
# bare-metal-development escape hatch. One real working Pi 5 bare-metal
|
||||
# project's own config.txt does NOT set this and still boots, so it may
|
||||
# not be strictly required for every non-Linux image; kept here anyway
|
||||
# since the official doc names this exact use case and there is no
|
||||
# hardware in hand yet to verify which behavior is actually gated.
|
||||
os_check=0
|
||||
|
||||
# Pin the exact devicetree explicitly rather than relying on the
|
||||
# firmware's own board-revision auto-selection (which would also resolve
|
||||
# to this file on real Pi 5 hardware, per general config.txt convention --
|
||||
# explicit is certain, not just probably-correct).
|
||||
device_tree=bcm2712-rpi-5-b.dtb
|
||||
|
||||
# Enable the dedicated debug UART (Pi 5's own JST connector, not the GPIO
|
||||
# 14/15 header pins). Not because serial capture hardware is set up for
|
||||
# this bring-up (that decision is HDMI-only, FABRIC-3.md §IV) -- this is
|
||||
# a firmware-side switch that costs nothing when nothing is listening, and
|
||||
# it is the only diagnostic channel that survives a framebuffer failure.
|
||||
# rpi5_uart_base() (rpi5_dtb.c) already exists and is currently uncalled;
|
||||
# this is the hook a UART-based fallback console would use if the mailbox
|
||||
# framebuffer driver's two documented unverified details turn out wrong on
|
||||
# real hardware.
|
||||
enable_uart=1
|
||||
|
||||
# Deliberately NOT set, researched but not included this pass:
|
||||
# dtoverlay=uart0 -- GPIO 14/15 header UART; needs a USB-serial
|
||||
# adapter this bring-up doesn't have (HDMI-only
|
||||
# decision). enable_uart=1 above covers the JST
|
||||
# debug UART instead, which needs no extra cable.
|
||||
# dtparam=pciex1 -- one real Pi 5 bare-metal project's own config.txt
|
||||
# comments this as "Required for RP1 access", which
|
||||
# would be surprising (RP1 is always-on in stock Pi
|
||||
# 5 boots) and is community-reported, not confirmed
|
||||
# against official docs. Not needed for this boot
|
||||
# (no RP1 access yet -- FABRIC-3.md §IV.3 item 5 is
|
||||
# still re-scoped, not implemented). Revisit if that
|
||||
# item's own real Broadcom-indirect PCIe work needs
|
||||
# it.
|
||||
# arm_64bit=1 -- researched and dropped: official docs state
|
||||
# "Models that only support a 64-bit kernel ignore
|
||||
# this flag" -- inert on Pi 5, not wrong to include,
|
||||
# just meaningless. The original item 6 wording
|
||||
# named this; corrected here rather than carried
|
||||
# forward.
|
||||
+226
-188
@@ -1,5 +1,5 @@
|
||||
# Capsule Block Manifest — Auto-generated
|
||||
<!-- Generated by mkcapsule --manifest 2026-08-29T13:51:54Z -->
|
||||
<!-- Generated by mkcapsule --manifest 2026-09-08T01:19:50Z -->
|
||||
<!-- 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,14 +9,16 @@
|
||||
| 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, 4853, 4854 | `0xfe6e570467368153` | yes |
|
||||
| `common:messaging.4th` | 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038 | `0x892fd1c86d8c175e` | yes |
|
||||
| `acl-std79.4th` | 4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 4047 | `0x5a622e41d1fd0bb9` | 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, 4854, 4856, 4857, 4858 | `0xac215ecb873c4db3` | yes |
|
||||
| `block-acl.4th` | 4019, 4020 | `0xf6cc2a59e3a6734e` | yes |
|
||||
| `common:messaging.4th` | 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041 | `0x5cfb02a42f4a8323` | 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` | 4153, 4855, 5116 | `0x9d6119b69d4113af` | 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 | `0x9d9489cbeca4099b` | 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 | `0x3f305911500c78f6` | yes |
|
||||
| `hermes:init.4th` | 4153, 4855, 5116 | `0x2df61924448a6812` | 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 |
|
||||
@@ -33,21 +35,22 @@
|
||||
| `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 | `0x9ac6523d24b80cd0` | yes |
|
||||
| `init.4th` | 2049, 2050, 2057 | `0x5d35c5c6a6eafe04` | 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 |
|
||||
| `user-font-demo.4th` | 4200, 4201, 4202 | `0xce1fd7d1b581a56d` | yes |
|
||||
| `zuse-eligibility.4th` | 4021, 4022 | `0x8b49c1bc1e01dc58` | yes |
|
||||
| `zuse.4th` | 4016, 4017, 4018 | `0x490ded9be257a90b` | yes |
|
||||
|
||||
## Block Map (sorted by LBN)
|
||||
|
||||
| LBN | Capsule | xxHash64 | Status |
|
||||
|-----|---------|----------|--------|
|
||||
| 2049 | `init.4th` | `0x9ac6523d24b80cd0` | ok |
|
||||
| 2050 | `init.4th` | `0x9ac6523d24b80cd0` | ok |
|
||||
| 2057 | `init.4th` | `0x9ac6523d24b80cd0` | ok |
|
||||
| 2049 | `init.4th` | `0x5d35c5c6a6eafe04` | ok |
|
||||
| 2050 | `init.4th` | `0x5d35c5c6a6eafe04` | ok |
|
||||
| 2057 | `init.4th` | `0x5d35c5c6a6eafe04` | ok |
|
||||
| 2064 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
|
||||
| 2065 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
|
||||
| 2066 | `init-l8-omni.4th` | `0x5979e314d6452045` | ok |
|
||||
@@ -107,6 +110,35 @@
|
||||
| 4016 | `zuse.4th` | `0x490ded9be257a90b` | ok |
|
||||
| 4017 | `zuse.4th` | `0x490ded9be257a90b` | ok |
|
||||
| 4018 | `zuse.4th` | `0x490ded9be257a90b` | ok |
|
||||
| 4019 | `block-acl.4th` | `0xf6cc2a59e3a6734e` | ok |
|
||||
| 4020 | `block-acl.4th` | `0xf6cc2a59e3a6734e` | ok |
|
||||
| 4021 | `zuse-eligibility.4th` | `0x8b49c1bc1e01dc58` | ok |
|
||||
| 4022 | `zuse-eligibility.4th` | `0x8b49c1bc1e01dc58` | ok |
|
||||
| 4023 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4024 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4025 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4026 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4027 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4028 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4029 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4030 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4031 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4032 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4033 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4034 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4035 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4036 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4037 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4038 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4039 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4040 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4041 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4042 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4043 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4044 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4045 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4046 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4047 | `acl-std79.4th` | `0x5a622e41d1fd0bb9` | ok |
|
||||
| 4050 | `lib.4th` | `0x4b216635c359ef73` | ok |
|
||||
| 4055 | `common:msg.4th` | `0x850a0382344ea6c4` | ok |
|
||||
| 4060 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
|
||||
@@ -115,52 +147,52 @@
|
||||
| 4063 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
|
||||
| 4064 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
|
||||
| 4065 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
|
||||
| 4110 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4111 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4112 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4113 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4122 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4123 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4124 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4125 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4126 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4127 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4128 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4129 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4130 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4131 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4132 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4133 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4134 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4135 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4136 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4137 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4138 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4139 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4140 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4141 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4153 | `hermes:init.4th` | `0x9d6119b69d4113af` | ok |
|
||||
| 4160 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4161 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4162 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4163 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4164 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4165 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4166 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4167 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4168 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4169 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4170 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4171 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4172 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4173 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4174 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4177 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4178 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4179 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4180 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4181 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4182 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4110 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4111 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4112 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4113 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4122 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4123 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4124 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4125 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4126 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4127 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4128 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4129 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4130 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4131 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4132 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4133 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4134 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4135 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4136 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4137 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4138 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4139 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4140 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4141 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4153 | `hermes:init.4th` | `0x2df61924448a6812` | ok |
|
||||
| 4160 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4161 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4162 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4163 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4164 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4165 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4166 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4167 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4168 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4169 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4170 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4171 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4172 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4173 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4174 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4177 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4178 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4179 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4180 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4181 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4182 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4200 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
|
||||
| 4201 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
|
||||
| 4202 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
|
||||
@@ -200,136 +232,142 @@
|
||||
| 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` | `0xfe6e570467368153` | ok |
|
||||
| 4852 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4853 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4854 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
|
||||
| 4855 | `hermes:init.4th` | `0x9d6119b69d4113af` | ok |
|
||||
| 4900 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4901 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4902 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4903 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4904 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4905 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4906 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4907 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4908 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4909 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4910 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4911 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4912 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4913 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4914 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4915 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4916 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4917 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4918 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4919 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4920 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4921 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4922 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4923 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4924 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 4925 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4926 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4927 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4928 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4929 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4930 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4931 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4932 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4933 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4934 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4935 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4936 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4937 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4938 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4939 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4940 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4941 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4942 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4943 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4944 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4945 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4946 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4947 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4948 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4949 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4950 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4951 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4952 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4953 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4954 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4955 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4956 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4957 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4958 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4959 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4960 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4961 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4962 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4963 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4964 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4965 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4966 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4967 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4968 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4969 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4970 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4971 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4972 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4973 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4974 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4975 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4976 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4977 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4978 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4979 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4980 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4981 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4982 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4983 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4984 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 4985 | `font.4th` | `0x720792b4fc758156` | ok |
|
||||
| 5000 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 5001 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 5002 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
|
||||
| 5003 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5004 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5005 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5006 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5007 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5008 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5009 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5010 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5011 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5012 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5013 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5014 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5015 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5016 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5017 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5018 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5019 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5020 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5021 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5022 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5023 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5024 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5025 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5026 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5027 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5028 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5029 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5030 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5031 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5032 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5033 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5034 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5035 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5036 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5037 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 5038 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
|
||||
| 4851 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4852 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4853 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4854 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4855 | `hermes:init.4th` | `0x2df61924448a6812` | ok |
|
||||
| 4856 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4857 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4858 | `artemis:init.4th` | `0xac215ecb873c4db3` | ok |
|
||||
| 4900 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4901 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4902 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4903 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4904 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4905 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4906 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4907 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4908 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4909 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4910 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4911 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4912 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4913 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4914 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4915 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4916 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4917 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4918 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4919 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4920 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4921 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4922 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4923 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4924 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 4925 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4926 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4927 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4928 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4929 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4930 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4931 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4932 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4933 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4934 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4935 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4936 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4937 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4938 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4939 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4940 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4941 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4942 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4943 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4944 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4945 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4946 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4947 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4948 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4949 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4950 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4951 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4952 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4953 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4954 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4955 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4956 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4957 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4958 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4959 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4960 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4961 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4962 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4963 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4964 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4965 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4966 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4967 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4968 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4969 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4970 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4971 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4972 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4973 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4974 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4975 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4976 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4977 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4978 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4979 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4980 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4981 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4982 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4983 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4984 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 4985 | `font.4th` | `0x3f305911500c78f6` | ok |
|
||||
| 5000 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 5001 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 5002 | `fabric.4th` | `0x9d9489cbeca4099b` | ok |
|
||||
| 5003 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5004 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5005 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5006 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5007 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5008 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5009 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5010 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5011 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5012 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5013 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5014 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5015 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5016 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5017 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5018 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5019 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5020 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5021 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5022 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5023 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5024 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5025 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5026 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5027 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5028 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5029 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5030 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5031 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5032 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5033 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5034 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5035 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5036 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5037 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5038 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5039 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5040 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5041 | `common:messaging.4th` | `0x5cfb02a42f4a8323` | ok |
|
||||
| 5100 | `turtle.4th` | `0x4d470418ca543365` | ok |
|
||||
| 5101 | `turtle.4th` | `0x4d470418ca543365` | ok |
|
||||
| 5102 | `turtle.4th` | `0x4d470418ca543365` | ok |
|
||||
@@ -346,11 +384,11 @@
|
||||
| 5113 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
|
||||
| 5114 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
|
||||
| 5115 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
|
||||
| 5116 | `hermes:init.4th` | `0x9d6119b69d4113af` | ok |
|
||||
| 5116 | `hermes:init.4th` | `0x2df61924448a6812` | ok |
|
||||
|
||||
## Conflicts
|
||||
|
||||
None.
|
||||
|
||||
---
|
||||
*32 capsule(s) scanned. Re-run `mkcapsule --manifest <dir>` to refresh.*
|
||||
*35 capsule(s) scanned. Re-run `mkcapsule --manifest <dir>` to refresh.*
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
Block 4023
|
||||
( acl-std79.4th - FORTH-79/83 standard-word-only lockdown )
|
||||
( Denies+pins every dict word not on ACL-STD79-LIST below. )
|
||||
( Excludes: BYE, COLD/WARM/REBOOT/SAVE-SYSTEM, the block )
|
||||
( editor (L S SHOW EDIT UPDATE SAVE-BUFFERS), BLK-ACL-*, )
|
||||
( FORGET/FENCE. Kept: (BRANCH) etc -- IF/DO/LOOP compile )
|
||||
( calls to these; denying them breaks control flow. )
|
||||
( Full rationale: FABRIC-3.md, 2026-09-07. )
|
||||
CREATE ACL-STD79-LIST
|
||||
|
||||
Block 4024
|
||||
( Stack + return stack )
|
||||
' DROP , ' DUP , ' ?DUP , ' SWAP , ' OVER ,
|
||||
' ROT , ' -ROT , ' DEPTH , ' PICK , ' ROLL ,
|
||||
' >R , ' R> , ' R@ ,
|
||||
|
||||
Block 4025
|
||||
( Memory )
|
||||
' @ , ' ! , ' C@ , ' C! , ' +! , ' -! ,
|
||||
' 2@ , ' 2! , ' FILL , ' MOVE , ' ERASE ,
|
||||
' CELLS ,
|
||||
|
||||
Block 4026
|
||||
( Arithmetic )
|
||||
' + , ' - , ' * , ' / , ' MOD , ' /MOD ,
|
||||
' */ , ' */MOD , ' 1+ , ' 1- , ' 2+ , ' 2- ,
|
||||
' 2* , ' 2/ , ' ABS , ' NEGATE , ' MIN , ' MAX ,
|
||||
|
||||
Block 4027
|
||||
( Logical / comparison, part 1 )
|
||||
' AND , ' OR , ' XOR , ' NOT , ' INVERT ,
|
||||
' LSHIFT , ' RSHIFT , ' 0= , ' 0< , ' 0> ,
|
||||
' 0<> , ' = , ' <> ,
|
||||
|
||||
Block 4028
|
||||
( Logical / comparison, part 2 )
|
||||
' < , ' > , ' >= , ' <= , ' U< , ' U> ,
|
||||
' WITHIN , ' TRUE , ' FALSE ,
|
||||
|
||||
Block 4029
|
||||
( Mixed / double arithmetic, part 1 )
|
||||
' M+ , ' M- , ' M* , ' M/MOD ,
|
||||
' S>D , ' D+ , ' D- , ' DNEGATE , ' DABS ,
|
||||
' DMAX , ' DMIN , ' D< , ' D= ,
|
||||
|
||||
Block 4030
|
||||
( Mixed / double arithmetic, part 2 )
|
||||
' 2DROP , ' 2DUP , ' 2SWAP , ' 2OVER ,
|
||||
' 2ROT , ' 2>R , ' 2R> , ' 2R@ ,
|
||||
' D0= , ' D0< , ' D2* , ' D2/ ,
|
||||
|
||||
Block 4031
|
||||
( Formatted output )
|
||||
' . , ' .R , ' U. , ' U.R , ' D. , ' D.R ,
|
||||
' .S , ' ? , ' DUMP , ' <# , ' # , ' #S ,
|
||||
' #> , ' HOLD , ' SIGN , ' BASE ,
|
||||
' DECIMAL , ' HEX , ' OCTAL ,
|
||||
|
||||
Block 4032
|
||||
( Strings, part 1 )
|
||||
' COUNT , ' EXPECT , ' SPAN , ' QUERY ,
|
||||
' TIB , ' WORD , ' (s") , ' S" , ' >IN ,
|
||||
' SOURCE , ' BL , ' ['] ,
|
||||
|
||||
Block 4033
|
||||
( Strings, part 2 )
|
||||
' LITERAL , ' [LITERAL] , ' CONVERT ,
|
||||
' NUMBER , ' ENCLOSE , ' -TRAILING ,
|
||||
' CMOVE , ' CMOVE> , ' COMPARE ,
|
||||
' SEARCH , ' SCAN , ' SKIP , ' BLANK ,
|
||||
|
||||
Block 4034
|
||||
( I/O )
|
||||
' EMIT , ' CR , ' KEY , ' ?TERMINAL ,
|
||||
' TYPE , ' SPACE , ' SPACES ,
|
||||
' (do-string) , ' ." ,
|
||||
|
||||
Block 4035
|
||||
( Block -- read-only subset, no editor/writer )
|
||||
' BLOCK , ' BUFFER , ' FLUSH , ' LOAD ,
|
||||
' LIST , ' THRU , ' SCR , ' --> ,
|
||||
|
||||
Block 4036
|
||||
( Dictionary space )
|
||||
' HERE , ' ALIGN , ' ALLOT , ' , , ' C, ,
|
||||
' 2, , ' PAD , ' SP! , ' SP@ , ' LATEST ,
|
||||
|
||||
Block 4037
|
||||
( Dictionary internals -- introspection only; )
|
||||
( execution stays gated per-target-word. )
|
||||
' SMUDGE , ' HIDDEN , ' >BODY , ' >NAME ,
|
||||
' NAME> , ' >LINK , ' LINK> , ' CFA ,
|
||||
' LFA , ' NFA , ' PFA , ' TRAVERSE ,
|
||||
' INTERPRET , ' FIND ,
|
||||
|
||||
Block 4038
|
||||
( Vocabulary / search order )
|
||||
' VOCABULARY , ' DEFINITIONS , ' CONTEXT ,
|
||||
' CURRENT , ' FORTH , ' ORDER , ' (FIND) ,
|
||||
|
||||
Block 4039
|
||||
( System -- lifecycle words excluded )
|
||||
' WORDS , ' VLIST , ' SEE , ' PAGE ,
|
||||
' EXECUTE , ' NOP , ' QUIT , ' ABORT ,
|
||||
' (ABORT") , ' ABORT" , ' ( , ' \ ,
|
||||
|
||||
Block 4040
|
||||
( Defining words -- FORGET/FENCE excluded )
|
||||
' : , ' ; , ' CREATE , ' VARIABLE ,
|
||||
' CONSTANT , ' IMMEDIATE , ' STATE ,
|
||||
' [ , ' ] , ' COMPILE , ' [COMPILE] ,
|
||||
' LIT , ' DOES> ,
|
||||
|
||||
Block 4041
|
||||
( Control flow runtime primitives -- kept, )
|
||||
( IF/DO/LOOP compile calls to these. )
|
||||
' (BRANCH) , ' (0BRANCH) , ' (?DO) ,
|
||||
' (DO) , ' (LOOP) , ' (+LOOP) , ' (LEAVE) ,
|
||||
|
||||
Block 4042
|
||||
( Control flow, part 1 )
|
||||
' IF , ' ELSE , ' THEN , ' BEGIN ,
|
||||
' WHILE , ' REPEAT , ' AGAIN , ' UNTIL ,
|
||||
|
||||
Block 4043
|
||||
( Control flow, part 2 )
|
||||
' ?DO , ' DO , ' LOOP , ' +LOOP ,
|
||||
' LEAVE , ' I , ' J , ' UNLOOP ,
|
||||
' EXIT , ' CASE , ' OF , ' ENDOF ,
|
||||
' ENDCASE ,
|
||||
|
||||
Block 4044
|
||||
( ACL-STD79-ALLOWED? ( xt -- flag ) )
|
||||
: ACL-STD79-ALLOWED? ( xt -- flag )
|
||||
>R
|
||||
ACL-STD79-LIST
|
||||
BEGIN
|
||||
DUP @
|
||||
WHILE
|
||||
DUP @ R@ = IF R> DROP DROP TRUE EXIT THEN
|
||||
1 CELLS +
|
||||
REPEAT
|
||||
DROP R> DROP FALSE ;
|
||||
|
||||
Block 4047
|
||||
( ACL-LOCKDOWN-STD79's own walk loop calls all )
|
||||
( four of these on every iteration -- if the )
|
||||
( walk denied any one, it would deny its own )
|
||||
( ability to keep running: a real self- )
|
||||
( referential fault caught live 2026-09-07 (VM )
|
||||
( fault, emergency console disabled), twice, one )
|
||||
( word at a time. Must all stay allowed. Sentinel )
|
||||
( last. )
|
||||
' ACL-STD79-LIST , ' ACL-STD79-ALLOWED? ,
|
||||
' ACL-ALLOW! , ' ACL-PIN ,
|
||||
0 , ( sentinel )
|
||||
|
||||
Block 4045
|
||||
( ACL-WALK-MARK's own xt = correct walk- )
|
||||
( start (the true dictionary head at the )
|
||||
( moment the walk runs). Same >LINK/LINK> )
|
||||
( traversal ACL-INIT-PRIMITIVES/WORDS use. )
|
||||
: ACL-WALK-MARK ( -- ) ;
|
||||
|
||||
Block 4046
|
||||
: ACL-LOCKDOWN-STD79 ( -- )
|
||||
['] ACL-WALK-MARK
|
||||
BEGIN
|
||||
DUP
|
||||
WHILE
|
||||
DUP ACL-STD79-ALLOWED?
|
||||
IF 1 OVER ACL-ALLOW!
|
||||
ELSE 0 OVER ACL-ALLOW!
|
||||
THEN
|
||||
DUP ACL-PIN
|
||||
DUP >LINK LINK>
|
||||
SWAP DROP
|
||||
REPEAT
|
||||
DROP ;
|
||||
@@ -65,7 +65,7 @@ Block 4137
|
||||
( item 4.6 -- Stadium cell-index arena, not a heat arena. One )
|
||||
( slot per possible LBN, holding STADIUM-NONE or a live cell )
|
||||
( index -- residency exists only while a block is allocated )
|
||||
( (admission-on-allocate, FABRIC-2.md item 4.6's ruling). )
|
||||
( (admission-on-allocate, FABRIC-1.md item 4.6's ruling). )
|
||||
CREATE BLK-CELL ART-DATA-BLKS CELLS ALLOT
|
||||
Block 4138
|
||||
( Cell-index accessors and LBN conversion. Heat itself now )
|
||||
@@ -497,5 +497,43 @@ Block 4854
|
||||
( INIT). Hermes always exists by Artemis's birth. )
|
||||
S" common:messaging.4th" EXEC
|
||||
MSG-CD-INIT
|
||||
2 MY-CH-ID !
|
||||
S" 2 COMMON-CH @ CH-ADD-MBR" S" Hermes" VM-EXEC
|
||||
STARTUP-BANNER
|
||||
|
||||
Block 4856
|
||||
( Storage-attach ack builder. Hera sends "<dev-addr> )
|
||||
( HERA-BLK-ATTACH-REQ"; reply is "<dev-addr> <ok?> )
|
||||
( BLK-ATTACH-ACK" so identity birth only proceeds once )
|
||||
( storage is confirmed (repl.c's BLK-ATTACH-ACK). Bob, )
|
||||
( 2026-09-07. )
|
||||
CREATE ATTACH-ACK-BUF 64 ALLOT
|
||||
VARIABLE ATTACH-ACK-LEN
|
||||
: ACK-APPEND ( src-addr len -- )
|
||||
DUP >R
|
||||
ATTACH-ACK-BUF ATTACH-ACK-LEN @ +
|
||||
SWAP CMOVE
|
||||
ATTACH-ACK-LEN @ R> + ATTACH-ACK-LEN ! ;
|
||||
|
||||
Block 4857
|
||||
: ACK-APPEND-CHAR ( char -- )
|
||||
ATTACH-ACK-BUF ATTACH-ACK-LEN @ + C!
|
||||
ATTACH-ACK-LEN @ 1+ ATTACH-ACK-LEN ! ;
|
||||
: ACK-APPEND-NUM ( n -- )
|
||||
0 SWAP <# #S #> ACK-APPEND ;
|
||||
|
||||
Block 4858
|
||||
( HERA-BLK-ATTACH-REQ ( dev-addr -- ): VM-EXEC'd by MSG- )
|
||||
( DELIVER when Hera's request arrives. Runs BLK-ATTACH on )
|
||||
( Artemis's own dictionary (real ACL gating, same as any )
|
||||
( other message payload), then replies to Hera (idx 0). )
|
||||
: HERA-BLK-ATTACH-REQ ( dev-addr -- )
|
||||
0 ATTACH-ACK-LEN !
|
||||
DUP ACK-APPEND-NUM
|
||||
BL ACK-APPEND-CHAR
|
||||
DUP BLK-ATTACH ACK-APPEND-NUM
|
||||
DROP
|
||||
BL ACK-APPEND-CHAR
|
||||
S" BLK-ATTACH-ACK" ACK-APPEND
|
||||
BLK-ATTACH-EVENT 2 0 ATTACH-ACK-BUF
|
||||
ATTACH-ACK-LEN @ 0 MSG-SEND ;
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
Block 4019
|
||||
( block-acl.4th - Block-Level Access Control BMAPFMT )
|
||||
( C prims: BLK-ACL-ALLOW@ BLK-ACL-ALLOW! BLK-ACL-TTL@ )
|
||||
( BLK-ACL-TTL! BLK-OWNER@ )
|
||||
( Policy words this file: BLK-ACL-CHECK )
|
||||
( Mirrors ACL.4th's C-primitive/FORTH-policy split, )
|
||||
( applied to blocks instead of words. )
|
||||
( FABRIC-2.md H.12 step 16, 2026-09-03. )
|
||||
256 CONSTANT BLK-ACL-BASE-TTL
|
||||
|
||||
Block 4020
|
||||
( BLK-ACL-CHECK block# -- allow? )
|
||||
( Fast-deny check, vm.c 611-624's pattern applied to )
|
||||
( a block. First touch: default-permissive claim -- )
|
||||
( allow=1, TTL=BLK-ACL-BASE-TTL -- matching the word )
|
||||
( card's own default. No automatic TTL decrement loop )
|
||||
( exists for blocks yet -- words decrement per word )
|
||||
( dispatch, blocks have no equivalent hot path -- but )
|
||||
( this is a real, working fast-deny gate either way. )
|
||||
: BLK-ACL-CHECK ( block# -- allow? )
|
||||
DUP BLK-ACL-TTL@ 0= IF
|
||||
DUP BLK-ACL-BASE-TTL SWAP BLK-ACL-TTL!
|
||||
DUP 1 SWAP BLK-ACL-ALLOW!
|
||||
THEN
|
||||
BLK-ACL-ALLOW@ ;
|
||||
@@ -19,6 +19,21 @@ Block 5038
|
||||
( CONSOLE-CMD-EVENT: console-VM -> paired user-VM command )
|
||||
( relay message type, async MSG-SEND/MSG-DELIVER. )
|
||||
7 CONSTANT CONSOLE-CMD-EVENT
|
||||
( ELEVATE-REQUEST: H.5/H.8 -- word-ACL elevation ask, )
|
||||
( carried to Zuse via CH-REQUEST. See SEND-ELEVATE- )
|
||||
( REQUEST/ELEVATE-GRANT below and in zuse-eligibility.4th. )
|
||||
8 CONSTANT ELEVATE-REQUEST
|
||||
Block 5041
|
||||
( BLK-ATTACH-EVENT: Hera -> Artemis storage-attach request, )
|
||||
( and Artemis -> Hera ack. Payload is FORTH text, executed )
|
||||
( by the receiver, same as every other message here -- see )
|
||||
( HERA-BLK-ATTACH-REQ (artemis:init.4th) and BLK-ATTACH-ACK )
|
||||
( (repl.c). Messaging-migration decision, Bob, 2026-09-07: )
|
||||
( Hera keeps polling/sig-checking; the storage-registration )
|
||||
( step (blk_subsys_attach_device) moves to a real message )
|
||||
( instead of a direct C call, so identity birth only )
|
||||
( proceeds once Artemis confirms storage succeeded. )
|
||||
9 CONSTANT BLK-ATTACH-EVENT
|
||||
Block 5004
|
||||
( StadiumBehaviour tags, match stadium.h's enum )
|
||||
0 CONSTANT SB-MIGRATE
|
||||
@@ -42,6 +57,7 @@ VARIABLE MBR-FREE-HEAD
|
||||
VARIABLE MSG-SEQ
|
||||
VARIABLE CH-ACTIVE
|
||||
VARIABLE COMMON-CH
|
||||
VARIABLE MY-CH-ID
|
||||
Block 5006
|
||||
( VM name routing table -- same fixed table every VM loads, )
|
||||
( so IDX>NAME resolves identically everywhere. )
|
||||
@@ -351,7 +367,10 @@ Block 5031
|
||||
: CH-MINT-ID ( owner -- id )
|
||||
MSG-SEQ @ 1+ DUP MSG-SEQ !
|
||||
SWAP 32 LSHIFT OR ;
|
||||
( H.8: initiator-only gate. Refuses if `from` doesn't )
|
||||
( match MY-CH-ID -- no posting while claiming another VM. )
|
||||
: CH-REQUEST ( type from to paddr plen -- )
|
||||
3 PICK MY-CH-ID @ <> IF 2DROP 2DROP DROP EXIT THEN
|
||||
COMMON-CH @ CH-STATE@ CH-OPEN = IF
|
||||
COMMON-CH @ MSG-SEND
|
||||
ELSE 2DROP 2DROP DROP THEN ;
|
||||
@@ -385,7 +404,7 @@ Block 5033
|
||||
MBR-INIT-FREE
|
||||
0 MSG-SEQ !
|
||||
0 MSG-LAST-MSG !
|
||||
0 CH-ACTIVE !
|
||||
0 CH-ACTIVE ! -1 MY-CH-ID !
|
||||
COMMON-INIT
|
||||
VM-NAMES-INIT ;
|
||||
Block 5034
|
||||
@@ -435,3 +454,36 @@ VARIABLE BC-CH VARIABLE BC-SCAN
|
||||
BC-PADDR @ BC-PLEN @ BC-CH @ MSG-SEND
|
||||
BC-SCAN @ MBR-NEXT@ BC-SCAN !
|
||||
REPEAT ;
|
||||
Block 5039
|
||||
( H.8: SEND-ELEVATE-REQUEST payload builder -- )
|
||||
( scratch text buffer + append primitives. )
|
||||
CREATE ELEVATE-REQ-BUF 256 ALLOT
|
||||
VARIABLE ELEVATE-REQ-LEN
|
||||
: ELEVATE-REQ-RESET ( -- ) 0 ELEVATE-REQ-LEN ! ;
|
||||
: ELEVATE-REQ-PUTC ( c -- )
|
||||
ELEVATE-REQ-BUF ELEVATE-REQ-LEN @ + C!
|
||||
1 ELEVATE-REQ-LEN +! ;
|
||||
: ELEVATE-REQ-APPEND ( addr u -- )
|
||||
>R
|
||||
ELEVATE-REQ-BUF ELEVATE-REQ-LEN @ +
|
||||
R@ CMOVE
|
||||
ELEVATE-REQ-LEN @ R> + ELEVATE-REQ-LEN ! ;
|
||||
: ELEVATE-REQ-NUM ( n -- )
|
||||
<# 0 SWAP #S #> ELEVATE-REQ-APPEND ;
|
||||
Block 5040
|
||||
( SEND-ELEVATE-REQUEST: ask Zuse for word-ACL )
|
||||
( elevation. pk3..pk0 order so top-down emits )
|
||||
( pk0 first; waddr/wu = target word name text. )
|
||||
: SEND-ELEVATE-REQUEST ( pk3 pk2 pk1 pk0 waddr wu -- )
|
||||
ELEVATE-REQ-RESET
|
||||
83 ELEVATE-REQ-PUTC 34 ELEVATE-REQ-PUTC
|
||||
32 ELEVATE-REQ-PUTC
|
||||
ELEVATE-REQ-APPEND
|
||||
34 ELEVATE-REQ-PUTC 32 ELEVATE-REQ-PUTC
|
||||
ELEVATE-REQ-NUM 32 ELEVATE-REQ-PUTC
|
||||
ELEVATE-REQ-NUM 32 ELEVATE-REQ-PUTC
|
||||
ELEVATE-REQ-NUM 32 ELEVATE-REQ-PUTC
|
||||
ELEVATE-REQ-NUM 32 ELEVATE-REQ-PUTC
|
||||
S" ELEVATE-GRANT" ELEVATE-REQ-APPEND
|
||||
ELEVATE-REQUEST MY-CH-ID @ 0 ELEVATE-REQ-BUF
|
||||
ELEVATE-REQ-LEN @ CH-REQUEST ;
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# capsules/contrib/
|
||||
|
||||
Milestone 7 (contributor capsules / trust tiers), FABRIC-2.md §I.5.
|
||||
|
||||
Any `.4th` file placed here gets `FLAG_CONTRIB` in addition to the usual
|
||||
`FLAG_PRODUCTION | FLAG_EXPERIMENT` pair — `tools/mkcapsule.c`'s
|
||||
`flags_from_name()` path-matches on the colon-separated capsule name
|
||||
starting with `contrib:`, mirroring `FLAG_MAMA_INIT`'s own exact-match
|
||||
pattern one line up in that same function.
|
||||
|
||||
**Trust-tier direction, decided in conversation 2026-09-04:** QEMU-vs-real-
|
||||
hardware conditional enforcement — a contributor capsule is validated more
|
||||
strictly on real hardware than under QEMU, using
|
||||
`timer_calibration_record()->vm_mode` (`include/starkernel/timer.h`) as the
|
||||
signal. `vm_mode` is a real per-architecture hypervisor-vs-hardware
|
||||
detection as of this same pass (amd64: `CPUID.1:ECX[31]`; aarch64: ACPI
|
||||
RSDP OEM ID; riscv64: devicetree `compatible` string) — not a build-time
|
||||
flag, so the same binary enforces differently depending on where it
|
||||
actually boots.
|
||||
|
||||
**Enforcement rule, built 2026-09-04:** `contrib_capsule_refused()`
|
||||
(`capsule_birth.c`), called from both `capsule_birth_baby()` and
|
||||
`capsule_run_experiment()` (never `capsule_birth_mama()` — Mama's own init
|
||||
can never carry `FLAG_CONTRIB`, mutually exclusive with `FLAG_MAMA_INIT` by
|
||||
construction). Under QEMU (`vm_mode == 1`): no additional check, same
|
||||
WARN-only treatment every other capsule gets. On real hardware
|
||||
(`vm_mode == 0`): a contrib capsule additionally requires `CAPSULE_SIG_OK`
|
||||
— `MISSING`/`NO_ROOT_KEY`, which stay WARN-only for every other capsule
|
||||
(most machines lack the offline signing key), are refused here specifically
|
||||
because a contributor's capsule has no other provenance to fall back on.
|
||||
Additive to, never a replacement for, the existing `CAPSULE_SIG_INVALID`
|
||||
refusal already enforced on every capsule regardless of `FLAG_CONTRIB`.
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
Block 4900
|
||||
( fabric.4th -- Console drawing-fabric coordinate machinery )
|
||||
( FABRIC.md item 4.3.3. 45-degree cavalier orthographic )
|
||||
( FABRIC-0.md item 4.3.3. 45-degree cavalier orthographic )
|
||||
( projection. Z is depth-into-screen, not height. Q48.16 )
|
||||
( throughout. Raw pixel write (PLOT/FB-WIDTH/FB-HEIGHT) is )
|
||||
( C; this capsule is the FORTH-side policy on top of it. )
|
||||
|
||||
+4
-4
@@ -6,7 +6,7 @@ Block 4925
|
||||
( (fabric.4th 5000-5002); straight strokes stay G-LINE. Not )
|
||||
( every round-ish letter was converted -- only ones a single )
|
||||
( circle/arc/ellipse renders cleanly without per-glyph angle )
|
||||
( tuning (S/s/&/2/3/5/6/8/9 etc. stay blocky; see FABRIC.md). )
|
||||
( tuning (S/s/&/2/3/5/6/8/9 stay blocky; FABRIC-0.md). )
|
||||
Block 4926
|
||||
( Digit 0: ELLIPSE -- true oval, not a 6-line rectangle. )
|
||||
: G-0 ( -- adv )
|
||||
@@ -534,7 +534,7 @@ Block 4969
|
||||
500 ;
|
||||
|
||||
Block 4970
|
||||
( Latin-1 Supplement, 11 glyphs. codepoints per FABRIC.md )
|
||||
( Latin-1 Supplement, 11 glyphs. codepoints per FABRIC-0.md )
|
||||
( 27.6.4. DEGREE/CENT use curves; rest are line-only. )
|
||||
: G-DEGREE ( -- adv ) 250 600 60 G-CIRCLE 350 ;
|
||||
: G-CENT ( -- adv )
|
||||
@@ -600,7 +600,7 @@ Block 4975
|
||||
: G-NBSP ( -- adv ) 300 ;
|
||||
|
||||
Block 4976
|
||||
( General Punctuation, 7 glyphs. codepoints per FABRIC.md )
|
||||
( General Punctuation, 7 glyphs. codepoints per FABRIC-0.md )
|
||||
( 27.6.4. ELLIPSIS uses three CIRCLEs, matching PERIOD. )
|
||||
: G-LSQUOTE ( -- adv )
|
||||
230 650 220 600 G-LINE
|
||||
@@ -636,7 +636,7 @@ Block 4978
|
||||
|
||||
Block 4979
|
||||
( Real DISPATCH-DIGIT, replaces fabric.4th's placeholder. )
|
||||
( Redefinition needed -- CASE binds early (FABRIC.md 27.6.5).)
|
||||
( Redefinition needed -- CASE binds early (FABRIC-0.md 27.6.5).)
|
||||
: DISPATCH-DIGIT ( codepoint -- adv ) CASE
|
||||
48 OF G-0 ENDOF 49 OF G-1 ENDOF 50 OF G-2 ENDOF
|
||||
51 OF G-3 ENDOF 52 OF G-4 ENDOF 53 OF G-5 ENDOF
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# capsules/fonts/
|
||||
|
||||
Font capsule for FABRIC.md items 4.3.7/4.3.7b (TrueType rendering, adjunct
|
||||
Font capsule for FABRIC-0.md items 4.3.7/4.3.7b (TrueType rendering, adjunct
|
||||
to the stroke font — §27.7).
|
||||
|
||||
| File | License | Provenance |
|
||||
|------|---------|------------|
|
||||
| `JetBrainsMono-Regular.ttf` | SIL Open Font License, Version 1.1 | The JetBrains Mono Project Authors, copyright 2020 (https://github.com/JetBrains/JetBrainsMono). License string confirmed by reading the font's own embedded `name` table directly (`strings -e b JetBrainsMono-Regular.ttf`) — not taken on trust from the filename. |
|
||||
|
||||
Chosen as the v1 test/default TTF font 2026-08-10 (FABRIC.md §27.7 "Update
|
||||
Chosen as the v1 test/default TTF font 2026-08-10 (FABRIC-0.md §27.7 "Update
|
||||
2026-08-10"), resolving that item's licensing-check blocker.
|
||||
|
||||
**Embedded as a raw-binary capsule, not text-encoded.** `tools/mkcapsule.c`'s
|
||||
@@ -21,7 +21,7 @@ relative path, per `build_capsule_name()`). Fetch it with
|
||||
`capsule_find_by_name()` (`include/starkernel/capsule.h`) — that returns
|
||||
`offset`/`length` into the arena without ever routing through
|
||||
`capsule_exec_payload()`, so nothing tries to interpret the font bytes as
|
||||
FORTH source. This superseded FABRIC.md §27.7 decision #3 (hex/base64
|
||||
FORTH source. This superseded FABRIC-0.md §27.7 decision #3 (hex/base64
|
||||
text-encoding) — see that section's 2026-08-10 correction note.
|
||||
|
||||
No SIL OFL 1.1 full license text is bundled here yet — only the font's own
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Block 4855
|
||||
( Hermes v1 -- WELCOME. Generic messaging vocab moved to )
|
||||
( common:messaging.4th, FABRIC-3.md Phase C 2026-08-28. )
|
||||
( common:messaging.4th, FABRIC-2.md Phase C 2026-08-28. )
|
||||
: WELCOME ( -- ) LOG-INFO" Hermes: loaded" ;
|
||||
WELCOME
|
||||
Block 4153
|
||||
@@ -15,6 +15,7 @@ Block 5116
|
||||
( VM that doesn't exist yet at Hera's own birth. )
|
||||
S" common:messaging.4th" EXEC
|
||||
MSG-CD-INIT
|
||||
1 MY-CH-ID !
|
||||
S" lib.4th" EXEC
|
||||
1 COMMON-CH @ CH-ADD-MBR
|
||||
0 COMMON-CH @ CH-ADD-MBR
|
||||
|
||||
@@ -14,6 +14,8 @@ Block 2049
|
||||
: VM-PARENT ( -- id ) 0 ;
|
||||
: VM-CHILDREN ( -- ) ." (none)" CR ;
|
||||
S" ACL.4th" EXEC
|
||||
S" block-acl.4th" EXEC
|
||||
S" zuse-eligibility.4th" EXEC
|
||||
S" lib.4th" EXEC
|
||||
S" fabric.4th" EXEC
|
||||
S" font.4th" EXEC
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
Block 4021
|
||||
( zuse-eligibility.4th - H.5/H.8 elevation grant )
|
||||
( C prims: ZUSE-ELIGIBILITY-ADD ZUSE-ELIGIBLE? )
|
||||
( NAME>XT ELEVATE-PUBKEY-UNPACK )
|
||||
( Policy word this file: ELEVATE-GRANT. Runs in )
|
||||
( Hera's own dict -- delivered here by messaging.4th's )
|
||||
( MSG-DELIVER via VM-EXEC when a session calls the )
|
||||
( common:messaging.4th SEND-ELEVATE-REQUEST entrypoint. )
|
||||
( FABRIC-2.md H.12 step 21, 2026-09-03. )
|
||||
CREATE ELEVATE-PK-BUF 32 ALLOT
|
||||
|
||||
Block 4022
|
||||
( ELEVATE-GRANT ( waddr wu pk0 pk1 pk2 pk3 -- ) )
|
||||
( Reconstructs the caller's pubkey, checks Zuse's )
|
||||
( eligibility list, and on match grants the named )
|
||||
( word ACL-ALLOW!/ACL-TTL! via the same reused )
|
||||
( ACL-TTL mechanism H.5 decided on. No grant, no )
|
||||
( error, on any mismatch -- silent refusal. )
|
||||
: ELEVATE-GRANT ( waddr wu pk0 pk1 pk2 pk3 -- )
|
||||
ELEVATE-PK-BUF ELEVATE-PUBKEY-UNPACK
|
||||
ELEVATE-PK-BUF ZUSE-ELIGIBLE? IF
|
||||
NAME>XT DUP IF
|
||||
1 OVER ACL-ALLOW!
|
||||
ACL-BASE-TTL SWAP ACL-TTL!
|
||||
ELSE DROP THEN
|
||||
ELSE 2DROP THEN ;
|
||||
+2
-2
@@ -85,7 +85,7 @@ carrying timestamp noise in git history.
|
||||
|
||||
- `artemis-metafence-fresh.img` — 30MB raw image, blank at creation,
|
||||
added 2026-08-26 for the top-of-device system-metadata fence
|
||||
(`meta_fence_blocks` in `blk_volume_meta_t`, FABRIC-3.md Phase 8 §C).
|
||||
(`meta_fence_blocks` in `blk_volume_meta_t`, FABRIC-2.md Phase 8 §C).
|
||||
Same reasoning as `artemis-reloc-test.img` above: the fence is only
|
||||
initialized to `BLK_META_FENCE_INIT` (128) by
|
||||
`blk_compute_fresh_geometry()` on a fresh format, so a genuinely blank
|
||||
@@ -103,7 +103,7 @@ carrying timestamp noise in git history.
|
||||
or misreading adjacent fields.
|
||||
|
||||
- `zuse.img` — 64MB raw image simulating the physical Zuse superuser
|
||||
thumbdrive for QEMU testing (FABRIC-3.md, Phase 8: `zuse.img` "bleach"
|
||||
thumbdrive for QEMU testing (FABRIC-2.md, Phase 8: `zuse.img` "bleach"
|
||||
mechanism, added 2026-08-26). **64MB is only this fixture's size, not a
|
||||
constraint on real home-blocks thumbdrives** (Captain Bob, 2026-08-26) —
|
||||
the design is not bound to any particular drive size; `homeblocks_sig_t`'s
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -597,7 +597,7 @@ like `ttf_words.c`, not a word-registration file.
|
||||
## Console Fabric — Framebuffer (`framebuffer_words.c`)
|
||||
|
||||
Kernel-only (`__STARKERNEL__`); no-ops on hosted builds. Raw hardware-boundary access —
|
||||
FABRIC.md item 4.3.3.
|
||||
FABRIC-0.md item 4.3.3.
|
||||
|
||||
| Word | Stack Effect | Description |
|
||||
|---|---|---|
|
||||
@@ -618,7 +618,7 @@ FABRIC.md item 4.3.3.
|
||||
|
||||
## Console Fabric — TrueType Text (`ttf_words.c`)
|
||||
|
||||
Kernel-only (`__STARKERNEL__`); no-op on hosted builds. FABRIC.md item 4.3.7e.
|
||||
Kernel-only (`__STARKERNEL__`); no-op on hosted builds. FABRIC-0.md item 4.3.7e.
|
||||
|
||||
| Word | Stack Effect | Description |
|
||||
|---|---|---|
|
||||
@@ -626,7 +626,7 @@ Kernel-only (`__STARKERNEL__`); no-op on hosted builds. FABRIC.md item 4.3.7e.
|
||||
|
||||
## Console Fabric — Scrollback (`scroll_words.c`)
|
||||
|
||||
Kernel-only (`__STARKERNEL__`); no-op on hosted builds. FABRIC.md item 4.4q (boot-mode
|
||||
Kernel-only (`__STARKERNEL__`); no-op on hosted builds. FABRIC-0.md item 4.4q (boot-mode
|
||||
scrollback added by 4.4ac).
|
||||
|
||||
| Word | Stack Effect | Description |
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# M7.1: Init Capsule Architecture
|
||||
|
||||
**Status:** Shipped and live, not just designed — this document predates the actual
|
||||
capsule/Tripod/Stadium work; see `FABRIC.md`/`FABRIC-2.md`/`FABRIC-3.md` for real status
|
||||
capsule/Tripod/Stadium work; see `FABRIC-0.md`/`FABRIC-1.md`/`FABRIC-2.md` for real status
|
||||
(per `.claude/CLAUDE.md`'s standing redirect)
|
||||
**Branch:** `master` (post-split; the old `lithosananke` branch no longer exists in this repo)
|
||||
**Prerequisite:** M7 (VM Parity Validation)
|
||||
|
||||
+122
-14
@@ -3,7 +3,7 @@
|
||||
**Branch:** `master` (post-split: this repo's `master` is the sole LithosAnanke production
|
||||
line; the old `lithosananke` branch belonged to the pre-split combined monorepo and no
|
||||
longer exists here — see `.claude/CLAUDE.md`'s "On the branch topology" note)
|
||||
**Current:** M7.1 in progress — see `FABRIC.md`/`FABRIC-2.md`/`FABRIC-3.md` for real status
|
||||
**Current:** M7.1 in progress — see `FABRIC-0.md`/`FABRIC-1.md`/`FABRIC-2.md` for real status
|
||||
|
||||
---
|
||||
|
||||
@@ -28,7 +28,115 @@ belongs here.
|
||||
|
||||
Applied to the two planned releases: the **v2.0.0** cut (even major, so LTS) is the QEMU
|
||||
release; **v2.5.0** is the hardware bare-metal release that transfers v2.0.0's QEMU story to
|
||||
real boards. See `FABRIC-3.md` §G for the release-gate punch lists.
|
||||
real boards. See `FABRIC-2.md` §G for the release-gate punch lists.
|
||||
|
||||
**Board-by-board hardware rollout, decided 2026-08-29 (extends the above as boards come
|
||||
online).** Real silicon is arriving incrementally (Beelink SER5 in hand now; RasPi 5 + Milk-V
|
||||
orderable around Mon 2026-08-31), so the hardware release is split per real board in hand,
|
||||
each its own even-minor cut on the same line (each `X.Y.0` here is an LTS point-in-time cut,
|
||||
not a separate dev line):
|
||||
|
||||
- **v2.2.0 — amd64 bare metal.** Beelink SER5 (in hand). Gate: the generic GPT/FAT32
|
||||
thumbdrive image (`make -f Makefile.starkernel ARCH=amd64 thumbdrive`) flashes to and boots
|
||||
on the real SER5 via its real UEFI; POST + `ok>`; the amd64 **RDRAND** backend
|
||||
(`rng: backend = rdrand`) serves live entropy; and a real Zuse identity is minted on a
|
||||
second thumbdrive in real hardware and re-attaches. Two 16 GB sticks available: one to boot
|
||||
the image, one to mint the Zuse user.
|
||||
- **v2.4.0 — aarch64 bare metal.** Raspberry Pi 5 (orderable ~Mon 2026-08-31). Gate: boots
|
||||
on the real board, aarch64 peripheral-RNG backend live, Zuse mint/attach on real media.
|
||||
- **v2.5.0 — all three bare metal.** Adds Milk-V (riscv64) to the above; the Zkr (RNDR)
|
||||
backend live. This is the full "same story on all three arches on real silicon" cut.
|
||||
|
||||
**Beyond v2.5.0 — Zynq FPGA is the next big milestone, after a hardening phase.** Once the
|
||||
three general-purpose boards close, the next major transfer is to a **Zynq (AMD Xilinx)
|
||||
FPGA** SoC — the step where the battle-tested amd64/aarch64/riscv64 story rides on
|
||||
configurable silicon. That is a genuinely bigger milestone than any single prior board: an
|
||||
FPGA demands its platform be carried forward rather than ported with trivial
|
||||
architecture-delta work, and it reshapes the hardware story (soft/hard CPU cores, PL fabric,
|
||||
non-standard memory map, custom peripherals). Expect a new even-major line for it once the
|
||||
coloring-in period below lands.
|
||||
|
||||
**The FPGA creates a three-product split, decided 2026-08-29.** The Zynq is not just a fourth
|
||||
platform to port to — it is the pivot that forces the project to separate into three
|
||||
distinct products, each with its own host, delivery, and proof character. This is the neat
|
||||
partition the FPGA's configurable-silicon nature makes possible and demands:
|
||||
|
||||
1. **Hosted StarForth** — the hosted/interpreted StarForth product that already exists
|
||||
(3-arch acceptance-tested; runs StarForth hosted on an OS). Its delivery is the Forth
|
||||
+ VM + capsule semantics as a portable, embeddable interpreted runtime.
|
||||
2. **A full StarshipOS** — the standalone operating system built on LithosAnanke
|
||||
(LithosAnanke → StarshipOS). Its delivery is a self-booting OS on general-purpose
|
||||
silicon (the SER5/RasPi/Milk-V line already covers this).
|
||||
3. **Hardware steady-state machinery with sealed executions, HOL-proven** — the
|
||||
FPGA-native product: hardware-enforced sealed executions and steady-state machinery
|
||||
whose guarantees are machine-checked in a proof assistant (HOL). This is the product only
|
||||
configurable silicon can honor — secret/hardware-boundary enforcement and formally
|
||||
verified behavior carried in silicon rather than software. Its delivery is the bitstream +
|
||||
the HOL proof artifacts (not just a port of the OS).
|
||||
|
||||
The coupling is the point: the FPGA is where product 3 is born, and product 3's existence is
|
||||
what cleanly separates 1 from 2 from 3. Product 1 ships hosted on an OS; product 2 ships as
|
||||
an OS on general silicon; product 3 ships as proven hardware. Anything that straddles those
|
||||
boundaries after this decision is a conscious product-line choice, not an accident of history.
|
||||
Scoping of each product's concrete gates, and the new even-major line that carries products 1
|
||||
through 3 as separate tracks, is defined at v2.5.0 close / during the coloring-in phase.
|
||||
(This complements, and does not retract, the existing "hardware bare-metal release" policy
|
||||
above.)
|
||||
|
||||
**IP framing of the three products — 3 patent applications + 3 marks, decided 2026-08-29.**
|
||||
The three products are treated as **three patent applications**, each matched to a trademark,
|
||||
with one caveat about the pre-existing provisional:
|
||||
|
||||
- **Patent 1 + mark StarForth.** The hosted/interpreted StarForth runtime product.
|
||||
- **Patent 2 + marks StarshipOS + LithosAnanke.** The full standalone OS
|
||||
(LithosAnanke → StarshipOS). (Noted as "StarshopOS" in the 2026-08-29 decision words;
|
||||
canonical repo spelling and mark is **StarshipOS** — confirmed as the literal mark
|
||||
to register.)
|
||||
- **Patent 3 + mark Compudynamics.** The Zynq hardware steady-state machinery with sealed
|
||||
executions, HOL-proven — anchored by the physics-adaptive runtime.
|
||||
|
||||
**Driving deadlines (why "no hurry" is wrong for #1 and #2), clarified 2026-08-29.** Two
|
||||
clocks bind the near term, independent of product #3 and the FPGA:
|
||||
|
||||
- **#1 — the provisional will expire before conversion.** Its priority claim is time-boxed:
|
||||
if the non-provisional isn't filed claiming benefit before the provisional's window lapses
|
||||
(provisional filed ~Dec 2025 → window ~Dec 2026), the provisional's priority is lost and
|
||||
the same subject matter cannot be re-staked by refiling thereafter. So #1 is on a hard
|
||||
clock regardless of the December scope.
|
||||
- **#2 — full StarshipOS is the December deliverable.** This is what "keeps the flagship
|
||||
covered": the standalone-OS product (and, pending confirmation below, possibly the vehicle
|
||||
that converts #1's provisional) must deliver by December.
|
||||
|
||||
- **Open point to resolve with counsel:** is **#2's** application (or the December delivery)
|
||||
the **conversion vehicle** for #1's provisional — i.e., does it claim benefit from the
|
||||
#1 provisional and thereby secure what would otherwise lapse — or is #1 converted by a
|
||||
filing separate from #2? Captured as a decision record; no filing made.
|
||||
|
||||
**Relationship to the existing provisional (must be reconciled, not assumed).** The repo
|
||||
already carries a **"Patent pending"** USPTO **provisional filed December 2025** for the
|
||||
physics-grounded self-adaptive runtime (the Compudynamics adaptive runtime), sourced in
|
||||
`docs/patent/` and referenced in `README.md`. Compudynamics is therefore already staked as
|
||||
the brand of that foundation. Open points to resolve with counsel before any filing, so
|
||||
nothing is invented or double-filed: is patent 3 the continuation/refinement of that
|
||||
provisional (its HOL hardware realization) or a fresh application? Are the three product
|
||||
applications additive to, or folding in, the Dec-2025 provisional? This record states intent;
|
||||
it does not file, claim, or draft legal text.
|
||||
|
||||
**Before the FPGA — "coloring in", decided 2026-08-29.** The period between the all-three
|
||||
bare-metal cut (v2.5.0) and starting the Zynq is finishing/hardening work that thickens the
|
||||
shape of what already exists rather than adding new silicon. This is not idle time; it is
|
||||
the point where v2.5.0's real-hardware story is made production-honest before the FPGA asks
|
||||
to carry it further. Concrete items to define during it (draft scope, to be firmed at v2.5.0
|
||||
close): Zynq-preflight robustness of the USB BOT/xHCI and block paths; live-entropy and
|
||||
Zuse-cert hardening on the three real boards; SMP/multi-core bring-up and IRQ routing on real
|
||||
ASICs (parked in the HAL notes); driver set expansion beyond the three boards before
|
||||
committing an FPGA port; and whatever v2.5.0's real-board validation surfaces. As boards
|
||||
land and the v2.5.0 gates close, this list is edited down to the concrete coloring-in punch
|
||||
list, and the Zynq becomes the even-major target after it.
|
||||
|
||||
QEMU remains the zero-degradation reference on every line; each `X.Y.0` must reproduce the
|
||||
QEMU acceptance story (`POST 1012/0/0` + `ok>`, block-fence Zuse true, backend entropy
|
||||
non-deterministic) on its board before it closes.
|
||||
|
||||
---
|
||||
|
||||
@@ -43,8 +151,8 @@ M4 APIC ██████████████████
|
||||
M5 Timer ████████████████████ COMPLETE
|
||||
M6 Heap ████████████████████ COMPLETE
|
||||
M7 VM Parity ████████████████████ COMPLETE
|
||||
M7.1 Capsules ████████████████░░░░ LIVE — see FABRIC.md/FABRIC-2.md/FABRIC-3.md
|
||||
M8 REPL ░░░░░░░░░░░░░░░░░░░░ OBSOLETE — see FABRIC.md §25.5 item 4.4
|
||||
M7.1 Capsules ████████████████░░░░ LIVE — see FABRIC-0.md/FABRIC-1.md/FABRIC-2.md
|
||||
M8 REPL ░░░░░░░░░░░░░░░░░░░░ OBSOLETE — see FABRIC-0.md §25.5 item 4.4
|
||||
M9 Block I/O ░░░░░░░░░░░░░░░░░░░░ PLANNED
|
||||
M10 Networking ░░░░░░░░░░░░░░░░░░░░ FUTURE
|
||||
```
|
||||
@@ -220,15 +328,15 @@ APIC Timer: started
|
||||
**Goal:** Content-addressed, immutable init capsules for VM birth
|
||||
|
||||
**Status:** Design Complete (see [M7.1.md](M7.1.md)) — this section predates the actual
|
||||
capsule/Tripod/Stadium work and is not current. **See `FABRIC.md`/`FABRIC-2.md` for real
|
||||
capsule/Tripod/Stadium work and is not current. **See `FABRIC-0.md`/`FABRIC-1.md` for real
|
||||
status** (per `.claude/CLAUDE.md`'s standing redirect) — Tripod (Hera/Hermes/Artemis),
|
||||
word-level ACL Phases 1–7, and the Stadium physics-economy migration are all live, not just
|
||||
designed. Most recently: item 4.6 (Artemis's block-heat arena migrated to Stadium
|
||||
admission-on-allocate) verified passing its 30-rep stress campaign on all three
|
||||
architectures 2026-08-18, after fixing a quota-grant ordering bug (`capsule_birth.c`) that
|
||||
had made every admission fail; see `FABRIC-2.md` Section H. The same pass also fixed a
|
||||
had made every admission fail; see `FABRIC-1.md` Section H. The same pass also fixed a
|
||||
long-standing aarch64-only crash on `BYE` (wrong PSCI conduit — SMC has nothing to answer it
|
||||
under AAVMF/no-EL3 boot; switched to HVC), see `FABRIC-2.md` Section I.
|
||||
under AAVMF/no-EL3 boot; switched to HVC), see `FABRIC-1.md` Section I.
|
||||
|
||||
**Core Concepts:**
|
||||
|
||||
@@ -271,7 +379,7 @@ under AAVMF/no-EL3 boot; switched to HVC), see `FABRIC-2.md` Section I.
|
||||
## Phase 4: Interactive Forth (M8)
|
||||
|
||||
> **⚠ OBSOLETE (2026-08-11).** This entire M8 section is superseded by
|
||||
> `FABRIC.md` §25.5 item 4.4 (REPL). The console/REPL design has moved past
|
||||
> `FABRIC-0.md` §25.5 item 4.4 (REPL). The console/REPL design has moved past
|
||||
> what's scoped here — do not use this section as a source for REPL or
|
||||
> CANVAS design decisions. Kept in place for history only.
|
||||
|
||||
@@ -279,7 +387,7 @@ under AAVMF/no-EL3 boot; switched to HVC), see `FABRIC-2.md` Section I.
|
||||
|
||||
**Status:** Scoped 2026-08-11 (this section). Substrate (interrupt-driven keyboard
|
||||
input, glyph rendering) already complete via Stadium's Console fabric work
|
||||
(FABRIC.md §25.5 items 4.3.5–4.3.7f) — see "What's already done" below. This
|
||||
(FABRIC-0.md §25.5 items 4.3.5–4.3.7f) — see "What's already done" below. This
|
||||
scoping pass covers what's left: wiring the existing keyboard-event stream into
|
||||
the REPL's character input path.
|
||||
|
||||
@@ -293,11 +401,11 @@ is a second input source feeding the same loop.
|
||||
aarch64/riscv64 virtio-keyboard-pci + GIC/PLIC), converged behind one shared
|
||||
interface: `KEY-EVENT ( -- keycode pressed -1 | 0 )` in
|
||||
`src/word_source/keyboard_words.c`, `keycode` in the Linux input keycode
|
||||
namespace. FABRIC.md items 4.3.5–4.3.5f, verified live on all three
|
||||
namespace. FABRIC-0.md items 4.3.5–4.3.5f, verified live on all three
|
||||
architectures with real keypresses.
|
||||
- Glyph rendering, both paths: the stroke-drawn font (`TEXT`, capsule-based,
|
||||
113-glyph v1 repertoire, FABRIC.md 4.3.6–4.3.6g) and TrueType (`TTF-TEXT`,
|
||||
proportional spacing via real `hmtx` advance widths, FABRIC.md 4.3.7–4.3.7f).
|
||||
113-glyph v1 repertoire, FABRIC-0.md 4.3.6–4.3.6g) and TrueType (`TTF-TEXT`,
|
||||
proportional spacing via real `hmtx` advance widths, FABRIC-0.md 4.3.7–4.3.7f).
|
||||
Neither is required for the REPL text itself, though — see the VT100 finding
|
||||
below.
|
||||
- **The REPL's on-screen text already renders independently of both of the
|
||||
@@ -360,7 +468,7 @@ ok 1 2 + .
|
||||
3 ok
|
||||
```
|
||||
(via a real keypress on all three architectures, same live-keypress
|
||||
verification standard FABRIC.md 4.3.5f already established — not a
|
||||
verification standard FABRIC-0.md 4.3.5f already established — not a
|
||||
serial-injected synthetic test, though serial injection must still work
|
||||
identically afterward.)
|
||||
|
||||
@@ -438,7 +546,7 @@ LithosAnanke is successful when:
|
||||
1. **M7 Parity** — VM dictionary hash reproducible across boots
|
||||
2. **M7.1 Capsules** — Birth protocol enforced, provenance logged
|
||||
3. ~~**M8 REPL** — Interactive Forth at bare metal~~ — superseded, this criterion is now met
|
||||
via Stadium's Console fabric work (`FABRIC.md` §25.5 item 4.4), not a standalone M8; see
|
||||
via Stadium's Console fabric work (`FABRIC-0.md` §25.5 item 4.4), not a standalone M8; see
|
||||
the OBSOLETE banner above Phase 4
|
||||
4. **M9 Persistence** — State survives reboot
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ What actually exists, as of 2026-08-19:
|
||||
|-----------|------|--------------|---------------|
|
||||
| Word-level DoE (**this HOWTO**) | `doe.4th` | `DOE` / `EXEC-DOE ( seed n-reps -- )` | A single embedded arithmetic workload (`DOE-WORK`), run across the 16 L8 factor configurations, streaming a CSV row per run to serial. Not auto-run anywhere. |
|
||||
| Compudynamics fleet campaign | `doe-campaign.4th` | `CAMPAIGN` / `SMOKE-CAMPAIGN` / `THREE-VM-CAMPAIGN` | Spawns Hermes/Artemis and drives real `VM-EXEC` touches between them to measure fleet heat conservation (`VM-CONSERVED?`). Not auto-run anywhere. |
|
||||
| Artemis stress campaign | `capsules/artemis/init.4th` | `ART-STRESS-CAMPAIGN` | Runs unconditionally at the bottom of the file, so it fires automatically every time Artemis is born. This is the actual source of the live `[Artemis][HADES][DOE ]` CSV rows visible during every kernel boot — unrelated to either mechanism above, and the subject of FABRIC-2.md's item 4.6 fix. |
|
||||
| Artemis stress campaign | `capsules/artemis/init.4th` | `ART-STRESS-CAMPAIGN` | Runs unconditionally at the bottom of the file, so it fires automatically every time Artemis is born. This is the actual source of the live `[Artemis][HADES][DOE ]` CSV rows visible during every kernel boot — unrelated to either mechanism above, and the subject of FABRIC-1.md's item 4.6 fix. |
|
||||
|
||||
Only the first is a self-contained "package/library" in the sense the
|
||||
cookbook wants — a capsule you load and call with your own parameters, not
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
# SDK HOWTO — `capsules/sdk.4th`
|
||||
|
||||
**Status:** WORKING. Part of the v1.9.0 scoping work (FABRIC-2.md section K).
|
||||
**Status:** WORKING. Part of the v1.9.0 scoping work (FABRIC-1.md section K).
|
||||
Loads the two cookbook capsules (turtle graphics, DoE library) and adds an
|
||||
`SDK` vocabulary entry point plus `FENCE` protection on top of them.
|
||||
|
||||
@@ -54,7 +54,7 @@ word wrongly destroyed every other word back to the fence too; forgetting
|
||||
an older word (which correctly cascades to remove newer words, per
|
||||
FORTH-79 semantics) crashed with a SIGSEGV — a use-after-free in the
|
||||
dictionary relink logic. Found and fixed as part of this work; full
|
||||
root-cause writeup in FABRIC-2.md section K. Three POST cases were added to
|
||||
root-cause writeup in FABRIC-1.md section K. Three POST cases were added to
|
||||
`dictionary_manipulation_words_test.c` (Module 14) alongside `FORGET`'s
|
||||
own, including the exact regression scenario, so it can't silently return.
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ rather than a `POLYGON` call with `n=5`.
|
||||
documented in `DOE-LIBRARY-HOWTO-20260819.md`) — it carried a stale
|
||||
`TEMP: ... revert once that run is done` comment for a verification
|
||||
run that had already closed. Reverted to disabled, matching the
|
||||
file's own note (FABRIC-2.md section K/L).
|
||||
file's own note (FABRIC-1.md section K/L).
|
||||
- The kernel's heartbeat CSV logging (`[HADES][DOE ]` rows) draws to
|
||||
the *same* console surface `PLOT` draws pixels to, and scrolls
|
||||
continuously — anything drawn gets visually overwritten within a
|
||||
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 7.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 7.2 KiB |
@@ -87,7 +87,7 @@ inactive.
|
||||
|
||||
\section{Context}
|
||||
|
||||
Item 4.6 (Section H, \texttt{FABRIC-2.md}) migrated Artemis's block-heat
|
||||
Item 4.6 (Section H, \texttt{FABRIC-1.md}) migrated Artemis's block-heat
|
||||
tracking onto Stadium-resident cells, fixing a quota-grant-ordering bug
|
||||
that had been causing her boot-time stress self-test to fail 100\% of the
|
||||
time on all three architectures. With that item closed, the next open
|
||||
@@ -415,7 +415,7 @@ Sum Sq of precisely zero on the one field that does vary.
|
||||
|
||||
\texttt{ACL.4th} is not self-activated in this repository's default
|
||||
\texttt{init.4th} (\verb|\ S" ACL.4th" EXEC|, commented out); every cell in
|
||||
this campaign, like every other boot recorded in \texttt{FABRIC-2.md}, ran
|
||||
this campaign, like every other boot recorded in \texttt{FABRIC-1.md}, ran
|
||||
with ACL inactive. This report validates the campaign mechanism and its
|
||||
determinism properties; it does not produce an ACL-RWT overhead number.
|
||||
Reproducing the original campaign's \texttt{+0.0054\%--+0.0088\%} overhead
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user