Commit Graph
4 Commits
Author SHA1 Message Date
Robert Allan JamesandClaude Opus 5 421c1d7602 FABRIC.md §21 — Q6 resolved: nested
Q6 leaned toward nested for the right conclusion and the wrong reason.

Its premise -- that a single region "reintroduces locking, the one mechanism
this architecture has otherwise never wanted" -- is false. Every mutex in the
kernel build is a no-op (shim.c:415); the kernel compiles STARFORTH_MINIMAL and
the shim stubs dict_lock and tuning_lock out entirely. The architecture has not
avoided locking, it has locking, inert. The cost Q6 weighs is currently zero, so
Q6 cannot be decided on it.

Decided nested on six other grounds, the strongest being SMP-readiness: nested
keeps messages the only boundary-crossers, so no shared memory and no locks
ever, whereas a single region would need real locks and the present no-op stubs
would silently become a correctness hole. The most practical is that the outer
level already exists and works (§20.1) -- single-region means discarding a
working two-level structure.

Also records a step-one finding that lands before any Stadium work: enabling
timer interrupts introduces genuine ISR-vs-mainline concurrency where none
exists today. Making the mutexes real would deadlock a single hart outright,
since an ISR spinning on a lock the mainline holds can never be released. The
top-half/bottom-half split of §18.4 is the answer, stated as a rule:

  Nothing in interrupt context may mutate Stadium structure. Ever.

That constraint should be written at the stub site so the no-op is not later
"fixed" into a spinlock.

Opens: two capacities to size rather than one, and elasticity (§12 Q4 / §7 /
§17.6c) becomes the live fork now that nesting makes capacity transfer real.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 10:06:17 -04:00
Robert Allan JamesandClaude Opus 5 1a5cd3fc74 FABRIC.md §20 — VMs are patrons
§17 named four patrons and omitted the only kind already implemented. §9's
admission table has always included VM, and §6 says Hera becomes the first
entry; neither reconciles with a four-patron taxonomy.

This is a finding rather than a proposal. vm_physics_fleet_heat_sum() already
sums execution_heat_q48 across live VMs against Q48_ONE -- that is a Stadium's
K over VM patrons, and §19.1's definition was derived from it.

Two consequences:

- The outer level is unbounded. The VM physics registry is a kmalloc-backed
  linked list, self-described as "unbounded, not a fixed array", so heat is
  renormalised to 1.0 however many VMs exist. By §2's own test, fleet K is
  currently bookkeeping -- VM-CONSERVED? cannot fail. This also explains why
  the Artemis campaign's K-invariance arm found nothing: the quantity cannot
  vary. Bounding the population is what would make it measurable.

- Nesting is half-built. Outer Stadium holds VM patrons; each VM's inner
  Stadium holds words, blocks, ACLs and messages. That is §12 Q6's nested
  option with the outer level already present. LEANING nested.

Proposes VM mass = the capacity share Hera allocated, making §7 concrete and
giving Hera a lifecycle signal that distinguishes starved from small. Marked
proposal: VMPhysics has no share field today.

Resolves §20.5 #3: Hera is pinned, and any attempt to evict her is a kernel
panic asserted at the eviction site, not filtered out of the candidate set.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 10:02:52 -04:00
Robert Allan JamesandClaude Opus 5 85f59fca2e FABRIC.md §19 — mass, density, and what K actually is
Supplies the concrete definition §4 was missing. §4's claim that ranking is
read rather than decided is empty until the thing being read is a number.

Three quantities, not one:
  Heat    conserved share moved by traffic, sum = 1.0 always (already built)
  Mass    cells a patron occupies -- its footprint (new)
  Density heat / mass -- heat per cell (new, derived)

K is left untouched. vm_physics_conserved() already defines it as a normalised
heat share summing to Q48_ONE, not an occupancy ratio; defining it as
mass/capacity would have contradicted implemented, tested code.

Ranking, admission-when-full, and migration hysteresis all read off density
with no policy and no damping constant.

Two corrections to §4:
  - The self-limiting claim keeps its conclusion but loses its mechanism. A hot
    entry is easier to reach, not harder; the real governor is conservation,
    since heat is zero-sum and capped at 1.0.
  - "Density generates heat" reverses the causality. Traffic confers heat;
    density is heat per cell, derived downstream.

Open: mass depends on payload threshold and header size (§12 Q1, Q2), which are
now prerequisites rather than sizing details; and vm_physics_touch scales heat
transfer by wall-clock time, which §18.5 forbids and which must be restated on
tick count before L0 can use it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 09:57:59 -04:00
Robert Allan JamesandClaude Opus 5 8af19a545b Add FABRIC.md — Stadium design, sections 1-18
Captures the 2026-08-03 design session: collapsing the four independent
heat/TTL/pin implementations (blocks, messages, console cells, ACLs) into
one bounded Stadium of fixed-size entries, driven by an engine below every VM.

Sections 1-15 are the original design argument. Sections 16-18 add:

- 16  Substrate findings. No IRQ return path exists on aarch64 or riscv64;
      riscv64's time base is a hardcoded 1 GHz guess; the dictionary already
      carries six of the seven entry wires; the engine must stay deterministic.
- 17  Patrons. TTL, heat decay and pin are three distinct mechanisms on one
      tick, not a type field. Reap means leaves the floor, not destroyed. The
      framebuffer is a utility, not a patron. Dynamic in capacity, static in
      structure.
- 18  The engine (L0). L0 and L8 bookend the gated loops L1-L7, both ungated.
      Jacquard stays 7-bit/128 states, accounting for L0 by its absence.
      Dispatch enumerates behaviours, never patron kinds.

Determinism traced end to end and confirmed intact: TIME-TRUST is measured
and never fed back, inference inputs are wholly execution-derived, decay is
tick-based, and the parity hash covers only word name and execution_heat.
One pre-existing exception recorded — vm_physics_touch scales fleet heat by
wall-clock elapsed time, outside the parity path.

Draft. Sections marked DECIDED / LEANING / OPEN throughout.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 09:45:05 -04:00