{"slug":"dw-monitoring","total":3,"limit":100,"offset":0,"since":null,"commits":[{"hash":"772aea1","date":"2026-05-30 23:53:31 -0700","author":"Steve Abrams","subject":"fix: correct package.json main entry and add backup-file patterns to .gitignore","body":"- package.json \"main\" pointed at index.js which does not exist; corrected to scripts/broken-image-check.js (the only JS entry)\n- .gitignore was missing *.bak, *.bak-*, *.pre-*, *.orig, *.save, *.old, *~, copy-of-* patterns\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"},{"hash":"8ef7977","date":"2026-05-19 22:00:47 -0700","author":"Steve Abrams","subject":"rescrape-todo stubs for romo/arte/rlf/glitter (dw-stale-urls pass)","body":""},{"hash":"5be39bd","date":"2026-05-19 21:17:34 -0700","author":"Steve Abrams","subject":"init: dw-monitoring + daily broken-image regression guard (baseline 4989)","body":"- scripts/broken-image-check.js — reads dw_unified read-only, joins\n  shopify_products → image_hashes, alerts if count grows >=5% vs baseline.\n- data/broken-image-baseline.json — locked at {count:4989, asOf:2026-05-19}.\n- data/broken-image-history.jsonl — appends per-run snapshot.\n- LaunchAgent com.steve.broken-image-check daily at 09:00 local\n  (plist installed at ~/Library/LaunchAgents/; non-interactive session can't\n  bootstrap, must be loaded once from an interactive Terminal — README has\n  the launchctl load -w command).\n- SMTP degraded to file-only alerts: secrets-manager/.env has no GMAIL_USER\n  / GMAIL_APP_PASSWORD pair yet, so alerts land in alerts/<ISO>.txt until\n  Steve wires creds. nodemailer require is lazy + try/catch so the absence\n  doesn't break the check.\n- First run logged baseline=count=4989 ratio=1.0000 (no breach).\n"}]}