Somebody sees a fireball. If they are lucky somebody else, standing somewhere else, sees the same one. Between them they have two directions, two positions, and two rough times, and the question is where to walk.
The archive names this tool in eleven posts, every one of them about a piece, and none about the shape. This is the one about the shape.
The chain

Each box is a module with its own tests, and they are separate because the failures are separate. What is worth noticing is the line under each box, because those are the parts I spent the most time on.
Two sightlines. One observer gives you a plane containing themselves and the path, not the path. That is geometry and no processing fixes it, which was the first thing I had to accept. Two planes intersect in a line, and here is the trap: two planes ALWAYS intersect in a line, so a two-station solve has no residual whatever the observers reported. There is nothing to check. A third station would give you one and costs money, so instead every station that marked four or more points along the track is overdetermined on its own, and the residual of that fit is the only error bar in the whole system that was measured rather than assumed.
The trajectory. Two people who hunt together will stand together, and side by side their planes nearly coincide. The solver refuses, and it refuses BEFORE the drive rather than after, because finding out afterwards costs a night.
Entry speed. Timing gives you the mean speed over the visible path, and constant deceleration turns that into a bracket rather than a number. The module runs the whole downstream chain at both ends of the bracket and issues a verdict only where the two ends agree. There is no midpoint and no best estimate, and adding one would be the single most tempting wrong thing available, because the ends often disagree and a midpoint would hide that behind a number that looks like an answer.
Breakup. Ram pressure peaks partway down, because the air is getting denser while the rock is slowing, and the product has a maximum. Anything stronger than that peak never breaks at all, anywhere, at any altitude. "It did not fragment" is a real answer and an iron usually gets it.
Dark flight. This one produced my favourite result in the project, and it is a negative. I built the fragmentation model specifically to derive the width of a strewn field and replace the ellipse width I had been inventing. It cannot. Fragments separate at about a thousandth of the forward speed, which carried down gives a couple of hundred metres of width against a ten kilometre length. A ten metre per second crosswind gives thirteen kilometres. Fifty times more. So the wind question the ellipse was already asking is the right question, and the module's job turned out to be proving that the thing it was built to compute does not matter.
The ground. For a long time the tool computed every impact point, drew them all on a globe, and never printed a position. Eighty one square kilometres to walk and no address. It now gives a bearing and a distance, because that is what a person standing in a field can act on, and the coordinate precision is tied to the size of the search area so it cannot claim a tenth of a metre next to an eleven kilometre ellipse.
And then the rock lands, which nobody had modelled
That last box is new this week, and it is the piece the whole chain had been missing. Everything upstream treats a meteoroid as a point with four numbers on it: a mass, a density, one strength, one ablation coefficient. That is the right model for asking whether something broke. It is the wrong one for asking what broke, or what happened after it stopped moving.

Once it has stopped burning, a meteorite is a rock falling at terminal velocity into dirt. That is a solved problem in a century-old engineering sense: the ground resists with a constant term and a term that goes as the speed squared, and integrating gives a closed form for the depth. A one kilogram stone into firm clay goes in about four centimetres. A ten kilogram stone goes about sixteen. Those are holes, not craters, which matches what people actually find.
The lever is size, not speed, and exactly so: depth goes as mass over frontal area, which for a fixed density is just the diameter. A rock twice as wide buries twice as deep, with no regime and no transition.
The right panel is there because I got the speed part wrong first. I wrote in the module's own header that the logarithm meant depth had stopped caring about speed, which is true a long way above where a meteorite arrives and false where it does. At terminal velocity the dynamic term is a third of the static one, the logarithm has barely engaged, and doubling the arrival speed nearly triples the depth. The saturation is real. It is gradual and it arrives late, and the sentence I had written was a nice line that the module's own numbers contradicted.
What the inside of a rock does
The other half is more interesting, because it comes out as an identity rather than a model.

