Stage K-2: COLD forgets to the fence; PAD moved below the block window (FABRIC-3.10.8 §4.2)

- Defect 1: COLD now forgets every word since the fence exactly as FORGET
  does (new vm_dictionary_forget_to_fence(): untrack, metrics, entry) and
  rewinds HERE to the fence. It rewound HERE alone to 1024, leaving live
  words to be compiled over.
- Defect 2: PAD = BLK_VM_WINDOW_BASE - 512 (was inside the window's top
  slot, shared with BLOCK/BUFFER).
- Probe (plain FORTH, all three ISAs identical): PAD..PAD+511 =
  5238272..5238783 below the window (5238784); on a worker KA/KC found,
  COLD, then KA/KB/KC not found, HERE at the fence (1424), new word works.
- Standard sequence on amd64/aarch64/riscv64: hash and G unchanged,
  MINT/WIREBIND/USE ok, conserved, 0 idle growth.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Robert Allan James
2026-09-26 03:13:21 -04:00
co-authored by Claude Opus 5.5
parent 27c430e0ca
commit c9c97cf769
11 changed files with 27609 additions and 14 deletions
+5
View File
@@ -808,6 +808,11 @@ uint32_t vm_dictionary_word_id_refusals(void);
void vm_dictionary_untrack_entry(VM* vm, DictEntry* entry);
/* FABRIC-3.10.8 K-2: forget every word defined since the fence (as FORGET
* does) and rewind HERE to the fence -- COLD's dictionary reset. Returns
* the number of words forgotten. */
int vm_dictionary_forget_to_fence(VM* vm);
cell_t* vm_dictionary_get_data_field(DictEntry* entry);
void vm_compile_word(VM* vm, DictEntry* entry);