Research log Small Model Experimentation
GitHub

On-Policy Failure-Prefix Universal Curriculum

Actual failure-prefix lessons lose to replay

The one idea you need

A repair lesson can start from the exact point where a worker went wrong, instead of showing a perfect solution from the beginning.

The question

Can corrections attached to the model's own fresh mistakes teach it to reason, stop, and answer more reliably than equal extra practice?

What we found

No. The unmodified parent solved 16 of 26 fresh tasks and equal-compute replay solved 18, while training corrections after the model's own real failures solved only 15. The repair model got none of the six targeted execution, induction, or probing cases right, and it hit the answer limit three times. Broad evaluation stayed sealed.

Why it matters

Collecting real failures is not enough if training begins after a long mistake-filled trajectory. Teach the short decision that causes the failure, and match how many answer-bearing tokens the comparison models actually learn from.

Rows needing repair230 of 288all 230 have a usable parent prefix
Frozen repair lessons60exactly ten from each of six classes
Fresh local gate26 taskstwo per skill with zero prompt overlap
Exact forward compute304,313 each320 rows, 40 updates, and zero skips per arm
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. Reproduce
  6. Related

Results at a glance 4

Prefix repair loses to ordinary replay

How to read

For parent, replay, and prefix repair, the tall bars count all correct answers out of 26 and the short bars count correct answers on the six targeted execution, induction, and probing cases.

05101520parentparent162replayreplay181prefix repairprefix repair150

Takeaway → Replay leads overall at 18, parent follows at 16, and prefix repair falls to 15 while scoring zero on all six target cases.

Data table
same-backend merged-composite armcorrect of 26target correct of 6
parent162
replay181
prefix repair150

Numbers from experiments/qwen35_4b_universal_on_policy_prefix_repair_token_match/runs/local/seed88009_promotion.json

Technical framing

Prefix repair loses to replay and erases every target win — All arms saw the same 26 fresh seed-88009 tasks. Prefix repair also parsed 23/26 and hit three caps, versus replay 23/26 and three and parent 24/26 and two. Candidate failed every strict relative check, so aggregate seed 78139 remained sealed.

The failed local gate stops the ninth checkpoint

How to read

The groups run from intake and design through parent deployment, parent rollout, failure mining, exact token matching, training, local testing, and broad testing. A bar at one means that checkpoint is complete.

00.250.50.751intakeintake1CPU designCPU design1parent deployparent deploy1parent rolloutparent rollout1prefix mineprefix mine1compute freezecompute freeze1trainingtraining1local gatelocal gate1broad gatebroad gate0

Takeaway → The first eight checkpoints completed, but the candidate failed local testing, so broad evaluation correctly remains unopened.

Data table
preregistered experiment stagecompleted checkpoint
intake1
CPU design1
parent deploy1
parent rollout1
prefix mine1
compute freeze1
training1
local gate1
broad gate0

Numbers from experiments/qwen35_4b_universal_on_policy_prefix_repair_token_match/runs/local/seed88009_promotion.json

Technical framing

The failed local gate stops the ninth checkpoint — Every design, training, and deployment checkpoint completed. The candidate then failed six absolute and all four relative local checks; no benchmark data was read and the broad gate remains sealed.

Every failure class clears the frozen quota

How to read

Each group is one kind of failure. The taller bar is the number of usable parent failures found, and the shorter bar is the fixed requirement of ten.

0204060declarationdeclaration3510state transitionstate transition4110bounded inductionbounded induction4610probe scoringprobe scoring2410repair propagationrepair propagation3610commit serializationcommit serialization4810

Takeaway → Even the smallest pool has 24 usable failures, so the negative result is not a shortage of real parent failures.

Data table
registered failure classreachable failuresrequired quota
declaration3510
state transition4110
bounded induction4610
probe scoring2410
repair propagation3610
commit serialization4810

Numbers from experiments/qwen35_4b_universal_on_policy_prefix_repair_token_match/data/prefix_failure_inventory.json

Technical framing

Every failure class exceeds its quota — The frozen miner selected exactly 10 rows per class from 230 total reachable failures. Every quota cleared, yet the candidate lost locally, so failure availability was not the binding constraint.

Forward compute matches but target exposure differs

How to read

Each pair compares replay control with prefix repair for forward tokens, masked context, thinking targets, answer targets, and tokens carrying nonzero loss. Forward totals match exactly; the repair stream puts more tokens in context and fewer under supervision.

01k2k3k4kforward tokensforward tokens304.3k304.3kmasked contextmasked context119.3k152.7kthink targetthink target181.6k147.6kanswer targetanswer target27883316nonzero weightnonzero weight145.4k112k

Takeaway → Equal forward compute masks 33,421 fewer supervised tokens for the candidate, so the negative rejects this full recipe without isolating prefix conditioning from target exposure.

Data table
per-epoch encoded exposurereplay controlprefix repair
forward tokens304.3k304.3k
masked context119.3k152.7k
think target181.6k147.6k
answer target27883316
nonzero weight145.4k112k

Numbers from experiments/qwen35_4b_universal_on_policy_prefix_repair_token_match/data/stream_token_receipt.json

Technical framing

Forward compute matches while supervised exposure differs — The registered match is exact unpadded forward compute. Long masked parent prefixes leave the losing candidate with 33,421 fewer target and nonzero-weight tokens, so prefix conditioning and target exposure remain coupled.

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

