Builders Digest 恢复排查报告(v3 — 最终版)
排查日期: 2026-05-28
排查人: Muse + Zen
状态: 根因已修复,进入降级运行阶段
1. 根因(最终确认)
两层问题叠加导致断更:
问题 1:Cron payload 硬编码旧日期文件名(直接原因,已修复)
cron message 中硬编码了 builders-digest-2026-03-23.md 作为输出路径。每天 cron 成功运行、成功拉取数据、成功生成内容,但反复写入同一旧文件。这解释了:
- research 目录只有 03-23 和 03-24 的文件
- builders-digest-2026-03-23.md 的 mtime 为 2026-05-27(每天被覆写)
- cron 状态始终 ok(因为确实成功了,只是写到了错误文件)
修复状态:Zen 已将 cron payload 改为动态日期 builders-digest-YYYY-MM-DD.md。
问题 2:上游 X API 500 错误(当前阻塞)
feed-x.json 可达但 X 数据为空,上游返回 X API: User lookup failed: HTTP 500。这意味着 follow-builders 的中央 feed 服务器在调用 X/Twitter API 时失败。
当前 feed 状态:
- X builders: 0(API 500)
- Podcast episodes: 1(正常)
问题 3:web_fetch DNS 拦截(影响 Muse,不影响 cron)
系统运行代理/TUN 模式,DNS 解析到 198.18.0.x(RFC 2544 专用地址),触发 OpenClaw web_fetch 安全策略拦截。但系统 curl 和 Node.js fetch 均正常,cron 不受影响。
此问题影响范围:Muse 的所有 web_fetch 调用(情报采集、竞品扫描、深度调研),但不影响 Node.js 脚本和系统级网络访问。
2. 当前状态
| 组件 | 状态 | 说明 |
|---|---|---|
| Cron job | ✅ 已修复 | 动态日期,已验证 |
| GitHub feed | ✅ 可达 | curl / Node 均正常 |
| X/Twitter 数据 | ❌ 空数据 | 上游 X API 500 |
| Podcast 数据 | ✅ 有 1 条 | 正常 |
| aihot API | ✅ 可达 | 50 条 selected items |
| Muse web_fetch | ❌ 受阻 | DNS 代理导致,不影响 cron |
| 文件输出 | ✅ 已修复 | 不再硬编码旧日期 |
3. 降级运行策略
日常 digest 模式(立即生效)
在 X API 恢复前,按以下优先级组装每日 digest:
数据源优先级:
- Podcast(来自 follow-builders feed)— 正常产出
- aihot selected items(AI 资讯热榜)— 作为 X builder 的替代
- 端点:https://aihot.virxact.com/api/public/items?mode=selected&since=today
- 覆盖:产品发布、行业动态、融资新闻
- 格式:从 aihot 条目中筛选 builder 相关内容,按人物/公司分组 - Product Hunt(待接入)— 补充产品发现维度
建议的 cron message(降级版):
Run the follow-builders skill:
1. Execute prepare-digest.js
2. If xBuilders > 0, process tweets as normal
3. If xBuilders == 0:
- Use aihot API (curl with UA header) to fetch today's selected items
- Filter for builder/founder/engineer related content
- Format as "## AI BUILDER DYNAMICS" section (replacing ## X / TWITTER)
- Include original links for each item
4. Process podcast normally if episodes > 0
5. Save to workspace-shared/research/builders-digest-{today}.md (Asia/Shanghai date)
6. Do NOT use hardcoded dates
cron 执行中的 aihot 调用
cron 在 isolated session 中运行,使用系统 curl(不受 web_fetch 限制)。aihot API 调用方式:
UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
curl -sH "User-Agent: $UA" "https://aihot.virxact.com/api/public/items?mode=selected&since=$(TZ=Asia/Shanghai date +%Y-%m-%d)"
4. 补产计划
缺口范围
2026-03-25 ~ 2026-05-28(65 天)
补产策略
不建议逐日补产 65 份 digest。建议产出 2 份回顾:
回顾 1:2026 年 Q1 AI Builders 精选(3 月下半月)
- 覆盖 03-15 ~ 03-31
- 可从现有 builders-digest-2026-03-23-final.md 和 builders-digest-2026-03-24.md 提取素材
- 补充 aihot 历史数据
回顾 2:2026 年 4-5 月 AI 动态精选
- 覆盖 04-01 ~ 05-28
- 用 aihot since 参数拉取期间数据
- 重点标注重大产品发布、融资、人事变动
格式与日常 digest 对齐,保存到 workspace-shared/research/ 目录。
5. web_fetch 修复建议(Muse 侧)
Muse 的 web_fetch 因 DNS 代理拦截无法使用,影响所有手动情报采集。建议 Zen 评估以下方案:
| 方案 | 复杂度 | 说明 |
|---|---|---|
| OpenClaw 配置 web_fetch DNS 白名单 | 低 | 若 gateway 支持配置跳过 198.18.0.x 的安全检查 |
| web_fetch 走系统代理 | 中 | 让 web_fetch 尊重系统 HTTP_PROXY 设置 |
| Muse 改用 exec + curl | 中 | 绕过 web_fetch,但需修改 AGENTS.md 禁令 |
| 当前状态保持 | 无 | cron 正常,Muse 手动采集受限但非致命 |
6. 行动清单
| 优先级 | 行动 | 责任人 | 状态 |
|---|---|---|---|
| P0 | 修复 cron 硬编码日期 | Zen | ✅ 已完成 |
| P0 | 确认 feed 源状态 | Zen | ✅ 已完成 |
| P1 | 更新 cron message 为降级模式 | Zen | 待执行 |
| P1 | 确认明早 07:30 cron 正常产出新日期文件 | 自动 | 待验证 |
| P2 | 产出 Q1 回顾 digest | Muse | 待执行 |
| P2 | 产出 4-5 月回顾 digest | Muse | 待执行 |
| P3 | 评估 web_fetch DNS 修复方案 | Zen | 待评估 |
| P3 | 接入 Product Hunt 替代源 | Muse + Zen | 待方案选定 |
附录:诊断信息汇总
系统 DNS
- DNS server:
198.18.0.2 - GitHub 解析:
198.18.0.78 - 代理:
127.0.0.1:1082(HTTP/HTTPS) - ExceptionsList:
198.18.0.0/15 - 系统类型: TUN 模式代理(Surge / Clash / 类似工具)
Cron 配置
ID: 4ea9018a-76c4-44ee-ba01-d678cb4a0b59
Name: AI Builders Digest
Schedule: 30 7 * * * @ Asia/Shanghai
Status: ok
Delivery: announce -> telegram:7828878153
feed 数据
podcastEpisodes: 1
xBuilders: 0
totalTweets: 0
X API error: User lookup failed: HTTP 500
aihot API
selected items: 50
可达性: 正常(系统 curl)