Research log Small Model Experimentation
GitHub

Qwen Readable Candidate Verifier

Giving the model more detail made it worse

The one idea you need

A repair tool hands you 64 candidate fixes for one broken program, each written as plain pseudocode with the answer it claims to produce. The test: can a small model, never told the real answer, spot the fix that actually works?

The question

If you show a small model several candidate code fixes written as readable pseudocode with their claimed outputs, can it reliably pick the one that actually works?

What we found

Barely. Training a picker on the model's reading of each fix's pseudocode plus its claimed output raised the share of tasks fixed correctly from 44% to 51%, closing only about 15% of the distance to a perfect picker's 90%. And piling on detail backfired: handing the model a step-by-step execution trace crashed accuracy from 50% down to 8%, far worse than doing nothing.

Why it matters

When ranking code fixes with a small model, keep what it reads lean: plain pseudocode plus the claimed output works best, while full execution traces flood its attention and mislead. Add a safety fallback so weak picks default to leaving the program unchanged.

Doing nothing vs the best picker44% → 51%share of broken tasks fixed correctly
A perfect picker's ceiling90%if it always chose a working fix from the full pool
Adding a step-by-step execution trace50% → 8%accuracy once the trace was shown, not just pseudocode
Naive majority voteabout 10%picking the answer most fixes agreed on
On this page
  1. Results at a glance
  2. Overview
  3. Report
    1. Summary
    2. Setup
    3. Candidate Coverage
    4. Standard L24 Gate
    5. Easy/Hard Standard L24 Readout
    6. Split Results
    7. Held-Out Source Readout
    8. Training Dynamics
    9. Interpretation
    10. Artifacts
  4. Experiment log
  5. Figures
  6. Data files
  7. Reproduce
  8. Related

Results at a glance 7

How often each method picks a working fix

How to read

Bars show the share of broken programs each method fixes correctly; taller is better. Left to right: doing nothing, majority vote on claimed answers, plain reading of the two programs, the trained picker, then two perfect-choice ceilings (best in the shortlist, best in the full pool).

0%25%50%75%100%no repair (base)no repair (base)44.4%majority vote on claimed answersmajority vote on claimed answers9.7%frozen equivalence readingfrozen equivalence reading50%trained head + gate (best)trained head + gate (best)51.4%shortlist oracleshortlist oracle75%full-pool oraclefull-pool oracle90.3%

Takeaway → The trained-picker bar sits just above the do-nothing bar and far below both ceilings, so reading the fixes helps only a sliver.

Data table
selectoraccuracy
no repair (base)44.4%
majority vote on claimed answers9.7%
frozen equivalence reading50%
trained head + gate (best)51.4%
shortlist oracle75%
full-pool oracle90.3%

Numbers from report table (Standard L24 Gate), reports/qwen_readable_candidate_verifier_report.md

Technical framing

Can a frozen-Qwen reader pick the right repair candidate? (standard split) — The best non-oracle selector beats no-repair by only 7pp (51.4% vs 44.4%), capturing 15% of the oracle gap — reading works, but weakly.

Giving the reader more detail, and its accuracy

How to read

Each bar is the model's accuracy as it is fed more, from just the two programs on the left, through adding the claimed answer, a full execution trace, a scrambled trace, the answer alone, or the fix alone; taller is better.

