Lab notebook

The hard parts.

The problems that took the longest to crack, and the number that says they are solved.
  • Survey Agents

    0klines, 4,845 tests

    Twelve production agents

    Architecture through deployment on AWS: 76 tools, a state machine generated from a declarative graph, parallel fan-out with a failure circuit breaker, and a Nuxt and NestJS app on one shared TypeScript contract.

  • Survey Agents

    0×more headline findings found

    4× the headline findings

    Instead of charting every question, an agent picks the ones that matter. Headline findings recovered went from 13% to 52–59% on surveys it had never seen, for about $0.05 per 13 surveys.

    rule-built report13%agent picks the analyses52–59%
  • Survey Agents

    0%fewer wrong answers. StatQA 68%, GPT-4o's best 64.83%

    Answers checked before shown

    Answers statistical and causal questions on any table: 25 tests checked against scipy and statsmodels, and causal estimators that match statsmodels. Every answer is read back in words and judged before a reader sees it, which cut wrong answers on 164 published figures by 85%.

  • Survey Agents

    0%right on the hardest questions, 0 wrong

    Zero wrong on the hardest questions

    Accuracy on the hardest benchmark questions rose from 60% to 93%, with zero wrong answers. More reasoning and bigger models were tried first and helped none; giving every component one shared layer of facts about the file did.

  • Survey Agents

    0%of charts match a raw-CSV audit

    File to chart, audited

    IBM's public attrition data traced through every step, from shape detection to the chart: 30.5% of overtime workers left against 10.4%, the published figure, and an audit with none of the engine's code matched 100% of checkable charts.

  • Survey Agents

    0rows lost. The old pipeline: 1 in 8

    Labels correct by construction

    The output schema only allows real codebook labels, and every response carries a token that proves it came back to the right row. The pipeline it replaced lost about one row in eight without noticing.

    old pipelinewith row tokens
  • Survey Agents

    0×more rows, same answer speed

    Plain-English charts

    Questions compile to a query plan, pass seven checks, and run on DuckDB. Queries across 216 survey runs return in milliseconds, and no number is ever computed by a model.

    rows, 1× to 200×answer time, flat
  • Survey Agents

    0:1byte-identical replays

    Replayable answers

    Each answer carries a passport of plan, data and version hashes, so it re-executes exactly. When a definition changes, recent answers are re-run in the background and a moved number is caught first.

    run 1

    run 2

    Identical, byte for byte

  • Survey Agents

    <0¢to read 30 messy file formats

    Intake that handles real exports

    UTF-16 headers full of null bytes, duplicate columns, dates hidden inside IDs. Rules handle what they can and a model is asked only where they are unsure: 11 model calls across 30 formats, and every run replays with zero differences.

  • Survey Agents

    0.00score a word cloud should not get

    Breaking my own grader

    Before letting a chart agent near users, I searched for ways to cheat the scoring. A useless word cloud scored perfectly, so I added a gate that catches it. Then I measured whether the agent was worth keeping at all.

    grader score, word cloudafter the measure gaterejected
  • Survey Agents

    0×more accuracy from the model than the pipeline

    The control that changed the plan

    Built the control the architecture could lose: at a fixed model, the 12-agent pipeline tied a single prompt on accuracy, while switching models moved it 33 times more. The team's recommendation moved from accuracy to reliability, where the pipeline does win.

  • Survey Agents

    0%fewer wrong charts

    Held against Opus 5.5 working blind

    Benchmarked the platform against Claude Opus 5.5 given only the raw file, scored by rules that need no judge plus one blinded LLM judge calibrated to expert ratings. General fixes, none written for a single survey, cut wrong charts 93% and oversized charts 100%. Opus still leads on focus, and the case study says so.

  • Survey Agents

    0%fewer conflicting column meanings

    One place for what a column means

    A census of the code found eight facts about each column decided in several places that could disagree. One semantic model per run, written at publish and read by everything, took disagreements across 411 runs from 30,405 to 263.

  • Survey Agents

    0×faster AWS pipeline

    Faster by removing agents

    Re-benchmarked two stages that ran inside a managed agent runtime: both made one tool call and stopped, and most of their time was the container booting. Calling the tool directly took a full run from 500 to 85 seconds.

  • Survey Agents

    0%right when it names a cause

    Causal direction, asked both ways

    Causal discovery reads the data first and says “unsettled” rather than guess. Only then does a model judge direction from the variable names, asked twice in opposite orders and kept only when both readings agree. When it named a direction, it was right 29 times in 30.

  • Survey Agents

    0%of tables read right, no model needed

    Rules beat the model at reading tables

    Public data arrives as respondent files, long tables, crosstabs and period tables. A deterministic shape detector reads 98% of them correctly; a model shown the headers and 20 rows managed 79% and cost money every time. The rules shipped.

  • Survey Agents

    0%recall, up from 78% on the shipped path

    The search path nobody had scored

    Retrieval quality had never been measured. Scored against human-coded rows, the search path in production was the worst of five approaches; routing through the codebook, with a backfill for what routing misses, lifted recall at 10 from 78% to 96%.

  • AiJockey

    0 GBGPU, ported off CUDA

    Predicting mix quality

    Trained a reward head on MERT music embeddings to predict four audio-quality scores, so the DJ can rank options without running the slow critic on every render. Runs on an AMD MI300X, ported off CUDA to ROCm.

  • AiJockey

    0+DSP transitions, one pipeline

    Raw songs to mastered set

    Stem separation, beat and key analysis, an LLM that plans the set, 25+ hand-built transitions and multiband mastering, all in one FastAPI service. Rendered mixes feed preference training for the planner.

    track Acrossfade on the phrasetrack B
  • PrismSplit

    0¢rounding drift

    Item-level bill splitting

    Integer-cent money math, transactional Postgres functions for every balance, and a debt-graph reduction that settles a group in the fewest payments. Works offline and syncs in real time.

    $50.87, split by item$23.40$15.77$11.70
  • PrismSplit

    Releaseonly bug, found and fenced

    A release-only sign-in bug

    Google Sign-In broke only in production Android builds: the code shrinker stripped classes it needed. I traced it, wrote keep rules, and added a preflight plus end-to-end runs on the real release build.