Research log Small Model Experimentation
GitHub

Counterexample-Guided Ephemeral Program

Clever test-picking tied random guessing; direct answers won

The one idea you need

A small model sees a few input-output examples, drafts several little rule-programs, then invents tricky inputs where the programs disagree and grades itself on them to crown a winner — like a cook-off decided by ever-harder taste tests, pointless when every dish is already spoiled.

The question

If a small model writes little rule-programs from a few examples, can inventing tricky test cases help it pick the one that truly works?

What we found

No. Answering each row directly solved three-quarters of tasks completely, while the best rule-program the method could pick solved only about four in ten — and a perfect picker that peeks at the answers did no better. The clever edge-case grading tied random cases and even meaningless shuffled labels. The real problem: usually no correct program existed to pick.

Why it matters

Before building elaborate selection or verification machinery, measure whether a correct candidate even exists among what your model generates. If a perfect picker still loses to the plain baseline, invest in better generation, not smarter ranking.

Answering rows directly vs. writing a rule75% → 42%whole tasks fully correct: direct answers vs. the best program the method could pick
A perfect picker that peeks at the answersstill 42%even flawless hindsight selection loses to direct answers
Tasks the program approach improved0 of 24no task got better; ungated programs broke up to 9
Clever probes vs. random vs. shuffled nonsenseall 42%three selection strategies scored identically
On this page
  1. Results at a glance
  2. Overview
  3. Report
    1. Question
    2. Setup
    3. Main Result
    4. Interpretation
    5. Charts
    6. Task Details
    7. Probe Labels
    8. Candidate Programs
    9. Family Breakdown
    10. Files
  4. Experiment log
  5. Figures
  6. Data files
  7. Reproduce
  8. Related

Results at a glance 8

Whole-task success: direct answering vs. program methods

How to read

Bars give whole-task success (every unseen row correct) for seven methods; taller is better. Direct row-by-row and the two fallback-gated program methods reach 75%; batch is 58%; the counterexample program and a perfect-hindsight picker sit at 42%; visible-only is lowest at 38%.

0%20%40%60%80%direct (row-by-row)direct (row-by-row)75%gated program+fallbackgated program+fallback75%router program+fallbackrouter program+fallback75%direct (batch)direct (batch)58.3%counterexample-guided programcounterexample-guided program41.7%hidden candidate oraclehidden candidate oracle41.7%visible-only programvisible-only program37.5%

Takeaway → Every program-only bar, including a picker that peeks at answers, sits far below direct answering; gated methods only tie by falling back.

Data table
methodfull-task exact
direct (row-by-row)75%
gated program+fallback75%
router program+fallback75%
direct (batch)58.3%
counterexample-guided program41.7%
hidden candidate oracle41.7%
visible-only program37.5%

Numbers from experiments/qwen_counterexample_guided_ephemeral_program/analysis/summary.csv

Technical framing

Full-task exact accuracy: direct inference vs program induction methods — Even a perfect selector over generated programs (oracle 41.7%) loses to direct inference at 75%; gated methods only tie by falling back.

Clever test-picking scores no better than random or nonsense

How to read

Bars show whole-task success for five ways of choosing a program; taller is better. Counterexample-guided probes, random probes, shuffled nonsense labels, and a perfect-hindsight picker all land at 42%; using visible examples alone is 38%.

0%20%40%60%counterexample-guided probescounterexample-guided probes41.7%random probesrandom probes41.7%shuffled probe labelsshuffled probe labels41.7%hidden candidate oraclehidden candidate oracle41.7%visible examples onlyvisible examples only37.5%

Takeaway → Four bars sit at identical height — the clever selector matches random and even meaningless labels — so the picking step is not what limits results.

Data table
selection strategyfull-task exact
counterexample-guided probes41.7%
random probes41.7%
shuffled probe labels41.7%
hidden candidate oracle41.7%
visible examples only37.5%

Numbers from experiments/qwen_counterexample_guided_ephemeral_program/analysis/summary.csv

Technical framing

Probe-based selection adds nothing over its own controls — CEG selection ties random and shuffled-label controls and the oracle at 41.7%: the candidate pool, not the selector, is the binding failure.

Accuracy climbs only as programs get used less

How to read

Two bars per method: whole-task success and the share of tasks that actually run a program; higher accuracy is better. As program usage falls from 63% to 21%, success climbs from 38% to 75%.

0%20%40%60%80%visible-only programvisible-only program37.5%62.5%counterexample-guided programcounterexample-guided program41.7%62.5%router + fallbackrouter + fallback75%29.2%gated + fallbackgated + fallback75%20.8%

Takeaway → Accuracy rises only as the method leans on its direct-answer fallback and abandons the programs — the programs add no wins of their own.

Data table
program methodfull-task exacttasks using a program
visible-only program37.5%62.5%
counterexample-guided program41.7%62.5%
router + fallback75%29.2%
gated + fallback75%20.8%

Numbers from experiments/qwen_counterexample_guided_ephemeral_program/analysis/summary.csv

Technical framing

Gating: using programs less often recovers direct-inference accuracy — Accuracy rises only as program usage falls toward the direct fallback; programs never produce a net task win over direct inference.

Tasks helped versus hurt against direct answering

How to read

Two bars per method count tasks made worse or better than direct answering, out of 24; fewer hurt and more helped is better. The helped bar is zero everywhere; hurt reaches 8 for the counterexample program and 9 for visible-only.

02.557.510gated programgated program00router programrouter program00direct (batch)direct (batch)40counterexample-guided programcounterexample-guided program80visible-only programvisible-only program90

Takeaway → No method helps a single task, while ungated programs break up to 9 of 24 — programs can only match or damage direct answering here.

Data table
methodtasks hurt vs direct (of 24)tasks helped vs direct (of 24)
gated program00
router program00
direct (batch)40
counterexample-guided program80
visible-only program90

