← back to Dw Yolo Loop

digests/CONSOLIDATION-DIGEST-2026-06-18.md

76 lines

# DW Catalog-Health Remediation Digest — 63 findings → one prioritized, executable-vs-blocked plan — cycle 92

**DTD verdict E1 (unanimous 3/3 — Claude + Codex + Qwen).** READ-ONLY synthesis, **$0**. After 7+ catalog-health cycles the bottleneck shifted from DISCOVERY to ACTION: 63 findings accumulated, all Steve-gated, none executed. This dedupes + ranks them into what to ship, in what order, and what's blocked + why. Every item is GATED — this is a decision menu, not an execution.

## 🟢 QUICK WINS — small, unblocked, high-confidence, ship first (hours, not days)
| # | Fix | Count | Source | Action | Why now |
|---|---|---|---|---|---|
| 1 | Versace AI-preamble in live descriptions | **5** | c91 | trim the leaked "Here's the product description:" line | embarrassing, surgical, executable today |
| 2 | No-image active products | **2** | c88 | draft-flip + `Needs-Image` tag, then source image | rule-breach (active w/o image), 2 SKUs |
| 3 | DRAFT latent $0 landmines | **8** | c78 | set price before any activation | prevents future free-checkout |
| 4a | 33 select-to-free $0 ROLL — SET PRICE | **33** | c69/multivariant-zero | set real price on the $0 roll variant | quick-win half (no deletion) |
| 4b | 33 select-to-free $0 ROLL — REMOVE variant | (same 33) | c69 | **NOT a blind quick-win (officer):** deleting the $0 variant risks the default-variant-consume bug if it's the `Default Title` default → route through the self-healing builder, verify it's not the sample/consumed-default first | landmine |
→ Quick-win = the "set price" half + the 5 preamble + 2 no-image + 8 draft-$0. Variant DELETION is NOT same-day-blind. All reversible.

## 🔴 P1 — FREE-CHECKOUT / REVENUE-CRITICAL (do this FIRST)
- **111 Ralph Lauren $0 "Sample" — ORDERABLE (free checkout)** [c67/rl-zero-rootcause/zero-sample-sweep]. Root cause: RL NEVER-PRICED (no pipeline covers RL; 2025 import). **PARTIALLY BLOCKED** — needs RL cost via the Designers Guild distributor (`ralph-lauren-prices-via-designers-guild`), not yet in dw_unified.
  - **Interim = UNPUBLISH ONLY (officer correction):** DENY+qty0 is NOT reliably safe — `inventoryPolicy=DENY` only blocks checkout when inventory tracking is ON; our standing sample-variant pattern runs tracking OFF, so DENY is a no-op and the $0 checkout stays open. Unpublish removes the free-checkout path entirely, is reversible, and doesn't touch price (clean later reprice).
  - **Confirm $0 ≠ $4.25 on read before acting:** $0 is never a legit sample price (unpublish-safe), but any that are actually $4.25 Showroom-Line samples must STAY published (`425-sample-price-policy`). Bounded to 111 (no hidden siblings, verified).

## 🟠 P2 — MISLABEL / CUSTOMER-HARM (priced fine, labelled wrong)
- **455 roll-mislabels** (single-variant "Sample" at a roll price) [c72/73/81]:
  - **Cole & Son 352 + Kravet 13 — EXECUTABLE NOW, but ONLY via the self-healing builder (officer):** verified at EXACTLY Kravet MAP; rename "Sample"→"Sold Per Roll" + add real $4.25 Sample is MAP-safe. **Adding the first named variant triggers the default-variant-consume bug** (destroyed 32 Schumacher samples) → use the build-schu-rolls.mjs self-healing pattern (snapshot+restore the $4.25 sample), NOT generic build-roll-scale.js. **MAP filter MUST be `unit_of_measure=ROLL`** (per-yard MAP on a per-roll product underprices ~3x).
  - **Osborne & Little 90 — relabel-ONLY** (RRP basis, no MAP to verify; rename, do NOT reprice; trade-cost recovery pending the portal reset).
- **238 inverse-mislabels** ($5 titled as the full product) [c84/85]:
  - **Ungated-cheap for all 238: relabel/unpublish** so $5 stops masquerading as the full product (Steve picks the verb).
  - SPLIT-with-real-roll where cost exists: ~74 DW private-label (DW sets price) + Lee Jofa (MAP). **PR 139 SPLIT-BLOCKED** (no price sheet — Pointe per-pattern quotes only).

