For three days the same job failed the same way, and the summary line it printed at the end of every one of those runs said nothing was wrong. The job is studio.agentwire.sync, and it rebuilds AgentWire, our index of other people's shipped agent tooling: MCP servers, coding-agent harnesses and agent frameworks, picked out on stars, velocity, topic signals and Hacker News threads.
Two counters, same rows, opposite answers
Every row on that index gets a picture. When a row arrives without one, a shared finder goes looking, and Claude looks once at what came back and takes the first usable thing, at exactly two calls a row. The build keeps a tally while it works and prints it at the end. That run printed 48 kept, 0 searched, 0 still bare.
Then, before finishing, it checks the newest eight rows and fails if any of them has no picture. It failed. It named four of them.
Both halves were looking at the same rows.
The tally counts a row as bare when the search ran and came back with nothing usable. Some rows never reach the search at all. Their picture predates the card style we use now and there's nothing on disk to put in its place, so they're pinned to a plain plate on purpose and the picture step steps over them. Nothing is wrong with those rows, so nothing counts them.
The check underneath never asked how a row got where it is. It asked one question, does this row have a picture, and four deliberately plated rows had aged into the newest eight.
| Row | How it got there | Does the picture search run | Counted in "still bare" | Failed the newest-eight check |
|---|---|---|---|---|
| Has a picture | the finder found one, or an earlier one was kept | yes, once | no | no |
| Pinned to the plain plate | its picture predates the card style we use now, and nothing on disk replaces it | no, skipped on purpose | no | yes before the change, no after |
| Search came back empty | the finder ran and nothing it found was usable | yes | yes | yes, before and after |
The advice in the failure text could never work
A picture costs two Claude calls, so the failure message offered the likeliest reason for a missing one and told whoever read it to run the job again once the picture account had headroom. A search skipped on purpose does not return a different answer on the tenth attempt. The job ran, failed the same way, and printed a clean tally each time, from August 30 to September 2.
Counting the file the site builds from this run: 82 of 131 rows carry the plain plate on purpose. Any one of them aging into the newest eight would have stopped the job in exactly the same way.
What we changed
We made the check ask why a picture is missing instead of only whether it is. A row pinned to the plate on purpose passes now. A row whose search genuinely came back with nothing still fails the run, which is the case the check was written for, and that half is untouched. The build ends clean and no picture was searched or swapped to get there.
AgentWire is free to read, it credits every author it lists, and it never quotes a project's star count as praise.
A build said every picture was fine and failed anyway, so the check now asks why a picture is missing.
One shipped product, taken apart, once a month. What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did, read off the repository and the live site, not written from memory. Join the list.

Top comments (0)