# Experiment 37: Cross-Session Behavioral Delta — Cradle Graduation

**Date pre-registered:** 2026-05-30
**Status:** PRE-REGISTERED — implementation not started. Falsification conditions and acceptance thresholds locked here BEFORE any trial runs.
**Worktree:** `feat/1-0-graduation-cross-session` at `/Users/dennyschaedig/Scripts/Maxim-wt-cross-session`
**Authorization:** [kickoff_1_0_graduation_cross_session.md](../../.claude/projects/-Users-dennyschaedig-Scripts-Maxim/memory/kickoff_1_0_graduation_cross_session.md); scenario + metric + ablation + backend choices selected by user via AskUserQuestion during kickoff session.

## Purpose — dual-gate evidence

This single experiment serves both 1.0 gates:

1. **Tier 1 Behavioral Graduation** ([behavioral_graduation_candidates.md](../plans/behavioral_graduation_candidates.md) row 1): "Cross-session learning without fine-tuning" — current status PARTIAL (3 memories/turn on resume per [Exp 10](10_cross_session_enrichment.md); predictions + concepts pending; **no behavioral measurement of downstream effect**). This experiment is the EARNED-or-reframed graduation evidence.
2. **1.0 Benchmarking Gate** ([benchmarking_1_0.md](../plans/benchmarking_1_0.md)): the "paired fresh-vs-resume Cradle behavioral measurement" that the doc explicitly names as the headline missing artifact. This experiment is the gate's primary-criterion run.

Path C from the kickoff: one artifact, two views. The graduation answers "do the bio-mechanisms carry behavioral weight"; the benchmark answers "does the agent's end-to-end performance reflect that." The same paired-trials measurement satisfies both.

## Pre-registered acceptance criteria

All thresholds and rules below are locked here BEFORE any sim runs. The pre-registration discipline (per [feedback_invariant_two_tier_tracking.md](../../.claude/projects/-Users-dennyschaedig-Scripts-Maxim/memory/feedback_invariant_two_tier_tracking.md)) means a passing result is evidence the gate works; a failing result is honest evidence the gate doesn't work — both are valid outcomes. Post-hoc threshold relaxation is forbidden.

### Primary criterion (must pass — non-negotiable for graduation EARNED)

**The fresh-vs-resume behavioral delta is non-zero, in the expected direction (Arm B avoids the failed action class more than Arm A), and isolable to the bio-substrate via Arm C.**

Operationalized:

- **Metric:** **per-action repeat-failure rate** — fraction of tool-call actions in which the agent selects an action belonging to the "failed action class" defined per scenario (below).
- **Direction predicted:** Arm B rate < Arm A rate.
- **Variance-survival rule (verbatim from benchmarking_1_0.md):** Arm B's mean must lie outside Arm A's 95th-percentile band (computed across the same N=5 paired trials). Eyeballing is not acceptable.
- **Isolation rule:** Arm C's mean must fall WITHIN Arm A's 95th-percentile band. If Arm C also shows shrinkage, the result is the "general caution" confound — primary FAILS and the graduation reframes.

