Sister Parish Onboarding

repo: ~/Projects/sister-parish-onboarding · 33 commits · 0 in last 24h, 3 in last 7d · █▄

Search the build

33 commits indexed

  1. 4dbf7fa 2026-09-22 Fix: replace relative-path shim with portable resolution (TK-11786)
  2. b126d74 2026-09-22 Make SP guard shim path portable and skip $0-orderable variants in the inventory re-stamper
  3. a37d4b2 2026-09-22 TK-12032: require shared fail-closed leak guard before Shopify product create
  4. 4322d1d 2026-09-10 governance(TK-11370): make live-by-default Shopify writers dry-run by default
  5. 3e2c3fc 2026-09-10 guard TK-11357 Fix D: sister-parish push_shopify.js — don't mint/stock a $0 variant as CONTINUE
  6. 22f4fcc 2026-08-31 importer: map global.width metafield (Carnegie-class fix)
  7. e058c64 2026-07-03 chore: macstudio3 migration — reconcile from mac2 + repoint paths (stevestudio2→macstudio3, node/npm/npx→/opt/homebrew)
  8. 16193e6 2026-06-21 auto-save: 2026-06-21T18:53:00 (1 files) — scripts/_deep-probe.js
  9. f1ec46d 2026-05-19 broaden .gitignore to exclude .bak/.pre-* snapshot files and .next/
  10. 92e3f85 2026-05-19 add noopener noreferrer to external _blank links + .bak/.pre snapshot 404-guard
  11. 4280d5a 2026-05-18 sp: set_variants.js — flatten 72 products to 2 variants (Roll (with specs) / Sample), added missing sample to Dot All Over Pink; Boxwood Stripe skipped (multi-colorway)
  12. 62e1af1 2026-05-18 sp: enrich_metafields v2 — fix dwc.content type to multi_line; 72/73 enriched with item_width/roll_size/repeats/match/country
  13. 6b8b0b8 2026-05-18 sp: ran private_label — deleted 52 dupes, renumbered 73 keepers to DWPH-10001 (Saybrook House)
  14. c283bfa 2026-05-18 sp: enrich_metafields.js — push DW spec metafields (item_width, roll_size, repeats, match, country) from PDP crawl, joined to live store by title
  15. 2c68b15 2026-05-18 sp: private_label v2 — add display_variant tag + dwc.mfr_number + sample-variant check
  16. 386a360 2026-05-18 sp: private_label.js — dedupe + renumber to DWSH-10001 series (Saybrook House)
  17. aac311d 2026-05-18 sp: check_sp_inventory.js — audit + set all 250 SP variants to qty 2026
  18. a28adca 2026-05-18 sp: activate_sp.js — flip all 50 draft Sister Parish products to active
  19. 8b0c300 2026-05-12 fix: preflight count by 3-call status sum (status=any returns 0 in 2026-01)
  20. 0a5d2b8 2026-05-12 fix: drop status=any from /products.json list (invalid in API 2026-01, returns 0)
  21. b6c1a27 2026-05-12 fix: bump SP metafield namespace dw→dwc (Shopify requires ≥3 chars)
  22. b825dc7 2026-05-12 sp: preflight.sh — single-shot health read for YOLO ticks
  23. 52bd57d 2026-05-11 Shopify: bump to API 2026-01
  24. 2570b30 2026-05-11 tick 7: SP viewer × wallco PD bridge — 'PD inspirations →' button on every SP card opens modal with 3 nearest Lab-color PD matches; image proxy /pd-img/<source>/<file> reads from wallco-ai/data/images
  25. 134a484 2026-05-11 SP color v2: center-crop 80% before palette extraction — near-white dominants 7→4 · cross-match cleanup — Appleton Beige #e4d9c6 → Met 'Seaman's Wife's Reckoning' #e7dac7 (Lab dist 0.91, much improved over v1)
  26. 280a3a3 2026-05-11 tick 5: Shopify still 0 · cross-match SP × PD in Lab space (219 matches, 73 × 3) · tileability score (11 seamless / 38 near / 24 photo)
  27. 1c08599 2026-05-11 tick 4: Shopify still 0 SP products · recorded 10 Backend-C research link-outs (google+etsy) for 5 SKUs across price tiers; ToS-clean, no scrape
  28. 0956a19 2026-05-11 schedule Shopify push for Wed 2am PT via launchd com.steve.sister-parish-push (idempotent, self-unloads at 73/73)
  29. 81602d3 2026-05-11 tick 3: normalize curly quotes in specs · extract dominant_hex + 5-color palette (73/73) · wire color-wheel/light-dark sorts + color dot in viewer
  30. 17c8526 2026-05-11 viewer: sister parish browse UI on :9790 (sort + density slider, pm2 supervised)
  31. 968aee9 2026-05-11 crawl Sister Parish PDPs → enrich catalog with width/repeat/COO/paint specs (72/73 products)
  32. b1825fc 2026-05-11 add shopify push + backfill scripts; CSV import path (Shopify daily variant cap workaround)
  33. e59d98a 2026-05-11 initial scaffold: Sister Parish wallcoverings onboarding (73 prints, dw_retail = vendor/0.85)

