Stage S-1a: parity hashing covers the whole dictionary; failures are logged, counted and marked INCOMPLETE (FABRIC-3.9.0 §8.1)
- MAX_DICT_ENTRIES (2048) removed: the entry list is allocated to the dictionary's size; a cyclic chain is detected (Floyd) instead of capped. - Colon-body walk bounded by vm->here, not a 1024-cell cap. - Every failure prints PARITY:INCOMPLETE #n with its full reason, logs at LOG_ERROR, bumps sk_parity_incomplete_count(), and the record reads hash=INCOMPLETE / PARITY:FAIL code=4 rather than a plausible hash. - Pre-existing #GP fixed: the walker dereferenced inline body data (S" bytes, offsets); it now follows only known dictionary entries. - LIT operands that are entry pointers are hashed by word_id, not address, so a mature dictionary hashes identically across ISAs. Probe (reverted): 563 -> 2563 words hashed, identical on amd64/aarch64/ riscv64; cyclic chain -> INCOMPLETE, counter 2. Boot parity unchanged (531, 0x572daac83b797332). 3-ISA acceptance passes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
9bf2e8ec95
commit
ee3db96ea8
+1
-1
@@ -345,7 +345,7 @@ words. It should all be fairly dynamic."*
|
||||
| Where | Today | At the limit |
|
||||
|---|---|---|
|
||||
| `parity.c:498/646`, `MAX_DICT_ENTRIES` 2048 | parity walks at most 2048 dictionary entries | **Hashing stops.** Beyond 2048 words, `dict_hash` silently ignores the rest, so the determinism evidence would be computed over part of the dictionary. |
|
||||
| `vm.h` `DICTIONARY_SIZE` 1024: `word_id_map[1024]`, `recycled_word_ids[1024]`; `dictionary_management.c:87` | word ids 0–1023 | **Word 1025 onward gets `WORD_ID_INVALID`,** and the physics hooks skip it (`physics_execution_hooks.c:95`). Execution heat, pipelining and transitions silently stop for later words. Hera is at 531. |
|
||||
| `vm.h` `DICTIONARY_SIZE` 1024: `word_id_map[1024]`, `recycled_word_ids[1024]`; `dictionary_management.c:87` | word ids 0–1023 | **Word 1025 onward gets `WORD_ID_INVALID`,** and the physics hooks skip it (`physics_execution_hooks.c:95`). Execution heat, pipelining and transitions stop for later words. Hera is at 531. *(Corrected at S-1a: not strictly silent. `vm_dictionary_track_entry` logs a `LOG_WARN`, "out of stable IDs, disabling metrics for '…'", per word. But nothing counts it and nothing refuses: the word is still defined and runs outside the physics, so §8.1's rules are still unmet.)* |
|
||||
| `string_words.c` `WORD` scratch, `WORD_SCRATCH_CAP` 64 | one **static** `word_scratch_addr`, allotted in the first caller's VM space | Not a count limit, but a static shared across VMs: a second VM calling `WORD` gets an address in someone else's space. Found at Stage G. |
|
||||
|
||||
**Captain Bob, 2026-09-24:** *"both of those failure modes that you've noted need to be handled
|
||||
|
||||
Reference in New Issue
Block a user