From pushed-green commit 21e1eb59, one frozen same-backend parent event produced all 288/288 greedy natural-thinking rollouts, 170,252 sampled tokens at 849.9 tokens/s. Rollout/metadata/log/receipt hashes are 8010632f...3b17f / 9fe81276...664 / ed0d4fc4...26b7 / c6b98b79...74fa. The original postvalidator rejected only an impossible post-open git_dirty=false assertion; an explicit no-generation recovery path authenticated every other frozen field and wrote the receipt without rerunning the model. The frozen miner has now graded the experiment-owned substrate. It found 230 failed and 58 passing parent rows; all 230 failures had a reachable clean prefix. … Read the full result →

Overview

This result-separated successor tests whether training corrective continuations from the model's own fresh procedural failure prefixes installs a reusable reasoning and commit policy better than another idealized trace curriculum or exact-token replay.

Research Program

Question

Do masked corrective continuations attached to the authenticated parent's actual failure prefixes teach bounded execution, induction, scoring, and exact commitment at the deployed interface while preserving its broad replay policy?

Hypothesis

The state-table predecessor was executable and truth-audited but off-policy: its ideal traces did not resemble the model's actual declaration confusion, repeated induction, score-count errors, or correct-state-without-commit prefixes. Fresh parent rollouts plus executable-oracle continuations should place supervision exactly at those states. The mechanism is false unless the sole candidate strictly beats both the unchanged parent and a same-parent exact-forward-token replay continuation on a fresh paired local gate, overall and on execute/induct/probe.

Setup

  • Model: only Qwen/Qwen3.5-4B, pinned revision 851bf6e806efd8d0a36b00ddf55e13ccb7b8cd0a.
  • Proposed parent: authenticated close_xi adapter; the failed scaffold and state-table candidates are not inherited.
  • Proposed data source: fresh experiment-owned procedural tasks, followed by authenticated parent rollouts and executable-oracle failure localization. No prior local-gate item may enter training.
  • Proposed treatment: masked assistant-prefix correction at first observable failure states, including bounded commit, declaration-versus-operation parsing, induction loop termination, probe-score recomputation, repair propagation, and exact answer serialization.
  • Mechanism-falsifying control: independent same-parent replay continuation matched on encoded forward tokens, optimizer steps, seed, backend, and aligned shared replay positions.
  • Hidden-label boundary: benchmarks/ remains read-forbidden. Only an aggregate gateway may run after local promotion; all-family lift, higher-tier confirmation, and matched-compute sample-more remain required for a universal claim.
  • Reserved seeds: construction 77113, parent rollout 66113, training 47, fresh local 88009, and conditional aggregate 78139.

Run

Model-free design smoke:

PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -B experiments/qwen35_4b_universal_on_policy_prefix_repair_token_match/scripts/run.py --smoke

The design, parent merge, parent rollout, failure inventory, and exact-token freeze are separate published checkpoints. Verify every model-free derived artifact with:

PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -B experiments/qwen35_4b_universal_on_policy_prefix_repair_token_match/scripts/run.py --smoke

The terminal local event is preserved and authenticated by the same smoke command. Do not rerun it or open an aggregate stage in this directory. Any successor needs a new result-separated experiment and fresh seeds.

Results

CPU feasibility passed. Construction seed 77,113 deterministically freezes 288 truth-audited tasks, 48 for each of six failure classes. The model-facing JSONL omits hidden oracle and answer fields. Tests cover exact prefix masking, failure-only selection, delayed-commit cutoff, declaration misuse, generation caps, and the merged-Qwen architecture gate. The authenticated close_xi adapter was explicitly merged into a full composite: 128/128 applied LoRA modules were nonzero, the merged weight hash is 4933f2dd...eb373, and the external merge-receipt hash is 1fbc84b3...5557. From pushed-green commit 21e1eb59, one frozen same-backend parent event produced all 288/288 greedy natural-thinking rollouts, 170,252 sampled tokens at 849.9 tokens/s. Rollout/metadata/log/receipt hashes are 8010632f...3b17f / 9fe81276...664 / ed0d4fc4...26b7 / c6b98b79...74fa. The original postvalidator rejected only an impossible post-open git_dirty=false assertion; an explicit no-generation recovery path authenticated every other frozen field and wrote the receipt without rerunning the model.

The frozen miner has now graded the experiment-owned substrate. It found 230 failed and 58 passing parent rows; all 230 failures had a reachable clean prefix. Available failures by bounded-induction/commit/declaration/probe/repair/state class were 46/48/35/24/36/41, so every fixed quota cleared without borrowing. It selected exactly ten per class. The 60-row repair source and complete inventory hashes are 30141538...d84b8 / 7230af52...dfe7. Selected prefixes contain 47,123 masked tokens total (33 minimum, 785.4 mean, 1,024 maximum); 42 selections cut at the generation cap, ten at the immediate-commit boundary, and eight at the answer boundary.

The separately frozen training streams now contain 320 rows and exactly 304,313 forward tokens apiece, with zero skips, 200 byte-identical position-aligned replay rows, and 40 optimizer steps. All repairs fit below the 4,096-token ceiling; the largest final row is 2,991 tokens. The candidate replaces 33,421 replay target tokens with masked context, leaving 111,983 nonzero-weight tokens and 25,049.4 absolute loss mass versus 145,404 and 31,311.2 for control. This is an explicit intervention caveat, not hidden behind the forward-token match. Token-receipt SHA-256 is eb08026f...e0cfc; the second review verdict is PASS_CONTROL_TRAINING.

