Gap
Time is the scarce resource. A handful of hours a week where I can build — the rest is family, day job, commute. For the work to happen at all, it had to happen while I was elsewhere.
I had a sprint contract — a written brief of the goal, the scope, and what “done” looks like. Enough to start the session, but only the shell. The details underneath are where the work lives, and I was still figuring out what a good eval looks like.
Discovery chain
1. D1, a design exploration sprint. The brief was to push the design language. Instead we spent more of the sprint on margin and padding than on design.
2. The fight with the page. The diagram shipped, looked right in isolation, and then refused to sit on the page. Hours on the same few lines:
margin: 0 auto → -1.5rem auto 0 → -3rem auto 0 → -1rem auto -2rem
Every fix created a new edge case. The problem wasn’t the diagram. It was that the diagram wasn’t native to the page it was joining — built with different rules than everything around it.
3. The diagnosis. Late in D1, I named it:
We’re trying to force this in a format that was not designed to accommodate these types of changes.
That’s the pivot. Supervising more wouldn’t have helped — the hours I lost were already spent supervising. The spec said “build the diagram” and didn’t say “build a diagram that’s native to the page” — same spacing, same sizing, same rules as everything around it. Fine in interactive mode, where I could catch the mismatch live. Fatal in autonomous mode, where nobody catches it.
4. The template. Four days later: HEADLESS.md. Architectural compatibility as ritual, encoded in the prompt itself.
Solution
Two sections, both non-skippable, both in the prompt:
- System Understanding Gate — after setup reads, the session writes a short block naming the existing tokens, spacing, and patterns it must follow. If the spec conflicts with existing patterns and can’t be resolved, the session writes a blocker handoff and exits cleanly instead of shipping broken output.
- Integration Check — after building, verify no new values, no new patterns, no unintended side effects before commit.
The template doesn’t make the session smarter. It makes the session ask the right questions before writing code.
D2 was the first project built with the Gate in place. Similar scope to D1. Different outcome.
| D1 (before) | D2 (after) | |
|---|---|---|
| Commits | 3 | 1 |
| Lines changed | ~480 | ~500 |
| Wall-clock | Across 2 days | Single evening |
| Outcome | Archived (diagram-d1-draft tag) | Shipped to production |
| Hardcoded CSS values | Many | Zero |
D2’s commit message closed the loop:
All colors from base.css tokens, no hardcoded values.
That’s what the Gate is for.
Attribution
- Daniel — gap, diagnosis, the “force fit” call.
- Claude — HEADLESS.md template. System Understanding Gate and Integration Check structure.
Why this matters
Started with a bandwidth problem. Built a template.
The spec is the highest-leverage point in agentic work. Depth at the foundation compounds upward — code, tests, integration, the user-facing surface, all rebuild from it. Every unit of precision in the spec removes units of work at every layer above. Shallow spec means I rebuild that precision by hand, by supervising in real time, every iteration.
I strive for timelessness in all my work. In building with agents, the output can only be truly unique and feel seamless or easy when you provide the most specific inputs systematically.
Next layer up: the evals inside my skills. Most are too loose. Rewriting them is the same work, higher altitude.