Numbers from experiments/qwen_counterexample_guided_ephemeral_program/analysis/summary.csv

Technical framing

Tasks hurt versus direct inference, by method — No method helps on any of the 24 tasks; ungated program methods hurt on up to 9 tasks.

Which task families the programs break

How to read

Paired bars per task family give whole-task success for direct answering versus the counterexample program; taller is better. Direct solves most families cleanly but dips to 75% on DateTime and 33% on Number; the program drops City, EmergencyCall, Log, and Product to zero.

0%25%50%75%100%AbbreviationAbbreviation100%100%CityCity100%0%DateTimeDateTime75%50%EmergencyCallEmergencyCall100%0%LogLog100%0%NameName100%100%NumberNumber33.3%16.7%PhonePhone100%100%ProductProduct100%0%ShippingCodeShippingCode100%50%

Takeaway → Programs match direct answering only on Abbreviation, Name, and Phone and wipe out whole families direct solves cleanly — the failure is broad, not one odd task.

Data table
Task familyDirect row-by-row inferenceCounterexample-guided program
Abbreviation100%100%
City100%0%
DateTime75%50%
EmergencyCall100%0%
Log100%0%
Name100%100%
Number33.3%16.7%
Phone100%100%
Product100%0%
ShippingCode100%50%

Numbers from experiments/qwen_counterexample_guided_ephemeral_program/analysis/family_summary.csv

Technical framing

Where programs lose: full-task accuracy by task family — Programs match direct inference only on Name and Phone; they zero out whole families (City, EmergencyCall, Log, Product) direct solves.

Strict all-rows-correct scoring widens the gap

How to read

Two bars per method: lenient per-row success versus strict whole-task success (every row right); taller is better. Batch drops most, from 74% of rows to 58% of tasks; the program methods trail on both.

0%25%50%75%100%Direct row-by-rowDirect row-by-row82.3%75%Gated programGated program82.3%75%Direct batchDirect batch74%58.3%CEG programCEG program46.9%41.7%Visible-only programVisible-only program45.8%37.5%

Takeaway → Requiring every row correct penalizes batch and program methods most, pushing them well below direct row-by-row answering.

Data table
MethodPer-row exactWhole-task exact (all rows right)
Direct row-by-row82.3%75%
Gated program82.3%75%
Direct batch74%58.3%
CEG program46.9%41.7%
Visible-only program45.8%37.5%

Numbers from experiments/qwen_counterexample_guided_ephemeral_program/analysis/summary.csv

Technical framing

Strict whole-task scoring widens the gap between methods — Batch inference loses most when scoring requires every row correct (74% rows but 58% tasks); program methods trail on both metrics.

On broken tasks, almost no program even fits the examples

How to read

For the eight tasks the counterexample program hurt, one bar counts candidate programs generated (seven or eight each) and one counts how many fit the four visible examples; more passing is better. Seven tasks have zero passers.

02468City.000004City.00000471DateTime.000025DateTime.00002580DateTime.000033DateTime.00003380EmergencyCall.000004EmergencyCall.00000480Log.000020Log.00002080Number.000011Number.00001180Product.000002Product.00000280ShippingCode.000001ShippingCode.00000180

Takeaway → On 7 of 8 damaged tasks not one candidate fit even the visible rows, so no selection step could have rescued them — the failure is generation.

Data table
Tasks where CEG program hurt vs direct inferenceCandidates generatedCandidates passing visible training rows
City.00000471
DateTime.00002580
DateTime.00003380
EmergencyCall.00000480
Log.00002080
Number.00001180
Product.00000280
ShippingCode.00000180

Numbers from experiments/qwen_counterexample_guided_ephemeral_program/analysis/task_summary.csv

Technical framing

Hurt tasks fail at generation: candidates rarely fit the visible rows — On 7 of the 8 tasks programs hurt, zero candidates even fit the 4 visible rows, so no probe-based selection could have rescued them.

Self-grading agreement does not predict whether a program works

How to read

Bars show the chosen program's self-grading agreement score for four solved and four failed unseen tasks; a useful signal would be high on solved and low on failed. Instead all four failed tasks score 100% and a solved one scores 0%.

0%25%50%75%100%Abbrev.000001 (solved)Abbrev.000001 (solved)50%DateTime.000103 (solved)DateTime.000103 (solved)0%DateTime.000090 (solved)DateTime.000090 (solved)100%Name.000015 (solved)Name.000015 (solved)100%City.000004 (failed)City.000004 (failed)100%DateTime.000116 (failed)DateTime.000116 (failed)100%Number.000010 (failed)Number.000010 (failed)100%Number.000016 (failed)Number.000016 (failed)100%

Takeaway → High agreement shows up on failing programs and low agreement on a working one — the selection signal is uncalibrated and misleading.

Data table
Task (CEG program held-out outcome)Probe score of selected program
Abbrev.000001 (solved)50%
DateTime.000103 (solved)0%
DateTime.000090 (solved)100%
Name.000015 (solved)100%
City.000004 (failed)100%
DateTime.000116 (failed)100%
Number.000010 (failed)100%
Number.000016 (failed)100%

Numbers from experiments/qwen_counterexample_guided_ephemeral_program/analysis/task_summary.csv

Technical framing

Probe agreement score does not track held-out correctness — Selected programs score 100% probe agreement on four failed tasks and 0% on a solved one, so the probe signal is uncalibrated.

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

Negative for executable-program improvement: the hidden candidate oracle is 41.7%, below direct Qwen at 75.0%. This means the generated train-passing program set usually lacks a better candidate to select. The gated method ties direct at 75.0% by falling back on most tasks; it uses a program on 20.8% of tasks and produces no net task wins. The hidden candidate oracle reaches 41.7% full-task exact, below direct Qwen. That makes candidate reachability the binding failure: even a perfect selector over these generated programs would not improve the task set.

Overview