From pushed-green commit a8529c04, the replay control then trained for exactly one epoch and 40 updates from the authenticated parent. It encoded 320/320 rows with zero skips, consumed the registered 304,313 forward tokens, and finished with training loss 0.4588 in 272.8 trainer seconds (292.4 wrapper seconds). The normalized log/receipt hashes are a49076ec...3501 / f78f2069...d6de; adapter config/weights are 0dfd9bda...120f / bb59d3bd...5154d. From separately pushed-green control checkpoint b690a4b3, the prefix-repair candidate independently restarted from the same authenticated parent and also completed 320/320 rows, zero skips, one epoch, and 40/40 updates over 304,313 forward tokens. Its final training loss was 1.288 in 282.4 trainer seconds (298.2 wrapper seconds). Candidate log/receipt hashes are e895c546...ca0 / 846d8107...7098; adapter config/weights are 91b7db57...37de / 85811191...0f14. Each 169,903,320-byte adapter has 256 tensors and 42,467,328 elements; every tensor is finite and nonzero. These are operational training results only. No capability measurement, local evaluation, or benchmark event exists.

Fresh local seed 88,009 is now frozen model-free after paired training. It contains 26 truth-audited tasks, two for each of 13 skills. Source/model-input/receipt hashes are 9682744e...acdee / ff407551...ce988 / 3982d5b8...6e85a; input rows expose neither answer nor oracle. Canonical messages have zero overlap with 658 training or parent-collection messages and 234 messages regenerated at prior reserved local seeds. A pre-outcome protocol amendment moves all three arms from the prospective Transformers path to the now-mandatory pinned vLLM runner. Each arm will use an explicit merged composite and identical greedy natural-thinking geometry. The absolute 24-parse/17-correct gate and strict total plus execute/induct/probe wins over both controls remain frozen. At that design checkpoint, review verdict PASS_CONTROL_MERGE authorized only the replay-control merge; no trained-arm merge, local model call, capability score, or benchmark event yet existed.

From pushed-green local-design commit 6dc0e677, the replay-control adapter was then explicitly merged into the Qwen3.5 composite. All 128 applied LoRA modules were nonzero. Tracked run-receipt/log hashes are bc78f332...d550 / 7ab404b8...8995; external merge-receipt/full-weight hashes are aa763255...45a3 / 7ab4c419...6e2e. The 9,078,620,536-byte shard passed the exact merged-Qwen architecture and frozen local engine-request gate. This is deployment lineage only. At that checkpoint no candidate merge, local model call, capability score, or benchmark event existed.

After that checkpoint was rebased, pushed, and passed Validate Repository run 29355088731 plus Publish Research Site run 29355089298, the candidate was merged from clean SHA 619f1e53. It likewise applied 128/128 nonzero LoRA modules and saved one 9,078,620,536-byte shard. Tracked run-receipt/log hashes are 3deff026...438d / 58c7c9ec...d9f6; external merge-receipt/full-weight hashes are baa2027e...6d5a / 376e2082...b528. Independent lineage, merged-Qwen architecture, and exact frozen engine-request validation passed. Both trained-arm deployments now exist, but no local model call, capability score, or benchmark event yet existed.

From pushed-green candidate-deployment commit a12e4758, one paired vLLM event ran on fresh seed 88,009. Parent/replay/candidate scored 16/18/15 correct, parsed 24/23/23, and contacted the generation cap 2/3/3 times. Their execute+induct+probe subtotals were 2/1/0 of six: candidate was 0/2 on all three target skills. It failed the accuracy, parse, cap, execute, induct, and probe gates and all four strict control-relative checks. Paired against replay, candidate won one task and lost four; no per-skill count improved, while order, probe, and trace each lost one. Local/promotion receipt hashes are b4b333ca...b8c8 / 1e048e75...f5c. All nine raw output/metadata/log hashes independently recomputed, benchmark_data_read=false, promotion is empty, and aggregate seed 78,139 remains sealed.

Interpretation

The on-policy source solved data availability, not installation. Teacher-forcing long realized failure prefixes did not teach the model to avoid or repair analogous states when it had to generate the prefix itself. Selection was dominated by cap boundaries, and the candidate sacrificed 33,421 supervised target tokens relative to replay; the result therefore rejects this complete matched-forward-compute recipe, not every possible on-policy correction objective. Retire long masked failure-prefix continuation as the next lever. A successor should move supervision before the failure—at short, prospectively detectable decision boundaries—and must preserve full target exposure or use an exact target-token control.

Knowledgebase Update

  • Program evidence and shared synthesis: record the terminal local negative and the pre-failure/target-exposure design constraint it adds.
  • Program backlog: retires this mechanism and keeps aggregate seed 78,139 sealed.
  • Claim ledger: unchanged; no broad capability claim was exposed.

Artifacts

  • idea_intake.md
  • configs/default.yaml
  • scripts/run.py
  • scripts/gen_rollout_tasks.py
  • scripts/mine_prefix_repairs.py
  • scripts/measure_source_tokens.py
  • scripts/materialize_streams.py
  • scripts/validate_streams.py
  • scripts/train_trial.py
  • scripts/gen_local_gate.py
  • scripts/check_local.py
  • scripts/merge_trained_arm.py
  • scripts/eval_local_vllm.py
  • data/design_receipt.json
  • data/rollout_task_manifest.json
  • data/prefix_failure_inventory.json
  • data/prefix_repair_source.jsonl
  • data/source_token_lengths.json
  • data/stream_manifest.json
  • data/stream_token_receipt.json
  • data/replay_after_close.jsonl
  • data/prefix_repair_after_close.jsonl
  • data/local_tasks_seed88009.jsonl
  • data/local_input_seed88009.jsonl
  • data/local_design_receipt.json
  • runs/parent_rollout/seed66113.receipt.json
  • runs/training/replay_after_close.log
  • runs/training/replay_after_close.json
  • runs/training/prefix_repair_after_close.log
  • runs/training/prefix_repair_after_close.json
  • runs/merges/replay_after_close.log
  • runs/merges/replay_after_close.json
  • runs/merges/prefix_repair_after_close.log
  • runs/merges/prefix_repair_after_close.json
  • runs/local/seed88009.json
  • runs/local/seed88009_promotion.json
  • runs/local/seed88009_close_xi_parent.jsonl
  • runs/local/seed88009_close_xi_parent.meta.json
  • runs/local/seed88009_close_xi_parent.log
  • runs/local/seed88009_replay_after_close.jsonl
  • runs/local/seed88009_replay_after_close.meta.json
  • runs/local/seed88009_replay_after_close.log
  • runs/local/seed88009_prefix_repair_after_close.jsonl
  • runs/local/seed88009_prefix_repair_after_close.meta.json
  • runs/local/seed88009_prefix_repair_after_close.log
  • analysis/prefix_failure_inventory.md
  • reports/design_review.md
  • reports/compute_review.md
  • reports/local_design_review.md
  • reports/preregistration.md
  • reports/report.md
  • reports/artifact_manifest.yaml

