Research log Small Model Experimentation
GitHub

Qwen3.5-4B Depth-Wall Anatomy

It runs any recipe but can't reverse-engineer one

The one idea you need

Picture a cook who follows any written recipe flawlessly. But set a finished dish before that cook and they cannot deduce which steps produced it, nor mentally re-cook a guessed recipe to check it against the plate. This model executes; it cannot infer.

The question

When a small model fails at chaining several data transformations together, is the hard part running the long chain of steps, or figuring out which steps produced the result?

What we found

It's figuring out the steps. Handed the exact sequence of operations, this 4-billion-parameter model writes correct code almost every time, even four steps deep, with zero execution deficit. Left to infer that sequence from before-and-after examples, it solves almost nothing past two steps, spotting each added operation only about twice as well as guessing among 63 candidates.

Why it matters

Don't fine-tune a small model to discover multi-step transformations from examples, its weakest skill. Let cheap external tools enumerate and propose candidate pipelines, and use the model for what it does near-perfectly: turning a stated plan into working code.

Solve rate: told the steps versus left to guess them~0% → 90-100%four-step pipelines, guessed from examples vs stated outright
How fast the odds of solving collapse per added stepabout 30x worseeach composed operation, regardless of operation type
Power to identify each added step beyond the firstabout 2x chancevs random guessing among 63 candidate operations
Recognizing a single operation on its own88%but it cannot chain these recognitions together
On this page
  1. Results at a glance
  2. Overview
  3. Report
    1. Summary
    2. Research Program Fit
    3. Method
    4. Results
    5. Controls
    6. Oracle Versus Deployable Evidence
    7. Interpretation
    8. Next Experiments
    9. Artifact Manifest
  4. Experiment log
  5. Figures
  6. Reproduce
  7. Related

Results at a glance 4

Told the plan the model wins; asked to guess it, it fails

How to read

Six task types along the bottom (chain length two to four, each with clean or information-destroying steps); bar height is share of tasks solved. Three bars each: from bare examples, from the stated plan, and with intermediate states shown. Higher is better.

0%25%50%75%100%depth 2, clean opsdepth 2, clean ops5%100%30%depth 2, lossy opsdepth 2, lossy ops10%100%15%depth 3, clean opsdepth 3, clean ops0%100%10%depth 3, lossy opsdepth 3, lossy ops0%100%0%depth 4, clean opsdepth 4, clean ops0%100%5%depth 4, lossy opsdepth 4, lossy ops0%90%0%

Takeaway → The stated-plan bars stay pinned near the top through chain length four, while both guessing bars sit on the floor. The wall is finding the plan, not running it.

Data table
task cell (composition depth × destructive-op count)bare I/O (identify + execute)plan given (execute only)intermediates shown
depth 2, clean ops5%100%30%
depth 2, lossy ops10%100%15%
depth 3, clean ops0%100%10%
depth 3, lossy ops0%100%0%
depth 4, clean ops0%100%5%
depth 4, lossy ops0%90%0%

Numbers from experiments/qwen35_4b_depth_wall_anatomy/data/discriminator_records.jsonl

Technical framing

Told the pipeline, the 4B executes near-perfectly; left to identify it, it fails — The compositional wall is 100% identification, 0% execution: plan-given stays 0.90-1.00 through depth 4; seeing intermediates barely helps.

Solve rate crashes after two chained steps, whatever the step type

How to read

Bottom axis is chain length (one to five steps); height is share of tasks solved. Four lines mark how many information-destroying steps are present, from zero to three. Upper-left is better.

0%25%50%75%100%123450 destructive ops1 destructive op2 destructive ops3 destructive ops

Takeaway → Every line falls off a cliff between one step and two and hits zero by three, overlapping regardless of step type, so depth alone kills it, walling at length two.

Data table
verified composition depth (ops)0 destructive ops1 destructive op2 destructive ops3 destructive ops
188%72%
216%4%8%
30%4%0%0%
40%0%0%0%
50%0%0%0%

Numbers from experiments/qwen35_4b_depth_wall_anatomy/runs/grid_analysis.json

Technical framing