This standalone experiment tests whether a local language model can be made more task-consistent by inducing a task-local executable program and selecting it with synthetic disagreement probes.

Hypothesis

For public text-transformation tasks, direct row-by-row inference often has useful row-level semantic competence but can be inconsistent across held-out rows. A task-local executable program can provide consistency, but visible examples alone are too weak and can select brittle train-fitting programs. The experiment adds synthetic counterexample rows where candidate programs disagree, labels those rows with the model, and selects or routes candidate programs against the expanded label set.

Methods

  • direct_qwen_row: answer held-out rows independently from visible examples.
  • direct_qwen_batch: answer all held-out rows in one JSON generation.
  • program_visible: select the shortest generated program that passes visible examples.
  • program_ceg: select a visible-passing program that also matches model-labeled disagreement probes.
  • program_ceg_gated: use the selected program only when probe support is strong; otherwise fall back to direct row answers.
  • program_ceg_router: if no single candidate explains all visible and probe labels, fit a simple two-branch router over candidate programs.
  • Controls: random-probe selection and shuffled synthetic-probe labels.
  • Diagnostics: hidden candidate oracle and train-pass rate.

Metrics

The primary metric is strict full-task exact on held-out rows. A task counts only if every held-out row is exactly correct. Secondary metrics are row exact, number of train-passing candidates, selected-program probe score, synthetic-label consensus, and task-level wins/losses versus direct inference.

Artifacts

Generated outputs live under runs/<run_name>/, mirrored analysis tables under analysis/, charts under analysis/figures/, and reports under reports/. Large benchmark files are referenced from /workspace/large_artifacts/qwen_counterexample_guided_ephemeral_program.

Report

Rendered from reports/qwen_counterexample_guided_ephemeral_program_report.md

Question

Can synthetic disagreement probes convert model-generated train-fitting programs into a more reliable task-local executable rule than direct row-by-row inference?

The method generates candidate transform(row) programs from visible examples, finds synthetic inputs where those programs disagree, asks the model to label those probes, and selects or routes programs against the expanded label set. Held-out benchmark outputs are used only for final evaluation and hidden oracle diagnostics.

Setup

  • Run: main_v1
  • Dataset: public text-transformation tasks.
  • Tasks: 24
  • Visible examples per task: 4
  • Held-out rows per task cap: 4
  • Program variants per task: direct,helpers,regex,conditional
  • Repair rounds for non-passing programs: 1
  • Disagreement probes per task: 4
  • Probe label styles: plain,rule,strict
  • Elapsed seconds: 1410.9

Main Result

methodtasksrow_exactfull_task_exactused_program_ratehelped_vs_directhurt_vs_direct
direct_qwen_row2482.3%75.0%00
program_ceg_gated2482.3%75.0%20.8%00
program_ceg_router2482.3%75.0%29.2%00
direct_qwen_batch2474.0%58.3%04
program_ceg2446.9%41.7%62.5%08
program_random_probe2446.9%41.7%62.5%08
program_shuffled_probe_labels2446.9%41.7%62.5%08
hidden_candidate_oracle2446.9%41.7%62.5%08
program_visible2445.8%37.5%62.5%09

Interpretation

Negative for executable-program improvement: the hidden candidate oracle is 41.7%, below direct Qwen at 75.0%. This means the generated train-passing program set usually lacks a better candidate to select. The gated method ties direct at 75.0% by falling back on most tasks; it uses a program on 20.8% of tasks and produces no net task wins.

The hidden candidate oracle reaches 41.7% full-task exact, below direct Qwen. That makes candidate reachability the binding failure: even a perfect selector over these generated programs would not improve the task set.

Charts

Full-task exact by method

Row movement

Wins and losses

Probe diagnostics

Family heatmap

Task Details

task_idfamilydirect_full_exactvisible_full_exactceg_full_exactceg_gated_full_exactrouter_full_exactoracle_full_exacttrain_pass_countconfident_probe_countceg_probe_scorerouter_probe_scoreceg_descriptionrouter_description
Abbreviation.000001Abbreviation100.0%0.0%100.0%100.0%100.0%100.0%2450.0%75.0%regexif len_gt_median: conditional else regex
City.000004City100.0%0.0%0.0%100.0%100.0%0.0%10100.0%0.0%helpersfallback:fallback_direct
DateTime.000005DateTime100.0%100.0%100.0%100.0%100.0%100.0%2475.0%87.5%conditionalif contains '-': conditional else direct
DateTime.000025DateTime100.0%0.0%0.0%100.0%100.0%0.0%000.0%0.0%fallback:fallback_direct
DateTime.000033DateTime100.0%0.0%0.0%100.0%100.0%0.0%000.0%0.0%fallback:fallback_direct
DateTime.000090DateTime100.0%100.0%100.0%100.0%100.0%100.0%20100.0%-100.0%directfallback:fallback_direct
DateTime.000103DateTime100.0%100.0%100.0%100.0%100.0%100.0%340.0%50.0%helpersfallback:fallback_direct
DateTime.000105DateTime100.0%100.0%100.0%100.0%100.0%100.0%44100.0%100.0%helpersif contains '_': helpers else helpers
EmergencyCall.000004EmergencyCall100.0%0.0%0.0%100.0%100.0%0.0%000.0%0.0%fallback:fallback_direct
Log.000020Log100.0%0.0%0.0%100.0%100.0%0.0%000.0%0.0%fallback:fallback_direct
Name.000014Name100.0%100.0%100.0%100.0%100.0%100.0%44100.0%100.0%directif contains '_': direct else direct
Name.000015Name100.0%100.0%100.0%100.0%100.0%100.0%30100.0%100.0%regexif len_gt_median: regex else regex
Number.000011Number100.0%0.0%0.0%100.0%100.0%0.0%000.0%0.0%fallback:fallback_direct
Number.000018Number100.0%100.0%100.0%100.0%100.0%100.0%34100.0%100.0%directif len_gt_median: direct else direct
Phone.000006Phone100.0%100.0%100.0%100.0%100.0%100.0%10100.0%0.0%helpersfallback:fallback_direct
Product.000002Product100.0%0.0%0.0%100.0%100.0%0.0%000.0%0.0%fallback:fallback_direct
ShippingCode.000001ShippingCode100.0%0.0%0.0%100.0%100.0%0.0%000.0%0.0%fallback:fallback_direct
ShippingCode.000002ShippingCode100.0%100.0%100.0%100.0%100.0%100.0%24100.0%100.0%helpersif contains '_': helpers else helpers
DateTime.000084DateTime0.0%0.0%0.0%0.0%0.0%0.0%000.0%0.0%fallback:fallback_direct
DateTime.000116DateTime0.0%0.0%0.0%0.0%0.0%0.0%10100.0%0.0%directfallback:fallback_direct
Number.000010Number0.0%0.0%0.0%0.0%0.0%0.0%40100.0%-100.0%directfallback:fallback_direct
Number.000016Number0.0%0.0%0.0%0.0%0.0%0.0%10100.0%0.0%conditionalfallback:fallback_direct
Number.000050Number0.0%0.0%0.0%0.0%0.0%0.0%2475.0%-100.0%regex_repair1fallback:fallback_direct
Number.000070Number0.0%0.0%0.0%0.0%0.0%0.0%000.0%0.0%fallback:fallback_direct