Report

Rendered from reports/report.md

Summary

Model-free design, explicit parent deployment, authenticated rollout collection, failure-only mining, and the second exact-compute review are complete. Every fixed class quota passed, and two frozen 320-row streams match at exactly 304,313 forward tokens with zero skips. Both independently initialized arms have now trained and authenticated. The fresh same-backend local gate rejected prefix repair 15/26 versus replay 18/26 and parent 16/26; no benchmark event ran and aggregate remains sealed.

Research Program Fit

The experiment belongs to agentic_breadth_installation. It changes the intervention state from idealized truth traces to on-policy deployment prefixes while retaining the universal line's exact-token replay and strict promotion contract.

Method

Construction seed 77,113 produces 288 truth-audited tasks balanced across six failure classes. The authenticated close_xi adapter is explicitly merged because runtime vLLM LoRA is a verified silent no-op. One greedy natural-thinking vLLM event collected 288 parent outputs at seed 66,113 and cap 1,024. The frozen model-free miner selected ten reachable failures per class and masks every generated parent-prefix token from loss. Deterministic stream construction combines 200 position-aligned shared replay rows with either 60 repairs plus 60 replay fillers or 120 disjoint replay-control rows. The actual training encoder and pinned tokenizer measure every final row.

Results

CPU feasibility, deterministic generation, and adversarial design review passed. Source/model-input hashes are 32589348...1172 / 7a643e96...a5485c; design receipt hash is 98c6a168...5638. The parent composite merge then applied 128/128 nonzero LoRA modules. Its single weight shard is 4933f2dd...eb373 and its external merge receipt is 1fbc84b3...5557. The frozen parent event then completed all 288/288 rollouts with 170,252 sampled tokens at 849.923 tokens/s. Rollout/metadata/log hashes are 8010632f...3b17f / 9fe81276...664 / ed0d4fc4...26b7 and the authenticated receipt is c6b98b79...74fa. The initial postvalidator rejected only its own post-open dirty-tree condition; explicit recovery reran no generation and bound the completed event to commit 21e1eb59. At that rollout checkpoint, no failure grading or downstream event had run.

The separately published rollout then opened model-free grading. Of 288 rows, 230 failed at least one registered condition and 58 passed; all 230 failures had a clean reachable prefix. Available failures by bounded-induction/commit/declaration/probe/ repair/state class were 46/48/35/24/36/41, clearing every quota of ten. The 60-row repair source is 30141538...d84b8; full inventory is 7230af52...dfe7. Selected prefixes contain 47,123 masked tokens, with min/mean/max 33/785.383/1,024. Forty-two cut at the generation-cap boundary, ten at the first token beyond the commit budget, and eight at the answer boundary.

The final control/candidate hashes are 541805df...be6 / 9a43f3be...03f1, and the exact token receipt is eb08026f...e0cfc. Both arms contain 320 rows, 304,313 forward tokens, zero skips, 200 aligned common rows, and 40 updates. The longest row is 2,991 of 4,096 tokens. Forward compute is equal, but target composition is not: candidate minus control is +33,421 masked-context, −33,949 think-target, zero close-target, +528 answer-target, and −33,421 total target tokens. Candidate/control nonzero-weight tokens are 111,983/145,404; absolute loss masses are 25,049.4/31,311.2. The second review records this ambiguity and authorizes only the control. No model load, adapter training, capability measurement, or benchmark event ran during the freeze.

After compute-freeze commit a8529c04 passed both workflows, the replay control trained for one epoch and exactly 40 updates. It encoded 320/320 rows with zero skips, finished at loss 0.4588, and took 272.8 trainer seconds. Log/receipt hashes are a49076ec...3501 / f78f2069...d6de; adapter config/weights hashes are 0dfd9bda...120f / bb59d3bd...5154d. The 169,903,320-byte adapter contains 256 finite, nonzero tensors and 42,467,328 elements. This authenticates the control artifact but is not capability evidence.

After that control checkpoint passed both workflows as commit b690a4b3, the prefix-repair candidate independently restarted from the same parent. It likewise encoded 320/320 rows with zero skips and completed exactly 40 updates over one epoch. Final loss was 1.288; trainer/wrapper times were 282.4/298.2 seconds. Candidate log/receipt hashes are e895c546...ca0 / 846d8107...7098; adapter config/weights hashes are 91b7db57...37de / 85811191...0f14. Its 169,903,320-byte adapter also contains 256 finite, nonzero tensors and 42,467,328 elements. This completes the paired operational training stage, not a capability comparison.

