SLICE-8: Shopify dialect — detect/map Shopify export at the codec boundary + DOC-2/3 (SD-0002 §7.2) #32
Reference in New Issue
Block a user
Delete Branch "slice-8-shopify-dialect"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
SLICE-8 — Shopify dialect + public format docs (SD-0002 §7.2)
Closes Products story #13. Completes PUC-6 (a Shopify export imports directly) and PUC-11 (learning the format).
What ships
detect_dialect/dialect_shopify.is_shopify_header): a file isshopifyiff it carries a Shopify-only signature column and no canonical-distinctive column. The canonical veto keeps detection conservative (under-detection warns; over-detection corrupts) — never misparses (§7.4).Body (HTML)→Description,Product Category→Google Product Category,Cost per item→Variant Cost,Variant Grams→Variant Weight+synth unitg), direct passthroughs, and Shopify columns with no canonical home surfaced as the not-imported warning. Two name-collision overrides: Shopify free-textType(canonicalTypeis structural) andVariant Weight Unit(superseded by the grams transform). Exhaustive mapping pinned as a fixture (§6.5.1).GET /api/products/columns.md.sample.csvconfirmed final (variants + images, parses clean canonical).Tests
e2e_import_shopify_dialect(unmodified Shopify export → mapped banner + not-imported band → confirm → run completes).Review hardening (adversarial pass)
A canonical file carrying a stray Shopify-signature name (e.g.
SEO Title) previously misdetected as Shopify and silently droppedType/ corrupted the weight unit (kg→g). The canonical-distinctive veto closes that, the dual-named shadow (Body (HTML)+Description), and the stale-unit-on-clear case.Version bump v0.7.0 → v0.8.0.
🤖 Generated with Claude Code