FABRIC.md: resolve item 1.5 -- outer VM bound is 4, tunable, birth refused at cap

Punch list §25 item 1.5 complete.
Bound defaults to 4 (Tripod's known topology), Kconfig-tunable,
explicitly a placeholder pending a later DoE campaign for an idealized
default. Fixed for the machine's lifetime once set at build. Corrects
the document's own "coldest-VM-reaped is consistent with §19.3" claim,
which doesn't survive §20.2's cold-start birth rule -- birth is
refused at the bound instead, and reaping stays Hera's deliberate act.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Robert Allan James
2026-08-04 09:32:08 -04:00
co-authored by Claude Sonnet 5
parent 69f71035be
commit 729bfd8bda
+44 -9
View File
@@ -1445,10 +1445,37 @@ decides where work goes; that remains capability-based routing.
### 20.5 Open
1. **Bounding the VM population.** What is the outer Stadium's capacity, and what happens
at the bound — birth refused, or coldest VM reaped? The latter is consistent with §19.3
but means a VM can die because a new one was born, which needs to be an explicit,
stated behaviour rather than an emergent surprise.
1. ~~**Bounding the VM population.**~~ **RESOLVED by item 1.5 (§25.2), 2026-08-04.** What is
the outer Stadium's capacity, and what happens at the bound — birth refused, or coldest
VM reaped?
**Correction first: "coldest reaped, consistent with §19.3" does not survive §20.2.**
§19.3's admission rule is *admit if denser than the least dense resident*. §20.2 already
decided every VM but Hera is born at heat zero. A newborn can never be denser than an
existing warm VM, so applying §19.3 literally at the outer level means births at the
bound would fail regardless — just silently, via a comparison that can never succeed,
instead of by an explicit refusal. Treating "coldest reaped" as automatic would also
require a bespoke, non-density rule that exists for VMs alone, which is exactly the
per-kind special case §11 warns against.
**Resolution: birth is refused at the bound.** Making room is Hera's own deliberate act —
she already reaps VMs (§20.1) — never an automatic side effect of someone else's birth
request. This is the explicit, stated behaviour the original text asked for.
**The bound itself: 4, Kconfig-tunable, explicitly a placeholder.** 4 matches Tripod's
own currently-known topology (Hera + two Hermes instances + Artemis) — the smallest
number that doesn't already contradict what this system is known to need, not a padded
estimate. It is expected to be too small for real workloads. The right way to find an
idealized default is empirical — a DoE campaign, the same discipline already used
elsewhere in this project (`experiments/bare_metal/`) — not a second guess made on paper.
Tracked as future work, not invented here. The constant is a Kconfig symbol (e.g.
`STADIUM_MAX_VM_COUNT`, named at implementation time in item 3.1 alongside the other new
symbols this phase introduces), not hardcoded.
**Fixed for the machine's lifetime once set at build** — resolves §22.5 #4 below in the
same stroke. The outer total does not itself flex at runtime; only per-VM quotas do
(§22). An outer bound that could grow or shrink live would mean §2's "inescapable wall"
is not actually inescapable.
2. **Is a VM's mass its allocated share, or one cell?** §20.4 proposes the share. The
alternative — every VM is one entry regardless of size — is simpler but throws away the
distinction in the table above, which is the reason to do this at all.
@@ -1765,10 +1792,10 @@ inventing an unrelated number. 1000:1 against the virtual tick is comfortably pa
pins down the amount. Reported rather than invented — it can become its own item if
warranted, but is out of this item's scope.
3. ~~**The exact timescale ratio**~~ **RESOLVED by item 1.4 — 1000:1.** See §22.4.
4. **Does the outer Stadium's own capacity ever change?** §22 makes per-VM quotas elastic
within a fixed total. Whether that total is itself fixed for the machine's lifetime is
§20.5 #1, still open — and it should stay fixed, or §2's inescapable wall is not
inescapable.
4. ~~**Does the outer Stadium's own capacity ever change?**~~ **RESOLVED by item 1.5 —
no.** §22 makes per-VM quotas elastic within a fixed total; the total itself is fixed for
the machine's lifetime, set once at build via the Kconfig bound §20.5 #1 introduces. See
§20.5 #1 for the full argument.
---
@@ -2344,9 +2371,17 @@ document and committing that amendment as its own item.*
> number. Comfortably past §12 Q5's order-of-magnitude minimum. Kconfig-tunable at
> implementation (item 3.1). Full argument in §22.4.
- [ ] **1.5 — The outer bound.** The outer Stadium's capacity, and the behaviour at the
- [x] **1.5 — The outer bound.** The outer Stadium's capacity, and the behaviour at the
bound: birth refused, or coldest VM reaped. *Refs:* §20.5 #1, §22.5 #4.
> **RESOLVED 2026-08-04.** Bound = 4 (matches Tripod's known topology: Hera + 2 Hermes +
> Artemis), Kconfig-tunable, explicitly a placeholder pending a later DoE campaign to find
> an idealized default rather than a second guess made on paper. Fixed for the machine's
> lifetime once set at build. At the bound, **birth is refused** — not coldest-VM-reaped,
> which the original text called "consistent with §19.3" but which does not survive
> §20.2's cold-start birth rule (a newborn can never out-density an existing warm VM).
> Making room stays Hera's own deliberate act. Full argument in §20.5 #1.
- [ ] **1.6 — A VM's mass: allocated share, or one cell.** *Refs:* §20.4, §20.5 #2.
- [ ] **1.7 — Rule out recursion beyond two levels** — deliberately, not by omission.