After paired training, local seed 88,009 froze 26 truth-audited tasks, two per registered universal skill. Source/model-facing/receipt hashes are 9682744e...acdee / ff407551...ce988 / 3982d5b8...6e85a. Model input contains only ids, messages, and public metadata. It has zero canonical-message overlap with 658 training/collection messages and 234 regenerated messages at prior reserved local seeds. No model was called.

Before any local outcome, the active repository inference contract required a symmetric amendment from the prospective Transformers process to the pinned vLLM runner. Parent, replay, and candidate will all deploy as explicit composites with identical natural-thinking, greedy, seed, token cap, batch geometry, and runner bytes. The frozen absolute and strict control-relative promotion rules are unchanged. Local review verdict PASS_CONTROL_MERGE authorizes only the separately checkpointed replay-control merge.

After local-design commit 6dc0e677 passed both workflows, that replay-control merge applied 128/128 nonzero LoRA modules. Tracked receipt/log hashes are bc78f332...d550 / 7ab404b8...8995; external merge receipt and 9,078,620,536-byte weight shard hash to aa763255...45a3 / 7ab4c419...6e2e. The saved composite passes the exact Qwen3.5 architecture and frozen local engine-request gate. This is an authenticated deployment artifact, not capability evidence.

After that checkpoint passed Validate Repository run 29355088731 and Publish Research Site run 29355089298, candidate merge from clean SHA 619f1e53 applied 128/128 nonzero modules. Tracked receipt/log hashes are 3deff026...438d / 58c7c9ec...d9f6; external receipt and 9,078,620,536-byte weight shard hash to baa2027e...6d5a / 376e2082...b528. Independent lineage, architecture, and frozen engine-request validation passed. This too is deployment evidence only.

The single authorized local event then ran from pushed-green commit a12e4758. Parent/replay/candidate scored 16/18/15 correct, 24/23/23 parsed, and 2/3/3 cap contacts on the same 26 fresh rows. Execute+induct+probe subtotals were 2/1/0 of six; candidate scored zero on every target kind. It failed six absolute checks and all four strict relative checks. Against replay it flipped one miss to a win but four wins to misses; no skill count improved, while order, probe, and trace each fell by one. Local/promotion receipt hashes are b4b333ca...b8c8 / 1e048e75...f5c. Independent recomputation verified the promotion decision and all nine raw hashes. No benchmark data was read and aggregate seed 78,139 remains sealed.

Controls

Baseline is authenticated close_xi. The mechanism-falsifying control is an independent same-parent replay continuation matched on exact encoded forward tokens, optimizer steps, seed, and aligned shared replay. It must train and publish first. Both arms have now trained independently from the parent, and candidate preflight authenticated the committed control receipt, log, and external adapter before model load. The local deployment order is published parent composite, replay-control merge, candidate merge, then one three-arm vLLM local stage. Every transition completed and was preserved separately; the failed local gate terminates the experiment.

Oracle Versus Deployable Evidence

Executable truth is permitted only to construct tasks, grade parent failures, and build corrections or the fresh local gate. Hidden oracle fields are excluded from both rollout and local model input; commit tasks deliberately expose verified work as their public task substrate. Local seed 88,009 was materialized only after training, and its messages are disjoint from training and prior reserved local seeds. benchmarks/ remains read-forbidden and the aggregate gateway stays sealed.

Interpretation

The parent supplies enough failures in every registered class and exact forward compute is matched, so data availability and deployment do not explain the negative. Long realized failure-prefix teacher forcing did not transfer to generating or repairing analogous prefixes on fresh tasks. The selected set is dominated by capped states, while masking those contexts leaves 33,421 fewer supervised target tokens than replay. The result rejects the complete recipe but does not separate prefix conditioning from target-composition effects. “First failure” also remains the first machine-observable boundary, which can occur too late to teach the decision that caused it.

Next Experiments

Do not rerun seed 88,009 or open aggregate seed 78,139. A result-separated successor should intervene at short pre-failure decision boundaries and match supervised target exposure, with fresh local and conditional aggregate seeds.

Artifact Manifest

Parent identity, frozen task hashes, replay hashes, the staged external merged checkpoint, parent-rollout hashes, stream hashes, and both trained adapters are recorded in artifact_manifest.yaml; local task/input/protocol hashes and both merged-arm deployments are registered. The terminal local receipt, promotion receipt, and every raw arm artifact are tracked; no benchmark result exists.

Experiment log 12

Show the running log (12 entries, 2026-07-14)

2026-07-14 — Intake

  • Opened only after state-table negative commit 003efebb was pushed to main and GitHub Validate Repository run 29341508735 and Publish Research Site run 29341513334 both completed successfully.
  • Ran make related for on-policy failure-prefix correction. Selected the existing agentic_breadth_installation program and named qwen35_4b_universal_state_table_compiler_token_match as the closest near-duplicate.
  • Anchored the pivot in C53's failure-forensics/on-policy direction, C56/C59's content-bearing serial-compute boundary, C50's deployment-state emission lesson, and the operator-capture negatives from interactive/recovery curricula.
  • Proposed the same authenticated close_xi parent; rejected inheritance from the failed scaffold and state-table candidates.
  • Reserved fresh construction/parent-rollout/training/local/conditional-aggregate seeds 77113/66113/47/88009/78139.
  • Authorized intake and CPU design feasibility only. No parent rollout, data selection, GPU model generation, training, local capability, merge, or benchmark event ran.