Solve rate collapses ~30x in odds per composed op, regardless of op type — On collapse-free tasks the wall is at depth 2, not 3, and information-destroying ops barely matter — refuting the destruction hypothesis.

Even pre-cut steps and yes-or-no checks fade with depth

How to read

Six task types along the bottom (chain length two to four, clean or information-destroying steps). One bar per type is solving when steps are pre-separated; the other is accuracy telling the true pipeline from a decoy. Higher is better; half is a coin-flip.

0%25%50%75%100%depth 2, clean opsdepth 2, clean ops50%80%depth 2, lossy opsdepth 2, lossy ops15%70%depth 3, clean opsdepth 3, clean ops25%75%depth 3, lossy opsdepth 3, lossy ops5%75%depth 4, clean opsdepth 4, clean ops0%85%depth 4, lossy opsdepth 4, lossy ops0%50%

Takeaway → Pre-separated solving slides from half toward zero as chains lengthen, and true-versus-decoy accuracy drops to a coin-flip at the deepest lossy cell. Even isolated pieces and simple checks break down.

Data table
task cell (composition depth × destructive-op count)segmented steps (pass@4)2AFC pipeline verification (accuracy)
depth 2, clean ops50%80%
depth 2, lossy ops15%70%
depth 3, clean ops25%75%
depth 3, lossy ops5%75%
depth 4, clean ops0%85%
depth 4, lossy ops0%50%

Numbers from report table (reports/report.md, Phase 3 probes)

Technical framing

Even pre-segmented steps and yes/no verification decay with depth — The deficit is multi-step mental simulation: isolated depth-1 identification runs at 0.88, yet composed contexts drag it down and verification nears chance (0.5).

The old three-step wins were secretly shallower tasks

How to read

Two task groups along the bottom: tasks labeled three-steps-deep that secretly collapse to something shallower, versus genuinely three-step tasks. Bar height is how often an external split-and-search method solved them. Higher is better.

0%25%50%75%100%collapsed 'depth-3' tasks (16/16)collapsed 'depth-3' tasks (16/16)100%true depth-3 tasks (4/24)true depth-3 tasks (4/24)16.7%

Takeaway → The search cleared every secretly-shallow task but only one in six genuinely deep ones, so nearly all the celebrated three-step success was a measurement artifact.

Data table
task typedecompose+interpreter solve rate
collapsed 'depth-3' tasks (16/16)100%
true depth-3 tasks (4/24)16.7%

Numbers from report table (reports/report.md, Phase 0)

Technical framing

The old depth-3 wall was mismeasured: decompose search only worked on collapsed tasks — 40% of nominal depth-3 tasks were behaviorally shallower; every recorded monolithic depth-3 solve rode on them — true depth-3 monolithic solves were 0.

In the author’s words from the Overview · “Results”

Three findings, each pre-registered: The wall was mismeasured (Phase 0): 40% of nominal depth-3 tasks are shallower-equivalent; true monolithic depth-3 was always 0; C12 retro-corrected. The destruction hypothesis died; a steeper law replaced it (Phase 1, P1/P2 refuted): on verified novel compositions, solve odds fall ~30× per composed op regardless of op type — identification beyond the first primitive runs at ~2× better than chance (63-op space), walling at depth 2. The wall is 100% identification, 0% execution (Phase 2, P7 strongest form): plan-given → 0.90–1.00 through depth 4; intermediates-shown barely helps (≤0.30) — the model can't segment chains into the depth-1 identifications it does at 0.88. … Read the full result →

Overview

Research Program

  • Program: structured_execution_and_compilers. Mission: understand the fixed Qwen3.5-4B's compositional frontier — insight-first: laws and mechanisms, not another lever.
  • Attacks the arc's center of mass: every C11/C12 headline routes through "the depth-3 wall." This experiment decomposes that wall into measurable parts, with pre-registered predictions (reports/prereg.md) logged before each phase ran.

Question

