Closed-World Claims Audit: Marketing Copy vs. What You Can Substantiate

Audit product and sustainability claims against your substantiation file with NLI_VERIFY in closed-world mode — a claim your documentation doesn't entail fails the gate, exactly the standard regulators apply

All recipes· ml· 15 minutesintermediateen
Instance: localhost:8080

Opens your running SynapCores (Closed-World Claims Audit: Marketing Copy vs. What You Can Substantiate will be staged for a preview — nothing runs until you click Run). No instance yet? Install free in ~30s.

Share

Closed-World Claims Audit: Marketing Copy vs. What You Can Substantiate

Objective

Regulators don't ask whether a marketing claim is contradicted by your documentation — they ask whether you can substantiate it. The FTC's Green Guides and the EU's incoming green-claims rules both put the burden on the publisher: an environmental or performance claim you cannot back is treated as deceptive, even if nothing on file disproves it.

That standard is exactly NLI_VERIFY's closed-world mode: a claim no anchor entails is a LIE, not merely "unverified." This recipe audits a batch of draft marketing claims against a substantiation file and shows how the open-world and closed-world verdicts differ — and why the closed-world column is the one a compliance reviewer wants.

Step 1: The substantiation file — what you can actually prove

CREATE TABLE IF NOT EXISTS recipe_claimaudit_substantiation (
    id INT PRIMARY KEY,
    document TEXT,
    fact TEXT
);
INSERT INTO recipe_claimaudit_substantiation (id, document, fact) VALUES
  (1, 'lab-report-2026-091',  'Third-party testing measured the packaging at 72 percent recycled fiber content.'),
  (2, 'lab-report-2026-091',  'The packaging is certified compostable in industrial composting facilities.'),
  (3, 'supplier-attestation', 'The cotton in the fabric is certified organic by the supplier.'),
  (4, 'energy-audit-2026',    'The factory sources 40 percent of its electricity from on-site solar.');

Step 2: The draft claims

CREATE TABLE IF NOT EXISTS recipe_claimaudit_claims (
    id INT PRIMARY KEY,
    claim TEXT
);
INSERT INTO recipe_claimaudit_claims (id, claim) VALUES
  (1, 'Our packaging is made with recycled fiber.'),
  (2, 'Our packaging is fully biodegradable in your home compost bin.'),
  (3, 'This product is carbon neutral.');

Claim 1 is backed by the lab report. Claim 2 overreaches — industrial compostability is not home compostability. Claim 3 has no substantiation at all.

Step 3: Ground truth — read the two postures side by side

One statement audits every claim under both policies:

SELECT c.id,
       c.claim,
       JSON_UNQUOTE(JSON_EXTRACT(NLI_VERIFY('nli-default', c.claim,
         (SELECT NLI_ANCHORS(fact) FROM recipe_claimaudit_substantiation)), '$.verdict')) AS open_world,
       JSON_UNQUOTE(JSON_EXTRACT(NLI_VERIFY('nli-default', c.claim,
         (SELECT NLI_ANCHORS(fact) FROM recipe_claimaudit_substantiation),
         JSON_OBJECT('closed_world', true)), '$.verdict')) AS closed_world
FROM recipe_claimaudit_claims c
ORDER BY c.id;

Expected (observed on v2.1.2-ce, nli-default):

id claim open_world closed_world
1 recycled fiber TRUTH TRUTH
2 home compostable LIE LIE
3 carbon neutral UNVERIFIED_PLAUSIBLE LIE

Two different failure modes, and the columns separate them. The home-compost claim is contradicted — the file says industrial composting, which disputes home compost — so even open-world catches it as a LIE. The carbon-neutral claim is unsubstantiated: nothing in the file disputes it, so open-world calls it UNVERIFIED_PLAUSIBLE and lets it slide. Only closed-world — "does the file support this?" — fails it. That gap is exactly why unsupported claims survive casual review but not a substantiation audit.

Step 4: The publishable set is a WHERE clause

SELECT c.id, c.claim
FROM recipe_claimaudit_claims c
WHERE JSON_UNQUOTE(JSON_EXTRACT(NLI_VERIFY('nli-default', c.claim,
        (SELECT NLI_ANCHORS(fact) FROM recipe_claimaudit_substantiation),
        JSON_OBJECT('closed_world', true)), '$.verdict')) = 'TRUTH';

Expected: 1 row — only the recycled-fiber claim ships. The other two go back to the copywriter with a concrete demand: produce substantiation, or soften the claim until the file entails it.

Step 5: Fixing a claim means matching your evidence, not deleting it

Reword claim 2 to what the lab report actually supports:

SELECT JSON_UNQUOTE(JSON_EXTRACT(NLI_VERIFY('nli-default',
  'Our packaging is compostable at industrial composting facilities.',
  (SELECT NLI_ANCHORS(fact) FROM recipe_claimaudit_substantiation),
  JSON_OBJECT('closed_world', true)), '$.verdict')) AS verdict;

Expected: TRUTH — the honest version of the claim passes the same gate that rejected the inflated one.

Cleanup (Optional)

DROP TABLE IF EXISTS recipe_claimaudit_substantiation;
DROP TABLE IF EXISTS recipe_claimaudit_claims;

Use it from your app

  • Run the Step 3 audit as a pre-publication check in your CMS pipeline; block on any closed_world verdict that isn't TRUTH.
  • Keep the substantiation table keyed by document so every TRUTH verdict is traceable to the lab report or attestation that backs it.
  • Why in-DB: the claims, the substantiation file, and the verifier live together — the audit is a query, not a workflow across three vendors.

Key Concepts Learned

  • Closed-world mode inverts the burden of proof: unsupported ≠ unknown, it's a failure — which is the substantiation standard regulators actually apply.
  • Open-world review systematically misses unsubstantiated overreach: the carbon-neutral claim read as "plausible" because nothing disputed it. Use open-world for contradiction hunting, closed-world for clearance.
  • NLI reads wording, not chemistry: "industrial compostable" vs "home compostable" was caught because the texts differ. Pair the gate with human review for claims whose risk lives outside the words.
  • Keep anchors as atomic facts from identified documents — the verdict is only as auditable as the evidence table behind it.

Tags

nlinli-verifyclosed-worldcomplianceclaims-substantiationgreenwashingmarketingsql

Run this on your own machine

Install SynapCores Community Edition free, paste the SQL or Cypher above into the bundled web UI, and watch it run.

Download Free CE