Probe Labels

task_idprobe_indexselected_modeinputlabelconsensuscandidate_disagreementcandidate_outputs_json
Abbreviation.0000010disagreementConseC100.0%2{"C": 1, "": 1}
Abbreviation.0000011disagreementNihilNI100.0%2{"N": 1, "": 1}
Abbreviation.0000012disagreementconsecteturC66.7%2{"c": 1, "": 1}
Abbreviation.0000013disagreementCONSECTETURC100.0%2{"C": 1, "": 1}
Abbreviation.0000010randomConseC100.0%2{"C": 1, "": 1}
Abbreviation.0000011randomCONSECTETURC100.0%2{"C": 1, "": 1}
Abbreviation.0000012randomConsectetur 915C100.0%2{"C": 1, "": 1}
Abbreviation.0000013randomConsectetur 90C100.0%2{"C": 1, "": 1}
City.0000040randomsan_fraccisnoSan Francisco100.0%1{"Sanfraccisno": 1}
City.0000041randomFRANCISOC SANSan Francisco100.0%1{"Francisocsan": 1}
City.0000042randomSf.San Francisco100.0%1{"Sf": 1}
City.0000043randomSan FraccisnoSan Francisco100.0%1{"Sanfraccisno": 1}
DateTime.0000050disagreement2025-07-22Jul 2025100.0%2{"Not a date.": 1, "Jul 2025": 1}
DateTime.0000051disagreement2026-12-30Dec 2026100.0%2{"Not a date.": 1, "Dec 2026": 1}
DateTime.0000052disagreement2026-04-15Apr 2026100.0%2{"Not a date.": 1, "Apr 2026": 1}
DateTime.0000053disagreement2026-12-30T06.25.57ZDec 2026100.0%2{"Not a date.": 1, "": 1}
DateTime.0000050random2026-04-15T09:44:40Z 504Apr 2026100.0%2{"Not a date.": 1, "": 1}
DateTime.0000051random2026-04-15t09:44:40zApr 2026100.0%2{"Not a date.": 1, "": 1}
DateTime.0000052random2026-12-30T06:25:57Z 650Dec 2026100.0%2{"Not a date.": 1, "": 1}
DateTime.0000053random2025-07-22t11:12:55zJul 2025100.0%2{"Not a date.": 1, "": 1}
DateTime.0000900disagreement31:56:3811:56:3833.3%2{"31pm": 1, "43pm": 1}
DateTime.0000900random17:25pm100.0%1{"": 2}
DateTime.0000901random18:42:286pm100.0%1{"6pm": 2}
DateTime.0000902random17.10.525pm100.0%1{"": 2}
DateTime.0000903random14.39.212pm100.0%1{"": 2}
DateTime.0001030disagreement17 011666.7%2{"": 2, "00": 1}
DateTime.0001031disagreement14 0707100.0%2{"": 2, "00": 1}
DateTime.0001032disagreement14 1616100.0%2{"": 2, "00": 1}
DateTime.0001033disagreement31 1818100.0%2{"": 2, "00": 1}
DateTime.0001030random14-mar-2002 13:16:1616100.0%1{"16": 3}
DateTime.0001031random31-Jan-2031 05:54:18 3435434333.3%1{"54": 3}
DateTime.0001032random14-Feb-2034 05:36:07 4523666.7%1{"36": 3}
DateTime.0001033random31-JAN-2031 05:54:1854100.0%1{"54": 3}
DateTime.0001050disagreement21-Jan-1985_05:44:4343100.0%2{"43": 2, "": 2}
DateTime.0001051disagreement31-Jan-2031_05:54:1818100.0%2{"18": 2, "": 2}
DateTime.0001052disagreement14-Feb-2034_05:36:0707100.0%2{"07": 2, "": 2}
DateTime.0001053disagreement17-Jan-1990_13:32:0101100.0%2{"01": 2, "": 2}
DateTime.0001050random21-jan-1985 05:44:4343100.0%1{"43": 4}
DateTime.0001051random17/Jan/1990 13:32:0101100.0%1{"01": 4}
DateTime.0001052random17-Jan-1990 13:32:01 27901100.0%2{"01": 1, "": 3}
DateTime.0001053random28-Jan-1997 14:33:0303100.0%1{"03": 4}
DateTime.0001160random14-Mar-2001PM-3PM100.0%1{"": 1}
DateTime.0001161random31-jan-2031 05:54:185AM-7AM100.0%1{"5AM-7AM": 1}
DateTime.0001162random31-Jan-2031_05:54:185AM-7AM100.0%1{"": 1}
DateTime.0001163random14 161PM-3PM66.7%1{"": 1}
Name.0000140disagreementArtem KArtem100.0%2{"Artem": 3, "Artem K": 1}
Name.0000141disagreementAysu_PolatAysu100.0%2{"Aysu": 3, "Aysu_Polat": 1}
Name.0000142disagreementaysu polataysu66.7%2{"aysu": 3, "aysu polat": 1}
Name.0000143disagreementAYSU POLATAYSU100.0%2{"AYSU": 3, "AYSU POLAT": 1}
Name.0000140randomAYSU POLATAYSU100.0%2{"AYSU": 3, "AYSU POLAT": 1}
Name.0000141randomAysuAysu100.0%1{"Aysu": 4}
Name.0000142randomAysu_PolatAysu100.0%2{"Aysu": 3, "Aysu_Polat": 1}
Name.0000143randomHONE ALBERTHone66.7%2{"HONE": 3, "HONE ALBERT": 1}
Name.0000150randomFatma_YilmazFa100.0%1{"Fa": 3}
Name.0000151randomYilmaz FatmaY100.0%1{"Yi": 3}
Name.0000152randomAysuAy100.0%1{"Ay": 3}
Name.0000153randomartem kuznetsovAr100.0%1{"ar": 3}
Number.0000100random27 95027 950100.0%1{"27 950": 4}
Number.0000101random28 55428 554100.0%1{"28 554": 4}
Number.0000102random33100.0%1{"3": 4}
Number.0000103random2929100.0%1{"29": 4}
Number.0000160random799800100.0%1{"800": 1}
Number.0000161random1216122066.7%1{"1220": 1}
Number.0000162random931935100.0%1{"930": 1}
Number.0000163random914 949915 950100.0%1{"": 1}
Number.0000180disagreement1976 5419.76 54100.0%2{"19.76 54": 2, "19.76": 1}
Number.0000181disagreement2004 13520.04 135100.0%2{"20.04 135": 2, "20.04": 1}
Number.0000182disagreement1966 57919.66 57966.7%2{"19.66 579": 2, "19.66": 1}
Number.0000183disagreement1945 94919.45 949100.0%2{"19.45 949": 2, "19.45": 1}
Number.0000180random195619.56100.0%1{"19.56": 3}
Number.0000181random2004 13520.04 135100.0%2{"20.04 135": 2, "20.04": 1}
Number.0000182random200520.05100.0%1{"20.05": 3}
Number.0000183random197919.79100.0%1{"19.79": 3}
Number.0000500disagreement5531000100.0%2{"1000": 1, "553": 1}
Number.0000501disagreement2471000100.0%2{"1000": 1, "247": 1}
Number.0000502disagreement13231000100.0%2{"1000": 1, "1323": 1}
Number.0000503disagreement19552000100.0%2{"1000": 1, "1955": 1}
Number.0000500random13231000100.0%2{"1000": 1, "1323": 1}
Number.0000501random19552000100.0%2{"1000": 1, "1955": 1}
Number.0000502random5531000100.0%2{"1000": 1, "553": 1}
Number.0000503random2471000100.0%2{"1000": 1, "247": 1}
Phone.0000060randomSvetlana Konovalova 678 Redwood Lane NW ,Long Beach,OK,(129) 734-1247,000-61-4879,03719 60129100.0%1{"129": 1}
Phone.0000061randomAYSU KIRIAKOS YILMAZ 7890 SEVENTH PLACE ,DENVER,WY,(089) 638-8906,000-52-9340,41230089100.0%1{"089": 1}
Phone.0000062randomAysu Kiriakos Yilmaz 7890 Seventh789066.7%1{"": 1}
Phone.0000063randomJoyikutty_Laddavone_Rukundo__456_Pecan_Place,Belo_Horizonte,FL,(066)_692-9096,000-09-1490,03719066100.0%1{"066": 1}
ShippingCode.0000020disagreement1Z_NRC_49T_03_3957_129_749T100.0%2{"": 1, "49T": 1}
ShippingCode.0000021disagreement1Z_MSC_S94_53_6488_779_2S94100.0%2{"": 1, "S94": 1}
ShippingCode.0000022disagreement1Z_TFX_926_49_0896_388_9926100.0%2{"": 1, "926": 1}
ShippingCode.0000023disagreement1Z_14Q_1VW_66_2880_816_81VW100.0%2{"": 1, "1VW": 1}
ShippingCode.0000020random1z 14q 1vw 66 2880 816 81vw66.7%1{"1vw": 2}
ShippingCode.0000021random1Z 22100.0%1{"": 2}
ShippingCode.0000022random1Z 77100.0%1{"": 2}
ShippingCode.0000023random1Z 14Q 1VW 66 2880 816 8 5091VW100.0%1{"1VW": 2}

