Research · Kernel
Kernel

A product is not a collection of shapes

Reading engineering data that already exists and generating geometry that does not yet exist are treated as separate problems. They need the same thing underneath, and that thing is not a shape.

The knowledge problem, from both directions

Engineering produces an enormous quantity of data. CAD files, drawings, requirement documents, test reports, supplier specifications, revision histories. Almost all of it gets stored. Very little of it stays usable.

The knowledge is trapped inside the artifacts. Below is a production drawing for a generator shaft, traced at General Electric in Schenectady in April 1910 and inspected that November. It is a good drawing. It is specific to a ten-thousandth of an inch, and it has outlived everyone who worked on it.

General Electric drawing M1130977, Shaft and Keys, 1910, with the Spider Fit seat label and a 1.2599 inch reaming note called out.
Figure 1. General Electric Co., Schenectady, drawing M1130977, “Shaft & Keys”, traced 21 April 1910 and reproduced in a 1920 manual, which puts it in the public domain. Detail 1 is turned upright to be read.

Look at what it records and what it leaves out. Written along the shaft, in the draughtsman's hand, are the words Comm. Fit., Spider Fit. and Cast Iron. Each marks a seat where another part mounts. Each is a relationship, and none of them carries a number. Whatever tolerance made those seats work lived in shop practice that everyone at Schenectady knew and nobody wrote on the sheet.

Read the dimensions literally and the sheet will mislead you. It calls for a hole reamed to 1.2599 inches, which reads as a requirement held to a ten-thousandth. Multiply by 25.4 and it is 32 millimetres. Four more do the same: 5.7087 is 145, 11.811 is 300, 8.8583 is 225, 2.1654 is 55. The journals, meanwhile, are 3.500 and 4.500 inches, round in inches and nothing in particular in millimetres. Two unit systems on one sheet, with nothing marking which digits carry intent and which are an artifact of conversion. The fitter knew. The drawing does not. When he moved on, the dimensions stayed and the reasoning left.

A second problem has appeared more recently. Machine learning systems can now generate geometry, and much of what they produce looks right. Sent to a 3D printer, it will often print. Placed in an assembly next to the parts it has to work with, it comes apart. Holes do not line up. Clearances are missing. The output is a shape, not a component.

One problem is about reading data that already exists. The other is about producing data that does not exist yet. They share a cause. In neither case is there a representation of what the product actually is.

What a product actually is

A closed manifold surface, usually called watertight, is a surface with no gaps and no holes, where every edge joins exactly two faces. It is what lets a 3D printer decide what is inside the object and what is outside. It is a real guarantee, and it is the bar most generated geometry is measured against.

It is also close to the weakest interesting guarantee available. It describes one object on its own, and says nothing about whether that object belongs in the machine.

Consider what has to be true before a part will assemble. Its mating face has to be flat enough, which is a tolerance and not a shape. Its bolt pattern has to agree with the pattern on the part it meets, which is a property of the pair and not of either one. It has to leave room for the tool that installs the fastener, and hold its fit across temperature and the accumulated variation of every part that positions it. Change one dimension and you change the answer to several of those at once, in places nobody is looking.

The same L-shaped part shown alone, watertight and passing every single-part check, then shown against the part it bolts to, its bolt pattern two millimetres out of step.
Figure 2. The same part twice, unchanged. On the right its bolt pattern is two millimetres out of step with the pattern it has to meet, leaving 3.4 mm of clear opening for a bolt that needs 5. Neither part is wrong on its own.

None of that lives in a shape. It lives in the relationships between shapes, and between shapes and the requirements that produced them. Parts that fit other parts within stated tolerances. Interfaces that carry load. Requirements that trace forward to the decisions satisfying them and the tests verifying them. Changes that propagate along those connections whether or not anyone follows them.

Geometry is one projection of that network. It is the most visible projection, which is why it gets mistaken for the whole thing.

Here is a case from our own work that shows how thin the line is. A shaft seated in the bore of a housing, running clear of it by two hundredths of a millimetre. The two parts share no material at all, because the shaft occupies a void inside the other part. But their bounding boxes, the rectangular volumes that enclose each part, nest almost perfectly.

An Ø11.96 shaft sectioned in an Ø20 housing with an Ø12 bore, sharing 0 cubic millimetres of material, while the bounding boxes share 8,582 cubic millimetres, 85% of the shaft's own volume.
Figure 3. An Ø11.96 shaft in an Ø12 bore, so 0.02 mm of radial clearance and no shared material at all. One of these two answers is the geometry. The other is wrong by the size of the part.
Interactive vary the shaft, watch the two answers diverge
housing Ø20, bore Ø12, 60 long

radial gap exaggerated for clarity; the numbers below are exact

