|
@@ -214,7 +214,17 @@ T1/T2/T3 互不相干可并行(三组代码隔离在不同脚本);T5 必
|
|
|
- monkeypatch 验证 auto_dispatch 接入点:`[instance-pick] 选路实例:lan-b` → `client_override` 正确透传到分配路径,派发成功核验 ✓。
|
|
- monkeypatch 验证 auto_dispatch 接入点:`[instance-pick] 选路实例:lan-b` → `client_override` 正确透传到分配路径,派发成功核验 ✓。
|
|
|
- 附带发现(非 T3 引入,记录待后续优化):`enumerate_sessions` 全量枚举在部分远端实例连接超时时会很慢(真实环境 >250s),影响 `auto_dispatch` 首步;建议 T5 直连改造时并行化/短路不可达实例。
|
|
- 附带发现(非 T3 引入,记录待后续优化):`enumerate_sessions` 全量枚举在部分远端实例连接超时时会很慢(真实环境 >250s),影响 `auto_dispatch` 首步;建议 T5 直连改造时并行化/短路不可达实例。
|
|
|
|
|
|
|
|
----
|
|
|
|
|
|
|
+### T4 槽位并发锁 —— ✅ 已落地 + 验证通过(2026-11-08 用户拍板「立即实施 T4」)
|
|
|
|
|
+
|
|
|
|
|
+**改动**:
|
|
|
|
|
+- **移植** `slot_lock.py` → `tdd-orchestrator/scripts/slot_lock.py`:从 hub `tools/xaf_agent_hub/slot_lock.py` 忠实移植(sed 归一后实现逐行一致),仅默认根目录改 `~/.tdd-orchestrator`(与 hub `~/.xaf_agent_hub` 隔离,迁移期双轨互不干扰;第二步 hub 退役后可统一)。含 `SlotManager`(实例互斥文件锁 msvcrt/fcntl + 槽位预留 TTL/grace/pid 清理)、`SlotLockTimeout`、`Slot`、`pid_alive`。
|
|
|
|
|
+- **接入** `_alloc_with_slot_lock()`(新增于 `tdd_orchestrate.py`):`_alloc_with_quota_check` 新建分支改走锁保护——`with sm.lock(client_name)` 持锁期内**重扫目标实例最新会话**(锁外 all_sessions 快照并发下可能过时)+ `sm.pending()` 叠加在途预留数 → 判定 `running + pending >= limit` 拒绝;reserve → `_alloc_dedicated_session` → commit 闭环,创建失败/异常 release。
|
|
|
|
|
+- **优雅降级**:`slot_lock` 不可导入(mes 等未随 skill 分发)→ 回退原 `_alloc_dedicated_session` 直连逻辑,无锁项目不受影响。
|
|
|
|
|
+
|
|
|
|
|
+**实测(断言全过)**:
|
|
|
|
|
+- slot_lock 单元(临时 root):锁互斥(两线程先后获取);reserve→pending 计数;commit 后 active 去重(`pending(inst,{ses})==0`);传播窗口(commit 后未入 active 且 grace 内仍计占用);release 清理;TTL 过期自动清理;pid 消失保守期仍计 + TTL 兜底清理(Windows OpenProcess 失败保守 True,与 hub 同构)。
|
|
|
|
|
+- 接入断言:配额未满 → reserve→commit 闭环 status=new;锁内重扫发现 3 busy + 1 在途 → skipped(note「运行 3 + 在途 1」证明预留正确叠加)。
|
|
|
|
|
+
|
|
|
|
|
+**下一步**:T5(派发链直连·核心)→ T6(填槽并入 --auto)→ T7(会话恢复)→ T8(巡检并入 WorkBuddy automation),依序推进。
|
|
|
|
|
|
|
|
-**下一步**:T4(槽位并发锁)→ T5(派发链直连)→ T6(填槽并入 --auto)→ T7(会话恢复)→ T8(巡检并入 WorkBuddy automation),依序推进。
|
|
|
|
|
|
|
|