diff --git a/FABRIC-2.md b/FABRIC-2.md index f5c5546..429958f 100644 --- a/FABRIC-2.md +++ b/FABRIC-2.md @@ -4062,9 +4062,24 @@ something else. Implement the derivation function.~~ and explicitly settle the still-open question from Section U: does it reuse `physics_hotwords_cache.c`'s promote/evict logic (confirmed in Section V to be hardcoded to `DictEntry*`, so "reuse" would mean genericizing it, not a drop-in) or - get its own independent implementation + get its own independent implementation. Session direction, 2026-08-25: ACL manages + *when* to relocate (capacity pressure, or a compudynamics heat/cold signal); migration + itself is expected to be rare, not routine (identity+home-blocks drives "probably won't + migrate too much" — SSD moves individual blocks to the drive only when required) +- [ ] **Flagged 2026-08-25, not yet designed: `block_subsystem.c`'s LBN routing needs revision + before single-block relocation is possible.** `lbn_to_slot()` today is pure + contiguous-range routing — walks device slots checking `start_lbn <= lbn < + start_lbn+user_blocks`, one device owns one unbroken range. Relocating an individual + block to a different device while its LBN stays fixed (the whole point — FORTH code + never sees the physical backing move) breaks that assumption outright: nothing today + lets one LBN inside a device's declared range actually resolve to a *different* device. + Direction sketched but not designed in session: a sparse relocation-exception table + (LBN → actual backing device), consulted before the plain range walk — only relocated + LBNs need an entry, so the common case (nothing ever relocated) pays zero added cost. + Exact structure (per-device vs. global, storage format, interaction with the existing + BAM/cache machinery) is the actual design work, still to do. - [ ] Implement the block-migration function itself (move one block's content + BAM entry - between two attached devices) + between two attached devices) — depends on the routing revision above existing first - [x] Implement the `sk_repl_idle()` body — the cheap "anything dirty? no? done" check (Section V confirmed this hook is empty and ready right now, doesn't even need Milestone 2 to be written, only to be *tested end to end*). **Done 2026-08-25**, see