0%20%40%60%task + candidate programs (equivalence)task + candidate programs (equiva…50%+ claimed final value+ claimed final value29.2%+ full execution trace+ full execution trace8.3%+ corrupted trace+ corrupted trace1.4%claimed value only (no programs)claimed value only (no programs)2.8%candidate onlycandidate only0%

Takeaway → Bars fall off a cliff from about half correct to near zero, so extra detail distracts the model rather than informing it.

Data table
information given to the frozen readerfrozen-Qwen selector accuracy
task + candidate programs (equivalence)50%
+ claimed final value29.2%
+ full execution trace8.3%
+ corrupted trace1.4%
claimed value only (no programs)2.8%
candidate only0%

Numbers from report table (Standard L24 Gate), reports/qwen_readable_candidate_verifier_report.md

Technical framing

More readable context hurts: what the frozen reader sees vs accuracy — Adding claimed values and execution traces makes the frozen reader worse, collapsing from 50% to near 0% — extra text distracts, not informs.

Trained picker vs doing nothing vs perfect choice, across test sets

How to read

Grouped bars for each test set: doing nothing, the trained picker, and the best-possible pick from the shortlist; taller is better. Compare the middle bar against the left one within each group.

0%25%50%75%100%standardstandard44.4%51.4%75%held-outheld-out37.5%44.4%65.3%pairedpaired62.5%68.1%81.9%paired held-outpaired held-out38.9%47.2%65.3%paraphraseparaphrase84.7%84.7%94.4%

Takeaway → The trained picker meets or beats doing nothing in every set yet never reaches the perfect-choice bar, a small but consistent gain.

Data table
evaluation splitno repair (base)trained head + gateshortlist oracle
standard44.4%51.4%75%
held-out37.5%44.4%65.3%
paired62.5%68.1%81.9%
paired held-out38.9%47.2%65.3%
paraphrase84.7%84.7%94.4%

Numbers from report table (Split Results, seed 101), reports/qwen_readable_candidate_verifier_report.md

Technical framing

Gated trained selector vs baseline and oracle across evaluation splits — The gated selector improves or matches base on every split without damaging correct programs, but stays far below the shortlist oracle.

Training error: real answers vs scrambled answers

How to read

Lines track training error over repeated passes through the data; lower is better. Separate lines compare the reader trained on real labels against one trained on scrambled, meaningless labels.

02462468Qwen head (shuffled labels)Qwen head (shuffl…Trace transformerQwen head (real labels)Qwen head (real l…Feature MLP

Takeaway → Real-label lines slope downward while the scrambled line stays flat and high, showing the picker learns genuine signal rather than noise.

Data table
EpochFeature MLPQwen head (real labels)Trace transformerQwen head (shuffled labels)
12.142.051.563.79
20.8671.251.53.81
30.6271.191.393.67
40.4480.8721.463.81
50.3191.281.493.66
60.2061.041.43.81
70.1071.071.363.76
80.06170.711.443.71

Numbers from experiments/qwen_readable_candidate_verifier/reports/training_log.csv (seed 101)

Technical framing

Training loss: real labels learn, shuffled labels never do — Loss drops steadily with real labels but stays flat near 3.7 when labels are shuffled: the head is learning genuine candidate signal.

Which task batch you test on matters more than the picker

How to read

Grouped bars for three task-generator batches: doing nothing, the best pick from the shortlist, and the best pick from the full pool; taller is better.

0%25%50%75%100%source seed 123source seed 1230%41.7%79.2%source seed 456source seed 45641.7%87.5%95.8%source seed 789source seed 78991.7%95.8%95.8%

Takeaway → Do-nothing accuracy swings from zero to over 90% across batches, so nearly all the room to improve is concentrated in one batch.

Data table
Task generator seed (standard split)No repair (base)Oracle within shortlistOracle over full pool
source seed 1230%41.7%79.2%
source seed 45641.7%87.5%95.8%
source seed 78991.7%95.8%95.8%

Numbers from experiments/qwen_readable_candidate_verifier/reports/metrics.csv (standard_L24, difficulty=all rows)

Technical framing

Which generator seed you test on matters more than the selector — Per-seed spread is huge: base accuracy runs 0% to 92% across generator seeds, so headroom for repair is concentrated in seed 123.

A safety fallback cuts damage while keeping most fixes

How to read

Paired bars for six pickers: one bar for how often it breaks an already-correct program, one for how often it fixes a broken one. Lower breakage and higher fixing are better.

0%25%50%75%100%Task-value (frozen)Task-value (frozen)93.8%0%Task-value gatedTask-value gated21.9%0%Program+final (frozen)Program+final (frozen)40.6%5%Program+final gatedProgram+final gated3.1%2.5%Trained Qwen headTrained Qwen head9.4%12.5%Trained head gatedTrained head gated0%12.5%

Takeaway → Adding the fallback slashes breakage toward zero while the trained picker keeps most of its fixing, so gating buys safety cheaply.

Data table
Selector arm (standard split)Damage rate (breaks correct programs)Recovery rate (fixes wrong programs)
Task-value (frozen)93.8%0%
Task-value gated21.9%0%
Program+final (frozen)40.6%5%
Program+final gated3.1%2.5%
Trained Qwen head9.4%12.5%
Trained head gated0%12.5%

Numbers from report table (reports/qwen_readable_candidate_verifier_report.md, Standard L24 Gate)

Technical framing

Gating buys safety: damage collapses while recovery mostly survives — Validation-tuned gating cuts damage from 94% to 22% (and 9% to 0% for the trained head) while the trained head keeps its 12.5% recovery.

Scrambling the answers destroys the picker

How to read

Bars for doing nothing, the trained picker, and the same picker trained on scrambled answers, shown for two test sets; taller is better.

0%25%50%75%100%No repair (base)No repair (base)44.4%91.7%Trained Qwen headTrained Qwen head47.2%87.5%Same head, shuffled labelsSame head, shuffled labels26.4%37.5%

Takeaway → Training on scrambled answers drops accuracy well below doing nothing on both sets, proving the picker relies on real signal.

Data table
ArmStandard splitHeld-out source
No repair (base)44.4%91.7%
Trained Qwen head47.2%87.5%
Same head, shuffled labels26.4%37.5%

Numbers from report table (reports/qwen_readable_candidate_verifier_report.md, Standard L24 Gate and Held-Out Source Readout, seed 101)

Technical framing

Shuffled-label control: the trained head uses real signal, not artifacts — Training on shuffled labels drops accuracy far below the no-repair baseline on both evaluations, confirming the learned signal is real.

In the author’s words from the Report · “Summary”

On standard_L24, the best non-oracle selector was qwen_program_final_gated at 51.4% accuracy and 15.2% oracle-gap capture versus 44.4% for no repair. The best mean ranking AUC on standard_L24 was feature_mlp at 0.799. Frozen program-equivalence reading reached 50.0% accuracy with AUC 0.677; adding full trace text dropped to 8.3% with AUC 0.620, while corrupted trace dropped to 1.4% with AUC 0.486.

Overview

Standalone experiment for testing whether Qwen can select executable repair candidates when the task and candidate are rendered as readable pseudocode and execution text.

Large embeddings, checkpoints, and run artifacts live outside this directory:

/workspace/large_artifacts/qwen_readable_candidate_verifier/

Reports

  • Markdown: reports/qwen_readable_candidate_verifier_report.md
  • HTML: reports/qwen_readable_candidate_verifier_report.html
  • Figures: reports/figures/

Report

Rendered from reports/qwen_readable_candidate_verifier_report.md

Summary

This standalone experiment tests whether a Qwen reader can select executable repair candidates when the task and candidate are rendered as readable pseudocode, claimed final values, and optional execution traces. Learned selectors are trained only from offline labels; at inference they do not receive the target answer or target state.

On standard_L24, the best non-oracle selector was qwen_program_final_gated at 51.4% accuracy and 15.2% oracle-gap capture versus 44.4% for no repair.

The best mean ranking AUC on standard_L24 was feature_mlp at 0.799.

Frozen program-equivalence reading reached 50.0% accuracy with AUC 0.677; adding full trace text dropped to 8.3% with AUC 0.620, while corrupted trace dropped to 1.4% with AUC 0.486.

Setup

  • Base reader: Qwen/Qwen3-4B.

  • Candidate shortlist size: 64.

  • Held-out source seed: 789.

  • Train groups per non-held-out source: 32; validation groups per non-held-out source: 12; eval groups per source/split: 24.

  • Frozen readable modes: task_value,program_equiv,program_final,program_trace,trace_corrupt,candidate_only,prompt_only.

  • Trained Qwen head modes: program_final.

Selectors:

  • base: no repair.

  • oracle_full: best answer-correct candidate in the full candidate pool.

  • oracle_shortlist: best answer-correct candidate in the deployable shortlist.

  • majority_answer: chooses the most common claimed final value in the shortlist.

  • zero_task_value: frozen Qwen reads the task program and scores candidates by the logit of each candidate's claimed final value.

  • zero_program_equiv: frozen Qwen reads task program and candidate program, then answers whether they return the same value.

  • zero_program_final: frozen Qwen reads task program, candidate program, and candidate claimed final value.

  • zero_program_trace: frozen Qwen also receives a readable execution trace.

  • zero_trace_corrupt: same as trace mode but with corrupted state order.

  • qwen_<mode>: learned groupwise ranking head over frozen Qwen embeddings for that readable mode.

  • _gated: validation-tuned base fallback for the corresponding score.

  • Additional controls: prompt-only, candidate-only, feature-only, trace-only, and shuffled-label arms.

Candidate Coverage

splitgroupsavg_full_candidatesavg_shortlistavg_target_answer_countavg_target_answer_marginbase_accuracyshortlist_oracle_accuracyfull_oracle_accuracyshortlist_oracle_capture
heldout_L2472177641.208-2.66737.5%65.3%84.7%77.0%
paired_L2472177641.222-2.22262.5%81.9%94.4%86.8%
paired_heldout_L2472177641.042-2.44438.9%65.3%88.9%73.4%
paraphrase_L2472177641.75-1.86184.7%94.4%98.6%95.8%
standard_L2472177641.431-2.47244.4%75.0%90.3%83.1%
train_mixed_L2464177641.75-1.7581.2%96.9%100.0%96.9%
val_mixed_L2424177641.167-2.58375.0%83.3%91.7%90.9%

Coverage by source seed

Coverage by difficulty

Standard L24 Gate

armmean_accuracymean_gap_capturemean_aucmean_changedmean_damagemean_recovery
base44.4%0.0%n/a000
feature_mlp44.4%0.0%0.799000
majority_answer9.7%-75.8%n/a0.8750.7810
oracle_full90.3%100.0%n/a0.45800.825
oracle_shortlist75.0%66.7%n/a0.30600.55
qwen_program_final47.2%6.1%0.6690.5690.0940.125
qwen_program_final_gated51.4%15.2%0.6690.29900.125
qwen_program_final_shuffled26.4%-39.4%0.6620.7710.5160.087
trace_transformer44.4%0.0%0.689000
zero_candidate_only0.0%-97.0%0.477110
zero_candidate_only_gated36.1%-18.2%0.4770.1390.1880
zero_program_equiv50.0%12.1%0.6770.48600.1
zero_program_equiv_gated50.0%12.1%0.6770.48600.1
zero_program_final29.2%-33.3%0.6480.6940.4060.05
zero_program_final_gated44.4%0.0%0.6480.0560.0310.025
zero_program_trace8.3%-78.8%0.6200.9170.9060.075
zero_program_trace_gated44.4%0.0%0.620000
zero_prompt_only44.4%0.0%0.500000
zero_prompt_only_gated44.4%0.0%0.500000
zero_task_value2.8%-90.9%0.4620.9720.9380
zero_task_value_gated34.7%-21.2%0.4620.1390.2190
zero_trace_corrupt1.4%-93.9%0.48610.9690
zero_trace_corrupt_gated44.4%0.0%0.4860.02800

Standard accuracy

Standard gap capture

Easy/Hard Standard L24 Readout

difficultyarmseednaccuracygap_captureranking_aucchanged_fractiondamage_raterecovery_rate
easybase-11100.0%n/an/a0.0%0.0%n/a
hardbase-17143.7%0.0%n/a0.0%0.0%0.0%
easyoracle_shortlist-11100.0%n/an/a0.0%0.0%n/a
hardoracle_shortlist-17174.6%66.7%n/a31.0%0.0%55.0%
easymajority_answer-11100.0%n/an/a0.0%0.0%n/a
hardmajority_answer-1718.5%-75.8%n/a88.7%80.6%0.0%
easyzero_task_value-110.0%n/a0.220100.0%100.0%n/a
hardzero_task_value-1712.8%-87.9%0.46797.2%93.5%0.0%
easyzero_program_final-11100.0%n/a0.7630.0%0.0%n/a
hardzero_program_final-17128.2%-33.3%0.64670.4%41.9%5.0%
easyzero_program_trace-110.0%n/a0.780100.0%100.0%n/a
hardzero_program_trace-1718.5%-75.8%0.61791.5%90.3%7.5%
easyzero_trace_corrupt-110.0%n/a0.819100.0%100.0%n/a
hardzero_trace_corrupt-1711.4%-90.9%0.480100.0%96.8%0.0%
easyqwen_program_final1011100.0%n/a0.7150.0%0.0%n/a
hardqwen_program_final1017146.5%6.1%0.67057.7%9.7%12.5%
easyqwen_program_final_gated1011100.0%n/a0.7150.0%0.0%n/a
hardqwen_program_final_gated1017150.7%15.2%0.67029.6%0.0%12.5%
easyqwen_program_final2021100.0%n/a0.7220.0%0.0%n/a
hardqwen_program_final2027146.5%6.1%0.66657.7%9.7%12.5%
easyqwen_program_final_gated2021100.0%n/a0.7220.0%0.0%n/a
hardqwen_program_final_gated2027150.7%15.2%0.66631.0%0.0%12.5%

Split Results

splitarmseedaccuracygap_captureranking_aucchanged_fractiondamage_raterecovery_rate
heldout_L24base-137.5%0.0%n/a0.0%0.0%0.0%
paired_L24base-162.5%0.0%n/a0.0%0.0%0.0%
paired_heldout_L24base-138.9%0.0%n/a0.0%0.0%0.0%
paraphrase_L24base-184.7%0.0%n/a0.0%0.0%0.0%
standard_L24base-144.4%0.0%n/a0.0%0.0%0.0%
heldout_L24oracle_full-184.7%100.0%n/a47.2%0.0%75.6%
paired_L24oracle_full-194.4%100.0%n/a31.9%0.0%85.2%
paired_heldout_L24oracle_full-188.9%100.0%n/a50.0%0.0%81.8%
paraphrase_L24oracle_full-198.6%100.0%n/a13.9%0.0%90.9%
standard_L24oracle_full-190.3%100.0%n/a45.8%0.0%82.5%
heldout_L24oracle_shortlist-165.3%58.8%n/a27.8%0.0%44.4%
paired_L24oracle_shortlist-181.9%60.9%n/a19.4%0.0%51.9%
paired_heldout_L24oracle_shortlist-165.3%52.8%n/a26.4%0.0%43.2%
paraphrase_L24oracle_shortlist-194.4%70.0%n/a9.7%0.0%63.6%
standard_L24oracle_shortlist-175.0%66.7%n/a30.6%0.0%55.0%
heldout_L24majority_answer-19.7%-58.8%n/a80.6%74.1%0.0%
paired_L24majority_answer-19.7%-165.2%n/a87.5%84.4%0.0%
paired_heldout_L24majority_answer-19.7%-58.3%n/a86.1%82.1%4.5%
paraphrase_L24majority_answer-19.7%-540.0%n/a90.3%88.5%0.0%
standard_L24majority_answer-19.7%-75.8%n/a87.5%78.1%0.0%
heldout_L24zero_task_value-10.0%-79.4%0.58198.6%100.0%0.0%
paired_L24zero_task_value-15.6%-178.3%0.52795.8%97.8%11.1%
paired_heldout_L24zero_task_value-10.0%-77.8%0.58898.6%100.0%0.0%
paraphrase_L24zero_task_value-10.0%-610.0%0.533100.0%100.0%0.0%
standard_L24zero_task_value-12.8%-90.9%0.46297.2%93.8%0.0%
heldout_L24zero_task_value_gated-136.1%-2.9%0.5816.9%3.7%0.0%
paired_L24zero_task_value_gated-159.7%-8.7%0.5276.9%4.4%0.0%
paired_heldout_L24zero_task_value_gated-136.1%-5.6%0.58811.1%7.1%0.0%
paraphrase_L24zero_task_value_gated-170.8%-100.0%0.53320.8%16.4%0.0%
standard_L24zero_task_value_gated-134.7%-21.2%0.46213.9%21.9%0.0%
heldout_L24zero_program_equiv-144.4%14.7%0.75158.3%3.7%13.3%
paired_L24zero_program_equiv-162.5%0.0%0.82437.5%8.9%14.8%
paired_heldout_L24zero_program_equiv-145.8%13.9%0.74556.9%3.6%13.6%
paraphrase_L24zero_program_equiv-184.7%0.0%0.7339.7%0.0%0.0%
standard_L24zero_program_equiv-150.0%12.1%0.67748.6%0.0%10.0%
heldout_L24zero_program_final-136.1%-2.9%0.73865.3%22.2%11.1%
paired_L24zero_program_final-152.8%-30.4%0.78647.2%20.0%7.4%
paired_heldout_L24zero_program_final-122.2%-33.3%0.69876.4%50.0%4.5%
paraphrase_L24zero_program_final-136.1%-350.0%0.66359.7%57.4%0.0%
standard_L24zero_program_final-129.2%-33.3%0.64869.4%40.6%5.0%
heldout_L24zero_program_final_gated-140.3%5.9%0.7385.6%0.0%4.4%
paired_L24zero_program_final_gated-163.9%4.3%0.7862.8%0.0%3.7%
paired_heldout_L24zero_program_final_gated-140.3%2.8%0.6986.9%0.0%2.3%
paraphrase_L24zero_program_final_gated-181.9%-20.0%0.6632.8%3.3%0.0%
standard_L24zero_program_final_gated-144.4%0.0%0.6485.6%3.1%2.5%
heldout_L24zero_program_trace-19.7%-58.8%0.71288.9%81.5%4.4%
paired_L24zero_program_trace-112.5%-156.5%0.65287.5%82.2%3.7%
paired_heldout_L24zero_program_trace-15.6%-66.7%0.64091.7%85.7%0.0%
paraphrase_L24zero_program_trace-111.1%-530.0%0.65587.5%86.9%0.0%
standard_L24zero_program_trace-18.3%-78.8%0.62091.7%90.6%7.5%
heldout_L24zero_program_trace_gated-137.5%0.0%0.7120.0%0.0%0.0%
paired_L24zero_program_trace_gated-162.5%0.0%0.6520.0%0.0%0.0%
paired_heldout_L24zero_program_trace_gated-138.9%0.0%0.6400.0%0.0%0.0%
paraphrase_L24zero_program_trace_gated-184.7%0.0%0.6550.0%0.0%0.0%
standard_L24zero_program_trace_gated-144.4%0.0%0.6200.0%0.0%0.0%
heldout_L24zero_trace_corrupt-15.6%-67.6%0.58294.4%88.9%2.2%
paired_L24zero_trace_corrupt-10.0%-195.7%0.444100.0%100.0%0.0%
paired_heldout_L24zero_trace_corrupt-11.4%-75.0%0.52097.2%96.4%0.0%
paraphrase_L24zero_trace_corrupt-11.4%-600.0%0.47198.6%98.4%0.0%
standard_L24zero_trace_corrupt-11.4%-93.9%0.486100.0%96.9%0.0%
heldout_L24qwen_program_final10143.1%11.8%0.75251.4%3.7%11.1%
paired_L24qwen_program_final10166.7%13.0%0.80230.6%2.2%14.8%
paired_heldout_L24qwen_program_final10144.4%11.1%0.74258.3%7.1%13.6%
paraphrase_L24qwen_program_final10179.2%-40.0%0.74118.1%6.6%0.0%
standard_L24qwen_program_final10147.2%6.1%0.67156.9%9.4%12.5%
heldout_L24qwen_program_final_gated10144.4%14.7%0.75220.8%0.0%11.1%
paired_L24qwen_program_final_gated10168.1%17.4%0.80216.7%0.0%14.8%
paired_heldout_L24qwen_program_final_gated10147.2%16.7%0.74231.9%0.0%13.6%
paraphrase_L24qwen_program_final_gated10184.7%0.0%0.7412.8%0.0%0.0%
standard_L24qwen_program_final_gated10151.4%15.2%0.67129.2%0.0%12.5%
heldout_L24qwen_program_final20243.1%11.8%0.75651.4%3.7%11.1%
paired_L24qwen_program_final20266.7%13.0%0.79729.2%2.2%14.8%
paired_heldout_L24qwen_program_final20243.1%8.3%0.74659.7%7.1%11.4%
paraphrase_L24qwen_program_final20279.2%-40.0%0.73918.1%6.6%0.0%
standard_L24qwen_program_final20247.2%6.1%0.66756.9%9.4%12.5%
heldout_L24qwen_program_final_gated20244.4%14.7%0.75623.6%0.0%11.1%
paired_L24qwen_program_final_gated20268.1%17.4%0.79718.1%0.0%14.8%
paired_heldout_L24qwen_program_final_gated20245.8%13.9%0.74630.6%0.0%11.4%
paraphrase_L24qwen_program_final_gated20284.7%0.0%0.7392.8%0.0%0.0%
standard_L24qwen_program_final_gated20251.4%15.2%0.66730.6%0.0%12.5%

Accuracy by split

Held-Out Source Readout

armseedaccuracybase_accuracyoracle_accuracygap_captureranking_aucchanged_fractiondamage_raterecovery_rate
base-191.7%91.7%95.8%0.0%n/a0.0%0.0%0.0%
oracle_full-195.8%91.7%95.8%100.0%n/a4.2%0.0%50.0%
oracle_shortlist-195.8%91.7%95.8%100.0%n/a4.2%0.0%50.0%
majority_answer-112.5%91.7%95.8%-1900.0%n/a87.5%86.4%0.0%
zero_task_value-14.2%91.7%95.8%-2100.0%0.44895.8%95.5%0.0%
zero_task_value_gated-175.0%91.7%95.8%-400.0%0.44816.7%18.2%0.0%
zero_program_equiv-195.8%91.7%95.8%100.0%0.7708.3%0.0%50.0%
zero_program_equiv_gated-195.8%91.7%95.8%100.0%0.7708.3%0.0%50.0%
zero_program_final-154.2%91.7%95.8%-900.0%0.71845.8%40.9%0.0%
zero_program_final_gated-187.5%91.7%95.8%-100.0%0.7184.2%4.5%0.0%
zero_program_trace-112.5%91.7%95.8%-1900.0%0.63487.5%86.4%0.0%
zero_program_trace_gated-191.7%91.7%95.8%0.0%0.6340.0%0.0%0.0%
zero_trace_corrupt-10.0%91.7%95.8%-2200.0%0.513100.0%100.0%0.0%
zero_trace_corrupt_gated-191.7%91.7%95.8%0.0%0.5134.2%0.0%0.0%
zero_candidate_only-10.0%91.7%95.8%-2200.0%0.448100.0%100.0%0.0%
zero_candidate_only_gated-175.0%91.7%95.8%-400.0%0.44816.7%18.2%0.0%
zero_prompt_only-191.7%91.7%95.8%0.0%0.5000.0%0.0%0.0%
zero_prompt_only_gated-191.7%91.7%95.8%0.0%0.5000.0%0.0%0.0%
feature_mlp10191.7%91.7%95.8%0.0%0.9890.0%0.0%0.0%
trace_transformer10191.7%91.7%95.8%0.0%0.7940.0%0.0%0.0%
qwen_program_final10187.5%91.7%95.8%-100.0%0.76916.7%9.1%50.0%
qwen_program_final_gated10195.8%91.7%95.8%100.0%0.7698.3%0.0%50.0%
qwen_program_final_shuffled10137.5%91.7%95.8%-1300.0%0.72062.5%59.1%0.0%
feature_mlp20291.7%91.7%95.8%0.0%0.9930.0%0.0%0.0%
trace_transformer20291.7%91.7%95.8%0.0%0.8280.0%0.0%0.0%
qwen_program_final20287.5%91.7%95.8%-100.0%0.76916.7%9.1%50.0%
qwen_program_final_gated20295.8%91.7%95.8%100.0%0.7698.3%0.0%50.0%
qwen_program_final_shuffled20262.5%91.7%95.8%-700.0%0.76637.5%31.8%0.0%

Training Dynamics

armseedepochtrain_lossval_accuracyval_damage_rateval_recovery_rateval_utility
qwen_program_final_shuffled10183.7110.0%100.0%0.0%-0.75
qwen_program_final10180.7175.0%5.6%16.7%0.75
feature_mlp10180.06275.0%0.0%0.0%0.75
trace_transformer10181.43575.0%0.0%0.0%0.75
trace_transformer20281.37275.0%0.0%0.0%0.75
feature_mlp20280.06775.0%0.0%0.0%0.75
qwen_program_final20280.91875.0%5.6%16.7%0.75
qwen_program_final_shuffled20283.6570.0%100.0%0.0%-0.75

Interpretation

The decisive measurement is not raw accuracy alone. The report separates candidate coverage from selector capture, because a selector cannot choose a correct program that is absent from its candidate shortlist. A useful selector should capture a stable fraction of the available oracle gap, rank correct candidates above wrong candidates, make nontrivial repairs, and avoid damaging already-correct base programs. Easy and hard rows test whether failures are caused by representation readability or by candidate sets where the target answer is not distinguishable from simple shortlist statistics. In this run the easy/hard split is itself diagnostic: only one standard_L24 group was easy under the claimed-output frequency criterion, so most of the evaluated repair decisions sit in the hard regime.

Artifacts

Experiment log 11

Show the running log (11 entries, 2026-06-25)

Objective

Test whether a frozen or lightly trained Qwen reader can select correct repair candidates when candidates are rendered as readable task code, candidate code, claimed final values, and optional execution traces. The target answer and target state are never provided to the verifier at inference.

Design Commitments

  • Fresh experiment directory: experiments/qwen_readable_candidate_verifier/.
  • Large artifacts separated under: large_artifacts/qwen_readable_candidate_verifier/.
  • Candidate pool and task reconstruction are deterministic.
  • Main report is standalone and does not require external experiment context.
  • Report both ungated and validation-gated decisions.
  • Report selector accuracy, oracle-gap capture, shortlist-oracle capture, ranking AUC, changed fraction, damage rate, and recovery rate.
  • Include readable trace-field ablations: task-value, program equivalence, program plus claimed final, program plus full trace, trace-corrupted, candidate-only, prompt-only, and majority-by-claimed-output controls.
  • Split selector quality by easy versus hard candidate groups, where difficulty is determined by how many shortlist candidates share the target answer.

Iterations

2026-06-25 Scaffold

Created the standalone directory, large-artifact directories, README, and experiment log.

2026-06-25 Smoke Iteration 1

Ran smoke_qwen_readable_candidate_verifier_v1 with readable task/candidate rendering, frozen Qwen scoring, one trained Qwen head, feature/trace controls, charts, Markdown, and HTML report generation.

The smoke path completed, but the primary value-recompute arm used a first-token numeric approximation. Qwen's tokenizer split all residue strings in this setup, which collapsed zero_task_value into an uninformative score. I patched the runner to score exact numeric continuation log-likelihood over all residues instead.

2026-06-25 Smoke Iteration 2

Ran smoke_qwen_readable_candidate_verifier_v2 with rebuilt embeddings and exact continuation scoring for task_value.

Smoke result on standard_L24:

  • Base no-repair: 41.7%.
  • Shortlist oracle: 50.0%; full-pool oracle: 100.0%.
  • zero_task_value: 0.0%, ranking AUC 0.381, fully destructive on the tiny sample.
  • zero_program_final, zero_program_trace, zero_trace_corrupt, and qwen_program_final: tied base with ranking AUC 0.500.
  • Feature and trace controls showed high AUC on the tiny sample but did not improve commit accuracy.

Smoke verified the data path, exact value scoring, trained-head path, easy/hard metrics, charts, and report generation.

2026-06-25 Main Iteration 1

Started main_qwen_readable_candidate_verifier_v1 with all readable modes, shortlist size 64, two critic seeds, and max_length=1024.

The exact task_value mode completed and cached, but prompt-length inspection showed that full-trace prompts are about 1,400 tokens. A 1,024-token context would truncate the trace arms, so I interrupted during program_equiv and reran with a larger context.

Measured readable token lengths on the main selected set:

  • task_value: max about 506 tokens.
  • program_equiv: max about 990 tokens.
  • program_final: max about 1,000 tokens.
  • program_trace: max about 1,402 tokens.
  • trace_corrupt: max about 1,406 tokens.
  • candidate_only: max about 515 tokens.
  • prompt_only: max about 505 tokens.

2026-06-25 Main Iteration 2

Started main_qwen_readable_candidate_verifier_v2 with max_length=1536, loading the completed task_value cache. program_equiv and program_final completed and cached. The full-trace hidden-state embedding path was too slow for a practical complete run, so I interrupted before finishing program_trace.

2026-06-25 Main Iteration 3

Patched the runner so modes not listed in --train_qwen_modes are scored as zero-only Qwen yes/no arms instead of full hidden-state embedding arms. This keeps the trace and corrupted-trace controls while avoiding unnecessary learned embedding caches. I first set train_qwen_modes=program_final.

The first v3 attempt revealed a control-flow bug: zero-only stores were being overwritten by the old hidden-state branch. I fixed the branch and also changed final-token yes/no scoring to call the base model and apply lm_head only to the final hidden state, avoiding full-sequence vocabulary logits.

2026-06-25 Main Iteration 4

Reran after the scorer optimization. The optimized scorer reduced memory use substantially, so I interrupted early and restarted with a larger Qwen batch size.

2026-06-25 Main Iteration 5

Completed main_qwen_readable_candidate_verifier_v5 with:

  • embedding_run_name=main_qwen_readable_candidate_verifier_v1
  • max_length=1536
  • qwen_batch_size=64
  • train_qwen_modes=program_final
  • two critic seeds: 101 and 202

Runtime for the completed v5 run was 9,380.221 seconds. Large caches were written under large_artifacts/qwen_readable_candidate_verifier/embeddings.

Main result on standard_L24:

  • Base no-repair: 44.4%.
  • Shortlist oracle: 75.0%; full-pool oracle: 90.3%.
  • Majority-by-claimed-output: 9.7%, destructive.
  • Frozen zero_program_equiv: 50.0%, 12.1% oracle-gap capture, AUC 0.677.
  • Frozen zero_program_trace: 8.3%, destructive, AUC 0.620.
  • Frozen zero_trace_corrupt: 1.4%, destructive, AUC 0.486.
  • Trained qwen_program_final: 47.2%, 6.1% oracle-gap capture.
  • Validation-gated qwen_program_final: 51.4%, 15.2% oracle-gap capture, zero damage rate, 12.5% recovery rate.
  • Shuffled-label trained control was destructive on average.

Interpretation: readable program text does expose usable signal that was absent from the dense/compact candidate channel, but the gain is modest. Full readable trace text did not help; it made the frozen selector highly destructive, and corrupting the trace made it worse. The easy/hard split was mostly degenerate under the claimed-output frequency criterion: only one standard_L24 group was easy, so nearly all measured decisions were in the hard regime.

Figures 5

accuracy by split
accuracy by split · reports/figures/
coverage by difficulty
coverage by difficulty · reports/figures/
coverage by source seed
coverage by source seed · reports/figures/
standard accuracy by arm
standard accuracy by arm · reports/figures/
standard gap capture by arm
standard gap capture by arm · reports/figures/

Data files 15

Result tables and metrics copied from the experiment folder — preview inline or open the raw file.

Reproduce

This entry is source code or analysis only — there is no separate run to reproduce.

Browse the experiment folder on GitHub ↗