Candidate Programs

task_idvariantstatustrain_passheldout_full_exactheldout_row_exactcode_charssuspicious
Abbreviation.000001directokFalse100.0%100.0%630False
Abbreviation.000001direct_repair1okFalse0.0%0.0%723False
Abbreviation.000001helpersokFalse0.0%0.0%53False
Abbreviation.000001helpers_repair1okFalse0.0%0.0%53False
Abbreviation.000001regexokTrue100.0%100.0%531True
Abbreviation.000001conditionalokTrue0.0%75.0%461True
City.000004directokFalse0.0%0.0%942False
City.000004direct_repair1okFalse0.0%0.0%497False
City.000004helpersokTrue0.0%0.0%150True
City.000004regexokFalse0.0%0.0%1879True
City.000004regex_repair1okFalse0.0%0.0%1281True
City.000004conditionalokFalse0.0%0.0%1236True
City.000004conditional_repair1syntax_error: '(' was never closed (<unknown>, line 49)False0.0%0.0%2034False
DateTime.000005directokTrue100.0%100.0%503False
DateTime.000005helpersokFalse0.0%0.0%81False
DateTime.000005helpers_repair1okFalse0.0%50.0%394False
DateTime.000005regexokFalse0.0%50.0%568False
DateTime.000005regex_repair1okFalse0.0%50.0%568False
DateTime.000005conditionalokTrue100.0%100.0%882False
DateTime.000025directsyntax_error: unterminated string literal (detected at line 64) (<unknown>, line 64)False0.0%0.0%4009False
DateTime.000025direct_repair1okFalse0.0%25.0%1841False
DateTime.000025helpersokFalse0.0%0.0%78False
DateTime.000025helpers_repair1okFalse0.0%0.0%618False
DateTime.000025regexokFalse0.0%50.0%1277True
DateTime.000025regex_repair1okFalse0.0%50.0%1277True
DateTime.000025conditionalokFalse0.0%0.0%720True
DateTime.000025conditional_repair1okFalse0.0%0.0%961False
DateTime.000033directokFalse0.0%0.0%449False
DateTime.000033direct_repair1okFalse0.0%0.0%449False
DateTime.000033helpersokFalse0.0%0.0%93False
DateTime.000033helpers_repair1okFalse0.0%0.0%548False
DateTime.000033regexokFalse0.0%0.0%542False
DateTime.000033regex_repair1okFalse0.0%0.0%930False
DateTime.000033conditionalokFalse0.0%0.0%360False
DateTime.000033conditional_repair1okFalse0.0%0.0%394False
DateTime.000084directokFalse0.0%0.0%790False
DateTime.000084direct_repair1okFalse0.0%0.0%774False
DateTime.000084helpersokFalse0.0%0.0%251False
DateTime.000084helpers_repair1okFalse0.0%0.0%251False
DateTime.000084regexokFalse0.0%0.0%882False
DateTime.000084regex_repair1okFalse0.0%0.0%758False
DateTime.000084conditionalokFalse0.0%0.0%884False
DateTime.000084conditional_repair1okFalse0.0%0.0%790False
DateTime.000090directokTrue100.0%100.0%447False
DateTime.000090helpersokFalse0.0%0.0%134False
DateTime.000090helpers_repair1okFalse0.0%0.0%218False
DateTime.000090regexokFalse0.0%0.0%420False
DateTime.000090regex_repair1okFalse0.0%0.0%416False
DateTime.000090conditionalokTrue100.0%100.0%1433False
DateTime.000103directokTrue100.0%100.0%364False
DateTime.000103helpersokTrue100.0%100.0%47False
DateTime.000103regexokTrue100.0%100.0%308False
DateTime.000103conditionalokFalse0.0%0.0%333False
DateTime.000103conditional_repair1okFalse0.0%0.0%333False
DateTime.000105directokFalse0.0%0.0%549False
DateTime.000105direct_repair1okTrue100.0%100.0%482False
DateTime.000105helpersokTrue100.0%100.0%63False
DateTime.000105regexokTrue100.0%100.0%144False
DateTime.000105conditionalokTrue100.0%100.0%144False
DateTime.000116directokTrue0.0%50.0%872False
DateTime.000116helpersokFalse0.0%0.0%410False
DateTime.000116helpers_repair1okFalse0.0%0.0%606False
DateTime.000116regexokFalse0.0%0.0%872False
DateTime.000116regex_repair1okFalse0.0%0.0%701False
DateTime.000116conditionalokFalse0.0%0.0%1032False
DateTime.000116conditional_repair1okFalse0.0%0.0%913False
EmergencyCall.000004directokFalse0.0%0.0%679False
EmergencyCall.000004direct_repair1okFalse0.0%0.0%679False
EmergencyCall.000004helpersokFalse0.0%0.0%170False
EmergencyCall.000004helpers_repair1okFalse0.0%0.0%234False
EmergencyCall.000004regexokFalse0.0%0.0%666False
EmergencyCall.000004regex_repair1okFalse0.0%0.0%917False
EmergencyCall.000004conditionalokFalse0.0%0.0%680False
EmergencyCall.000004conditional_repair1okFalse0.0%0.0%680False
Log.000020directokFalse0.0%0.0%567False
Log.000020direct_repair1okFalse0.0%0.0%567False
Log.000020helpersokFalse0.0%0.0%153False
Log.000020helpers_repair1okFalse0.0%0.0%523False
Log.000020regexokFalse0.0%0.0%578False
Log.000020regex_repair1okFalse0.0%0.0%578False
Log.000020conditionalokFalse0.0%0.0%273False
Log.000020conditional_repair1okFalse0.0%0.0%581False
Name.000014directokTrue100.0%100.0%49False
Name.000014helpersokTrue100.0%100.0%49False
Name.000014regexokTrue100.0%100.0%49False
Name.000014conditionalokTrue100.0%100.0%488False
Name.000015directokTrue100.0%100.0%75False
Name.000015helpersokFalse0.0%0.0%58False
Name.000015helpers_repair1okFalse0.0%0.0%58False
Name.000015regexokTrue100.0%100.0%68False
Name.000015conditionalokTrue100.0%100.0%136False
Number.000010directokTrue0.0%50.0%37False
Number.000010helpersokTrue0.0%50.0%37False
Number.000010regexokTrue0.0%50.0%37False
Number.000010conditionalokTrue0.0%50.0%84False
Number.000011directokFalse0.0%75.0%82False
Number.000011direct_repair1okFalse0.0%75.0%82False
Number.000011helpersokFalse0.0%75.0%37False
Number.000011helpers_repair1okFalse0.0%75.0%211False
Number.000011regexokFalse0.0%75.0%82False
Number.000011regex_repair1okFalse0.0%75.0%859True
Number.000011conditionalsyntax_error: '[' was never closed (<unknown>, line 54)False0.0%0.0%1601False
Number.000011conditional_repair1syntax_error: '{' was never closed (<unknown>, line 55)False0.0%0.0%1651False
Number.000016directokFalse0.0%25.0%282False
Number.000016direct_repair1okFalse0.0%25.0%282False
Number.000016helpersokFalse0.0%0.0%49False
Number.000016helpers_repair1okFalse0.0%0.0%113False
Number.000016regexokFalse0.0%25.0%322True
Number.000016regex_repair1okFalse0.0%50.0%360True
Number.000016conditionalokTrue0.0%25.0%428True
Number.000018directokTrue100.0%100.0%73False
Number.000018helpersokFalse0.0%0.0%69False
Number.000018helpers_repair1okFalse0.0%0.0%149False
Number.000018regexokTrue100.0%100.0%73False
Number.000018conditionalokTrue100.0%100.0%154False
Number.000050directokFalse0.0%0.0%238True
Number.000050direct_repair1okFalse0.0%25.0%240True
Number.000050helpersokFalse0.0%0.0%44False
Number.000050helpers_repair1okFalse0.0%25.0%536True
Number.000050regexokFalse0.0%0.0%445True
Number.000050regex_repair1okTrue0.0%0.0%593True
Number.000050conditionalokTrue0.0%0.0%415True
Number.000070directokFalse0.0%0.0%445False
Number.000070direct_repair1okFalse0.0%0.0%445False
Number.000070helpersokFalse0.0%0.0%78False
Number.000070helpers_repair1okFalse0.0%0.0%243False
Number.000070regexsyntax_error: '(' was never closed (<unknown>, line 74)False0.0%0.0%3233False
Number.000070regex_repair1okFalse0.0%0.0%495False
Number.000070conditionalokFalse0.0%50.0%3307False
Number.000070conditional_repair1okFalse0.0%50.0%3307False
Phone.000006directokFalse0.0%0.0%189False
Phone.000006direct_repair1okFalse0.0%0.0%262False
Phone.000006helpersokTrue100.0%100.0%72False
Phone.000006regexokFalse0.0%0.0%685False
Phone.000006regex_repair1okFalse0.0%0.0%685False
Phone.000006conditionalokFalse0.0%0.0%374False
Phone.000006conditional_repair1okFalse0.0%0.0%374False
Product.000002directokFalse0.0%0.0%1975False
Product.000002direct_repair1okFalse0.0%0.0%640False
Product.000002helpersokFalse0.0%0.0%84False
Product.000002helpers_repair1okFalse0.0%0.0%1409False
Product.000002regexokFalse0.0%0.0%838False
Product.000002regex_repair1okFalse0.0%0.0%838False
Product.000002conditionalokFalse0.0%0.0%1626False
Product.000002conditional_repair1okFalse0.0%0.0%534False
ShippingCode.000001directokFalse0.0%0.0%49False
ShippingCode.000001direct_repair1okFalse0.0%0.0%49False
ShippingCode.000001helpersokFalse0.0%0.0%49False
ShippingCode.000001helpers_repair1okFalse0.0%0.0%49False
ShippingCode.000001regexokFalse0.0%0.0%363False
ShippingCode.000001regex_repair1okFalse0.0%0.0%363False
ShippingCode.000001conditionalokFalse0.0%0.0%585False
ShippingCode.000001conditional_repair1okFalse0.0%0.0%585False
ShippingCode.000002directokTrue100.0%100.0%48False
ShippingCode.000002helpersokTrue100.0%100.0%46False
ShippingCode.000002regexokFalse0.0%0.0%480False
ShippingCode.000002regex_repair1okFalse0.0%0.0%290False
ShippingCode.000002conditionalokFalse0.0%0.0%681False
ShippingCode.000002conditional_repair1okFalse0.0%0.0%681False