## 🟡 P3 — HYGIENE / SEO / THIN-CONTENT (lower urgency, mostly executable)
- **43 empty collections + ~37 thin sitemap pages** [c41/42/60] — merge+301 map already built (c42); execute the merge, stop feeding Googlebot thin pages.
- **Archived products soft-404 to the homepage, fleet-wide** [c58] — should 404/410 or 301 to a real page (SEO + UX); needs a redirect policy decision.
- **⬆ PROMOTE toward P2 feed-integrity (officer): $4.25 JSON-LD leaks (~21k) [c61/62] + 18,577 duplicate-title [c46]** — these aren't just cosmetic: Google reads per-variant offers, so a sample-only product titled "...Wallcovering" @ $4.25 with no "Sample" word + a non-unique title is the actual disapproval/misprice vector. Closer to P2 feed-integrity than P3 hygiene. (Still distinct from the structurally-closed GMC $4.25 story; this is the on-page schema + title-uniqueness signal.) Dup-titles: review true-dup vs colorway-family (maker-name-SKU false-positive caveat; fleet-dedup lane).
- **Confirmed upstream leaks** [c39/40/orphan-collections] — 3–5 collection/backup-file vendor-name leaks → scrub (complements the running dw-leak-guard).
- **Thibaut 56 disco-stragglers** [thibaut-disco-drift] — unpublish→archive (disco-line, not live mislabels).
- **Body-copy "wallpaper" (proper-noun-safe pass)** + **non-"here is" preamble families** [c91] — low-priority content follow-ons.

## 🛡️ STANDING GUARDS — built + hardened, awaiting Steve's install (one paste each)
- **sitemap-integrity canary** [c77] — April-mass-archive early-warning tripwire.
- **zero-dollar-orderable canary** [c78] — P1 free-checkout guard (the c67 class).
- **+ watchdog `hbAbs` registry entries** [INSTALL-RUNBOOK §5] — proves the canaries actually ran.
- **+ 5 install-ready canary packages** [c34 promotion harness].
- These need `launchctl bootstrap` (classifier blocks Claude from self-installing) — the runbook has the exact paste.

## ⛔ BLOCKED (and why — don't re-litigate)
- RL 111 reprice → needs DG distributor cost (interim: stop checkout, above).
- PR 139 SPLIT → no Pointe price sheet (relabel/unpublish only).
- O&L 90 reprice → no MAP/authoritative price (relabel-only; cost-recovery pending portal reset).
- Banned-word body-copy bulk rewrite, April mass-restore, Nicolette/PJ/Et Cie reactivation → standing vetoes.

## ✅ CLEAN BILLS (no action — confidence map of what was verified healthy)
Collection-membership (0 orphans, c86) · nav-reachability (full catalog via Boost Shop-All, c87) · buyability (0 unbuyable census, c89) · CONTINUE-masked (true defect 0, c90) · image-presence (99.99%, c88/54) · broken-image (0%, c44) · dup-image (clean, c47) · orphan-products (0, c49) · canonical/robots/meta-robots (clean, c63) · collection-canonical (clean, c64) · hreflang/locale (closed, c65) · sitemap+robots health (clean, c59) · TLS fleet (pass, c24) · "Wallpaper" TITLE blast-radius (0, c91) · GMC $4.25 (structurally closed, gmc-425-feed-structural).

