Provenance and abstention

Where did this value come from?

Every field carries its origin: supplied by your file, derived from it by a deterministic rule, inferred by us, or abstained from with a reason. It is a question almost nothing else in this category can answer, and the answer is per field rather than per file.

The four origins a value can have

Every cell in an export is exactly one of these, and the audit CSV beside the file says which.

How every value is labelled with its originYour supplier file is the only source of fact. Every cell leaves it as one of 4 kinds. Supplied: Copied from your file. Reformatted at most; the original is kept beside it. Derived: Computed from supplied values by a deterministic rule. No model involved. Inferred: Written by us from what the file supported, and nothing else. Abstained: Left blank, with the reason. A plausible guess here is worse than an empty cell. All four reach the import file, and the audit CSV states which each one was.Your supplier filethe only source of factSuppliedCopied from yourfile. Reformatted atmost; the original iskept beside it.DerivedComputed fromsupplied values by adeterministic rule.No model involved.InferredWritten by us fromwhat the filesupported, andnothing else.AbstainedLeft blank, with thereason. A plausibleguess here is worsethan an empty cell.The import file, and the audit CSV beside itevery value keeps the label it left with
Where a value can come from, and what happens when it cannot come from anywhere. The fourth column is the one competitors do not draw: a cell we declined to fill, with the reason attached to it.

Supplied

The value came out of your file. It may have been reformatted — a unit parsed, a number normalised — and the original is still recorded next to it.

Derived

We computed it from values your file supplied, by a rule with no model in it — a handle slugged from a title, a unit converted. It is reproducible: the same input gives the same answer every time, which is exactly what separates it from the next card.

Inferred

We wrote it, from what the file supported and nothing else. It stays marked inferred through the review screen and into the export, so it is auditable after the fact and not only during.

Abstained

We could not resolve it, so it is blank, with the reason. A plausible guess in this position is worse than an empty cell, because an empty cell is visible and a plausible guess is not.

The rule is code, because the prompt was tried first

The instruction not to name a value the file never carried was in the system prompt, in as many words, quoting the exact case we wanted avoided. Measured across the whole corpus, 8.2% of answers named one anyway 222 of 2,693 planned cells. Given a title and nothing else, 1/2 CTTW came back as “featuring 1/2 CTTW diamonds”. zero of them reached an output, because the check below refuses them.

A prompt instruction is not a control. It is a request, made to a system with no obligation to honour it, and its failure rate is invisible unless somebody counts. So the rule moved into code: a curated list of gemstones, metals, fibres, woods and origin claims, checked against what the file actually contained. An answer naming one the source did not supply is refused, and the field is abstained from with that word in its reason.

The list also names what it does not yet catch — measurements, capacities, compatibility claims. It is a floor. Publishing the floor is the honest part; a control whose coverage nobody has stated is a control nobody can rely on.

Measured on the acceptance run

19,885 rows
Processed end to end, across the whole test corpus in one run.
0 of 142
Model requests that broke their response contract. A response without the shape it promised is discarded, not parsed optimistically.
Zero leaked
Fabrications reaching an output, on an independent recount that re-derives the check from each row rather than trusting the runtime’s own tally.
2026-09-05
When this was measured. A number without a date is a liability rather than evidence.

Abstention is a feature, and it costs us something

A tool that always produces an answer is easier to demonstrate and worse to rely on.

Across the corpus run, thousands of cells were written and hundreds were deliberately left blank. Every blank is a field a competitor’s demo would have filled, and every one of them is a field you would otherwise have had to catch yourself, in a storefront, after a customer read it.

We publish the searches that fail too. Looking for open catalogue data to widen the test corpus, we swept 546 sources, inspected 250 files, and found 0 usable. The well was wrong, not the filter. A method that only reports its successes is not a method.

How provenance survives into the export · This stage in the pipeline

See what it refuses to answer.

The free report will not enrich anything, but it will show you the same posture: what was checked, what was not, and why.

Check a file free