Catalogue audit output
======================

Files
  report.json        Full evidence report: source metadata and raw rows, per-offer evidence,
                     classifications, reasons, hints, unknown checks and source issues.
  all-offers.csv     One row per Amazon offer record (including inactive rows).
  exceptions.csv     Reviewed offers whose classification is not published_exact/mapped_published
                     or that carry a review reason, hint or unknown check.
  source-issues.csv  Problems found in the source files themselves.

Summary
  Amazon offer rows: 29; active: 26; distinct active seller SKUs: 24
  Reviewed rows: 27 (unrecognized status: 1); ignored inactive rows: 2
  Active SKUs without a published classification: 13
  Exception rows: 24; source issues: 14

Inputs (SHA-256 of the exact bytes read)
  amazon: amazon-offers.csv  9daaf229cb3f2fc75a522a73242a82cd1021e31fd579f93af94982dc1cd4ca6c
  master: master-inventory.csv  10625b8995dfe2d523aaaae948855acac4b5a71eae52e1f77e11d452fe1dd436
  shopify: shopify-products.csv  64010f860c27f0107d979c02d04027faae6ded5a85471cf77ff83db6d6250226
  links: channel-links.csv  7835d0aa9073a5bc4665df57fa6a8272395dcaa85db08fa584837346ccd8e584

CSV transformation
  Every field is double-quoted and embedded quotes are doubled. Any value that begins with
  = + - @ (including after whitespace), tab, CR or LF is prefixed with an apostrophe (') so spreadsheet
  software does not evaluate it as a formula. Lists are joined with "; ". Original values are
  kept verbatim in report.json. Files start with a UTF-8 byte order mark for spreadsheet import.

Limitations
  - Read-only audit of the supplied export files. Nothing is written back to any channel or inventory system.
  - Exported Status and Published values describe the files only; live storefront visibility was not checked.
  - Cross-channel link approval reflects the declared Approved value in the links file and was not independently verified.
  - Image checks report URL presence only. No image was fetched; quality, model match and live availability are not assessed.
  - Inventory columns are review hints only. Nothing here proves or disproves live stock synchronisation or overselling.
  - SKU joins are exact and case-sensitive with no trimming. Whitespace, case and leading-zero similarities are review hints, never joins.
  - Unknown checks (for example missing optional evidence) are listed per offer and are never
    counted as success.
