Skip to main content
SIMULATEDSynthetic test data — an invented restaurant, invented menu, invented prices. Not real DoorDash / Square / Uber Eats / Grubhub data, access, or business impact. The verification rules and the pinned data-format standard are real; the restaurant, its menu, and its records are invented.

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

FAIL16 findings11 error · 5 warn · 0 info

Meta

surface
ACP static feed (OpenAI/Stripe product-feed shape)
spec version
taxonomy-v1+acp-extract-2026-07-02+ucp-pin-2026-04-08
matching mode
synthetic-controlledsynthetic-controlled — the copy and the catalog share item IDs, so matching is exact (no entity resolution)
data
simulated: true

Findings

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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. 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. 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. 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. 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. 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. 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. 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

Every row above carries its four receipts — the claim, the catalog row it was checked against, the rule it broke, and how severe it is. No language model runs in this verifier — the comparison is exact, deterministic logic. Simulated prototype, run on demand — not a live service. Human-led, AI-assisted, professionally reviewed.