2026-07-14 — Model-free collection design

  • Published intake commit 10ae8923 directly to main; Validate Repository run 29342538743 and Publish Research Site run 29342538693 both passed.
  • Froze 288 fresh truth-audited tasks at construction seed 77,113: 48 each across declaration/operation, state transition, bounded induction, probe scoring, repair propagation, and commit serialization.
  • Separated hidden oracle source (32589348...1172) from model-facing rollout input (7a643e96...a5485c). Fresh local seed 88,009 remains unmaterialized.
  • Added exact generated-token prefix masking and model-free failure mining. Fixed ten reachable failures per class, a 32-token immediate-commit boundary, and fail-closed insufficient-quota behavior.
  • Closed the documented vLLM runtime-LoRA silent no-op by requiring an explicitly merged close_xi composite with exact Qwen3.5-4B architecture fingerprinting.
  • Adversarial review verdict is PASS_PARENT_MERGE; training, local evaluation, and benchmark access remain unauthorized pending observed prefix lengths and a second exact-compute review.

Next: commit/rebase/push this design and verify both workflows; then run only the explicit parent-merge stage and checkpoint its receipt.

2026-07-14 — Explicit parent composite merge

  • Published design commit 3f75c992 directly to main; Validate Repository run 29344691083 and Publish Research Site run 29344691096 both passed.
  • From that clean checkpoint, ran only --stage merge-parent. The explicit composite merger loaded Qwen/Qwen3.5-4B revision 851bf6e8...d0a and authenticated the close_xi adapter as weights/config 16e9dc75...c179 / de953bd5...7ff.
  • Applied 128 LoRA deltas on CUDA; all 128 were nonzero. Sum/max delta Frobenius norms were 159.990169 / 2.824141, with FP32 TF32 disabled and scale 2.0.
  • Saved one 8.5-GiB composite shard with SHA-256 4933f2dd...eb373. External merge_receipt.json SHA-256 is 1fbc84b3...5557; durable log/experiment receipt hashes are fc0b938b...53d2 / 10c3870d...95b.
  • Re-ran the merge authenticator and the exact Qwen3.5-4B architecture-fingerprint gate against the saved composite. No generation, training, capability, local, or benchmark event ran.

Next: publish and CI-verify this merge receipt, then run only collect-parent.

2026-07-14 — Authenticated parent rollout collection

  • Published parent-merge commit 21e1eb59 directly to main; Validate Repository run 29345395690 and Publish Research Site run 29345395680 both passed.
  • From that clean checkpoint, ran only --stage collect-parent: the explicitly merged close_xi composite generated one greedy natural-thinking completion for each of all 288 frozen prompts at seed 66,113 and a 1,024-token cap. The same vLLM event used max model length 4,096, max 16 sequences, max 8,192 batched tokens, and explicit CUDA-graph sizes 1/2/4/8/16.
  • Completed 288/288 rollouts with 170,252 sampled tokens, 61,981 unique/logical input prompt tokens, and zero injected or stage-two tokens. Model load plus generation took 311.869 seconds; generation throughput was 849.923 sampled tokens/s.
  • Preserved rollout/metadata/normalized-log hashes 8010632f...3b17f / 9fe81276...664 / ed0d4fc4...26b7; the model runner hash is 2099c674...32aaf and metadata binds generation to commit 21e1eb59.
  • Generation completed atomically, but the original wrapper's postvalidator exited only because it demanded runner git_dirty=false after the wrapper itself had opened an untracked log. Every other frozen contract check passed. The collector now captures clean Git state before opening outputs and includes an explicit --recover-completed path. That path authenticated the completed event, reran no generation, and wrote receipt hash c6b98b79...74fa.
  • Added a repository-wide operational guard and regression test for this self-dirty wrapper failure. No rollout outcome was graded, no prefix was selected, and no training, capability, local, or benchmark event ran.

Next: publish and CI-verify this rollout checkpoint, then run only the model-free mine-prefixes stage and preserve either the 60-repair inventory or the frozen insufficient-quota negative.

2026-07-14 — Model-free prefix quota satisfied

  • Published rebased parent-rollout commit dbd433e8 directly to main; Validate Repository run 29346896317 and Publish Research Site run 29346896827 both passed.
  • From that clean aligned checkpoint, ran only --stage mine-prefixes. The miner authenticated the committed rollout receipt, metadata, runner, task source, and hidden-field boundary, then made zero model calls.
  • Graded 288 experiment-owned procedural rows: 230 met at least one frozen failure condition, 58 passed all registered conditions, and all 230 failed rows exposed a reachable clean thinking-channel prefix.
  • Reachable failures for bounded induction, commit serialization, declaration / operation, probe scoring, repair propagation, and state transition were 46/48/35/24/36/41. Every preregistered quota of ten passed without borrowing or threshold changes; exactly 60 repair rows were selected.
  • Preserved inventory/source hashes 7230af52...dfe7 / 30141538...d84b8. Selected prefixes contain 47,123 masked tokens total (33 minimum, 785.383 mean, 1,024 maximum). Boundaries were 42 generation caps, ten first tokens beyond the commit budget, and eight answer boundaries.
  • The severe-prefix mix is a compute-review risk, not a post-hoc reason to change selection. No exact-token stream, adapter training, capability measurement, local event, merge, or benchmark event ran.

Next: publish and CI-verify this failure-inventory checkpoint. Then materialize exact-token candidate/control streams and perform the second adversarial compute review in a separate model-free checkpoint; do not expose training before it passes.

