{"slug":"stack-map-viewer","total":22,"limit":100,"offset":0,"since":null,"commits":[{"hash":"d8cbff8","date":"2026-09-25 13:56:01 -0700","author":"Steve Abrams","subject":"TK-12268: add creds-in-URL fetch guard (fleet pattern) to gated page","body":"Relative fetch() on a Basic-Auth page threw on user:pass@host bookmarks.\n\nCo-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01D7LB6rCwpA7ubJTqYzqXEX"},{"hash":"80c1277","date":"2026-09-22 15:47:34 -0700","author":"Steve Abrams","subject":"add README (durability doc: keep-alive covers it by default; local-only by design; views + data model)","body":""},{"hash":"fe221b0","date":"2026-09-22 14:49:52 -0700","author":"Steve Abrams","subject":"viewer: render paused health status (⏸)","body":""},{"hash":"874d7a6","date":"2026-09-22 14:40:39 -0700","author":"Steve Abrams","subject":"viewer: render discontinued health status (⊘) distinctly from broken/unmonitored","body":""},{"hash":"07d50b5","date":"2026-09-22 14:19:10 -0700","author":"Steve Abrams","subject":"viewer: add 📅 as-of date+time to the nav/toolbar (live data timestamp)","body":""},{"hash":"90346bf","date":"2026-09-22 14:00:16 -0700","author":"Steve Abrams","subject":"5x REPORT: Cody SHIP-IT verdict + scope occlusion claim to desktop widths (honest wording)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_018b1cDQdM4DFs1BGsqimvy3"},{"hash":"4a01f55","date":"2026-09-22 13:54:37 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T13:54:25 (1 data files) — 5x/REPORT.md","body":""},{"hash":"09c69a9","date":"2026-09-22 13:53:30 -0700","author":"Steve Abrams","subject":"/5x REVISE fixes (TK-12030): persistent drawer (Esc+X only) + push-layout so chips are never occluded; heartbeat LAST RUN parses in-content ts, mtime only as flagged-UNVERIFIED fallback (kills the db-touch lie in the honesty feature itself)","body":"Cody-gate findings #1 (over-aggressive dismiss) + #2 (mtime lie) fixed; #3 replayable probe saved to 5x/verify.mjs. Verified 12/12.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_018b1cDQdM4DFs1BGsqimvy3"},{"hash":"dc60ca8","date":"2026-09-22 13:39:27 -0700","author":"Steve Abrams","subject":"Scrapers view: add Health column from live scraper-status.json (✗ broken / ✓ verified / ○ unmonitored) with failure reason on hover; surfaces 13 broken scrapers — 6 share one browser-launch infra failure","body":""},{"hash":"71dc524","date":"2026-09-22 13:33:43 -0700","author":"Steve Abrams","subject":"Scrapers view: expand from 50 skill-backed to ALL 168 vendors (vendor_registry + every *_catalog table), exclude backup/temp tables, mark ◆ has-skill vs registry-only; big lines (Kravet/Schumacher/Thibaut/Scalamandre) now covered","body":""},{"hash":"278a01e","date":"2026-09-22 13:27:25 -0700","author":"Steve Abrams","subject":"scraper view: authoritative vendor_registry.catalog_table resolver (SKILL.md table used only if it exists, else registry match) — recovers 1838→w1838, cowtan/colefax/arte colorway scrapers; quote table names for digit-leading safety","body":""},{"hash":"fa2db10","date":"2026-09-22 13:17:37 -0700","author":"Steve Abrams","subject":"scraper staleness: add crawled_at + promote created_at (new-row insert = real scrape activity); only updated_at stays db-touch — fixes york/elitis reading Mar instead of Jun, anna-french now correctly 22d","body":""},{"hash":"3dcba1b","date":"2026-09-22 13:13:56 -0700","author":"Steve Abrams","subject":"Add 'date last run' to all drill cards (officers, agents, skills, projects)","body":"Every entity's 5W card now carries a LAST RUN row sourced from a TRUE\nexecution signal, never a fabricated one:\n- officers/agents: newest ticket-event OR reversible-ledger entry under the\n  agent name (events.jsonl/ledger.jsonl are append-ordered -> last match = newest);\n  idle/missing-md agents show an explicit 'never recorded' rather than a guess\n- skills: vendor _catalog scrape ts (scrapers) -> data/latest.json heartbeat\n  mtime (health skills) -> cron-driver attribution -> 'on-demand, no run record'\n- projects: newest git commit (never the dir mtime, which moves on edit)\nFrontend already renders info.lastRun; this fills it server-side.\ngrep -F name guard added. TK-12027.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_018b1cDQdM4DFs1BGsqimvy3"},{"hash":"1a1a9cd","date":"2026-09-22 13:03:47 -0700","author":"Steve Abrams","subject":"scraper view: History column — cadence-lapsed vs onboarded-once vs never-scraped (distinct scrape-date count); summary counts + card note","body":""},{"hash":"db6fb5e","date":"2026-09-22 13:00:15 -0700","author":"Steve Abrams","subject":"scraper staleness: measure TRUE last-scrape (prefer last_scraped/scraped_at/imported_at); flag db-touch dates (updated_at bulk migrations no longer read as fresh runs)","body":""},{"hash":"175dbc0","date":"2026-09-22 12:55:49 -0700","author":"Steve Abrams","subject":"viewer: Scrapers ⏱ view — sortable staleness table (all 50 scrapers ranked by days-since-last-run, color-coded, row→5W card)","body":""},{"hash":"4c7440f","date":"2026-09-22 12:51:34 -0700","author":"Steve Abrams","subject":"viewer: add LAST RUN to scraper cards (newest scrape timestamp + age + row count from dw_unified staging table)","body":""},{"hash":"18c85c0","date":"2026-09-22 12:39:57 -0700","author":"Steve Abrams","subject":"viewer: click any skill/canary → description + who/what/where/why/when 5W card; auto-open one on load","body":""},{"hash":"a676017","date":"2026-09-22 11:42:17 -0700","author":"Steve Abrams","subject":"viewer: draggable nodes + recursive drill + view switcher","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01D2KFGQK7p7ahEzug7HBMZF"},{"hash":"da88d74","date":"2026-09-22 11:22:56 -0700","author":"Steve Abrams","subject":"stack-map: add live folders + drill-downs for skills, agents, projects","body":"- scan ~/Projects (768 dirs, 741 git repos) as a new drillable Projects node\n- 31 name-regex folders: 15 skills, 8 agents, 8 projects — each a live drill-down\n- make Agents + Skills SVG nodes clickable (were not); add pj_all/pj_repos\n- grouped 'Folders — click to drill' chip strip below the map\n- filter dot-dirs from scans; trim _lists from the 30s stats poll payload\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01HS8csQCEvLbTkcFz5CRqXq"},{"hash":"c84072e","date":"2026-09-22 10:38:40 -0700","author":"auto-commit-fleet","subject":"auto-data-snapshot: 2026-09-22T10:38:29 (1 data files) — .port","body":""},{"hash":"e4565d3","date":"2026-09-22 10:18:48 -0700","author":"steve","subject":"stack-map live interconnection viewer","body":""}]}