Shopify connector — whitepaper status source
Created 2026-08-11 (no prior whitepaper status source existed in docs/ —
measured; this file is now it). Proof levels per
.claude/memory/active/marketing-commerce-connectors.md: a PARTIAL row means
code + tests exist (implemented) — NOT deployed, NOT live-verified. Flips
happen ONLY after the named tests pass; live-site copy never changes from
this file (GATE 2 / owner decisions only).
| Capability | Status | Evidence |
|---|---|---|
| Signed webhook receiver (HMAC, fail-closed on missing secret) | PARTIAL | services/service-marketing-connectors/main.py; tests/connectors/test_shopify_gateway.py::TestHmac (green 2026-08-11) |
| Replay protection (webhook-id TTL cache) | PARTIAL | webhook_hardening.ReplayCache; TestReplayProtection (green 2026-08-11) |
Consent gate on person-level fields (unified.consent_registry, fail-closed redaction + consent-drop counter) |
PARTIAL | webhook_hardening.ConsentLookup / redact_person_fields; TestConsentGate (green 2026-08-11). DDL operator-applied at GATE 2 |
orders/checkouts → JourneyEvents (MAPPERS["shopify"]) |
PARTIAL | pre-existing map_shopify (topic passthrough covers orders/create, orders/updated, checkouts, refunds); tests/shared/test_virtuoso_models.py (green) |
inventory_levels/update → MarketSignal (MARKET_MAPPERS["shopify_inventory"] via Cell 37) |
PARTIAL | gateway routing TestInventoryRouting + tests/market_signal/ (green 2026-08-11) |
| GDPR compliance topics ACK-only | PARTIAL | TestGdprTopics (green 2026-08-11) |
| products/update → canonical ingestion evidence | PARTIAL | generic webhook path (pre-existing) |
| Admin GraphQL reconciliation/backfill (orders/products/customers pull) | PARTIAL | pre-existing /api/v1/shopify/sync |
| Live-verified end-to-end lineage (rule 6 checks a–d) | PROPOSED | not live-verified; consent registry DDL + Cell 37 deploy + secrets are GATE-2/operator steps |
| Klaviyo gateway connector | PROPOSED | BUILD_DEBT KLV-1 |
| Klaviyo email/SMS value feed (KLAVIYO_FEED, W5) | PARTIAL | services/measurement-rails/klaviyo_feed.py + ncm_feed_wiring.build_klaviyo_value_events/send_klaviyo_value_events; flag off by default, health() reports not_configured absent a credential. [Roadmap] on any merchant-facing surface until GATE 2 + real credentials — no LIVE claim |