Changelog

What actually shipped, including the parts that went wrong.

Every entry describes work that is in the repository, dated to when it landed. Nothing here is announced in advance, and the entries that do not flatter us are the ones worth reading.

  1. Shipped

    A product section, a pipeline page, and a reference for the Shopify CSV grammar

    The site described what we do in three pages and no depth. It now has a product section, a stage-by-stage pipeline page, and the full rule reference the validator implements — generated from the same rule table the engine runs, so the document cannot drift from the code. Two pipeline stages are marked on those pages as not built, because they are not.

  2. Measured

    Re-verified every competitor price, and corrected two of our own

    Our internal notes carried an undated price sheet. Read against the vendors’ own live pages, two figures were wrong in ways that flattered us: a competitor’s top tier is not the one a merchant can actually buy, and a per-product price we had multiplied out to a catalogue total applies only up to 500 products. Neither number is on our site, and the comparison pages carry the date each figure was read.

  3. Decided

    A refund window with a usage ceiling, stated in full

    Fourteen days, provided no more than half the plan’s product quota has been used. It is implemented as a fraction rather than a product count so it stays correct if quotas change, and the free Pre-Flight Report is explicitly not counted against it. A guard now refuses any page that states the window without also stating the condition.

  4. Fixed

    The site had been serving no CSS and no JavaScript since its first deploy

    The standalone build shipped without its static assets, so every visitor since launch had received unstyled HTML. Nothing in the repository looked wrong and the pages returned 200; only fetching the assets a page references showed it. The rule that came out of it is now binding on us: verify the served response, not the source.

  5. Shipped

    Self-serve control over whether anything is sent to a model

    A per-workspace switch, checked before the credential is read and before a byte of an upload is touched. It fails closed: if the setting cannot be read, the run is refused rather than assumed to be permitted. A refused run costs a retry; a catalogue that has been sent cannot be unsent.

  6. Shipped

    Fourteen pages on import failures, joined to recorded evidence

    Every error string quoted on those pages came out of a real store we broke on purpose and recorded, not out of documentation. Ten of the fourteen cover failures the platform reports no error message for at all. We wrote fourteen rather than the hundred and twenty originally planned, because the archive of real errors is closed and inventing the rest was not an option.

  7. Fixed

    A model instruction is not a control

    The rule against naming a material the file never supplied was in the prompt, quoting the exact case we wanted avoided. Measured over 129 real generations, 4.6% of answers named one anyway. The rule is now code — a curated list checked against the source — and an answer that fails it is abstained from with the offending word in its reason.

  8. Measured

    The whole corpus, end to end, for 32 cents

    Nineteen thousand eight hundred and eighty-five rows processed against a three-dollar ceiling, at $0.3174. Zero of 142 model requests broke their response contract and no fabrication reached an output on an independent recount. Thirteen of the twenty-one files needed no enrichment at all and cost exactly nothing.

  9. Fixed

    A rule we shipped that a real importer refused

    A fixture we wrote passed our own validator and the real importer rejected it: two variant-scoped fields are required on every variant row, not declared once per product. That is a false negative, which is the only kind of defect this product genuinely cannot afford. It was found by putting a file through the actual importer rather than by reading anything.

  10. Measured

    A wrong rule that would have produced a report of 99% noise

    Applying an option rule to every row of a real 590-row export fires 523 times, of which 519 are image-only rows and false alarms. Rules are now scoped to a row’s role. A merchant who scrolls past five hundred wrong answers will not read the right one, so a noisy report is not a lesser version of a good one.

  11. Retired

    Four claims we will not make again

    “Guaranteed to import”, “first time, every time”, “zero errors”, “100% import success”. They are unfalsifiable in our favour and untrue in the cases we do not control — a supplier image CDN that 404s after export, a platform spec change, a duplicate handle created inside the merchant’s own store. A test now fails the build if one appears in any page of this site.

Why the bad entries are here

A changelog is the easiest page on a website to fake. Anyone can write ten lines about shipping things. What is not fakeable is an entry saying we served no stylesheet for weeks and did not notice, or that a rule we wrote was refused by the real importer the first time a file went through it.

Those entries are the reason to believe the others. They are also, straightforwardly, what happened — and a product whose entire claim is that it tells you the truth about what it did does not get to keep a tidier version of its own record.

How we establish what we publish · Who is building this

What is not on this page

No roadmap, and no dates for anything unbuilt. Two stages of the pipeline are not built and the pipeline page says which and why, without promising when — a date we cannot keep would cost more than the admission does.

No version numbers either. Nothing here is versioned for customers to pin against, and inventing a numbering scheme to look established would be the same move as inventing a testimonial.

The free report is the part you can check today.

No account, and the file is deleted in the same request that reads it.

Check a file free