What actually sets the compositional frontier of the fixed 4B on the contamination-free substrate? Candidate axes, cleanly separable:

  1. Substrate artifact — nominal depth-d compositions with behavioral min-depth < d (sort_asc∘reverse ≡ sort_desc). Phase 0 audits ALL existing M1/M2/C12 tasks by exact BFS.
  2. Serial depth — composition length per se (the implicit C11/C12 story).
  3. Information destruction — ops whose intermediates are unrecoverable from visible I/O (filters/dedup/mod/abs/...) making the composition un-invertible / unidentifiable.
  4. Identification vs execution — can the model execute a deep pipeline it is told, and does seeing intermediates rescue it (Phase 2 discriminator: bare vs plan-given vs intermediates-shown)?

Phase 0 results (CPU audit of existing data — both predictions confirmed)

  • P0a: 40% of nominal depth-3 tasks (M1 and C12 sets) collapse to behavioral min-depth ≤2.
  • P0b (strong form): monolithic true-depth-3 solves = 0 across the entire corpus; every recorded depth-3 solve rode on collapsed tasks. C12's decompose search: 16/16 collapsed vs 4/24 (17%) true. → C12's claim + report retro-corrected (commit f6c2ca7).
  • Destruction signal survives the collapse control: true depth-2, k=0 → 6/8 solved; k≥1 → 0/8.

Design (Phases 1-2)

  • Verified factorial grid: 17 cells (d 1–5 × k 0–3), n=25/cell, generator rejects collapsed compositions (exact BFS to depth min(d−1,3)). Monolithic thinking greedy@1 + pass@6, hidden-graded; per-candidate visible/hidden (false-pass slice); thinking length; first-op letter-logit rank (planner).
  • Discriminator on the same tasks (d {2,3,4} × k {0,2}): bare vs plan-given vs intermediates-shown.
  • Predictions P1–P9 in reports/prereg.md, all logged in advance.

Run

../../.venv/bin/python scripts/min_depth_audit.py                           # Phase 0 (CPU)
../../.venv/bin/python scripts/run_grid.py --n-per-cell 25 --k-samples 6    # Phase 1
../../.venv/bin/python scripts/run_discriminator.py --per-cell 20           # Phase 2
../../.venv/bin/python analysis/analyze_grid.py                             # analysis vs predictions

Results

Full write-up in reports/report.md. Three findings, each pre-registered:

  1. The wall was mismeasured (Phase 0): 40% of nominal depth-3 tasks are shallower-equivalent; true monolithic depth-3 was always 0; C12 retro-corrected.
  2. The destruction hypothesis died; a steeper law replaced it (Phase 1, P1/P2 refuted): on verified novel compositions, solve odds fall ~30× per composed op regardless of op type — identification beyond the first primitive runs at ~2× better than chance (63-op space), walling at depth 2.
  3. The wall is 100% identification, 0% execution (Phase 2, P7 strongest form): plan-given → 0.90–1.00 through depth 4; intermediates-shown barely helps (≤0.30) — the model can't segment chains into the depth-1 identifications it does at 0.88.

One mechanism explains the arc: the fixed 4B is a reliable compiler starved of hypothesis search — why decompose+interpreter search works, why its guidance was only ~2× over brute force (same constant!), why banking is coverage-bounded, why execution feedback failed, why verify ≫ generate. Division of labor: tools identify, the model compiles.

Report

Rendered from reports/report.md

Summary

Insight-first anatomy of the fixed 4B's compositional wall (the "depth-3 frontier" every C11/C12 headline routes through), with pre-registered predictions (reports/prereg.md) logged before each phase. (Phase 0) A behavioral min-depth audit of ALL existing substrate tasks found the wall was mismeasured: 40% of nominal depth-3 tasks are shallower-equivalent, the frozen model has never solved a true full-depth-3 task monolithically, and C12's decompose search really solved 17% of true depth-3 (not 0.40) — retro-corrections landed in C12 (commit f6c2ca7). (Phase 1) On the verified factorial grid the pre-registered information-destruction hypothesis died (k=0 deep compositions are NOT solvable; op type barely matters) and a steeper law replaced it: solve odds fall ~30× per composed op — against a 63-op space, identification beyond the first primitive runs at only ~2× better than chance, walling at depth 2. (Phase 2, decisive) A three-condition discriminator shows the wall is 100% identification, 0% execution: told the pipeline, the model executes at 0.90–1.00 through depth 4; shown every intermediate state, it still cannot segment chains into the depth-1 identifications it performs at 0.88. One mechanism — the fixed 4B is a reliable compiler starved of hypothesis search — quantitatively retro-explains C10C12 (decompose search works, its ~2× guidance efficiency, banking's coverage bound, feedback's failure, verify≫generate).

