Repository navigation
Description
Location
Products and Thresholds page, Dashboard stock levels, Shopify product synchronization, and product/threshold associations.
Backlog source
Abdikhaliq reported that Products and Thresholds does not appear to match Shopify, while Dashboard inventory displays the expected Shopify products. Carson investigated the different data paths on November 5–6, 2026.
Abdikhaliq supports retaining Hub product records while distinguishing those currently represented in Shopify. Exact status semantics and the reported mismatch still require validation.
Current behavior
The Dashboard iterates through inventory returned by Shopify’s getStockLevels function. GET /products lists stored Hub products with manufacturer and threshold information.
Sync from Shopify upserts products by SKU. Matching SKUs update names; existing non-null Shopify inventory IDs are retained. Missing SKUs and individual write failures are skipped. The handler does not remove older Hub products.
These differences explain how the pages can show different product sets, but no concrete live mismatch has been verified. Retained sample/older records are one possible explanation, not a confirmed root cause.
Expected behavior
Products and Thresholds should clearly represent Hub products and their relationship to Shopify while preserving operational records and history.
Users should be able to distinguish a product matched in the latest successful Shopify retrieval from one absent from that retrieval or one whose status cannot currently be verified. Identity matching must not imply that every field has synchronized successfully.
Acceptance criteria
- Trace a concrete reported mismatch through Shopify retrieval, synchronization, the Hub product record, and both page responses.
- Determine whether the mismatch results from retained records, skipped synchronization, identity matching, configuration, or another cause.
- Correct any confirmed defect and record supporting verification.
- Define matching rules for SKU and Shopify inventory item ID, including missing or conflicting identifiers.
- Define precise user-facing status labels and the evidence required for each.
- Failed, disabled, or incomplete retrieval does not incorrectly classify every Hub product as absent.
- Distinguish sample-data results from live Shopify verification.
- Verify that thresholds are configured and saved against the intended Hub/Shopify product association.
- Preserve manufacturer associations, thresholds, alerts, reorder history, and production-run records.
- Test matched and unmatched records, missing/conflicting identifiers, retrieval failure, and threshold associations in an identified development environment.
Verification evidence
Prior code review compared backend/src/routes/products.js with backend/src/routes/dashboard.js and inspected Shopify synchronization behavior.
The November 6 discussion was reconstructed by Carson after Sidechat became unavailable. No specific live mismatch or implemented correction has been verified. Record the implementation baseline, environment, and runtime evidence before closure.
Dependencies or decisions
Related to #54: reliable product and threshold associations are necessary before claiming the complete reorder-refresh workflow is validated.
Product deactivation is a separate proposed feature. Absence from Shopify retrieval does not authorize deletion or automatic deactivation. Any data cleanup, identity migration, or changes affecting historical associations require a separate reviewed plan. Trello Card.
Priority: High (provisional; potential impact on product/threshold accuracy).
Area: Products / Shopify / thresholds.
Status: Investigation / Needs verification.
Owner: Unassigned pending coordination.
Target date: To be agreed.
Activity
code811 commentedon Nov 9, 2026
Completed by pull request #64.