On one side, architects design in parametric software like Rhino, Grasshopper, Revit, BIM tools. On the other side, building regulations sit in static PDF documents. And between them, There’s no live connection. One is dynamic, the other is static text.

Who actually needs this? Architects. Specifically during the concept and design phase when you’re iterating fast playing with massing. Right now, compliance check happens later in the process. So the idea with Policy-to-Algorithm is to shift that effort early and get feedback while you’re still designing, to push the viability of that design during official checks.

the starting point was asking How can building regulatory compliance be verified continuously during the design process rather than as a separate post-design activity?

I mapped the entire landscape. 39 systems evaluated against 29 capabilities. This is the full picture. But the key insight isn’t in the web of connections, it’s in the gaps.
looking at Large language model based rule extraction. Several research groups have shown that, these Language models can extract and formalize building regulations with up to 97% accuracy. the capability is proven. the models CAN read a regulation PDF and turn it into structured rules. This part of the puzzle exists.
translating those extracted regulations into actual executable code that can run against a checker model. This is something only a handful of systems are attempting, and most target pre-classified models, meaning you already need a fully labeled building model before they work.
In response to that Nearly 64% of the systems in this landscape require a pre-classified IFC model as input. IFC gives you geometry AND semantic labels like this is a wall, this is a window, this is 2nd floor etc. The building has to be labeled before any compliance checking can begin.
This is what an IFC file looks like. Lines and lines of text. It’s essentially a serialized database of every property of every element in the building. It contains incredible information. But it’s not exactly friendly. to actually USE any of this, you have to parse it. Decode it. Map properties to elements, Libraries like IfcOpenShell do this, but it’s a whole pipeline just to read the file, before you even get to compliance checking.
So my first investigative attempt — was exactly this. Upload IFC, extract with IfcOpenShell, match LLM-extracted regulations against the IFC which output a compliance report.
This is IFCore. the compliance checker we developed in the AI in Architecture and urbanism seminar here at IAAC. It works. You can click on elements, see pass/fail, ask the AI assistant questions. It’s a real functional tool. But then I hit a wall. a fundamental workflow problem.
This is what my first attempt was. while trying to build a checker inside grasshopper, The geometry alone isn’t enough. You need semantic information. all these inputs are something which the checker needs to know about the design based on the regulations to perform compliance checks.
Back to the landscape graph.
when we look at raw geometry input. Rook with their Polygon Soup paper showed you can classify exterior surfaces from unlabeled geometry with 85-99% accuracy using heuristics.
looking deeper at heuristic classification which is classifying elements from geometric properties alone. A handful of academic papers like SeeBIM from Sacks, give a key insight that spatial relations between elements are more powerful than shape alone for classification. That’s exactly why a pipeline should classify and then relate geometries.
A pipeline to extract information from raw geometry and use it for compliance checks
The plugin is a five-stage pipeline, each stage builds on the one before it.
Trace. Classify. Relate. Extract. Comply. First… Trace. When you feed geometry into the plugin, it doesn’t just take the Brep. It walks backward through your Grasshopper definition and records where each piece came from. Which component created it, what transformations it went through. This provenance chain is stored, so we can tell exactly which elements fail compliance. Next… Classify. The system looks at each geometry and measures its properties, and based on the heuristics and semantic logic figures out A vertical closed solid with thickness around 200mm is a wall. Same shape but with inner loops is Wall with openings. No labels from the user needed.
Classification is focused at Twelve element types in total. Then… Relate. This is where individual elements become a building. The system connects everything into a semantic graph. Walls host windows. Slabs carry walls. And by traversing wall loops, the system discovers rooms and spaces that were never modeled, just implied by the geometry. This relational layer is what makes compliance checking possible. Now the regulation side… Extract. You give it a PDF of building regulations. The LLM reads the text and breaks it down into machine-readable fields. Parameter, Operator, Value, Unit. It resolves the legal language, And tags which element types this applies to, what category of check it is, and how confident the extraction was. All four stages flow into Comply. The engine takes classified geometry from one side, structured regulations from the other, and runs the checks. The key part is it traces the failure back through the provenance chain, and tells you: this is the component that controls your element. Modify here to fix. That’s the feedback loop. Design to compliance in one environment.
This is the full pipeline. Two inputs: Rhino geometry at the top which gets traced for metadata, classified with heuristics, refined with relational context, built into a semantic graph, and then checked against regulations.
Regulation PDFs come in from the bottom — LLM extracts structured rules, they get filtered by category, and the geometric ones flow into the compliance engine. The key thing is Everything runs inside Grasshopper. No export. No external platform. You change a wall dimension, compliance should update in real time.
This is the pipeline running live in Grasshopper.
Each stage is a component, here i also experimenting with incorporating local models for extraction and for the fallback classification of elements.