Skip to content

refactor(lark): 删大厅 bot 互教打卡,改由平台 bot @ 一次教 union - #991

Merged
deepcoldy merged 1 commit into
masterfrom
feat/hall-teach-remove
Oct 13, 2026
Merged

deepcoldy merged 1 commit into
masterfrom
feat/hall-teach-remove

Conversation

@deepcoldy

@deepcoldy deepcoldy commented Aug 24, 2026 •

Copy link
Copy Markdown
Owner

背景

机器人大厅的「bot 互教 union_id」机制(每 5min 轮询 + 点名打卡 + #hall-echo 回执)不收敛且会刷屏:

  • 被 @ 的目标若 daemon 版本旧 / scope 不足,就永远学不到自己 union → 触发反复点名;
  • 发送方 roster 落后时,还会 @ 已退团的幽灵成员(oncall 实测:RD-001 每 ~13min @ 一个已退团的 PMO-001)。

改由平台 bot 在新 bot 入大厅时主动 @ 一次来教 union(平台侧另一 MR)。本 PR 删 daemon 侧整套互教。

为什么平台 @ 一次能替代

  • bot 拿自己 union 在飞书当前能力下只能从「一条 @ 到自己的 IM 事件的 mentions[] union 盖章」学到(实测:/bot/v3/info 不返回、contact 对 bot open_id 返回空、members 列表 bot 条目不带 union)。
  • 平台 app 列大厅成员能拿到「平台视角下每个 bot 的 open_id」(实测 members API 返回查询方 app 视角的 open_id),用它发 text <at> 即可 @ 到目标 → 目标从 mentions 学到 union。责任从对等 bot 互教收归到唯一的平台 bot,一次性事件驱动,不刷屏。

删除

  • dashboard.ts:maybeAnnounceHallPresence 编排 + 5min 定时器 + team-sync 触发 + 节流状态(HALL_ANNOUNCE_* / hall-announce-state.json 读写)+ readBotCrossRef
  • dashboard-ipc-server.ts:/api/platform/hall-announce 端点(唯一调用方是上面的编排)
  • event-dispatcher.ts:大厅分支里的 #hall-echo 回执互教 + hallEchoReplied 防环 set
  • i18n:platform.hall_announce 文案(zh/en,已无引用)

保留(关键,新方案的落点)

  • recordBotUnionIdFromMentions(从任意 @ 自己的 mention 学 union)+ recordBotUnionId(自家消息回声)——平台 bot @ 新 bot 后,目标正是靠这条通用自学链路学到 union。
  • 大厅「吞掉 bot 消息不路由」的 swallow + return:平台 bot @ 新 bot 那条消息也进大厅,其他 bot 收到必须继续吞掉,否则会当任务拉起会话。

不动 tunnel 协议(team-sync 消息本身保留,只是不再触发打卡)。

⚠️ 部署顺序

本 PR 必须在平台侧「@ 一次」MR 上线之后再部署,否则中间窗口新 bot 无人教 union。

测试

  • pnpm build 通过
  • platform-team-store 7/7、platform-team-trust 10/10、event-dispatcher 300/300、bot-talk-parity 18/18、team-roster 12/12、team-group 7/7 全绿
  • 无测试引用被删机制

维护者跟进

  • 平台侧前置已就绪:平台原先「@ 一次」的实现因列群 bot 端点写成 /members/bot(应为 /members/bots)一条 @ 都没发出过;已在平台 master 修复,并补了对「在线但 roster 仍无 union」bot 的节流回填(按团队 30 分钟、每 bot 最多 6 次)以及「先推 team-sync 再 @」。上线后观测到 team-sync rev 连续变化,说明平台 @ 已实际教会一批 bot union。
  • 触发合入的现象:平台教会部分 bot 后,旧互教在同一台机器上让每个已入册 bot 各点名同一个仍未入册的 bot,在大厅里批量刷「团队登记打卡」,正是本 PR 要删的冗余路径。
  • rebase:冲突仅 event-dispatcher.ts 一处(master 期间给 hall-echo 回执加了 primary 守卫),按本 PR 意图整块删除;master 开启 noUnusedLocals 后顺手去掉不再使用的 sendMessage import。
  • 验证:bun run build 通过;event-dispatcher、platform-team-trust、platform-team-store、bot-union-ids-store、team-bot-directory、bot-talk-parity、command-handler、invite-command、bot-rename-name-refresh 共 9 个文件 1013 个测试全绿;本地 codex review 无问题(被删接口/编排/回执/文案无残留引用,mention 学 union 与大厅吞没保留完好)。未做飞书 live 验证。
  • 上线影响:已在跑的老版本 daemon 仍会按旧机制打卡(每「bot×大厅」最多 6 次后自停),升级到包含本 PR 的版本后彻底消失。

🤖 Generated with Claude Code

@deepcoldy
deepcoldy marked this pull request as draft September 24, 2026 18:40
大厅「bot 互教 union_id」机制(每 5min 轮询 + 点名打卡 + #hall-echo 回执)
不收敛且会刷屏:被 @ 的目标若 daemon 版本旧/scope 不足就永远学不到自己
union,触发反复点名;roster 落后时还会 @ 已退团的幽灵成员。改由平台 bot 在
新 bot 入大厅时主动 @ 一次来教(平台侧另一 MR),本 PR 删 daemon 侧整套互教。

删除:
- dashboard.ts:maybeAnnounceHallPresence 编排 + 5min 定时器 + team-sync 触发
  + 节流状态(HALL_ANNOUNCE_* / hall-announce-state.json 读写)+ readBotCrossRef
- dashboard-ipc-server.ts:/api/platform/hall-announce 端点(唯一调用方是上面的编排)
- event-dispatcher.ts:大厅分支里的 #hall-echo 回执互教 + hallEchoReplied 防环 set
- i18n:platform.hall_announce 文案(zh/en,已无引用)

保留(关键,新方案的落点):
- event-dispatcher.ts:recordBotUnionIdFromMentions(从任意 @ 自己的 mention 学
  union)+ recordBotUnionId(自家消息回声)——平台 bot @ 新 bot 后,目标正是靠
  这条通用自学链路学到 union。
- 大厅「吞掉 bot 消息不路由」的 swallow + return:平台 bot @ 新 bot 那条消息也
  进大厅,其他 bot 收到必须继续吞掉,否则会当任务拉起会话。

不动 tunnel 协议(team-sync 消息本身保留,只是不再触发打卡)。

⚠️ 部署顺序:本 PR 必须在平台侧「@ 一次」MR 上线之后再部署,否则中间窗口新
bot 无人教 union。

测试:pnpm build 通过;platform-team-store 7/7、platform-team-trust 10/10、
event-dispatcher 300/300、bot-talk-parity 18/18、team-roster 12/12、
team-group 7/7 全绿。无测试引用被删机制。

Co-Authored-By: Claude <noreply@anthropic.com>
@deepcoldy
deepcoldy force-pushed the feat/hall-teach-remove branch from 9fb0c38 to 7d91952 Compare October 13, 2026 15:19
@deepcoldy
deepcoldy marked this pull request as ready for review October 13, 2026 15:19
@deepcoldy
deepcoldy merged commit 864c1bb into master Oct 13, 2026
15 checks passed
@github-actions

Copy link
Copy Markdown

🚀 Released in v3.43.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant