{"slug":"sanderson-onboard","total":179,"limit":100,"offset":0,"since":null,"commits":[{"hash":"4ddb0bd","date":"2026-09-26 07:49:01 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-26T07:48:27 (4 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/manifest-morris.json pilot/queue-today.json","body":""},{"hash":"507de41","date":"2026-09-26 06:47:47 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-26T06:47:29 (3 data files) — pilot/cadence.log pilot/manifest-harlequin.json pilot/manifest-zoffany.json","body":""},{"hash":"9bac925","date":"2026-09-26 05:46:29 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-26T05:45:52 (2 data files) — pilot/cadence.log pilot/manifest-sanderson.json","body":""},{"hash":"1bd87b1","date":"2026-09-26 04:44:45 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-26T04:44:27 (1 data files) — pilot/cadence.log","body":""},{"hash":"f6b719e","date":"2026-09-24 07:38:16 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-24T07:37:57 (4 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/manifest-morris.json pilot/queue-today.json","body":""},{"hash":"7bd08e8","date":"2026-09-24 07:06:49 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-24T07:06:26 (2 data files) — pilot/cadence.log pilot/manifest-zoffany.json","body":""},{"hash":"a759ec9","date":"2026-09-24 06:34:53 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-24T06:34:34 (2 data files) — pilot/cadence.log pilot/manifest-harlequin.json","body":""},{"hash":"bc631ac","date":"2026-09-24 05:31:14 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-24T05:30:55 (2 data files) — pilot/cadence.log pilot/manifest-sanderson.json","body":""},{"hash":"319c4a6","date":"2026-09-24 04:59:51 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-24T04:59:33 (1 data files) — pilot/cadence.log","body":""},{"hash":"e1c69d4","date":"2026-09-23 07:57:07 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T07:56:48 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"960bf42","date":"2026-09-23 07:25:42 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T07:25:20 (5 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/manifest-morris.json pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"f5e8cb4","date":"2026-09-23 06:54:08 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T06:53:48 (3 data files) — pilot/cadence.log pilot/manifest-harlequin.json pilot/manifest-zoffany.json","body":""},{"hash":"898789f","date":"2026-09-23 05:50:49 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T05:50:13 (2 data files) — pilot/cadence.log pilot/manifest-sanderson.json","body":""},{"hash":"1db0c56","date":"2026-09-23 04:47:52 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-23T04:47:26 (1 data files) — pilot/cadence.log","body":""},{"hash":"990fe42","date":"2026-09-22 17:52:48 -0700","author":"Steve Abrams","subject":"Fix: replace hardcoded-path shim with portable resolution (TK-11786)","body":"The inventory-stamp-guard.mjs shim now resolves via DW_SHARED_GUARDS env or\nhome-dir fallback instead of hardcoded /Users/macstudio3 path. This enables\nthe guard to work on Kamatera (/root), Mac1, and any other machine.\n\nESM consumers (import) work correctly. CJS consumers (require) fail safely\nwith ERR_REQUIRE_ASYNC_MODULE, preventing silent bad defaults on inventory\nstamps.\n\nOriginal vendored copy preserved as inventory-stamp-guard.mjs.pre-shared-lift.\nThe $0-orderable guard (TK-11357) now has ONE source of truth at\n~/Projects/_shared/dw-guards/.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WoD95uATtwJXUZvQ7PNPsB"},{"hash":"f62ba40","date":"2026-09-22 11:44:31 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T11:43:24 (1 data files) — scripts/lib/inventory-stamp-guard.mjs.pre-shared-lift","body":""},{"hash":"39285ca","date":"2026-09-21 05:34:31 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-21T05:33:35 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"9c0fa3f","date":"2026-09-21 05:02:12 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-21T05:01:17 (4 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"68b14c4","date":"2026-09-20 05:36:11 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-20T05:34:32 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"cd91a5f","date":"2026-09-20 05:02:45 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-20T05:01:07 (7 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/manifest-harlequin.json pilot/manifest-sanderson.json pilot/manifest-zoffany.json","body":""},{"hash":"0229d9e","date":"2026-09-20 04:12:57 -0700","author":"Steve Abrams","subject":"TK-11829: add Morris & Co SDG mfr_sku backfill scripts","body":"- backfill_morris_catalog_sdg.sql: upserts 1087 DWWM-600xxx products\n  from manifest-morris.json into william_morris_catalog (Mac2-canonical)\n- william_morris_catalog_restore_map_pre_sdg_backfill.csv: 339-row\n  pre-backfill restore snapshot\n\nApplied: 1087 rows inserted, 878 with shopify_product_id (on_shopify=TRUE)\nUndo: DELETE FROM william_morris_catalog WHERE dw_sku LIKE 'DWWM-6%'\n      AND created_at > NOW() - INTERVAL '1 hour';"},{"hash":"dc867b3","date":"2026-09-19 10:00:29 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-19T09:59:20 (6 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/manifest-morris.json pilot/queue-today-vision-blocked.json pilot/queue-today.json","body":""},{"hash":"b059fb9","date":"2026-09-19 08:24:48 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-19T08:23:45 (2 data files) — pilot/cadence.log pilot/manifest-zoffany.json","body":""},{"hash":"7461cac","date":"2026-09-19 06:49:43 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-19T06:48:50 (2 data files) — pilot/cadence.log pilot/manifest-harlequin.json","body":""},{"hash":"905d6d5","date":"2026-09-19 05:45:55 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-19T05:44:32 (2 data files) — pilot/cadence.log pilot/manifest-sanderson.json","body":""},{"hash":"1b146ef","date":"2026-09-19 04:41:31 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-19T04:40:20 (1 data files) — pilot/cadence.log","body":""},{"hash":"acd34d8","date":"2026-09-18 08:24:14 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-18T08:22:45 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"fe5d845","date":"2026-09-18 07:51:38 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-18T07:49:41 (6 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/manifest-morris.json pilot/queue-today-vision-blocked.json pilot/queue-today.json","body":""},{"hash":"19664fc","date":"2026-09-18 06:46:29 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-18T06:45:31 (3 data files) — pilot/cadence.log pilot/manifest-harlequin.json pilot/manifest-zoffany.json","body":""},{"hash":"2b2c0bd","date":"2026-09-18 05:42:28 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-18T05:41:24 (2 data files) — pilot/cadence.log pilot/manifest-sanderson.json","body":""},{"hash":"7c76ee7","date":"2026-09-18 04:38:37 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-18T04:37:40 (1 data files) — pilot/cadence.log","body":""},{"hash":"4e40f36","date":"2026-09-17 05:37:30 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-17T05:36:32 (5 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today-vision-blocked.json pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"08ea60a","date":"2026-09-17 05:05:13 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-17T05:03:29 (2 data files) — pilot/cadence.log pilot/queue-today.json","body":""},{"hash":"49f73ae","date":"2026-09-17 04:32:03 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-17T04:30:36 (1 data files) — pilot/cadence.log","body":""},{"hash":"c069ecd","date":"2026-09-16 10:24:10 -0700","author":"Steve Abrams","subject":"reauth.sh: mark executable so a bare path runs (no 'bash' prefix needed)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01HHf4p8mm5kYdVRQJuh6Cwu"},{"hash":"e269e66","date":"2026-09-16 05:44:58 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-16T05:44:01 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"971dfbd","date":"2026-09-16 05:13:20 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-16T05:12:15 (5 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today-vision-blocked.json pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"a590ea7","date":"2026-09-16 04:40:52 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-16T04:39:34 (1 data files) — pilot/cadence.log","body":""},{"hash":"621a604","date":"2026-09-15 06:38:29 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-15T06:37:28 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"cb4633e","date":"2026-09-15 06:06:08 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-15T06:04:48 (5 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today-vision-blocked.json pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"7a19e65","date":"2026-09-15 05:33:29 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-15T05:32:03 (5 data files) — pilot/cadence.log pilot/manifest-harlequin.json pilot/manifest-sanderson.json pilot/manifest-zoffany.json pilot/queue-today.json","body":""},{"hash":"4726f6b","date":"2026-09-15 05:01:13 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-15T04:59:55 (1 data files) — pilot/cadence.log","body":""},{"hash":"2c6aabf","date":"2026-09-14 07:19:20 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-14T07:18:26 (2 data files) — pilot/cadence.log pilot/manifest-zoffany.json","body":""},{"hash":"ffcb4e4","date":"2026-09-14 06:47:30 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-14T06:45:42 (2 data files) — pilot/cadence.log pilot/manifest-harlequin.json","body":""},{"hash":"89aaf96","date":"2026-09-14 05:42:42 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-14T05:41:34 (2 data files) — pilot/cadence.log pilot/manifest-sanderson.json","body":""},{"hash":"adc1dfb","date":"2026-09-14 04:38:32 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-14T04:37:30 (1 data files) — pilot/cadence.log","body":""},{"hash":"24b4cfc","date":"2026-09-13 05:57:03 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-13T05:55:37 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"64593e3","date":"2026-09-13 05:24:10 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-13T05:22:51 (5 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today-vision-blocked.json pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"10b1e93","date":"2026-09-13 04:50:38 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-13T04:48:57 (2 data files) — pilot/cadence.log pilot/queue-today.json","body":""},{"hash":"bdbbf26","date":"2026-09-12 06:40:59 -0700","author":"Steve Abrams","subject":"chore: v1.1.2 (TK-11471 session close — per-run cadence weight proof + verified heal)","body":"Patch: the heal now verifies itself and the verifier no longer reports a top-level\nPASS on a run it admits proves nothing. No API change.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>"},{"hash":"627ad5c","date":"2026-09-12 05:40:04 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-12T05:38:11 (5 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today-vision-blocked.json pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"126b4bc","date":"2026-09-12 05:05:42 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-12T05:03:08 (2 data files) — pilot/cadence.log pilot/queue-today.json","body":""},{"hash":"d9e8fa8","date":"2026-09-11 11:57:54 -0700","author":"Steve Abrams","subject":"TK-11471: verify the SDG weight heal, and stop the verifier reading green on a pre-fix run","body":"Two findings from an independent red-team of this ticket's own work.\n\n1. THE REFERENCE IMPLEMENTATION DIDN'T VERIFY ITSELF. create_sdg.mjs goLive() — the code\n   every other site's self-heal-then-verify design was modeled on — fired\n   `await gql(M_WEIGHT, ...)` and DISCARDED the result: no userErrors check, no re-query,\n   straight into M_ACT/M_QTY/M_PUB/M_ACTIVE. A heal that silently failed (a userError, a\n   token without write_inventory, a throttle) published the product ACTIVE at zero weight\n   anyway — the exact leak the guard was added to stop. The mutation's own 200 is not\n   evidence the weight is set; only re-reading it is.\n   Now: userErrors are inspected, the live product is RE-QUERIED after the heal, and any\n   variant still zero — or an empty re-verify, which is unmeasured, not clean — returns\n   { gated: 'weight>0' } and the product stays DRAFT.\n\n   The caller needed the same fix one level up: it did not branch on the hold, so a held\n   product fell through and was recorded action:'CREATED' with status:undefined and logged\n   as a ✓, counting a hold as a success. It now records HELD_DRAFT and increments `held`.\n   (The finish-pending path was already safe — it gates on status === 'ACTIVE'.)\n\n2. THE VERIFIER SHIPPED A TOP-LEVEL PASS ON A RUN IT ADMITS PROVES NOTHING.\n   verify_cadence_weights.mjs emitted verdict/status PASS for a post_fix:false run with the\n   caveat buried in `detail`. fleet-health-rollup renders the panel dot from the top-level\n   verdict, so a glance-only reader saw GREEN on evidence the code itself says is not\n   evidence — the false green this skill exists to prevent. Per CLAUDE.md TK-11431\n   amendment 1 (an unmeasured input is never PASS), a pre-fix run is now downgraded to\n   UNKNOWN/WARN with the domain word kept in domain_verdict. Confirmed at the consumer:\n   the rollup row for sdg-cadence-weight-verify now reads WARN, not green.\n\nTests: create_sdg_weight_heal.test.mjs 8/8, verify_cadence_weights.test.mjs 7/7 — both run.\nMutation-verified RED on scratch copies: revert the heal to fire-and-forget -> 4 failures;\ncaller stops branching on gl.gated -> 1; Q_V stops selecting weight -> 1.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01FJHxAzaEMMxado57mFjiCk"},{"hash":"5507351","date":"2026-09-11 11:28:34 -0700","author":"Steve Abrams","subject":"TK-11471: per-RUN weight proof for the SDG publish cadence","body":"TK-11414 fixed create_sdg.mjs (8d09eed) so the SDG cadence stops shipping zero-weight\nproducts live, but \"the fix is committed\" is not \"the fix works in a real run\" — and the\ncadence is the thing that put 385 zero-weight ACTIVE variants live overnight.\n\n- verify_cadence_weights.mjs: READ-ONLY. Resolves the inventoryItem ids of exactly the\n  products a given cadence run created (pilot/cadence.log run headers x create-audit.jsonl)\n  and asserts weight>0 on each against live Shopify, so an offender is attributable to the\n  RUN. dw-active-weight-canary cannot do this — it counts catalog-wide rows with no\n  provenance, so a clean catalog with a still-broken producer looks identical to a fixed one.\n  Fails CLOSED: an unreadable variant is UNMEASURED => UNKNOWN/WARN, never PASS. Owns its own\n  --heartbeat and writes a verdict on EVERY exit path including an uncaught throw, so a dead\n  verifier reports WARN instead of leaving no row on the morning panel.\n  Carries post_fix, and a PASS on a pre-fix run says in its own detail that it is evidence of\n  the backfill healing the run after the fact, NOT of the fix holding.\n\n- verify_cadence_weights.test.mjs: the negative test (7/7 PASS). Drives the pure classify()\n  with injected faults — zero-weight sellable, zero-weight SAMPLE (samples count; the canary\n  FAILs on them too), null measurement, unreadable id, empty read, negative, NaN — and asserts\n  each goes RED. Live history cannot supply a red case because the TK-11414 backfill already\n  healed every pre-fix run, so faults are injected instead.\n\n- cadence_resume.sh: runs the verify as step 5, so every daily run self-proves. `|| VRC=$?`\n  because the script runs under `set -e` and a bare call would abort the cadence the first\n  time verification reported FAIL; verified non-fatal on exit 1 and 2.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01FJHxAzaEMMxado57mFjiCk"},{"hash":"8d09eed","date":"2026-09-11 09:17:29 -0700","author":"Steve Abrams","subject":"TK-11414: stop the SDG weight leak at the source (create_sdg.mjs)","body":"SDG publish cadence shipped every variant with NO weight -> 385 went live zero-weight overnight.\n- vendored lib/weight-guard.mjs\n- create payload: sellable + Sample carry weight (per-type default / 0.25lb)\n- goLive: sets default weight on any zero-weight variant before activating (enforces the rule\n  + self-heals the finish-pending backlog).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"1fe3fca","date":"2026-09-11 05:33:06 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-11T05:32:16 (5 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today-vision-blocked.json pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"928bb57","date":"2026-09-11 04:58:52 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-11T04:57:32 (2 data files) — pilot/cadence.log pilot/queue-today.json","body":""},{"hash":"5c8dbdf","date":"2026-09-11 01:41:04 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-11T01:40:13 (1 data files) — data/NEEDS_REAUTH","body":""},{"hash":"edc210b","date":"2026-09-10 09:30:29 -0700","author":"Steve","subject":"TK-11357 Fix D: route create_sdg's inventory stamp through the shared $0 guard (defence-in-depth)","body":"NOT a live-risk closure — stated plainly. create_sdg.mjs is ALREADY effectively guarded:\ngate() pushes 'no-price' when !(parseFloat(it.retail_usd) > 0) and the caller `continue`s on\nSKIP-HELD before any product create or inventory mutation; and it is CREATE-ONLY and\nmanifest-bounded (manifest-{harlequin,morris,sanderson,zoffany}.json = 5,655 items, ZERO\nPhillipe Romano, no productByHandle / no products(first: sweep), so it only writes to pids it\ncreated and cannot re-inflate a pre-existing cohort). Verified, not assumed.\n\nWhat it lacked was the guarantee AT THE WRITE SITE. goLive() re-reads the product and stamped\nTARGET_QTY on every variant, and the finish-pending path calls goLive() on drafts created by an\nEARLIER run whose live prices it never re-checks. The stamp now goes through the shared guard\n(lib/inventory-stamp-guard.mjs, vendored) so the invariant holds at the mutation itself rather\nthan only in an upstream manifest field.\n\nQ_V now also selects variant title+price and product vendor+tags. Confirmed empirically safe for\nthis cadence: all 4 manifests carry ZERO quote/needs-price/contact-for-price tags and no vendor\nis a price-suppressed line, so the guard's quote-only branch cannot fire and this is a strict\nno-op for today's population — it only changes behaviour if a $0 variant ever reaches the stamp.\n\nThis matters because com.steve.sdg-publish-cadence is LOADED and runs cadence_resume.sh daily\nat 04:30 PDT, so the write site is unattended.\n\nProven by Designer-Wallcoverings/shopify/scripts/tk11357-source-fix-proof/predicate-proof.mjs:\n4/4 required + 3/3 regression on the predicate EXTRACTED from this file.\nSOURCE-ONLY: nothing run with --apply, no Shopify write. Reversible: git revert.\n\nCo-Authored-By: Claude Opus 5 <noreply@anthropic.com>"},{"hash":"f7d2426","date":"2026-09-10 05:56:17 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-10T05:55:20 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"d4db064","date":"2026-09-10 05:23:51 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-10T05:23:03 (5 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today-vision-blocked.json pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"fa4d39b","date":"2026-09-10 04:50:56 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-10T04:50:00 (2 data files) — pilot/cadence.log pilot/queue-today.json","body":""},{"hash":"65a8c0b","date":"2026-09-09 05:46:42 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-09T05:45:52 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"ef454d3","date":"2026-09-09 05:14:39 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-09T05:13:58 (5 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today-vision-blocked.json pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"90151ab","date":"2026-09-09 04:41:44 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-09T04:40:57 (1 data files) — pilot/cadence.log","body":""},{"hash":"b247757","date":"2026-09-08 05:14:20 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-08T05:12:15 (4 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"4ff36bf","date":"2026-09-08 04:35:30 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-08T04:33:12 (1 data files) — pilot/cadence.log","body":""},{"hash":"f999a3c","date":"2026-09-07 05:35:52 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-07T05:33:36 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"fcf4240","date":"2026-09-07 04:57:17 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-07T04:54:58 (4 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"d377662","date":"2026-09-06 05:15:55 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-06T05:13:44 (4 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"aef8255","date":"2026-09-06 04:37:03 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-06T04:34:41 (2 data files) — pilot/cadence.log pilot/queue-today.json","body":""},{"hash":"a70d7a9","date":"2026-09-05 05:37:05 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-05T05:34:51 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"d3f540c","date":"2026-09-05 04:58:36 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-05T04:56:24 (4 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"4eb1f7d","date":"2026-09-04 11:46:47 -0700","author":"Steve Abrams","subject":"TK-11256: fix gallery-image cross-contamination in Sanderson extractor","body":"Root cause of dw-image-identity-canary FAIL (Sanderson foreign_products\n6 -> 24, foreign_imgs 6 -> 41): the gallery extractor swept EVERY\nstatic/media/catalog/product/*.jpg URL anywhere on the raw PDP HTML\n(IMG.findall(h) over the whole page) into that product's gallery_images.\nSanderson's PDP always embeds a 'shop other colourways' swatch carousel\n(other SKUs' hero images at 64w) plus cross-sell 'shop the room' panels\n(other products' images at 1080w) on every product page, so those foreign\nimages got written into the wrong SKU's gallery on the next re-scrape.\n\nVerified live against 3 real PDPs (SAW0094-01, SAW0094-03, SAW0224-01,\nSAW0079-02): the product's OWN real gallery/detail shots consistently\nrender at srcset max-width 2560 (often with the SKU literally embedded in\nthe filename, e.g. ..._SAW0224_01_SANDERSON_Carpet_Garden_WALLPAPER...),\nwhile every foreign image tops out at 1080w or 64w -- a clean, reproducible\nseparation. New own_gallery() scopes extraction to >=1500w srcset entries\nonly; falls back to the single primary image (never the old whole-page\nsweep) if no such image is found on a PDP shape variant.\n\nCode-only -- no scrape run, no dw_unified/Shopify writes. The 24 already-\nlive contaminated products need a gallery-image correction on Shopify --\ngated, see pending-approval memo."},{"hash":"a721805","date":"2026-09-04 05:17:32 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-04T05:15:13 (5 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/queue-today-vision-blocked.json pilot/queue-today.json pilot/restore-map.jsonl","body":""},{"hash":"0333af7","date":"2026-09-04 04:38:40 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-04T04:33:28 (1 data files) — pilot/cadence.log","body":""},{"hash":"1cbf0ec","date":"2026-09-03 07:59:13 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T07:56:56 (3 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"7267fb8","date":"2026-09-03 07:20:36 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T07:17:12 (17 data files) — pilot/cadence.log pilot/create-audit.jsonl pilot/held-harlequin.json pilot/held-morris.json pilot/held-sanderson.json","body":""},{"hash":"f446fd5","date":"2026-09-03 04:47:09 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-03T04:44:57 (3 data files) — pilot/cadence.launchd.err.log pilot/cadence.launchd.out.log pilot/cadence.log","body":""},{"hash":"cb01bb1","date":"2026-09-02 11:30:53 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-02T11:28:31 (6 data files) — .playwright-mcp/console-2026-09-02T18-19-37-214Z.log .playwright-mcp/page-2026-09-02T18-19-38-930Z.yml pilot/build_manifest_morris_verify.log pilot/manifest-morris.FINALIZED-20260902T181058Z.json.bak pilot/morris_image_backfill.sql","body":""},{"hash":"be278d0","date":"2026-09-02 11:01:27 -0700","author":"Steve Abrams","subject":"TK-10881: Morris & Co image re-harvest -> 1152/1162 (99.1%) verified images staged to manifest-morris.json","body":"Source = wmorrisandco.com (Magento2, Cloudflare-gated) via openclaw real-Chrome in-page fetch of\nsitemap + PDP og:image. Every image HTTP-200 image/* validated on the un-challenged media CDN ($0).\nTitle-parse QA gate guards against wrong-colorway joins. Manifest staging only -- no Shopify/DB/launchd.\nSettlement gate flagged mandatory before publish (Morris is botanical/floral-heavy). 10 still-missing\ndocumented (US-discontinued / not-on-site).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016v9v4criKkzfiaNWRNrvxp"},{"hash":"43ac3dd","date":"2026-09-02 10:51:17 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-02T10:48:45 (17 data files) — pilot/manifest-morris.json pilot/morris-image-restore-map.json pilot/morris-image-source-finding.md pilot/morris_image_harvest.jsonl pilot/morris_image_qa_flags.json","body":""},{"hash":"4cc645e","date":"2026-09-02 10:12:00 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-02T10:09:29 (2 data files) — pilot/morris-image-match-preview.jsonl pilot/morris-image-source-finding.md","body":""},{"hash":"3bf4d84","date":"2026-08-31 12:51:40 -0700","author":"Steve Abrams","subject":"TK-10881: activated the final 2 fresh SDG products (DWXH-600067/68) — validateBeforeActivate PASS, 192 already active; 194/194 complete","body":""},{"hash":"83f5d7b","date":"2026-08-31 11:58:04 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T11:55:57 (2 data files) — pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"da24f01","date":"2026-08-31 11:40:21 -0700","author":"Steve Abrams","subject":"route rollback_sdg undo path to SHOPIFY_FULL_ACCESS_TOKEN to match forward path (TK-10979 DTD-A)","body":""},{"hash":"37e845d","date":"2026-08-31 11:19:38 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T11:17:15 (2 data files) — pilot/create-audit.jsonl pilot/restore-map.jsonl","body":""},{"hash":"461a34a","date":"2026-08-31 11:07:43 -0700","author":"Steve Abrams","subject":"TK-00058: pre-reprice snapshot (Sanderson +10% UK duty rollback source)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"cc802e1","date":"2026-08-31 10:59:34 -0700","author":"Steve Abrams","subject":"route create_sdg to SHOPIFY_FULL_ACCESS_TOKEN for write_inventory (TK-10979 DTD-A bridge)","body":""},{"hash":"79bbeca","date":"2026-08-31 10:06:38 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T10:06:07 (3 data files) — tk10873/apply_labeling.live_plan.json tk10873/apply_labeling.restore_map.preview.json tk10873/retire_dupes.restore_map.preview.json","body":""},{"hash":"494134f","date":"2026-08-31 09:53:08 -0700","author":"Steve Abrams","subject":"chore: lint (1 dead-var removed) + refactor (named consts, toRestoreRows helper, revert-map guards — behavior-preserving), v1.1.2 → v1.2.0 (session close)","body":""},{"hash":"2d6ad38","date":"2026-08-31 09:48:50 -0700","author":"Steve Abrams","subject":"TK-10873: record live labeling restore map (44 rows) — the shipped-labeling undo artifact","body":""},{"hash":"7fdd9d8","date":"2026-08-31 09:30:56 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-31T09:29:05 (4 data files) — tk10873/retire_dupes.restore_map.live.json tk10873/zoffany_fabric_ZAQF322696.restore_map.live.json tk10873/zoffany_optionA_promotions_v7.restore_map.live.json tk10873/zoffany_roll_ZDAR312861_highclere.restore_map.live.json","body":""},{"hash":"7fd6304","date":"2026-08-31 09:15:53 -0700","author":"Steve Abrams","subject":"TK-10873: apply_labeling.mjs dry-run 44/44 clean (dropped retired ZDAR312884 orphan) — renames sellable value 'Sold Per Roll'/'Default Title'->'Per Yard' + appends per-yard coverage copy; restore-map-first, self-ledgered; one keystroke on approval","body":""},{"hash":"b7e94de","date":"2026-08-31 08:41:26 -0700","author":"Steve Abrams","subject":"TK-10873: add restore-map-first apply_labeling.mjs (dry-run verified, gated)","body":"Dry-run resolves 45/45 wide-width Zoffany SKUs live. Real pre-state:\n43 carry 'Sold Per Roll' (mislabeled as roll for per-yard goods), 2 carry\n'Default Title' — all rename to 'Per Yard' + append per-yard PDP line.\nSample variant/value/$4.25 never in any write set. Mirrors\nreprice_live_runbook.mjs safety pattern: restore-map-first, fail-closed,\n--apply guarded by --i-understand-this-is-live, --revert, ledgered.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"c12e702","date":"2026-08-31 05:12:06 -0700","author":"Steve Abrams","subject":"TK-10873: build retire_dupes.mjs (restore-map-first, reversible) — dry-run 2/2 clean; DUPES card now one-keystroke (retire Tigers Eye + Papaver orphans ACTIVE->DRAFT)","body":""},{"hash":"9b37d1b","date":"2026-08-31 04:36:34 -0700","author":"Steve Abrams","subject":"TK-10873: record 313114 resolution in decisions doc — mapping confirmed via image cross-ref, sample-only dupe of ZOW0146-01, DM moot; every held item now closed","body":""},{"hash":"7da95c2","date":"2026-08-31 04:24:00 -0700","author":"Steve Abrams","subject":"TK-10873: Highclere Paris Grey RESOLVED — standard roll at $148 (£-as-USD, held out of 277 fix); gated reprice card at conservative $382; LAST held item closed","body":""},{"hash":"cc12cba","date":"2026-08-31 04:11:16 -0700","author":"Steve Abrams","subject":"TK-10873: unit-labeling spec for the 45 v7 wide-width SKUs (variant->Per Yard + coverage copy); gated pair to the reprice, closes the coverage-confusion risk","body":""},{"hash":"a38bad0","date":"2026-08-31 04:01:30 -0700","author":"Steve Abrams","subject":"TK-10873: ZAQF322696 fabric RESOLVED — structure correct (per-yard $132 + sample), but $132 is £-as-USD; US list $370/yd (2 sources); gated reprice card drafted (+180%); only 1 Zoffany fabric so bounded","body":""}]}