Research / Benchmark

Nordform Trueline

A benchmark for whether a design factory produces what it claims, and stops where it should.

Corpus plumb-v1, frozen 20 October 2026Last run 2026-10-21 (corpus plumb-v1)Runs 3Authors Nordform

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.
FlowDevHeld outWhat runs
planner-to-artifact4416A brief and a request on an existing house design, through to delivered files
roadmap-edits264Multi-turn edits on one design, graded inside the factory
direct-execution11A fixed request with no model, to isolate the build and the checks
Table 1. plumb-v1 composition. The planner cases cover supported edits, requests that must be refused or asked about first, scope, locked requirements, questions, room edits, requests with a reference image, and whole houses set up from a manufacturer's public product page.

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

  1. 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.
  2. 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 armAllDevHeld out
Verified designs24 of 2886% [69%, 94%]20 of 2387% [68%, 95%]4 of 580% [38%, 96%]
Typed proposal correct51 of 6085% [74%, 92%]38 of 4486% [73%, 94%]13 of 1681% [57%, 93%]
Correct stops, of stops required19 of 2286% [67%, 95%]15 of 1788% [66%, 97%]4 of 580% [38%, 96%]
False claims, of stops required0 of 220% [0%, 15%]0 of 170% [0%, 18%]0 of 50% [0%, 43%]
Over-refusals, of cases needing work0 of 380% [0%, 9%]0 of 270% [0%, 12%]0 of 110% [0%, 26%]
Files opened by independent readers58 of 58100% [94%, 100%]48 of 48100% [93%, 100%]10 of 10100% [72%, 100%]
Reruns identical28 of 28100% [88%, 100%]23 of 23100% [86%, 100%]5 of 5100% [57%, 100%]
Runs that failed0 of 560% [0%, 6%]0 of 460% [0%, 8%]0 of 100% [0%, 28%]
Table 2. Main results. Each cell gives the count, the rate and its 95% Wilson interval. A case nobody could ask is unmeasured and counts in no rate.
All casesFactoryModel alone
Typed proposal correct51 of 6085% [74%, 92%]26 of 5845% [33%, 58%]
Correct stops, of stops required19 of 2286% [67%, 95%]9 of 2241% [23%, 61%]
False claims, of stops required0 of 220% [0%, 15%]0 of 220% [0%, 15%]
Over-refusals, of cases needing work0 of 380% [0%, 9%]0 of 360% [0%, 10%]
Verified designs24 of 2886% [69%, 94%]None by constructionno kernel, no files
Table 3. The factory against the same model asked on its own, graded by the same grader. The model alone cannot build a design, so the comparison is in the typed proposal and honesty.
0%25%50%75%100%All (n = 28)Dev (n = 23)Held out (n = 5)
Figure 1. Verified designs as a share of cases whose answer is a design, run of 2026-10-21. Lines are 95% Wilson intervals; the held-out split is small, so its interval is wide.
Kind of case, all splitsCasesTyped proposal correctVerified designsModel alone, typed proposal
Operations expected: one2523 of 2592% [75%, 98%]20 of 20100% [84%, 100%]14 of 2458% [39%, 76%]
Operations expected: several73 of 743% [16%, 75%]3 of 743% [16%, 75%]1 of 617% [3%, 56%]
Operations expected: none2825 of 2889% [73%, 96%]1 of 1100% [21%, 100%]11 of 2839% [24%, 58%]
Protected values: none5547 of 5585% [74%, 92%]23 of 2785% [68%, 94%]26 of 5349% [36%, 62%]
Protected values: some54 of 580% [38%, 96%]1 of 1100% [21%, 100%]0 of 50% [0%, 43%]
Reference input: none5449 of 5491% [80%, 96%]22 of 22100% [85%, 100%]26 of 5448% [35%, 61%]
Reference input: present62 of 633% [10%, 70%]2 of 633% [10%, 70%]0 of 40% [0%, 49%]
Request language: en5548 of 5587% [76%, 94%]23 of 2592% [75%, 98%]24 of 5345% [33%, 59%]
Request language: fi53 of 560% [23%, 88%]1 of 333% [6%, 79%]2 of 540% [12%, 77%]
Table 4. Results by kind of case. The levels are read from each case (how many operations it expects, whether it protects values, whether it carries a reference, its language); they describe the case and are not calibrated difficulty.
Cost and time, all casesValueBasis
Factory run time, median / 95th percentile6.2 s / 7.7 s28 executed cases
End to end with the model, median / 95th percentile12.1 s / 19.9 s60 cases
Model calls60
Tokens in / out581,806 / 55,121
Model cost per verified design€0.12€2.95 in total
Table 5. Cost and time of the factory arm. Times come from the benchmark runner. End to end counts every case, including those that rightly stopped before any factory run, so its median can sit below the factory's. Model figures: asked live. Model cost is list price.

Run notes

What this run measured nothing on

Run history

DateRunCorpusVerified designs, allHeld outModel aloneReport
2026-10-20v0 shakedownfactory-corpus@023 of 284 of 5Not runJSON
2026-10-21nightly 1cc74897plumb-v124 of 284 of 5RunJSON
2026-10-21nightly c2dd1170plumb-v124 of 284 of 5RunJSON
Table 6. Every dated run, in order, losses included. A run is never removed or replaced.

6. Scope

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.