Donal O Callaghan
06

The checking was the work

A relative was building a house in rural County Cork. The council had published the whole planning application, drawings and all, so I wanted to know whether an agent could turn those scanned sheets into a model I could stand inside, and whether I could trust it.

The walkthrough. Sixteen rooms, six garden viewpoints, fifteen kilobytes of WebGL.

The answer to the first question was yes, in about a minute. The answer to the second took two days, and that’s the part I’d point anyone at.

What was built

One agent, running in Codex, was given the planning reference and nothing else. It pulled the thirty-odd documents from the council’s portal, hashed every file, and read the grant order to work out which set of drawings was the governing one when the May and July sheets disagreed. That decision was written into an assumptions file before any modelling started.

The house is a Python script that runs inside Blender. Every wall, opening and roof plane is a named line of code, so the whole thing can be deleted and rebuilt in a minute, and anyone can read where each number came from. Written dimensions on the drawings are hard constraints. Anything scaled off a scan is recorded as an inference. Where the dimension chains on the plan disagreed with each other, the script picks one and says so.

Then it went into the browser. The walkthrough is a WebGL renderer written from scratch, about fifteen kilobytes, no three.js, no loader, with walking rules exported from the same model so the minimap matches the walls exactly. Sixteen rooms, six garden viewpoints.

The full write-up, with the renders, the drawing comparisons and the walkthrough itself, is at planning-to-3d.vercel.app.

The part that matters

An agent that builds a house in a minute will also build a wrong house in a minute. The first pass had open roof junctions, a porch floating off the ground and two ground surfaces overlapping. None of that is unusual. What was unusual is that the loops to find it were the project.

After each build stage the agent rendered the six fixed cameras that match the drawing views, named the three worst discrepancies against the sheets, fixed them, and rendered again. Inside, it walked every room looking in four directions, then ran route tests: can each of the sixteen doors be approached from both sides, does every hinged leaf swing clear of the furniture, do all seventeen windows block walking. Two doors failed because their open leaves hit each other, which a furniture-only check would never have caught.

At the end it reopened the saved file in a fresh Blender process and measured the roof pitches back out of the geometry. Forty degrees and thirty-six, exactly what the drawings said.

And the list of what’s still open is on the page: hidden roof junctions, an angled doorway, the shower, gross versus net floor area. Listed, not hidden.

Why it’s on this site

This is the same shape as everything I do at work, just with a house instead of a codebase. Give the agent the source material rather than the answer. Make the output a script so every correction is a diff. Keep what is known separate from what is pretty. And write the limits down where people will read them.

The pretty renders were made on a copy of the model, with a hash list between the two files to prove the copy didn’t move a wall. The viewer shows the plain one on purpose.

The house belongs to family, so the planning reference, the townland and the names are left off. The method is public. The people aren’t.

NextWe brought in spec-driven development. Then we took it out. →