Research Program Fit

structured_execution_and_compilers + the insight-generation goal: convert the arc's central qualitative story ("the depth wall") into measured structure — what the wall is made of (artifact / serial depth / information destruction), and where it lives (hypothesis identification vs execution).

Method

  • Phase 0 (CPU): exact BFS behavioral min-depth over all primitive pipelines vs ALL 18 examples, for every existing M1/M2/C12 task; restratify recorded solves. Predictions P0a/P0b.
  • Phase 1 (verified factorial grid): 17 cells (depth d ∈ 1–5 × destructive-ops k ∈ 0–3), n=25/cell, 425 tasks, generator rejects collapsed compositions (BFS to depth min(d−1,3); d=5 may retain d4-equivalents — caveat). Destructive set (fixed in prereg): ops whose intermediates are unrecoverable from I/O (filters, dedup/unique, take/drop, chunk_sum, mod, abs, running_max). Monolithic thinking greedy@1 + pass@6 (hidden-graded), per-candidate visible/hidden pass, thinking length, and the first-op letter-logit rank (planner slice). Predictions P1–P6, P9.
  • Phase 2 (discriminator): same verified tasks (d {2,3,4} × k {0,2}), three conditions — bare I/O (identify + execute), plan-given (pipeline stated; execution only), intermediates-shown (state chains visible; observability restored). Predictions P7–P8.

Results

Phase 0 — the wall was mismeasured (P0a, P0b confirmed)

findingvalue
nominal d3 tasks that are behaviorally ≤ d240% (M1 6/15; C12 16/40; M2 25%)
monolithic TRUE depth-3 solves, entire corpus0 (all recorded d3 solves were collapsed tasks)
C12 decompose on collapsed vs true d316/16 vs 4/24 (17%)
destruction signal after collapse control (M2 true-d2)k=0: 6/8 solved; k≥1: 0/8

Phase 1 — verified factorial grid: the destruction hypothesis dies, a steeper law appears

pass@6 (n=25/cell, hidden-graded, verified-depth tasks):

d\k0123
10.880.72
20.160.040.08
30.000.040.000.00
40.000.000.000.00
50.000.000.000.00
  • P1 REFUTED: transparent-only (k=0) compositions do NOT stay solvable at depth ≥3 (0.00 at d3–d5; predicted ≥0.4). P2 REFUTED: at fixed depth, destruction count barely matters (logistic coefficients per transparent vs destructive op: −3.24 vs −3.87 — statistically indistinguishable; depth-only AIC 112.7 vs two-parameter 111.9). The destruction signal that motivated the hypothesis (M2 true-d2 k=0: 6/8) was primitive-mix luck in an n=8 cell — the controlled n=25 grid eliminates it.
  • What replaces it is a clean quantitative law: the odds of solving fall ~30× per composed op (logistic slope ≈ −3.5/op), uniform across op types. Anchored at d1 (0.88/0.72), this predicts d2 ≈ 0.17 and d3 ≈ 0.008 — matching the observed 0.16 and ~0.01. Since blind guessing over the 63-op vocabulary would cost ~63× per op, the model's identification power beyond the first primitive is only ~2× better than chance. On genuinely novel compositions the wall is at depth 2, not 3.
  • P5: false-passes remain ~nil on verified tasks (3/156 visible-passers hidden-fail) — visible-test selection stays lossless; the C2 wall stays absent on this substrate.
  • P9 partially refuted: first-op letter-logit rank is poor everywhere (median 7–13 of 23) with no clear destruction effect — the planner cannot identify the first op of any genuinely novel composition much better than chance, consistent with the ~2×-over-chance law.
  • P6 (exploratory): thinking length is budget-saturated (mean 434→492 tokens from d1→d5 against the 512 cap; solved vs failed identical at matched depth) — uninformative at this budget; a budget sweep would be needed to test the serial-workspace account.

