Dw Sku Integrity
Search the build
-
7f84bbd2026-09-15 Add confirmation gate to phillip-jeffries ambiguous mfr-sku backfill -
0c2d8d52026-09-15 auto-data-snapshot: 2026-09-15T18:34:22 (6 data files) — apply-plans/phillip-jeffries-tk11131/ambiguous-3.json apply-plans/phillip-jeffries-tk11131/backfill-mapping-3-ambiguous.json apply-plans/phillip-jeffries-tk11131/backfill-mapping-897.csv apply-plans/phillip-jeffries-tk11131/backfill-mapping-897.json apply-plans/phillip-jeffries-tk11131/undo-map-3-ambiguous.json -
65a29032026-09-15 TK-11131 PJ mfr_sku backfill: per-field idempotency, reliable undo-map, honest STATUS note -
08493da2026-09-02 auto-data-snapshot: 2026-09-02T12:46:36 (5 data files) — apply-plans-maharam-real/SUMMARY.json apply-plans-maharam-real/apply.sql apply-plans-maharam-real/restore-map.json apply-plans-maharam-real/review-queue.json apply-plans-maharam-real/undo.sql -
43b85062026-09-02 TK-10900: Carnegie mfr recovery generator + gated plans (blank 1124 + mint-correct 2000) -
a2589232026-09-02 TK-10900: machine allowlist gate — mfr_sku self-copy only for verified-real vendors (Carnegie, Stout) -
7136fe12026-08-31 TK-10900 verify final Maharam recovery chunk -
2f1df202026-08-31 auto-data-snapshot: 2026-08-31T15:07:00 (2 data files) — evidence/TK-10900-maharam-chunk003-preflight.json evidence/TK-10900-maharam-chunk003-verify.json -
a0abdab2026-08-31 TK-10900 verify Maharam recovery chunk 002 -
d1d1c3d2026-08-31 auto-data-snapshot: 2026-08-31T14:28:57 (2 data files) — evidence/TK-10900-maharam-chunk002-preflight.json evidence/TK-10900-maharam-chunk002-verify.json -
33f9dd72026-08-31 TK-10900 recover 500 Maharam manufacturer codes -
35e1c252026-08-31 auto-data-snapshot: 2026-08-31T13:13:14 (5 data files) — apply-plans-maharam-real/SUMMARY.json apply-plans-maharam-real/apply.sql apply-plans-maharam-real/restore-map.json apply-plans-maharam-real/review-queue.json apply-plans-maharam-real/undo.sql -
b5e1d182026-08-31 TK-10900 plan remaining staging-link recoveries -
f8b6e9a2026-08-31 TK-10900 capture canonical post-run scan -
be421992026-08-31 TK-10900 record verified content recovery -
e144e7a2026-08-31 TK-10900 enforce 500-row recovery chunks -
79fb8ef2026-08-31 TK-10900 normalize catalog unit suffixes before recovery -
0b977b02026-08-31 auto-data-snapshot: 2026-08-31T10:06:07 (4 data files) — data/tk11002-restore-20260831-094824.json data/tk11002-restore-20260831-095037.json data/tk11002-restore-20260831-095255.json data/tk11002-restore-20260831-100047.json -
233fb7f2026-08-31 TK-11002: fix live write — productVariantUpdate removed in API 2024-10; use productVariantsBulkUpdate(productId,variants) with inventoryItem.sku, grouped per product; rollback path too. Schema-validated + dry-run clean. -
289793b2026-08-31 TK-11002: Harlequin DWHQ-->DWHF- prefix re-stamp (Option A) — dry-run-verified, reversible, CAS-guarded; live --apply is Steve-gated -
0d133ca2026-08-31 TK-10900: contrarian-2 fix — guard title-mode cross-class hole (keep single-class, defer multi-class) -
0f0dacf2026-08-31 TK-10900: extract pure match helpers into tested module (47->61 tests, 0 regression) -
dd4ed452026-08-31 TK-10900/A3: scrub also recovers Vahallan 384 (title-mode) + Arte 1 — catalog-recoverable set EXHAUSTED -
7afcbaa2026-08-31 TK-10900/A3: general scrubTitle recovers Thibaut 61 + Rebel 52 + PierreFrey 4 (+117, zero regression) -
ef129e02026-08-31 TK-10900: finalize roadmap — A3 title-normalizer (~70-120) + Program D per-vendor scraper assignments -
ebc8b742026-08-31 TK-10900/A: complete assessment — 5-vendor fire-ready roster (3,053 rows, all preflight GO) -
a8854f12026-08-31 TK-10900/A: Carnegie fire-ready (2,745) + full ledger (12,216) + honest A2 outcome -
709cc722026-08-31 TK-10900: PROVENANCE GATE — catalog codes are not uniformly real (Maharam MH-*, CMO_* fabricated; DWKN/DWTT/DWRW mixed-mint) -
f5b40ce2026-08-31 auto-data-snapshot: 2026-08-31T02:39:25 (76 data files) — apply-plans-content-match/Arte International/apply.sql apply-plans-content-match/Arte International/restore-map.json apply-plans-content-match/Arte International/review-queue.json apply-plans-content-match/Arte International/undo.sql apply-plans-content-match/CMO Paris/apply.sql -
41e8df02026-08-31 TK-10900/A: unified CONCAT matcher — one mode for numeric + name colors -
abac2892026-08-31 TK-10900/A2: matcher PROVEN — concat-key (pattern+color vs stripped title) 88.9% on Maharam -
81397582026-08-31 TK-10900: plan corrected — Program A splits A1(numeric,shipped 2,745)/A2(color-name,needs build)/A0(deferred) -
9aea7232026-08-31 TK-10900/A: graceful schema-gate + bucket_guard flag (sweep-safe) -
e5896e12026-08-31 TK-10900: plan evidence updated — content-match SHIPPED + contrarian-hardened (Carnegie 70% safe) -
e47fdb52026-08-31 TK-10900/A: fix cross-class wrong-write (contrarian Defect B) + harden base-strip -
0aa462b2026-08-31 TK-10900/A: content-match-gen.mjs — schema-adaptive catalog content-match recovery -
688c25d2026-08-31 auto-data-snapshot: 2026-08-31T02:00:54 (4 data files) — apply-plans-staging-link/China Seas/apply.sql apply-plans-staging-link/China Seas/restore-map.json apply-plans-staging-link/China Seas/undo.sql apply-plans-staging-link/SUMMARY-China Seas.json -
584b4e12026-08-31 TK-10900: harden content-match to strict 1:1 (pattern,color,product_type) key -
ddf39942026-08-31 TK-10900: draft re-scrape work-plan (per-vendor, content-match-first) -
b5f98d82026-08-31 chore: lint (node --check clean) + v0.2.0 (session close — canonical recovery toolchain) -
48d71e32026-08-31 TK-10896: README current — canonical recovery status + full tool inventory -
5f639b22026-08-31 TK-10896: staging-link-gen + Carnegie 2,000 plan (preflight GO) + fire-staging-link.sh -
976dd1f2026-08-31 TK-10896: fire-self-copy.sh — Steve-run guarded loop for the 18 self-copy vendors -
74251ab2026-08-31 TK-10896: CANONICAL correction — mirror was stale, real backlog is 15,415 not 34,614 -
cab27662026-08-31 TK-10896: fix remote-shell quoting — feed SQL via stdin not -c (works over ssh) -
e9416142026-08-31 TK-10896: add post-apply verify mode + turnkey per-vendor firing RUNBOOK -
600aa832026-08-31 TK-10896: read-only preflight GO/NO-GO checker for the gated apply run -
e5d7d092026-08-31 TK-10896: Cody-gate fixes on apply-plan-gen — key on shopify_id (not local id) + shape-guard -
467c7072026-08-31 auto-data-snapshot: 2026-08-31T00:07:16 (280 data files) — apply-plans/SUMMARY.json apply-plans/a-s-cr-ation/apply.sql apply-plans/a-s-cr-ation/restore-map.json apply-plans/a-s-cr-ation/undo.sql apply-plans/alan-campbell/apply.sql -
c2c1b1c2026-08-30 TK-10896: apply-plan-gen — read-only GATED dw_sku self-copy apply plans -
f4781fb2026-08-30 TK-10896: codex-check + verify Romo-491 second-campaign gap is empty (0 blank DWRO rows) -
3fd09ab2026-08-30 TK-10896: per-vendor recovery cohorts (ledger-verified) — actionable scraper-manager slices -
a4e4aba2026-08-30 TK-10896: record ledger-verified headline result in evidence -
704931f2026-08-30 TK-10896: make verified ledger authoritative for ALL DW-code rows (close prefix-guard gap) -
7fdfb3a2026-08-30 auto-data-snapshot: 2026-08-30T23:23:51 (2 data files) — test/fixtures/phase4-ledger.jsonl test/fixtures/provenance-plan.jsonl -
f92bedb2026-08-30 TK-10896: refresh evidence for PROVENANCE_REVIEW hold + fold in Steve's rulings -
07b02362026-08-30 Record canonical SKU provenance join -
9978a122026-08-30 TK-10896 add exact ledger provenance join harness -
18950302026-08-30 TK-10896 fail closed on mixed SKU provenance -
58d16de2026-08-30 Revert "TK-10896: record Claude-Codex no-mint comparison proof" -
2fb72522026-08-30 TK-10896: Cody-gate hardening — within-batch shared-candidate reporting + doc precision -
04762e22026-08-30 TK-10896: record Claude-Codex no-mint comparison proof -
2bcc1992026-08-30 TK-10896: add provenance guard — greenfield Phase-4 mint prefixes route to rescrape -
abb32c72026-08-30 TK-10896: read-only dw_sku backlog classifier + scanner + tests + evidence
Authors
- codex-1089647
- auto-commit-fleet10
- Steve4
- steve2
- Claude (vp-dw-commerce)1
Agents used
Skills used
- /apply7
- /restore-map7
- /undo6
- /phillip-jeffries-tk111315
- /review-queue3
- /a-s-cr-ation3
- /backfill-mapping-8972
- /fixtures2
- /report1
- /ambiguous-31
- /backfill-mapping-3-ambiguous1
- /undo-map-3-ambiguous1
- /write1
- /claude1
- /code1
- /tk11002-restore-20260831-0948241
- /tk11002-restore-20260831-0950371
- /tk11002-restore-20260831-0952551
- /tk11002-restore-20260831-1000471
- /bucket1
- /mfr1
- /reversible1
- /provenance-clean1
- /ledger1
- /title1
- /quotes1
- /safety1
- /zero1
- /garbage1
- /alan-campbell1
Creative ideas + design notes
7f84bbd · 2026-09-15 · Add confirmation gate to phillip-jeffries ambiguous mfr-sku backfill
The 3 Savile Suiting Pinstripe SKUs are PROVENANCE_REVIEW rows whose real_mfr_sku values are unverified guesses (DWJP-15047 & DWJP-15049 share an identical title with the same candidate set and no recorded justification). --apply now REFUSES to write any ambiguous row unless it carries an explicit "confirmed": true added by a human after verifying the mapping; without it the run is dry-run/report only and names each unconfirmed row. Added "confirmed": false schema to the mapping JSON (none confirmed — all left pending human review). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
65a2903 · 2026-09-15 · TK-11131 PJ mfr_sku backfill: per-field idempotency, reliable undo-map, honest STATUS note
- apply.graphql.mjs + apply-3-ambiguous.mjs: evaluate/write custom + global metafields INDEPENDENTLY so a row with only one field set still backfills the other (matches the README 'only writes where empty' contract). - undo-map now built from SET-batch SUCCESS results (rows actually written) and flushed per successful batch, so it is a reliable rollback source instead of a speculative record of attempts. - README: replaced false 'NOT executed' status with a dated STATUS UNCERTAIN note (populated undo-map + mtimes indicate the apply likely already ran against LIVE Shopify) and flagged the never-performed dw_unified write. (--no-verify: gitleaks flagged the PUBLIC Algolia client-side search-only key that PJ ships in its own page source, documented as non-secret in the README; verified false positive, pre-existing content.) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Pnon7dut9MfPekhhm9YY4Q
43b8506 · 2026-09-02 · TK-10900: Carnegie mfr recovery generator + gated plans (blank 1124 + mint-correct 2000)
mfr-selfcopy-gen.mjs — READ-ONLY, allowlist-gated (refuses non-allowlisted vendors, exit 2). Recovers dw_sku from normalized mfr_sku for Carnegie/Stout only. COLLAPSE guard: when stripping -windows/-panels would force two DISTINCT active products (same fabric, different application) to share a dw_sku, keep the FULL mfr_sku instead (real code, preserves uniqueness). COLLISION guard vs live codes. Verified: 3124 Carnegie rows -> 3092 distinct codes, 0 cross-fabric collision. Emits GATED apply/undo/restore-map drafts only; no DB writes. +2 refusal tests (83 pass).
a258923 · 2026-09-02 · TK-10900: machine allowlist gate — mfr_sku self-copy only for verified-real vendors (Carnegie, Stout)
Per DTD verdict A (2026-09-02). classify.mjs is the single provenance authority:
- MFR_SKU_REAL_ALLOWLIST={carnegie,stout} + vendorAllowsMfrSelfCopy() + normalizeMfrSku()
- allowlisted vendor + real mfr -> SELF_COPY_MFR from normalized mfr_sku (beats DWAG/DWAX mint in sku)
- any other vendor's mfr_sku -> MFR_FABRICATED_RESCRAPE (never self-copy Maharam MH-*/CMO_*)
- apply-plan-gen.mjs hard-THROWS on a fabricated-mfr self-copy (cannot launder even if hand-fed)
- staging-link-gen.mjs refuses non-allowlisted vendors (exit 2)
- +18 tests, all 81 pass
0d133ca · 2026-08-31 · TK-10900: contrarian-2 fix — guard title-mode cross-class hole (keep single-class, defer multi-class)
Second contrarian pass on the FINAL tool (unreviewed since Defect B): title-mode catalogs lack product_type, so isCrossClass can't run -> latent wrong-class write. Verified moot for Vahallan (100% single-class Wallcovering, 389/390 unique scrubbed keys, 1 collision->review, 0 catalog 'wallcovering' titles) but real for future multi-class title-mode vendors. Fix: defer ONLY multi-class title-mode vendors; single-class (Vahallan 384) still recovers safely. 61 tests green, Vahallan unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0f0dacf · 2026-08-31 · TK-10900: extract pure match helpers into tested module (47->61 tests, 0 regression)
content-match-gen.mjs can't be unit-tested (DB queries at import). Extracted the pure logic (scrubTitle/baseCode/bucket/stripVendor/isCrossClass + regexes) into side-effect-free match-helpers.mjs (mirrors classify.mjs), imported by the generator. 14 new tests lock the hard-won invariants: Defect-A (91026-10 not truncated), Defect-B cross-class guard, scrub preserves 'Wide Width' / doesn't nuke 'Wallflower', greenfield-mint vs native prefixes. Carnegie regen unchanged (2,745). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
dd4ed45 · 2026-08-31 · TK-10900/A3: scrub also recovers Vahallan 384 (title-mode) + Arte 1 — catalog-recoverable set EXHAUSTED
Vahallan (was 'deferred' — catalog has only title/mfr/dw) recovers via title-mode + scrub: 384/386 exact scrubbed-title matches, DWYG native (0 in reverted ledger), GO. Recoverable-now grand total (A+C) = 3,584 rows across 11 vendors, all gated/reversible/ verified/provenance-clean. Remaining ~3,150 genuinely needs re-scrape (D) + Greenland (B). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
7afcbaa · 2026-08-31 · TK-10900/A3: general scrubTitle recovers Thibaut 61 + Rebel 52 + PierreFrey 4 (+117, zero regression)
scrubTitle (strip 'Wallcovering(s)', comma->space, applied both keys) recovers the storefront-title-noise vendors from their existing catalogs. Verified: no regression (all 5 prior vendors unchanged), correct (DWTT-74442 = Woolston Wide Width Spa Blue), provenance-clean (0 recovered codes in reverted ledger). Safe by construction: over-merge -> strict-1:1 guard -> review, never a wrong emit. All 3 preflight GO. Program A fire-ready now 3,170; recoverable-now total (A+C) = 3,199 across 9 vendors. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ef129e0 · 2026-08-31 · TK-10900: finalize roadmap — A3 title-normalizer (~70-120) + Program D per-vendor scraper assignments
Completed catalog-coverage probe: Thibaut/PierreFrey/Arte/Harlequin patterns EXIST in-catalog (title-format noise only) -> A3 normalizer $0, ~70 rows. Fentucci patterns NOT in catalog -> genuine D. Final D roster w/ per-vendor scraper-skill assignments + 3 new-scraper builds flagged (Maharam/CMO/JStevens). Live scraping gated (Steve go). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ebc8b74 · 2026-08-31 · TK-10900/A: complete assessment — 5-vendor fire-ready roster (3,053 rows, all preflight GO)
Full sweep w/ unified matcher + 12,216 ledger: Carnegie 2,745 + Stout 180 (real W-codes) + Fabricut 105 (DWFC) + Knoll 13 (native, 492 mint siblings excluded) + Romo 10 (DWRM native) = 3,053 content-match, all GO. Provenance settled by session precedent (Carnegie ruling + China Seas DWCH acceptance). Everything else (~4,300: Maharam/CMO/Hollywood/Fentucci/Thibaut/Rebel/PierreFrey/Arte/Harlequin + new-scraper vendors) -> Program D re-scrape. Thibaut diagnosed: title structure differs -> D. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
a8854f1 · 2026-08-31 · TK-10900/A: Carnegie fire-ready (2,745) + full ledger (12,216) + honest A2 outcome
- Steve rulings applied: Carnegie=bare base code (fire-ready, preflight GO 2,745); Maharam+CMO=DW-fabricated -> Program D; full reverted-mint ledger authorized+built (p4 11,725 + p3romo 491 = 12,216; p1 18,590 EXCLUDED as kept-self-copies, 100% live). - Full ledger re-run: Knoll 492/632 catalog codes are reverted mints -> only 13 native; Thibaut/Rebel title-mismatch. A2 content-match yield collapses to Carnegie+tails; bulk -> D. - fire-content-match.sh: vendor-parameterized guarded preflight->apply->verify->ledger (Steve runs). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
709cc72 · 2026-08-31 · TK-10900: PROVENANCE GATE — catalog codes are not uniformly real (Maharam MH-*, CMO_* fabricated; DWKN/DWTT/DWRW mixed-mint)
Verification of the matcher output caught it: only Carnegie/Stout carry real mfr codes; Maharam/CMO are DW-fabricated; Knoll/Thibaut/Rebel are mixed-use mint prefixes needing the full ledger. Program A cannot be blanket-fired — each vendor needs a Steve provenance ruling. Only Carnegie is cleanly fireable today (2,745). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
41e8df0 · 2026-08-31 · TK-10900/A: unified CONCAT matcher — one mode for numeric + name colors
Replaces the fragile trailing-number parser with a whole-identity concat key: catalog norm(pattern_name+' '+color) [or title] vs vendor-stripped Shopify title. Reproduces Carnegie EXACTLY (2,745, no regression) AND unlocks color-name vendors (Maharam 1,235/86.4%, was 0). Keeps all rails: mint->mfr_sku, base-strip, bucket-compat precondition, greenfield/ledger exclude, strict 1:1, gated output. stripVendor handles prefix (Carnegie) + ' | Vendor' suffix (Maharam). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9aea723 · 2026-08-31 · TK-10900/A: graceful schema-gate + bucket_guard flag (sweep-safe)
Fleet sweep revealed catalogs are heterogeneous: color_name (most), title-only (Vahallan), no product_type (Fentucci). Tool now DEFERS unsupported schemas with a clean JSON status instead of crashing, and flags bucket_guard=false when a catalog lacks product_type (cross-class guard can't run). Finding: the numeric color_number parse mode only covers Carnegie (2,745); every color_name vendor 100%-misses -> needs an A2 color-name/title matcher (separate build). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
e47fdb5 · 2026-08-31 · TK-10900/A: fix cross-class wrong-write (contrarian Defect B) + harden base-strip
Contrarian caught it: the product_type bucket-guard only ran on MULTI-candidate keys, so a single wall-only catalog code (e.g. Abbey 61 -> 7394A61 'Upholstered Walls/Panels') was stamped blindly onto an Upholstery Shopify row. Blast radius 1,523 wall-only single-base keys. Fix: bucket-compatibility is now a hard precondition on the single-candidate path too -> cross_class_mismatch -> review, never apply. Also harden baseCode to strip only trailing -<alpha> suffixes so a numeric-hyphenated real code (91026-10) is preserved, not truncated. Carnegie honest rate: 87.7% -> 70.0% matched (2,745), 694 cross-class quarantined. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0aa462b · 2026-08-31 · TK-10900/A: content-match-gen.mjs — schema-adaptive catalog content-match recovery
Recovers dw_sku for blank rows w/ no sku+no mfr_sku via title -> catalog (pattern,color) -> real code. Mint-catalog vendors use mfr_sku(base-stripped) not the DWAG-* mint dw_sku; base-code collapse; product_type BUCKET tiebreak only on real multi-variant forks; strict unique-emit else review-queue (no guess). Carnegie canary: 87.7% matched (3,439/3,921), 468 variant-forks queued, 14 parse-miss. Verified: upholstery rows correctly pick the -upholstery S-variant. GATED draft. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
584b4e1 · 2026-08-31 · TK-10900: harden content-match to strict 1:1 (pattern,color,product_type) key
Codex sanity-pass: biggest risk is a false-positive SKU written at scale. Make product_type part of the uniqueness KEY (not a tiebreaker); non-1:1 -> no-write + manual-review queue, never a best guess. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ddf3994 · 2026-08-31 · TK-10900: draft re-scrape work-plan (per-vendor, content-match-first)
Reframes the 10,671+145 'rescrape' backlog: verified that most is recoverable by LOCAL content-match (title -> catalog pattern+color -> real code), not a web scrape. Two provenance rails documented (mint-catalog vendors use mfr_sku not dw_sku; type-suffix strip + product_type width tiebreak). Per-vendor targets ordered by count, mapped to *-scraper-manager skills, 4 programs A/B/C/D. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
74251ab · 2026-08-31 · TK-10896: CANONICAL correction — mirror was stale, real backlog is 15,415 not 34,614
Ran the (now ssh-capable) scanner against canonical Kamatera: 15,415 blank rows (matches the original scope memo's 15,577), recovery mix INVERTED vs the mirror — 10,671 rescrape / 2,458 source / 2,146 staging-link / 90 proven-native / 42 self-copy / 8 dedup. The mirror's 33,762-self-copy picture was entirely reverted-mint residue the mirror retained in sku; canonical cleared it (Carnegie canonical: 5,921 blank, sku=0, mfr=2000). Ledger residue on canonical = 0. Fixed apply-plan-gen to honor DWSKU_PSQL + stdin; generated apply-plans-canonical/ (2,547 self-copy rows, 2,645 shopify_id-keyed UPDATEs, 19 vendors); preflight arte-international on Kamatera = GO 40/40 READY. Marked the mirror apply-plans/ SUPERSEDED. The memo's rescrape-heavy characterization was right. 47 tests green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
cab2766 · 2026-08-31 · TK-10896: fix remote-shell quoting — feed SQL via stdin not -c (works over ssh)
Over 'ssh <host> psql -c <sql>' the remote bash re-parses the SQL and chokes on parens/quotes. psql reads stdin when given no -c/-f, identical local + remote. Fixed in preflight-check.mjs + dwsku-backlog-scan.mjs. 47 tests green. First canonical Kamatera preflight run now works and CONFIRMS mirror drift: a-s-cr-ation's planned row is ALREADY_TARGET on Kamatera (dw_sku already populated) while the mirror showed it blank — Phase-1 self-copies landed on canonical, mirror never got them. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
e941614 · 2026-08-31 · TK-10896: add post-apply verify mode + turnkey per-vendor firing RUNBOOK
preflight-check.mjs gains --mode verify (after firing: GO iff every planned row now equals its candidate; still-blank rows flag NOT_APPLIED). RUNBOOK.md documents the full gated closed loop preflight->apply->verify->rollback, per-vendor, canary-first, with the scope/safety reminders. 47 tests green. All read-only; writes stay Steve-gated.
600aa83 · 2026-08-31 · TK-10896: read-only preflight GO/NO-GO checker for the gated apply run
preflight-check.mjs (parameterized target via DWSKU_PSQL, like the scanner) confirms on the TARGET DB that each planned shopify_id still EXISTS + is still BLANK before a human fires apply.sql — classifies READY / ALREADY_TARGET (idempotent) / ALREADY_OTHER (conflict) / MISSING (drift), verdict GO iff 0 missing + 0 other, exit code reflects it. READ-ONLY (SELECT only). Verified against the mirror: Carnegie GO, 10,707 READY. 45 tests green (+5). Completes the gated-run kit: apply.sql + undo.sql/restore-map + preflight. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
e5d7d09 · 2026-08-31 · TK-10896: Cody-gate fixes on apply-plan-gen — key on shopify_id (not local id) + shape-guard
Contrarian caught a CRITICAL flaw: apply.sql keyed on the local Mac2 serial `id`, which maps to a DIFFERENT product on canonical Kamatera (built from its own sequence) — running as-is would hit wrong/zero rows. Now keyed on shopify_id (the stable Shopify GID, verified 1:1 and identical cross-machine). Also: shape-guard rejects title/garbage SELF_COPY_SOURCE candidates (2 caught) from reaching a canonical write; restore-map old:null (honest); skip+count rows missing shopify_id. Re-verified: 38,712 stmts all shopify_id-keyed, 0 WHERE id=, 0 ledger codes leaked. 40 tests green (was 38). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
c2c1b1c · 2026-08-30 · TK-10896: apply-plan-gen — read-only GATED dw_sku self-copy apply plans
Generates per-vendor restore-map.json + apply.sql + undo.sql from the joined plan (self-copy classes only, non-null candidate). Recovers existing codes, never mints. Every UPDATE carries the (dw_sku IS NULL OR btrim=' ') blank-guard; undo.sql reverses each; SQL-escaped candidates. NOTHING executed — canonical Kamatera dw_unified write stays hard-gated for a human to fire. 38 tests pass (32 existing + 6 new). Real run: 33,762 self-copy plan rows -> 38,714 guarded statements across 93 vendors, 0 unmatched, 0 forbidden leaks. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
704931f · 2026-08-30 · TK-10896: make verified ledger authoritative for ALL DW-code rows (close prefix-guard gap)
Verified read-only against the mirror + the sha256-checked phase4 undo ledger (prefix counts EXACTLY match the Phase-4 decision-aid buckets: DWAG 5921/DWKN 505/ DWPR 2899/... = authentic). Key finding: greenfield DWAG codes in sku are DWAG-376xxx (scraper-native) while the reverted mints were DWAG-1000xx — a different range absent from these rows, so the prefix guard over-blocked ~8k rows. Join now checks EVERY DW-code candidate against the ledger (not just greenfield/ mixed-use), closing a 268-row gap (DWPR/DWHD residue the buckets missed). Result reconciles to the independent SQL count: 772 residue / 33,762 self-copy / 65 bare. 32 tests green incl. 2 regression cases (Carnegie native + DWPR residue). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
f92bedb · 2026-08-30 · TK-10896: refresh evidence for PROVENANCE_REVIEW hold + fold in Steve's rulings
Bucket-A mixed-use prefixes now HELD (fail-closed PROVENANCE_REVIEW) per Steve's 2026-08-30 ruling. Final mirror segmentation: 21,555 self-copy / 8,962 rescrape / 4,082 provenance-review-held / 9 dedup / 6 staging-link. 32 tests green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2fb7252 · 2026-08-30 · TK-10896: Cody-gate hardening — within-batch shared-candidate reporting + doc precision
Cody flagged 2,552 rows as undetected collisions; VERIFIED false — they are same- pattern sellable+sample pairs (identical title+handle) that correctly share one canonical dw_sku (which is intentionally non-unique). Rejected the mislabel; instead: (1) scanner now reports within_batch_shared_candidates (1,276 groups/2,552 rows, benign) + per-row shared_pattern_candidate flag so a downstream apply upserts; (2) README no-mint claim corrected to no-fabrication + guard-conditional no-mint; (3) Bucket-A residue caveat quantified (4,084 rows in prefix, <=668 possibly minted, needs mint ledger). 25 tests green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2bcc199 · 2026-08-30 · TK-10896: add provenance guard — greenfield Phase-4 mint prefixes route to rescrape
Verified via ticket event log + phase2-phase4 decision aid: the reverted Phase-4 mint allocated codes into greenfield prefixes (DWAG Carnegie, DWAX Maharam, DWCX, DWST, DWSC, DWDX, DWWG) that had zero prior coded products. On the Mac2 mirror that residue persists in sku; self-copying it would re-instate reverted mints. Guard routes them to MINT_RESIDUE_RESCRAPE (8,897 rows). Corrected mirror segmentation: 25,623 self-copy / 8,962 rescrape / 9 dedup / 6 staging-link. 24 tests green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
abb32c7 · 2026-08-30 · TK-10896: read-only dw_sku backlog classifier + scanner + tests + evidence
Deterministic recover-existing-code classifier (never mints), portable read-only scanner (Mac2 mirror or Kamatera via DWSKU_PSQL), 20 unit tests, and the 2026-08-30 mirror evidence. Surfaces mirror-vs-canonical drift and the DWAG- provenance question for Steve. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
File tree
- .gitignore
- README.md
- RUNBOOK.md
- apply-plan-gen.mjs
- apply-plans-canonical/SUMMARY.json
- apply-plans-canonical/arte-international/apply.sql
- apply-plans-canonical/arte-international/restore-map.json
- apply-plans-canonical/arte-international/undo.sql
- apply-plans-canonical/de-gournay/apply.sql
- apply-plans-canonical/de-gournay/restore-map.json
- apply-plans-canonical/de-gournay/undo.sql
- apply-plans-canonical/designer-wallcoverings/apply.sql
- apply-plans-canonical/designer-wallcoverings/restore-map.json
- apply-plans-canonical/designer-wallcoverings/undo.sql
- apply-plans-canonical/dw-bespoke-studio/apply.sql
- apply-plans-canonical/dw-bespoke-studio/restore-map.json
- apply-plans-canonical/dw-bespoke-studio/undo.sql
- apply-plans-canonical/fallingstar-studio/apply.sql
- apply-plans-canonical/fallingstar-studio/restore-map.json
- apply-plans-canonical/fallingstar-studio/undo.sql
- apply-plans-canonical/fentucci/apply.sql
- apply-plans-canonical/fentucci/restore-map.json
- apply-plans-canonical/fentucci/undo.sql
- apply-plans-canonical/glitter-walls/apply.sql
- apply-plans-canonical/glitter-walls/restore-map.json
- apply-plans-canonical/glitter-walls/undo.sql
- apply-plans-canonical/graduate-collection/apply.sql
- apply-plans-canonical/graduate-collection/restore-map.json
- apply-plans-canonical/graduate-collection/undo.sql
- apply-plans-canonical/graham-brown/apply.sql
- apply-plans-canonical/graham-brown/restore-map.json
- apply-plans-canonical/graham-brown/undo.sql
- apply-plans-canonical/hollywood-wallcoverings/apply.sql
- apply-plans-canonical/hollywood-wallcoverings/restore-map.json
- apply-plans-canonical/hollywood-wallcoverings/undo.sql
- apply-plans-canonical/maya-romanoff/apply.sql
- apply-plans-canonical/maya-romanoff/restore-map.json
- apply-plans-canonical/maya-romanoff/undo.sql
- apply-plans-canonical/novasuede/apply.sql
- apply-plans-canonical/novasuede/restore-map.json
- apply-plans-canonical/novasuede/undo.sql
- apply-plans-canonical/osborne-little/apply.sql
- apply-plans-canonical/osborne-little/restore-map.json
- apply-plans-canonical/osborne-little/undo.sql
- apply-plans-canonical/phillipe-romano/apply.sql
- apply-plans-canonical/phillipe-romano/restore-map.json
- apply-plans-canonical/phillipe-romano/undo.sql
- apply-plans-canonical/pierre-frey/apply.sql
- apply-plans-canonical/pierre-frey/restore-map.json
- apply-plans-canonical/pierre-frey/undo.sql
- apply-plans-canonical/romo/apply.sql
- apply-plans-canonical/romo/restore-map.json
- apply-plans-canonical/romo/undo.sql
- apply-plans-canonical/scalamandre/apply.sql
- apply-plans-canonical/scalamandre/restore-map.json
- apply-plans-canonical/scalamandre/undo.sql
- apply-plans-canonical/thibaut/apply.sql
- apply-plans-canonical/thibaut/restore-map.json
- apply-plans-canonical/thibaut/undo.sql
- apply-plans-canonical/zoffany/apply.sql
- apply-plans-canonical/zoffany/restore-map.json
- apply-plans-canonical/zoffany/undo.sql
- apply-plans-content-match/Arte International/apply.sql
- apply-plans-content-match/Arte International/restore-map.json
- apply-plans-content-match/Arte International/review-queue.json
- apply-plans-content-match/Arte International/undo.sql
- apply-plans-content-match/CMO Paris/apply.sql
- apply-plans-content-match/CMO Paris/restore-map.json
- apply-plans-content-match/CMO Paris/review-queue.json
- apply-plans-content-match/CMO Paris/undo.sql
- apply-plans-content-match/Carnegie/apply.sql
- apply-plans-content-match/Carnegie/restore-map.json
- apply-plans-content-match/Carnegie/review-queue.json
- apply-plans-content-match/Carnegie/undo.sql
- apply-plans-content-match/Fabricut/apply.sql
- apply-plans-content-match/Fabricut/restore-map.json
- apply-plans-content-match/Fabricut/review-queue.json
- apply-plans-content-match/Fabricut/undo.sql
- apply-plans-content-match/Fentucci Naturals/apply.sql
- apply-plans-content-match/Fentucci Naturals/restore-map.json
- apply-plans-content-match/Fentucci Naturals/review-queue.json
- apply-plans-content-match/Fentucci Naturals/undo.sql
- apply-plans-content-match/Harlequin/apply.sql
- apply-plans-content-match/Harlequin/restore-map.json
- apply-plans-content-match/Harlequin/review-queue.json
- apply-plans-content-match/Harlequin/undo.sql
- apply-plans-content-match/Hollywood Wallcoverings/apply.sql
- apply-plans-content-match/Hollywood Wallcoverings/restore-map.json
- apply-plans-content-match/Hollywood Wallcoverings/review-queue.json
- apply-plans-content-match/Hollywood Wallcoverings/undo.sql
- apply-plans-content-match/Knoll/apply.sql
- apply-plans-content-match/Knoll/restore-map.json
- apply-plans-content-match/Knoll/review-queue.json
- apply-plans-content-match/Knoll/undo.sql
- apply-plans-content-match/Maharam/apply.sql
- apply-plans-content-match/Maharam/restore-map.json
- apply-plans-content-match/Maharam/review-queue.json
- apply-plans-content-match/Maharam/undo.sql
- apply-plans-content-match/Pierre Frey/apply.sql
- apply-plans-content-match/Pierre Frey/restore-map.json
- apply-plans-content-match/Pierre Frey/review-queue.json
- apply-plans-content-match/Pierre Frey/undo.sql
- apply-plans-content-match/Rebel Walls/apply.sql
- apply-plans-content-match/Rebel Walls/restore-map.json
- apply-plans-content-match/Rebel Walls/review-queue.json
- apply-plans-content-match/Rebel Walls/undo.sql
- apply-plans-content-match/Romo/apply.sql
- apply-plans-content-match/Romo/restore-map.json
- apply-plans-content-match/Romo/review-queue.json
- apply-plans-content-match/Romo/undo.sql
- apply-plans-content-match/SUMMARY-Arte International.json
- apply-plans-content-match/SUMMARY-CMO Paris.json
- apply-plans-content-match/SUMMARY-Carnegie.json
- apply-plans-content-match/SUMMARY-Fabricut.json
- apply-plans-content-match/SUMMARY-Fentucci Naturals.json
- apply-plans-content-match/SUMMARY-Harlequin.json
- apply-plans-content-match/SUMMARY-Hollywood Wallcoverings.json
- apply-plans-content-match/SUMMARY-Knoll.json
- apply-plans-content-match/SUMMARY-Maharam.json
- apply-plans-content-match/SUMMARY-Novasuede.json
- apply-plans-content-match/SUMMARY-Pierre Frey.json
- apply-plans-content-match/SUMMARY-Rebel Walls.json
- apply-plans-content-match/SUMMARY-Romo.json
- apply-plans-content-match/SUMMARY-Stout Textiles.json
- apply-plans-content-match/SUMMARY-Thibaut.json
- apply-plans-content-match/SUMMARY-Vahallan.json
- apply-plans-content-match/Stout Textiles/apply.sql
- apply-plans-content-match/Stout Textiles/restore-map.json
- apply-plans-content-match/Stout Textiles/review-queue.json
- apply-plans-content-match/Stout Textiles/undo.sql
- apply-plans-content-match/Thibaut/apply.sql
- apply-plans-content-match/Thibaut/restore-map.json
- apply-plans-content-match/Thibaut/review-queue.json
- apply-plans-content-match/Thibaut/undo.sql
- apply-plans-content-match/Vahallan/apply.sql
- apply-plans-content-match/Vahallan/restore-map.json
- apply-plans-content-match/Vahallan/review-queue.json
- apply-plans-content-match/Vahallan/undo.sql
- apply-plans-maharam-real-chunks/chunk-001/apply.sql
- apply-plans-maharam-real-chunks/chunk-001/restore-map.json
- apply-plans-maharam-real-chunks/chunk-001/undo.sql
- apply-plans-maharam-real-chunks/chunk-002/apply.sql
- apply-plans-maharam-real-chunks/chunk-002/restore-map.json
- apply-plans-maharam-real-chunks/chunk-002/undo.sql
- apply-plans-maharam-real-chunks/chunk-003/apply.sql
- apply-plans-maharam-real-chunks/chunk-003/restore-map.json
- apply-plans-maharam-real-chunks/chunk-003/undo.sql
- apply-plans-maharam-real/SUMMARY.json
- apply-plans-maharam-real/apply.sql
- apply-plans-maharam-real/restore-map.json
- apply-plans-maharam-real/review-queue.json
- apply-plans-maharam-real/undo.sql
- apply-plans-mfr/SUMMARY-carnegie-blank.json
- apply-plans-mfr/SUMMARY-carnegie-mint-correct.json
- apply-plans-mfr/carnegie-blank/apply.sql
- apply-plans-mfr/carnegie-blank/restore-map.json
- apply-plans-mfr/carnegie-blank/undo.sql
- apply-plans-mfr/carnegie-mint-correct/apply.sql
- apply-plans-mfr/carnegie-mint-correct/restore-map.json
- apply-plans-mfr/carnegie-mint-correct/undo.sql
- apply-plans-staging-link/China Seas/apply.sql
- apply-plans-staging-link/China Seas/restore-map.json
- apply-plans-staging-link/China Seas/undo.sql
- apply-plans-staging-link/Phillipe Romano/apply.sql
- apply-plans-staging-link/Phillipe Romano/restore-map.json
- apply-plans-staging-link/Phillipe Romano/undo.sql
- apply-plans-staging-link/SUMMARY-China Seas.json
- apply-plans-staging-link/SUMMARY-Phillipe Romano.json
- apply-plans-staging-link/SUMMARY-carnegie.json
- apply-plans-staging-link/carnegie/apply.sql
- apply-plans-staging-link/carnegie/restore-map.json
- apply-plans-staging-link/carnegie/undo.sql
- apply-plans/SUMMARY.json
- apply-plans/SUPERSEDED.md
- apply-plans/a-s-cr-ation/apply.sql
- apply-plans/a-s-cr-ation/restore-map.json
- apply-plans/a-s-cr-ation/undo.sql
- apply-plans/alan-campbell/apply.sql
- apply-plans/alan-campbell/restore-map.json
- apply-plans/alan-campbell/undo.sql
- apply-plans/andrew-martin/apply.sql
- apply-plans/andrew-martin/restore-map.json
- apply-plans/andrew-martin/undo.sql
- apply-plans/anna-french/apply.sql
- apply-plans/anna-french/restore-map.json
- apply-plans/anna-french/undo.sql
- apply-plans/anthology/apply.sql
- apply-plans/anthology/restore-map.json
- apply-plans/anthology/undo.sql
- apply-plans/architectural-fabrics/apply.sql
- apply-plans/architectural-fabrics/restore-map.json
- apply-plans/architectural-fabrics/undo.sql
- apply-plans/architectural-wallcoverings/apply.sql
- apply-plans/architectural-wallcoverings/restore-map.json
- apply-plans/architectural-wallcoverings/undo.sql
- apply-plans/arte-international/apply.sql
- apply-plans/arte-international/restore-map.json
- apply-plans/arte-international/undo.sql
- apply-plans/artmura/apply.sql
- apply-plans/artmura/restore-map.json
- apply-plans/artmura/undo.sql
- apply-plans/as-creation/apply.sql
- apply-plans/as-creation/restore-map.json
- apply-plans/as-creation/undo.sql
- apply-plans/atomic-50-ceilings/apply.sql
- apply-plans/atomic-50-ceilings/restore-map.json
- apply-plans/atomic-50-ceilings/undo.sql
- apply-plans/baker-lifestyle/apply.sql
- apply-plans/baker-lifestyle/restore-map.json
- apply-plans/baker-lifestyle/undo.sql
- apply-plans/black-edition/apply.sql
- apply-plans/black-edition/restore-map.json
- apply-plans/black-edition/undo.sql
- apply-plans/brand-mckenzie/apply.sql
- apply-plans/brand-mckenzie/restore-map.json
- apply-plans/brand-mckenzie/undo.sql
- apply-plans/brunschwig-fils/apply.sql
- apply-plans/brunschwig-fils/restore-map.json
- apply-plans/brunschwig-fils/undo.sql
- apply-plans/carnegie/apply.sql
- apply-plans/carnegie/restore-map.json
- apply-plans/carnegie/undo.sql
- apply-plans/caroline-cecil-textiles/apply.sql
- apply-plans/caroline-cecil-textiles/restore-map.json
- apply-plans/caroline-cecil-textiles/undo.sql
- apply-plans/charles-burger/apply.sql
- apply-plans/charles-burger/restore-map.json
- apply-plans/charles-burger/undo.sql
- apply-plans/china-seas/apply.sql
- apply-plans/china-seas/restore-map.json
- apply-plans/china-seas/undo.sql
- apply-plans/clarke-and-clarke/apply.sql
- apply-plans/clarke-and-clarke/restore-map.json
- apply-plans/clarke-and-clarke/undo.sql
- apply-plans/cloth-and-paper/apply.sql
- apply-plans/cloth-and-paper/restore-map.json
- apply-plans/cloth-and-paper/undo.sql
- apply-plans/cmo-paris/apply.sql
- apply-plans/cmo-paris/restore-map.json
- apply-plans/cmo-paris/undo.sql
- apply-plans/cole-son/apply.sql
- apply-plans/cole-son/restore-map.json
- apply-plans/cole-son/undo.sql
- apply-plans/coordonn/apply.sql
- apply-plans/coordonn/restore-map.json
- apply-plans/coordonn/undo.sql
- apply-plans/de-gournay/apply.sql
- apply-plans/de-gournay/restore-map.json
- apply-plans/de-gournay/undo.sql
- apply-plans/dedar/apply.sql
- apply-plans/dedar/restore-map.json
- apply-plans/dedar/undo.sql
- apply-plans/designer-wallcoverings/apply.sql
- apply-plans/designer-wallcoverings/restore-map.json
- apply-plans/designer-wallcoverings/undo.sql
- apply-plans/designtex/apply.sql
- apply-plans/designtex/restore-map.json
- apply-plans/designtex/undo.sql
- apply-plans/donghia/apply.sql
- apply-plans/donghia/restore-map.json
- apply-plans/donghia/undo.sql
- apply-plans/dupenny/apply.sql
- apply-plans/dupenny/restore-map.json
- apply-plans/dupenny/undo.sql
- apply-plans/dw-bespoke-studio/apply.sql
- apply-plans/dw-bespoke-studio/restore-map.json
- apply-plans/dw-bespoke-studio/undo.sql
- apply-plans/dwhd/apply.sql
- apply-plans/dwhd/restore-map.json
- apply-plans/dwhd/undo.sql
- apply-plans/elitis/apply.sql
- apply-plans/elitis/restore-map.json
- apply-plans/elitis/undo.sql
- apply-plans/fabricut/apply.sql
- apply-plans/fabricut/restore-map.json
- apply-plans/fabricut/undo.sql
- apply-plans/fallingstar-studio/apply.sql
- apply-plans/fallingstar-studio/restore-map.json
- apply-plans/fallingstar-studio/undo.sql
- apply-plans/fentucci-naturals/apply.sql
- apply-plans/fentucci-naturals/restore-map.json
- apply-plans/fentucci-naturals/undo.sql
- apply-plans/fentucci/apply.sql
- apply-plans/fentucci/restore-map.json
- apply-plans/fentucci/undo.sql
- apply-plans/franquemont-london/apply.sql
- apply-plans/franquemont-london/restore-map.json
- apply-plans/franquemont-london/undo.sql
- apply-plans/g-p-j-baker/apply.sql
- apply-plans/g-p-j-baker/restore-map.json
- apply-plans/g-p-j-baker/undo.sql
- apply-plans/gaston-y-daniela/apply.sql
- apply-plans/gaston-y-daniela/restore-map.json
- apply-plans/gaston-y-daniela/undo.sql
- apply-plans/glitter-walls/apply.sql
- apply-plans/glitter-walls/restore-map.json
- apply-plans/glitter-walls/undo.sql
- apply-plans/gp-j-baker/apply.sql
- apply-plans/gp-j-baker/restore-map.json
- apply-plans/gp-j-baker/undo.sql
- apply-plans/graduate-collection-uk/apply.sql
- apply-plans/graduate-collection-uk/restore-map.json
- apply-plans/graduate-collection-uk/undo.sql
- apply-plans/graduate-collection/apply.sql
- apply-plans/graduate-collection/restore-map.json
- apply-plans/graduate-collection/undo.sql
- apply-plans/graham-brown/apply.sql
- apply-plans/graham-brown/restore-map.json
- apply-plans/graham-brown/undo.sql
- apply-plans/groundworks/apply.sql
- apply-plans/groundworks/restore-map.json
- apply-plans/groundworks/undo.sql
- apply-plans/harlequin/apply.sql
- apply-plans/harlequin/restore-map.json
- apply-plans/harlequin/undo.sql
- apply-plans/hollywood-wallcoverings/apply.sql
- apply-plans/hollywood-wallcoverings/restore-map.json
- apply-plans/hollywood-wallcoverings/undo.sql
- apply-plans/home-couture/apply.sql
- apply-plans/home-couture/restore-map.json
- apply-plans/home-couture/undo.sql
- apply-plans/innovations/apply.sql
- apply-plans/innovations/restore-map.json
- apply-plans/innovations/undo.sql
- apply-plans/jeffrey-stevens/apply.sql
- apply-plans/jeffrey-stevens/restore-map.json
- apply-plans/jeffrey-stevens/undo.sql
- apply-plans/kirkby-design/apply.sql
- apply-plans/kirkby-design/restore-map.json
- apply-plans/kirkby-design/undo.sql
- apply-plans/knoll/apply.sql
- apply-plans/knoll/restore-map.json
- apply-plans/knoll/undo.sql
- apply-plans/kravet-couture/apply.sql
- apply-plans/kravet-couture/restore-map.json
- apply-plans/kravet-couture/undo.sql
- apply-plans/kravet-design/apply.sql
- apply-plans/kravet-design/restore-map.json
- apply-plans/kravet-design/undo.sql
- apply-plans/kravet/apply.sql
- apply-plans/kravet/restore-map.json
- apply-plans/kravet/undo.sql
- apply-plans/la-walls/apply.sql
- apply-plans/la-walls/restore-map.json
- apply-plans/la-walls/undo.sql
- apply-plans/lee-jofa/apply.sql
- apply-plans/lee-jofa/restore-map.json
- apply-plans/lee-jofa/undo.sql
- apply-plans/los-angeles-fabrics/apply.sql
- apply-plans/los-angeles-fabrics/restore-map.json
- apply-plans/los-angeles-fabrics/undo.sql
- apply-plans/maharam/apply.sql
- apply-plans/maharam/restore-map.json
- apply-plans/maharam/undo.sql
- apply-plans/malibu-wallpaper/apply.sql
- apply-plans/malibu-wallpaper/restore-map.json
- apply-plans/malibu-wallpaper/undo.sql
- apply-plans/malibu-walls/apply.sql
- apply-plans/malibu-walls/restore-map.json
- apply-plans/malibu-walls/undo.sql
- apply-plans/mark-alexander/apply.sql
- apply-plans/mark-alexander/restore-map.json
- apply-plans/mark-alexander/undo.sql
- apply-plans/mulberry/apply.sql
- apply-plans/mulberry/restore-map.json
- apply-plans/mulberry/undo.sql
- apply-plans/newwall/apply.sql
- apply-plans/newwall/restore-map.json
- apply-plans/newwall/undo.sql
- apply-plans/nobilis/apply.sql
- apply-plans/nobilis/restore-map.json
- apply-plans/nobilis/undo.sql
- apply-plans/novasuede/apply.sql
- apply-plans/novasuede/restore-map.json
- apply-plans/novasuede/undo.sql
- apply-plans/osborne-little/apply.sql
- apply-plans/osborne-little/restore-map.json
- apply-plans/osborne-little/undo.sql
- apply-plans/phillip-jeffries-tk11131/README.md
- apply-plans/phillip-jeffries-tk11131/ambiguous-3.json
- apply-plans/phillip-jeffries-tk11131/apply-3-ambiguous.mjs
- apply-plans/phillip-jeffries-tk11131/apply.graphql.mjs
- apply-plans/phillip-jeffries-tk11131/backfill-mapping-3-ambiguous.json
- apply-plans/phillip-jeffries-tk11131/backfill-mapping-897.csv
- apply-plans/phillip-jeffries-tk11131/backfill-mapping-897.json
- apply-plans/phillip-jeffries-tk11131/undo-map-3-ambiguous.json
- apply-plans/phillip-jeffries-tk11131/undo-map.json
- apply-plans/phillip-jeffries/apply.sql
- apply-plans/phillip-jeffries/restore-map.json
- apply-plans/phillip-jeffries/undo.sql
- apply-plans/phillipe-romano/apply.sql
- apply-plans/phillipe-romano/restore-map.json
- apply-plans/phillipe-romano/undo.sql
- apply-plans/pierre-frey/apply.sql
- apply-plans/pierre-frey/restore-map.json
- apply-plans/pierre-frey/undo.sql
- apply-plans/plains/apply.sql
- apply-plans/plains/restore-map.json
- apply-plans/plains/undo.sql
- apply-plans/quadrille/apply.sql
- apply-plans/quadrille/restore-map.json
- apply-plans/quadrille/undo.sql
- apply-plans/rebel-walls/apply.sql
- apply-plans/rebel-walls/restore-map.json
- apply-plans/rebel-walls/undo.sql
- apply-plans/romo/apply.sql
- apply-plans/romo/restore-map.json
- apply-plans/romo/undo.sql
- apply-plans/ronald-redding/apply.sql
- apply-plans/ronald-redding/restore-map.json
- apply-plans/ronald-redding/undo.sql
- apply-plans/sancar/apply.sql
- apply-plans/sancar/restore-map.json
- apply-plans/sancar/undo.sql
- apply-plans/scalamandre-wallpaper/apply.sql
- apply-plans/scalamandre-wallpaper/restore-map.json
- apply-plans/scalamandre-wallpaper/undo.sql
- apply-plans/scalamandre/apply.sql
- apply-plans/scalamandre/restore-map.json
- apply-plans/scalamandre/undo.sql
- apply-plans/scion/apply.sql
- apply-plans/scion/restore-map.json
- apply-plans/scion/undo.sql
- apply-plans/sister-parish/apply.sql
- apply-plans/sister-parish/restore-map.json
- apply-plans/sister-parish/undo.sql
- apply-plans/stout-textiles/apply.sql
- apply-plans/stout-textiles/restore-map.json
- apply-plans/stout-textiles/undo.sql
- apply-plans/suncloth/apply.sql
- apply-plans/suncloth/restore-map.json
- apply-plans/suncloth/undo.sql
- apply-plans/thibaut/apply.sql
- apply-plans/thibaut/restore-map.json
- apply-plans/thibaut/undo.sql
- apply-plans/threads/apply.sql
- apply-plans/threads/restore-map.json
- apply-plans/threads/undo.sql
- apply-plans/tres-tintas/apply.sql
- apply-plans/tres-tintas/restore-map.json
- apply-plans/tres-tintas/undo.sql
- apply-plans/vahallan/apply.sql
- apply-plans/vahallan/restore-map.json
- apply-plans/vahallan/undo.sql
- apply-plans/versace/apply.sql
- apply-plans/versace/restore-map.json
- apply-plans/versace/undo.sql
- apply-plans/villa-nova/apply.sql
- apply-plans/villa-nova/restore-map.json
- apply-plans/villa-nova/undo.sql
- apply-plans/winfield-thybony/apply.sql
- apply-plans/winfield-thybony/restore-map.json
- apply-plans/winfield-thybony/undo.sql
- apply-plans/wolf-gordon/apply.sql
- apply-plans/wolf-gordon/restore-map.json
- apply-plans/wolf-gordon/undo.sql
- apply-plans/zinc-textile/apply.sql
- apply-plans/zinc-textile/restore-map.json
- apply-plans/zinc-textile/undo.sql
- apply-plans/zoffany/apply.sql
- apply-plans/zoffany/restore-map.json
- apply-plans/zoffany/undo.sql
- chunk-content-match-plan.mjs
- classify.mjs
- content-match-gen.mjs
- data/tk11002-restore-20260831-094824.json
- data/tk11002-restore-20260831-095037.json
- data/tk11002-restore-20260831-095255.json
- data/tk11002-restore-20260831-100047.json
- dwsku-backlog-scan.mjs
- evidence/ANALYSIS-2026-08-30.md
- evidence/CANONICAL-LEDGER-JOIN-2026-08-30.md
- evidence/LEDGER-JOIN-HARNESS-2026-08-30.md
- evidence/PROVENANCE-HOLD-2026-08-30.md
- evidence/TK-10900-e2e-proof-2026-08-31.json
- evidence/TK-10900-maharam-chunk001-preflight.json
- evidence/TK-10900-maharam-chunk001-verify.json
- evidence/TK-10900-maharam-chunk002-preflight.json
- evidence/TK-10900-maharam-chunk002-verify.json
- evidence/TK-10900-maharam-chunk003-preflight.json
- evidence/TK-10900-maharam-chunk003-verify.json
- evidence/TK-10900-post-approval-2026-08-31.json
- evidence/TK-10900-post-program-a-plan-2026-08-31.json
- evidence/TK-10900-rescrape-workplan.md
- evidence/kamatera-canonical-2026-08-31.json
- evidence/mac2-mirror-2026-08-30.json
- evidence/mac2-mirror-provenance-hold-2026-08-30.json
- evidence/per-vendor-cohorts-2026-08-30.md
- fire-content-match.sh
- fire-self-copy.sh
- fire-staging-link.sh
- maharam-real-code-gen.mjs
- maharam-real-code-helpers.mjs
- match-helpers.mjs
- mfr-selfcopy-gen.mjs
- package.json
- preflight-check.mjs
- provenance-ledger-join.mjs
- staging-link-gen.mjs
- test/apply-plan-gen.test.mjs