How the agents evaluated themselves

Summary

Each Shepherd run ends with a post-mortem written by an agent from that run's own artifacts. Read on their own, the five post-mortems support six conclusions:

  1. Only the control finished in one run. It merged 5 of 5 tasks and exited 0. Both treatment campaigns stopped once and needed a second run for the last task.
  2. Both stops were agent errors, and the post-mortems say so plainly. In run-03, the coding agent finished a remediation cycle that changed nothing. In run-04, the local shepherd decided from help text that GitHub CLI couldn't request a Copilot review, although the same run had already done so three times.
  3. The agents rate review convergence as strong in every report, including the failed runs. Self-reported Copilot Code Review findings were 1, 1 and 4 per campaign, and every report says all findings were resolved before merge.
  4. The self-evaluations don't agree with each other on method. Given the same kinds of artifacts, the reports call token counts unavailable, measured, or redacted, and they mix UTC and Eastern time.
  5. All five ask for the same fix: a machine-readable outcome record per stage, so the next post-mortem doesn't have to reconstruct metrics from transcripts.
  6. The post-mortems can't see the experiment. All five describe their run as a "control" because lesson propagation was off. None mentions guardrails, and none records how PR #10 in run-04 was merged.

The five post-mortems

Each campaign directory holds one post-mortem per run. The treatment campaigns each ran twice, so there are five reports for three campaigns.

CampaignRun directory endsReport generatedTasks in runExit code
Control run-01-20261003-0042Oct 3, 14:40 UTC#2 to #60
Treatment run-03-20261002-1414Oct 2, 19:32 UTC#2 to #61
Treatment run-03-20261002-2058Oct 2, 21:11 UTC#60
Treatment run-04-20261002-1502Oct 2, 19:37 EDT#2 to #61
Treatment run-04-20261002-2042Oct 2, 21:29 ET#60

Arm labels come from the repository names (cargotracker-control-01, tricket-out and tricked-out). The post-mortems themselves call every run a control run.

Task outcomes as reported

By their own accounts, the agents merged 14 of 15 tasks. The fifteenth, run-04's issue #5, stopped before review, and no post-mortem says what happened to it afterward.

Every task outcome as the post-mortems report it A grid of three campaigns by five issues, showing each task outcome and its code review rounds as self-reported. Each task's outcome, as the post-mortems report it Issues #2 to #6 per campaign, with Copilot Code Review rounds and findings from each report Clean first review Merged after review fix Merged in recovery run Stopped; merge unreported Issue #2 Issue #3 Issue #4 Issue #5 Issue #6 Control run-01 Control run-01, issue #2: Clean first review; 1 round, 0 findings1 round0 findings Control run-01, issue #3: Clean first review; 1 round, 0 findings1 round0 findings Control run-01, issue #4: Merged after review fix; 2 rounds, 1 finding2 rounds1 finding Control run-01, issue #5: Clean first review; 1 round, 0 findings; pre-review fixes1 round0 findingspre-review fixes Control run-01, issue #6: Clean first review; 1 round, 0 findings1 round0 findings Treatment run-03 Treatment run-03, issue #2: Clean first review; 1 round, 0 findings1 round0 findings Treatment run-03, issue #3: Clean first review; 1 round, 0 findings1 round0 findings Treatment run-03, issue #4: Merged after review fix; 2 rounds, 1 finding2 rounds1 finding Treatment run-03, issue #5: Clean first review; 1 round, 0 findings1 round0 findings Treatment run-03, issue #6: Merged in recovery run; 1 round, 0 findings; failed first run1 round0 findingsfailed first run Treatment run-04 Treatment run-04, issue #2: Clean first review; 1 round, 0 findings1 round0 findings Treatment run-04, issue #3: Merged after review fix; 2 rounds, 2 findings2 rounds2 findings Treatment run-04, issue #4: Merged after review fix; 3 rounds, 2 findings3 rounds2 findings Treatment run-04, issue #5: Stopped; merge unreported; never reviewed; halted at stage 40never reviewedhalted at stage 40 Treatment run-04, issue #6: Clean first review; 1 round, 0 findings; second run1 round0 findingssecond run
Compiled from the per-task tables and narratives of the five post-mortems. Treatment campaigns combine both runs.

Only one post-mortem reports problems fixed before review: the control's stage 30 caught out-of-scope Maven Wrapper files and a formatting failure on issue #5. The other four reports describe stage 30 only as validation that passed, so they either saw no such problems or didn't report them. The post-mortems alone can't tell which.

Self-reported numbers

These are the numbers as each post-mortem states them, summed across a campaign's runs where it had two. A blank cell means no post-mortem for that campaign reported the figure.

MeasureControl run-01Treatment run-03Treatment run-04
Tasks merged, as reported5 of 55 of 54 of 5
Runs needed122
Code review rounds667
Code review findings114
First review clean4 of 54 of 52 of 4
Recorded session time2h 16m 34s4h 13m 16s4h 14m 19s
Wall clock13h 57m 55s5h 30m 35s5h 22m 55s
Premium requests101110
AIU1,051.084
Input tokens1,224,194 (second run only)11,942,007 (first run only)
Output tokens13,399 (second run only)107,534 (first run only)