shaft Ø 11.96 mm
True shared material
0 mm³
Bounding-box overlap
8,582 mm³
Clearance fit · 0.020 mm radial gap
Interactive companion to Figure 3. Drag the shaft diameter from 11.90 to 12.10 mm. The true shared volume runs from zero to a real interference while the bounding-box estimate barely moves, and the fit crosses from clearance into a genuine press fit at Ø12.00.

Our kernel proved the shared volume was empty, and then had no way to say so, because an empty result and a failed computation returned the same thing. The interference check saw a failure, fell back to comparing bounding boxes, and reported a serious collision on a fit that was entirely correct. A perfectly good clearance fit was indistinguishable from a part driven straight through another.

The arithmetic, if you want to check it

housing outer Ø20, bore Ø12, 60 long shaft Ø11.96, 90 long, seated in the bore material in the housing π/4 × (20² − 12²) × 60 = 12,064 mm³ material in the shaft π/4 × 11.96² × 90 = 10,111 mm³ material they share = 0 mm³ bounding boxes share 11.96 × 11.96 × 60 = 8,582 mm³

Not slightly off: it claims 85 per cent of the shaft is buried in solid metal.

The fix was conceptual rather than numerical. An empty result had to become a first-class answer in its own right, carrying a proof of why it is empty, and distinguishable from a computation that gave up. A fit is not an absence of geometry. It is a relationship, and the representation has to be able to hold it.

Interpretation: making sense of what already exists

We call this half of the work Autonomous Evolution. The goal is to take existing engineering data, in whatever state it arrives, and turn it into a coherent product model that can be edited, queried and traced.

The instinct is to call this an import problem. It is not. Reading the bytes of a CAD file is understood and largely solved. What is missing when you finish is everything that was never written down formally. The relationships were in the engineer's head, or in a review meeting, or implied by a dimension that only makes sense if you know what the part does. Reconstructing them is inference, not parsing.

The problem breaks into four pieces. They are listed here in rough order of how well we understand them, which tells you more than the order they run in.

Three of those four already run, because generating products required them before interpreting anybody else's did. You cannot generate a change and not know what it touches. So the interpretation work starts from a graph that already carries load, with one genuinely new component in front of it.

Generation: geometry that has to survive the rest of the machine

The other half is a geometry kernel we wrote ourselves. A kernel is the component that represents and computes shape. It decides what a solid is, what it means to cut one solid with another, and whether the result is valid. Most CAD software licenses one from a small number of vendors. We built our own, which needs justifying, and the justification is representation.

Four commitments, all of which come back to that.

The last one is the least glamorous and the one we argue about most. It is tempting to always return something. The cost is that nothing downstream can be relied on. The fit above settled the argument for us: the old behaviour did return an answer, and the answer was wrong by the size of the part. Refusing is also what separates autonomous engineering from automation. A system that only follows instructions has no grounds on which to stop.

What the two halves actually share

It would be neat to say interpretation and generation are the same activity. They are not, and the loose version of that claim falls apart on contact with either problem.

They do not share their difficulty. When you generate, you know the relationships, because you chose them. The hard part is producing exact geometry that honours all of them at once. When you interpret, the geometry is already there and costs nothing. The hard part is recovering relationships nobody ever wrote down. Those are different problems needing different techniques.

Generation and interpretation both point at one product representation graph, with requirement, part, face, tolerance and test nodes; every edge has a type and a direction.
Figure 4. What is known going one way is what must be inferred going the other.

What they share is the target. Both have to arrive at the same structure: a product model where relationships are stored facts with type and direction, sitting alongside the geometry rather than being guessed from it.

That is a practical claim, not a philosophical one. Build the interpretation side on a representation that only holds shape, and you can read a thirty-year-old assembly perfectly and still not answer whether opening a bore breaks a fit. Build generation on the same thin representation and you produce parts that pass every check until they meet each other. The same missing thing causes both failures, which is why the representation is where the work goes.

Where we actually are

This is a proof of concept, and not in the modest sense people use when they mean nearly finished.

What works today is the generation side. The kernel produces exact geometry, validates its own output, and reasons about assemblies rather than isolated shapes. Traceability and change impact run against products our own system generated, where every relationship was recorded as it was created. That is the easy case: nothing had to be inferred, because nothing had been lost.

What does not work yet is the harder direction. Taking a folder of files from a company with thirty years of history and reconstructing relationships nobody wrote down is an open problem, and we are at the start of it. We expect the interesting failures to come from archives that contradict themselves, because real archives usually do. A system that cannot say "these two documents disagree" will quietly invent a product that never existed, and be confident about it.

The interpretation half is a project we have put forward for European regional funding, scoped as a feasibility study rather than a product. The reason to mention it at all is narrow: what a feasibility study owes is findings, and findings can be published, including the ones that read "we tried this and it did not hold." Those are the posts we would most like to read from other people, and the ones we intend to write.

If you work on engineering data, on geometry kernels, or in the awkward space between them, we would like to hear from you. We are particularly interested in how other people handle archives that contradict themselves. We do not have a good answer yet.

← Back to all notes