Original Reddit post

A few days ago I posted about a client project where agents open most of the PRs. A few people asked where the work actually bounces, so I pulled it from our run history. The setup: every story goes through separate Claude Code sessions. One writes the tech design, one implements and opens the PR, a CI step reads the results, another session compares the diff with the acceptance criteria, and after the merge to staging one clicks through the feature in a browser. The session that wrote the code never marks it done. Any check can send the card back, and the implementing agent reads the notes on the card and tries again. Ten weeks, about 21k sessions, 1,349 stories. Where the work goes back. Of about 4,400 repeat implementation passes, the step right before was: CI: 55% diff vs acceptance criteria: 25% browser check on staging: 8% tech design: 6% CI retries are mostly new failures. When a story went red twice and both runs named a failing test, it was a different test about 85% of the time. The CI step doesn’t pass raw logs along, it writes the failing job and the first real error on the card. So missing output doesn’t look like the main problem. It’s more that the fix for one thing breaks the thing next to it. About one CI check in ten wasn’t a red suite at all. The branch had conflicts because another story merged first. We run up to 15 stories at once, and the planner already avoids releasing two that touch the same files. It still happens. The expensive tail comes from the criteria check, not CI. The top 10% of stories by cost had more than twice as many implementation passes, and each pass cost about 5x more. CI sent both groups back two or more times at about the same rate (40% vs 39%). The criteria check didn’t: it sent back 58% of the expensive stories at least twice, against 12% of the rest. So CI makes most of the rework, but the criteria check is where the money goes. My read: these were big stories with criteria that left room for interpretation. People. About a quarter of cards needed a person at least once (the card goes to a Blocked column and a summary goes to Slack). A third of those got blocked again, more often at the same stage than at a new one. Almost none came from CI. Most came from implementation, tech design and the staging check. What I’d do differently: split big stories before implementation starts. Most of the tail was big stories, and a smaller story gives the criteria less room to be read two ways. Question for people running Claude Code in a loop like this: how do you break the fix-one-test-breaks-another cycle? Do you give the session the full suite output, or only the first failure? submitted by /u/Efficient-Trick-4384

Originally posted by u/Efficient-Trick-4384 on r/ClaudeCode