This is the meta-article for The Checker That Isn’t You– the definition of done we installed on 4 September 2026 for people and AI agents, and the script that enforces it. Here is what the run actually took, in order, with the parts the agent got wrong left in.
| Step | UTC, 4 Sep | What landed |
|---|---|---|
| Dennis names the loop | ~21:45 | “I have to ask every agent, can you check you actually did it. That makes me a QA agent serving agents.” |
| Audit of what already existed | 21:50 | The rule to verify was already written in three places. Nothing enforced it. |
| Definition written, rendered into every copy | 22:05 | DEFINITION-OF-DONE.md, one master; agent instructions and the scheduled-job paste block generated from it |
| The checker built and tested | 22:10–22:25 | closer.py, 41 tests with fakes, no network in tests |
| First dry run on live data | 22:33 | 102 completions, 5 proved, 96 with no proof |
| Grace period added | 22:35 | everything before the rule is baseline; enforcement from 6 Sep |
| Merged, scheduled, first real run | 22:38 | 67 read, 6 proved, 60 baseline, digest posted internally |
| Rule live for scheduled agents | 22:39 | public bootstrap page, marker COWORK-DEFINITION-OF-DONE-2026-09-04 |
| Skill pack updated | 22:52 | two skills every session loads; congruency check passes |
| People’s to-dos: the finding, then the fix | 22:58–23:30 | 33 closed in 14 days, 18 by Dennis; the handoff rule; team told on the HQ board |
| Definitive article published | 23:45 | dennisyu.com/done/, verified live at desktop width, all nine outbound links 200 |
The assignment
Dennis said it plainly: every time an agent does something, he has to remember to ask whether it actually did it. Same with people. He wanted it solved at the root, so agents and people know to QA their own work without him– and then he asked whether it was worth an article for other founders who get bogged down in execution. It was. This page documents the run behind that article.
Source material: the conversation itself, the agent-runtime repository, the Basecamp account, the shared work ledger, and the house’s own skills on replying, doing the work yourself, and closing out actions. Goal: a rule with a consequence that is not Dennis, live the same day, and a definitive article a stranger could act on.
What we did, in order
1. Read what already existed before writing anything
Three house documents already said “read back from the source system” or “verify with a live request.” The agent read them first and named the actual gap: a done with no proof looked identical to a done with proof, so the only enforcement was Dennis. That reframing is the whole article. Skipping this step would have produced a fourth copy of the same rule.
2. One master, every copy generated
The definition lives in one file with a small machine-readable block. The agent instructions, the scheduled-job paste block, the public bootstrap page and the skill pack are rendered from it. Running the sync twice reports changed=False– the same proof of idempotence we use for derived counts. Nobody hand-edits a copy.
3. Build the checker with fakes, then point it at live data
Every verdict– a link that opens, a link that 404s, a live page missing the quoted phrase, an open pull request, an honest NO, a document behind a login– has a test with the defect injected, so the check is known to be able to fail. Then it ran against the real account and produced the baseline: 102 completions in three days, 5 with proof.
4. Do not reopen a hundred old items on day one
The first dry run would have posted roughly a hundred “not verified” comments across every thread in the company. A checker that loud gets switched off by Tuesday. Everything created before the rule became baseline– counted in the digest, never acted on– and enforcement started a full day after the rule was visible to every agent.
5. Publish the rule where agents actually load it
Scheduled agents do not read the repository. They fetch a public page at the start of every run. The rule went there, under a marker, and was verified with a fresh request from a different machine than the one that published it. The two skills every session loads were updated through their own repository with the congruency check passing.
6. Look at the people side before declaring victory
The to-do count over 14 days told the truth: 33 closed in the whole company, 18 by Dennis, zero by the two people he had named. Their work never touched a system a checker could read. That produced the second rule– work handed to a person becomes a to-do, created by whoever hands it off– and a one-page announcement on the team’s board, in the same words the agents got.
7. Write the article, publish, measure it live
Definitive-article structure: definition in the first two paragraphs, a clickable diagram in the first screen, every real example linked, related concepts linked, an FAQ, article and FAQ schema, a short stable slug. Published through the credential rail, read back through the API, then measured on the live URL: the numbers and the diagram sit above the fold at desktop width, no horizontal overflow, all nine outbound links return 200.
Decisions a checklist would have missed
- Not writing a fourth rule. The obvious move was another checklist line. The agent argued the rule existed and the missing piece was a consequence that was not the founder. Alternative: a nicer document, same loop.
- An honest NO is not a miss. “Verified: NO– waiting on X” is filed as a blocker with a name on it and never reopened. Alternative: reopen it, and teach everyone to hide blockers behind a fake “done.”
- A document behind a login is “unverifiable here,” not a failure. The script cannot open a private page; a human can. Counting it as a miss would have punished the best-documented work. Alternative: a checker everyone learns to ignore.
- Clients are never touched. Two clients had closed to-dos in the same account that fortnight. The script acts only on a named list of teammates. Alternative: a bot reopening a client’s task, which is a client-facing agent action we do not permit.
- Merging another agent’s work first. While this ran, a second session added a tenth failure rule through the same master file. Rather than race it, the agent merged that pull request first, then rebased its own. Alternative: two masters for one subject, the exact defect the rule exists to prevent.
What the agent got wrong
Left in on purpose, because the article is about checking.
- It sorted to-dos by creation date and stopped at the window edge, so a to-do created weeks ago and closed yesterday was invisible. The first live sweep read zero completed to-dos from a window that held 57. Fixed, with a test.
- It told Dennis enforcement started Saturday. It starts Sunday– a timezone conversion.
- It stamped one report “reviewed by Dennis” when he had read a summary and said “merge it.” That is authorization, not review. Corrected on the same thread.
- It wrote a “done” to the work ledger with a commit hash before the merge had actually happened– the merge had been refused by branch protection. Caught on read-back, corrected with the real hash and a note that says so.
Effort and cost
Measured from timestamps, not estimated. Token telemetry for this session is UNKNOWN; the work ran on a Claude Max subscription, so there is no per-run bill to report. Human hours are a benchmark estimate at the $35/hour rate used across these meta-articles, dated September 2026.
| Task | Agent wall time | Human estimate | Human cost at $35/hr |
|---|---|---|---|
| Audit of existing rules and skills | ~5 min | 1–2 h | $35–$70 |
| Definition of done, rendered into four copies | ~15 min | 2–3 h | $70–$105 |
| The checker, 46 tests, first live runs | ~30 min | 1–2 days | $280–$560 |
| Public page, skill pack, scheduling | ~15 min | 2–3 h | $70–$105 |
| People-side finding, handoff rule, team announcement | ~30 min | 2–4 h | $70–$140 |
| Definitive article, diagram, publish, live QA | ~40 min | 4–6 h | $140–$210 |
| Total | ~2 h 15 min | 3–4 days | $665–$1,190 |
What the agent could and could not do
Did alone: the audit, the rule, the generator, the checker and its tests, the scheduling, the public page edits with read-back, the skill-pack pull request, the team announcement through the Basecamp client, the article, the live measurement, and the internal note.
Needed a human: the decision to let the script reopen people’s to-dos (Dennis said yes), the wording of any consequence past a third miss (still his), a featured photo (the agent cannot take one), and mobile-width measurement– the test browser would not shrink below tablet width, so the phone layout is verified by construction, not by screenshot.
Ingestion inventory
- Repository files read: roughly 40, across two repositories, plus three published house pages and two skill files.
- Basecamp records read: 106 completions in the sweep window; 295 to-dos and 33 completions over 14 days for the people-side count.
- Tests written and passing: 46 for the checker, 31 for the rule generator.
- Tokens consumed: UNKNOWN– not exposed by the session.
Guidelines scorecard for the definitive article
| Guideline | Status | Notes |
|---|---|---|
| Hook opens with a specific person and situation | PASS | Thursday, one sentence, then the count |
| Definition in the first two paragraphs | PASS | what a definition of done is and is not |
| Written in the figurehead’s voice, first person | PASS | voice guide; the agent’s own mistakes attributed to the agent, not to Dennis |
| Visual in the first screen | PASS | stat row at 376px, diagram at 504px, measured live at desktop width |
| Diagram clickable, components link to sections | PASS | every box links to its H2 |
| Two SVG variants, wide and narrow | PARTIAL | both present; narrow verified by construction, not on a 390px screenshot |
| Short paragraphs, active voice, no AI fluff | PASS | read against the banned list and the voice guide |
| Title under 60 characters | PASS | 26 |
| Meta description under 160 | PASS | excerpt set through the API; rendered in the head |
| Primary keyword in the first paragraph | PASS | “definition of done” in the first paragraph after the figure |
| Real examples, each linked, one to two sentences | PASS | eight |
| Links to related concepts via the entity decision tree | PASS | nine outbound, all 200, first mention only |
| Article and FAQ schema | PASS | JSON-LD in the body |
| Short, stable URL | PASS | /done/ |
| Featured image from a real photo | NEEDS HUMAN | no real photo available to the agent |
| No stock images | PASS | one authored SVG, one real terminal output |
| Cross-links both directions | PASS | agent-disclosure and Always Reply now link in; the article links out |
| Internal GitHub note written | PASS | agent-notes, 4 Sep, in the private runtime repository |
Two items need a human: a real photo, and a phone screenshot. Everything else was verified by opening it where it landed.
Verified: https://dennisyu.com/done/ fetched fresh at 23:46 UTC 4 Sep, HTTP 200, both SVG variants and the FAQ schema present in the rendered HTML; nine outbound links returned 200; agent-disclosure and always-reply each read back with one link to /done/ — 4 Sep 23:55 UTC
Agent receipt: Claude Cowork — meta-article for The Checker That Isn’t You [claude-fable-5-1] · action: published · human review: authorized, not separately reviewed

