Where the data goes

Three turns. Two of them run offline and nothing leaves the machine; the third does not exist yet and is the one worth arguing about before it is written.

1fetch

We download the US safety regulator’s own published files — every complaint, recall and investigation it holds — and keep a dated copy.

model years 2019 + 2020 · every make · nationwide

Three public files onto disk, then frozen. Runs offline, once, and not while anybody is waiting.

  1. 1

    a request for a filecrosses to NHTSA

    GET static.nhtsa.gov/odi/ffdd/cmpl/FLAT_CMPL.zip

    The most anonymous request on this site. No query string, no vehicle, no account and no key — the same URL anybody would use. Nothing about Calder or its customers exists at this point in the pipeline, so nothing about them can be sent.

  2. 2

    every complaint since 1995from NHTSA

    355 MB zipped · 1.5 GB of tab-delimited text · no header row

    A US federal agency, and the data is public domain. This hop crosses a boundary and carries nothing outbound, which is the opposite of every other crossing on this site. The file has no header row, so a column is knowable only by position — and a mis-aligned column would put narratives in a date field without erroring.

  3. 3

    cut to the slice, and frozenyour network

    CMPL_SLICE.tsv · 100,980 rows · 70,194 complaints

    Stored exactly as returned, including the 23% of narratives filed in capitals. The snapshot is dated and never refreshed in place: the source file changes daily, and an answer key written against moving data rots underneath the eval baseline it exists to hold still for.

2index

Each complaint is turned into numbers so that a later question can find it. The model that does that runs on this machine.

bge-small · 384 dimensions · on this machine

Turning narratives into something searchable. Also offline — and this is the step where “local” stops being a cost decision.

  1. 4

    one complaint, one passageyour network

    709 characters on average — smaller than a chunk

    Chunking is probably the wrong verb here. A complaint is already about the length a chunker aims for, and cutting one in half would separate the fault from what the person did about it. The ODI number travels with the passage, which matters more on this engagement than usual: a citation here is a filing a reader can look up themselves.

  2. 5

    embedded locallyyour network

    bge-small, 384 dims

    THIS IS A DATA DECISION, NOT A COST ONE. Embedding touches every passage, so a hosted embedder means sending all 70,194 narratives to a third party to be read. Local means they never leave. It costs nothing to choose: measured on the sibling engagement, local bge-small scored recall@k 0.813 against the paid hosted model’s 0.813 — the same, so there is no accuracy argument on the other side.

  3. 6

    storedyour network

    postgres + pgvector

    One table, in a database Calder controls. Nothing about this step reaches a third party.

3ask

Somebody asks a question, and the complaints that answer it are put in front of a model — and that model is somebody else’s.

one question · one to seven tool calls · 4 to 131 seconds

The step where this corpus leaves the machine. It exists now, and what it sends was decided before it was written.

  1. 7

    somebody asksbrowser

    A question typed in ordinary words. Nothing personal in it.

    "are there complaints about deaths on the Tesla Model 3?"

    Anyone can ask, at /desk. The question itself names a vehicle and a symptom and nothing about the person asking — we set no cookie, take no account and keep no address.

  2. 8

    the question and the tool descriptionscrosses to the model

    The question goes to the model. No complaint does, yet.

    system   who you are, and the rules you answer under
    user     the question, as typed
    tools    five names, five descriptions, five argument shapes

    The smallest crossing of the three. Not one document from the corpus is in it — at this point the model has been told what it may ask for and nothing about what the answer might be.

  3. 9

    the tools run hereyour network

    The model asked for a tool. Our code ran it, on our machine.

    select … from documents where … · on our own connection

    The model has no connection, no credentials and no way to run anything. It produced text asking for this; our code decided whether to honour it. Every query in an answer runs here.

  4. 10

    and then the narrativescrosses to the model

    What people wrote about their own crashes goes to a model we do not run.

    ODI 11302656   ...autopilot and/or lane-assist features failed
    ODI 11533202   ...fatal accident and fire
    ODI 11364724   ...an upper ball joint failure

    THIS IS THE HOP THAT MATTERS, and the page will not pretend otherwise: the corpus reaches the model, because that is how the question gets answered. WHAT CROSSES IS THE VEHICLE, THE COMPONENTS, THE DATE FILED AND THE NARRATIVE. The VIN, the state and the mileage are parsed, stored and filtered on — and are not in what the tools return. The narrative itself is a member of the public’s own words, so it holds whatever they chose to type. Already public makes this defensible; it does not make it automatic, and a free tier that trained on what it was sent would be the wrong place to send it.

  5. 11

    an answer, in boxes rather than prosefrom the model

    The answer comes back as separate fields, then is checked before anybody sees it.

    answer    the prose
    counts    every number, with the tool call behind it
    cites     every claim, with the document behind it
    escalate  when a person has to decide

    Every claim carries the filing it rests on, so a reader can check it against nhtsa.gov rather than against us. Nine rules run before it is shown, and nothing is ever quietly repaired.

