{"slug":"reidwitlin-landing","total":34,"limit":100,"offset":0,"since":null,"commits":[{"hash":"685f7c8","date":"2026-07-15 15:02:35 -0700","author":"Steve Abrams","subject":"reidwitlin-landing: add Memo/Stock/Price chip actions (shared vendor-requests module)","body":""},{"hash":"d7714e5","date":"2026-07-07 12:31:39 -0700","author":"Steve Abrams","subject":"chore: lint, refactor, v0.2.3 (session close)","body":""},{"hash":"b8b384a","date":"2026-07-07 12:30:22 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-07T12:30:21 (4 files) — lib/backfill-source-images.js lib/relabel-colorways.js scripts/backfill-source-images.js scripts/build-rwltd-data.js","body":""},{"hash":"d67eec9","date":"2026-07-07 10:01:35 -0700","author":"Steve Abrams","subject":"reidwitlin: contrarian FIX-THEN-SHIP — guard silent-zero-result feed failure (throw if <50 patterns), unify slug apostrophe-strip lib<->build, catch distinguishes integration vs feed errors; integration path exercised","body":""},{"hash":"e798590","date":"2026-07-07 09:56:31 -0700","author":"Steve Abrams","subject":"reidwitlin: wire source-image backfill into canonical build (shared lib) so a full rebuild preserves the 190 recovered photos instead of regressing to 197 no-photo; refactor standalone patcher onto same lib","body":""},{"hash":"593987a","date":"2026-07-07 09:19:09 -0700","author":"Steve Abrams","subject":"reidwitlin: recompute facets after backfill re-partition (was stale 799; now matches 989 published) + always-write idempotent","body":""},{"hash":"a86679b","date":"2026-07-07 09:12:27 -0700","author":"Steve Abrams","subject":"reidwitlin: backfill 190 authoritative colorway photos from free rwltd.com feed -> auto-restore per own-photo-or-draft rule (799->989 published, 197->7 drafted)","body":""},{"hash":"4535dde","date":"2026-07-07 09:08:40 -0700","author":"Steve Abrams","subject":"reidwitlin: enforce own-photo-or-draft — hide 197 no-own-photo colorways from live (799 published, 197 drafted+preserved for auto-restore)","body":"Steve's rule 2026-07-07: a representative/shared stand-in doesn't count as 'has an image'.\nPartition on the build's derived image_note signal; drafts kept in snapshot.drafts[] and\nauto-restore on a future rebuild once a real colorway photo lands. Kills hybrid disclosure.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"7fac2fd","date":"2026-07-07 08:12:31 -0700","author":"Steve Abrams","subject":"reidwitlin PDP: fix CSS filter cascade — move repflag chip out of desaturated .main so the in-image true-color chip renders accurate (contrarian catch)","body":""},{"hash":"ff792e8","date":"2026-07-07 08:07:03 -0700","author":"Steve Abrams","subject":"Contrarian FIX-FIRST: block sibling-swatch mislabels + harden swatch matching","body":"The /yolo contrarian caught 4 products displaying a CONFIRMED SIBLING colorway's\nnamed swatch under a 'no photo' note (turn-up-cherry & -chocolate showing canary.jpg,\nnot-leather-slate->seal, vinyltini-crimson->baileys) — a wrong-color lie, worse than\nrepresentative. Fixes:\n- TIER 4 now checks a claimed-swatch map; if the only fallback image is another\n  colorway's confirmed swatch, show NONE (honest 0-image) instead of the wrong color.\n- Mood/room/lifestyle shots excluded from matching (kills kinky-copy-3 variant '3'\n  false-matching bouclette_knotty_mood_shot_3).\n- imgMatchesColorway: token-sequence match instead of endsWith (kills Gold->marigold),\n  and strips SERIES tokens first (kills Linen Like sibling contamination).\nCounts: 639 name / 16 variant / 144 unique / 193 rep / 4 sibling-blocked. Verified."},{"hash":"6d6aabd","date":"2026-07-07 07:54:46 -0700","author":"Steve Abrams","subject":"reidwitlin PDP: harden hybrid-disclosure hero for no-photo colorways — desaturate flagged representative photo + enlarge/emphasize true-color chip ('Actual color'), per DTD verdict","body":""},{"hash":"a4f7fcf","date":"2026-07-07 07:45:28 -0700","author":"Steve Abrams","subject":"Recover 353 per-colorway swatches by filename match — no re-scrape, no spend","body":"'55% have no photo' was a data-shape illusion: the scrape stored each series' full\nswatch set in every colorway's image list, so nothing looked unique — but the\ncolorway swatch is present, named after the colorway (Cassis.jpg, Bloodline_Fawn.jpg,\n18695-Beige) or the mfr_sku variant number (Acquisitions_160). Two-tier filename match:\n636 by colorway-name, 18 by variant#, 144 unique, 198 still representative (opaque hash\nfilenames, no colorway key). image_note 551 -> 198. Coexists with the other session's\nrelabelUnreliableSeries pass. Gemini backfill moot (catalog already 100% enriched)."},{"hash":"92d5aeb","date":"2026-07-07 07:39:34 -0700","author":"Steve","subject":"vendor-requests: resolve george send-token/auth across Mac + Kamatera paths (fix email_failed)","body":""},{"hash":"474a170","date":"2026-07-07 07:22:25 -0700","author":"Steve","subject":"vendor-requests: self-bootstrap vendor_requests table (fix 'relation does not exist' on fresh DB)","body":""},{"hash":"8418a55","date":"2026-07-07 07:21:22 -0700","author":"Steve Abrams","subject":"reidwitlin: relabel mis-stamped colorways from pixel hue so pair-card text matches its image (Dreamer/Dream On/Dream Weaver, 33 products)","body":""},{"hash":"d52d161","date":"2026-07-07 07:17:21 -0700","author":"Steve Abrams","subject":"Color classifier: light+desaturated warms are cream/beige, not vivid orange/gold","body":"#C9B8A0 (I'm Crushed Beige) was bucketed 'orange' — a warm tan at l=0.71 slipping\nunder the gold hue cutoff. Perceived colorfulness needs more chroma at high lightness,\nso warm colors with l>=0.62 and chroma<0.22 now route to white/neutral. Verified: real\nlemon #E1D781, bright gold #C59024, bronze, muddy-gold all keep their buckets; 0 residual\nlight-desat warms in orange/gold. Palette: white 207/grey 270/gold 102/brown 111."},{"hash":"c7c7db0","date":"2026-07-07 07:15:09 -0700","author":"Steve Abrams","subject":"Contrarian-gate fixes: apostrophe slug bug, solo-series dedup, jewel-tone rescue, stale comment","body":"- CRITICAL: slug() now strips apostrophes before the char-class collapse, so\n  'I'm Crushed' -> 'im-crushed' matches the vendor mfr_sku. Fixes 11 doubled titles\n  ('I'm Crushed Im Crushed Beige' -> 'I'm Crushed Beige'). Residual doubled titles 0.\n- Solo-colorway series dedup (sku==series slug): 'By Hand Smooth By Hand Smooth' -> 'By Hand Smooth'.\n- bucketFromHex jewel-tone rescue: muted MID-tone COOL colors (120-300deg, chroma>=0.06)\n  keep their bucket instead of collapsing to grey — Admiral #393F4C -> blue (navy),\n  Turquoise #3A5757 -> teal. Warm neutrals + near-white/black unchanged (no regression).\n- Removed stale 'Astek' copy-paste comment in product.html.\nFound by the /yolo contrarian adversarial gate."},{"hash":"d08cf85","date":"2026-07-07 07:03:46 -0700","author":"Steve Abrams","subject":"PDP hybrid color disclosure (DTD verdict C): true-color chip + representative flag","body":"For the 551 colorways with no colorway-specific photo, the hero shows the shared\nseries texture BUT now carries: (1) a true-color dot rendered from the AI-vision\nhex overlaid on the hero, (2) a true-color chip + hex next to the colorway name\n(shown on ALL PDPs), (3) a visible 'representative — no colorway-specific photo on\nfile' note. Resolves the honesty/utility tension: designers keep the texture cue\nand see the real color, never deceived. DTD panel unanimous C (Codex+Qwen)."},{"hash":"918c1df","date":"2026-07-07 07:00:43 -0700","author":"Steve Abrams","subject":"Catalog data-quality sweep: chroma-neutral detection, slash-label tidy, unique-only galleries","body":"- bucketFromHex now uses CHROMA (max-min) not HSL saturation for the neutral\n  gate — HSL 's' spikes on pastels/near-black (#F5F5DC beige read as saturated\n  gold). Fixes 133 neutral-hex-in-chromatic-bucket mislabels (beige/ivory/taupe/\n  slate now correctly white/grey). neutral_hex conflicts 133 -> 0.\n- tidyLabel() collapses AI 'family/family' slash labels (White/off-white -> Off-White).\n  label_has_slash 33 -> 0.\n- Gallery de-contamination pass: only ~444/996 colorways have a unique swatch; the\n  rest reused series-generic shots rendering the WRONG color. PDPs now show only\n  colorway-unique imagery (single hero, no misleading thumbnail strip); 551 no-photo\n  colorways flagged image_note='representative'. Shared-image PDPs ~994 -> 13.\n- blue bucket 202 -> 28; neutrals now correctly dominate (grey 294/white 161)."},{"hash":"941c6a2","date":"2026-07-07 06:47:06 -0700","author":"Steve Abrams","subject":"Fix systemic color mislabel: derive colorway from mfr_sku + bucket/hue from AI-vision hex","body":"rwltd_catalog.color_name was mis-scraped (whole Aura series stamped 'Blue'/hue 215\non brown/gold/red swatches; 567/996 bucket-vs-hex conflicts). build-rwltd-data.js\nnow recovers the true colorway from mfr_sku (aura-muddy-gold -> 'Muddy Gold') and\nclassifies color_bucket/hue from color_hex pixels. Conflicts 567 -> 13. Blue cohort\n202 -> 50. Fixes 'Aura Blue' showing a dark-brown swatch + wrong-color pairs row."},{"hash":"a206855","date":"2026-07-06 18:28:55 -0700","author":"Steve","subject":"chore: pin port + stable .env credential via pm2, guarded dotenv, v0.2.2 (session close)","body":""},{"hash":"98a3a2a","date":"2026-07-02 17:26:08 -0700","author":"Steve Abrams","subject":"Retrofit front page to the internal-line-viewer spec (astek :9944 parity): left panel with search + pattern type-ahead + 7 collapsed facet tables (Books/Styles/Colors/Patterns/Colorways/Width/Repeat; Styles derived from tags — no style column in rwltd_catalog; Material/Length/Match skipped, 0/996 populated), value+count click-to-filter with teal summary badge + Clear, Card Fields toggles down to pure image grid, density slider drives --cols AND --fs type scale, tight 1px/2px/8px cards, data-href + single delegated click (no <a>-wrapped cards), rwltd.* localStorage namespace, location.origin fetches; memo-sample modal + PDP flow kept. E2E-verified Chromium + WebKit creds-in-URL: 120 grid children == 120 cards, 0 empty anchors, all tables collapsed, filter 996→341→996, imgonly clean, --fs 1.18→0.50, 0 console/page errors.","body":"Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>"},{"hash":"41474dc","date":"2026-07-02 11:38:18 -0700","author":"Steve Abrams","subject":"chore: addendum gate clean, v0.2.1 (session close)","body":""},{"hash":"466dd2a","date":"2026-07-02 11:34:57 -0700","author":"Steve Abrams","subject":"discounts are line-specific (Steve): Artmura % unconfirmed — removed inherited newwall 20%, Get Price confirms; module sync incl. no-DW-SKU-in-outbound-email rule","body":""},{"hash":"7aa3cbb","date":"2026-07-02 11:32:42 -0700","author":"Steve Abrams","subject":"buy-from distributor support: Artmura purchases route via NewWall (tricia@newwall.com, 866-770-2111, 20% newwall registry discount) — emails greet the distributor, PDP shows Buy From row","body":""},{"hash":"b5d7742","date":"2026-07-02 11:20:56 -0700","author":"Steve Abrams","subject":"chore: lint clean, refactor, v0.2.0 (session close)","body":""},{"hash":"366f090","date":"2026-07-02 11:07:55 -0700","author":"Steve Abrams","subject":"data refresh with confirmed 20% rwltd discount","body":""},{"hash":"ab34197","date":"2026-07-02 10:55:09 -0700","author":"Steve Abrams","subject":"internal PDP port from astek template: pricing tiers, Request Memo/Check Stock/Get Price with vendor-email preview+send (REQ numbers), Call Vendor bar, vendor meta from registry+fmpro (account-note sanitizer); pm2 reidwitlin-landing :9945","body":""},{"hash":"19bbf56","date":"2026-07-02 08:39:12 -0700","author":"Steve","subject":"Grid UI upgrade: density slider to 20 cols, grid/list view toggle with sticky sortable column headers (10 fields, asc/desc, full-set sort), Safari user:pass@ fetch fix (location.origin)","body":"Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>"},{"hash":"f181757","date":"2026-07-02 07:47:16 -0700","author":"Steve","subject":"chore: v0.1.1 (session close — lint clean, refactor auto-saved in 2baaa11)","body":""},{"hash":"2baaa11","date":"2026-07-02 07:46:13 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-02T07:46:12 (2 files) — scripts/build-rwltd-data.js server.js","body":""},{"hash":"86b29a3","date":"2026-07-02 06:35:01 -0700","author":"Steve Abrams","subject":"deploy: pin reidwitlin to free port 9952","body":""},{"hash":"4508176","date":"2026-07-02 06:32:43 -0700","author":"Steve Abrams","subject":"reidwitlin-landing: Kamatera-sourced build script, deps, 996-product data, deploy config","body":""},{"hash":"ac85f96","date":"2026-07-02 06:31:46 -0700","author":"Steve Abrams","subject":"Reid Witlin internal landing — cloned from astek-landing, catalog from enriched rwltd_catalog (996 products), Basic Auth admin/DW2024!","body":""}]}