Family Breakdown

methodfamilytasksrow_exactfull_task_exact
direct_qwen_rowAbbreviation1100.0%100.0%
direct_qwen_rowCity1100.0%100.0%
direct_qwen_rowDateTime881.2%75.0%
direct_qwen_rowEmergencyCall1100.0%100.0%
direct_qwen_rowLog1100.0%100.0%
direct_qwen_rowName2100.0%100.0%
direct_qwen_rowNumber654.2%33.3%
direct_qwen_rowPhone1100.0%100.0%
direct_qwen_rowProduct1100.0%100.0%
direct_qwen_rowShippingCode2100.0%100.0%
program_visibleAbbreviation175.0%0.0%
program_visibleCity10.0%0.0%
program_visibleDateTime856.2%50.0%
program_visibleEmergencyCall10.0%0.0%
program_visibleLog10.0%0.0%
program_visibleName2100.0%100.0%
program_visibleNumber629.2%16.7%
program_visiblePhone1100.0%100.0%
program_visibleProduct10.0%0.0%
program_visibleShippingCode250.0%50.0%
program_cegAbbreviation1100.0%100.0%
program_cegCity10.0%0.0%
program_cegDateTime856.2%50.0%
program_cegEmergencyCall10.0%0.0%
program_cegLog10.0%0.0%
program_cegName2100.0%100.0%
program_cegNumber629.2%16.7%
program_cegPhone1100.0%100.0%
program_cegProduct10.0%0.0%
program_cegShippingCode250.0%50.0%
program_ceg_gatedAbbreviation1100.0%100.0%
program_ceg_gatedCity1100.0%100.0%
program_ceg_gatedDateTime881.2%75.0%
program_ceg_gatedEmergencyCall1100.0%100.0%
program_ceg_gatedLog1100.0%100.0%
program_ceg_gatedName2100.0%100.0%
program_ceg_gatedNumber654.2%33.3%
program_ceg_gatedPhone1100.0%100.0%
program_ceg_gatedProduct1100.0%100.0%
program_ceg_gatedShippingCode2100.0%100.0%
program_ceg_routerAbbreviation1100.0%100.0%
program_ceg_routerCity1100.0%100.0%
program_ceg_routerDateTime881.2%75.0%
program_ceg_routerEmergencyCall1100.0%100.0%
program_ceg_routerLog1100.0%100.0%
program_ceg_routerName2100.0%100.0%
program_ceg_routerNumber654.2%33.3%
program_ceg_routerPhone1100.0%100.0%
program_ceg_routerProduct1100.0%100.0%
program_ceg_routerShippingCode2100.0%100.0%

