Refresh product tags, vendor, and status from Shopify into product.tags — updating product attributes (tags, vendor, status) to power tag analytics and UI filters, without requiring a full data acquisition workflow (ProcedureExecution).
Goal : Ensure product attribute accuracy independently of the daily bulk sync .
Method Path Spec Description POST /api/products/tags/syncproduct.yaml Enqueue tag sync job (p99 < 200ms) GET /api/products/tags/sync/statusproduct.yaml Check sync job status (?job_id=...) GET /tagsproduct.yaml List all product tags GET /tags/{tag_id}product.yaml Get single tag detail GET /productsproduct.yaml List products (verify synced data)
Table Module Role productProduct Write: tags, vendor, status, last_seen upserted from Shopify product_tagProduct Write: tag records synced from Shopify
Resource Type Purpose internalWorker API validation, job enqueue ingestWorker Fetches tags from Shopify, upserts to DB CF Queue Queue ARTIFACT_TAG_SYNC job delivery
Actor Role Staff user (Ops/Creative) Triggers sync via UI Dashboard API Worker Validates, enqueues job Ingest Worker Fetches tags, upserts products Shopify Admin API Product data source
Staff clicks “Sync Tags” → POST /api/products/tags/sync
API writes optional workflow execution record and enqueues ARTIFACT_TAG_SYNC
Ingest Worker queries Shopify (prefer GraphQL) with rate-limit backoff
Worker upserts product(tags, vendor, status, last_seen) in chunks — updating attributes on each product
Worker optionally enqueues measurement dataset refresh if classification thresholds depend on tags
Error condition Recovery Shopify rate limit Delay retry using queue delaySeconds (up to 12 hours) PlanetScale limits Use smaller batches
"job_type" : " ARTIFACT_TAG_SYNC " ,
"requested_at" : " ISO8601 "
PASS : Sample product’s tags in Shopify match product.tags after completion
FAIL : Orphaned products, malformed JSON in tags, or job unable to complete