2026-07-14 — Model-free exact-compute freeze

  • Published rebased prefix-inventory commit d16beecc directly to main; Validate Repository run 29347732698 and Publish Research Site run 29347732815 both passed.
  • From that clean aligned checkpoint, measured all 60 frozen repairs with the exact pinned Qwen tokenizer and the actual training encoder. All 60 fit at length 4,096; no selected row was removed or replaced after lengths became visible.
  • Deterministically materialized two 320-row streams. Each has exactly 304,313 unpadded forward tokens, zero skips, 40 optimizer steps, and the same 200 byte-identical replay rows at aligned positions. Candidate repair/filler blocks contain 76,953/28,000 tokens; the disjoint control-variable replay block contains 104,953.
  • Preserved source-token/stream-manifest/control/candidate/final-receipt hashes 2ae6aded...654d / f836d0a1...93cd3 / 541805df...be6 / 9a43f3be...03f1 / eb08026f...e0cfc. Final encoded lengths span 329–2,991.
  • Audited the non-compute match explicitly: candidate versus control has +33,421 masked-context tokens, −33,949 think targets, equal close targets, +528 answer targets, and −33,421 total target tokens. Nonzero-weight tokens and absolute loss mass are 111,983/25,049.4 versus 145,404/31,311.2. Any result must retain this target-composition caveat.
  • Added a fail-closed training wrapper that authenticates stream receipt, bytes, warm start, output path, and hyperparameters; captures clean Git state before opening outputs; refuses overwrite; and preserves logs/receipts. Candidate training additionally requires the committed control receipt.
  • Second adversarial verdict is PASS_CONTROL_TRAINING. No model load, adapter training, capability measurement, local event, or benchmark event ran.

Next: commit/rebase/push this compute freeze and verify both workflows. Then run only train-control from that published clean checkpoint and immediately preserve its log and receipt before any candidate event.

2026-07-14 — Exact-compute replay control trained

  • Published rebased compute-freeze commit a8529c04 directly to main after resolving a generated knowledge-index conflict by deterministic rebuild. Validate Repository run 29350075815 and Publish Research Site run 29350075883 both passed.
  • From that clean aligned checkpoint, ran only --stage train-control. The wrapper reauthenticated design, mining, stream bytes, token receipt, parent adapter, and frozen hyperparameters before opening any output.
  • The exact trainer encoded 320/320 replay rows with zero skips and performed 40/40 updates over one epoch, 304,313 forward tokens, batch size one, gradient accumulation eight, learning rate 1e-5, and seed 47. Trainer/wrapper wall times were 272.8/292.4 seconds; final training loss was 0.4588.
  • Preserved normalized log/receipt hashes a49076ec...3501 / f78f2069...d6de. The external adapter config/weights hashes are 0dfd9bda...120f / bb59d3bd...5154d; weights are 169,903,320 bytes.
  • Structural audit found 256 tensors and 42,467,328 elements, matching the reported trainable parameter count. Every tensor was finite and nonzero.
  • The preflight Git status was empty at commit a8529c04; the recorded post-training dirtiness contains only the newly created durable training directory. No candidate, capability, local, merge, generation, or benchmark event ran.

Next: publish and CI-verify this control log/receipt. Then run only train-candidate; its direct wrapper must authenticate the committed control receipt, committed log, and external adapter before loading the model.

2026-07-14 — Exact-compute prefix-repair candidate trained

  • Published control checkpoint b690a4b3 directly to main; Validate Repository run 29351333012 and Publish Research Site run 29351333028 both passed.
  • From that clean aligned checkpoint, ran only --stage train-candidate. Before model load, the direct wrapper reauthenticated the committed control receipt and log, external control adapter, token receipt, candidate stream bytes, parent adapter, and all frozen hyperparameters.
  • The candidate independently restarted from close_xi, encoded 320/320 rows with zero skips, and performed 40/40 updates over one epoch and 304,313 forward tokens. Batch size, gradient accumulation, learning rate, and seed remained 1/8/1e-5/47. Trainer/wrapper wall times were 282.4/298.2 seconds; final training loss was 1.288.
  • Preserved normalized log/receipt hashes e895c546...ca0 / 846d8107...7098. The external adapter config/weights hashes are 91b7db57...37de / 85811191...0f14; weights are 169,903,320 bytes.
  • Structural audit found 256 tensors and 42,467,328 elements. Every tensor was finite and nonzero. The preflight Git status was empty at commit b690a4b3; only the new candidate log and receipt were created in the tracked tree.
  • This completes paired training only. The candidate's lower supervised-token count and loss mass remain explicit causal caveats, and no capability measurement, local event, merge, generation, or benchmark event ran.

Next: publish and CI-verify this paired-training checkpoint. Then design and freeze the fresh paired local gate in a separate model-free checkpoint before evaluating the parent, replay control, or prefix-repair candidate.

2026-07-14 — Fresh same-backend local gate frozen

  • Published candidate-training checkpoint 66da846f directly to main after fetching incoming work and resolving the sole generated knowledge/artifact_index.md conflict by deterministic rebuild. Validate Repository run 29352595725 and Publish Research Site run 29352595744 both passed.
  • Only then materialized fresh local seed 88,009 model-free: 26 truth-audited tasks, exactly two each across the 13 universal skills. Source/model-input/design-receipt hashes are 9682744e...acdee / ff407551...ce988 / 3982d5b8...6e85a.
  • Model-facing rows contain only id, messages, and public kind/surface/seed metadata. Canonical message bytes overlap zero of 658 frozen training or parent-collection messages and zero of 234 messages regenerated at prior reserved local seeds 88,000–88,008.
  • Froze a pre-outcome protocol amendment required by the active repository guide: all three arms move symmetrically from the prospective Transformers process to the pinned experiment-local vLLM runner. Runtime LoRA remains forbidden; replay and candidate require explicit authenticated composite merges.
  • Pinned identical natural-thinking, greedy, one-sample, seed-88,009, 1,024-token, 4,096-context, 16-sequence, 8,192-batched-token, CUDA-graph-1/2/4/8/16 geometry for every arm. Code hashes cover the generator, gate, evaluator, runner, trained-arm merge wrapper, external merger, curriculum, and training authenticator.
  • Integerized the unchanged absolute gate at 24 parses, 17 correct, at most two caps, at most one route abstention, and at least one of two correct separately for execute/induct/probe. Promotion still requires strict total and target wins over both parent and replay. Review verdict is PASS_CONTROL_MERGE.
  • Ran 55 experiment tests plus the complete deterministic smoke. No trained-arm merge, local model call, capability score, benchmark access, or aggregate event occurred.

