{"slug":"atomic50-onboard","total":18,"limit":100,"offset":0,"since":null,"commits":[{"hash":"7591234","date":"2026-07-15 08:05:22 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-15T08:05:18 (2 files) — cadence/data/latest.json cadence/data/cadence.err","body":""},{"hash":"c8e598f","date":"2026-07-14 10:06:19 -0700","author":"Steve Abrams","subject":"chore: v0.2.0 (session close — scraper CLI + cadence + swatch gallery)","body":""},{"hash":"193c5c9","date":"2026-07-14 10:00:30 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-14T10:00:24 (1 files) — cadence/data/latest.json","body":""},{"hash":"138c903","date":"2026-07-14 09:48:20 -0700","author":"Steve Abrams","subject":"atomic50: feed-first scraper CLI + wire cadence re-scrape","body":"- scraper/scrape-atomic50.mjs: $0 plain-fetch (sitemap + ?format=json, NO headless\n  despite skill note). URL-based upsert (slug->mfr_sku unreliable: at50g34 vs AT50-G34).\n  Non-destructive: preserves shopify_product_id/on_shopify/product_type/dw_sku/ai_*.\n  Disco is 404-CONFIRMED + scoped to individual pages (accessory /molding-accessories\n  line-items excluded) + 70% floor guard. Idempotent (0 inserts on unchanged site).\n- cadence: RESCRAPE_CMD wired -> re-scrape now runs (was skipped).\n- First live run flagged AT50-32 discontinued (404 on vendor; draft on Shopify so\n  cadence stays silent, correctly)."},{"hash":"a321e2f","date":"2026-07-13 16:43:53 -0700","author":"steve","subject":"Add monthly propose-only Atomic 50 cadence (15th @ 08:00 PT, first run 2026-07-15)","body":""},{"hash":"7949d34","date":"2026-07-13 16:34:16 -0700","author":"Steve","subject":"Add finish-swatch hover gallery (grid + PDP)","body":"- build-snapshot.js: emit capped (12) de-duped HTTPS finish-swatch set per product\n- server.js: keep swatches on the light grid feed, still strip full images/body_html\n- index.html grid cards: desktop hover-scrub across image → finish index, touch tap-to-advance, dot indicator + N-FINISHES badge\n- product.html PDP: hover-scrub main image + thumbnail strip + dots; spin 360 dropped (NULL upstream)\n- quote-only preserved: no prices, no cost/net/about_vendor leak\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"76a864e","date":"2026-07-13 15:30:57 -0700","author":"Steve","subject":"atomic50: Shopify push RESULT — 56 drafts created + 2 reconciled, PG write-back complete, 0 failures","body":""},{"hash":"3a52a24","date":"2026-07-13 15:28:13 -0700","author":"Steve","subject":"atomic50: route tin-spec metafields to tin namespace (store custom.material/finish defs reject single-line text)","body":""},{"hash":"142d5be","date":"2026-07-13 15:25:53 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-13T15:25:47 (1 files) — data/shopify-push-result.json","body":""},{"hash":"547b483","date":"2026-07-13 15:25:42 -0700","author":"Steve","subject":"atomic50: Shopify push script — 56 DRAFT quote-only creates + reconcile 2 live tiles (PG-first)","body":""},{"hash":"611fa54","date":"2026-07-13 15:25:11 -0700","author":"Steve","subject":"pin PORT to 9964 (9942 taken by atomic50-viewer internal tool)","body":""},{"hash":"9d456da","date":"2026-07-13 15:13:13 -0700","author":"Steve","subject":"atomic50 FIX 1+3: regen snapshot — Tin Ceiling Tile (29 on-site) vs Tin Ceiling Molding (12) as separate Type facets; clean images arrays (0 fragments); 0 price/cost leaks","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"986f010","date":"2026-07-13 15:13:13 -0700","author":"Steve","subject":"atomic50 FIX 3: parse all_images as JSON array (jarr) instead of splitting on commas/whitespace, which shattered query-string URLs into un-parseable fragments; drop non-http entries","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"2e4914f","date":"2026-07-13 15:13:13 -0700","author":"Steve","subject":"atomic50 FIX 2: pin PORT fallback to 9942 (was 0 → random ephemeral port broke nginx upstream); add ecosystem.config.js pinning PORT=9942","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"c016f8e","date":"2026-07-13 15:02:41 -0700","author":"Steve","subject":"atomic50 microsite: drop unreachable/mixed-content spin GIFs, add favicon — /3x 4/4 clean, 0 JS errors","body":""},{"hash":"c445358","date":"2026-07-13 14:57:21 -0700","author":"Steve","subject":"atomic50 microsite: DW-house editorial lookbook, quote-only (Request a Quote + Order a Sample $4.25), sort+density, exclude LBI-BOYD resource row","body":""},{"hash":"4ca120d","date":"2026-07-13 14:55:45 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-13T14:55:38 (5 files) — package.json build-snapshot.js data/ public/ server.js","body":""},{"hash":"882c948","date":"2026-07-13 14:51:31 -0700","author":"Steve","subject":"atomic50: data repair — tin-accurate product_type + descriptions (reversible)","body":""}]}