← back to Designer Wallcoverings
audit: Sangetsu+Lilycolor Activation-Gate readiness manifest (063026A)
a7285b376730e78bd67219da8030ae15eb8d4d7d · 2026-07-01 11:52:27 -0700 · Steve Abrams
Files touched
A onboarding/sangetsu-lilycolor/READINESS-063026A.mdA onboarding/sangetsu-lilycolor/readiness-063026A.json
Diff
commit a7285b376730e78bd67219da8030ae15eb8d4d7d
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Jul 1 11:52:27 2026 -0700
audit: Sangetsu+Lilycolor Activation-Gate readiness manifest (063026A)
---
onboarding/sangetsu-lilycolor/READINESS-063026A.md | 169 +++++++++++++++++++++
.../sangetsu-lilycolor/readiness-063026A.json | 82 ++++++++++
2 files changed, 251 insertions(+)
diff --git a/onboarding/sangetsu-lilycolor/READINESS-063026A.md b/onboarding/sangetsu-lilycolor/READINESS-063026A.md
new file mode 100644
index 00000000..246038ea
--- /dev/null
+++ b/onboarding/sangetsu-lilycolor/READINESS-063026A.md
@@ -0,0 +1,169 @@
+# Sangetsu + Lilycolor — Activation-Gate Readiness Audit (063026A)
+
+**Type:** READ-ONLY audit. No writes to dw_unified, Shopify, or any canonical store. No LLM/ollama calls.
+**Generated:** 2026-07-01 (Mac2). Snapshot of a still-running enrichment + title-translation sweep.
+**Inputs (staging/):** `sangetsu-staging.jsonl`, `lilycolor-merged-063026A.jsonl`, `lilycolor-titles-en-063026A.jsonl`, `enrichment-full-063026A.jsonl` (+ `.seed/.shard0/.shard1/.sweep/.pilot`).
+
+---
+
+## Executive Summary
+
+**Gate-ready EXCEPT cost = 320 SKUs** (all Lilycolor). These 320 have images + specs + a description + an EN title, and are blocked on ONE thing only: a confirmed DW net cost. The staged `¥` is Japan **LIST** price, not cost — so **cost is KNOWN-MISSING for 100% of all 12,806 staged SKUs** and is the sole Steve/purchasing blocker. That 320 is a floor that will rise as the enrichment + title sweep (running right now) fills descriptions and EN titles: 2,543 Lilycolor SKUs already have 100% images / 100% specs / 100% list-price, so as description coverage (currently 701/2,543 = 28%) and EN-title coverage (689/2,543 = 27%) climb toward complete, the gate-ready-except-cost count converges toward the full 2,543. **Sangetsu contributes 0 gate-ready SKUs** — its schema has no price, no description field, and specs are populated on only ~9% of SKUs; it needs a spec + description + cost build-out before any of its 10,263 SKUs can approach the gate.
+
+**Bottom line for Steve:** the cost ask is precisely scoped to **all 12,806 SKUs** (every one is cost-blocked), but the *nearest-term* activatable tranche is the Lilycolor 2,543 — of which **320 are ready TODAY** except cost, growing toward 2,543 as the local sweep completes. Sangetsu's 10,263 need enrichment work regardless of cost.
+
+---
+
+## 1. Total staged SKU count — reconciled
+
+| Vendor | Proposed prefix | Unique SKUs | Notes |
+|---|---|---|---|
+| Lilycolor | `DWLC` | **2,543** | SKU-level rows in `lilycolor-merged-063026A.jsonl`, 1 row = 1 mfr_sku, no dupes |
+| Sangetsu/Goodrich | `DWGO` | **10,263** | 622 patterns → 10,532 colorway-SKU entries − 269 cross-pattern dup entries = 10,263 unique |
+| **TOTAL** | | **12,806** | |
+
+**"12,806" claim = CONFIRMED, no discrepancy.** It equals 2,543 + 10,263 exactly. The raw Sangetsu colorway count (10,532) includes 269 SKUs that appear in more than one pattern; on a unique basis it is 10,263, which is the number `PUBLISH-PREP-063026A.md` uses. (`staging-summary.json` reports 3,107 for the *older* `lilycolor-staging.jsonl` and is stale relative to the freshest merge — the audit uses the freshest `lilycolor-merged-063026A.jsonl` per instruction, hence 2,543.)
+
+---
+
+## 2. Images
+
+| Vendor | Basis | ≥1 image | Zero image | % |
+|---|---|---|---|---|
+| Lilycolor | per SKU (`has_image` / `image_manifest`) | **2,543** | 0 | 100% |
+| Sangetsu | per unique SKU (`sku_images[sku]`) | **9,492** | 771 | 92.5% |
+| **TOTAL** | | **12,035** | 771 | 94.0% |
+
+Lilycolor images come from catalog ZIP manifests (C/P/R kinds) — bytes not yet fetched (`image_bytes_fetched:false`) but URLs/paths are present for 100%. Sangetsu images are direct `wp-content` JPG URLs at the colorway-SKU level; 771 unique SKUs have no image URL.
+
+---
+
+## 3. Specs (material / dimensions / type)
+
+| Vendor | Field basis | Populated | Missing | % |
+|---|---|---|---|---|
+| Lilycolor | `width` + `unit` per SKU (repeat on 1,246) | **2,543** | 0 | 100% |
+| Sangetsu | pattern-level `spec.{width,type,weight,backing}` propagated to SKUs | **906** | 9,357 | 8.8% |
+
+Lilycolor carries `width` (100%), `unit` (100%), and `repeat_tate/yoko` (49%) per SKU — spec-complete. Sangetsu's `spec` block is pattern-level and almost entirely null: only 78 of 622 patterns have any spec field (28 width, 64 type), covering 906 SKUs. **Sangetsu specs are the single biggest content gap.**
+
+---
+
+## 4. Description (non-empty body)
+
+| Vendor | Source | Non-empty | Missing | % |
+|---|---|---|---|---|
+| Lilycolor | `design.description` (local-hybrid enrichment) | **701** | 1,842 | 27.6% |
+| Sangetsu | — no description field in schema — | **0** | 10,263 | 0% |
+
+Lilycolor descriptions are produced by the running enrichment sweep (`_provider: local-hybrid`, `$0 (local)`). **PARTIAL — sweep still writing** (`enrichment-full-063026A.jsonl` + `.sweep.jsonl` mtimes seconds old at snapshot; PIDs 30405/52728/95458/2412 live). Sangetsu has no `overview`/`description` populated (4/622 patterns have any `overview`) and no per-SKU body at all.
+
+---
+
+## 5. Title — Lilycolor EN vs JA-only
+
+| Metric | Count | % |
+|---|---|---|
+| Lilycolor SKUs with an EN title (join to `lilycolor-titles-en-063026A.jsonl`, 687 title rows) | **689** | 27.1% |
+| Lilycolor SKUs still JA-only / untitled | 1,854 | 72.9% |
+
+**PARTIAL — `translate-titles` running** (PID 2412 live, file growing). Titles join by `sku`; the titles file already carries de-JA'd pattern names (e.g. `ブークレ` → `Bouclé`) with the banned word normalized to "Wallcovering" in the suffix. Sangetsu pattern names are already English (`Acappella`, etc.) so no JA→EN title step applies to Sangetsu.
+
+---
+
+## 6. Enrichment coverage (style/color tags + hex) — CLEAN rows only
+
+Consolidated + deduped across all 6 enrichment jsonls (`full/seed/shard0/shard1/sweep/pilot`), last-write-wins, excluding rows with an `error` field or `usable:false`:
+
+| Metric | Count |
+|---|---|
+| Raw enrichment rows read (all files) | 1,559 |
+| Rows with `error` field (dropped) | 175 |
+| Rows `usable:false` (dropped) | 0 |
+| **Unique SKUs with a CLEAN enrichment row** (styles + hex + description) | **706** |
+
+By prefix the clean-enriched set is 645 `LL`, 24 `LIS`, plus small `LW/LV/LMT/LWT/LWA/LLA` — **all Lilycolor; 0 Sangetsu SKUs enriched.** **PARTIAL** — the sweep is mid-run; this number is a snapshot and will grow.
+
+---
+
+## 7. List price present (¥) — LIST, NOT COST
+
+| Vendor | With `list_price_yen` or `m2_price_yen` | % |
+|---|---|---|
+| Lilycolor | **2,543** | 100% |
+| Sangetsu | **0** | 0% |
+
+**⚠ This is Japan LIST price, NOT confirmed DW net cost.** It cannot be used to derive retail (no foreign-list→retail derivation per the gate). It is reported only to show the price *field* is present for Lilycolor; the Activation Gate still fails on cost for 100% of SKUs. Sangetsu has no price field whatsoever.
+
+---
+
+## 8. Gate-ready EXCEPT cost — the headline
+
+Definition: has image **AND** specs **AND** description **AND** (EN title for Lilycolor), missing **ONLY** confirmed net cost.
+
+| Vendor | Gate-ready-except-cost | Ceiling (once sweep completes) |
+|---|---|---|
+| Lilycolor | **320** | up to 2,543 (image/spec/price already 100%; gated on desc + EN-title fill) |
+| Sangetsu | **0** | needs specs (8.8%→) + descriptions (0→) + cost build-out first |
+| **TOTAL** | **320** | |
+
+The 320 are the intersection of {2,543 image} ∩ {2,543 spec} ∩ {701 desc} ∩ {689 EN-title}. Because image/spec/price are already at 100% for Lilycolor, the binding constraints today are description (28%) and EN title (27%) — both being filled by the live sweep. Expect this number to climb materially on the next snapshot.
+
+---
+
+## 9. Gap table (actionable)
+
+| Missing dimension | Vendor | Count | Top example SKUs |
+|---|---|---|---|
+| Description | Sangetsu | 10,263 | AZ52935, AZ52936, AZ52937 (no desc field in schema) |
+| Specs (width/type/weight/backing) | Sangetsu | 9,357 | AZ52935… (pattern spec block null on 544/622 patterns) |
+| Description | Lilycolor | 1,842 | LLA6050, LLA6051, LLA6052, LLA6053 |
+| EN title | Lilycolor | 1,854 | LIS42001, LIS42002, LIS42003, LIS42004 |
+| Image URL | Sangetsu | 771 | (unique SKUs with no `sku_images` entry) |
+| **Confirmed DW net cost** | **BOTH** | **12,806 (100%)** | ALL — the Steve/purchasing blocker |
+| List price field | Sangetsu | 10,263 | (no price field at all — LIST unavailable, unlike Lilycolor) |
+
+**Remediation priority:** (1) Steve/purchasing — confirm DW net cost for Lilycolor (2,543) first, since everything else is nearly done there; (2) let the local enrichment + title sweep finish to lift Lilycolor gate-ready 320→~2,543; (3) Sangetsu needs a spec + description build before it's gateable at all, independent of cost.
+
+---
+
+## Appendix — reproducible one-liners
+
+All counts produced with `python3` reading the raw JSONL (no LLM, no ollama, read-only). Working directory: `onboarding/sangetsu-lilycolor/staging/`.
+
+**Totals / dedup (Sangetsu unique SKUs):**
+```python
+uniq=set()
+for line in open('sangetsu-staging.jsonl'):
+ d=json.loads(line)
+ for s in d.get('colorway_skus') or []: uniq.add(s)
+# len(uniq) == 10263 ; total entries 10532 ; dup entries 269
+```
+
+**Lilycolor coverage (per SKU):**
+```python
+for line in open('lilycolor-merged-063026A.jsonl'):
+ d=json.loads(line)
+ has_img = bool(d.get('has_image')) or (d.get('image_count') or 0)>=1
+ has_spec = bool(d.get('width')) and bool(d.get('unit'))
+ des=d.get('design') or {}
+ has_desc = bool((des.get('description') or '').strip()) or sku in clean_enrich
+ has_en = bool(d.get('title_en')) or sku in en_titles # en_titles from lilycolor-titles-en-063026A.jsonl
+ has_price= bool(d.get('list_price_yen') or d.get('m2_price_yen'))
+ gate_ex_cost = has_img and has_spec and has_desc and has_en # sum == 320
+```
+
+**Enrichment consolidation (clean rows, deduped):**
+```python
+files=['enrichment-full-063026A.jsonl','...seed','...shard0','...shard1','...sweep','enrichment-pilot-063026A.jsonl']
+# drop rows with d.get('error') or d.get('usable') is False; clean = styles and hex and description
+# unique clean SKUs == 706 (all Lilycolor prefixes)
+```
+
+**Sangetsu per-unique-SKU image/spec:**
+```python
+# image: any sku in sku_images with truthy url -> 9492 / 10263
+# spec : pattern spec has any of width/type/weight/backing -> 906 / 10263
+```
+
+**Caveat:** Sections 4, 5, 6, 8 are a live snapshot — enrichment (`enrich-full` PID 30405, `enrich-finish` 52728, `enrich-retry` 95458) and `translate-titles` (PID 2412) were actively writing at generation time. Re-run for a fresher count; the gate-ready-except-cost number only goes up.
diff --git a/onboarding/sangetsu-lilycolor/readiness-063026A.json b/onboarding/sangetsu-lilycolor/readiness-063026A.json
new file mode 100644
index 00000000..b530e3f1
--- /dev/null
+++ b/onboarding/sangetsu-lilycolor/readiness-063026A.json
@@ -0,0 +1,82 @@
+{
+ "audit": "sangetsu-lilycolor-activation-gate-readiness",
+ "tag": "063026A",
+ "generated_at": "2026-07-01",
+ "machine": "Mac2",
+ "read_only": true,
+ "snapshot_partial": true,
+ "partial_note": "enrichment + translate-titles sweep actively writing at generation (PIDs enrich-full 30405, enrich-finish 52728, enrich-retry 95458, translate-titles 2412); description/EN-title/enrichment counts are a floor and will rise.",
+ "headline": {
+ "gate_ready_except_cost_total": 320,
+ "gate_ready_except_cost_by_vendor": { "lilycolor": 320, "sangetsu": 0 },
+ "cost_missing_all_skus": 12806,
+ "cost_note": "staged yen is Japan LIST price, NOT confirmed DW net cost; cost missing for 100%"
+ },
+ "totals": {
+ "claim_12806": "CONFIRMED",
+ "reconciliation": "2543 lilycolor + 10263 sangetsu = 12806",
+ "lilycolor_unique_skus": 2543,
+ "sangetsu_unique_skus": 10263,
+ "sangetsu_colorway_entries_raw": 10532,
+ "sangetsu_cross_pattern_dup_entries": 269,
+ "staging_summary_json_note": "reports 3107 for older lilycolor-staging.jsonl; stale vs freshest merge (2543)"
+ },
+ "vendors": {
+ "lilycolor": {
+ "prefix_proposed": "DWLC",
+ "unique_skus": 2543,
+ "images_ge1": 2543,
+ "images_pct": 100.0,
+ "specs_populated": 2543,
+ "specs_pct": 100.0,
+ "description_nonempty": 701,
+ "description_pct": 27.6,
+ "en_title": 689,
+ "en_title_pct": 27.1,
+ "en_title_missing": 1854,
+ "enrichment_clean": 706,
+ "list_price_present": 2543,
+ "list_price_is_cost": false,
+ "gate_ready_except_cost": 320
+ },
+ "sangetsu": {
+ "prefix_proposed": "DWGO",
+ "unique_skus": 10263,
+ "colorway_entries_raw": 10532,
+ "images_ge1": 9492,
+ "images_missing": 771,
+ "images_pct": 92.5,
+ "specs_populated": 906,
+ "specs_pct": 8.8,
+ "description_nonempty": 0,
+ "description_note": "no description field in schema; overview populated on 4/622 patterns",
+ "en_title": "n/a",
+ "en_title_note": "pattern names already English (e.g. Acappella)",
+ "enrichment_clean": 0,
+ "list_price_present": 0,
+ "list_price_note": "no price field at all",
+ "gate_ready_except_cost": 0
+ }
+ },
+ "enrichment_consolidation": {
+ "files": ["enrichment-full-063026A.jsonl", "enrichment-full-063026A.seed.jsonl", "enrichment-full-063026A.shard0.jsonl", "enrichment-full-063026A.shard1.jsonl", "enrichment-full-063026A.sweep.jsonl", "enrichment-pilot-063026A.jsonl"],
+ "raw_rows_read": 1559,
+ "dropped_error_field": 175,
+ "dropped_usable_false": 0,
+ "unique_clean_skus": 706,
+ "all_lilycolor": true,
+ "sangetsu_enriched": 0
+ },
+ "gap_table": [
+ { "dimension": "description", "vendor": "sangetsu", "count": 10263, "examples": ["AZ52935", "AZ52936", "AZ52937"] },
+ { "dimension": "specs", "vendor": "sangetsu", "count": 9357, "examples": ["AZ52935"] },
+ { "dimension": "description", "vendor": "lilycolor", "count": 1842, "examples": ["LLA6050", "LLA6051", "LLA6052"] },
+ { "dimension": "en_title", "vendor": "lilycolor", "count": 1854, "examples": ["LIS42001", "LIS42002", "LIS42003"] },
+ { "dimension": "image", "vendor": "sangetsu", "count": 771 },
+ { "dimension": "net_cost", "vendor": "both", "count": 12806 },
+ { "dimension": "list_price_field", "vendor": "sangetsu", "count": 10263 }
+ ],
+ "gated_followups_for_steve": [
+ "Confirm DW net cost (all 12806; Lilycolor 2543 nearest-term). Sole activation blocker."
+ ]
+}
← 325fa91a DWGO approved for Sangetsu/Goodrich: lock prefix in publish-
·
back to Designer Wallcoverings
·
auto-save: 2026-07-01T12:42:45 (5 files) — pending-approval/ 205ca41f →