← back to Justin David Pricing 2026
Add gated approval memo pointer + canary reference for JD/LA Fabrics per-yard onboard
291e7df2186206eda5bf66acb3756f67d6f7b87c · 2026-07-16 08:59:44 -0700 · Steve Abrams
Files touched
Diff
commit 291e7df2186206eda5bf66acb3756f67d6f7b87c
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Jul 16 08:59:44 2026 -0700
Add gated approval memo pointer + canary reference for JD/LA Fabrics per-yard onboard
---
CANARY-SKILL.md | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/CANARY-SKILL.md b/CANARY-SKILL.md
new file mode 100644
index 0000000..2466450
--- /dev/null
+++ b/CANARY-SKILL.md
@@ -0,0 +1,65 @@
+---
+name: dw-losangeles-fabrics-canary
+description: LIVE-feed price-integrity canary for the Justin David (customer-facing "Los Angeles Fabrics" / Phillipe Romano) per-yard fabric line on the DW Shopify store. Reads the live phillipe-romano collection products.json, filters to the DWLA SKUs, and checks each product's real variants against the expected per-yard retail staged in dw_unified.justin_david_pricing_2026 (JD Jan-2026 list, 15% trade discount, DW-standard markup + flat tariff pass-through). Flags per-yard variants priced OFF the expected retail (price_drift), the $4.25 memo leaking as the sellable price (sample_as_sell → GMC risk), growth of the sample-only "no per-yard variant yet" backlog (baseline-aware), and any leak of the real mill name "Justin David" customer-facing. READ-ONLY. Alerts to CNCP + George only on FAIL/WARN-growth; clean is silent. Use when Steve says "/dw-losangeles-fabrics-canary", "LA fabrics canary", "are the Justin David prices right", "did a per-yard price drift", "is the fabric per-yard variant priced", or it runs on schedule (com.steve.dw-losangeles-fabrics-canary, daily).
+---
+
+# Los Angeles Fabrics (Justin David) Per-Yard Price Canary
+
+Guards the 2026-07 per-yard pricing onboard of the **Justin David** commercial-fabric
+line — sold customer-facing as **"Los Angeles Fabrics" / Phillipe Romano** (SKU prefix
+`DWLA-`, product_type Commercial Fabric/Drapery/Wallcovering). The mill is Justin David
+Textiles | Hospitality Solutions (justindavid.com); "Justin David" must NEVER be
+customer-facing.
+
+## Why this is a LIVE-feed canary (not a DB one)
+The `dw_unified` mirror does **not** carry the per-yard variant price for this line —
+`price`/`retail_price` are null even on products that already have a `-Yard` variant, and
+`min_variant_price` only reflects the $4.25 memo sample. So the DB can't judge the sell
+price. The **public Shopify feed can** — this reads the `phillipe-romano` collection
+`products.json`, keeps only the `DWLA-` products, and reads their real variant prices.
+(Contrast `dw-map-auditor`, which is a DB-side check where the mirror DOES hold price.)
+
+## Expected pricing model (Steve, 2026-07-16)
+- our cost/yd = JD list × 0.85 (15% trade discount) **+ tariff** (flat pass-through)
+- retail/yd = cost ÷ 0.65 ÷ 0.85 **+ tariff** (DW standard) — the ×0.85 and ÷0.85 cancel,
+ so **retail == JD list ÷ 0.65 + tariff** (~1.54× list).
+- Expected retail per SKU lives in `dw_unified.justin_david_pricing_2026` (staged from the
+ JD Jan-2026 price list: PDF + xlsx, 525 patterns, built by ~/Projects/justin-david-pricing-2026).
+
+## The four checks
+1. **FAIL · `price_drift`** — a product that HAS a per-yard variant (>$5) whose LIVE price
+ deviates > max($0.50, 2%) from the expected `retail_yd`. Mispriced onboard or later drift.
+2. **WARN · `sample_as_sell`** — a non-sample variant priced ≤ $5 (the $4.25 memo leaking as
+ the sellable price → the GMC $4.25-feed disapproval risk).
+3. **WARN · `peryard_backlog_growth`** — an ACTIVE priced DWLA product still sample-only (no
+ variant > $5). **BASELINE-AWARE**: the pre-onboard floor is captured once in
+ `data/baseline.json`; it alerts only when the backlog GROWS above the floor (a priced
+ product lost / never got its per-yard variant), never on the known backlog being
+ remediated. Same philosophy as `dw-five-field-canary`.
+4. **FAIL · `jd_name_leak`** — the real mill "Justin David" appearing in any live title /
+ handle / tags (private-label leak guard, like `dw-leak-scanner`).
+
+## Run
+```bash
+node ~/.claude/skills/dw-losangeles-fabrics-canary/canary.mjs # scan only (prints verdict)
+bash ~/.claude/skills/dw-losangeles-fabrics-canary/run.sh # scan → CNCP + George on FAIL/WARN
+```
+- `canary.mjs` pages the live collection (1.5s throttle — the store 429s on rapid paging),
+ joins the staging table read-only, writes `data/audit-<ts>.json` + `data/latest.json`,
+ prints the verdict. `PASS`/`UNKNOWN`(transient feed blip) are silent.
+- `run.sh`, only on FAIL / WARN-growth: posts a CNCP parking-lot card + emails Steve via
+ George (steve-office). Env: `DW_UNIFIED_URL`, `DW_STORE`, `CNCP_URL`, `LAFAB_CANARY_TO`.
+
+## Baseline / heartbeat
+- `data/baseline.json` — the pre-onboard sample-only backlog floor (auto-captured first run;
+ delete it to re-baseline after the onboard lands so the floor tracks 0).
+- `data/latest.json` — per-run output; its mtime is the `dw-canary-meta-watchdog` heartbeat.
+ `inputs_verified` is false (blind) if the staging table is empty or the feed is unreadable.
+
+## Schedule (Steve-paste bootstrap — classifier blocks autonomous launchd installs)
+```bash
+launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.steve.dw-losangeles-fabrics-canary.plist
+```
+(plist drafted alongside this skill; runs daily. Depends on the pricing onboard having
+landed so `price_drift` has priced variants to judge — pre-onboard it just tracks the
+backlog floor.)
← 9825fad Justin David / Los Angeles Fabrics 2026 per-yard price onboa
·
back to Justin David Pricing 2026
·
auto-save: 2026-07-16T09:12:20 (1 files) — apply_shopify.mjs 3397683 →