#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
+3 -1
View File
@@ -141,7 +141,9 @@ typedef struct {
* a referenced global; these accessors are the aggregate-typed
* equivalent of that same constraint. */
/* Word level (ssm_jacquard.c): 128 configs (7-bit L1-L7), 8 regimes
/* Word level (ssm_jacquard.c): 64 configs (6-bit L1-L6; L7 permanently on -- #188,
* 2026-11-12; it said 128 configs, 7-bit L1-L7, and the cards differing only in L7 were
* alike), 8 regimes
* (3-bit diversity/volatility/locality). Values match the constants
* ssm_jacquard.c/.h used before this module existed -- this is a lift,
* not a retune. */
+16 -3
View File
@@ -127,7 +127,18 @@ typedef struct {
* macros (ENABLE_HOTWORDS_CACHE, ENABLE_PIPELINING, HEARTBEAT_THREAD_ENABLED)
* for the whole process lifetime. Adding these fields, and wiring them at
* their four call sites alongside (not instead of) the compile-time macros,
* makes the bandit's full selection actually take effect. */
* makes the bandit's full selection actually take effect.
*
* Corrected 2026-11-12 (#188): that was true of L1 and L4, not of L7 -- nothing reads
* L7_adaptive_heartrate -- and L2 was never wired. What is wired now:
* L1 hotwords_cache_set_enabled() vm_time.c, kernel vm_runtime.c
* L2 rolling_window_record_execution(), gated physics_execution_hooks.c, kernel vm_core.c
* L3 linear decay physics_metadata.c
* L4 pipelining physics_execution_hooks.c
* L5 window inference inference_engine.c
* L6 decay inference inference_engine.c
* L7 not chosen: permanently on in every card (Captain Bob: "Wire L2, keep L7 on");
* the table is 64 cards, L1-L6, not 128. */
typedef struct {
int L1_heat_tracking; /* 1 = hotwords cache active, 0 = off */
int L2_rolling_window; /* 1 = window tracking active, 0 = off */
@@ -146,7 +157,8 @@ typedef struct {
*/
/* ============================================================================
* Adaptive Table Constants (L8 Heat-Ranked 128-Config Selector)
* Adaptive Table Constants (L8 Heat-Ranked Config Selector: 64 cards, L1-L6, L7
* permanently on -- 128, the 7-bit space, before #188)
* One clock only: the heartbeat tick (rev r). Scoring and UCB reselection
* both run every tick -- no derived multi-tick batching unit exists
* anywhere in this mechanism. The score/UCB/reward/weight constants live
@@ -173,7 +185,8 @@ typedef struct {
* ============================================================================
*
* The adaptive table itself (CDConfigEntry/CDConfigTable) is the generic
* compudynamics bandit (compudynamics.h), sized to 128 configs x 8 regimes
* compudynamics bandit (compudynamics.h), sized to 64 cards x 8 regimes (#188;
* 128 before)
* via cd_tuning_word() -- see ssm_l8_init_table().
*/