Two of the treatment figures cover only part of a campaign, because the other run's post-mortem reported tokens as unavailable. Token totals can't be compared across campaigns from these reports.

The control's wall clock includes a 10h 49m 16s interval between stage 30 and stage 40 of issue #4. Its post-mortem says the cause is "not observable locally" and declines to guess.

How the agents explained their failures

Both terminal failures were attributed to agent behavior, not to the code under change, and both post-mortems call the shepherd's fail-closed stop correct.

EventSelf-reported causeSelf-assessment
Run-03, issue #6, stage 30 (terminal)PR #11 lacked the required browser and runtime evidence. After a change request, the coding agent ran a full work cycle (19:06:35 to 19:13:40 UTC) that changed neither the commit nor the PR body.An "acceptance-evidence delivery failure", not an implementation defect. The report judges an 80% merge rate preferable to merging without proof.
Run-03, recovery runA maintainer manually ran the tests and the Open Liberty runtime path, and added screenshots and evidence to the PR body. The unchanged commit then passed."Short, deterministic, and successful." The report says the recovery confirms the original failure classification.
Run-04, issue #5, stage 40 (terminal)The shepherd decided that GitHub CLI 2.100.0 couldn't request @copilot reviews, because gh pr edit --help doesn't mention that token.A "false-negative capability preflight", contradicted by the same run's three successful @copilot review requests. The report also faults the error message for telling the user to install a different gh.
Run-04, issue #4, code reviewTwo successive strict-date defects. The first fix still allowed overlong years.Converged after three rounds; all findings resolved.
Run-04, issue #6, stage 30 (recovered)A readiness command passed --jq --arg to gh run list, which rejected it.A tooling misuse; the shepherd reran the gate correctly.
Control, issue #4, code reviewThe second review reported zero findings but called one observation "previously missed".Flagged as a mixed signal that tooling should record explicitly.

The run-04 post-mortem is the most self-critical of the five: its own section headed "What failed" lists the wrong capability conclusion, the ignored contrary evidence and the misleading error message. It also estimates that without the error the run would likely have merged four tasks instead of three, which is the report's speculation.

How consistent the self-evaluations are

The same agent, reading the same kinds of artifacts, reached different conclusions about what the artifacts contain.

ReportToken countsToken methodTime zoneDescribes its arm as
Control run-01UnavailableUTCControl (lessons off)
Run-03, first runUnavailableUTCControl (lessons off)
Run-03, recovery runMeasured from OTELFinal cumulative value per sessionUTCControl (lessons off)
Run-04, first runMeasured from OTELMaximum cumulative value per sessionEDTControl (lessons off)
Run-04, second run"[REDACTED]", so unavailableET"Control treatment" (lessons off)

Small arithmetic disagreements also appear inside single reports. The control post-mortem gives its session total as 2h 16m 34s in one table and 2h 16m 29s in another; run-04's second report gives 41m 01s and 41m 02s.

The level of detail varies too. The control report lists each pre-review remediation; the treatment reports mostly summarize stage 30 as passed validation. That makes the reports a weak basis for comparing stage-30 activity between arms.

What the post-mortems leave out

  • The experiment's variable. No report mentions guardrails. Each frames its run as a lesson-propagation control and suggests comparing against a future "campaign" lesson mode.
  • PR #10 in run-04. The first run left it draft and unreviewed; the second run targeted only issue #6. No post-mortem records #10 being reviewed or merged.
  • How run-04 resumed. Run-03's recovery report documents the maintainer's manual evidence work. Run-04's second report doesn't say what changed between runs.
  • Remote agent cost. Every report notes that coding-agent and review-agent credits are absent from the local artifacts.
  • The control's 10h 49m gap. Reported as an observability limitation with no cause.

What the agents recommend

The recommendations are remarkably uniform: the agents mostly ask for better records of their own work.

RecommendationReports
Write a machine-readable outcome file per stage (issue, PR, head, review IDs, findings, merge SHA, usage, failure signature)5 of 5
Record token and credit telemetry in the session result4 of 5
Timestamp orchestration waits between sessions3 of 5
Make runtime evidence a structured PR checklist, not prose in the issue2 of 5
Detect a no-op remediation (unchanged commit and PR body) immediately2 of 5
Keep the fail-closed, exact-head review and exact-base merge gates3 of 5
Probe capabilities by trying the operation, not by reading help text; cache success1 of 5
Pipe gh --json to standalone jq instead of combining --jq with --arg1 of 5

The first run-03 report's top-priority action was to resume issue #6 after adding the missing evidence to PR #11. The recovery report shows that this is what happened.

Method

  • Source: only the five *-post-mortem.md files in post-mortems.zip. No evaluator output, transcripts or repository data were used.
  • Combining runs: where a campaign has two post-mortems, counts and durations are summed as each report states them. Nothing was re-derived.
  • Classification: outcome categories in the chart follow each report's own description of the task. The "first review clean" counts include only tasks a report says were reviewed.
  • Trust: each post-mortem was written by an agent from its own run's artifacts. This report checks the post-mortems against each other, not against those artifacts.