← back to Dw Measure To Cart
Appendix A: TK-10232 independent verification — live-theme metafield fallback chains, role-spanning pilot set (54" wide + 79" repeat + yard goods), strip-method vs NPH sq-ft shortcut deltas, York calculator citation
c1e6f64e091b2fb2853f5e0d1d994a336b265c1b · 2026-08-04 22:42:01 -0700 · Steve
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Files touched
Diff
commit c1e6f64e091b2fb2853f5e0d1d994a336b265c1b
Author: Steve <steve@designerwallcoverings.com>
Date: Tue Aug 4 22:42:01 2026 -0700
Appendix A: TK-10232 independent verification — live-theme metafield fallback chains, role-spanning pilot set (54" wide + 79" repeat + yard goods), strip-method vs NPH sq-ft shortcut deltas, York calculator citation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---
SPEC.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/SPEC.md b/SPEC.md
index 74ae21c..18cfe22 100644
--- a/SPEC.md
+++ b/SPEC.md
@@ -75,3 +75,70 @@ Wall A = 12ft × 9ft flat wall. Wall B = 14×16ft room, 8ft ceilings, 1 door + 1
3. Deep-link generator (live Admin API reads) for the 5 pilots — ungated dry-run.
4. PDP button on the 5 pilot SKUs only (theme change) — **Steve gate**.
5. Measure → cart permalink CTA — **Steve gate** (customer-facing).
+
+---
+
+# Appendix A — Independent verification pass (TK-10232, 2026-08-04)
+
+A second read-only pass ran in parallel under TK-10232 and converged on the same architecture
+(strip method over real metafields; NPH sq-ft shortcut demoted to fallback). Deltas + extra
+evidence worth keeping:
+
+## A1. NPH handoff data shape (device → page), for the record
+
+`RoomMeasure.measure()` (public/js/room-measure.js) resolves
+`{ width_ft, height_ft, method: 'webxr'|'gyro' }` — **feet**, rounded to 0.5 ft, client-side only;
+gyro (iPhone) returns `width_ft: null` (manual-width fallback). Multi-wall calc input
+(`measure-kit.js`): `wall = { width_ft, height_ft, deductions:[{w_ft,h_ft}] }`. The `/book` flow's
+`lib/room-captures.js` sanitizer already carries a per-room wallpaper sub-object
+`{ image_url, width_in, repeat_in, match_type:'straight'|'half_drop' }` — the exact product params
+the strip method needs, with **inches** as the product-side unit (matches the §4 deep-link params).
+
+## A2. PDP-render fallback chains (live theme, authoritative for what customers see)
+
+`theme-LIVE-pull-20260728-colorbar/snippets/product-description-meta.liquid` (live theme 144396058675):
+
+```liquid
+width = custom.width → specs.width → global.Width → global.width
+repeat = custom.pattern_repeat → custom.repeat → specs.pattern_repeat
+ → specs.repeat_v → dwc.repeat → global.repeat → global['Vert-Rpt']
+```
+
+Note vs §1's coverage-ordered list: the THEME consults `specs.*` before `global.*` and never
+`dwc.width` — the build's extractor should implement the theme's chain first (so the kit always
+agrees with the number printed on the PDP), then extend with the §1 coverage keys as backfill.
+Mirror value shape: each key holds `{"type":"single_line_text_field","value":"..."}` — always
+free text. Double-roll packaging is stated verbatim in `custom.unit_of_measure`, e.g. Thibaut:
+"Priced per single roll — packaged in double rolls only. Single roll: 27 in × 4.5 yd (4.11 m).
+Double roll: 27 in × 9 yd (8.22 m)." — confirms D/R = 2× S/R.
+
+## A3. Second pilot set (role-spanning) — strip method vs the shipped NPH sq-ft shortcut
+
+Wall: 12 ft × 8 ft (144" × 96"), straight match, 4" trim (drop rounded up to repeat multiple).
+
+| Role | SKU (mfr) | Vendor | W | V-rpt | Unit len | Strip method | NPH shortcut (28/57 ft², +20%) | Verdict |
+|---|---|---|---|---|---|---|---|---|
+| Double-roll line | DWTT-70021 (T16253) "Emily" | Thibaut | 27" | 27" | S/R 13.5 ft, D/R 27 ft | drop 108"; 6 strips; 3/DR → **2 D/R** (4 singles) | 5 singles → **3 D/R** | ⚠️ shortcut over-buys 1 D/R |
+| Single roll (Euro bolt) | DWKK-133288 (100/10047.CS.0) | Cole & Son | 20.5" | 21.1" | 33 ft bolt | drop 105.5"; 8 strips; 3/bolt → **3 bolts** | **3 rolls** | ✅ match |
+| Wide-width 54" | DWKK-128734 (W3649-16) | Kravet commercial | 54" | 9" | yard goods | drop 108"=3 yd; 3 strips → **9 lin yd** | n/a — **no yard-goods format in measure-kit.js** | ⚠️ gap (same as §5) |
+| Large repeat | handle `cloud-9-grey-on-pearl-dwtt-73109` | Thibaut | 27" | **79"** | S/R 13.5 ft | drop 158"; 6 strips; 2/DR → **3 D/R** (6 singles) | 5 singles → 3 D/R | ✅ D/R count matches, but singles differ (6 vs 5) — even-rounding masked the shortcut's under-count |
+| Plain / no repeat | DWJP-10936 (3533) Linen Weaves | Phillip Jeffries | 36" pre-trimmed | None | yard goods | drop 100"; 4 strips → **11.2 → 12 lin yd** (matches catalog "12 Yards") | n/a — yard-goods gap | ⚠️ gap |
+
+Same conclusion as §3 from an independent SKU set: the flat sq-ft constant diverges exactly where
+the product's real geometry bites (tall-drop-efficient formats, giant repeats, yard goods).
+
+## A4. Public-methodology citation (checked, $0)
+
+**yorkwallcoverings.com/pages/wallpaper-calculator** (fetched 2026-08-04): "Wallpaper is packaged in
+bolts. 1 Bolt = 56 FT² {20.5-in × 33-ft}. 1 Bolt covers about 6-ft of wall {up to 9-ft ceilings} …
+larger pattern repeats will require more wallpaper rolls. Deduct 1 bolt for every 4 ordinary size
+door or window." Their "≈6 lf of wall per bolt" is the strip method (4 drops × 20.5" = 6.8 lf at
+8-ft ceilings; 3 drops = 5.1 lf at 9-ft), and their 12×12-room/8-ft chart value (7 bolts) matches
+§2/§A3 arithmetic. Pilot #2 above (Cole & Son 20.5"×33 ft = York's exact bolt format) computes
+3 bolts for 12 lf of wall — consistent with their chart's coverage rate.
+
+## A5. Sample upsell datum
+
+`price` on the Thibaut pilot's sample variant row = **$3.50** in the mirror vs the $4.25 standing
+memo price — mirror scalar-price staleness (standing memory) reconfirmed; the $4.25 sample variant
+id must be read live at deep-link-generation time.
← 81234b3 Measure-to-Cart Phase-0 read-only spec: strip-method roll ma
·
back to Dw Measure To Cart
·
(newest)