# Decision 0002: actionable private catalogue checks

Accepted implementation decision, 2026-09-05. Rules/value contracts 0.3.0-alpha; CSV adapters and report format 0.1.0-alpha. Catalog modelVersion remains 0.1.0-alpha; schema revision remains 0.1.1-alpha.

## Evidence versus interpretation

DIRECT evidence describes the source. DERIVED/INFERRED choices describe CCFP normalization, not universal destination rules.

- Google documents condition tokens `new`, `refurbished`, `used` ([source](https://support.google.com/merchants/answer/6324469)), gender tokens `male`, `female`, `unisex` ([source](https://support.google.com/merchants/answer/6324479)), and age-group tokens `newborn`, `infant`, `toddler`, `kids`, `adult` ([source](https://support.google.com/merchants/answer/6324463)). All reviewed 2026-09-05. CCFP adopts these as an INFERRED bounded canonical vocabulary, not a rule requiring every product to have these attributes. They describe product merchandising, not a person's identity. Non-value states remain available. Other tokens require a versioned extension rather than silent rewriting.
- A taxonomy reference now has non-blank `taxonomy`, `version`, `reference` strings and no extra properties. This representation is an INFERRED CCFP decision. Named taxonomy membership remains UNKNOWN. A well-shaped reference is not a verified classification; no universal taxonomy or cross-taxonomy equivalence is claimed.
- [UN M49](https://unstats.un.org/unsd/methodology/m49/overview) supplies 248 ISO-alpha2 country/area codes in the pinned snapshot. This is not the complete ISO 3166 register. Unlisted two-letter values, including TW and XK, remain UNKNOWN rather than false failures. No political or market-access inference is made.
- The [bounded currency reference](../../registry/code-lists.json) covers CAD, USD, EUR, GBP, AUD, NZD and JPY using [Stripe's presentment precision documentation](https://docs.stripe.com/currencies), reviewed 2026-09-05. It is expressly not the full ISO 4217 list and not a Stripe eligibility check. The official SIX current-list download could not be retrieved in this environment; no invented global snapshot replaces it. Other codes remain UNKNOWN. Extending coverage requires primary-source verification and a new snapshot version.
- Amounts remain exact nonnegative decimal strings. Non-zero sub-minor-unit digits yield WARN, not a universal invalid-price claim; zero-only excess digits remain representable. No floating-point rounding occurs. This is CCFP guidance, since destination precision can differ.

## Source adapters

Google and Shopify CSV are converted in memory to the same canonical graph and checked by the same compiled schema and field contracts. Source adaptation and canonical validation are distinct. See the [mapping contract](../../mappings/csv-adapters.md) for supported fields, header aliases, omissions and explicit context.

Graph IDs are file-local record locators, not durable merchant identity. No publication flag becomes live availability, no bare price becomes CAD, and no Vendor becomes a brand or seller automatically. Missing context yields UNKNOWN. Invalid supplied values still FAIL. Input is never rewritten or uploaded.

## Findings and rule scope

Each finding names its rule, safe locator, product group, outcome and evidence/interpretation link. Non-PASS findings include a next action. IDs, product names, original values, secret property names and original files are excluded from reports. Source record numbers include the header and exclude blank records; multiline quoted fields do not increment the logical record number.

Per-product missing image/core fields are listed; absence yields UNKNOWN, malformed KNOWN values FAIL. Canonical aggregate offer/title completeness retains its earlier contract; adapted offers with missing source context are UNKNOWN. Image reachability/quality, general canonical family combinations, freshness policy, source truth, cross-market alignment and platform eligibility remain unverified. The `unimplementedRuleIds` field is retained for compatibility and means rules without emitted findings in this run, not a claim of total coverage for every other rule.

Filters operate on all findings. The browser renders at most 200 matching findings at once. Explicit JSON download contains the complete findings and version metadata, not the original catalogue. No network request, browser storage, automatic saving, public score or brand publication is part of this workflow. Downloading creates a local private file; sharing it is a separate user action.

## Evaluation and closure criteria

The user explicitly requested invented data for the catalogue check. Six authored synthetic catalogues cover apparel, pantry/home goods, legacy/current Shopify headers, continuation images, deliberate malformed values, duplicate options and fractional precision. A separate 500-record fixture checks report completeness and a 10-second local safety ceiling. All fit the 200,000-byte input cap; CSV is additionally limited to 1,000 data records to bound browser work.

The [recorded results](../../evidence/synthetic-catalogue-results.json) measure file-level false FAILs and named defect detection against the authored fixtures. They are not independent real-catalogue accuracy, merchant usability research, eligibility, visibility or growth evidence. Browser checks cover loading, settings, filters, source invalidation and the private download action; automated checks cover downloaded JSON completeness/privacy.

## Migration and governance

This release tightens previously ungoverned KNOWN enums and taxonomy shape. Review such assertions before upgrading; preserve UNKNOWN/NOT_APPLICABLE/WITHHELD rather than fabricating replacements. Historical value/rule contracts are retained. Changes to vocabularies, coverage or snapshots require evidence, counterexamples, regression tests, a version bump and changelog entry under the existing contribution process. Public-good first; attribution only to Divergent Logic. Nomination remains advocacy and is not connected to validator results.
