What Process Evaluation of Coding Agents Actually Measures: Action, Task, and Step Are Three Different Levels
Organizations: Amap, Alibaba Group, China
Abstract
Coding agents are increasingly evaluated not only by whether they solve a task, but also by how they execute it. However, existing process-level evaluations often treat action prediction, task uncertainty, and step attribution as if they were the same problem, which makes it unclear what such evaluations actually measure. In this paper, we introduce a measurement framework for process evaluation in coding agents and instantiate step-level causal attribution with SCAE, a replay-based estimator derived from a structural causal model of agent execution. Our framework combines prefix-conditioned identification, replay/intervention-based estimation, and controlled judge-information manipulation to study process evaluation at the action, task, and step levels. Experiments on 499 file-localization episodes from 12 repositories show that next actions are driven primarily by execution provenance rather than code-graph transitions, execution uncertainty is structured at the task rather than step level, and full-trace judges exhibit systematic collider bias, suggesting that current process evaluation often measures semantic relevance rather than certified causal contribution.
Figures & tables
| Object model | cov. | top-1 | top-3 | top-10 | NLL | ECE | |
| Routed by predicted tool | 0.619 | 0.150 | 0.260 | 0.484 | 2.76 | 0.0123 | 12.8 |
| Factored, shared object model | 0.645 | 0.109 | 0.241 | 0.432 | 3.41 | 0.0139 | 39.9 |
| Paired difference | — | +0.041 | +0.018 | +0.052 | — | — | — |
| 95% CI | — | [+.034, +.047] | [+.009, +.026] | [+.047, +.058] | — | — | — |
| Stratum (observable before predicting) | top-3 | ECE | |
| Current step is a search | 228 | 0.469 | 0.0125 |
| Current step is a read | 206 | 0.160 | 0.0247 |
| Current step lists a directory | 35 | 0.057 | 0.0278 |
| Predicted | 154 | 0.351 | 0.0762 |
| Predicted | 198 | 0.409 | 0.0168 |
| Predicted | 157 | 0.159 | 0.0157 |
| Next-object predictor | cov. | top-3 | 95% CI | top-10 | |
| Repository structure | |||||
| Repository frequency (marginal) | 0.349 | 0.072 | [0.047, 0.099] | 0.163 | 97.62 |
| Code dependency graph, strengthened | 0.677 | 0.058 | [0.039, 0.078] | 0.172 | 1719.13 |
| Visit history | |||||
| Visit-history frequency | 0.000 | 0.000 | [0.000, 0.000] | 0.000 | 4.84 |
| Execution provenance | |||||
| Zero-LLM structural rule | agree | chance | diff | sig. |
| First step revealing a gold file | 0.043 | 0.053 | -0.010 | — |
| First step operating on a gold file | 0.100 | 0.053 | +0.047 | — |
| Last gold-provenance step | 0.243 | 0.053 | +0.190 | ✓ |
| Last step of the trace (position only) | 0.171 | 0.053 | +0.118 | ✓ |
| Step revealing the most gold files | 0.043 | 0.053 | -0.010 | — |
| Collider displacement | Gold-prov. enrichment | |||||
| Judge | mean | 95% CI | later | sign | rate | diff CI |
| gpt-5.5 (original) | +0.533 | [+.399, +.656] | 19/23 | 0.826 ∗ | [+.241, +.500] | |
| qwen3.6-plus (general) | +0.434 | [+.299, +.557] | 18/23 | 0.565 | [-.068, +.297] | |
| qwen3-coder-plus (code) | +0.394 | [+.251, +.551] | 15/23 | 0.826 ∗ | [+.222, +.514] | |
Appendix figures & tables9 assets
Supplementary material from the paper’s appendix.
Appendix
| Symbol | Definition |
| natural-language issue text of an episode | |
| repository graph over files, modules and symbols | |
| gold target set: files modified by the reference patch | |
| file set predicted by the agent | |
| task-level outcome | |
| , | per-file indicator; recall |
| Practice | Conditions on | Consequence |
| Full-trace LLM judge | prefix successors outcome | Successors are descendants of , and conditioning on a descendant opens a biasing path. Predicted signature: blame displaced toward later steps. |
| Process reward models | nominally the prefix | Labels back-filled from completed trajectories reintroduce future information. |
| Ablation with restart | nothing | Resamples all noise, so it estimates a marginal interventional contrast and discards the realized history. |
| Data-flow “dead step” analysis | syntactic dependencies | Conflates data-flow reachability with causal effect on the outcome (§ A.7 ). |
| Level | Expression | Meaning for localization | Typical practice |
| I | association between query and result | retrieval recall@ | |
| II | alter a step and restart | tool-ablation studies | |
| II.5 | fix realized history, alter one step | SCAE (continuation) | |
| III | fix realized noise, alter one step | SCAE (intervened step) |
| Episode | Entropy (nats) by normalized position | Pattern |
| django-10097 (16 steps) | det.–stoch.–stoch. | |
| astropy-14369 (29 steps) | det.–stoch.–det. | |
| astropy-12907 (8 steps) | stoch.–det. |
| Repository | Localization success | |
| django | ||
| sympy | ||
| sphinx-doc | ||
| matplotlib | ||
| scikit-learn | ||
| astropy |
| Component | Type | Estimated by | Implied action |
| aleatoric, irreducible | residual; graph ambiguity covariates | ask the user to disambiguate | |
| aleatoric, reducible | between-rollout variance at fixed | resample and aggregate | |
| epistemic | posterior variance through the link | abstain, escalate, collect data |
| Quantity | Pre-registered | Outcome |
| top-1 disagreement | , point ; falsified if | criterion retired, not passed : observed 97.1% (68 70), CI [92.9%, 100%]. We initially recorded this as “direction confirmed”; that reading is withdrawn, because the null itself sits near 97.1% once the reference is known to be noise (§ C.10 ) |
| displacement | ; falsified if | above interval : +0.418 over , , |
| Collider isolation | ; sign is the substantive claim | above interval : +0.537 over , , . Sign confirmed; magnitude implies descendant conditioning accounts for most of the displacement |
| Wilcoxon | expected to be uncomputable at small | superseded: the full attribution sweep makes it computable, and both signed-rank tests reject at |
| Degenerate rate | – | better than predicted : 22.9% (16 70). An early two-episode reading suggested ; the full sweep does not support it |
| estimable | requires ; not available from the main sweep | met on the subset: over 23 instances |