Astra and Sol in Galley: Evaluation Methods and Results

This resource supports Switching from GPT-5.6 Sol to GPT-6 Astra: Start with Medium Effort, with the comparison's criteria, findings, and usage figures.

Scores by phase

Phase Astra low Astra medium Astra high Sol high
Repository analysis 83 85 91 77
Implementation 81 84 92 69
Code review 86 88 90 86

Scores are out of 100. Astra high produced the strongest implementation; medium found a startup failure that high missed in review. Medium also had the lowest total cost. These results support starting with medium, choosing high for work across retries and persisted state, and keeping a separate review pass.

Experiment and scope

Four conditions worked on Galley, a tool for unattended development: GPT-6 Astra at low, medium, and high effort, and GPT-5.6 Sol at high effort. Each performed repository analysis, implementation, and code review once.

Implementation and review used Codex CLI 0.153.4 on macOS, with Galley's repository instructions, quality profile, and skills from codex-workflows.

  • Analysis: investigate the repository and select worthwhile improvements.
  • Implementation: execute the same plan in separate worktrees. The plan came from Astra findings; Sol-only findings did not expand it.
  • Review: use fresh sessions to review identical copies of Sol's implementation.

The implementation plan covered Git change capture, input reuse and cleanup, corrupt-task recovery and process ownership, scheduling and timeouts, YAML maintenance, verification evidence, preparation reuse, and installer checksums. Agents chose the design and verification while preserving existing operator controls, including manual requeue of running tasks.

Why these evaluation criteria

I wanted agents to find and fix consequential problems without adding more machinery than the product needed. Engineering judgment therefore counted alongside technical correctness. Overengineering meant lasting complexity out of proportion to user value, rather than a large diff or attention to rare cases.

Analysis and review weighted technical validity most heavily because a finding can lead to changes in working software:

Analysis and review axis Weight What was evaluated
Discovery 30 Important problems found across relevant responsibilities and paths; breadth and impact rather than count.
Technical validity 40 Whether conditions, causes, consequences, existing contracts, and proposed remedies agree with the code.
Engineering judgment 30 Selection, priority, scope, and whether the proposed work earns its maintenance and operational cost.

Implementation assessed the finished behavior and the agent's ability to deliver it:

Implementation axis Weight What was evaluated
Correctness and completeness 40 Required behavior works through related paths and preserves existing contracts.
Design and maintainability 30 Causes are addressed at suitable boundaries, with justified complexity and appropriate reuse.
Autonomous execution 30 The agent interprets scope, investigates, implements, verifies, recovers from failures, and reports completion accurately.

Scores reflect judgment within each axis, not points per finding. An omission counted as deliberate restraint only when visible evidence supported it. Because implementation uses different axes, the phase scores are not combined into one quality score.

Repository analysis

Condition Discovery / 30 Technical validity / 40 Engineering judgment / 30 Total / 100
Astra low 25 34 24 83
Astra medium 27 35 23 85
Astra high 27 37 27 91
Sol high 26 33 18 77

Low found useful ownership and input-resolution problems, but also proposed restricting manual requeue and expanding cleanup changes into archive behavior.

Medium matched high's discovery score. Its main judgment weakness was treating manual requeue as a defect even though documentation and tests established it as an operator override.

High found evidence-loss problems and checked the intended behavior before excluding the requeue restriction. That supported its stronger judgment score.

Sol high found valid issues, but several proposed fixes added broader fingerprint, rereview, artifact-routing, or pruning mechanisms than the demonstrated need justified. Its marker-lock proposal also left crash recovery unresolved.

Implementation

Condition Correctness / 40 Design and maintainability / 30 Autonomous execution / 30 Total / 100
Astra low 31 24 26 81
Astra medium 33 25 26 84
Astra high 37 27 28 92
Sol high 27 20 22 69

All four addressed the plan. The differences appeared where operations interacted across runs.

Low made mostly local changes, but left preparation invalidating its own reuse key, large staging operations exceeding argument limits, and gaps in run attribution and corrupt-task isolation.

Medium repaired reuse for the skeleton stage, but generated verification text still changed the setup key. It handled run attribution more completely than low while retaining the large-staging and corrupt-history gaps.

High separated generated verification text from the user contract used for reuse keys, extended an existing stdin pathspec mechanism for large staging operations, and passed the recovery checks below. Its broader fingerprints and process-ownership migration still carried maintenance costs.

Sol high left repeat cleanup broken and could adopt an unrelated file as a reused input. It retained both old and new scheduling paths, increasing maintenance work. Its custom PID/file locking added rules where the Astra implementations used OS locking.

Focused implementation checks

Evaluator checks supplemented the agents' own tests:

Check Low Medium High Sol high
Repeat cleanup after the parent directory has been pruned Pass Pass Pass Fail
Prior input evidence cannot adopt an unrelated file in another worktree Pass Pass Pass Fail
Setup reuse key remains stable after applying a real generated skeleton Fail Fail Pass Fail
Status-to-stage operation with 16,000 paths Argument limit Argument limit Pass Argument limit
Rename handling when filenames contain -> Pass Pass Pass Pass
Corrupt running task and same-name failed history are both isolated Incomplete Incomplete Pass Pass
Run attribution for a task name ending in a hyphen Fail Pass Pass Pass