## Recommended execution order (REORDERED per officer — money surface leads, not polish)
1. **P1 RL 111 — STOP free checkout FIRST** (a live $0 checkout shipping physical goods outranks all polish). Interim = **UNPUBLISH ONLY** (see corrected P1 below — DENY+qty0 is a no-op when inventory tracking is off), after confirming price is literally $0.00 (not a $4.25 sample). Reprice when DG cost lands.
2. **Install the zero-dollar-orderable + sitemap-integrity guards + watchdog — SAME pass as P1** (the guard is what makes the free-checkout fix durable/non-regressing). One paste.
3. **Quick wins (1–4 above)** — ~48 products, reversible — BUT see the reclassification: only "set price" is same-day; any variant DELETION routes through the self-healing builder.
4. **P2 Cole&Son 352 + Kravet 13** — MAP-safe SPLIT, ONLY via the self-healing builder (build-schu-rolls.mjs pattern, NOT generic build-roll-scale.js) + MAP filter `unit_of_measure=ROLL`.
5. **P2 238 inverse + O&L 90** — relabel/unpublish (verb is Steve's call).
6. **P3 batch** — but PROMOTE the $4.25-JSON-LD + 18.5k dup-titles toward P2 feed-integrity (they feed the GMC per-variant risk), then empty-collection merges, soft-404 policy, dedup review.

## ⚠️ RE-ACTIVATION READINESS RULES (officer — apply to ANY product that goes live via reprice/SPLIT/republish)
- **inventory=2026 on BOTH variants** (hard standing rule, was absent from the plan) for anything re-activated (RL republish, SPLIT products going live).
- **Never re-activate without image AND width metafield** — keep draft + `Needs-Image`/`Needs-Width` until both exist.
- **Variant DELETION + first-named-variant SPLIT carry the default-variant-consume bug** (`shopify-default-variant-consumes-sample` — destroyed 32 Schumacher $4.25 samples): snapshot+restore the $4.25 sample; use the self-healing path only.

_Cycle 92. DTD-picked E1 (unanimous 3/3). Consolidated 63 findings into a prioritized executable-vs-blocked remediation plan: ~48 quick-win products (5 Versace preamble + 2 no-image + 8 draft-$0 + 33 select-to-free roll) shippable today; P1 = 111 RL $0 (stop-checkout-now, reprice-blocked-on-DG-cost); P2 = 455 roll-mislabels (Cole&Son 352 + Kravet 13 MAP-safe-executable, O&L 90 relabel-only) + 238 inverse-mislabels (relabel/unpublish + SPLIT-where-cost-exists, PR 139 blocked); P3 hygiene batch (empty-collection merges, soft-404, JSON-LD ~21k, 18.5k dup-titles, leaks, Thibaut disco); 2 built guards + watchdog awaiting one-paste install. Clean bills mapped for confidence. The bottleneck is now ACTION, not discovery — this is the menu. All GATED. Read-only, $0._

---
## 🏛️ OFFICER SIGN-OFF — vp-dw-commerce: CONFIRMED (1 mandatory reorder + 3 guardrails, all folded in)
- **Q1 — P1 free-checkout must LEAD, not follow polish (folded in):** a live $0 checkout shipping physical goods outranks trimming 5 descriptions. Reordered: P1 stop-checkout FIRST → guards SAME pass → quick wins → SPLITs → relabel → P3. The guard is what makes the P1 fix non-regressing, so it rides with P1.
- **Q2 — RL interim = UNPUBLISH only, NOT DENY+qty0 (folded in):** DENY only blocks checkout when inventory tracking is ON; our sample pattern runs tracking OFF → DENY is a no-op, $0 checkout stays open. Unpublish removes the path, reversible, price-clean. Confirm $0≠$4.25 first (legit $4.25 Showroom samples stay published).
- **Q3 — two items mis-tagged as clean quick-wins (folded in):** (a) the 33 $0-roll "REMOVE variant" half carries the default-variant-consume bug → only "set price" is same-day; deletion routes through the self-healing builder. (b) Cole&Son 352 SPLIT is exposed to the same bug (adding the first named variant overwrites Default Title) → self-healing builder only (build-schu-rolls.mjs), NOT build-roll-scale.js; MAP filter `unit_of_measure=ROLL` (per-yard underprices ~3x).
- **Q4 — under-rank + a drop (folded in):** $4.25-JSON-LD + 18.5k dup-titles promoted toward P2 feed-integrity (per-variant feed vector). DROPPED rule restored: inventory=2026 on BOTH variants for any re-activated product + never re-activate without image AND width metafield — written into the re-activation readiness rules.
- **Net:** the dedupe + executable-vs-blocked split is solid and honest; approved with P1+guards front-loaded, unpublish-only RL interim, self-healing-builder routing for variant deletion/SPLIT (ROLL-unit MAP), and re-activation readiness rules enforced. All Steve-gated, nothing written.

CONFIRMED. The digest is the actionable menu; execute money-surface-first (P1 unpublish + guards), then the ~48 quick wins (set-price half), then MAP-safe SPLITs via the self-healing builder, then relabel, then P2-promoted feed-integrity + P3. All GATED. Read-only, $0.