FABRIC.md: new prerequisite item 4.1a -- quota granting for Hermes's birth

Punch list §25 new item inserted before 4.2 (scoping only, no code).
Found while scoping 4.2: no quota-granting mechanism exists at all --
quota_slot_for_vm() refuses every non-Hera vm_id by design, and both
stadium_admit()'s doc and item 3.2's DONE note defer per-VM free lists to
"when Hera assigns a VM its quota," which nothing builds. Distinguished from
item 1.3's still-open recurring capacity-transfer arbitration: this is
Hermes's one-time initial grant at birth, same shape as Hera's own
whole-pool grant at stadium_boot_init(), not an instance of the open
recurring loop. Ruled: reservoir is not split (Hermes gets her own fresh
Q48_ONE, per-VM conservation per stadium.c's own invariant comment); cell
count is an even split of Hera's current free list, touching no resident
(including pinned cell 0). 4.2 is marked blocked on this item.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Robert Allan James
2026-08-05 14:49:36 -04:00
co-authored by Claude Sonnet 5
parent 4b26be90c3
commit edfc246579
+39 -1
View File
@@ -3300,8 +3300,46 @@ document and committing that amendment as its own item.*
> parity output — untouched, as designed. Stadium diagnostics also identical across all
> three: `promotions=354 evictions=0`, `resident_sum=65536 reservoir=0 sum=65536
> (Q48_ONE=65536)` — the conservation invariant closes exactly.
- [ ] **4.1a — Quota granting: Hermes's birth grant.** New prerequisite item, inserted
2026-08-05 while scoping 4.2 — found that no quota-granting mechanism exists at all.
`quota_slot_for_vm()` refuses every `vm_id != 0` today, permanently, by design (item 3.5's
note); `stadium_admit()`'s own doc and item 3.2's DONE note both defer per-VM free lists to
"when Hera assigns a VM its quota," which nothing builds. Item 1.3 (§25.2) resolved *when*
Hera arbitrates a capacity *transfer* between VMs that already hold quotas, but explicitly
left "how much capacity moves" unresolved and out of scope (§22.5 #2) — that is the
*recurring* mechanism, and stays open; this item is narrower: Hermes's one-time *initial*
grant at birth, the same shape as Hera's own whole-pool grant at `stadium_boot_init()`, not
an instance of the still-open recurring loop. *Refs:* §1.3, §22.3, §22.5 #2.
> **Ruled, 2026-08-05:**
> 1. **Reservoir is not part of this.** `stadium.c`'s own comment states the conservation
> invariant per-VM — `Σ(resident heat) + reservoir == Q48_ONE` for *that VM's own
> quota* — not a shared pool split across VMs. Hermes gets her own fresh `Q48_ONE`
> reservoir at birth, the same pattern as Hera's boot grant, not a fraction of Hera's.
> Only cell count is actually open.
> 2. **Cell split: even.** At Hermes's birth, half of whatever cells are currently on
> Hera's free list move to a new quota slot for Hermes. Hera's residents — including
> pinned cell 0 — are never touched; only her free list is split. No tuned constant: an
> even split needs no threshold, consistent with §22's "no tuned threshold" elsewhere in
> this design.
>
> *Done when:*
> - A new `stadium_grant_quota(VMUuid vm_id)` (or equivalent, named at implementation
> time) exists in `stadium.c`, callable at a baby VM's birth (`capsule_birth.c`).
> - Splits Hera's free list evenly by cell count (±1 for odd counts), reassigns
> `stadium_owner[idx]` for every cell that moves, and grants the new VM a fresh
> `Q48_ONE` reservoir — verified by both VMs' independent conservation checks closing
> exactly immediately after the grant, with zero residents on either side yet.
> - Hera's own residents (including cell 0) are provably untouched — same cell count and
> identities before and after the grant.
> - Refuses (does not crash) if `vm_id` already holds a quota, or if the granting VM's
> free list is empty.
> - All three architectures boot to `ok>` with logs under `logs/`, `dict_hash` unchanged
> from item 4.1's baseline (`0x3d4e1daf289da94f`) since this item touches no dictionary
> word.
- [ ] **4.2 — Hermes native on the Stadium.** The proving ground; produces the effort
number. *Refs:* §10.
number. *Refs:* §10. **Blocked on 4.1a** — Hermes cannot hold Stadium residents without a
quota, and nothing grants one yet.
> **Two rulings taken before work starts, 2026-08-05:**
> 1. **`stadium_owner[idx]` fix folded into this item's scope**, by explicit Captain Bob