{"slug":"zuber-internal","total":9,"limit":100,"offset":0,"since":null,"commits":[{"hash":"3f028dd","date":"2026-07-15 15:02:19 -0700","author":"Steve Abrams","subject":"zuber-internal: add Memo/Stock/Price chip actions (shared vendor-requests module)","body":"Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>"},{"hash":"8f9e02b","date":"2026-07-15 13:06:52 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-15T13:06:41 (1 files) — lib/","body":""},{"hash":"746d635","date":"2026-07-14 07:56:27 -0700","author":"Steve","subject":"Revert \"Add Activation Calendar tab (go-live date+time per staged SKU)\"","body":"This reverts commit 8879146472a5ea957b2746e35f4a33761ed4c724."},{"hash":"8879146","date":"2026-07-14 07:53:58 -0700","author":"Steve","subject":"Add Activation Calendar tab (go-live date+time per staged SKU)","body":""},{"hash":"6db0b61","date":"2026-07-09 16:08:13 -0700","author":"Steve","subject":"Rail parity with all.dw: cross-filtered facets, color families+swatches, active-chip row, needs-curation preserved","body":""},{"hash":"ada4b82","date":"2026-07-09 15:51:27 -0700","author":"Steve","subject":"jsonl-backed data layer: self-contained bundle for Kamatera (no prod DB)","body":"Auto-detect source (DATA_SOURCE=jsonl or the data/<vendor>.jsonl bundle present)\nloads all rows in-memory from the bundle; the pg/psql path is preserved for local.\nDB driver require made lazy so no DB connection is needed in jsonl mode. Includes\nthe full-fidelity export (all columns the viewer consumes) + export script.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"2d17e2a","date":"2026-07-09 13:44:34 -0700","author":"Steve Abrams","subject":"Add color context+Color sort, tag facet (needs-curation), strip healthz count","body":"FIX1: color_name falls back to ai_colors[0].name (column null for all rows);\ncolor_hex falls back to ai_colors[0].hex; server-side Color sort by hue(color_hex)\n+ Color option in sort select (parity with sibling viewers).\nFIX2: unauthenticated /healthz returns {ok:true} only, no product count leak.\nFIX3: ai_tags now built into a Tag facet (needs-curation/broken-source-image\nvisible+filterable, count 2) + tag filter in /api/products.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"afe7565","date":"2026-07-09 09:50:56 -0700","author":"Steve","subject":"Fix zuber viewer 401 crash: plain-ASCII WWW-Authenticate realm","body":"Realm string ('Zuber - Designer Wallcoverings (internal)') was triggering\nNode ERR_INVALID_CHAR on every 401, crash-looping the viewer. Replaced with\nres.setHeader('WWW-Authenticate', 'Basic realm=\"Zuber Internal\"'). Verified\n401 clean + 200 with auth + restart count stops climbing.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"eb397ec","date":"2026-07-09 09:14:27 -0700","author":"Steve Abrams","subject":"Zuber internal line viewer (basic-auth, reads zuber_catalog, sort+density+image-only+created-date chips)","body":""}]}