The coverage the 2.1.0 gates exposed. Four pricing gaps found in one pass over
a real recipe, each a row reading "needs price" where an honest number existed.
- Spice and dried-herb densities. The table stopped at salt, so every
"1 tbsp <spice>" declined.
- Containers price by the size on the label. "1 can (15 oz) black beans" now
matches "15 oz black beans" to the cent. jar/bottle/tin/carton/container
joined the unit registry; they were missing entirely.
- A 'free' price basis, since a provider price of 0 means "no data" here.
Covers tap water (exact-match allowlist) and "salt and pepper to taste".
- purpose is recorded rather than deleted, which is what separates "no amount
exists" from "the author forgot one".
All additive. New parse fields are extra keys and calculatePrice's context
argument is optional, so a 2.1.0 consumer is unaffected.