Skip to content

Tests and publishing

A recipe carries its own tests: sets of parameters, and the cut list each one must produce.

"tests": [
{ "id": "default_door", "params": {},
"expect": { "cutList": [
{ "material": "oak_natural", "thickness": 18, "length": 720, "width": 560,
"quantity": 2, "edges": { "L1": "abs2" }, "grainAlongLength": true,
"role": "side", … } ] } }
]

You do not type those numbers. The editor records what the recipe produces now, and the check compares against what it recorded — the same code path, so a case you record passes by construction. What the test is for is the day after: any change to a formula, to the blank rule, to the banding translation or to the ordering moves them, and moving them becomes a decision somebody makes rather than a diff nobody reads.

Five cases is the minimum, and the useful five are not five widths. Take the extremes of each range, one of every front, and one combination you expect to be refused.

The comparison is on the rows, not on the objects: a case that fails because shelf[2] became shelf[3] is a case people re-record without reading, and after the third time they re-record it always.

Asked once, when you publish — every fault it finds is the same for every customer who will ever open the recipe:

It refuses Because
an unknown name in a formula widht is not width, and nothing else will say so
a cycle in derived the cabinet comes out full of zeroes rather than failing
a name that is both a parameter and a derived value one of them is silently preferred
two parts with one id every reference to it picks one at random
a part in a slot the recipe does not have it will wear no finish at all
banding on the flat of the sheet it is dropped, and the panel arrives bare
more than 400 parts after repeat §5.4’s ceiling
parts that overlap ANYWHERE in the ranges see below
a default arrangement the recipe forbids it would refuse on first sight

Overlaps are checked across the whole parameter space, not only at the defaults — at the corners of every range and every option. That is not thoroughness for its own sake: a cabinet whose own divider meets the layout’s appears only above 900 mm wide, and everything below it is green.

It also warns, without refusing:

  • a rule whose condition is false at every corner. Usually a rule copied from a taller cabinet: height > 900 in a recipe whose height stops at 900 can never fire, and the third hinge it counts can never be counted.
  • an edge type or a fitting the catalogue has not been told about. The cabinet is still buildable; the price simply has a hole in it, and the quote names it.

A warning is never a refusal, because the corner check is a sample rather than a proof — and refusing a valid recipe stops a technologist’s day, while missing an invalid one is caught by a recorded cut list.

A published version is immutable. Saved kitchens pin themselves to the version they were quoted from: their price, their cut list and their DXF resolve through it, and editing it would change all three under a customer who has already ordered.

  • Editing a draft — free, as often as you like.
  • Publishing @2 — the kitchens on @1 do not move. Not their price, not their specification, not their geometry.
  • Deleting a version somebody has ordered from — refused by the database, not by a check somebody might forget.

The recipe’s own body is fingerprinted, so two shops that both publish base_cabinet@3 with different bodies stay different cabinets even inside one long-running service.

If the family already exists in your own software, you do not have to type the formulas. Export the cut list at two widths and upload both: the rows are matched by role and size, and each dimension comes back as a constant, a formula or a blank.

Only slopes a person would have written are proposed — whole panels, halves, thirds, quarters. Two points always fit a line, and 0.9137 is a perfect fit and not a formula; you are there to confirm, so a plausible wrong answer is worse than an honest blank.

A part whose COUNT follows the parameter — three drawers at one width, four at another — is reported rather than guessed at. That it changed is more than a formula for one row would have told you: it means that part needs a repeat.