build log
What we shipped, and when.
Margin has not launched, so everything else here describes software you cannot yet run. This page is the verifiable part: dated work, in the sequence it arrived.
Source: git log --since=2026-07-01 --until=2026-09-19 on this repository, generated 19 September 2026 — the whole life of the repository through its last complete day. Reproducible from the commit history.
the record
The console got a way in, and it only ever shows you your own rows
A magic-link sign-in and a browser credential that can read but never write: the path from a request to a working console exists for the first time, and a check proves the last step lands in the console rather than a dead end.
Isolation is enforced, not promised. Every read is scoped to the caller, and a test that hands the API a wrong key confirms it reads nothing back — not a filtered view of someone else's estate, nothing.
A synthetic customer that rehearses the whole journey
Design Partner Zero is a clearly-badged synthetic tenant with its own key, so the infrastructure a real customer will lean on gets exercised end to end — sign-in, ingest, the gate, a committed refusal — before a real one arrives.
It is labelled synthetic everywhere it appears, and it carries no number onto any prospect surface. It is a rehearsal of the plumbing, not a claim about traction.
The parity bar became the customer's, and the promote gate bounds the gap
The promote decision reads a per-customer, per-class parity policy instead of one hard-coded 0.97, and judges the gap between the cheap arm and the incumbent rather than one arm's absolute pass rate. A promotion records the exact threshold it met.
The same week, every real model call gained a failover route: when a provider's credits run out, calls move to a backup instead of stalling. The daily brief now reads the vendor's own balance, after a depletion on a shared account stopped the face-off engine while our own spend meter read four percent used.
The first cross-provider face-off ran, and the gate refused an 85% saving
A cheaper model from a different provider (DeepSeek, via OpenRouter) ran 91 real tasks against the incumbent (Gemini 2.5 Flash) at about a seventh of the bill. Quality fell from 92% to 63%, parity landed at 0.68, and the gate refused the 85% saving. The artifact is committed, is_simulated is false, and the earlier face-offs were one house against itself; this is two vendors, and still a refusal.
The chain got its own reader the same week: the SDK's stage() opens one span per step and names the kind of work, in Python and TypeScript, so the Money Map can price a workflow step by step. Our own older estate cannot use it, since the per-step ids were never captured, and the reader says so rather than inventing a chain.
The second plug: bring your evals
Value-per-outcome got its numerator. An outcome can carry the value it produced, guarded so a defaulted value never leaks into the metric, and adapters for the eval tools teams already run (promptfoo, Braintrust, LangSmith, Ragas, DeepEval and more) post outcomes straight out of an existing test suite.
No customer has entered one yet, so the site still leads with cost-per-outcome. That is the honest degenerate case, said out loud: where no value is supplied, we measure what the work cost and name it as exactly that.
The site became a path, and the checker learned to look below the fold
The console had no navigation: the primary button on every page dropped visitors in a room with no doors. The shared nav now runs everywhere, the five product pages chain each to the next, and the two questions a prospect asks right before pricing, what adopting looks like and how this compares, got seats in the menu.
The layout checker graded only the first screen, so a banished template, text on the left and a void on the right, crept back one screen down. It now scans every page in viewport-height bands and fails any band one side carries alone.
The rebuild reached the argument pages
The pricing page and the product index moved onto the working-paper system: the finding stated as a sentence, the figure beside it, the notes and the source line under it in a fixed order.
The comparison page followed within a day, and went from zero measured numbers to one. That one is the refusal, the only measured event that separates the categories the page compares.
Every proof got an apparatus it cannot ship without
The site's figures render inside one disclosure unit: the finding as the headline, then the graphic, then the notes, panel size first and source line last. A figure without its sample size cannot ship, the same way a colour outside the design system cannot.
The apparatus exists to make a fabricated number harder to publish. Every value a figure shows is read from a committed artifact; the component has no way to be a second place a number gets typed.
Two face-offs ran live. The gate refused one and held the other
A cheaper model ran 116 real tasks against the incumbent at 30.6% of the bill. Quality fell from 93% to 79%, and the gate refused the 69.4% saving. The artifact is committed to the repository; the pricing and comparison pages read their numbers from it at build time.
The same day, a second face-off ran one model against itself at a smaller thinking budget: 64.1% cheaper, and it landed more outcomes, 89% to 94% across 115 tasks. The gate held that one too: the cheaper arm's pass rate sits under the floor we bank a claim at. A gate that only ever says yes is not a gate.
The production database lost its history. The published numbers did not
Our own telemetry database lost weeks of economic history: tens of thousands of metered calls from our estate, gone. No customer data existed to lose. The root cause is still under investigation, and the loss is recorded here rather than smoothed over.
Every number published on this site survived untouched, because none of them read from that database. Published figures derive at build time from dated, flagged artifacts committed to the repository. The incident is the argument for the discipline.
The product got its five names
The five parts became real pages under owner-ratified names: the Meter, the Estate, the Money Map, the Parity Gate, the Governor. The order is the order a customer meets them: install, see, decompose, prove, act.
Dated honestly: the fifth part shipped that day under a different name. A trademark check five days later found the original colliding with a registered mark, and the Governor is the name that survived. Renaming it cost one word because it was five days old; after a launch it would have cost a rebrand.
Someone else measured the gap, and our own instruments were lying to us
Every number on this site is ours, checked by our own method. Rippling published one that is not: about 2,100 scored runs per model on their own payroll data, seven models within one point of each other on pass rate, and bills from $621 to $4,359. They are not a customer and have not evaluated us; they measured the problem on their systems and reached the conclusion we build on.
The site got a colour. It had run tinted neutrals and a semantic accent, and three pages had no colour at all.
The contrast checker was reporting 79 failures that did not exist: text at zero opacity has no measurable contrast, and the arithmetic turned that into a confident 1:1 on pairs that measure above 5:1. It now drives every animation to its end state and refuses to call an unmeasured node a pass. A reader who asks for less motion now gets it; 156 elements across five routes were still animating for them.
Latency became an admissibility filter, and the site got a typeface
The auto-router records per-call latency and screens on it BEFORE parity: a cheaper configuration that keeps quality but blows the response budget is inadmissible, never a win. Sustained slowdown rolls it back, the same way the quality revert does.
A retirement lever: the recommendation to cut an agent that has measured spend and zero passing outcomes. It is the least comfortable thing the product can say and the most valuable.
The site got a real typeface for the first time. It had been running on whatever the reader's operating system shipped, which meant the identity changed between macOS and Windows.
The console reads itself, and the design gates started rendering
The estate band on the home page became our own console, read live from the endpoint the product itself queries. When the read fails, the page says so instead of printing a figure.
Two new levers: tool-definition compression (the first architectural one, as opposed to parametric) and retrieval precision, shipped honestly labelled as unmeasured.
The design gate learned to render. Until this week it read CSS as text, which cannot see contrast, line length or anything a browser computes.
A parity number now travels with the harness it was measured under
Evaluation drift is now enforced, not merely logged: when the grading setup changes, any earlier quality result taken under the previous one stops counting as evidence.
The auto-router's HOLD became a first-class two-sided verdict in the console. “We ran the cheaper option and it lost” is a result, not a non-event.
The public console stopped being able to write
The public demo can display a closed loop without being able to trigger one. Visitors watch the mechanism operate; nothing they do reaches production.
The counterfactual gained its measured half, and an explicit refusal to guess the rest.
We started metering ourselves
Margin meters Margin's own LLM calls: the first measured slice in the system, and the reason the landing page can show a real cost-per-outcome instead of a simulated one.
The build factory fails over to a second model provider when the primary quota is gone, and says plainly which work it cannot do in that mode.
Cascade waste, measured off the invoice
The econometrics engine quantifies loss occurring BETWEEN agents: effort purchased upstream that a later failure discards. Nobody invoices for it and everybody pays it.
The money map recolours when a live detector trips, so the estate view shows what is firing now rather than what fired historically.
None of these are plans. This is a curated record, not every commit. The chart above is the volume; these entries are what was worth describing.