Blog

Notes from the index.

Engineering, mostly. Parsers, invoices, tables and evaluation. We publish the benchmarks that made us look bad too, because otherwise the good ones don't mean anything.

Engineering · 9 min

OCR does not fail loudly, and that is the problem

Error rates are not uniform and confidence scores are not calibrated. A wrong digit in an amount field is not a typo, it is a different invoice.

Tal Weiss · 11 August 2026

Engineering · 12 min

Teaching a model to say "I don't know"

Refusal calibration ate 40% of our evaluation budget for two releases. The benchmark, three approaches that failed, and the boring one that worked.

Joel Mensah · 4 August 2026

Engineering · 10 min

One merged cell, one wrong number

Table extraction is an assignment problem, not a detection problem. Header paths, spans as ambiguity, and the footnote bug we shipped for four months.

Sofia Duarte · 28 July 2026

Engineering · 9 min

Your RAG benchmark is measuring the wrong thing

Scores on public corpora tell you almost nothing about behaviour on a real repo. We rebuilt ours around attribution and staleness instead.

Joel Mensah · 21 July 2026

Engineering · 10 min

Every duplicate invoice is a near-duplicate

Byte-identical files are the case nobody worries about. Blocking keys, an asymmetric cost function, and why we surface pairs and not verdicts.

Tal Weiss · 15 July 2026

Product · 6 min

We deleted our chat interface

Usage tripled. A conversation is a bad container for work that has to be reviewed and cited, and a terminal is a very good one.

Anaïs Tremblay · 8 July 2026

Engineering · 8 min

Three ways your totals disagree

Rounding, currency and tax. Some invoices genuinely do not add up, and telling that apart from a parse error is worth more than a repaired number.

Rita Ben-Ari · 2 July 2026

Maintenance · 11 min

The 31 dependencies we argued about

Every dependency is a future security advisory and a future breaking change. How we decide, and the four we removed last year.

Tal Weiss · 24 June 2026

Recipes · 9 min

Three-way match is a retrieval problem with a paper trail

No join key in a folder of PDFs, so the join is made from evidence and then shown. Tolerances, the evidence sheet, and four places it is wrong.

Anaïs Tremblay · 18 June 2026

Opinion · 5 min

Local-first isn't a feature, it's a default

If the good path needs an API key, the local path is a demo. What it costs to keep offline as the configuration everything is tested against.

Rita Ben-Ari · 10 June 2026

Engineering · 8 min

Chunking is a layout problem, not a token problem

Fixed windows cut tables in half and strip the context that made a fragment interpretable. Layout boundaries, heading paths, and deleting overlap.

Joel Mensah · 3 June 2026

Engineering · 14 min

Parsing PDFs is still the hardest part

Three years of model progress and a merged table cell still destroys an answer. The failure taxonomy, the three-extractor vote, and the ugly heuristics.

Sofia Duarte · 27 May 2026

Engineering · 10 min

Which version is true

File dates lie, newest is not always right, and supersession is written in prose. Ranking versions without hiding that there are several.

Joel Mensah · 20 May 2026

Community · 4 min

What a good first issue actually looks like

Most are unscoped work nobody wanted. We rewrote all 62 of ours to name a file, a done condition, and a reviewer who agreed in advance.

Rita Ben-Ari · 13 May 2026

Engineering · 9 min

The inbox is the ingestion pipeline

Most documents that matter arrive as an attachment, forwarded twice, inside a zip. 38,900 attachments became 7,100 documents. Here is what happened to the rest.

Anaïs Tremblay · 6 May 2026

The Quire Note

One email a month. Whatever we learned about retrieval, evaluation, or keeping an open-source project alive. Release notes stay on GitHub where they belong.

4,100 readers. Unsubscribe in one click. Also available as RSS.