Verifier report · listings truth check
What the copy says vs. what the restaurant’s records say
A serving copy of a menu (what an AI shopping assistant would read) checked, line by line, against the restaurant’s own system-of-record. Below is every difference the checker caught — each in plain words first, then the exact receipts. Deterministic and $0, with no AI calls in this verifier runtime: the same input always gives this same report.
Verdict
Meta
Findings
- 01
This item is hidden in the merchant's own catalog but is being served to customers.
error- claim
- item-002-v2#existenceacp-feed · existence = true
- reference row
- item-002-v2
- rule / spec-clause
- LST-AVAIL-HIDDEN-SHOWN
- class
- availability
- 02
The copy says "pre_order" but the catalog state is in stock (expected "in_stock").
error- claim
- item-004-v1#availabilityacp-feed · availability = pre_order
- reference row
- item-004-v1
- rule / spec-clause
- LST-AVAIL-STATE
- class
- availability
- 03
The copy says "in_stock" but the catalog state is 86'd/sold out (expected "out_of_stock").
error- claim
- item-008-v1#availabilityacp-feed · availability = in_stock
- reference row
- item-008-v1
- rule / spec-clause
- LST-AVAIL-STATE
- class
- availability
- 04
The row is checkout-eligible but not search-eligible — the extracted invariant requires checkout ⇒ search.
error- claim
- item-002-v1#invariantsacp-feed · invariants = {"price":"22.00","is_eligible_search":false,"is_eligible_checkout":true}
- reference row
- item-002-v1
- rule / spec-clause
- LST-XF-CHECKOUT-SEARCH
- class
- cross-field-invariant
- 05
The name is cut off on the serving copy: "Margherita…" vs the real "Margherita Pizza (Medium)".
warn- claim
- item-005-v2#titleacp-feed · title = Margherita…
- reference row
- item-005-v2
- rule / spec-clause
- LST-ENC-TRUNC
- class
- encoding
- 06
The name is garbled by a text-encoding error: served "Jalapeño Poppers (Large)" vs the real "Jalapeño Poppers (Large)".
warn- claim
- item-004-v3#titleacp-feed · title = Jalapeño Poppers (Large)
- reference row
- item-004-v3
- rule / spec-clause
- LST-ENC-UTF8
- class
- encoding
- 07
The copy serves "Phantom Platter (simulated ghost item)" but no such item exists in the merchant's catalog.
error- claim
- ghost-001#existenceacp-feed · existence = true
- reference row
- catalog-meta
- rule / spec-clause
- LST-EXIST-GHOST
- class
- existence
- 08
"Café Latte (Small)" exists in the merchant's catalog but is missing from the serving copy.
error- claim
- item-003-v1#existenceacp-feed · existence = false
- reference row
- item-003-v1
- rule / spec-clause
- LST-EXIST-MISSING
- class
- existence
- 09
The copy keys this row as "legacy-pos-4471" but the catalog row is "item-003-v2" — same item, mismatched identity (resolved by exact name).
error- claim
- legacy-pos-4471#existenceacp-feed · existence = true
- reference row
- item-003-v2
- rule / spec-clause
- LST-IDENT-ID-MISMATCH
- class
- identity
- 10
The variant label says "Small" but this row is the "Medium" variation — variants of this item can no longer be told apart.
error- claim
- item-004-v2#variant_dictacp-feed · variant_dict = {"group":"item-004","dict":{"variation":"Small"}}
- reference row
- item-004-v2
- rule / spec-clause
- LST-IDENT-MODIFIER-AMBIG
- class
- identity
- 11
The price is serialized in cents (2150) where dollars are expected (21.50) — a 100× overstatement.
error- claim
- item-001-v1#price.amountacp-feed · price.amount = 2150
- reference row
- item-001-v1
- rule / spec-clause
- LST-PRICE-CENTS-AS-DECIMAL
- class
- price
- 12
The currency code is malformed: "usd" instead of ISO-4217 "USD".
warn- claim
- item-001-v2#price.currencyacp-feed · price.currency = usd
- reference row
- item-001-v2
- rule / spec-clause
- LST-PRICE-CURRENCY-FORM
- class
- price
- 13
The sale price 28.50 is higher than the regular price 27.50 — a "sale" that costs more.
error- claim
- item-001-v3#invariantsacp-feed · invariants = {"price":"27.50","sale_price":"28.50","is_eligible_search":true,"is_eligible_checkout":true}
- reference row
- item-001-v3
- rule / spec-clause
- LST-PRICE-SALE-GT
- class
- price
- 14
The served price 12.00 does not match the catalog price 10.00.
error- claim
- item-006-v1#price.amountacp-feed · price.amount = 12.00
- reference row
- item-006-v1
- rule / spec-clause
- LST-PRICE-VALUE
- class
- price
- 15
The pre-order availability date 2026-02-01T00:00:00Z already passed (catalog as-of 2026-07-03T00:00:00Z) — the promise is stale.
warn- claim
- item-004-v1#availability_dateacp-feed · availability_date = 2026-02-01T00:00:00Z
- reference row
- item-004-v1
- rule / spec-clause
- LST-STALE-AVAILDATE
- class
- staleness
- 16
This row expired 2026-01-01T00:00:00Z but is still served (catalog as-of 2026-07-03T00:00:00Z).
warn- claim
- item-003-v3#expiration_dateacp-feed · expiration_date = 2026-01-01T00:00:00Z
- reference row
- item-003-v3
- rule / spec-clause
- LST-STALE-EXPIRED
- class
- staleness