Files
blog-app/.review-tmp/build1-summary.md
2026-08-17 17:11:27 +08:00

6.8 KiB
Raw Blame History

Build1 Patch Summary — scripts/daily_watchdog.py

Date: 2026-08-16 · Workspace: /home/yi/opencode-blog-showcase/blog-app

Patch summary (surgical edits, file 596→853 lines)

  1. Per-project source accounting

    • collect_all() now returns (project_results, source_counts: dict[str,int], sources_failed); each project dict gains sources_used: [] populated on every successful source.
    • Report header ## 数据源 lists all 5 canonical sources with success counts, e.g. - GitHub Releases API (6/6), - GitHub releases.atom (4/6).
    • meta_json per project now includes sources_used; top-level gains source_counts.
  2. Failure reasons

    • All 4 fetch functions return (result, error) tuples; source_errors entries are "<source>: <reason>" (reason ≤80 chars, newlines stripped via _short_reason).
    • Project sections render ⚠️ 抓取失败: <source> — <reason> (failed projects: one line per source; partial projects: enriched npm / releases.atom / Exa lines).
    • Atom timeouts classified as 超时 (github.com 限流/网络).
  3. Atom hardening

    • fetch_releases_atom: timeout 45s (ATOM_TIMEOUT), ONE retry on requests.exceptions.Timeout (sleep 5s), never raises (returns (None, reason)).
  4. Self-lock

    • _watchdog_already_running() via pgrep -f daily_watchdog.py excluding own pid, hardened to only count processes whose argv[0] is a python interpreter (avoids false positives from processes that merely mention the filename). At main() start: if running → log + return 0.
  5. --fix-if-missing

    • _today_report_ok(date): today's report exists in watchdog.db AND meta has ≥2 projects status != 'failed' → log today's report already OK — skip full run (--fix-if-missing), exit 0 fast. Default behavior unchanged.
  6. Kept: LLM integration (POST http://127.0.0.1:4000/v1/chat/completions, model="analysis", no auth, timeout=300) — already present in the file; report sections unchanged except 数据源 header + enriched ⚠️ lines; **LLM 摘要:** renamed to **LLM 总结:** and moved to render for ALL projects (previously only rendered when GitHub data existed); exit codes unchanged (1 only if ALL projects failed). No new imports beyond stdlib + requests.

Verification evidence

py_compile

PY_COMPILE_OK

REAL full run (final, exit code 0)

Command: HOME=/home/yi /usr/bin/python3 scripts/daily_watchdog.py

EXIT=0
2026-08-16 16:52:27 [INFO] Starting daily watchdog for 2026-08-16
2026-08-16 16:52:34 [INFO] Exa MCP initialized, session=250675fa-...
2026-08-16 16:57:03 [WARNING] Atom feed timeout for code-yeongyu/oh-my-openagent (attempt 1/2)
2026-08-16 16:58:00 [WARNING] Atom feed timeout for code-yeongyu/oh-my-openagent (attempt 2/2)
2026-08-16 16:59:47 [WARNING] Atom feed timeout for vectorize-io/hindsight (attempt 1/2)
2026-08-16 17:00:37 [WARNING] Atom feed timeout for vectorize-io/hindsight (attempt 2/2)
2026-08-16 17:01:29 [INFO] Report saved to /home/yi/opencode-blog-showcase/logs/daily-agent-watchdog-2026-08-16.md
2026-08-16 17:01:29 [INFO] SQLite record saved to /home/yi/opencode-blog-showcase/data/watchdog.db
2026-08-16 17:01:29 [INFO] Daily watchdog completed successfully

Full stdout: ./.review-tmp/build1-run.log (tail) / ./.review-tmp/build1-run-final.log (full).

数据源 header (verbatim)

## 数据源

- GitHub Releases API (6/6)
- GitHub commits API (6/6)
- npm registry (5/6)
- GitHub releases.atom (4/6)
- Exa web search (6/6)

One-line LLM 总结 excerpt per project (all real Chinese, 0 placeholders)

  • sst/opencode: 本次 v1.18.18 版本更新主要聚焦于核心功能的缺陷修复与模型兼容性优化…
  • anthropics/claude-code: 本次更新为 claude-code 增加了对 GitLab 合并请求 URL 的支持,并引入了可…
  • openai/codex: 本次0.147.0版本更新引入了便携式Agent插件安装与跨目录搜索功能支持…
  • NousResearch/hermes-agent: 本次更新为 Hermes Agent v0.20.1 补丁版本,主要整合了自 v0.20.0 以来的大量…
  • code-yeongyu/oh-my-openagent: 本次更新发布了 v5.0.0-beta.7 版本,标志着项目向全新的 OMO Native CLI 架构…
  • vectorize-io/hindsight: 本次 v0.9.1 更新主要聚焦于系统稳定性和功能扩展,修复了引擎并发死…

Report counts: **LLM 总结:** ×6, **Breaking Changes:** ×6, ★ **相关性:** ×6, ⚠️ 抓取失败: ×2, placeholder ("LLM 未集成"/"LLM 总结失败") ×0.

Atom timeout classification (exercised live)

**releases.atom:** ⚠️ 抓取失败: GitHub releases.atom — 超时 (github.com 限流/网络)

(2 occurrences — oh-my-openagent and hindsight both timed out twice; retry logic logged attempt 1/2attempt 2/2.)

--fix-if-missing (exit 0 fast)

2026-08-16 17:01:41 [INFO] today's report already OK — skip full run (--fix-if-missing)
FIX_EXIT=0

Self-lock idle check

idle _watchdog_already_running = False
IDLE_EXIT=0

Positive case also demonstrated live: while another instance ran, the script logged Another daily_watchdog instance is already running — skip and exited 0.

meta_json (watchdog.db, 2026-08-16)

source_counts: {'GitHub Releases API': 6, 'GitHub commits API': 6, 'npm registry': 5, 'GitHub releases.atom': 4, 'Exa web search': 6}
  opencode ok ['GitHub Releases API', 'GitHub commits API', 'npm registry', 'GitHub releases.atom', 'Exa web search']
  claude-code ok [...same 5...]
  codex ok [...same 5...]
  hermes-agent ok [...same 5...]
  oh-my-openagent partial ['GitHub Releases API', 'GitHub commits API', 'npm registry', 'Exa web search']
  hindsight partial ['GitHub Releases API', 'GitHub commits API', 'Exa web search']

Anomalies

  1. Concurrent agent: another opencode agent (PID 1097346, task "B2 LLM 集成 + B3 Flask/cron") was editing the same file and repeatedly ran the script (5+ times) during this build. It had already added the LLM integration (summarize_with_llm real POST) before my patches; I kept it and patched around it. Its runs repeatedly triggered my self-lock (correct behavior) and overwrote the report/DB between my runs — final state is from MY run.
  2. Self-lock false positive: pgrep -f daily_watchdog.py matched the concurrent agent's own process (its task text mentions the filename). Hardened the lock to only count processes whose argv[0] is a python interpreter; idle check now returns False correctly.
  3. GitHub API rate limit: during the 16:16 run, api.github.com returned 403 rate-limit for all 6 projects (exhausted by the concurrent agent's repeated runs). The report honestly showed ⚠️ 抓取失败: GitHub Releases API — 403 Client Error: rate limit exceeded… (truncated ≤80 chars). By the 16:52 run the limit had reset (6/6).
  4. releases.atom intermittent timeouts confirmed live (as background noted): 45s timeout + 1 retry handled them; classified as 超时 (github.com 限流/网络).