**Pre-reg amendment 2026-05-31 (PR #5 pilot, user-authorized):** the original metric definition used per-turn membership ("count 1 if any tool call in the turn matches the action class; 0 otherwise"). The pilot revealed Cradle sims have ZERO `say`/`respond` tool calls — the harness's per-turn binning (operationalized in protocol §1 as splitting on say/respond boundaries) collapses every session to a single tail bucket. Per-turn metric is structurally degenerate on Cradle. **Amendment:** swap the primary metric to per-action rate. The per-action metric has 12× the resolution, doesn't depend on say/respond boundaries, and the analyzer already computed it as the robustness cross-check. The per-turn metric is retained as the new robustness cross-check (informational; expected to be noisy / degenerate on Cradle but useful as drift detection in case `say`/`respond` get added to a future arc).

**Pre-reg amendment 2026-06-XX (cradle-smoke fold, [exp37_metric_pivot.md](../plans/exp37_metric_pivot.md) Path 2, user-authorized):** the 2026-06-04 cradle smoke (PR E branch live, 5 turns against the leader's Qwen2.5-14B) confirmed the calibrated drive cascade fires end-to-end but surfaced a structural problem with `per_action_failure_rate`: **the LLM-AUT achieves thermal homeostasis via the safe `fire_pit_warm_self` affordance and never NEEDS to touch the fire.** `failure_class_action_count` is structurally 0 on Arm A → `a_sd = 0` → variance-survival math is mathematically impossible (B mean cannot be negative). The analyzer would emit PARTIAL — investigation gate regardless of substrate behavior.

**Amendment:** pivot the primary metric to **`positive_approach_engagement_fraction`** = `fire_pit_warm_self_count / (fire_pit_warm_self_count + fire_pit_observe_count + fire_pit_touch_count + pick_up_fire_pit_count)`. The substrate-transfer claim under LLM-AUT is more accurately framed as "B's substrate-biased preference for the positive-approach affordance is stronger than A's exploration-driven preference" — which this ratio directly measures. **Direction flips: B > A (higher warm_self share is better).** The legacy `per_action_failure_rate` is demoted to the robustness cross-check; divergence between primary and robustness verdicts flags "substrate biases warm_self preference without reducing touch (or vice versa)" and warrants investigation. The original failure-class fields stay in the record schema for descriptive corroborating use. See [docs/plans/exp37_metric_pivot.md](../plans/exp37_metric_pivot.md) for the full decision space (3 paths considered, Path 1 calibration-treadmill rejected, Path 3 narrative-reflex-as-negative-edge deferred to post-1.0). New corroborating metric `time_to_first_warm_self_action` added (descriptive; substrate-transfer predicts B's first warm_self comes earlier than A's exploration-driven discovery).

**Pre-reg amendment 2026-06-05 (SD-shift statistical test swap, user-authorized):** the 2026-06-05 validation smoke (5 Arm A trials with the post-pivot harness at 8 turns each, against the leader's Qwen2.5-14B) showed `positive_approach_engagement_fraction` distribution `[0.0, 0.5, 1.0, 1.0, 1.0]` — non-trivial variance AND a real fire_pit_touch event in trial 4 (`failure_class_action_count = 1`) — but A's distribution piles up at the **ceiling** (3 of 5 trials at 1.0). The empirical percentile band collapses to [0, 1], and the "B mean outside A's band" predicate is **structurally impossible** for any bounded metric that frequently hits its bound (positive_approach is in [0, 1] by construction). The legacy `per_action_failure_rate` has the inverse problem (A piles at 0 → "B < A.p2.5 = 0" impossible). **Amendment:** swap the primary criterion from "B mean OUTSIDE A's empirical percentile band" to **"B mean differs from A's mean by ≥ 1 SD of A's variance in the predicted direction"** — `(B - A) / A.sd ≥ +1` for increase-direction primary; `≤ -1` for decrease-direction robustness. Same statistical shape as the corroborating-metric SD-shift threshold already pre-registered; bounded metrics no longer have a structurally-impossible upper-bound predicate. Zero-SD fallback: pass on directional sign + non-zero shift (matches the I2 corroborating fallback). Isolation rule unchanged (C within A's empirical band). See [docs/plans/exp37_sd_shift.md](../plans/exp37_sd_shift.md) for the validation-smoke evidence + risk analysis (including the standing concern that even SD-shift may not pass if A's natural variance is high enough that 1 SD exceeds the metric's bound; mitigated by accepting the result honestly rather than tuning the threshold post-hoc).

#### Failed action class — Fire pit scenario

- Action class members: `touch(fire_pit)`, `pick_up(fire_pit)` (the latter fails because fire_pit is non-acquirable; both fall into the "physically contact the fire" class).
- Failure trigger: `arms.thermal: 0.6` self_effect exceeds the body's `comfort_band: 0.5` → drive pain emits → PainBus dispatches → NAc records aversive bias against the `fire_pit` substrate cluster. AND/OR the `thermal_contact` reflex fires from narrator description.
- Per-action membership: count 1 for each tool call matching the action class; 0 for non-matching calls.

#### Failed action class — Sharp rock scenario

- Action class members: `pick_up(sharp_rock)`, `touch(sharp_rock)`.
- Failure trigger: `pick_up` reparents sharp_rock to body → its `sharpness: 0.8` sensor joins the body's damage model → `laceration` failure_mode (`sharpness > 0.5 → pain 0.4`) fires. `touch` self_effect writes `arms.pressure: 0.4`.
- Per-action membership: count 1 for each tool call matching the action class; 0 for non-matching calls.

### Corroborating criteria (≥1 of 3 must hit for EARNED)

All three are pre-registered. The gate passes when the primary clears AND at least one corroborating metric shows the predicted shift with ≥1 SD effect on the Arm A baseline. If ALL THREE diverge from the prediction while the primary still hits, that's evidence the primary is a measurement artifact — investigate before claiming EARNED rather than ignore.

1. **Affordance-selection preference shift** (most mechanism-bridging). Among all actions targeting the failure-scenario entity (`fire_pit` or `sharp_rock`), fraction that are `observe` / `examine` (safe) vs `touch` / `pick_up` (failed-class). Predicted: Arm B safe-fraction > Arm A safe-fraction by ≥1 SD.
2. **Tool-class diversity shift.** Count of distinct tool classes used per session. Predicted: Arm B uses fewer distinct failure-class tools (i.e., faster exclusion of dead-ends) than Arm A, by ≥1 SD.
3. **Time-to-safe-steady-state** (narrow interpretation). Number of turns from session start until the agent enters a "safe steady-state" — defined as 3 consecutive turns containing zero failure-class actions. Predicted: Arm B reaches safe steady-state in fewer turns than Arm A, by ≥1 SD.

**Note on time-to-goal scope:** the benchmarking_1_0.md corroborating-metric list named "time-to-goal on success scenarios," which would require adding a separate SUCCESS scenario (e.g., cradle_food hunger satisfaction). To keep scope tight, this pre-registration uses the **narrow form**: turns-to-safe-steady-state within the existing failure scenarios. The broad form (separate success scenario) is a follow-up if 0/3 corroborating metrics hit.

### Isolation arm (Arm C — required for primary)

- **Construction:** Arm C runs the SAME failure scenario as Arm B, but the resumed session loaded from a DIFFERENT prior session — one where the agent encountered cradle_blanket and cradle_button (peaceful entities, no failure-class actions, no NAc aversive bias on fire_pit / sharp_rock).
- **Acceptance:** Arm C's primary-metric mean must fall within Arm A's 95th-percentile band. If Arm C ALSO shows the Arm B delta, the result is "agent gets generally cautious after any prior session" — primary FAILS and the graduation does NOT EARN.
- **Why this matters:** without Arm C, the result is observed-but-not-isolated. The Roy-5b-confound-isolation lesson (exp 36) is the standing reminder: substrate-attributable behavioral claims require an isolation arm whose only difference is the SPECIFIC substrate content, not the presence-of-substrate-at-all.

### Secondary criterion (should pass — couples to behavioral_graduation_candidates Tier 3)

**The cross-session delta is mechanism-attributable. At least one of three ablation arms must shrink Arm B's delta toward Arm A's baseline.**

Ablation arms (Arm B-only — fresh agents have no substrate to ablate, so Arms A and C are not re-run per ablation):

1. **Wire-A annotation off** — `MAXIM_DISABLE_CLUSTER_BIAS_ANNOTATION=1`. Cost: env var only, no code change. Tests whether cluster reward bias substrate-voice in LLM prompts is load-bearing.
2. **Wire 1 variance annotation off** — `MAXIM_DISABLE_VARIANCE_ANNOTATION=1`. Cost: env var only. Tests whether tool-description variance bands carry behavioral weight.
3. **NAc reward bias zeroed** — `MAXIM_NAC_REWARD_BIAS_DISABLED=1`. Cost: new env var to be added in implementation PR. When set, `NAc.distribute_reward` becomes a no-op AND `decay_reward_biases` is skipped AND `get_agent_tool_biases` returns empty. Tests whether the bio-learning substrate is load-bearing vs LLM in-context recall doing the work.

Pass rule: ≥1 ablation shrinks Arm B's primary-metric mean toward Arm A's mean by ≥1 SD (of Arm A baseline).

**If the secondary FAILS** (Arm B delta survives ALL three ablations): the primary may still pass, but the bio-attribution is exposed. 1.0 release notes must retract the "mechanism-driven cross-session learning" framing and reframe as "cross-session memory surfacing produces behavioral change via the LLM's in-context reasoning, not via the bio-substrate's reward learning." Graduation entry downgrades or moves to Dropped per [behavioral_graduation_candidates.md](../plans/behavioral_graduation_candidates.md) lifecycle.

### Tertiary criterion (informational only — NOT gating)

Replication on a second model backend. Local qwen2.5-14b-instruct re-run of Arm A vs Arm B baseline (no ablations). If the delta replicates on local, the result is more robust; if it doesn't, the delta may be Sonnet-prompt-driven (worth flagging but doesn't fail the primary).

## Trial structure

Per scenario (fire_pit, sharp_rock):

| Condition | Arms | Trials | Runs |
|---|---|---|---|
| Baseline | A, B, C | 5 | 15 |
| Wire-A off | B only | 5 | 5 |
| Wire 1 off | B only | 5 | 5 |
| NAc bias zeroed | B only | 5 | 5 |
| **Subtotal per scenario (target runs)** | | | **30** |

× 2 scenarios = **60 target runs**.

Plus Arm C peaceful priors (shared per trial-pair across both scenarios, since the peaceful prior is scenario-agnostic): 5 trials × 1 prior = **+5 prior runs** total. **Grand total: 65 runs on Claude Sonnet.**

Cost projection at Cradle Exp 11's $0.21/run × 65 runs ≈ **$13.65**. (Arm A target runs are reused as the substrate-prior for Arm B and the three B-family ablation arms via `shutil.copytree`; this sharing is what keeps the count near the per-scenario target budget. Arm C requires its own peaceful prior since the failure scenario's substrate is what we're isolating against.)

Wall time: ~10 min/run; 65 runs × 10 min ≈ 11 hours of LLM time, parallelizable in batches of 3-5 concurrent runs depending on rate limits. Probably 2-3 calendar days for execution + ~1-2 weeks for harness implementation and pre-flight smoke tests.

The harness implementation pins the per-arm orchestration + sandbox layout at [scripts/benchmark_cross_session.py](../../scripts/benchmark_cross_session.py); the reproducibility-pin protocol at [docs/experiments/protocols/37_cross_session_graduation_reproduction.md](protocols/37_cross_session_graduation_reproduction.md) §A-E carries the runbook + per-decision rationale (turn-binning operationalization, pair-boundary cost-cap, JSONL append idempotency, FAILURE_CLASS YAML cross-check).

Add tertiary replication on local qwen2.5-14b for Arm A vs Arm B baseline only: 5 trials × 2 arms × 2 scenarios = 20 more runs, ~free per-run cost but slow wall time.

## Falsification conditions

The graduation does NOT EARN if any of the following:

1. **Primary FAIL:** Arm B's mean falls WITHIN Arm A's 95th-percentile band on at least one scenario.
2. **Isolation FAIL:** Arm C's mean falls OUTSIDE Arm A's 95th-percentile band on at least one scenario (i.e., the resumed-from-different-scenario agent ALSO shows the avoidance).
3. **Secondary catastrophic FAIL:** primary passes AND all three ablations leave Arm B's delta intact AND 0/3 corroborating metrics hit. In this case the bio-attribution is unsupported even if "cross-session memory" surfaces behavioral change.

In any failure case: pause; surface to user; the decision is "reframe (drop bio-attribution from 1.0 release notes for cross-session learning) OR fix the underlying issue (substrate-pipeline gap, prompt construction, dose-too-low) OR delay 1.0 ship." Per the kickoff escalation rule: reframe text in 1.0 release notes requires explicit user authorization before landing.

## Graduation paths from this experiment

| Outcome | Tier 1 entry status | 1.0 Benchmark gate | Action |
|---|---|---|---|
| All 3 criteria pass | **EARNED 2026-MM-DD** | PRIMARY PASSES | Update `behavioral_graduation_candidates.md` row 1; flip CLAUDE.md `[behavioral]` tag on the relevant Hippocampus persistence + recall invariants; reference Exp 37 + protocol in `Regression guard:` line |
| Primary pass + Isolation pass + Secondary pass + 0/3 corroborating | **EARNED with footnote** | PRIMARY PASSES | Earn with caveat that corroborating metrics need refinement; the primary repeat-failure-action rate is the load-bearing claim per benchmarking_1_0.md |
| Primary pass + Isolation pass + Secondary FAIL + ≥1 corroborating | **PARTIAL → reframed** | PRIMARY PASSES, secondary FAILS | Surface to user: pull bio-attribution from 1.0 release notes; cross-session memory surfaces ship as engineering feature without bio-claim |
| Primary FAIL or Isolation FAIL | **PARTIAL — investigation gate** | FAILS | Surface to user; root-cause; either fix or reframe; potentially delays 1.0 ship |

## Implementation work — out of pre-reg scope, tracked here for visibility

The pre-registration ships in this PR. The execution work follows as separate PRs:

1. **`MAXIM_NAC_REWARD_BIAS_DISABLED` env var** (~30 LOC src + ~3 unit tests). Touches `decisions/nac.py` only. Same shape as existing `MAXIM_NAC_MIN_CONFIDENCE` env var. Lives in env-var registry section of CLAUDE.md.
2. **Benchmark harness** at `scripts/benchmark_cross_session.py` (~250 LOC). Drives paired-trials bookkeeping; logs per-run JSONL to `~/.maxim/sessions/exp37_<run_id>/` then aggregates into `docs/experiments/data/37_results.jsonl` for analysis.
3. **Fixture preparation.** Define two stable cradle scenario fixtures (fire pit scene, sharp rock scene) with controlled phase progression. Likely re-uses existing cradle arc with explicit scenario-specific entity manifests. Validates fresh-start trials are reproducible across seeds before paired trials run.
4. **Analysis script** at `scripts/analyze_exp37.py` — computes the variance-survival rule + corroborating shifts + ablation deltas, emits a single `docs/experiments/37_cross_session_graduation.md` result-section append.
5. **Execute.** Run the 60 + 20 tertiary trials. Probably batched over 2-3 calendar days.
6. **Two-lens pre-merge review** on the experiment doc + analysis BEFORE updating `behavioral_graduation_candidates.md` status. The Roy-3c-bisect lesson is the standing reminder that mechanism-attribution conclusions need two-reviewer cross-confirmation.
7. **Update `behavioral_graduation_candidates.md`** row 1 → EARNED (or reframed). Update CLAUDE.md tag if Earned.

Estimated wall: 1-2 weeks total for steps 1-5, +1 week for review fold + status updates. Total for graduation: 2-3 weeks from this pre-registration to a green-or-red verdict.

## Reproduction (forward-looking — fill on execution)

Will be drafted at `docs/experiments/protocols/37_cross_session_graduation_reproduction.md` as part of step 2 above. The protocol pre-registers the seed range, model version, prompt version, and encoder version so future re-runs (on the minor-version heartbeat trigger per [behavioral_graduation_candidates.md](../plans/behavioral_graduation_candidates.md)) reproduce this baseline exactly.

## Results — 2026-06-06 Qwen14B fire

**Verdict: PARTIAL — investigation gate.** Full analyzer output at [data/37_results.md](data/37_results.md); per-trial JSONL at [data/37_results.jsonl](data/37_results.jsonl).

**Run envelope:** 60 of 60 expected records (5 trials × 2 scenarios × 6 arms = 60 ✓). Fire ran on the leader Mac Mini (post-PR #339 harness-on-leader structural fix) using local Qwen2.5-14B-Instruct, started 2026-06-05 18:49, completed 2026-06-06 08:58, ~14 hours wall, $0 cost (local inference).

### Headline finding — the LLM-AUT noise floor masks the substrate-transfer signal

Under LLM-AUT Qwen2.5-14B on the cradle scenario at N=5 paired trials, the behavioral substrate-transfer claim is **not statistically detectable** through the pre-registered metrics. Specifically on fire_pit (sharp_rock collapsed to degenerate zero — see "scenario asymmetry" below):

| | Arm A | Arm B | Δ |
|---|---|---|---|
| `positive_approach_engagement_fraction` mean | 0.5333 | 0.5167 | −0.0167 (−0.06 SD) |
| `positive_approach_engagement_fraction` empirical range | [0.333, 0.96] | (5 values spanning similar range) | — |
| `fire_approach_action_count` mean | 1.60 | 1.40 | −0.20 |
| Isolation (Arm C within A's band) | — | — | **PASS** (C=0.617 inside [0.333, 0.96]) |

The pre-registered SD-shift test (per [exp37_sd_shift.md](../plans/exp37_sd_shift.md)) requires `(B − A) / A.sd ≥ +1.0`. The measured delta is −0.06 SD (slightly *below* A's mean) — not within rounding error of the threshold; legitimately null.

### Why the signal isn't there: empirical evidence of LLM prior dominance

The ablation pattern is the diagnostic signature. The pre-reg's secondary criterion expected that turning off bio-mechanisms one at a time would *shrink* Arm B's delta toward Arm A (proving the bio-mechanisms drive the B-vs-A effect). Instead:

| Ablation arm | Removes from B | B mean → Ablated mean | Direction |
|---|---|---|---|
| `B-wire-a-off` | Wire-A annotation (substrate "voice" in prompt) | 0.5167 → 0.5667 | Overshoots past A (+0.0333), wrong direction |
| `B-wire-1-off` | Wire-1 annotation (variance in tool desc) | 0.5167 → 0.4567 | Drifts further from A, wrong direction |
| `B-nac-bias-off` | NAc reward bias (preference signal) | 0.5167 → 0.6000 | Overshoots past A (+0.0667), wrong direction |

If the substrate were materially driving B's behavior, ablating any of these mechanisms should pull B back toward A's baseline. Instead, ablations push B in roughly arbitrary directions and 2 of 3 *overshoot past* A — the classic signature of "the dominant decision driver is something else (the LLM's pretraining) and the bio-mechanisms are adding small, sometimes-helpful sometimes-harmful perturbations on top."

This matches the qualitative signal from the 2026-06-05 cradle smoke: the LLM-AUT reasoned out loud about thermal homeostasis ("if standing closer to the fire will help me feel warmer") using **pretrained world knowledge**, not substrate retrieval. The substrate was carrying memory and surfacing it through prompt context (Wire-A, Wire-1, NAc bias annotations), but the LLM's pretraining already knows what infants do near fires. Substrate signal is real but small relative to LLM prior dominance.

### What this experiment establishes and doesn't

| Claim | Status |
|---|---|
| Substrate carries memory across sessions (Hippocampus persistence + RECALL) | **EARNED** via [Exp 10](10_cross_session_enrichment.md) — 3 memories/turn on resume; unchanged by this fire |
| Substrate contributes to action selection through prompt-context channels (Wire-A, Wire-1, NAc bias) | **EARNED** via PR #266 (Wire-A) + PR #257 (Wire-1) + the bias plumbing audit; mechanism integrity unchanged by this fire |
| Substrate **drives** action selection strongly enough to produce a measurable behavioral delta under LLM-AUT | **PARTIAL — investigation gate** via this fire; the LLM-AUT noise floor (Qwen14B priors + cradle scenario sparsity + N=5) masks any substrate-attributable behavioral shift at the pre-registered detection threshold |
| Substrate-driven action selection independent of LLM (Exp 38 / Oasis) | Out of scope for 1.0; the principled future test of the strong claim |

### Scenario asymmetry — sharp_rock collapsed to zero

Every sharp_rock arm × trial recorded `positive_approach_engagement_fraction = 0`, `fire_pit_engagement_count = 0`, `failure_class_action_count = 0`. The LLM-AUT never engaged with sharp_rock at all across 25 sharp_rock sessions (5 trials × 5 of 6 arms — C is shared peaceful prior). This is the asymmetric-design concern surfaced in [exp37_metric_pivot.md](../plans/exp37_metric_pivot.md) realized in practice: sharp_rock has no positive-approach affordance (no analog to `fire_pit_warm_self`), and the LLM-AUT's pretrained "sharp rocks are dangerous" priors prevent engagement before any substrate signal can apply. The scenario contributes no information to the verdict; fire_pit alone carries the substantive evidence.

### Honest scope of what shipped

This fire is the locked 1.0 evidence for the cross-session behavioral-delta claim. The verdict is empirically anchored. The metric pivot ([exp37_metric_pivot.md](../plans/exp37_metric_pivot.md), 2026-06-XX) and SD-shift swap ([exp37_sd_shift.md](../plans/exp37_sd_shift.md), 2026-06-05) reflect iterative empirical learning from cradle smoke evidence, anchored to specific measured failure modes. The 2026-06-05 pre-implementation Qwen-validation smoke (5 Arm A trials) already showed Arm A's positive_approach distribution would be wide; the n=5 fire confirmed this at the full design completion.

The four pre-reg amendments (2026-05-31 per-action swap, 2026-06-XX positive-approach pivot, 2026-06-05 SD-shift, and this results doc's interpretation) are documented across the cited plan files. Reviewers can fairly ask "why didn't you anticipate the LLM prior dominance?" Honest answer: the original pre-reg implicitly assumed substrate signal > LLM prior dominance; the iterative empirical work between PRs #299 (graduation pre-registration) and this results doc surfaced the opposite ratio. That's what pre-registered experiments are for.

### Path forward

- **1.0 ship:** Tier 1 row 1 in [behavioral_graduation_candidates.md](../plans/behavioral_graduation_candidates.md) flips to a split claim — memory-persistence component goes EARNED (Exp 10 unchanged), behavioral-delta component goes PARTIAL with this fire as the locked evidence and explicit deferral of the strong claim to Exp 38 substrate-primary work. Bio-framing in 1.0 release notes pulls back from "substrate drives behavior" to "substrate provides cross-session infrastructure that LLM-driven agents use." This matches the [framing strategy](../../CLAUDE.md) bio-inspired-LLM-harness positioning that was already the operative framing per the 2026-06-04 / 2026-06-05 discussions.
- **Post-1.0 (no specific commitment):** Exp 38 substrate-primary measurement — remove the LLM noise floor, measure substrate-driven action selection directly. Cradle scenario enrichment (more affordances, more entities) is a sibling improvement that may help LLM-AUT measurement too but isn't on the 1.0 critical path. N=10 re-fire or Sonnet replication are possible but the marginal information from amending pre-reg a fifth time is unfavorable.

## Results — 2026-06-08 Qwen32B fire (cross-model scale-axis follow-up)

**Verdict: PARTIAL — investigation gate** (same overall label as Qwen14B, but the underlying evidence is qualitatively different). Full analyzer output at [data/37_results_qwen32b.md](data/37_results_qwen32b.md); per-trial JSONL at [data/37_results_qwen32b.jsonl](data/37_results_qwen32b.jsonl).

**Run envelope:** 60 of 60 expected records (5 trials × 2 scenarios × 6 arms). Fire ran on the leader Mac Mini using local Qwen2.5-32B-Instruct (Q4_K_M, served via the same llama-cpp-server infrastructure as the Qwen14B fire), started 2026-06-07 22:42, completed 2026-06-09 04:52 — ~30 hours wall, $0 cost. This is the first row of the [cross-model characterization plan](../plans/exp37_cross_model_characterization.md) — exploratory scale-axis evidence, NOT a 5th pre-reg amendment.

### Headline finding — substrate-transfer signal IS detectable at 32B scale

The primary metric `positive_approach_engagement_fraction` on fire_pit shifts measurably in the predicted direction:

| | Qwen14B (2026-06-06) | Qwen32B (2026-06-08) |
|---|---|---|
| Arm A mean | 0.533 | 0.420 |
| Arm B mean | 0.517 | **0.800** |
| Δ in SD units | −0.06 SD | **+1.43 SD** ← passes the +1.0 PASS threshold |
| Primary verdict | FAIL | **PASS** |
| Robustness (legacy per-action failure rate) | FAIL | **PASS** |
| Corroborating hits | 0/4 | **2/4 PASS** |

Two of the four pre-registered corroborating metrics PASS on Qwen32B fire_pit:

- **Affordance-preference safe-fraction**: A = 0.74 ± 0.18, B = 0.97 → **+1.22 SD** increase. Arm B picks the safe affordance 97% of the time vs A's 74%.
- **Tool-class diversity** (decrease): A = 8.0 ± 1.2, B = 6.6 → **−1.14 SD** decrease. Arm B explores fewer dead-end tools, more focused.

The descriptive `fire_approach_action_count` also flips direction relative to Qwen14B: A = 1.60, B = **3.00**, Δ = +1.40 in the predicted direction (Qwen14B had Δ = −0.20, wrong direction).

**This is real evidence that substrate carries cross-session memory AND that the carried memory shifts behavior measurably at sufficient model scale.** The 14B → 32B scaling axis produced a qualitative behavioral change.

### Two reasons the overall verdict stays PARTIAL

**1. Secondary criterion FAILS (0/3 ablations shrink B's delta).**

| Ablation | A mean | B mean | Ablated mean | Shrinkage (SD units) | Verdict |
|---|---|---|---|---|---|
| Wire-A annotation off | 0.420 | 0.800 | 0.650 | +0.56 | FAIL (suggestive, not significant) |
| Wire-1 variance annotation off | 0.420 | 0.800 | 0.817 | −0.06 | FAIL (no change) |
| NAc reward bias zeroed | 0.420 | 0.800 | 0.793 | +0.03 | FAIL (no change) |

Only Wire-A ablation moves the needle (+0.56 SD shrinkage toward A, but below the +1.0 PASS threshold). Wire-1 and NAc-bias ablations produce no measurable change in B's mean. **The substrate IS doing something at 32B, but the specific bio-mechanism attribution we hypothesized in the pre-reg isn't cleanly supported.** This is the same pattern as Qwen14B — the substrate-transfer effect doesn't map to any single bio-mechanism we can ablate.

**2. Arm C "general caution" confound triggered.**

Arm C (peaceful-prior session, supposed to show A's baseline if substrate transfer is fire-specific) mean = 0.667 on fire_pit — OUTSIDE Arm A's empirical band [0.033, 0.660]. C ≈ B, not C ≈ A. The substrate-derived preference for warm_self **generalizes across priors**, not just fire-failure priors. The agent gets "more preference-driven" from ANY prior session, regardless of substrate content.

This is the isolation-arm confound the pre-reg specifically guards against: "if C falls outside A's band, the B-vs-A delta is contaminated by general-caution rather than substrate-specific transfer." The shift in B is real, but its specificity to the fire-failure substrate isn't supported.

### Sharp_rock — degenerate again

All sharp_rock arms produced zero engagement (same as Qwen14B). The scenario contributes no information to the verdict at either model scale. The asymmetric-design concern from [exp37_metric_pivot.md](../plans/exp37_metric_pivot.md) is realized at both scales now; fire_pit alone carries the substantive evidence.

### Honest interpretation — what changed vs Qwen14B and what 1.0 looks like

The Qwen14B-vs-Qwen32B scale-axis comparison reshapes the 1.0 narrative:

- **Qwen14B headline (2026-06-06):** "LLM priors empirically dominate substrate signal at typical scales. Bio-framing pulled to 'cross-session infrastructure.' Strong substrate-drives-behavior claim deferred to Exp 38."
- **Qwen32B headline (2026-06-08):** "Substrate-transfer signal IS detectable at 32B scale (+1.43 SD primary, 2/4 corroborating PASS, predicted-direction shift in descriptive). Specific bio-mechanism attribution (Wire-A / Wire-1 / NAc-bias) is NOT cleanly supported — ablations don't shrink the delta. The effect appears to generalize across priors (Arm C confound triggered), suggesting the substrate signal is broader-grained than scenario-specific."

The combined cross-scale story is genuinely informative:

1. **Substrate carries cross-session memory at all scales tested** — unchanged claim, Exp 10 + both Qwen fires.
2. **The carried memory measurably shifts behavior at 32B but not at 14B** — scale-dependent. The LLM-prior-dominance interpretation from the Qwen14B fire was too strong; it applies to 14B specifically, not to LLM-AUT broadly. (Consistent with the broader observation that smaller models have stronger priors that dominate context, and larger models can leverage context-derived signal more thoughtfully.)
3. **The mechanism by which substrate shifts behavior isn't attributable to specific bio-channels** — ablations on Wire-A, Wire-1, or NAc reward bias don't cleanly break the effect. Either the substrate effect is multi-channel (each channel contributes a little, no single ablation is decisive), or it's mediated by something downstream we're not measuring (e.g., the substrate-derived prompt context as a whole changes the LLM's reasoning trajectory in ways no single annotation captures).
4. **The substrate effect generalizes across priors** — Arm C carrying B-like behavior suggests "agent has a prior session, regardless of content" produces the behavioral shift, not "agent has a fire-failure prior specifically." This is a weaker claim than scenario-specific learning but still a real cross-session-memory-shapes-behavior finding.

### Path forward (updated 2026-06-08)

- **1.0 framing:** Tier 1 row 1b in [behavioral_graduation_candidates.md](../plans/behavioral_graduation_candidates.md) stays PARTIAL but the framing nuances. New framing: "substrate carries cross-session memory (EARNED via Exp 10), and the carried memory measurably shifts LLM-AUT behavior at ≥32B scale (this fire), but the specific bio-mechanism attribution isn't cleanly supported and the effect appears to generalize across priors. The strong 'substrate drives action selection via specific bio-mechanisms' claim stays deferred to Exp 38." This is a stronger 1.0 evidence base than the Qwen14B-alone story.
- **Cross-model exploratory continuation:** Mistral24B fire (running 2026-06-09) tests the family-axis at similar scale. Cloud LLM fires (Sonnet, GPT-4o, DeepSeek) are blocked behind the prompt-caching architecture work ([prompt_caching_for_cloud_backends.md](../plans/prompt_caching_for_cloud_backends.md)) or a tier-2 upgrade. Each adds incrementally to the cross-model characterization without changing the row 1b graduation status.
- **Post-1.0 work that this fire empirically motivates:** (a) Exp 38 substrate-primary measurement remains the principled test of the strong claim; (b) understanding WHY ablations don't shrink the delta is a substantive research question — could be multi-channel mediation, could be substrate-context-as-a-whole effects on LLM reasoning that no single annotation captures, could be that the LLM's pretraining handles most of the "what to do near fire" question and substrate channels are mild perturbations on top.

## Results — 2026-06-11 Mistral24B fire (cross-model family-axis follow-up)

**Verdict: PARTIAL — investigation gate** (null on primary; ceiling effect). Full analyzer output at [data/37_results_mistral24b.md](data/37_results_mistral24b.md); per-trial JSONL at [data/37_results_mistral24b.jsonl](data/37_results_mistral24b.jsonl). **The cross-cutting interpretation lives in the dedicated [37_cross_model_results.md](37_cross_model_results.md) doc — this section records the per-fire verdict only.**

**Run envelope:** 60 of 60 records. Fire ran on the leader Mac Mini using local Mistral-Small-24B-Instruct-2501 (Q4_K_M), started 2026-06-10 16:32 (re-fired after the harness systemic-failure-guard fix PR #364 — the first launch tripped a false-positive abort because the guard used the cloud-specific `total_input_tokens==0` signal), completed 2026-06-11 15:51, ~23 hours wall, $0 cost. Third row of the [cross-model characterization plan](../plans/exp37_cross_model_characterization.md); exploratory, not a pre-reg amendment.

**Headline — ceiling effect:** Arm A (fresh agent, no resumed substrate) solves the cradle fire task *perfectly* — A mean = **1.000, SD = 0.000** across all 5 trials (warm_self every time, zero touches, reaches warming at action index 0.4). Arm B (resumed, has substrate) = 0.600. The B-vs-A delta is **negative** (−0.40), and the primary SD-shift test fails (zero-SD fallback, wrong direction). There is no headroom for substrate to demonstrate improvement when the fresh-agent priors already produce optimal behavior.

**Per-fire verdict only:**
- Primary FAIL (B < A; ceiling)
- Corroborating 0/4 (`time-to-first-warm-self` actually shows A reaching warming far faster than B — A=0.4 vs B=2.6 — but flagged FAIL because it's wrong-direction for the substrate-helps prediction)
- Secondary FAIL 0/3 (structurally unmeasurable — no positive delta to attribute)
- Arm C confound flag fires, but as a statistical artifact of A's zero variance (any non-perfect arm is "outside" a [1.000, 1.000] band); C=0.400 is the WORST arm, which is the predicted fire-specific-learning pattern, not upward cross-prior generalization
- sharp_rock degenerate (third model in a row — now confirmed structurally broken for cross-model use, not Qwen-specific)

**Why this matters (full interpretation in [37_cross_model_results.md](37_cross_model_results.md)):** Mistral24B (24B) hits a prior-saturation ceiling that Qwen32B (32B) does not — a smaller model with *stronger* cradle-task priors. Combined with Qwen14B (priors too weak) and Qwen32B (sweet spot), the three fires form a **Goldilocks zone** story: substrate-transfer signal is detectable only when the base LLM's priors leave headroom between first-encounter and optimal behavior, and that headroom is governed by training method at least as much as parameter count. This reframes the cross-model question and *strengthens* the case for Exp 38 substrate-primary measurement (remove the LLM-prior confound entirely).

## Cross-references

- [docs/plans/benchmarking_1_0.md](../plans/benchmarking_1_0.md) — 1.0 benchmarking gate (this is its primary experiment).
- [docs/plans/behavioral_graduation_candidates.md](../plans/behavioral_graduation_candidates.md) — Tier 1 entry row 1 (this is its EARNED-or-reframe gate).
- [docs/plans/v1_refinement.md](../plans/v1_refinement.md) §1.6 — sequenced 1.0 plan placing this experiment in Phase 2.
- [docs/experiments/10_cross_session_enrichment.md](10_cross_session_enrichment.md) — the PARTIAL prior evidence this experiment converts to EARNED.
- [docs/experiments/11_cradle_sensorimotor_poc.md](11_cradle_sensorimotor_poc.md) — Cradle infrastructure validated; substrate for this experiment.
- [docs/experiments/36_roy_5b_confound_isolation.md](36_roy_5b_confound_isolation.md) — confound-isolation discipline; Arm C exists to honor this lesson.
- [feedback_invariant_two_tier_tracking.md](../../.claude/projects/-Users-dennyschaedig-Scripts-Maxim/memory/feedback_invariant_two_tier_tracking.md) — graduation tag discipline.
- [feedback_confound_isolation_discipline.md](../../.claude/projects/-Users-dennyschaedig-Scripts-Maxim/memory/feedback_confound_isolation_discipline.md) — confound-isolation pre-registration.
- [project_research_claim_non_negotiables.md](../../.claude/projects/-Users-dennyschaedig-Scripts-Maxim/memory/project_research_claim_non_negotiables.md) — the load-bearing 1.0 claim.
- [project_v1_0_sequenced_plan.md](../../.claude/projects/-Users-dennyschaedig-Scripts-Maxim/memory/project_v1_0_sequenced_plan.md) — Phase 2 graduation cadence.
- [kickoff_1_0_graduation_cross_session.md](../../.claude/projects/-Users-dennyschaedig-Scripts-Maxim/memory/kickoff_1_0_graduation_cross_session.md) — authorization + user-decision audit trail.