4keep

We keep what was asked and what came back — because this is the first part that does not do the same thing twice.

question · tools, in order · answer · engine · how long it took

One row per question asked at the desk, so the same question answered twice can be seen to differ.

  1. 12

    the question and the answer, filedyour network

    A row on our own database. Nothing about who asked.

    safety_ask_history
      question · tools[] · answer · engine · model · ms · escalated

    Written AFTER the answer has been sent, so nobody waits on it, and it never throws — losing a row is an annoyance, losing the answer somebody waited eighty seconds for is not. It records no address, no account and no session: there is nothing in the row that identifies who typed the question.

  2. 13

    the tool names, in the order they were calledyour network

    What it asked for, not just what it said.

    find_recalls → get_recall → count_complaints → search_complaints

    The reason the row is worth keeping at all. Two runs of one question can reach the same words by different routes, and this is the only place that difference survives — which is the distinction this whole engagement exists to insist on.

This is the first corpus here that is somebody's

The three engagements before this one run on documents written by us to contain the traps we wanted to teach. Their residency sections are accurate and cost nothing, because there is no person on the other end of a fabricated claim file.

carry a partial VIN
99%
of 70,194 complaints. NHTSA truncates it to 11 of 17 characters before publishing — enough for a model and a plant, not for a vehicle. That truncation is their de-identification and we must not undo it, including by joining it to anything.
report a death
41
filings, accounting for 53 people; another 1,721 report an injury. Written by whoever it happened to, in their words.
already public
all of it
Published by a federal agency, free to anyone. A reason to be careful about what we do with it, not a reason to stop being careful.

The narratives also name family members, towns and dealerships — “My daughter will be driving…” — written by somebody explaining why a fault frightened them. That was counted on one vehicle, 39 of 956, and has not been counted across the slice; it is here as an example of what is in the text, not as a rate.

Nothing is redacted before indexing, and that is deliberate: the VIN and the surrounding sentence are often what distinguish one fault from another with the same symptom. The control is where the text goes rather than what is cut out of it — which is why turn 2 embeds on this machine.

And the control holds at the crossing. The VIN is stored and never sent — it is a field the tools filter on and do not return, along with the state and the mileage. What reaches the model is the vehicle, the components, the date filed and the narrative. The narrative is somebody's own words, so it carries whatever they chose to put in it, and that is the part worth being careful about rather than the column.

What is kept, and for how long

A snapshot on disk and an index built from it, both on infrastructure Calder controls. A fixed snapshot rather than live calls, because an answer key written against moving data rots — and a question answered twice should be answerable the same way twice.

Nothing is written back to NHTSA and no record here is amended. This reads the public file; it does not correct it, annotate it, or hold an opinion about it that a reader could mistake for the regulator's.

and one thing that is written

Every question asked at the desk is filed: the words, the tools it called in order, the answer, which engine ran it and how long it took. Nothing in the row says who asked — no address, no account, no session.

It is kept because this is the first part of the machine that does not do the same thing twice. The same question has come back in 4 seconds and in 131, and has reached the same words by different routes. A page that only ever showed the latest answer could not show that.

Durable, with no expiry. These are public questions about public filings, so nothing here is sensitive in the way another engagement's rows would be — but it is written down rather than left to be asked about later.

← back to the question