Your Supplier Renamed It, One Stage Still Finds It: A Matching Cascade That Reports Its Tier
Four catalog items reconciled against a 13-item supplier list. An identical string matches at the exact tier, one hyphen falls through to fuzzy at 0.95, a reordered name falls through to vector at 0.9528, and a jute rug that has no counterpart is reported as not_in_supplier_catalog instead of being paired with the nearest wool rug.

Reconciling two catalogs sounds like one question with one score, and the score is the least useful part of the answer. The cross_compare stage walks a cascade of matching tiers, exact string, then fuzzy, then embedding similarity, stops at the first tier that hits, and reports which tier produced each match. A match earned by an identical string and a match earned by an embedding are different claims about the data, and keeping the tier keeps that difference.
On this run, four items from a 118-product catalog were reconciled against a 13-item supplier list. Nylon Camping Tent matched an identical string at the exact tier. Copper Cast Iron Pan met the supplier's Copper Cast-Iron Pan at the fuzzy tier, one hyphen apart, at 0.95. Velvet Armchair met Armchair - Velvet at the vector tier, a reordered name, at 0.9528. The rug is the row that matters: there were rugs in the supplier list, and a nearest-neighbour search would have paired the jute rug with a wool one at a confident-looking 0.918. The stage reported not_in_supplier_catalog instead.
The thresholds on the diagram are measured, not defaults. This catalog names products as material plus product type, which makes it structurally self-similar: at a permissive vector floor of 0.60 every source matched something and the no-match label never appeared, with Steel Cast Iron Pan matching Steel Floor Lamp at 0.879. The floor has to sit above what a deliberately wrong pair scores. Then check separately that a no-match is reachable at all: thirteen references cannot cover 118 products, so a run with zero unmatched items is assigning neighbours, and the count of the no-match label is the diagnostic.
One more thing to be straight about. The reference list was designed so that each tier has a real case: the hyphen variant and the reordered name exist to exercise fuzzy and vector matching. That is a fair test of the mechanism. Tuning a threshold until a wrong match looked right would be a different thing, and it did not happen here.
Everything on the diagram traces to one run on 2026-09-07 against the demo namespace, with the rows generated from the saved response.
Where this diagram appears
Run this on your own data
Mixpeek turns video, images, audio, and documents in your object storage into searchable, timestamped results through one API.
Search your own data

