04 · What we learned

Building this across three AI coding tools

The design work for this system happened in one long session, overnight, across roughly ten planning documents. What came after is arguably the more interesting part: the build was deliberately handed between three different AI coding tools in sequence — each one picking up where the last left off, reading not just code but the previous tool's own written record of what it did and why. All eleven original planning documents are preserved verbatim in the repo, specifically so nothing downstream would be working from a lossy summary of the original thinking.

Codex: the first working version

Codex took the eleven planning documents and a directory scaffold and built the first real implementation: the Go assessment container and the FastAPI carrier-side receiver. Fast, functional, and — like most first passes translating a night of design thinking into code — carrying forward a few assumptions from the planning docs that hadn't been pressure-tested yet.

Claude Code: the bug that would have broken every real submission

The most concrete finding of the whole build came from Claude Code's pass. The carrier-side receiver's strict schema allowlist — the thing that validates every incoming assessment JSON before accepting it — had the hallucination vector spelled "hallucination". The canonical ID used everywhere else in the scoring logic is "hallucination_ood".

That single mismatch meant every real assessment upload containing that vector would have failed schema validation and been rejected with a 422 — and because no tests existed yet for the receiver, nothing would have caught it before it reached a carrier in production. It's a small diff. It's also exactly the kind of bug that survives code review, survives a demo, and only surfaces the first time real data hits it — which, for an insurance data pipeline, is a bad place to find out.

Claude Code fixed the mismatch, added a regression test for it, and added the tests that were missing more broadly: SQLite persistence, the local portal end-to-end path, and — notably — a test that specifically asserts the scores-only export can never leak local evidence, the same boundary described in the architecture piece.

Reading the planning docs skeptically, not just implementing them

The most valuable output of this phase wasn't new code — it was a document, DECISIONS.md, that reads the original planning material skeptically instead of treating it as ground truth, and records exactly where engineering reality corrected the pitch:

This is an evidence intake and deterministic screening implementation, not an actuarial model. Scores do not estimate claim frequency, expected loss, premium, legal compliance, or certification.

What's next

Google Antigravity (Gemini) is the next tool in the handoff chain, working from the same kind of written record Claude Code left for it. What it's picking up — and what's still honestly unfinished — is the subject of the last piece.