[object Object]

← back to Sanderson Onboard

TK-10873: final handoff / decision package — consolidates 9 cycles into one gated-decision doc for Steve

42a6e25e8bb6145816f8dec656e137145e7f4679 · 2026-08-30 23:32:56 -0700 · Steve Abrams

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit 42a6e25e8bb6145816f8dec656e137145e7f4679
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Sun Aug 30 23:32:56 2026 -0700

    TK-10873: final handoff / decision package — consolidates 9 cycles into one gated-decision doc for Steve
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 tk10873/HANDOFF.md | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/tk10873/HANDOFF.md b/tk10873/HANDOFF.md
new file mode 100644
index 0000000..dbe348d
--- /dev/null
+++ b/tk10873/HANDOFF.md
@@ -0,0 +1,44 @@
+# TK-10873 Zoffany Option-A — final handoff / decision package
+
+**Status:** autonomous work COMPLETE + verified. Everything below is GATED on Steve. No
+Shopify/dw_unified writes were made. All artifacts committed to `sanderson-onboard/tk10873/`
++ ledgered (undo = `git revert <sha>`). 93 tests green.
+
+## What this workstream did (9 cycles)
+Started as "sample-add + price draft" for the 331 ACTIVE Zoffany products. Sample-add turned
+out to be a no-op (all 331 already have the $4.25 sample). The real work became **price
+integrity**, and it surfaced a major error.
+
+## The reprice decision (v3 = `zoffany_optionA_draft_v3.json`)
+| bucket | count | what it is | action needed |
+|---|---|---|---|
+| **REPRICE (ready)** | **277** | web-verified real US retail (239 from the S1 feed + 38 trade-derived, all spot-confirmed) | **APPROVE the memo** → live reprice |
+| HELD_UNVERIFIED | 51 | no feed price; **harvested** in cycles 6–8 → 45 have proposed US prices (`held_price_proposals.json`), incl. the higher-tier Palladio $494–530 | rule on promoting the 45 proposals |
+| HELD_NEEDS_PRICE | 3 | 313114 (also missing-sellable), ZFOW312941, ZFOW312943 (source conflict) | 313114 mapping confirm (DM M-01413 unanswered) |
+
+## The headline finding
+The draft originally sourced `zoffany_catalog.price_retail`, which stored **UK £-prices as USD**
+— **underpricing 209 products by ~2.5×**. Caught by cross-validating against the independent S1
+feed and **web-verifying against real Zoffany US retail** (e.g. Romey's Garden official US $494 =
+feed $494; Hawksmoor $465 vs $562; Malmaison $320 vs $354). Corrected in v3.
+
+## Data-integrity flags (for the pricing owner)
+- **`ZAQF322696` "Desert Flower II" is a FABRIC** (Antiquary collection, $133/yд) misclassified
+  as a wallpaper roll → RECLASSIFY, do not reprice as wallpaper.
+- 5 wide-width **murals** (Phaedra, Precarious Pangolins, Verdure) are per-metre/yard — no clean
+  per-roll price; need a unit decision before reprice.
+
+## De-risking finding (cycle 9)
+The GBP-as-USD bug is **Zoffany-specific, NOT fleet-wide** — Harlequin's catalog matches its S1
+feed 726/726 exactly. Sibling brands don't need the correction. (Morris uncheckable — key mismatch.)
+
+## The gated decisions waiting on Steve
+1. **APPROVE** `pending-approval/TK-10873-zoffany-optionA-livepublish-2026-08-30.md` → the 277 reprice.
+2. Rule on promoting the 45 harvested proposals (firm US prices) to reprice-eligible.
+3. Reconcile the ZAQF fabric-misclass + decide the 5 murals' unit.
+4. Confirm the 313114 ≡ ZOW0146-01 mapping (unblocks 1 held row) + the 3 needs-price.
+
+## Tooling (all read-only / dry-run; live reprice is a separate gated `!`-run)
+build/validate/test the draft · `reprice_runbook.mjs` (dry-run, no send path) · `reprice_sanity.mjs`
+(gate) · `cross_validate_feed.mjs` · `reconcile_from_feed.mjs` · `promote_trade_verified.mjs` ·
+`build_harvest_proposals.mjs` · `cross_brand_gbp_check.md`.

← 7c70057 TK-10873 cycle9: read-only cross-brand diagnostic — the GBP-  ·  back to Sanderson Onboard  ·  chore: lint (0 fixes) + refactor (dedup isVerified in reconc c27e3d8 →