Phase 2 — identification vs execution: the wall is 100% identification

pass@4 by cell (n=20/cell, same verified tasks, three prompting conditions):

cellbare I/Oplan-givenintermediates-shown
d2k00.051.000.30
d2k20.101.000.15
d3k00.001.000.10
d3k20.001.000.00
d4k00.001.000.05
d4k20.000.900.00
  • P7 CONFIRMED (strongest form): told the pipeline, the model executes essentially perfectly at every depth and destruction level. The compositional wall contains zero execution deficit.
  • P8 REFUTED: full observability of intermediate states barely rescues identification (≤0.30). Each adjacent state-hop is a depth-1 identification the model does at 0.88 — but it cannot segment a shown chain into those solvable pieces and re-compose. (Caveat: chains add prompt clutter; a segmented-presentation follow-up quantifies this.)
  • Convergent constant: the grid's ~2×-over-chance-per-op identification law independently matches C12's finding that model-guided search beat brute-force enumeration by only ~2× in efficiency — two measurements, one constant.

Controls

Verified-depth generation (BFS rejection) removes the collapse artifact from the grid itself. The destructive/transparent classification was fixed in the prereg before data. The oracle solves 425/425. Phase-2's plan-given condition controls task content exactly (same tasks, information added).

Oracle Versus Deployable Evidence

All measures deployable (visible info only; hidden-graded). Reference oracle bounds everything at 1.0.

Same verified cells, two pre-registered probes (P10/P11 logged before running):

cellsegmented pass@42AFC accuracy(recall: bare / plan-given)
d2k00.500.800.05 / 1.00
d2k20.150.700.10 / 1.00
d3k00.250.750.00 / 1.00
d3k20.050.750.00 / 1.00
d4k00.000.850.00 / 1.00
d4k20.000.500.00 / 0.90
  • P10 partially refuted: pre-segmented per-step blocks (each an isolated depth-1 identification the model does at 0.88) help — but only to 0.50/0.25 at d2/d3, decaying to 0.00 at d4. If per-step identification stayed at its isolated rate, d3 would be ~0.68. So identification degrades per-step in composite context — an interference effect beyond segmentation/search.
  • P11 mostly refuted: shown the true pipeline and a one-op decoy, no-think discrimination is only ~0.70–0.85 (chance at d4k2) — the model cannot reliably verify a stated hypothesis against I/O in a single forward pass, despite executing stated pipelines at ~1.0 when asked to produce code. (Caveat: no-think logit read; deliberate thinking-simulation may rescue discrimination.)

P12 (thinking-mode 2AFC, pre-registered, predicted ≥0.9): REFUTED — 0.50 overall, chance, and worse than the no-think logit read (0.73; Δ≈3.6 SE at n=120, same items/decoys). Asked to "work through the examples step by step," the model's mental execution of composed pipelines is systematically wrong and overwrites the weak-but-real surface signal the instant read used. (Parse rate 0.88; budget 512.)

Completed capability ladder (same tasks throughout): plan→code transcription 1.00 → no-think discrimination ~0.73 → segmented identification 0.50→0.00 → thinking discrimination 0.50 → bare identification ~0.0. The plan-given 1.00 is transcription, not semantic execution — the interpreter executed; the model only wrote code. What is intact: single-step recognition (0.88) and program→code transcription. What is broken: multi-step mental simulation — every task requiring internal state-tracking across composed ops (identify, segment, discriminate, simulate-and-compare) is weak and decays with length.

Interpretation

