My coding agent has a to-do list. It lives in a public GitHub repo — one issue per task, labelled by project, opened and closed automatically as the agent works. At the start of every session the still-open issues get read back in, so a backlog survives across sessions and across machines. The agent picks up exactly where the last instance left off.

This morning I asked it to reconcile that backlog against reality. Eleven open tasks for the current project. Three of them were already done — one finished five days ago, two finished the same afternoon they were created. They'd been sitting "open" ever since, getting faithfully restored into session after session as live work.

That's a 27% ghost rate on a single morning's sample. Small numbers, but the reason they were ghosts isn't a fluke. It's baked into how agents report what they've done.

The system: a to-do list that lives in the open

First, the setup, because the bug only makes sense once you see the machinery.