{"slug":"wallco-live-viewer","total":8,"limit":100,"offset":0,"since":null,"commits":[{"hash":"69eb692","date":"2026-06-09 13:26:37 -0700","author":"SteveStudio2","subject":"feat(live-viewer): drag-marquee multi-select across the grid (drag a box to select 1-to-many, shift-drag adds; plain click still opens lightbox)","body":""},{"hash":"8312b95","date":"2026-06-09 13:25:25 -0700","author":"SteveStudio2","subject":"viewer: surface the real gate-rejection reason on orphan cards","body":"Reads data/logs/gate-rejections.jsonl (mtime-cached), attaches {gate,reason} to\nany orphan (no DB row) in /api/recent, and the badge + label now show e.g.\n'✗ seamless-tile gate · no DB row' with the reason in the tooltip, instead of\nthe inferred 'orphaned at gen time'. Adds a client-side esc() (none existed).\nPre-2026-06-09 orphans with no logged reason keep the old label."},{"hash":"0bf0b7b","date":"2026-06-09 12:33:37 -0700","author":"SteveStudio2","subject":"badge wording: timeout-orphans not gate-rejects (debugger verdict: all 71 were 4-min SIGTERM kills, gates never ran)","body":""},{"hash":"d1c8eec","date":"2026-06-09 12:10:52 -0700","author":"SteveStudio2","subject":"stale no-row cards: label gate-rejected after 30 min instead of awaiting DB row forever","body":""},{"hash":"97cff8e","date":"2026-06-09 12:10:31 -0700","author":"Steve Abrams","subject":"viewer: documented settlement-override publish path","body":"When the PG settlement_publish_check trigger RAISEs on a publish, the card's\n✅ Publish now surfaces the violation text and offers the trigger's own\nsanctioned escape: prompt for a mandatory reason (min 5 chars), then\nBEGIN; SET LOCAL settlement.allow_override='true'; UPDATE …; COMMIT; with the\nreason appended to the design's notes as a permanent audit entry (the trigger\nadds its own 'allow_override=true at <ts>' note alongside). One design per\noverride — no bulk override, deliberate friction. Bulk publish falls back to\nper-id on a settlement RAISE so clean designs still land and blockers are\nnamed (#id list) for card-level review.\n\nE2E verified on #57684 (override→published+note→reverted clean). Trigger\nsource read: raises only on prompt-keyword PartA(leaves+directional+open-\nspace+multicolor)+PartB(banana/grape/bird/butterfly/moth) without acceptable\ncue — independent of the settlement_verdict column.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"f1c90e2","date":"2026-06-09 12:07:15 -0700","author":"Steve Abrams","subject":"viewer: state filter (All/Published/Staged/Removed/Awaiting DB) + per-state counts in header; select-all scoped to visible","body":""},{"hash":"7a2ef4e","date":"2026-06-09 11:58:47 -0700","author":"Steve Abrams","subject":"live viewer: full per-SKU action suite (publish/unpublish/remove/room/regen/TIF) + multi-select bulk bar","body":"Was a read-only watch grid. Now every card carries the whole wallco-ai admin\naction suite, proxied server-side to 127.0.0.1:9905 (loopback = admin per\nadmin-gate). Strict path whitelist on /act so the proxy can't be used as an\nopen relay. File→DB-id resolver (PNG suffix is the SDXL seed, NOT the design\nid — spoon_all_designs.local_path maps file→id, one batched psql per tick)\nwith live published/staged/removed badges. Checkbox multi-select + bulk\npublish/unpublish/remove. Lightbox zoom. Bind tightened *:9788 → 127.0.0.1\nsince the page now carries admin actions. Settlement gate stays enforced\nserver-side (PG publish_check trigger).\n\nVerified: publish→unpublish roundtrip on #57686 flips is_published t/f;\n166/240 cards resolve to DB rows, orphans show 'awaiting DB row' w/o actions.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"09578af","date":"2026-06-09 11:49:28 -0700","author":"Steve","subject":"wallco live pattern-generation viewer (zero-dep, tails data/generated)","body":""}]}