FABRIC-3.md: close the live-MIGRATE verification gap; report a USE/RUN shadowing bug
Confirmed the real MIGRATE dispatch fires live: a temporary boot probe (STADIUM-ADMIT + STADIUM-EVICT against the live Artemis VM, inserted into the existing 4.6 self-test and reverted immediately after capture) produced "Stadium: dispatch cell=63257 behaviour=MIGRATE lbn=100" with blk_flush(100) firing and zero error -- closes the honest gap left open in the previous commit. Interactive flooding alone couldn't reach this: Hera's reservoir sits at the Q48_ONE/3 floor from boot self-tests, so block-touch candidates pull 0 heat and can never out-density an existing resident, a pre-existing reservoir-floor/eviction interaction unrelated to this pass. Also reports (not fixes, per CLAUDE.md) a real dictionary-shadowing bug found while chasing this: capsules/lib.4th:13 redefines USE as EXEC, shadowing the C primitive mama_word_use() (REPL VM-redirect) with an unrelated capsule-loading meaning -- same for RUN at lib.4th:14. Same bug class as the K-PUSH dictionary-shadowing issue. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CXjAPTEKrgY2Mrk25KoLDn
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
c7c9332321
commit
0f683c15fd
+31
-12
@@ -317,18 +317,37 @@ other three become honest, explicit punch-list items instead of being touched sp
|
|||||||
identically across all three; `BLOCK`/`BUFFER` touches exercised live from the REPL on amd64 and
|
identically across all three; `BLOCK`/`BUFFER` touches exercised live from the REPL on amd64 and
|
||||||
riscv64 with no crash; a 22,000-distinct-block flood loop (amd64, artificially shrunk to a
|
riscv64 with no crash; a 22,000-distinct-block flood loop (amd64, artificially shrunk to a
|
||||||
20,971-cell Stadium via a one-off smaller `-m` to make quota pressure reachable) ran clean under
|
20,971-cell Stadium via a one-off smaller `-m` to make quota pressure reachable) ran clean under
|
||||||
heavy admission-path load with no corruption. **Honest gap, not silently claimed:** a live
|
heavy admission-path load with no corruption. **Live `MIGRATE` fire confirmed (2026-08-26):**
|
||||||
`MIGRATE lbn=...` console print was NOT directly observed firing in this session. Root cause
|
interactive flooding alone never triggered it — Hera's reservoir was already sitting exactly at
|
||||||
traced, not a defect in this work: Hera's reservoir was already sitting exactly at the
|
the `Q48_ONE / 3` floor from the boot-time self-tests, so every block-touch candidate pulled 0
|
||||||
`Q48_ONE / 3` floor from the boot-time self-tests before any manual testing began, so every
|
heat, and a 0-heat candidate can never be *strictly denser* than an existing resident, so
|
||||||
block-touch candidate pulled 0 heat — and a 0-heat candidate can never be *strictly denser* than
|
`stadium_admit()`'s eviction fallback correctly refuses rather than evicts once the free list is
|
||||||
an existing resident, so `stadium_admit()`'s eviction fallback correctly refuses rather than
|
exhausted (a pre-existing reservoir-floor/density-eviction interaction, applies equally to word
|
||||||
evicts once the free list is exhausted. This is a pre-existing interaction between the reservoir
|
patrons, not introduced by this pass). Closed deterministically instead with a temporary boot
|
||||||
floor and density-based eviction (applies equally to word patrons, not something this pass
|
probe (`kernel_main.c`, inserted into the existing Artemis 4.6 self-test block, reverted
|
||||||
introduced), not something wrong with the new code. Follow-up: force a live `MIGRATE` fire from
|
immediately after capture — no code left behind): `100 65536 0 STADIUM-ADMIT ... STADIUM-EVICT`
|
||||||
inside a child VM's own REPL context (where the `STADIUM-ADMIT`/`STADIUM-EVICT` diagnostic words
|
against the live Artemis VM. Captured live: `Stadium: dispatch cell=63257 behaviour=MIGRATE
|
||||||
are registered — attempted via `USE` this session, which failed with "EXEC: failed", not yet
|
lbn=100`, followed by `DBG err after MIGRATE probe=0` — `blk_flush(100)` fired for real, with
|
||||||
root-caused) to directly and deterministically exercise the eviction path with nonzero heat.
|
the correct LBN threaded through from the departing patron's `identity` field exactly as
|
||||||
|
designed. (Artemis's own reservoir went briefly out of Q48_ONE-balance during the probe — raw
|
||||||
|
`STADIUM-ADMIT` doesn't debit the reservoir on its own, by its own doc, so a heat value handed
|
||||||
|
to it directly is invented, not pulled; harmless here since Artemis is killed and her whole
|
||||||
|
economy discarded immediately after, and Hera's own conservation was independently confirmed
|
||||||
|
back at the normal 43691/21845/65536 baseline afterward.)
|
||||||
|
- [x] **Bug found and reported, not fixed (2026-08-26): `capsules/lib.4th:13` shadows the C
|
||||||
|
primitive `USE`.** While chasing the live-MIGRATE test above, `S" Artemis" USE` (meant to
|
||||||
|
redirect the REPL into Artemis's own vocabulary, `mama_word_use()`) instead printed `EXEC:
|
||||||
|
failed: Artemis`. Root cause: `capsules/lib.4th:13` defines `: USE ( addr u -- ) EXEC ;` — a
|
||||||
|
FORTH word with the same name but a completely different meaning ("load/exec a capsule"),
|
||||||
|
which shadows the C-registered `USE` in dictionary search order since `lib.4th` loads after
|
||||||
|
primitive registration. `lib.4th:14` does the identical thing to `RUN` (`: RUN ( addr u -- )
|
||||||
|
EXEC ;`), which CLAUDE.md also names as an untouchable C primitive ("BIRTH, RUN, USE are
|
||||||
|
primitives — registered in C exactly like DUP, BYE, EXEC"). Same bug class as the K-PUSH
|
||||||
|
dictionary-shadowing issue (`docs/working/architecture/K-PUSH-DICTIONARY-SHADOWING-BUG-
|
||||||
|
20260704.md`). Per CLAUDE.md's rule against unrequested fixes, this is reported here, not
|
||||||
|
patched — `lib.4th`'s `USE`/`RUN` were presumably meant as private helpers for
|
||||||
|
`doe-campaign.4th`-style capsules and never intended to collide with the REPL primitives of
|
||||||
|
the same name.
|
||||||
- [ ] Scope VM-`COOL`: confirm whether `capsule_vm_kill()`/Tripod's existing VM lifecycle has
|
- [ ] Scope VM-`COOL`: confirm whether `capsule_vm_kill()`/Tripod's existing VM lifecycle has
|
||||||
any real hook point equivalent to `stadium_evict()`, or needs the same kind of admission
|
any real hook point equivalent to `stadium_evict()`, or needs the same kind of admission
|
||||||
work `MIGRATE` needs. **Deferred (2026-08-25)** per the user's own "we're going to have to
|
work `MIGRATE` needs. **Deferred (2026-08-25)** per the user's own "we're going to have to
|
||||||
|
|||||||
Reference in New Issue
Block a user