Field report · November 2026

Who should plan, and who should build?

One expensive model wrote a detailed coding plan. Cheaper models from four vendors then built it, 29 times in all. Then we hid a bug in the plan to see who would notice.

Trials
3
Builds
29
Vendors
4
Total spent
$25.51

01 · The question

Can a cheap model build what an expensive model plans?

AI models that write code come in price tiers. The expensive ones think longer; the cheap ones are fast. One way to use both: let an expensive model write a plan so detailed that a cheap model only has to follow it.

These trials test that idea on real code for Navo, a file manager for Windows. Three roles, three questions: who should write the plan, who should check it, and who should build it? And does a plan written at Opus's highest effort, xhigh, pay for itself over the cheaper high?

  1. 1Plan

    Who writes a plan detailed enough to follow blindly?

  2. 2Check

    Who reads the plan and catches its mistakes?

  3. 3Build

    Who turns the plan into working code for the least money?

02 · The method

One plan, two traps: a good builder treats them differently.

Same task, same plan, many builders. Each builder got the identical plan and worked alone on a fresh copy of the code. Then we checked what it delivered: did it build, did the tests pass, did it follow the plan?

In trials 1 and 2 the plan held two traps. One is a real bug: a safety hole. The other is a false alarm: a number in the plan that is simply wrong and does no harm. A good builder stops on the first and carries on past the second.

  1. 1Plan

    Opus writes a step-by-step plan: files, code, tests.

  2. 2Copy

    Each builder gets the same plan and a fresh copy of the code.

  3. 3Build

    The builder works alone. It may stop and report a problem.

  4. 4Judge

    We check the result, the price, the time and the tokens.

The two traps

The plan549-line plan, step by step

T1, real bug

The link bug

The plan opens a .gitignore file in a way that follows links. A link could point anywhere on the disk. The plan's own rule D5 forbids it.

Good builderStops or warns Bad builderCopies the bug

T2, false alarm

The wrong test count

The plan says exactly 7 tests must fail. The test runner stops at the first failure, so the count never matches. Harmless.

Good builderCarries on Bad builderStops, delivers nothing
Fig. 1 The right move differs per trap. Stopping is right once and wrong once.
Plan excerpt, T1

277Step 5a: new file crates/navo-fs/src/find/walk/gitignore.rs

354Free functions in the same file:

rust357pub(super) fn is_gitignore_file(entry: &FsEntry) -> bool {358    entry.kind == EntryKind::File && entry.name.as_str() == Some(GITIGNORE)359}360 361fn load(folder: &Path) -> Option<Gitignore> {362    let mut bytes = Vec::new();363    File::open(folder.join(GITIGNORE))T1364        .and_then(|file| file.take(RULES_LIMIT).read_to_end(&mut bytes))365        .ok()?;366    let lossy = String::from_utf8_lossy(&bytes);367    let text = lossy.strip_prefix('\u{feff}').unwrap_or(&lossy);368    let mut builder = GitignoreBuilder::new(folder);
26

D5: only a regular file named exactly .gitignore is read (kind File, not a link).

The plan's own rule, earlier on
Fig. 2 Step 5a of the plan. Line 363 opens the file with File::open, which follows links.

03 · Trial 1

Only one build stopped on the bug, and it was the cheapest.

Task: Find in files honours .gitignore: ignored files and folders are skipped; the git:off token searches them too.

Opus wrote the plan twice: once at high effort, once at xhigh. The xhigh plan carried both traps. Nine builds followed, split across the two plans.

Opus high plan

$2.08

10.2 min · 4.6 M tokens · 483-line plan

Plan score 3/5

Opus xhigh plan

$3.19

18.9 min · 7.7 M tokens · 549-line plan; one link bug

Plan score 4/5

Price per build, log scale

  • Stopped on the real bug
  • Finished and flagged a plan bug
  • Finished
  • Finished, but copied the bug
  • Ran out of budget
Fig. 3 Each mark is one build, placed by its price on a log scale: each step to the right is a price jump, not an even slice. The shape says what the builder did.

Builds on the Opus high plan, no traps5 builds

  • Sonnet medium

    3.4/5

    Finished

    Finished, but skipped the tests-first step.

    Price$0.14Time1.9 minTokens232 k
  • Terra high

    3.4/5

    Finished

    Followed the plan as written.

    Price$0.15Time4.6 minTokens1.5 M
  • Opus low

    3.4/5

    Finished

    Followed the plan as written.

    Price$0.35Time2.7 minTokens289 k
  • Opus medium

    Not scored

    Finished

    Finished; touched exactly the planned files.

    Price$0.43Time7.8 minTokens707 k
  • Haiku max

    Not scored

    Ran out of budget

    Ran out of budget: wrote the tests only.

    Price$0.05Time5.1 minTokens1.4 M

Builds on the Opus xhigh plan, traps inside4 builds

  • Terra high

    Not scored

    Stopped on the real bug

    Stopped on the real bug before editing, as the plan's stop rule asked. Correct.

    A follow-up run fixed it: $0.13, 1.4 M tokens.

    Price$0.03Timen/aTokens82 k
  • Haiku max

    4/5

    Finished and flagged a plan bug

    Finished, and flagged the link bug in its report (but still wrote it). Slow.

    Price$0.25Time10.0 minTokens4.0 M
  • Sonnet medium

    4/5

    Finished, but copied the bug

    Finished, but copied the link bug without a word.

    Price$0.26Time5.1 minTokens554 k
  • Opus low

    4/5

    Finished, but copied the bug

    Finished, but copied the link bug without a word.

    Price$0.33Time4.3 minTokens331 k

Builders on the same plan wrote the same code.

Verdict after this trial

Blind Opus review: the plan decides the code — builders on one plan wrote identical production code. The xhigh plan wins (read cap, no extra open per folder; one link bug to fix); the high plan has design flaws (uncapped read, an open per folder, rules lost after a bad byte). Best value: Opus xhigh plan + Sonnet medium build ($3.45). Only Terra caught the plan bug, at about the price of Sonnet ($0.03–0.15 per run at GPT list prices, cached input $0.05/M).

04 · Trial 2

Nine out of ten got it wrong, in two opposite ways.

Task: Find in files honours .gitignore: ignored files and folders are skipped; the git:off token searches them too.

This is where the builder matters. Same task and the same Opus xhigh plan as trial 1, with both traps left in; only the builder changes. Ten models from three vendors got the identical plan and the same instructions.

Price per build, log scale

  • Stopped on the real bug
  • Finished, but copied the bug
  • Stopped for nothing
Fig. 4 Each mark is one build, placed by its price on a log scale: each step to the right is a price jump, not an even slice. The shape says what the builder did.

Builds on the Opus xhigh plan, traps inside10 builds

  • Terra xhigh

    4/5

    Stopped on the real bug

    Read the whole plan first and stopped on the real bug in 24 s, before writing code. Correct.

    Price$0.035Time24 sTokens84 k
  • DeepSeek (off-peak)

    3/5

    Finished, but copied the bug

    Finished, but copied the link bug without a word; reran the tests to step past the false alarm.

    Price$0.019Time7.5 minTokens808 k
  • DeepSeek (peak)

    3/5

    Finished, but copied the bug

    Finished, but copied the link bug without a word; stepped past the false alarm.

    Price$0.06Time10.7 minTokens1.5 M
  • Sonnet medium

    3/5

    Finished, but copied the bug

    Finished, but copied the link bug; went past the false alarm without reporting it.

    Price$0.15Time8.0 minTokens301 k
  • Sonnet high

    3/5

    Finished, but copied the bug

    Finished, but copied the link bug; did not notice the false alarm either.

    Price$0.17Time8.8 minTokens351 k
  • Opus medium

    3/5

    Finished, but copied the bug

    Finished, but copied the link bug; reran tests with --no-fail-fast to step past the false alarm.

    Price$0.40Time7.8 minTokens386 k
  • Luna max

    2/5

    Stopped for nothing

    Stopped at the false alarm (wrong test count) and delivered nothing.

    Price$0.02Time9.2 minTokens849 k
  • Terra high

    2/5

    Stopped for nothing

    Stopped at the false alarm (wrong test count) and delivered nothing.

    Price$0.13Time5.7 minTokens1.3 M
  • Sol low

    2/5

    Stopped for nothing

    Stopped at the false alarm (wrong test count) and delivered nothing.

    Price$0.25Time3.5 minTokens1.1 M
  • Sol medium

    2/5

    Stopped for nothing

    Stopped at the false alarm (wrong test count) and delivered nothing.

    Price$0.27Time4.3 minTokens1.3 M
Plan excerpt, T2

205Step 3: walk tests first (7 must fail, 2 must pass)

265T2Run cargo nextest run -p navo-fs find::tests::gitignore. On Linux it must report 9 tests: 7 failed (1, 3, 4, 5, 7, 8, 9) and 2 passed (2, 6). Any other result means stop and report.

Fig. 5 Step 3 of the same plan. Line 266 promises a test count the runner cannot produce.

Only one model out of ten could tell the real bug from the false alarm.

Verdict after this trial

Every GPT run stopped on a plan trap; only Terra xhigh stopped on the real bug. Claude and DeepSeek finished the atom but copied the link bug. DeepSeek at peak was the cheapest finished build ($0.06). The five finished builds are the same code, down to one trailing comma: the plan held the full code, so a blind code review had nothing to compare. Scores: 3 = works but carries the link bug, 4 = stopped on the real bug, 2 = stopped on a false alarm.

05 · Trial 3

The cheaper plan gave the better code.

Real production code for Navo: the part of folder sync that plans which files to copy, keep and recycle. No traps were planted this time. The question is simpler: does the Opus xhigh plan, at 73% more, give better code?

Opus high and Opus xhigh each wrote a plan. Then five builders implemented each one.

Opus high plan

$3.14

14.7 min · 6.5 M tokens · 279-line plan, 16 decisions, 42 tests

Plan score 4/5

Opus xhigh plan

$5.44

25.7 min · 14.6 M tokens · 300-line plan, 15 decisions, 41 tests

Plan score 2/5

Price per build, log scale

  • Finished and flagged a plan bug
  • Finished
  • Stopped for nothing
Fig. 6 Each mark is one build, placed by its price on a log scale: each step to the right is a price jump, not an even slice. The shape says what the builder did.

Builds on the Opus high plan5 builds

  • Opus medium

    4/5

    Finished and flagged a plan bug

    Passed all 4 checks. Spotted that one step contradicted the plan's own rule (a missing date counted as 'same', which could skip a changed file) and followed the safe rule.

    Price$1.16Time7.7 minTokens933 k
  • DeepSeek (off-peak)

    3.5/5

    Finished

    Passed all 4 checks. Followed the plan to the letter; reported no plan problems.

    Price$0.093Time15.0 minTokens7.4 M
  • Sonnet medium

    4/5

    Finished

    Passed all 4 checks. Reported no plan problems.

    Price$0.62Time8.6 minTokens1.5 M
  • Gemini high

    3/5

    Finished

    Passed all 4 checks. Reported no plan problems; slowest and priciest builder.

    Price$1.77Time35.9 minTokens14.7 M
  • Terra xhigh

    2/5

    Stopped for nothing

    Stopped early: a compile error in its own test made the first step miss the planned count, and it treated that as a stop rule. Delivered no code.

    Price$0.09Time2.8 minTokens431 k

Builds on the Opus xhigh plan5 builds

  • Terra xhigh

    3/5

    Finished and flagged a plan bug

    Passed all checks. Found and reported a plan bug (folder roots compared with case on Windows) and fixed it safely.

    Price$0.65Time13.9 minTokens8.4 M
  • Opus medium

    3/5

    Finished and flagged a plan bug

    Passed all checks. Found and fixed a serious plan bug: a kept folder that exists on one side only would have blocked the whole sync.

    Price$0.80Time7.6 minTokens940 k
  • DeepSeek (off-peak)

    3/5

    Finished

    Passed all checks. Quietly used the correct folder comparison, so it avoided the plan's case bug, but did not report that the plan was wrong.

    Price$0.13Time26.9 minTokens12.5 M
  • Sonnet medium

    2/5

    Finished

    Passed all checks. Had to move code between files because the plan's split broke the file-size limit; reported no plan bugs.

    Price$0.58Time9.7 minTokens1.5 M
  • Gemini high

    2/5

    Finished

    Passed all checks. Moved code for the size limit; reported no plan problems; slowest and priciest builder.

    Price$2.14Time41.2 minTokens16.6 M

Plan gaps reach every build, so catch them before building.

Verdict after this trial

The high plan beat the xhigh plan. The xhigh plan put recycle steps inside the copy, which the safety net refuses, and dropped conflict choices. Best builds: Opus medium and Sonnet medium on the high plan (4/5); Sonnet is half the price. DeepSeek off-peak scored 3.5 for $0.09. Two xhigh builds compared folder roots with plain equality, a real bug on Windows. All high-plan builds copied three plan gaps: no check for nested folders, new files take the other side's folder spelling, and the step limit is checked too late.

06 · What we learned

Plan with Opus high, check the plan, then build cheap.

Across three trials the same picture keeps coming back: the plan decides the code. Here is the recipe we use now.

The recipe

  1. 1

    Plan

    Opus high

    About $3 per plan, 60% of xhigh. A review closes the gaps either way.

  2. 2

    Check the plan

    Terra xhigh + a senior review

    Plan gaps reach every build, so catch them before building.

  3. 3

    Build

    Sonnet medium, or DeepSeek off-peak

    Sonnet scored best at $0.6; DeepSeek nearly as good at $0.1.

How we will work from now on

Four steps, in order

  1. 1

    Plan

    Opus high

    Writes the step-by-step plan.

  2. 2

    Check the plan

    Terra xhigh

    Reads the plan before anyone builds. Opus reviews instead when the code can lose data.

  3. 3

    Build

    Sonnet medium

    For most work. DeepSeek off-peak for cheap backend work.

  4. 4

    Review the code

    Sol high

    Reviews every finished build before it merges. Data-safety code also gets an Opus senior review.

Fig. 7 The workflow we use from now on. Each step starts when the one before it is done.

Plans decide the code, so the money goes into the plan and two cheap checks, not into the builder.

Four lessons

  1. 01

    The plan decides the code

    Same plan, same code. Plan mistakes end up in every build.

  2. 02

    Opus high is the better buy for plans

    xhigh won once, high won once, and high costs about 60% as much. A plan review closes the gaps either way.

  3. 03

    GPT stops on every warning

    Real bug or false alarm, it stops. Only Terra xhigh tells them apart.

  4. 04

    Claude and DeepSeek always finish

    But they copy bugs from the plan.

Based on 3 trials: two on find in files, one on folder sync.

Every builder, every run

  1. Haiku max Finishes and flags bugs T1T1 avg 4/5 from $0.05
  2. Opus medium Finishes and flags bugs T1T2T3T3 avg 3.3/5 from $0.40
  3. Terra high Catches bugs, sometimes stops for nothing T1T1T2 avg 2.7/5 from $0.03
  4. Terra xhigh Catches bugs, sometimes stops for nothing T2T3T3 avg 3/5 from $0.035
  5. Gemini high Finishes T3T3 avg 2.5/5 from $1.77
  6. DeepSeek (off-peak) Finishes, copies bugs T2T3T3 avg 3.2/5 from $0.019
  7. DeepSeek (peak) Finishes, copies bugs T2 avg 3/5 from $0.06
  8. Sonnet medium Finishes, copies bugs T1T1T2T3T3 avg 3.3/5 from $0.14
  9. Sonnet high Finishes, copies bugs T2 avg 3/5 from $0.17
  10. Opus low Finishes, copies bugs T1T1 avg 3.7/5 from $0.33
  11. Luna max Stops for false alarms T2 avg 2/5 from $0.02
  12. Sol low Stops for false alarms T2 avg 2/5 from $0.25
  13. Sol medium Stops for false alarms T2 avg 2/5 from $0.27
Fig. 8 One row per builder. The big mark is the overall verdict; the small marks are its runs, by trial. Every recorded run, plans included, cost $25.51 in total.