# Structural cache-attractor: multi-arm logs Cognition model: a Qwen3.6 MoE (35B-A3B, 8-bit), in-process held-KV-cache agent loop. Engineering / architectural finding. No consciousness, autopoiesis, or learning claim. ## The finding in one paragraph When a coherence-seeking sequence model runs inside a substrate whose whole purpose is to hold the strongest-possible recent context (a held KV cache), any minor behavioural loop becomes self-reinforcing: every prior action token in the cache pushes the next token the same way. The result is a structural attractor: the model locks onto one action and stays locked, within a single generation cycle. This is not a grammar bug or a too-cold-sampler bug; it is a property of the architecture. Mortality / controlled discontinuity is what breaks it. ## Evidence line 1: the lock is structural (1000-tick differential) Three matched arms, mortality decoupled, run to a 1000-tick gate: | arm | intervention | intended action | locked windows | entropy | result | |---|---|---|---|---|---| | baseline | none | drink | 20/20 | 0.0 | pure cache attractor | | gated | refuse low-confidence actions | drink (intercepted → stay) | 20/20 | 0.0 | gate changes surface, not the lock | | modulated | raise temperature on conflict (999 events) | drink | 20/20 | 0.0 | sampler-side intervention does not move it | Action-grammar gating and temperature modulation both change the *surface signature* but not the underlying intended-action lock. The lock forms in one generation cycle (first segment is ~8–40x the size of every later segment). ## Evidence line 2: controlled discontinuity breaks it (200-tick, n=3) | metric | discontinuity arm | matched no-reset control | |---|---:|---:| | completed 200-tick runs | 3/3 | 3/3 | | final-100 single-action locks | 0/3 | 3/3 | | mean final-100 entropy | 1.23 | 0.0 | | mean moved outcomes | 123 | 35.3 | | mean invalid outputs (cost) | 31.3 | 1.3 | A third control matters most: a SENSE-only arm that fires the same reset *marker text* and the same detector cadence but does NOT actually restore the cache. It locks 3/3 (entropy 0.0), proving the effect requires real cache discontinuity, not the textual cue. ## Status / boundary Engineering finding. The discontinuity arm is an experiment arm, not an adopted default: it pays a real cost in invalid/scaffold-recovery outputs, all clustered at the cache-restore boundary. No consciousness, autopoiesis, or learning claim attaches to this. ## Reviewer regeneration recipe The full sanitised JSON regenerates from the run summary by selecting, per arm and per replicate: `accepted_actions`, `action_counts`, `final_100_action_counts`, `final_100_single_action_lock`, `final_100_entropy`, `action_entropy`, `invalid_outputs`, `outcome_counts`, and `segment_reset_count`; plus the run-group aggregates (`completed_count`, `final_100_single_action_lock_count`, `mean_final_100_entropy`, `mean_moved_outcomes`, `mean_invalid_outputs`, `mean_segment_reset_count`). Internal-only fields (per-event invalid-output text, run identifiers, wall-clock timestamps, trace paths) are dropped.