The walkthrough

How a data page comes together

One conversation. A reporter asks for a response-time tracker; the agent documents the dataset as it goes, and the validator refuses it three times along the way. Each exchange shows what was said and what the agent answered, with the command it ran underneath — and "under the hood" opens the full record: the output, the entry that resulted, and the files on disk.

Every command on this page was run against a scratch project when the site was built — no screenshots, no hand-written output, and no output edited after the fact. The dataset is invented: a fictional county's 311 export, chosen so no frame here could be mistaken for documentation of a real one. Its defects are not invented — each is a shape the survey found repeatedly in real government data.

What the sixteen exchanges are meant to show

Not that ergo is pleasant to use — that the discipline is mechanical, and applies to the agent as much as to the person. The exchanges worth pausing on are the three refusals. An empty page will not validate. An issue that says "some years are affected" will not validate. And renaming an issue while its anchor still sits in the loader fails with a non-zero exit, because the code is now carrying an explanation nobody can look up.

The second thing worth noticing is how little of it is the tool's doing. What is left at the end is one markdown file a reporter can read, a generated index, a published bundle, and a Python file with a comment in it. The discipline lives in the format; the validator is only the thing that keeps you honest while you write it.

See what those blocks are → · Read a real page → · Do this on your own repo →