#188: the Jacquard selector's 64 cards, L7 permanently on, L2 a real gate

Captain Bob, 2026-11-12: "Wire L2, keep L7 on". The table held the 128
cards of the 7-bit L1-L7 space; nothing read L7, and the rolling window
recorded whatever the card said, so the 128 were 32 behaviours.

- compudynamics.c: cd_tuning_word() sizes the table to 64 (L1-L6).
- ssm_jacquard.c: card_bits() makes a card's 7-bit mask, L7 set, where a
  card is read, seeded and started (C4: 17 -> card 8);
  ssm_l8_force_config() still takes the 7-bit index, its L7 bit implied.
- physics_execution_hooks.c, kernel vm_core.c: the rolling window records
  only while L2 is on (or before there is a config).
- ssm_jacquard.h says what is wired, bit by bit (it said L7 was);
  v3/CLAUDE.md and the L8 reference corrected in place; FABRIC-3 XLVIII.21.

Tests first, seen to fail against HEAD (logs/20261112-210510/kernel-tests):
test_ssm_jacquard 4 of 7, test_physics_l2 1 of 4; all pass now. v4 reads
no rolling window: acceptance is unchanged; the protocol runs next.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RzZgrf7V7Zk2iczBXDRbm
This commit is contained in:
Claude
2026-11-12 21:05:24 +00:00
parent 7e0728e46b
commit c76a742f2b
15 changed files with 233 additions and 19 deletions
+20
View File
@@ -6581,3 +6581,23 @@ and memorize frequently so we can pick up where we left off").
- **Seen to pass:** `mint_part_fail` (the new message, never "nothing changed", the old stick logs
in); `mint_fail`, every write failing, still "nothing changed"; `replace`, the success path.
### 21. #188: the Jacquard selector's cards -- 64, each different, L2 a real gate (2026-11-12)
- **Found** (Captain Bob asked, 2026-11-12: "Is the jacquard selector implementing all of the
possible cards?"): the table held 128 cards, the 7-bit L1-L7 DoE space, and wrote all seven bits
into the VM's config, but nothing read L7 and the rolling window (L2) recorded every execution
whatever the card said: the 128 cards were 32 behaviours, four cards each. `ssm_jacquard.h` said
L7 was wired; it was not.
- **Ruled:** "Wire L2, keep L7 on" -- L7 permanently on, as `docs/reference/L8_ADAPTIVE_CONFIG_TABLE.md`
§2 says it is; L2 the selector's to switch.
- **Tested first, seen to fail:** `kernel/tests/test_ssm_jacquard.c` -- 64 cards, the start still
C4 (L3+L7), L7 on in all, all 64 L1-L6 settings distinct, a forced 7-bit index naming its card
with or without its L7 bit: 4 of 7 failed. `kernel/tests/test_physics_l2.c` -- with L2 off an
execution is not recorded: failed against the old hook.
- **Built:** `cd_tuning_word()` sizes the table to 64 (`compudynamics.c`); a card's index is its L1-L6 bits and
`card_bits()` in `ssm_jacquard.c` makes its 7-bit mask with L7 set, at the three places a card is
read, the DoE seeding, and the start (17 -> card 8). `ssm_l8_force_config()` takes the 7-bit index
as before. The rolling window records only while the config's L2 is on, or before there is a
config (`physics_execution_hooks.c`, `kernel/src/vm/vm_core.c`).
`ssm_jacquard.h` says what is wired, bit by bit; `v3/CLAUDE.md` and the L8 reference corrected.
- **Seen to pass:** both tests; v4 does not read the rolling window, so acceptance is unchanged.
@@ -4,6 +4,14 @@
**Author:** Claude Code session, June 2026
**Affects:** `include/ssm_jacquard.h`, `src/ssm_jacquard.c`, `src/inference_engine.c`, `include/vm.h`
> **Corrected 2026-11-12 (#188; Captain Bob: "Wire L2, keep L7 on").** As built, the table has **64
> cards, not 128**: the six bits L1–L6, with L7 permanently on in every card, as §2's table says L7
> is. The 128 below -- the 2^7 DoE space -- held each card twice, differing only in an L7 bit that
> nothing read, so half the table was the same cards. A card's 7-bit mask is `(card << 1) | L7`;
> `ssm_l8_force_config()` still takes the 7-bit index and ignores its L7 bit. L2 (rolling window) was
> recorded whatever the card said; it is now L8's live toggle, as L4 is. The 128s below are left as
> the proposal said them.
---
## 1. Executive Summary