合并 origin/master:待发消息队列归宿主叠加 master 的 active-turns 广播与保活下沉

- direct_runtime/mod.rs:保留本分支「Thread Manager 是活动回合唯一事实源」(direct_active_turn_id_at),
  丢掉 master 的 DirectTaonierActiveInvocationGuard 第二份进程内表;master 的美术背景路由改动全部保留
- direct_thread_manager.rs:双方都保留——本分支的待发队列 / 容量上限 / 残留回合兜底释放,
  与 master 的 emit_direct_active_turns_changed 广播、unsubscribe、update_active_turn 返回「是否真的变了」
- useDirectProjectChatController.ts:保留本分支入队化逻辑,采纳 master 的 rawMessage 小重构与保活下沉
- direct_turn_dispatch.rs:会话保活改挂放行占用(DirectTurnReservation._session_keepalive),
  随占用释放即停,等价承接 master 放在调用身份守卫里的保活意图
- 保留本分支对 direct-execution-production-fixture.mjs 的删除(--direct-codex-chat CLI 已退役,夹具无入口)
- 连带退役 scripts/run-agc-direct-execution-fixture.mjs 与 npm run check:agc-direct-execution-fixture(只服务该夹具)
- 文档同步:ADR / 09-24 实施计划 / decision-log 记录上述退役,09-16 与 09-18 里程碑、pitfalls 的夹具命令标注为已退役
This commit is contained in:
2026-09-30 13:35:14 +08:00
465 changed files with 34819 additions and 20200 deletions
@@ -82,6 +82,8 @@ Thread Manager 在一个回合收口**之后**原子地做:取队首 → 登
它的历史用途只有一个:手工生产验证夹具 `scripts/direct-execution-production-fixture.mjs`(PR #439 引入,不在 CI、
没有 npm 脚本或 harness 注册、没有任何测试钉它,唯一硬依赖是进程退出码)。没有产品入口价值,也不该在入队化之后
成为第二条直接起回合的路径;夹具脚本一并退役。
- 夹具的一键入口 `scripts/run-agc-direct-execution-fixture.mjs`(09-29 新增,只把 `--agc-exe` 默认成工作区
debug 二进制)与 `package.json` 的 `check:agc-direct-execution-fixture` 随夹具一起删:夹具没了它没有第二个消费者。
- CLI 一退,`DirectTurnError::TurnAlreadyRunning` 的两个生产点(调用身份守卫、占用登记)都没有调用方,
它连同前端"同一轮消息仍在处理中"文案、专属分支与测试一起删。
- `DirectTaonierActiveInvocationGuard` 的**身份**与 Thread Manager 的 `active_turn.turn_id` 是同一件事的两份记录