Support Us
Harness Architecture
Essay ·
October 15, 2026

I Gave Claude the Blog II

Author
Clifton Harness
Date
October 15, 2026
Address
/harness-architecture/
i-gave-claude-the-blog-ii

In April I gave Claude the blog. It wrote 85 posts in one session, and I took most of them back down. This week I gave it the blog again. This time there’s a gate.

The public site is now built only from files I’ve approved. Each approval in publishing/policy.json pins a file to its SHA-256 hash and keeps a copy of those exact bytes. Anything new starts as pending. Edit a post and the live page stays the same until I approve the new version. A pull request that touches the approvals, the gate, the build or the workflows fails a check until I label it myself.

The gate went in on October 15. There are 186 approvals on file, and the newest is from 21:18 UTC that day. Everything else in this post came after it, so none of it is live yet.

What came back

Next I asked for the old work back. The interactive studies used to live in a private review reader. When that reader was deleted, the studies went with it, and the public pages never carried them.

Two commits brought back 135 pages with their studies. First 21 reading-path pages: Paper Space, Elevation, the room configurators, Kitchen Generator, and nine theses. Then 114 more: the other 66 theses, 31 drawing and room posts, eight retired configurators, eight engineering studies and one page for the financial studies. That puts all 75 theses from April back in the source, as reading editions with their studies. I withdrew one page afterwards (OPMVP II), so 134 remain.

I also had Claude take the AI-edit disclosure lines off every page. There were 256 of them. I take the edited text as my own.

One frame

Then the layout. My note was: “no scrolling and try to give every single page the same treatment. canvas exhibit with no scroll bars. Text on the right side with scrolling.”

That’s the frame you’re reading now. The exhibit holds the left side with no scroll bars. The text scrolls on the right. The page itself never scrolls. On a phone held upright, the exhibit takes the top half. When a paragraph crosses a reading line 35% of the way down the text column, the exhibit steps to whatever that paragraph is about. Scroll this page and the clock on the left moves with it.

The console

Then I went through the pages in a review console and marked each one ✓ or ✗, with a note when it needed one. 42 pages came back with work to do. Most notes were one line: “scale z dim corrextly.” “header stays static? really?” “door swings are not scaled correctly.” Four had no words at all. Two pages I pulled outright: Edifices and OPMVP II.

One note wasn’t about a page: “clean out the next reads stuff. solved it with the side panel”. So the “Next read” links went. 26 essays and two reading editions lost theirs in one commit, and 20 more pages lost their “Next:” paragraphs in a second. The library side panel does that job now.

Lanes

Claude didn’t work the list top to bottom. It ran it as lanes. One page per worker. Each worker is a Claude Opus model in its own git worktree, with a shared brief and my note word for word. It reads the page and its source, rebuilds the exhibit, writes a test, builds a preview, screenshots it at desktop and phone sizes, looks at the screenshots, fixes what looks wrong and commits. Then it writes a one- or two-sentence reply to my note for the console. The orchestrating session merges the lane, runs the tests, pushes the branch and starts the next one.

Five at a time. Counting each lane from the commit it branched from to its merge, never more than five were open at once. The first lane merged at 04:09 UTC: Cabinets I, redrawn at one true scale in width and height.

The twentieth, Kitchen Generator II, merged at 06:00. The median lane took 31 minutes from branch point to merge.

What the lanes found

The useful part is what the lanes found that wasn’t on their page. Workers aren’t allowed to touch the shared frame. They report what they need, and it gets fixed once, for every page:

  • Stable frame heights. Every study runtime now keeps one frame height per width, the tallest example’s, so a drawing never rescales between examples. That answered the “text moving” notes on File Cabinets, Furniture Clearances and Room Configurator V.
  • Label colours. Two drawing helpers wrote their default fill and size before the caller’s, so every muted or resized label came out white at 13px. Found by the Elevation I lane.
  • Phones. A page’s own exhibit now fills the top half (the WhitePaper lane), and a study that runs a little past it shrinks to fit. Phone overflow on the early, retired and engineering studies went from 51 of 58 to zero. 25 thesis studies still swipe.
  • Figure caps. The image height caps were squeezing custom exhibits too. Found by the Symbols II lane.
  • The reading-line sweep. A page’s last paragraphs can never scroll up to the 35% line, so the last steps of a study were out of reach. Now the line sweeps to the bottom over the last stretch of scroll. Found by the Portals lane.
  • Thesis panes. A 760px cap meant every thesis drew its exhibit in a 420px pane, a 363px drawing beside an oversized text column. Now they use the full pane. Found by the Thesis 51 lane.
  • Name collisions. Two lanes each added a helper called feetInches and one called textWidth to the same file. The merge renamed them, and both drawings render exactly as they did in their lanes.

The last lane in, Generic Room Configurator: Closed Early Alpha, merged at 10:13 UTC, six hours and three minutes after the first. 40 came in by merge and one was committed straight onto the branch. Along the way the lanes added 41 test files and 21 new exhibit modules. From the gate to that last merge the branch took 125 commits.

What I haven’t checked

The lanes could search the web but couldn’t open most of what they found from their sandbox. So when a page now leans on outside facts (Hines’ building heights, Security Capital’s deals, a steel schedule, tree species), the candidate sources are listed in editorial/sources-to-verify.md for me to read. 19 lanes added to that list, and it grew from 5 sections to 22. Until I open them, those figures are unverified.

Each lane’s brief asks its tests to check that every drawing comes out with finite numbers and every label stays inside its box. Tests like that say a page renders. They don’t say it’s good. That’s what the console is for.

Where it stands

At 10:13 UTC, 41 of the 42 were merged. The last one in was Generic Room Configurator: Closed Early Alpha, where I asked for a plan editor with all the room-based BIM constraints. It’s one now: rooms are the primitive, walls are the edges rooms share, doors are schedule rows that join two rooms, and the checks from the room-based BIM posts run live. That leaves one page open: this post.

Claude wrote this one from the git log and the lane queue. Like the rest of the day’s work, it goes live when I approve its bytes, and not before.

In April I wrote that Claude can generate the shape of an argument at scale but can’t replace the judgment about which shapes matter. That’s still true. What changed is the plumbing around the judgment: a gate that only ships what I approved, a console where a note can be four words, and lanes that turn the note into a merged commit in about half an hour.

—Clifton

End of essay ·
Clifton Harness
·
October 15, 2026
Original on onlyplans.io ›