# AI Fact Check - User Guide

> Check each product's written copy against that product's own catalogue attributes, and review what does not agree before it reaches a shopper.

---

## Overview

AI Fact Check reads a product's description copy and compares each factual statement in it against the
same product's structured catalogue attributes - the values you already hold for size, material, weight,
capacity, and so on. When the copy says something the product's own attributes do not support, or
directly contradict, the claim is recorded as a finding for a person to review.

![Fact Check Review grid listing findings with verdict, confidence, review state and real-world check columns](images/ai-fact-check-overview.png)

It checks catalogue consistency only, and never declares a claim true. A clean result shows as **"No
findings"**, meaning the copy agreed with the attributes that were checked, not that every
statement is independently verified. An optional setting, on by default, also checks specific claims
against the web through the AI provider you already use for content (OpenAI or Anthropic), or through
another research source you choose - see
[Checking against an external source](#checking-against-an-external-source-optional).

This feature helps you:

- Catch copy that disagrees with a product's own attributes before customers or feeds see it
- Give a reviewer a clear, evidence-backed list of what to fix, with nothing applied automatically
- Keep spend predictable with a per-run product cap and a monthly token budget you set, plus a built-in
  daily cap per product

---

## When to use this

Use AI Fact Check when you want to:

- Audit imported or AI-written descriptions against the attributes you trust
- Spot a description that still claims an old specification after an attribute changed
- Review a catalogue's copy-versus-attribute consistency in bulk, store by store

---

## What it checks, and what a finding means

Fact Check audits your chosen copy fields (description, short description, and the resolved
tiny-description target) against your chosen grounding attributes for the exact store you run it in. Each
factual statement it extracts from that copy becomes an assessment with one of four verdicts:

- **Supported** - the statement agrees with a specific cited attribute value. On its own this is an
  observation rather than a finding, and it is never presented as proof the statement is true.
- **Contradicted** - a cited attribute directly disagrees with the statement.
- **Unsupported** - the statement has no attribute backing it up.
- **Implausible** - the statement is a risky claim your attributes cannot settle, such as a medical, legal,
  safety, or certification claim, or an absolute superlative.

Contradicted, Unsupported, and Implausible assessments become **findings** you review. A Supported
assessment can become one too: turn on the external check described below, and a statement your
attributes back but an outside source disputes is raised for review as well. Every finding names the copy
field it came from and, where one exists, quotes the catalogue value it was checked against.

Nothing is applied to a product automatically. Fact Check is advisory: it flags, and a person decides.

---

## Turning it on

1. Go to **Stores > Configuration > Moogento > ProductContent AI** and open the **Setup: AI Fact Check**
   section. (AI Fact Check is a Pro-plan feature.)
2. Set **Enable AI fact check** to **Yes** for the store view you want to audit.
3. Under **Copy fields to check**, choose which description fields are audited.
4. Under **Grounding attribute scope**, choose which attributes may be cited as evidence: only those
   required for scoring, every eligible attribute, or a chosen list. If you pick **Chosen attributes**,
   select them in **Chosen grounding attributes**.
5. Save. You can now queue products from **Moogento > ProductContent AI > Products & Drafts**: select them,
   then choose **Advanced > Queue fact check**. A single product can also be re-checked from a finding's
   row on the Fact Check Review grid.

---

## Choosing escalation (optional)

Some findings come back with low confidence. Escalation lets you spend a little more to have those
low-confidence findings adjudicated a second time by a stronger option before they are recorded.

- **Escalate low-confidence findings** has three settings: **Off**, **Escalate low confidence**, and
  **Escalate low and medium confidence**. It is **Off** by default, because escalation spends extra
  tokens.
- When escalation is on, the **Escalation target** field appears. It offers only the options your active
  AI provider supports: a higher reasoning effort on the same model, or a stronger model from the same
  provider. Pick one.

A second look can only change a verdict when the stronger adjudication still meets that verdict's own
evidence rule - it can never lift an unsupported claim to a confident "true". If the chosen target is not
available at run time (for example the provider changed after you saved), the run still completes from
the first pass and each affected finding records a short skip reason such as *escalation model
unavailable* or *Monthly token budget reached*, so nothing fails silently.

---

## Checking against an external source (optional)

By default, AI Fact Check only compares copy against your own catalogue attributes. If you want an extra
signal on specific-value claims - a size, a weight, a capacity - you can turn on external corroboration,
which checks those claims against one external source you configure. The same setting also supplies
source-attributed passages to draft generation in Product Page Workflows, so turning it on affects more
than fact check.

The setting is on by default and uses **Your AI provider**: the OpenAI or Anthropic connection you set up
for Content. It needs no extra account, API key or terms step. Each product costs about one extra provider
call, billed by your provider as a web search plus tokens (Anthropic lists web search at $10 per 1,000
searches). If your Content provider cannot search the web, the setup screens say so and name the fix. Its
results stay separate from your catalogue-consistency results:
it never rewrites a claim's catalogue verdict or its confidence value, and it never applies anything to a
product on its own. One thing it does change - a claim the external source verifiably disputes is promoted
to a finding and given a severity band, so a statement your own attributes supported can still reach your
review queue.

1. Go to **Stores > Configuration > Moogento > ProductContent AI > Connections**. (Online research is
   included on Growth and Pro plans; AI Fact Check itself is Pro.)
2. Set **Research products online** to **Yes** for the store view you want.
3. Leave **Online research source** on **Your AI provider** to use the OpenAI or Anthropic connection you
   already have for Content. Nothing else is needed; make sure that provider is connected and validated
   in the providers table in the same **Connections** section. With the included Moogento AI service on
   a Growth or Pro plan, online research is included and needs no key: the search runs through Moogento AI and counts
   against your monthly search allowance. A Perplexity Search or other source key you enter yourself always
   takes precedence over the included search.
4. To use a separate search service instead, choose Perplexity Search, Google Programmable Search, or
   Custom contracted snippets API. Google Programmable Search also asks for a **Google Search Engine ID**,
   and the custom option also asks for a **Custom research endpoint**. Enter the **Online research
   credential** that service gave you (stored encrypted, never shown in logs, prompts or exports), then
   set **Accept the research source's terms** to **Yes**. No lookup is made through a separate service
   until this is set.

With **Research products online** set to **No**, fact check behaves exactly as before.

Research remembers each brand's official website for each store and reuses it for every product from that brand. A website is remembered for products that have a brand set, or whose name starts with a brand of at least two words, and only when the search results point to one clear match for that brand; when several similar addresses appear, it prefers the .com address or your store country's own address, and otherwise remembers nothing. On that site it searches by the product's model name as well as its code. Construction details such as collar, fit, material, closures and silhouette may come from the brand's page for the same style in another colour; the page each detail came from is recorded with it and linked in the evidence list of the workflow item, and the writing prompt marks such details as coming from the same style in another colour. Another colour's page on its own never confirms the remembered website. Colour and photos never come from another colour's page.

Once it's on, every supported, contradicted, or unsupported statement is also checked against your external
source; implausible statements are excluded, because a snippet source is not authoritative for safety or
regulated wording. The result appears in a **Real-world check** column, reading "Confirmed by `<source>` on
`<date>`" or "Conflicts with `<source>` on `<date>`" alongside the usual finding on the per-product Fact
Check panel and in the Fact Check Review grid. That column is display-only; the CSV export below is where
you filter by this outcome. When the external source has nothing to say about a claim the column reads
"No matching fact in the checked sources", and a claim this doesn't check automatically reads "Not verified
automatically for this claim type". A corroboration result also has its own freshness window, so an old
result is withheld rather than shown as if it were current.

This never adds a storefront badge - the result is for your review team in Admin only, alongside the
existing fact-check summary CSV export, which can also be filtered by this outcome.

---

## Reading and acting on findings

Open **Moogento > ProductContent AI > Fact Check Review** (or a single product's Fact Check panel) to work
through findings.
Every model-written string is shown as plain, escaped text. For each finding you can:

- **Dismiss** it, if it is acceptable as written. The per-product Fact Check panel lets you pick the reason
  (Not a real issue, Already addressed elsewhere, Wording is acceptable as is); dismissing straight from the
  Fact Check Review grid records a plain reviewer dismissal. A dismissal carries forward on later runs only
  while the copy and its evidence are unchanged, so a genuine change can reopen it.
- **Verify resolved** - Fact Check re-checks the current copy; it resolves only when the cited statement
  is genuinely absent from the copy now. Otherwise it stays open, and queues a fresh check if you also
  have permission to queue checks.
- **Queue regeneration** of the affected copy field. The finding stays open and continues to count until a
  later check clears it.
- **Re-check** the product to run a fresh assessment for the same store.
- **Review product** opens that product's own Fact Check panel, where you can dismiss with a named reason.

---

## Automatic re-checking and housekeeping

- **Scheduled re-check** (a per-store setting) lets a completed run age out: once it is older than the
  re-check window, that store's stale and aged products are automatically re-queued on a schedule, so
  findings stay current without you re-running them by hand. It is off by default.
- **Retention** quietly trims old, finished run history in the background. It always keeps the latest
  completed run for each product and store, any run that still owns an open finding, and any run tied to a
  dismissal or resolution you recorded - so your review decisions are never lost.

---

## Exporting a summary

Support and reporting can export a structural summary of findings to CSV with
`bin/magento moogento:productcontent:report:fact-check-summary`, filtered by store, date range, verdict,
band, review state, escalation outcome, and (when external corroboration is on) corroboration outcome. The
export carries only structural fields - never the copy text, explanations, or attribute values - so it is
safe to share.

---

## Good to know

- AI Fact Check is about **catalogue consistency**, not external truth. A clean product shows **"No
  findings"**, which covers only the fields and attributes that were checked.
- It writes nothing to your products and adds no storefront badge. Every change to a product stays a human
  decision. This holds whether or not external corroboration is turned on.
- Spend is bounded by a per-run product cap and a monthly token budget you set, and by a built-in daily cap
  per product;
  when a run reaches the budget its remaining products are cancelled and reported rather than queued
  silently.

---

## Related guides

- [ProductContent AI](productcontent.md) - installation, content generation, image generation, and the
  full configuration reference for the module this feature belongs to.
