{"slug":"majilite-onboard","total":30,"limit":100,"offset":0,"since":null,"commits":[{"hash":"82e0326","date":"2026-09-10 17:52:31 -0700","author":"Steve Abrams","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":"4e9ee41","date":"2026-08-25 10:48:56 -0700","author":"Steve","subject":"creds-safe fetch guard: resolve relative fetch vs credential-free location (creds-in-URL trap)","body":"Fleet inoculation — opening this basic-auth app with credentials in the URL\npoisoned document.baseURI and made relative fetch('/api/…') throw. Guard resolves\nnon-absolute request URLs against location instead. Ref: creds-in-url-fetch-guard-fleet-pattern.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"608aba4","date":"2026-08-23 07:19:14 -0700","author":"steve","subject":"majilite-onboard: href-to-deeper-data — chips are real drill anchors + URL-synced filters (deep-link/back-button), clears href-drill regression","body":""},{"hash":"1b9bdcd","date":"2026-08-20 08:14:33 -0700","author":"Steve Abrams","subject":"nav-agent: sync v1.3 (host left-sidebar collapse on load)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"2df6c5b","date":"2026-08-19 14:31:01 -0700","author":"Steve","subject":"nav-agent: List data full-width tight columns (grid) — layout fix","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"c050694","date":"2026-08-19 14:05:22 -0700","author":"Steve","subject":"Refresh nav-agent to v1.2 (adds kv-list compact List view, default-off)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"a9e93ff","date":"2026-08-13 08:29:16 -0700","author":"Steve Abrams","subject":"nav-agent: universal grid-controls drop-in on internal viewer pages (STRONG-only)","body":""},{"hash":"f5257e6","date":"2026-08-12 08:53:18 -0700","author":"Steve","subject":"viewer standard: add Grid/List toggle + per-field on/off menu to internal record-grid viewer","body":""},{"hash":"cca8690","date":"2026-08-11 18:50:20 -0700","author":"steve@designerwallcoverings.com","subject":"chore: v-patch (session close — DWCC viewer regen)","body":""},{"hash":"63d840a","date":"2026-08-11 12:34:33 -0700","author":"Steve Abrams","subject":"majilite build.js: tidy stale DWMJ comment refs to DWCC","body":""},{"hash":"859b81a","date":"2026-08-11 12:34:13 -0700","author":"Steve Abrams","subject":"majilite viewer: regenerate from live DWCC catalog, drop stale DWMJ/staged (relabel DWMJ->DWCC)","body":""},{"hash":"5836b1f","date":"2026-08-10 16:56:29 -0700","author":"Steve Abrams","subject":"chore: v1.1.0 (session close) — two-variant reconcile publisher + Name/Color FileMaker fix shipped","body":""},{"hash":"a6319aa","date":"2026-08-10 16:26:02 -0700","author":"Steve Abrams","subject":"Shopify: recover 5 mistakenly-deleted Majilite products (recreated on clean handles) + dedup final 6 orphans; all 160 single clean DWCC listings, 0 stray DWMJ (TK-10403)","body":""},{"hash":"997dd9d","date":"2026-08-10 16:17:06 -0700","author":"Steve Abrams","subject":"Shopify: resolve 5 duplicate Majilite listings — deleted dup creates, updated real orphans in place to DWCC on clean handles; all 160 now single clean DWCC listings (TK-10403)","body":""},{"hash":"1faa6a6","date":"2026-08-10 16:13:32 -0700","author":"Steve Abrams","subject":"Shopify: reconcile 160 Majilite Metallic to DWCC + Sample/Per-Yard pricing live; 5 late items created (dup-orphan cleanup pending); prune stale DWMJ keys (TK-10403)","body":""},{"hash":"a6acf50","date":"2026-08-10 16:09:46 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-10T16:09:17 (1 data files) — data/published.json","body":""},{"hash":"abda2a6","date":"2026-08-10 16:02:54 -0700","author":"Steve Abrams","subject":"publish_shopify: reconcile-in-place (DWMJ->DWCC SKU rename + add Per-Yard retail variant on 153 live products), collision-safe create for 7 missing (TK-10403)","body":""},{"hash":"2f00dac","date":"2026-08-10 15:42:37 -0700","author":"Steve Abrams","subject":"Majilite Metallic Specialties I: rename series DWMJ->DWCC (keep 600001-160), stage Majilite 2026 net-showroom prices (retail=cost/0.65/0.85), rename swatch images to DWCC (TK-10403)","body":""},{"hash":"ee8bbbf","date":"2026-08-10 12:12:06 -0700","author":"Steve Abrams","subject":"chore: session-close quality gate (lint ✓ 0-fix, refactor ✓ 0-change) + package.json v1.0.0","body":""},{"hash":"8fafdaf","date":"2026-08-10 11:54:52 -0700","author":"Steve Abrams","subject":"Draft Constant Contact campaign for Majilite Metallic Specialties I (email HTML + spec)","body":""},{"hash":"8889c9b","date":"2026-08-10 11:46:05 -0700","author":"Steve Abrams","subject":"Publish all 160 Majilite + collection to ALL 13 sales channels","body":""},{"hash":"4006a51","date":"2026-08-10 11:39:19 -0700","author":"Steve Abrams","subject":"Dual-list Majilite: add Fabric + Wallcovering tags to all 160 (list under both aisles)","body":""},{"hash":"444c2f9","date":"2026-08-10 11:20:57 -0700","author":"Steve Abrams","subject":"Set Majilite collection cover image (Stature Gold swatch)","body":""},{"hash":"2b36441","date":"2026-08-10 11:04:41 -0700","author":"Steve Abrams","subject":"Add smart collection 'Majilite Metallic Specialties I' (160 products, published to Online Store + Google)","body":""},{"hash":"511943c","date":"2026-08-10 10:59:34 -0700","author":"Steve Abrams","subject":"Majilite go-live COMPLETE: 160/160 $4.25 samples live on Online Store + Google (deduped, verified)","body":""},{"hash":"1365149","date":"2026-08-10 10:58:44 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-10T10:58:17 (1 data files) — data/store_audit.json","body":""},{"hash":"bfc60b4","date":"2026-08-10 10:27:56 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-08-10T10:27:30 (1 data files) — tasks/SHOPIFY-STATUS.md","body":""},{"hash":"001730f","date":"2026-08-10 10:27:35 -0700","author":"Steve Abrams","subject":"Publish 153/160 Majilite $4.25 samples to live store (active, unpublished-to-channel); 7 handle-collisions + channel-publish blocked on token read_products/read_publications merchant approval","body":""},{"hash":"63a1a27","date":"2026-08-10 10:06:04 -0700","author":"Steve Abrams","subject":"Renumber to DWMJ-600000 block; onboard all 160 as sellable $4.25 samples","body":""},{"hash":"0cc3cd7","date":"2026-08-10 10:00:21 -0700","author":"Steve Abrams","subject":"Onboard Majilite Metallic Specialties I (160 SKUs, DWMJ series, spec-on-every, live import viewer)","body":""}]}