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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
| Campaign | Run directory ends | Report generated | Tasks in run | Exit code |
|---|---|---|---|---|
| Control run-01 | -20261003-0042 | Oct 3, 14:40 UTC | #2 to #6 | 0 |
| Treatment run-03 | -20261002-1414 | Oct 2, 19:32 UTC | #2 to #6 | 1 |
| Treatment run-03 | -20261002-2058 | Oct 2, 21:11 UTC | #6 | 0 |
| Treatment run-04 | -20261002-1502 | Oct 2, 19:37 EDT | #2 to #6 | 1 |
| Treatment run-04 | -20261002-2042 | Oct 2, 21:29 ET | #6 | 0 |
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.
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.
| Measure | Control run-01 | Treatment run-03 | Treatment run-04 |
|---|---|---|---|
| Tasks merged, as reported | 5 of 5 | 5 of 5 | 4 of 5 |
| Runs needed | 1 | 2 | 2 |
| Code review rounds | 6 | 6 | 7 |
| Code review findings | 1 | 1 | 4 |
| First review clean | 4 of 5 | 4 of 5 | 2 of 4 |
| Recorded session time | 2h 16m 34s | 4h 13m 16s | 4h 14m 19s |
| Wall clock | 13h 57m 55s | 5h 30m 35s | 5h 22m 55s |
| Premium requests | 10 | 11 | 10 |
| AIU | 1,051.084 | ||
| Input tokens | 1,224,194 (second run only) | 11,942,007 (first run only) | |
| Output tokens | 13,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.
| Event | Self-reported cause | Self-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 run | A 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 review | Two 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 review | The 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.
| Report | Token counts | Token method | Time zone | Describes its arm as |
|---|---|---|---|---|
| Control run-01 | Unavailable | UTC | Control (lessons off) | |
| Run-03, first run | Unavailable | UTC | Control (lessons off) | |
| Run-03, recovery run | Measured from OTEL | Final cumulative value per session | UTC | Control (lessons off) |
| Run-04, first run | Measured from OTEL | Maximum cumulative value per session | EDT | Control (lessons off) |
| Run-04, second run | "[REDACTED]", so unavailable | ET | "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.
| Recommendation | Reports |
|---|---|
| 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 result | 4 of 5 |
| Timestamp orchestration waits between sessions | 3 of 5 |
| Make runtime evidence a structured PR checklist, not prose in the issue | 2 of 5 |
| Detect a no-op remediation (unchanged commit and PR body) immediately | 2 of 5 |
| Keep the fail-closed, exact-head review and exact-base merge gates | 3 of 5 |
| Probe capabilities by trying the operation, not by reading help text; cache success | 1 of 5 |
Pipe gh --json to standalone jq instead of combining --jq with --arg | 1 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.mdfiles inpost-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.