Animation of 100 labeling steps on a 2D projection of catalog products: accepted and rejected merges appear as labeled types grow.

Can't name. Can't count. Still have to classify.

Solution: Same-Type Contract + LLM-as-a-Judge + Metric Learning. Millions of products. No product-type taxonomy to build on. Naming: a type isn't defined by its name. • Oil filter ≠ fuel filter — same word, different criteria. • Cordless screwdriver = drill-driver — different words, same criteria. → Same-Type Contract: two products belong to the same type if buyers compare them using the same criteria. → LLM-as-a-Judge: it evaluated every proposed merge and approved only high-confidence ones. Counting: the full set of types couldn't be fixed upfront — an open-set problem. → Metric Learning: it returned the closest known type and the probability that none fits. Budget: too many items to send them all to an LLM. → Active Learning: it picked only uncertain, diverse candidates — not the whole catalog. Result: ~200 discovered types cover over half the catalog. One verified boundary at a time — the taxonomy kept growing.