Authors

Agents used

  • none detected

Skills used

  • /claude3
  • /code3
  • /local2
  • /dw-guards1
  • /cron1
  • /pm21
  • /wrapper1
  • /stock1
  • /set1
  • /absent1
  • /npm1
  • /npx1
  • /homebrew1
  • /repeats1
  • /match1
  • /country1
  • /products1
  • /pd-img1
  • /data1
  • /images1
  • /light-dark1
  • /repeat1
  • /paint1

Creative ideas + design notes

Commits with substantial prose (≥120 chars) — the rationale behind each move.

4dbf7fa · 2026-09-22 · Fix: replace relative-path shim with portable resolution (TK-11786)
The inventory-stamp-guard.mjs shim now resolves via DW_SHARED_GUARDS env or
home-dir fallback instead of relative path. This enables the guard to work
on Kamatera (/root), Mac1, and any other machine regardless of repo location.

ESM consumers (import) work correctly. CJS consumers (require) fail safely
with ERR_REQUIRE_ASYNC_MODULE, preventing silent bad defaults on inventory
stamps.

Original vendored copy preserved as inventory-stamp-guard.mjs.pre-shared-lift.
The $0-orderable guard (TK-11357) now has ONE source of truth at
~/Projects/_shared/dw-guards/.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WoD95uATtwJXUZvQ7PNPsB
b126d74 · 2026-09-22 · Make SP guard shim path portable and skip $0-orderable variants in the inventory re-stamper
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DP24DdLpG6PHXgmjr47TVb
4322d1d · 2026-09-10 · governance(TK-11370): make live-by-default Shopify writers dry-run by default
Flip `DRY = argv.includes('--dry')` -> `DRY = !argv.includes('--apply')` so a
zero-argument run no longer fires customer-facing Shopify writes.

Backward compatible: `--dry` still means dry; `--apply` now required to write.
Only zero-arg invocations change behaviour, and every candidate was checked
against its launchd/cron/pm2/wrapper invocation sites first (4 scripts that a
cadence job runs flagless were EXCLUDED so this cannot silently disable them).

Verified: node --check/py_compile 87/87 with a positive control proving the
checker rejects an injected fault; argv truth-table negative test 5/5.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L53y4oP2itY3qeJ8WQgMzc
3e2c3fc · 2026-09-10 · guard TK-11357 Fix D: sister-parish push_shopify.js — don't mint/stock a $0 variant as CONTINUE
Found by widening the writer enumeration to REST inventory_levels endpoints (my first sweep was
GraphQL-mutation-only, the same blind spot this lineage has hit before).

PRE-EXISTING GUARD STATE: none. buildProductPayload() prices every variant `v.dw_retail.toFixed(2)`
straight from the input feed with no price check, sets inventory_policy 'continue', and the caller
then stamps a flat 2026 on every created variant via /inventory_levels/set.json. A 0/absent
vendor_retail (dw_retail = vendor_retail / 0.85) therefore mints a $0 variant that is CONTINUE --
orderable at ANY quantity INCLUDING ZERO, so the qty->0 remedy cannot fix it.

FIX: inventory_policy comes from the guard ('deny' when the safe quantity is 0, caller's 'continue'
otherwise), and the stock loop stamps the guard's per-variant safe quantity computed from the price
Shopify actually landed -- skipping $0 variants with a logged refusal instead of stocking them.
Priced variants keep 'continue' + 2026 exactly as before (Steve's 2026-06-20 rule intact).

Shared guard vendored to scripts/lib/. Proven: 4/4 + 3/3 + P8 policy 2/2.
SOURCE-ONLY. Reversible: git revert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
f1ec46d · 2026-05-19 · broaden .gitignore to exclude .bak/.pre-* snapshot files and .next/
Fleet-wide hygiene rule — snapshot files must never land in git so the
404-guard middleware never has anything stale to refuse. Mirrors the
.gitignore baseline used across the rest of the DW sister sites.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
92e3f85 · 2026-05-19 · add noopener noreferrer to external _blank links + .bak/.pre snapshot 404-guard
Code-health fleet sweep pass: closes the reverse-tabnabbing vector on
the two external target=_blank anchors (vendor source PDP, PD-corpus
source link in the inspirations modal). Also adds an Express middleware
404-guard so .bak / .bak.* / .pre-* / .pre.* snapshot paths can never
be served via static even if one slips into the tree.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
b825dc7 · 2026-05-12 · sp: preflight.sh — single-shot health read for YOLO ticks
Replaces the curl+grep+dry-run dance future ticks were doing each time
with one O(1) call. Reports: live SP count (status=any), plist installed
& loaded, dry-run would-create count. Exit code: 0 GREEN, 1 mixed, 2 env fail.

Uses the same node-path fallback chain as scheduled_push.sh (homebrew →
/usr/local → which node) so it works on both Mac1 (homebrew) and Mac2
(/usr/local/bin/node).

File tree

36 files tracked. Click any to browse the source at HEAD.

Other build journals

← Silverleafwallpaper  ·  all 4 projects  ·  Site Factory →

Export

commits.csv · feed.atom · project.json · commits.json

rendered in 1ms