How We Built the Checker That Isn’t Dennis

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

  1. 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.
  2. 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.”
  3. 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.
  4. 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.
  5. 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

Dennis Yu
Dennis Yu
Dennis Yu is the CEO of Local Service Spotlight, a platform that amplifies the reputations of contractors and local service businesses using the Content Factory process. He is a former search engine engineer who has spent a billion dollars on Google and Facebook ads for Nike, Quiznos, Ashley Furniture, Red Bull, State Farm, and other brands. Dennis has achieved 25% of his goal of creating a million digital marketing jobs by partnering with universities, professional organizations, and agencies. Through Local Service Spotlight, he teaches the Dollar a Day strategy and Content Factory training to help local service businesses enhance their existing local reputation and make the phone ring. Dennis coaches young adult agency owners serving plumbers, AC technicians, landscapers, roofers, electricians, and believes there should be a standard in measuring local marketing efforts, much like doctors and plumbers must be certified. He has appeared on 353 podcasts with 619 credited episodes — see the full list of his podcast appearances.