{"slug":"cncp-failure-collector","total":15,"limit":100,"offset":0,"since":null,"commits":[{"hash":"0d7a271","date":"2026-05-30 11:34:45 -0700","author":"SteveStudio2","subject":"Apply benign-noise filter in scanLinuxLogs so nginx TLS-probe noise (bad key share) stops creating ledger rows","body":""},{"hash":"bba7324","date":"2026-05-29 09:14:38 -0700","author":"SteveStudio2","subject":"fix(collector): bump execSync maxBuffer to prevent pm2 jlist ENOBUFS death","body":"The mac2 collector died 2026-05-15 11:37 in a 'pm2 jlist failed: spawnSync\n/bin/sh ENOBUFS' spiral — pm2 jlist output exceeded execSync's 1MB default\nmaxBuffer on a busy box, so readPm2() threw every cycle and the process\nexited (never resurrected, froze the CNCP mac2 failure ledger for 14 days).\nSet maxBuffer 64MB on pm2 jlist and 16MB on the log-tail call."},{"hash":"b843af5","date":"2026-05-18 20:14:05 -0700","author":"SteveStudio2","subject":"docs: fix misleading comment + variable name (no journalctl; signal not controller)","body":""},{"hash":"81d499d","date":"2026-05-18 20:13:38 -0700","author":"SteveStudio2","subject":"chore: add dist/build/.next to .gitignore","body":""},{"hash":"411ed67","date":"2026-05-11 21:04:43 -0700","author":"SteveStudio2","subject":"fix(collector): skip phantom pm2 restarts","body":""},{"hash":"b3aa723","date":"2026-05-11 20:50:40 -0700","author":"SteveStudio2","subject":"feat(collector): also filter nginx TLS handshake bot noise","body":""},{"hash":"e295195","date":"2026-05-11 20:44:59 -0700","author":"SteveStudio2","subject":"feat(collector): per-process benign-noise filter for known transient sources","body":""},{"hash":"064993f","date":"2026-05-11 18:36:08 -0700","author":"Steve","subject":"tick 9: cross-platform — also runs on Kamatera, host-tagged failures","body":"Changes:\n- COLLECTOR_HOST env var added (default os.hostname()); all POSTs include host field\n- IS_LINUX flag added; buildLaunchdWatchlist() bails on Linux\n- scanLinuxLogs() new — tails LINUX_LOG_PATHS (nginx error log + syslog by default),\n  posts only on meaningful lines (error|fatal|crit|emerg|alert|panic|segfault)\n- install-kamatera.sh — idempotent installer for the Kamatera box (CNCP_URL\n  points at Mac2 over Tailscale 100.65.187.120; CNCP-reachable preflight)\n- ecosystem.config.js: COLLECTOR_HOST='mac2'\n- README untouched\n\nVerified end-to-end 2026-05-11:\n  Mac2     pm2/cncp-failure-collector host=mac2     → http://127.0.0.1:3333\n  Kamatera pm2/cncp-failure-collector host=kamatera → http://100.65.187.120:3333 (tailnet)\nBoth visible in CNCP /api/failures with distinct host tags; dedup keyed on host\n+ source + processName so cross-machine same-name failures don't collide."},{"hash":"2573de7","date":"2026-05-11 14:26:51 -0700","author":"SteveStudio2","subject":"shopify cached-page price canary + nightly launchd at 4:17 AM PT; posts source=shopify-cache rows to /api/failures (throttled fetches)","body":""},{"hash":"78ad17a","date":"2026-05-11 12:35:46 -0700","author":"SteveStudio2","subject":"tick 7: prune classifier rate-limit Map of entries older than 24h","body":""},{"hash":"4292cad","date":"2026-05-11 12:31:28 -0700","author":"SteveStudio2","subject":"tick 6: README pass — covers ticks 2-5b features (classifier, queue, chat, idea-bar, env vars, endpoints)","body":""},{"hash":"8a79514","date":"2026-05-11 12:05:51 -0700","author":"SteveStudio2","subject":"tick 4: fire-and-forget classify on new rows (5min per-process rate limit, env-var disable, server single-flight)","body":""},{"hash":"c57181c","date":"2026-05-11 11:51:31 -0700","author":"SteveStudio2","subject":"tick 3: launchd plist-driven .err.log tailing (97 com.steve.* jobs watched, refresh every 10min, 200 cap, 100MB skip)","body":""},{"hash":"495181c","date":"2026-05-11 11:17:47 -0700","author":"SteveStudio2","subject":"tick 2: heartbeat log every 10 quiet cycles, skip self in pm2 scan","body":""},{"hash":"f20012e","date":"2026-05-11 10:42:09 -0700","author":"SteveStudio2","subject":"initial scaffold — pm2 + launchd failure collector for CNCP (tick 1: data only, no classifier)","body":""}]}