All four fixed basic Git status-output truncation; the 16,000-path check exposed a further staging limit on macOS. “Incomplete” isolation means low and medium preserved both records but did not fully isolate them; the queue was not blocked.

Code review

All reviewers examined the same Sol implementation.

Condition Discovery / 30 Technical validity / 40 Engineering judgment / 30 Total / 100
Astra low 22 38 26 86
Astra medium 24 38 26 88
Astra high 26 38 26 90
Sol high 26 36 24 86
Finding in the common implementation Low Medium High Sol high
Failure during a later save can roll back and delete a reused, edited input Yes Yes Yes
Repeat cleanup fails after the parent directory is gone Yes Yes Yes
Previous input evidence can adopt an unrelated file in another worktree Yes Yes
Corrupt owner data stops startup before task recovery can run Yes
Age-based lock recovery can treat a live holder as stale; deletion has an ownership race Yes Yes Yes Yes
Generated verification text changes the preparation fingerprint Yes Yes
Requeue's review-iteration counter changes the fingerprint Yes
A learned environment profile changes the next setup reuse key Yes
Trimming committed paths changes whitespace-bearing filenames Yes Yes
Skeleton Git snapshot has no command timeout Yes Yes Yes
Legacy process-registry fallback can select the wrong owner Yes Yes
Scheduling can claim another task after cancellation Yes
macOS case aliases for the same repository are rejected Yes

A dash means the issue was not reported. Finding more issues alone did not earn a higher engineering-judgment score.

Low found rollback deletion and several local failures, but covered fewer connected paths.

Medium uniquely found that corrupt owner data could stop daemon startup before the new recovery code ran. The evaluator reproduced this through the daemon's startup path.

High found the broadest set of input-ownership and fingerprint interactions among the Astra runs, but missed medium's startup issue. This is the strongest reason to retain an independent review even after using high for implementation.

Sol high was stronger at review than implementation. Its setup-profile, cancellation, and macOS path findings were useful. Its score was reduced for extending the macOS claim to Windows without support and proposing persistent ownership metadata before justifying the additional state.

No reviewer reported the duplicate scheduler or the large staging argument limit.

Usage, cost, and time

Costs are API-equivalent estimates using the rates recorded on September 5, 2026, rather than charges from a Codex subscription.

Model Uncached input / million Cached input / million Output / million
Astra $10 $1 $50
Sol $4 $0.40 $20

Rates came from the official Astra model page and Sol model page.

cost = ((input - cached_input) × input_rate
        + cached_input × cached_rate
        + output × output_rate) / 1,000,000

Cached input is included in input; reasoning output is included in output. Input totals accumulate across requests. Evaluator work and subsequent repairs are excluded.

Time below subtracts estimated approval-wait overhead. The sessions ran concurrently on one machine, so these figures describe this experiment rather than standardized latency benchmarks.

Analysis usage

Condition Input tokens Cached input Output tokens Requests Cost Time (min)
Astra low 5,538,450 5,321,728 20,759 39 $8.526898 12.52
Astra medium 4,022,437 3,837,696 17,996 35 $6.584906 11.36
Astra high 7,178,211 6,884,224 32,553 51 $11.451744 19.54
Sol high 13,952,295 13,403,392 50,116 103 $8.559289 21.65

Implementation usage

Condition Input tokens Cached input Output tokens Requests Cost Time (min)
Astra low 10,759,274 10,537,984 47,072 78 $15.104484 29.66
Astra medium 11,110,682 10,888,960 50,028 80 $15.607580 31.38
Astra high 14,044,933 13,697,280 77,144 107 $21.031010 47.81
Sol high 37,767,141 37,186,944 97,653 238 $19.148626 43.51

Code review usage

Condition Input tokens Cached input Output tokens Requests Cost Time (min)
Astra low 2,025,895 1,925,760 8,235 26 $3.338860 7.12
Astra medium 2,024,681 1,913,984 9,138 26 $3.477854 7.82
Astra high 2,847,908 2,703,104 11,968 28 $4.749544 9.78
Sol high 7,197,482 6,987,008 22,512 48 $4.086939 10.28

Totals across the three tasks

Condition Total tokens Requests Estimated cost Adjusted time (minutes)
Astra low 18,399,685 143 $26.97 49.31
Astra medium 17,234,962 141 $25.67 50.56
Astra high 24,192,717 186 $37.23 77.13
Sol high 59,087,199 389 $31.79 75.44

These totals sum separate analysis, implementation, and review tasks, rather than an end-to-end pipeline. Requests count model usage events.

Medium cost about 19% less than Sol high. Astra high cost about 17% more than Sol high and 45% more than medium. For implementation alone, high cost about 35% more than medium and took about 52% longer: roughly 48 versus 31 minutes.

Limits and retained implementation

This was one repository and one run per condition per phase. Evaluation was model-assisted and the final scoring was not blind. Read small score differences alongside the findings, rather than as a general ranking of models. The evaluation did not include native Windows execution.

The Astra high implementation was retained in Galley PR #137. For the practical interpretation, return to the article.