The fixed 4B is a reliable transcriber with a broken internal simulator. The wall is not search alone, not segmentation alone, not inverse inference alone — all of those reduce to one deficit: multi-step mental state-tracking. The model cannot reliably run a composed program in its head (P12: thinking-simulation performs at chance and below its own no-think surface heuristics), so every capability that requires it — identifying a composition from behavior, segmenting a shown chain, checking a hypothesis against examples, using execution feedback (M2) — collapses with composition length, while capabilities that don't (single-step recognition, program→code transcription) stay near ceiling. This also reframes C9: thinking helps when its content is coherent reasoning; here the required content is simulation, which the model generates incorrectly, so thinking hurts. The compositional wall decomposes as: (i) a large measurement artifact (40% shallower-equivalents; true monolithic depth-3 was always 0); (ii) zero execution deficit (plan-given ≈ 1.00 through depth 4); (iii) a hard identification wall — on genuinely novel compositions the model identifies each additional composed op at only ~2× better than chance (odds ∝ ~30⁻ᵈ against a 63-op space), collapsing at depth 2 — insensitive to op type (destruction hypothesis refuted) and barely helped by seeing intermediate states (it cannot segment chains into the depth-1 identifications it can do).

This one mechanism retro-explains the arc quantitatively:

  • C12's decompose+interpreter search worked because it externalizes exactly what the model lacks — segmentation + hypothesis search — leaving only per-step ranking and execution (which are cheap for it).
  • C12's guidance was only ~2× better than brute force — the same ~2×-over-chance constant, measured independently.
  • C11's banking is coverage-bounded because SFT teaches production/execution patterns, but the wall is identification: you cannot bank hypotheses you cannot identify.
  • M2's execution-feedback failure: feedback flags wrong outputs, but the binding constraint is identifying the right hypothesis — which not even explicit intermediate states unlock.
  • C10's verify ≫ generate: verifying a given program is execution-shaped (the model's strength); generating requires identification (its weakness).

Deployment corollary: for a fixed small model, plan-conditioned execution is nearly free capability; the scarce resource is hypothesis search, which cheap external tools (enumeration + an interpreter) supply. Division of labor: tools identify, the model compiles.

Limitations

  • One substrate family (list-of-int primitives), one model; the 63-op hypothesis space is enumerable (real-world identification may differ in structure). d5 verification capped at BFS depth 3 (d4-equivalents possible). Thinking budget 512 saturated (P6 untestable here). Intermediates-shown carries prompt-format burden (segmented-presentation follow-up pending).

Next Experiments

  • Segmented-presentation probe: present each step's transition as separate mini-examples — if that rescues identification, the deficit localizes to segmentation specifically.
  • Budget sweep at fixed depth (does thinking length become diagnostic once unsaturated — serial workspace?).
  • Two-alternative identification (given two candidate pipelines, pick the consistent one) — measures identification as discrimination, isolating it from generation.
  • Cross-substrate: does the ~30×/op identification decay constant transfer to other primitive families?

Artifact Manifest

See artifact_manifest.yaml.

Experiment log 8

Show the running log (8 entries)

Design

Insight-first: decompose the "depth-3 wall" (center of the C11/C12 arc) into measurable parts with pre-registered predictions (reports/prereg.md). Phase 0 = behavioral min-depth audit of ALL existing substrate tasks (CPU, exact BFS). Phase 1 = verified-depth factorial grid, depth d x destructive-ops k. Phase 2 = discriminator (bare vs plan-given vs intermediates-shown) separating hypothesis identification from execution.

Phase 0 results (predictions P0a/P0b CONFIRMED)

40% of nominal-d3 tasks behaviorally collapse to <=d2 (M1 6/15, C12 16/40). Monolithic TRUE depth-3 solves across the ENTIRE corpus: 0 -- every recorded d3 solve was a collapsed task. C12 decompose: 16/16 collapsed vs 4/24 (17%) true-d3. Destruction signal survives the collapse control (M2 true-d2: k=0 6/8, k>=1 0/8). Retro-corrections to C12 committed (f6c2ca7, CI green).

Phase 1

Grid generation: 425/425 verified tasks (17 cells, oracle 100%); generation cost ~35 min CPU (BFS rejection; transparent cells reject often, e.g. negate-negate collapses). GPU run in progress.

Phase 2

Pending (runs after grid; discriminator on grid task subset).

Phase 1 results (grid, 425 verified tasks -- P1/P2 REFUTED, steeper law found)

