ZON
Best Minds Board · Private Incident Report
2026-03-16 · 只看 info-link-sheet 链路
OpenClaw · Feishu · Link Intake

主目标已经恢复,
剩下的是“静默调度”这一个残留差距。

你的真实目标不是 issue、不是 DailyRecord、也不是 richer board,而是非常窄的一条链路: 在信息获取群里发一条链接,然后自动写进 公众号信息采集台账。 这条链路现在已经重新拿到真实 E2E 证据,最新探针写入了 A85:I85

最新 messageId om_x100b544839898484c33a0e0e3ab8fd6
最新写入 a2176e!A85:I85
可见回复 0
残留问题 静默 agent dispatch

先说结论

你的理想状态
发链接就写表

不做大模型总结,不发群回复,只抽几个核心字段,失败时可排查。

现在真实状态
已恢复

plain link 已重新进入 logs,并成功追加到公众号信息采集台账。

这次直接修复点
requireMention

把信息获取群从 true 改回 false,主链路恢复。

仍未完全实现
No Agent Dispatch

OpenClaw 仍会静默调度到 dev-triage,只是最终 replies=0

你的目标、我已实现的、还差的

目标项 在信息获取群发一条 plain link,自动写入公众号信息采集台账。 已实现 最新真实探针 om_x100...8fd6 写入 A85:I85
目标项 不要再把链接写成全局主账本语义,不要残留错误投影。 已实现 当前固定为 projection=link_library,9 列写入。
目标项 成功时不要再在群里冒出莫名其妙的回复。 已实现 最新 restored 探针最终 queuedFinal=false, replies=0
目标项 完全不要调度模型,只跑 hook。 未完全实现 仍会静默 dispatch 到 dev-triage,只是没回群。
目标项 失败时能快速知道卡在哪。 部分实现 底层日志已可排查,但用户侧失败提示仍不够强,且成功默认静默。

谁最懂这类问题,他们会怎么看

Charity Majors

她会先把链路拆成可观测阶段,而不是一开始就争论“是不是 fixed”。 这次真正有用的证据就是三段:飞书 UI 发送成功、OpenClaw 收到消息、sheet_auto 写入成功。 之前之所以体感混乱,是因为缺少用户侧 ACK,很多不同问题都被体感成“没反应”。

John Allspaw

他会强调先恢复 last-known-good,再做结构优化。A84 那次其实已经证明主链路绿了, 但在这条基线还没冻结时继续追“不要调度模型”,把主链路再次带进了风险区, 最终才出现 requireMention=true 把 plain link 一起切断的回撤。

Gene Kim

他会把这件事看成多个控制面的耦合问题:Feishu 激活规则、OpenClaw routing、 passive hook、sheet writer 是四层,任何一层都能让体感相似,但根因完全不同。 所以这次最重要的不是继续猜,而是明确哪一层已经绿、哪一层还没绿。

当前已恢复链路

最新真实 E2E 已经证明:信息获取群中的 plain link 会重新进入 OpenClaw,并最终追加到 公众号信息采集台账。下面这张图只画现在真正发生的链路,而不是理想图。

MANUAL · Lily AUTO · Feishu Channel AUTO · OpenClaw Gateway + Hook AUTO · Feishu Sheet Send Plain Link 信息获取群 / 手工发送 Receive Group Event messageId=om_x100...8fd6 Allow Plain Link requireMention=false Inbound Dedup 先去重,再下发 sheet_auto projection=link_library Silent Agent Dispatch dev-triage / replies=0 Append Row 公众号信息采集台账 A85:I85 No Visible Reply 群里没有成功提示
最新真实 E2E:2026-03-16 17:03:49 +08 收到消息,17:06:28 +08 写入 A85:I85;群内无新增可见回复,但仍发生静默 agent dispatch。

为什么“不要调度模型”没有直接修好

这部分是今天最绕、也最耽误时间的地方。两个方案都真实跑过,所以现在可以明确地说清楚: 不是没试,而是这两个试法一个只改变了去哪个 agent,一个直接把收件也关掉了。

SEMI · Variant A MANUAL · Variant B AUTO · Safe Rollback Remove Explicit Binding 删 oc_f7 -> dev-triage Link Still Arrives A84 写表成功 Still Dispatches fallback 到 content-lab Set requireMention=true 试图只保留手动触发 Plain Link Dropped messages.jsonl / gateway.log 都没进 Chain Broken 不能再自动写表 Restore Baseline requireMention=false + dev-triage binding Restored E2E A85:I85 / replies=0 Residual Gap dispatch 仍在,只是静默
两个真实尝试都跑过:删 binding 不能阻止 dispatch;把 requireMention 设为 true 则 plain link 连收件都收不到。

这次到底修了什么

1. 收件恢复

把信息获取群的 requireMentiontrue 恢复为 false, plain link 才重新进入 messages.jsonl

2. 投影收口

被动 hook 的写表逻辑继续固定在 link_library, 并强制带 --append-data-only,避免标题行再被当作数据行重复写入。

3. 去重前置

inbound dedup 已经恢复到下游处理前执行,避免同一条入站消息把后面的写表、副作用和排障都带乱。

为什么之前会纠结这么久

  1. 真正拖慢你的不是一个 bug,而是多个相似体感叠在一起:权限问题、投影语义漂移、可见回复怪异、 以及“为了追求 no-dispatch 而把收件也关掉”。
  2. 成功时默认不回群,失败也不是每次都能在用户侧显式看到,所以你从聊天体感上很难立刻知道 “到底是没收到、写慢了、写错了,还是根本没写”。
  3. A84 其实已经证明主目标可达,但当时继续做的是架构优化而不是冻结基线,这就是反复的直接原因。

关键时间线

2026-03-16 16:37:05 +08

真实探针 greenom_x100b54485dc698b8c3eefc3adfbee95 写入 A84:I84,但仍发生 silent dispatch。

2026-03-16 16:39:15 +08

错误优化。把 requireMention 设为 true 之后,plain link 在 gateway.logmessages.jsonlfeishu-sheet-auto.jsonl 都不再出现。

2026-03-16 16:57:00 +08

热修复。恢复 requireMention=false,Feishu channel 热重载成功。

2026-03-16 17:03:49 +08

真实发送。恢复后探针 E2E LINK fix-20260316-restored 进入信息获取群,messageId 为 om_x100b544839898484c33a0e0e3ab8fd6

2026-03-16 17:06:28 +08

写表成功。同一探针写入 a2176e!A85:I85writtenRows=1updatedCells=9

2026-03-16 17:06:30 +08

残留差距。gateway 记录 dispatch complete (queuedFinal=false, replies=0),说明可见回复已收口,但 silent dispatch 仍在。

证据清单

我建议你把这件事怎么收口

  1. 把现在这版当作“可用基线”:plain link 能写表、群里不乱回,这已经满足你的主目标。
  2. 把“不要调度模型”单独列为下一阶段优化,而不是再混进主链路修复里;否则会再次出现“为了优化把收件也关掉”的回撤。
  3. 下一步如果继续追 no-dispatch,应该优先从 OpenClaw 路由能力本身找 clean 开关,而不是再碰 requireMention 这种会影响收件的激活阀门。
这次终于把主目标收口了:信息获取群 plain link 已真实写回公众号信息采集台账 A85:I85,且没有新增群回复。最直接的修复点是把 requireMention 从 true 恢复为 false;剩余差距只剩下静默 agent dispatch 还在,尚未找到 clean 的 hook-only 无调度开关。
— One small system