Next: publish and CI-verify this local-design checkpoint. Then run only merge-control, preserve its full composite receipt, and repeat the publish gate before candidate merge.

2026-07-14 — Replay-control composite merged

  • Published rebased local-design checkpoint 6dc0e677 directly to main; Validate Repository run 29354204797 and Publish Research Site run 29354205108 both passed.
  • From that clean aligned checkpoint, ran only --stage merge-control. The harness reauthenticated both training checkpoints, fresh local receipt, review verdict, replay adapter bytes, and external merger before opening output.
  • The explicit merger loaded the pinned Qwen3.5-4B composite, applied 128/128 LoRA modules, and found every applied delta nonzero. It used CUDA FP32 LoRA products and saved one 9,078,620,536-byte full composite shard.
  • Preserved tracked run-receipt/log hashes bc78f332...d550 / 7ab404b8...8995. External merge-receipt/full-weight hashes are aa763255...45a3 / 7ab4c419...6e2e; the merger hash remained cb9af8b4...96672.
  • Independently reran the trained-arm receipt authenticator and the experiment-local merged-Qwen architecture plus frozen engine-request gate against the saved composite. Both passed.
  • Preflight Git status was empty at commit 6dc0e677; only the tracked control merge log/receipt and external gitignored composite were created. No candidate merge, local model call, capability score, benchmark access, or aggregate event ran.

Next: publish and CI-verify this replay-control merge. Then run only merge-candidate; it must require the committed control-merge receipt before opening output.

2026-07-14 — Prefix-repair candidate composite merged

  • Published rebased replay-control checkpoint 619f1e53 directly to main after resolving the sole generated-index conflict by deterministic rebuild. Validate Repository run 29355088731 and Publish Research Site run 29355089298 passed.
  • From that clean, origin-aligned SHA, ran only --stage merge-candidate. Preflight reauthenticated the fresh local design, committed replay-control merge, candidate training receipt, adapter bytes, and external merger before opening output.
  • The explicit merger loaded only pinned Qwen3.5-4B revision 851bf6e8...d0a, used CUDA FP32 LoRA products with TF32 disabled, applied 128/128 modules, and found every applied delta nonzero. It saved one 9,078,620,536-byte full composite shard.
  • Preserved tracked run-receipt/log hashes 3deff026...438d / 58c7c9ec...d9f6. External merge-receipt/full-weight hashes are baa2027e...6d5a / 376e2082...b528; the merger remained cb9af8b4...96672.
  • Independently reran candidate lineage validation and the merged-Qwen architecture plus exact 4,096-context, 16-sequence, 8,192-batched-token, CUDA-graph-1/2/4/8/16 engine-request validation. Both passed.
  • Preflight Git status was empty at 619f1e53; only the tracked candidate merge log/receipt and external gitignored composite were created. No local model call, capability score, benchmark access, or aggregate event ran.

Next: publish and CI-verify this candidate merge. Then run only the already frozen three-arm local event; aggregate access remains sealed unless every preregistered promotion gate passes.

2026-07-14 — Fresh local gate rejects prefix repair

  • Published rebased candidate-deployment checkpoint a12e4758 directly to main; Validate Repository run 29355954273 and Publish Research Site run 29355954309 both passed.
  • From that clean origin-aligned SHA, ran exactly one --stage local event. All arms used the pinned experiment-local vLLM 0.24.0 runner, explicit merged composites, natural thinking, greedy n=1, seed 88,009, 1,024 output tokens, 4,096 context, 16 sequences, 8,192 batched tokens, and CUDA graphs 1/2/4/8/16.
  • Parent/replay/candidate completed 26/26 rows and sampled 11,255 / 12,682 / 11,769 tokens. They scored 16/18/15 correct, 24/23/23 parsed, and 2/3/3 cap contacts. Execute+induct+probe subtotals were 2/1/0 of six; candidate was 0/2 on each target kind.
  • Candidate failed accuracy, parse, cap, execute, induct, and probe checks plus all four strict relative checks. Paired versus replay, it won one task, lost four, retained 14 shared wins, and shared seven misses. No per-kind count improved; order, probe, and trace each lost one.
  • Preserved local/promotion hashes b4b333ca...b8c8 / 1e048e75...f5c plus raw output/metadata/log hashes for every arm. Independent promotion recomputation and all nine raw hashes passed. The wrapper's exit 1 is the preregistered failure signal, not an infrastructure error.
  • benchmark_data_read=false, promotion is empty, no benchmark process ran, and aggregate seed 78,139 remains sealed.

Conclusion: terminal mechanism negative. Long masked on-policy failure-prefix continuations do not beat more replay under equal forward compute. Because the candidate also has 33,421 fewer supervised target tokens, retire this complete recipe without claiming that all on-policy correction is impossible. The next result-separated trial should move the intervention to short pre-failure decisions and match target exposure.

Reproduce

Smoke test

PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -B experiments/qwen35_4b_universal_on_policy_prefix_repair_token_match/scripts/run.py --smoke

Full run

none: terminal local negative; verify the preserved event with smoke_command and use a new experiment for follow-up work

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

Browse the experiment folder on GitHub ↗