af5fdf8a0e
活动回合表的唯一事实源从"调用身份守卫"搬进逻辑回合占用,任务侧不再另建一张表。 - `ActiveDirectTurn` 带上快照字段(回合身份 / 项目名 / 起点 / 状态 / 活动 / 序号), 接单时初始化,收口时随占用一起消失 - 新增 `update_direct_thread_active_turn`(进度回填,只认身份一致且序号不倒退)与 `list_direct_active_turns`(只导出仍有未收口回合的 thread) - `DirectActiveTurnSnapshot` 移进 `direct_thread_manager`,`projectPath` 用线程身份, 与事件流里的项目身份是同一个字符串 - `DirectTaonierActiveInvocation` 退回纯单飞锁:只留调用身份与登记时刻 - 回合更新发射器不再按项目路径 canonicalize 找表,改为持线程身份回填 - `DirectTurnReservation::accept` 多带一个 `clientTurnId`(快照与进度匹配用), 与占用 token 是两个身份 - 上下文身份的两个测试补上"逻辑回合也接单"这一步:身份来自接单,不是调用守卫