Files

  • runs/main_v1/task_summary.csv
  • runs/main_v1/candidate_programs.csv
  • runs/main_v1/probe_labels.csv
  • runs/main_v1/generations.csv
  • analysis/*.csv
  • analysis/figures/*.png

Experiment log 5

Show the running log (5 entries)

Setup

  • Created a fresh standalone experiment directory.
  • Large artifacts are kept under /workspace/large_artifacts/qwen_counterexample_guided_ephemeral_program.
  • Primary metric: strict full-task exact on held-out rows.
  • Intervention: generate task-local executable programs, create synthetic disagreement probes, label probes with the model, and select or route programs using the expanded label set.

Run smoke_no_qwen

  • Time UTC: 2026-06-28T03:23:44.477998+00:00
  • Elapsed seconds: 1.0
  • Config: {"answer_max_new_tokens": 64, "batch_max_new_tokens": 220, "code_max_new_tokens": 620, "gate_probe_score": 0.75, "heldout_cap": 3, "min_confident_probes": 2, "min_heldout": 3, "min_probe_consensus": 0.6666666666666666, "no_qwen": true, "probe_count": 2, "probe_label_styles": "plain,rule,strict", "run_name": "smoke_no_qwen", "seed": 20260628, "task_limit": 3, "train_n": 3, "variants": "direct,helpers,regex,conditional"}
  • Tasks: 3
  • direct_qwen_row: 0.0% full-task exact.
  • program_visible: 0.0% full-task exact.
  • program_ceg: 0.0% full-task exact.
  • program_ceg_gated: 0.0% full-task exact.
  • program_ceg_router: 0.0% full-task exact.
  • program_shuffled_probe_labels: 0.0% full-task exact.
  • Hidden candidate oracle: 0.0% full-task exact.

Run smoke_qwen_3

  • Time UTC: 2026-06-28T03:26:45.006601+00:00
  • Elapsed seconds: 140.2
  • Config: {"answer_max_new_tokens": 56, "batch_max_new_tokens": 180, "code_max_new_tokens": 520, "gate_probe_score": 0.75, "heldout_cap": 3, "min_confident_probes": 2, "min_heldout": 3, "min_probe_consensus": 0.6666666666666666, "no_qwen": false, "probe_count": 2, "probe_label_styles": "plain,rule,strict", "run_name": "smoke_qwen_3", "seed": 20260628, "task_limit": 3, "train_n": 4, "variants": "direct,helpers,regex,conditional"}
  • Tasks: 3
  • direct_qwen_row: 66.7% full-task exact.
  • program_visible: 33.3% full-task exact.
  • program_ceg: 33.3% full-task exact.
  • program_ceg_gated: 66.7% full-task exact.
  • program_ceg_router: 66.7% full-task exact.
  • program_shuffled_probe_labels: 33.3% full-task exact.
  • Hidden candidate oracle: 33.3% full-task exact.

Run smoke_qwen_3_repair

  • Time UTC: 2026-06-28T03:32:20.510640+00:00
  • Elapsed seconds: 230.7
  • Config: {"answer_max_new_tokens": 56, "batch_max_new_tokens": 180, "code_max_new_tokens": 520, "gate_probe_score": 0.75, "heldout_cap": 3, "min_confident_probes": 2, "min_heldout": 3, "min_probe_consensus": 0.6666666666666666, "no_qwen": false, "probe_count": 2, "probe_label_styles": "plain,rule,strict", "repair_rounds": 1, "run_name": "smoke_qwen_3_repair", "seed": 20260628, "task_limit": 3, "train_n": 4, "variants": "direct,helpers,regex,conditional"}
  • Tasks: 3
  • direct_qwen_row: 66.7% full-task exact.
  • program_visible: 33.3% full-task exact.
  • program_ceg: 33.3% full-task exact.
  • program_ceg_gated: 66.7% full-task exact.
  • program_ceg_router: 66.7% full-task exact.
  • program_shuffled_probe_labels: 33.3% full-task exact.
  • Hidden candidate oracle: 33.3% full-task exact.

Run main_v1

  • Time UTC: 2026-06-28T03:56:44.332833+00:00
  • Elapsed seconds: 1410.9
  • Config: {"answer_max_new_tokens": 56, "batch_max_new_tokens": 220, "code_max_new_tokens": 560, "gate_probe_score": 0.75, "heldout_cap": 4, "min_confident_probes": 2, "min_heldout": 3, "min_probe_consensus": 0.6666666666666666, "no_qwen": false, "probe_count": 4, "probe_label_styles": "plain,rule,strict", "repair_rounds": 1, "run_name": "main_v1", "seed": 20260628, "task_limit": 24, "train_n": 4, "variants": "direct,helpers,regex,conditional"}
  • Tasks: 24
  • direct_qwen_row: 75.0% full-task exact.
  • program_visible: 37.5% full-task exact.
  • program_ceg: 41.7% full-task exact.
  • program_ceg_gated: 75.0% full-task exact.
  • program_ceg_router: 75.0% full-task exact.
  • program_shuffled_probe_labels: 41.7% full-task exact.
  • Hidden candidate oracle: 41.7% full-task exact.

Figures 5

family heatmap
family heatmap · analysis/figures/
method full task exact
method full task exact · analysis/figures/
probe diagnostics
probe diagnostics · analysis/figures/
row scatter direct vs ceg
row scatter direct vs ceg · analysis/figures/
wins losses vs direct
wins losses vs direct · analysis/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 ↗