Research / Benchmark
Nordform Trueline
A benchmark for whether a design factory produces what it claims, and stops where it should.
Abstract
Before laying a course, a builder sets a true line and checks every course against it. Trueline applies the same test to automated design. Given a brief in plain language, does a design factory return the design the brief asked for, stop or ask when it should, keep the values it was told to protect, and write files that readers sharing no code with it can open? Trueline compares the factory with the same model asked on its own, on a fixed corpus with a held-out split, and publishes every dated run. In the latest run (2026-10-21, nightly c2dd1170), 24 of 28 cases whose answer is a design ended in a verified design (4 of 5 held out), with 0 false claims in 22 cases that required a stop. The same model asked on its own got 26 of 58 typed proposals right, against 51 of 60 for the factory, with 0 false claims.
1. Why this benchmark
General language-model benchmarks reward a confident answer. In design work a confident wrong dimension costs more than a question back: it travels into drawings, orders and site work. The public text-to-CAD benchmarks we know of grade shape similarity. They do not grade whether an answer stops when the brief cannot be met, or whether another vendor's tool opens the files. Trueline grades those directly, and leaves model judges out: every measure has a typed answer to compare against.
2. What is measured
The headline measure is verified designs: of the cases whose answer is a design, the share where the factory ran, an independent check accepted the result, every delivery was ready, and the typed proposal is the one the case expects. The other measures are reported beside it and never folded into one score.
- Typed proposal
- The answer's workflow, outcome and every operation match the case, with no extra operations.
- Honesty
- Correct stops on cases that must be refused or asked about; false claims, where a stop was required and a design was delivered; over-refusals, where work was possible and was refused.
- Constraints
- Protected dimensions or openings changed; numbers off by a power of ten.
- Files open
- Delivered IFC and DXF files that IfcOpenShell and ezdxf open and find a model in. Our own parser never counts.
- Reruns identical
- The same request, run again from the start, gives identical output. When a run replays recorded model answers, the model stage is fixed and only the factory is rerun.
- Reliability
- Runs, failures by code and timeouts.
- Cost and time
- Run time at the median and 95th percentile, model calls, tokens, and euros per verified design.
3. Corpus
plumb-v1 was frozen on 20 October 2026. The benchmark was published as Nordform Plumb until 21 October 2026; its first corpus keeps the identifier plumb-v1, and results recorded before the rename keep the old name. A changed case makes a new corpus version, never a different plumb-v1. About one case in five is held out by a fixed hash rule. The 44 dev planner cases are published with their contents; the roadmap and direct-execution cases run inside the factory and are counted, not published. Held-out planner and roadmap cases are published as SHA-256 commitments, so a case released later can be matched to the numbers computed on it.| Flow | Dev | Held out | What runs |
|---|---|---|---|
| planner-to-artifact | 44 | 16 | A brief and a request on an existing house design, through to delivered files |
| roadmap-edits | 26 | 4 | Multi-turn edits on one design, graded inside the factory |
| direct-execution | 1 | 1 | A fixed request with no model, to isolate the build and the checks |
The held-out cases were written by the people who build the factory. In plumb-v1, held out means unpublished; a corpus written by people who do not tune the factory is the control we intend for a later version.
4. Systems compared
- Nordform factory. A model reads the brief and answers with a typed proposal: named operations on named parameters, never geometry or code. Deterministic code builds the design from it, the registered checks run, and the IFC and DXF files are written.
- Model alone. The same model, the same case and the same plan schema, with no factory prompt, catalogue, kernel or checks, graded by the same grader. It cannot make a design, so the comparison is on the typed proposal, honesty and constraints.
5. Results
Run of 2026-10-21 · nightly c2dd1170 · corpus plumb-v1 · model claude-opus-5-5 · results JSON
| planner-to-artifact, factory arm | All | Dev | Held out |
|---|---|---|---|
| Verified designs | 24 of 2886% [69%, 94%] | 20 of 2387% [68%, 95%] | 4 of 580% [38%, 96%] |
| Typed proposal correct | 51 of 6085% [74%, 92%] | 38 of 4486% [73%, 94%] | 13 of 1681% [57%, 93%] |
| Correct stops, of stops required | 19 of 2286% [67%, 95%] | 15 of 1788% [66%, 97%] | 4 of 580% [38%, 96%] |
| False claims, of stops required | 0 of 220% [0%, 15%] | 0 of 170% [0%, 18%] | 0 of 50% [0%, 43%] |
| Over-refusals, of cases needing work | 0 of 380% [0%, 9%] | 0 of 270% [0%, 12%] | 0 of 110% [0%, 26%] |
| Files opened by independent readers | 58 of 58100% [94%, 100%] | 48 of 48100% [93%, 100%] | 10 of 10100% [72%, 100%] |
| Reruns identical | 28 of 28100% [88%, 100%] | 23 of 23100% [86%, 100%] | 5 of 5100% [57%, 100%] |
| Runs that failed | 0 of 560% [0%, 6%] | 0 of 460% [0%, 8%] | 0 of 100% [0%, 28%] |
| All cases | Factory | Model alone |
|---|---|---|
| Typed proposal correct | 51 of 6085% [74%, 92%] | 26 of 5845% [33%, 58%] |
| Correct stops, of stops required | 19 of 2286% [67%, 95%] | 9 of 2241% [23%, 61%] |
| False claims, of stops required | 0 of 220% [0%, 15%] | 0 of 220% [0%, 15%] |
| Over-refusals, of cases needing work | 0 of 380% [0%, 9%] | 0 of 360% [0%, 10%] |
| Verified designs | 24 of 2886% [69%, 94%] | None by constructionno kernel, no files |
| Kind of case, all splits | Cases | Typed proposal correct | Verified designs | Model alone, typed proposal |
|---|---|---|---|---|
| Operations expected: one | 25 | 23 of 2592% [75%, 98%] | 20 of 20100% [84%, 100%] | 14 of 2458% [39%, 76%] |
| Operations expected: several | 7 | 3 of 743% [16%, 75%] | 3 of 743% [16%, 75%] | 1 of 617% [3%, 56%] |
| Operations expected: none | 28 | 25 of 2889% [73%, 96%] | 1 of 1100% [21%, 100%] | 11 of 2839% [24%, 58%] |
| Protected values: none | 55 | 47 of 5585% [74%, 92%] | 23 of 2785% [68%, 94%] | 26 of 5349% [36%, 62%] |
| Protected values: some | 5 | 4 of 580% [38%, 96%] | 1 of 1100% [21%, 100%] | 0 of 50% [0%, 43%] |
| Reference input: none | 54 | 49 of 5491% [80%, 96%] | 22 of 22100% [85%, 100%] | 26 of 5448% [35%, 61%] |
| Reference input: present | 6 | 2 of 633% [10%, 70%] | 2 of 633% [10%, 70%] | 0 of 40% [0%, 49%] |
| Request language: en | 55 | 48 of 5587% [76%, 94%] | 23 of 2592% [75%, 98%] | 24 of 5345% [33%, 59%] |
| Request language: fi | 5 | 3 of 560% [23%, 88%] | 1 of 333% [6%, 79%] | 2 of 540% [12%, 77%] |
| Cost and time, all cases | Value | Basis |
|---|---|---|
| Factory run time, median / 95th percentile | 6.2 s / 7.7 s | 28 executed cases |
| End to end with the model, median / 95th percentile | 12.1 s / 19.9 s | 60 cases |
| Model calls | 60 | |
| Tokens in / out | 581,806 / 55,121 | |
| Model cost per verified design | €0.12 | €2.95 in total |
Run notes
What this run measured nothing on
- Cancelling a running job is not exercised: the harness runs the factory step by step, not as a whole job.
- Timings come from a benchmark runner, not from production. Runs on an emulated runner are slower than production.
- Room-study proposals are graded on the typed proposal and honesty only, and are left out of the verified-artifact count.
- Steel cases are not in plumb-v1.
- Laser cutting is not measured.
Run history
| Date | Run | Corpus | Verified designs, all | Held out | Model alone | Report |
|---|---|---|---|---|---|---|
| 2026-10-20 | v0 shakedown | factory-corpus@0 | 23 of 28 | 4 of 5 | Not run | JSON |
| 2026-10-21 | nightly 1cc74897 | plumb-v1 | 24 of 28 | 4 of 5 | Run | JSON |
| 2026-10-21 | nightly c2dd1170 | plumb-v1 | 24 of 28 | 4 of 5 | Run | JSON |
6. Scope
- A verified design matches its brief, was accepted by the factory's own verification and was delivered. Checks inside it can report an input as required or a question as not assessed. Whether its files open in independent readers is reported separately. Structural, regulatory and manufacturing approval stay with the qualified engineer who signs.
- plumb-v1 covers one design kernel, the timber kit-house frame. It says nothing about other kernels or families.
- The corpus is small, so intervals are wide. A difference inside overlapping intervals is not claimed.
- We wrote both the benchmark and the factory. The held-out split, the published graders and outside reruns are the controls on that.
- Time saved on real projects is reported only from real cases, with the client's permission, and never from this corpus.
7. When we rerun
Our rule is to rerun Trueline after every substantial change to what produces a design: the geometry kernels, the checks, the instructions and context the model reads, or the model itself. Each run that covers the held-out split is added to the run history above with its date, whether the result rose or fell.
8. Reproduce
npm install
ANTHROPIC_API_KEY=… node runners/model-alone.mjs --model claude-opus-5-5
node graders/grade.mjs --answers answers-model-alone-claude-opus-5-5.jsonl
PLUMB_FACTORY_COMMAND="./my-factory --one-case" node adapters/factory.mjs
Run the commands from the downloaded folder. The cases, graders, the model-alone runner, the factory adapter's contract and every result are published in the Trueline repository and with the method. Another factory that answers the adapter's contract can be graded on the dev cases; we run the held-out cases on request.
9. Cite
@misc{nordform2026trueline,
title = {Nordform Trueline: Does a Design Factory Produce What It Claims?},
author = {{Nordform}},
year = {2026},
note = {Corpus plumb-v1},
url = {https://nordform.ai/research/trueline/}
}
Cases and results: CC BY 4.0. Graders, runners and schema: Apache-2.0.