pass@6: d1 0.88(k0)/0.72(k1); d2 0.16/0.04/0.08; d3-d5 ~0.00 EVERYWHERE (2 solves in 275 tasks at d>=3). My pre-registered destruction hypothesis DIED: k=0 deep tasks are NOT solvable (P1 refuted -- predicted

=0.4 at d4, got 0.00) and destruction count barely matters at fixed depth (P2 refuted; logistic coefs

-3.24 transparent vs -3.87 destructive; depth-only AIC 112.7 vs two-param 111.9). The motivating M2 signal (k=0 true-d2 6/8) was primitive-mix luck at n=8.

REPLACEMENT LAW: odds of solving fall ~30x per composed op (~ -3.5 logits/op), uniform across op types; blind guessing over the 63-op space costs ~63x/op -> the model identifies each additional composed op at only ~2x better than chance. The wall on genuinely novel compositions is at depth TWO. False-passes ~nil (3/156). Planner first-op rank poor everywhere (median 7-13/23), no destruction effect.

Grid runtime note: sampled phase 6253s (2500 gens at budget 512) -- longer than projected (verified d>=3 tasks never terminate early + long thinking). Generation (BFS-verified) 35 min CPU.

Phase 2 results (discriminator -- P7 CONFIRMED strongest form, P8 REFUTED)

pass@4: plan_given 0.90-1.00 at EVERY cell (d2-d4, k0/k2) vs bare 0.00-0.10 vs intermediates-shown 0.00-0.30. The wall contains ZERO execution deficit -- it is 100% hypothesis identification, and even full observability of intermediate states barely rescues (the model cannot SEGMENT chains into the depth-1 identifications it does at 0.88). Convergent constant: the grid's ~2x-over-chance/op law equals C12's ~2x guided-vs-brute efficiency, measured independently. Headline: the fixed 4B is a reliable compiler starved of hypothesis search. Runtime: 2725s for 1440 gens.

Phase 3 results (probes -- P10 partial, P11 mostly refuted; ladder completed)

Segmented (pre-segmented per-step blocks): d2k0 0.50, d3k0 0.25, d4 0.00 -- helps vs intermediates-shown but does NOT recover the 0.88 isolated-d1 rate: per-step identification DEGRADES in composite context (interference beyond search/segmentation). 2AFC (true pipeline vs one-op decoy, no-think logit): 0.50-0.85 -- weak discrimination despite perfect plan-execution; the model cannot verify a stated hypothesis against I/O in one forward (caveat: no-think; thinking-simulation untested). COMPLETED LADDER on the same tasks: execution 1.00 > 2AFC ~0.73 > segmented 0.50->0.00 > bare ~0.0. Only the forward direction (program->behavior) is intact; inverse inference (behavior->program) is the wall, decaying with length. Ops note: first probe launch crashed (fla kernel, long segmented prompts at batch 48 -> batch 20 fix); a kill-preamble self-match killed the second launch (use clean launches).

P12 results (thinking 2AFC -- REFUTED at chance; the simulator is the wall)

Thinking-mode 2AFC (same items/decoys as no-think, greedy, budget 512): 0.50 overall (d2k0 .70 ... d4k2 .35), WORSE than the no-think logit read (0.73; ~3.6 SE, n=120). Deliberate simulate-and-compare fails -- the model's mental execution of composed pipelines is systematically wrong and destroys the surface signal. REFRAME: plan-given 1.00 = TRANSCRIPTION (interpreter executed; model wrote code). Intact: single-step recognition (0.88), program->code transcription (1.0). Broken: MULTI-STEP MENTAL SIMULATION -- the single deficit underlying identify/segment/discriminate/feedback-use. Also reframes C9: thinking helps when its content is coherent; here the required content is simulation, generated wrongly, so thinking HURTS. Caveats: budget 512, parse rate 0.88, one decoy family (one-op edits).

Figures 2

discriminator
discriminator · analysis/
grid main
grid main · analysis/

Reproduce

Run steps are documented inside the experiment folder (README and scripts).

Browse the experiment folder on GitHub ↗