Put a dense lump inside a weaker rock. As the rock decelerates, the matrix around the lump has to drag it along, supplying the lump's own mass times the deceleration across the lump's own cross-section. Write the deceleration as the ram pressure divided by the body's areal mass and almost everything cancels, leaving
a density ratio times a size ratio, and nothing else.
No strength appears. Not the matrix's, not the interface's. So the question of how hard the interface is being pulled is settled before you look up a single material property, and the strengths only enter afterwards, to say whether that stress is survivable.
For iron-nickel metal in an ordinary chondrite the density ratio is 2.32, which means a nodule more than about four tenths of the rock's length is being held by a stress larger than the pressure on the rock's own face. The same nodule in a rock ten times bigger is held by a tenth as much. That is why the interesting quantity is a ratio and not a size: a five centimetre nodule is a crisis in a fist-sized stone and a non-event in a boulder.
I want to be careful here. This is a first-order argument about one inclusion in one uniform body, it assumes the load is transmitted across the nodule's cross-section and nothing else, and real chondrites are not a matrix with a nodule in it, they are a texture. It is a lower rung than the rest of the chain and the module says so. But it is the rung that was missing, and it is the one that makes "how deep did it bury" answerable, because what reaches the ground is whatever was still attached when the burning stopped.
The one rule, repeated fifty five times
There are fifty five modules now, each with its own test file. What holds them together is not a framework. It is one habit applied over and over:
No function returns a conclusion where an elimination will do. The screening module has no function that returns "meteorite" and may never acquire one, because nothing doable in a field identifies one; a test walks all 11,664 combinations of answers and asserts that no sentence anywhere claims an identification. The photo module has no function that returns a mineral name. The drive modules have no function that returns "this works", and a test walks 1,152 assessments to prove it. The new interior module has no function that returns "this survived", and a sweep of 240 cases checks that too.
Every number worth trusting is computed twice, by routes that share no algebra. Conserved quantities are not enough for this, and that is the important part: a wrong orbit can conserve energy perfectly. So the exact conic solver and the numerical integrator are required to agree to under a metre over a day. The closed-form penetration depth is checked against step-by-step integration and, separately, against the work-energy theorem in the limit where the theorem applies. The one figure of merit derived from first principles, the Chandrasekhar mass, is compared against the published 1.44 solar masses precisely because the two share nothing.
Anything transcribed is a range and says so. Soil resistances, material strengths, reaction rates: all of them are bands with a flag on them, and the functions take the unfavourable end by default. A design that closes when the numbers are unflattering closes.
That is not a style preference. It is the whole thesis of this blog pointed at my own work: a system that returns a well formed answer which happens to be false is the failure mode that no test suite catches by getting bigger. The refusals are the part that catches it.
Where this goes, and why a landscaper cares
Two directions, and I am being straight that neither is built.
The body as a real interior rather than one inclusion. Density and strength varying through the rock, so the model can say which part of it reached the ground and in what state. The identity above is the first rung of that ladder and there are several more.
Fluid dynamics at small scale, which is the one I actually need for two different businesses at once. For meteorites it is the last link: a specimen does not land in an idealised half-space, it lands in soil with water in it, and the water decides whether the ground behaves like the firm end of that band or the soft end. For the land work it is the whole job. Where water goes across a yard, where it sits, what a swale does, how fast a slope sheds it: that is the same arithmetic, at the same scale, and it is the difference between a drainage plan that works and one that looks reasonable on paper.
That needs an engine neither project has yet. Not a weather model and not a CFD package: something small, testable the way everything above is testable, and honest about a soil parameter it cannot measure.
And it will not render all at once. The panel already folds, because twenty six sections is not a panel, it is a scroll, and I measured it at thirteen thousand pixels before adding fold controls. Anything this heavy arrives the same way: its own suite, off by default, collapsible, and never computing anything until somebody opens it. A simulation that runs on every keystroke is a simulation nobody waits for.
The honest summary
It takes two sightlines and gives back a patch of ground, a bearing, a distance, and now a depth band. It refuses more questions than it answers, on purpose. Every number in it is either derived from constants or marked as transcribed with its range. And the single most useful thing it has ever told me is that the model I built to compute strewn field widths could not, and the wind I was already accounting for mattered fifty times more.
Most of what I have built here is a machine for finding out that I was wrong, slightly faster than I would otherwise have found out. That turns out to be worth quite a lot.
Move them yourself
The solver below is the engine's own, running in your browser. The angles it opens on are the exact ones two observers at those coordinates would have reported for the case the test suite pins, so the first thing you see is a figure that is checked rather than illustrated.
Then walk the second observer toward the first.
Two planes always intersect in a line. That is the trap this whole piece is about, in one sentence. Whatever two observers report, however hopeless their geometry, the arithmetic still produces a trajectory, and there is no residual to tell anybody it is worthless, because with two planes there is nothing left over to be a residual. A useless answer and a good one look identical.
The convergence angle is the only defence, and it is a statement about where the observers stood rather than about what they saw. Below five degrees the two planes are too nearly the same surface and whatever intersection remains is set by floating point rather than by the sky, so the solver refuses instead of answering.
Which is the practical version of the thing worth remembering: two people who hunt together will stand together, and standing together is the one arrangement that cannot be solved. Drive apart first.