Skip to content

Two collections: every car sold in the US, and what agents have been caught doing - #6

Merged
ralyodio merged 1 commit into
mainfrom
worktree-automotive-and-ai-incidents
Sep 6, 2026
Merged

Two collections: every car sold in the US, and what agents have been caught doing#6
ralyodio merged 1 commit into
mainfrom
worktree-automotive-and-ai-incidents

Conversation

@ralyodio

@ralyodio ralyodio commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Automotive

Every make, model and year sold in the US since 1984 (EPA/DOE fuel-economy database), and NHTSA's record against each one — safety recalls, owner complaints, NCAP crash tests. All four upstreams are US federal public domain, keyless, no quota: unlike most of what this site indexes, these rows are ours to redistribute outright.

None of them can be asked "what is new" — every one is keyed by (model year, make, model). So the adapters walk NHTSA's own year → make → model tree, resuming from the cursor and spending a lookup budget per run. A full sweep takes about a day and then goes round again; rows land from the first run rather than after the last one.

But nobody arrives holding a feed. They arrive holding a VIN. /vin decodes one and answers the whole question at once — verified end to end against a real Postgres:

GET /api/v1/automotive/vin/1HGCM82633A004352?miles=184000   → 200 in 5.5s
  2003 HONDA Accord · V6 2.998L 240hp · 24 recalls · 2,013 complaints
  (926 powertrain, 324 air bags, 175 brakes) · 25 mpg combined
  next oil at 187,500 miles · 6 parts sources

A second decode of the same VIN is served from our own table in 6ms instead of 163ms, and which VINs get asked about is itself a signal worth keeping.

Four upstreams are asked in parallel and each may fail on its own: a busy Overpass costs the mechanics list, not the profile around it.

What is ours, and marked so

Two sections are not the government's, and the payload says so rather than implying otherwise:

  • Service schedule — a general interval model over the decoded powertrain, not any manufacturer's schedule, because those are licensed. An EV is never told to change its oil or its spark plugs; a diesel gets a fuel filter a petrol car does not. Every item carries basis: "general-interval" and a disclaimer.
  • Parts — searches, not a catalogue, because fitment data (ACES/PIES) is licensed per seat. Six vendors, each search carrying the vehicle, plus parts shops OpenStreetMap knows about nearby.

AI incidents

Rogue AI Tracker publishes two read-only JSON APIs and documents them in its own llms.txt as the machine-readable way in, so that is the front door used here rather than a scrape of the React app.

Its robots.txt sets Content-Signal: search=yes, ai-train=no, use=reference. That is honoured in what is kept, not just in what is said:

kept dropped
title, its own one-paragraph summary, tracker URL, dates, capability tags, and every primary source each entry cites details, whyItMatters, fullText, eli5 — the substantive review body is theirs

Every such item is tagged reference-only with data.redistribution: "reference", so a bulk export can exclude it while the public-domain and CC0 sources stay clean. There is a test asserting the review body never reaches an item.

So the collection does not stand on one site: the AI Incident Database is indexed alongside it (CC BY-SA 4.0, ours to keep and redistribute with attribution). Its GraphQL endpoint is now origin-locked to browsers, so the public feed is the supported way in.

Pricing

The feeds are free and unmetered, like every other collection. The assembled vehicle lookups are metered — five an hour free, then the crawl pass that already exists at $1/day, or $30/month. Pro includes them. That is the price a buyer actually named, and the day-pass shape matches how they described their willingness to pay.

Verified

  • 113 tests pass (26 new), biome clean
  • Migration 0008 applies to Postgres 16 and to the PGlite schema test
  • Booted against real Postgres: /vin, /c/automotive, /c/ai-incidents, /f/do-not-drive, /f/rogue-agent-incidents, /llms.txt all 200
  • Ingest landed 314 AI-incident rows (133 incidents, 81 research, 100 AIID reports) and automotive rows on a constrained budget, with the cursor resuming correctly on a second run
  • Mechanics returned 25 shops near San Francisco, sorted by distance, ODbL attributed
  • The paywall returns 402 with prices on the sixth lookup in an hour

Fixed along the way: a jsonb value handed to Bun's object-insert form goes in as a JSON string and reads back quoted — the VIN decode now uses an explicit column list with ::text::jsonb, as the rest of the codebase does.

🤖 Generated with Claude Code

https://claude.ai/code/session_012BzJdwiBGU9hmMGE5fBxjA

…caught doing

Automotive. The catalogue is every make, model and year sold in the US since
1984 (EPA/DOE), the record against each one is NHTSA's — recalls, owner
complaints, NCAP crash tests — and all four are US public domain, so unlike
most of what this site indexes these rows are ours to redistribute outright.
None of the three can be asked "what is new", so the adapters walk NHTSA's own
year → make → model tree, resuming from the cursor and spending a budget a run.
Rows land from the first run rather than after the last one.

But nobody arrives holding a feed. They arrive holding a VIN. So /vin decodes
one and answers the whole question at once: what the car is, what is recalled
on it, what owners report going wrong, how it crashed in testing, what it gets
to the gallon, what it is due for, where to buy the part and who nearby fixes
it. Four upstreams in parallel, each allowed to fail on its own — a busy
Overpass costs the mechanics list, not the profile around it.

Two things are ours rather than the government's, and say so in the payload.
The service schedule is a general interval model over the decoded powertrain,
not any manufacturer's schedule, because those are licensed. And parts are
searches rather than a catalogue, because fitment data (ACES/PIES) is licensed
too. An EV is never told to change its oil.

AI incidents. Rogue AI Tracker publishes two read-only JSON APIs and documents
them in its own llms.txt, so that is the front door used here. Its robots.txt
sets `ai-train=no, use=reference`, and that is honoured in what is kept, not
just in what is said: title, its own summary, and every primary source it
cites — never the review body. So the collection does not stand on one site,
the AI Incident Database is indexed alongside it, CC BY-SA and ours to keep.

The feeds are free like every other collection. The assembled vehicle lookups
are metered: five an hour free, then the crawl pass that already exists at a
dollar a day, or thirty a month. That is the price a buyer actually named.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012BzJdwiBGU9hmMGE5fBxjA
@ralyodio
ralyodio merged commit d432407 into main Sep 6, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant