{"slug":"dw-validator-debug-TK11314","total":2256,"limit":100,"offset":0,"since":null,"commits":[{"hash":"278d8a49","date":"2026-09-10 17:52:30 -0700","author":"Steve","subject":"governance(TK-11370): make live-by-default Shopify writers dry-run by default","body":"Flip `DRY = argv.includes('--dry')` -> `DRY = !argv.includes('--apply')` so a\nzero-argument run no longer fires customer-facing Shopify writes.\n\nBackward compatible: `--dry` still means dry; `--apply` now required to write.\nOnly zero-arg invocations change behaviour, and every candidate was checked\nagainst its launchd/cron/pm2/wrapper invocation sites first (4 scripts that a\ncadence job runs flagless were EXCLUDED so this cannot silently disable them).\n\nVerified: node --check/py_compile 87/87 with a positive control proving the\nchecker rejects an injected fault; argv truth-table negative test 5/5.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01L53y4oP2itY3qeJ8WQgMzc"},{"hash":"1f69e597","date":"2026-09-10 11:17:37 -0700","author":"Steve Abrams","subject":"TK-11357 action A: hard-abort guard on 5 debug-clone store-wide sweeps (require ALLOW_DEBUG_CLONE_WRITE) — close the live hand-run $0-restock hole","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MAcoZUWRsEY6F1nNYyfzQi"},{"hash":"8cb713c5","date":"2026-09-09 09:57:06 -0700","author":"Steve Abrams","subject":"Fix Designtex material-copy readiness false positives with regression proof","body":""},{"hash":"a0294b56","date":"2026-09-08 12:30:45 -0700","author":"Steve Abrams","subject":"Gate below-images Pattern Description block on live theme (short desc -> right/Specs only)","body":"Live theme 145121607731 (carnegie-color-swatch): the below-images 'Pattern\nDescription' block in snippets/product-gallery.liquid had no length gate, so\nSHORT descriptions duplicated (right under Specs AND wide below images).\nWrapped it in {% if product == blank or desc_len > 1500 %} to match the\nright-side product-description-meta.liquid (<= 1500) so each description shows\nin exactly one place. Short -> right/Specs; long Kravet-family (>1500) stay\nwide below images; editor onboarding unchanged. BEFORE snippet saved for\none-command rollback; apply+verify script committed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01TLitTyFFwngLVzBZDtHiA7"},{"hash":"5d73ddff","date":"2026-09-08 04:16:00 -0700","author":"steve@designerwallcoverings.com","subject":"guard TK-10965: skip $0 variants in hourly inventory re-inflater","body":"inventory-set-2026-newest.mjs was re-stamping on_hand=2026 every hour on the\nnewest 1000 products with NO price filter, overwriting the Aug 31 fix that\nzeroed the 1281 Phillipe Romano Vienna $0 variants. Added price field to SCAN\nquery and a continue guard so any variant priced $0.00 is never added to the\nfixes batch — preventing the hourly cadence from making them orderable again."},{"hash":"67a74a1b","date":"2026-09-07 06:54:28 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-07T06:51:38 (2 data files) — shopify/collection-hero-fix/tk10056-hero-rotate/backups/lizzo-1.json shopify/collection-hero-fix/tk10056-hero-rotate/backups/ronald-redding.json","body":""},{"hash":"51d7d0d2","date":"2026-09-04 22:38:50 -0700","author":"Steve","subject":"snapshot before restart: preserve in-flight work","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_011gbmuMHgCLDEPM4TpfAr4G"},{"hash":"37b817a4","date":"2026-09-03 13:10:53 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T13:07:42 (1 data files) — shopify/scripts/out/reconcile-frozen-SNAPSHOT-2026-09-03T19-31-54-816Z.json","body":""},{"hash":"ed856136","date":"2026-09-03 12:40:12 -0700","author":"Steve","subject":"TK-11046 WS-B: one-time frozen-delete reconcile script (snapshot+ledger)","body":"Live-404-verifies stale DRAFT(>2d)/ARCHIVED(>3d) mirror rows; 404 -> mark\nDELETED_FROM_SHOPIFY (concurrency-safe AND status=old), 200 -> leave, err -> skip.\nSnapshots all candidates before write + ledgers to executed-reversible + prints\nsummary + audits DUPLICATE_IMPORT read-only. Applied run: 853 verified, 733\nmarked, 120 left live, 0 skipped; DUPLICATE_IMPORT 404-rate 0% (all live -> not\ntouched, audit-only default validated). Reversible via --revert <snapshot>.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BbqKZLbd8emwVkNrxwtG2X"},{"hash":"a6231040","date":"2026-09-03 12:33:43 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T12:32:21 (1 data files) — shopify/scripts/out/reconcile-frozen-SNAPSHOT-2026-09-03T19-31-54-816Z.json","body":""},{"hash":"6f26210b","date":"2026-09-03 12:31:32 -0700","author":"Steve","subject":"TK-11046 WS-A: sweep DRAFT/ARCHIVED for phantom deletes (root fix)","body":"markPhantomDeleted only 404-verified status='ACTIVE' rows, so a product\ndeleted while DRAFT or ARCHIVED froze at its last non-ACTIVE status forever\ninstead of becoming DELETED_FROM_SHOPIFY. Add markPhantomDeletedNonActive on a\nSEPARATE budget (own candidate cap 300/run, own confirmed cap 250/run, own\nbroken-crawl guard) so the non-active backlog drains over several nightly runs\nand can never trip the ACTIVE 500-candidate circuit-breaker. ACTIVE sweep is\nbyte-for-byte unchanged. Concurrency-safe UPDATE (AND status=old) per Cody.\nDUPLICATE_IMPORT opt-in only (provenance unaudited).\n\nCody /contrarian: 4x SHIP IT / 1x FIX FIRST -> folded in the status guard.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BbqKZLbd8emwVkNrxwtG2X"},{"hash":"c6e825b1","date":"2026-09-03 12:04:12 -0700","author":"Steve","subject":"git-bloat Layer 1: gitignore broad room-render/snapshot patterns + untrack 14 shopify-upload GRD jpgs (TK-11192, approved)","body":"Completes the TK-11126 pass which missed the shopify-upload/ siblings.\nWorking tree kept (git rm --cached). History NOT rewritten per TK-10928 default.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YXf9gMQQWRfNex6EestZhp"},{"hash":"486f88aa","date":"2026-09-03 11:55:24 -0700","author":"Steve","subject":"TK-11186: cadence importer withholds New Arrival + Trending tags/membership from showroom-only vendors","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YXf9gMQQWRfNex6EestZhp"},{"hash":"04d25ebe","date":"2026-09-03 04:09:22 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T04:07:16 (1 data files) — .gitignore","body":""},{"hash":"313f7b33","date":"2026-09-03 04:06:59 -0700","author":"steve@designerwallcoverings.com","subject":"stop tracking 15 bloat files: GRD room-renders + carnegie-seafoam snapshot (TK-11126 / DW-git-bloat memo)","body":"Layer 1 forward-fix: extend .gitignore with onboarding/graduate-new-2026/images/ and\ncarnegie-*-images-{RESTORE,RESULT}-*.json patterns. git rm --cached removes 14 PNG/JPG\nroom-renders (avg 3-4 MB each, committed by auto-data-snapshot since 2026-08-27) and 1\ncarnegie-seafoam JSON from the index; working files stay on disk (regenerable).\nReversible: git revert this commit. 4am loop, auto-execute tier (reversible, local, ≤500 items)."},{"hash":"2be9c885","date":"2026-09-02 11:44:24 -0700","author":"Steve","subject":"DW Free Samples fn: retail free samples require verified-sample tag (Path B, TK-11120)","body":"Email-verify = unlock: signed-in retail customers now need the verified-sample\ntag (applied by dw-signup-fulfillment's double-opt-in email flow) to receive\nfree samples. Trade (trade_approved) unaffected. Adds hasVerified to the input\nquery + a retail gate in run.js; 14/14 unit tests pass (3 new Path B cases).\nNot yet deployed — shopify app deploy + discountAutomaticAppCreate are gated.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01H1RVvaFxvXQZ5cBLwx2uvf"},{"hash":"d7e1ba03","date":"2026-09-02 09:36:40 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-02T09:35:20 (1 data files) — scripts/pr-contact-for-price-dwpp","body":""},{"hash":"10565b80","date":"2026-09-02 08:28:08 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-02T08:25:36 (1 data files) — scripts/pj-onboard-20260901","body":""},{"hash":"52c0d7bd","date":"2026-09-02 07:50:03 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-02T07:48:02 (1 data files) — scripts/pj-onboard-20260901","body":""},{"hash":"a2f5cda1","date":"2026-09-02 04:12:15 -0700","author":"Steve","subject":"stop tracking data/pj-images + carnegie snapshots (TK-11092)","body":"3836 PJ images (4.7GB) + 27 Carnegie restore/result JSONs were being\nauto-committed every 37m by the data-snapshot launchd job, bloating .git\nfrom ~1339MB to 6113MB. All regenerable; files stay on disk.\nUndo: git revert <this-sha>"},{"hash":"c2843c07","date":"2026-09-01 23:01:49 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T22:59:22 (621 data files) — data/pj-images/10002.jpg data/pj-images/10175.jpg data/pj-images/10179.jpg data/pj-images/10196.jpg data/pj-images/10210.jpg","body":""},{"hash":"0e6e4315","date":"2026-09-01 22:23:54 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T22:21:53 (1 data files) — scripts/pj-onboard-20260901","body":""},{"hash":"7c88729f","date":"2026-09-01 15:17:31 -0700","author":"Steve Abrams","subject":"document Carnegie 5x verification","body":""},{"hash":"a2dac714","date":"2026-09-01 14:51:31 -0700","author":"Steve","subject":"backfill all Carnegie manufacturer images","body":""},{"hash":"8807ea02","date":"2026-09-01 14:16:29 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T14:14:21 (11 data files) — data/carnegie-all-images-RESTORE-2026-09-01T20-38-02-943Z.json data/carnegie-all-images-RESTORE-2026-09-01T20-44-23-029Z.json data/carnegie-all-images-RESTORE-2026-09-01T20-50-55-355Z.json data/carnegie-all-images-RESTORE-2026-09-01T20-57-25-630Z.json data/carnegie-all-images-RESTORE-2026-09-01T21-03-53-505Z.json","body":""},{"hash":"b3a7325c","date":"2026-09-01 13:38:25 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T13:36:10 (5 data files) — data/carnegie-all-images-RESTORE-2026-09-01T20-28-06-942Z.json data/carnegie-all-images-RESTORE-2026-09-01T20-30-47-659Z.json data/carnegie-all-images-RESTORE-2026-09-01T20-31-44-941Z.json data/carnegie-all-images-RESULT-2026-09-01T20-30-47-659Z.json data/carnegie-all-images-RESULT-2026-09-01T20-31-44-941Z.json","body":""},{"hash":"05a1d9a2","date":"2026-09-01 13:24:54 -0700","author":"Steve","subject":"add Carnegie Seafoam manufacturer images","body":""},{"hash":"1292724e","date":"2026-09-01 13:19:52 -0700","author":"Steve","subject":"complete Carnegie exact spec recovery","body":""},{"hash":"a42e9e9b","date":"2026-09-01 12:59:37 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T12:55:30 (5 data files) — data/carnegie-held-recovery-E2E.json data/carnegie-held-recovery-RESTORE-2026-09-01T19-50-22-560Z.json data/carnegie-held-recovery-RESTORE-2026-09-01T19-52-28-483Z.json data/carnegie-held-recovery-RESULT-2026-09-01T19-50-22-560Z.json data/carnegie-held-recovery-RESULT-2026-09-01T19-52-28-483Z.json","body":""},{"hash":"1f394b34","date":"2026-09-01 12:49:56 -0700","author":"Steve","subject":"recover Carnegie identities from DW SKUs","body":""},{"hash":"b6939f10","date":"2026-09-01 12:37:18 -0700","author":"Steve","subject":"show Carnegie specs and normalize catalog fields","body":""},{"hash":"d499531b","date":"2026-09-01 12:19:00 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T12:16:45 (24 data files) — data/carnegie-brand-title-RESTORE-2026-09-01T18-51-32-379Z.json data/carnegie-brand-title-RESTORE-2026-09-01T18-55-28-801Z.json data/carnegie-brand-title-RESTORE-2026-09-01T18-59-24-263Z.json data/carnegie-brand-title-RESTORE-2026-09-01T19-02-56-143Z.json data/carnegie-brand-title-RESTORE-2026-09-01T19-06-28-746Z.json","body":""},{"hash":"8dfb3c56","date":"2026-09-01 11:40:36 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T11:38:20 (15 data files) — data/carnegie-brand-title-RESTORE-2026-09-01T18-28-26-048Z.json data/carnegie-brand-title-RESULT-2026-09-01T18-28-26-048Z.json data/carnegie-visible-metafields-RESTORE-2026-09-01T18-19-10-579Z.json data/carnegie-visible-metafields-RESTORE-2026-09-01T18-19-32-066Z.json data/carnegie-visible-metafields-RESTORE-2026-09-01T18-23-07-632Z.json","body":""},{"hash":"0bc4a1db","date":"2026-09-01 11:06:13 -0700","author":"Steve","subject":"keep Carnegie specs in metafields only","body":""},{"hash":"d346e716","date":"2026-09-01 11:02:48 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T10:56:56 (24 data files) — data/carnegie-spec-body-cleanup-RESTORE-2026-09-01T17-21-18-908Z.json data/carnegie-spec-body-cleanup-RESTORE-2026-09-01T17-23-57-802Z.json data/carnegie-spec-body-cleanup-RESTORE-2026-09-01T17-26-35-222Z.json data/carnegie-spec-body-cleanup-RESTORE-2026-09-01T17-29-16-693Z.json data/carnegie-spec-body-cleanup-RESTORE-2026-09-01T17-32-08-589Z.json","body":""},{"hash":"5a11b5b6","date":"2026-09-01 10:21:19 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T10:19:15 (9 data files) — data/carnegie-spec-E2E-carnegie-spec-body-cleanup-RESULT-2026-09-01T17-14-57-375Z.json data/carnegie-spec-body-cleanup-RESTORE-2026-09-01T17-14-57-375Z.json data/carnegie-spec-body-cleanup-RESTORE-2026-09-01T17-17-04-066Z.json data/carnegie-spec-body-cleanup-RESTORE-2026-09-01T17-17-40-691Z.json data/carnegie-spec-body-cleanup-RESTORE-2026-09-01T17-18-42-266Z.json","body":""},{"hash":"52da1367","date":"2026-09-01 10:09:54 -0700","author":"Steve","subject":"TK-11047 verify final type-aware Carnegie specs","body":""},{"hash":"9e8c6609","date":"2026-09-01 08:30:13 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T08:28:16 (2 data files) — data/carnegie-spec-bulk-RESTORE-2026-09-01T15-15-17-797Z.json data/carnegie-spec-bulk-RESULT-2026-09-01T15-15-17-797Z.json","body":""},{"hash":"b4aa396b","date":"2026-09-01 08:15:17 -0700","author":"Steve","subject":"TK-11047 verify 500 pending Carnegie specs","body":""},{"hash":"9d08204f","date":"2026-09-01 08:02:27 -0700","author":"Steve Abrams","subject":"fix(importer): fail-loud on missing per-color mfr sku instead of fabricating a counter","body":"Root cause of the go-live-gate window growth (TK-11063): importer/scraper sites did\n`sku: color.sku || ${pattern_number}-${color_number}` (and `VENDOR-${i+1}`),\nminting a fabricated sequential code when the real per-color mfr code was not captured\n— exactly how Carnegie Grain 6300 became 63001..630026. Adds shared fail-loud helper\nlib/resolve-mfr-sku.ts: returns the real sku or HOLDS the row (never fabricates);\nby-colour lines (Novasuede) exempt. Wired into fix-all-vendors-structure.ts,\nfetch-vendor-products.ts (in-browser emits '' + Node-side holds), and the DW-Agents\nArte importer. Rule dw-dwsku-keep-old-never-mint. TK-11063.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"4428bcdb","date":"2026-09-01 07:53:02 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T07:51:05 (3 data files) — data/carnegie-spec-bulk-RESTORE-2026-09-01T14-12-06-522Z.json data/carnegie-spec-bulk-RESTORE-2026-09-01T14-33-08-678Z.json data/carnegie-spec-bulk-RESULT-2026-09-01T14-33-08-678Z.json","body":""},{"hash":"0e41836c","date":"2026-09-01 07:33:08 -0700","author":"Steve","subject":"TK-11047 add pending-only Carnegie convergence","body":""},{"hash":"ca4c96f2","date":"2026-09-01 07:12:06 -0700","author":"Steve","subject":"TK-11047 verify durable Carnegie spec provenance","body":""},{"hash":"ac12d572","date":"2026-09-01 06:00:42 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T05:58:40 (1 data files) — data/carnegie-spec-E2E-2026-09-01T00-34-26-685Z.json","body":""},{"hash":"4103d643","date":"2026-09-01 01:03:39 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-01T01:01:38 (1 data files) — shopify/scripts/cadence/data/upload-restore-2026-09-01.jsonl","body":""},{"hash":"5584119b","date":"2026-08-31 23:49:27 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T23:47:36 (1 data files) — shopify/scripts/cadence/data/upload-restore-2026-09-01.jsonl","body":""},{"hash":"5934f52e","date":"2026-08-31 23:12:36 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T23:10:46 (1 data files) — shopify/scripts/cadence/data/upload-restore-2026-09-01.jsonl","body":""},{"hash":"b607bd56","date":"2026-08-31 21:58:47 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T21:56:56 (1 data files) — shopify/scripts/cadence/data/upload-restore-2026-09-01.jsonl","body":""},{"hash":"3ccc1e3b","date":"2026-08-31 20:45:07 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T20:43:15 (1 data files) — shopify/scripts/cadence/data/upload-restore-2026-09-01.jsonl","body":""},{"hash":"f252f4ff","date":"2026-08-31 20:08:19 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T20:06:26 (1 data files) — shopify/scripts/cadence/data/upload-restore-2026-09-01.jsonl","body":""},{"hash":"caf1dd17","date":"2026-08-31 19:31:26 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T19:29:32 (4 data files) — data/carnegie-spec-bulk-RESTORE-2026-09-01T01-50-00-964Z.json data/carnegie-spec-bulk-RESTORE-2026-09-01T02-07-15-232Z.json data/carnegie-spec-bulk-RESULT-2026-09-01T01-50-00-964Z.json data/carnegie-spec-bulk-RESULT-2026-09-01T02-07-15-232Z.json","body":""},{"hash":"ee62cf4f","date":"2026-08-31 18:54:29 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T18:52:39 (5 data files) — data/carnegie-spec-bulk-RESTORE-2026-09-01T01-16-47-908Z.json data/carnegie-spec-bulk-RESTORE-2026-09-01T01-34-14-558Z.json data/carnegie-spec-bulk-RESULT-2026-09-01T01-16-47-908Z.json data/carnegie-spec-bulk-RESULT-2026-09-01T01-34-14-558Z.json shopify/scripts/cadence/data/upload-restore-2026-09-01.jsonl","body":""},{"hash":"3729b8be","date":"2026-08-31 18:17:26 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T18:15:28 (6 data files) — data/carnegie-spec-bulk-RESTORE-2026-09-01T00-34-26-685Z.json data/carnegie-spec-bulk-RESTORE-2026-09-01T00-39-13-905Z.json data/carnegie-spec-bulk-RESTORE-2026-09-01T00-57-01-041Z.json data/carnegie-spec-bulk-RESULT-2026-09-01T00-34-26-685Z.json data/carnegie-spec-bulk-RESULT-2026-09-01T00-39-13-905Z.json","body":""},{"hash":"0145ea42","date":"2026-08-31 17:40:17 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T17:38:21 (4 data files) — data/carnegie-spec-bulk-RESTORE-2026-09-01T00-20-00-528Z.json data/carnegie-spec-bulk-RESULT-2026-08-31T23-54-47-801Z.json data/carnegie-spec-bulk-RESULT-2026-09-01T00-20-00-528Z.json shopify/scripts/cadence/data/upload-restore-2026-09-01.jsonl","body":""},{"hash":"0836e092","date":"2026-08-31 17:07:21 -0700","author":"Steve","subject":"TK-11047 sync next 500 Carnegie specs","body":""},{"hash":"86d342a6","date":"2026-08-31 17:01:25 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T16:59:21 (3 data files) — data/carnegie-spec-bulk-RESTORE-2026-08-31T23-49-51-650Z.json data/carnegie-spec-bulk-RESTORE-2026-08-31T23-54-47-801Z.json shopify/scripts/cadence/data/upload-restore-2026-08-31.jsonl","body":""},{"hash":"f3c376b3","date":"2026-08-31 16:51:53 -0700","author":"Steve Abrams","subject":"Carnegie PDPs: remove customer-facing Manufacturer product page link (TK-11057); URL kept in metafield only","body":""},{"hash":"5b6e1a41","date":"2026-08-31 16:49:51 -0700","author":"Steve","subject":"TK-11047 verify next 500 Carnegie specs","body":""},{"hash":"908a47d9","date":"2026-08-31 16:29:06 -0700","author":"Steve","subject":"TK-11047 sync another 500 Carnegie specs","body":""},{"hash":"f9863647","date":"2026-08-31 16:24:08 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T16:22:16 (1 data files) — data/carnegie-spec-bulk-RESULT-2026-08-31T22-39-11-882Z.json","body":""},{"hash":"79c0d25c","date":"2026-08-31 15:46:53 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T15:44:48 (1 data files) — data/carnegie-spec-bulk-RESTORE-2026-08-31T22-39-11-882Z.json","body":""},{"hash":"36ea5e24","date":"2026-08-31 15:39:03 -0700","author":"Steve","subject":"TK-11047 converge next 500 Carnegie specs","body":""},{"hash":"314c1245","date":"2026-08-31 15:09:04 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T15:07:00 (2 data files) — data/carnegie-spec-bulk-RESTORE-2026-08-31T21-37-42-611Z.json data/carnegie-spec-bulk-RESULT-2026-08-31T21-58-24-629Z.json","body":""},{"hash":"c99c3f72","date":"2026-08-31 14:37:15 -0700","author":"Steve","subject":"TK-11047 sync 500 Carnegie product specs","body":""},{"hash":"d890bd77","date":"2026-08-31 14:31:05 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T14:28:57 (2 data files) — data/carnegie-spec-bulk-RESTORE-2026-08-31T21-11-23-720Z.json data/carnegie-spec-bulk-RESULT-2026-08-31T21-11-23-720Z.json","body":""},{"hash":"8406563d","date":"2026-08-31 14:07:19 -0700","author":"Steve","subject":"TK-11047 verify 100 Carnegie spec updates","body":""},{"hash":"7fc79f2d","date":"2026-08-31 13:53:23 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T13:51:21 (1 data files) — DW-Programming/versa-evo-pvcfree-scraper.js.backup-20260831-132000","body":""},{"hash":"23131e83","date":"2026-08-31 13:52:16 -0700","author":"Steve","subject":"TK-11047 add verified Carnegie spec bulk runner","body":""},{"hash":"7564cd40","date":"2026-08-31 13:15:40 -0700","author":"Steve","subject":"TK-11047 sync Carnegie Terrain A7 specs canary","body":""},{"hash":"4fc99fff","date":"2026-08-31 13:15:31 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T13:13:14 (2 data files) — data/carnegie-spec-canary-7925801418803-restore.json data/carnegie-spec-canary-7925801418803-result.json","body":""},{"hash":"dd679181","date":"2026-08-31 11:19:41 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T11:17:15 (6 data files) — shopify/scripts/audits/dwtt-af-spec-audit.json shopify/scripts/audits/dwtt-conflict-sku-fix.json shopify/scripts/audits/dwtt-single-roll-dimensions-wave1.json shopify/scripts/audits/single-roll-brands-min-step-audit.json shopify/scripts/audits/stale-room-renders-audit.json","body":""},{"hash":"77d1bace","date":"2026-08-31 10:53:27 -0700","author":"Steve","subject":"importer: map global.width metafield (Carnegie-class fix)","body":""},{"hash":"1eac8b4a","date":"2026-08-31 10:51:24 -0700","author":"claude-run-13","subject":"TK-13 Option B: stop git-bloat churn — untrack 524 regenerable generated-data files (bucketB/tk135 tsv/yw-results/audits jsonl/scraper-status/fabricut+ledger) + .gitignore them; no history rewrite, working files intact, reversible via git revert","body":""},{"hash":"98dded9a","date":"2026-08-31 10:43:44 -0700","author":"Steve Abrams","subject":"template: map global.width metafield so forked importers clear the activation gate","body":""},{"hash":"2978dddb","date":"2026-08-31 09:31:00 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T09:29:05 (1 data files) — DW-Programming/data/fabricut-posted-patterns.json","body":""},{"hash":"44633e2f","date":"2026-08-31 03:18:24 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T03:16:33 (2 data files) — DW-Programming/ImportNewSkufromURL/yw-results/437-RD336-20260831T030005.json DW-Programming/ImportNewSkufromURL/yw-results/latest.json","body":""},{"hash":"243f0695","date":"2026-08-31 02:41:21 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T02:39:25 (2 data files) — DW-Programming/ImportNewSkufromURL/data/scraper-audit/scraper-status.json scripts/room-image-push/ledger.json","body":""},{"hash":"05b61dfb","date":"2026-08-31 02:03:32 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T02:00:54 (1 data files) — shopify/scripts/data/bucketB/longtail-land-20260831T000105.json","body":""},{"hash":"bbe955c8","date":"2026-08-31 01:45:29 -0700","author":"Steve","subject":"cover existing retail sample allowance","body":""},{"hash":"db57aff5","date":"2026-08-31 00:09:23 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T00:07:16 (2 data files) — shopify/scripts/audits/doubleroll-lengths-thibaut-before.jsonl shopify/scripts/audits/doubleroll-lengths-wallquest-before.jsonl","body":""},{"hash":"00ba31fa","date":"2026-08-30 23:41:55 -0700","author":"Steve","subject":"fix(TK-10965): guard remaining importer inventory-stamp sites (completeness pass)","body":"Completeness pass over the 7 remaining unguarded 2026 inventory-stamp sites\nfound after b83a37b.\n\nGuarded (real sellable stamps, now route through safeStampQuantity):\n- shopify/scripts/cadence/remediate-channels-inventory.js — SCAN now fetches\n  variant price + product tags; a $0/quote-only sellable variant is no longer\n  pushed to skusToSet (never stamped 2026). Wolf Gordon/LA-Fabrics/Innovations\n  $0 quote lines were the real risk.\n- DW-Programming/ralph-lauren-fabric-updater-9899.js — variants query fetches\n  title/price + product tags/vendor; the per-variant quantity flows through\n  safeStampQuantity. RL fabrics are priced (defensive-only) but guarded regardless.\n\nIntentionally UNGUARDED, comment added so a future audit doesn't re-flag:\n- shopify/scripts/add-missing-samples-v2.js — stamps the new $4.25 Sample only.\n- shopify/scripts/fix-samples-graphql.js — creates the $4.25 Sample only.\n\nNo live stamp in code (2026 was a header-comment claim only) — clarifying note added:\n- DW-Programming/as-creation-shopify-push.js\n- DW-Programming/hollywood-shopify-push.js\n- shopify/scripts/wolf-gordon-shopify-push.js\n\nBehavior-preserving for all priced lines. node --check passes on all 7; guard\nrequire() resolves + behaves from both new locations (Node v26 require(esm)).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"b83a37b1","date":"2026-08-30 23:23:58 -0700","author":"Designer Wallcoverings","subject":"fix(TK-10965): guard importer inventory stamp — never stock a $0/quote-only sellable variant","body":"Vendors the pure inventory-stamp-guard into shopify/scripts/lib/ and applies\nsafeStampQuantity() at every 2026-stamp site so a SELLABLE variant that is\npriced $0 or on a quote-only/price-suppressed line gets 0 stock (not orderable)\ninstead of the cap-free 2026 literal. Behavior unchanged for normal priced lines.\n\nLive: cadence/cadence-import.js (setInventory2026 restamp) +\ntemplates/new-product-import-template.js (create-payload availableQuantity).\nRetired (patched for consistency, not scheduled): command54-shopify-push.js,\njustindavid-shopify-push.js. 8/8 unit tests pass.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"8d8a8c63","date":"2026-08-30 09:40:07 -0700","author":"Steve","subject":"Record TK-10832 Codex comparison evidence","body":""},{"hash":"96a93b90","date":"2026-08-30 09:39:30 -0700","author":"Steve","subject":"Harden PJ mailer draft safety and mobile layout","body":""},{"hash":"652e9641","date":"2026-08-30 09:35:08 -0700","author":"Steve Abrams","subject":"PJ Fall 2026 mailer: editorial precision fixes from Cody gate (draft)","body":"Verified-real findings from the contrarian pass, fixed:\n- 'Journey' (the real PJ Fall 2026 collection name) was orphaned — appeared\n  once, buried at the assortment line with no setup. Introduced it in the lede\n  so it lands with meaning.\n- Preheader casing 'Cirque De Soho' -> 'Cirque de Soho' to match the HTML body\n  (4x) and correct French proper-noun casing.\n\nDropped as phantom after checking PJ's own Fall 2026 source page: 'embroidered\nraffia' (real, appears in vendor what's-new 2x) and the 'Vinyl' category pill\n(PJ Fall 2026 genuinely includes vinyl; pill target is a verified-live page).\n\nEmpirically proven this cycle: rendered in real Chromium desktop+mobile, 5/5\nimages load, 17 links all https into the DW store, DW PJ-collection target\nresolves live, only console error is a harness favicon 404. dry-run 9/9 PASS.\nDRAFT ONLY — nothing sent, CC_LIVE unset.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"bf83b0bf","date":"2026-08-30 09:19:46 -0700","author":"Steve Abrams","subject":"PJ Fall 2026 mailer: compliance-clean draft (softens 'stocked'->'available' per §17529.5), ignore scrape dumps","body":"- comms-compliance audit PASS-WITH-FIXES: sole actionable finding was the\n  'stocked to the trade' claim implying physical inventory (Cal. B&P §17529.5).\n  Softened to 'available to the trade' in both HTML instances + the CC preheader\n  — accurate and inventory-assertion-free.\n- Verified: dry-run 9/9 PASS, all 5 vendor-CDN image hotlinks live 200 image/jpeg\n  (byte-for-byte match to committed local asset copies).\n- Added mailers/assets/pj-fall-2026/.gitignore for regenerable scrape-dump HTML.\n- DRAFT ONLY. Nothing sent; CC_LIVE unset; --confirm not run. Send remains gated.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"c8098219","date":"2026-08-30 09:07:57 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-30T09:05:58 (1 data files) — DW-Programming/data/fabricut-posted-patterns.json","body":""},{"hash":"0b250cb5","date":"2026-08-30 06:40:13 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-30T06:38:24 (2 data files) — shopify/collection-hero-fix/tk10056-hero-rotate/backups/graduate-collection.json shopify/collection-hero-fix/tk10056-hero-rotate/backups/jute.json","body":""},{"hash":"21d0f7ef","date":"2026-08-30 03:33:13 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-30T03:31:23 (2 data files) — DW-Programming/ImportNewSkufromURL/yw-results/437-RD336-20260830T030005.json DW-Programming/ImportNewSkufromURL/yw-results/latest.json","body":""},{"hash":"08daa929","date":"2026-08-30 02:56:15 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-30T02:54:23 (1 data files) — DW-Programming/ImportNewSkufromURL/data/scraper-audit/scraper-status.json","body":""},{"hash":"8c11b4fb","date":"2026-08-30 02:19:19 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-30T02:17:29 (1 data files) — scripts/room-image-push/ledger.json","body":""},{"hash":"f9888a1f","date":"2026-08-30 01:42:08 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-30T01:40:22 (1 data files) — shopify/scripts/data/bucketB/longtail-land-20260830T000105.json","body":""},{"hash":"7f6e72b0","date":"2026-08-29 09:08:08 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-29T09:06:18 (1 data files) — DW-Programming/data/fabricut-posted-patterns.json","body":""},{"hash":"8e5e4f87","date":"2026-08-29 03:33:24 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-29T03:31:35 (2 data files) — DW-Programming/ImportNewSkufromURL/yw-results/437-RD336-20260829T030003.json DW-Programming/ImportNewSkufromURL/yw-results/latest.json","body":""},{"hash":"cd713cbd","date":"2026-08-29 02:56:19 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-29T02:54:24 (1 data files) — DW-Programming/ImportNewSkufromURL/data/scraper-audit/scraper-status.json","body":""},{"hash":"57d0d44a","date":"2026-08-29 02:19:24 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-29T02:17:31 (1 data files) — scripts/room-image-push/ledger.json","body":""},{"hash":"b29989b5","date":"2026-08-29 01:41:54 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-29T01:39:58 (1 data files) — shopify/scripts/data/bucketB/longtail-land-20260829T000105.json","body":""},{"hash":"92346410","date":"2026-08-28 09:41:21 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-28T09:39:28 (1 data files) — DW-Programming/data/fabricut-posted-patterns.json","body":""},{"hash":"6a138285","date":"2026-08-28 08:34:52 -0700","author":"Steve","subject":"restore returning sign-in button contrast","body":""},{"hash":"b446efde","date":"2026-08-28 08:32:47 -0700","author":"Steve","subject":"clear trade hero below header logo","body":""}]}