Browse Source

docs(tdd): 迁移方案追加 T7 会话恢复 --resume 子命令落地状态

Agnes Agent 5 days ago
parent
commit
785cc92d6a
1 changed files with 23 additions and 0 deletions
  1. 23 0
      docs/tdd/orchestration/hub-migration-2026-11-08.md

+ 23 - 0
docs/tdd/orchestration/hub-migration-2026-11-08.md

@@ -276,4 +276,27 @@ T1/T2/T3 互不相干可并行(三组代码隔离在不同脚本);T5 必
 
 **下一步**:T7(会话恢复)→ T8(巡检并入 WorkBuddy automation)→ 第二步 hub 退役归档(T1–T8 稳定 ≥3 日)。
 
+---
+
+### T7 会话恢复 —— ✅ 已落地 + 验证通过(2026-11-08 用户拍板「立即实施 T7」)
+
+**目标**:`resume_interrupted.py`(恢复被中断/中途停下的 CFC 会话)逻辑移植为 skill 子命令 `--resume`,与 hub 解耦;`confirm_session.py`(模型切换+执行确认)能力已收敛(T1 实例级模型链 + T5 入队即 verified + git 真理兜底),不再单独移植 `--confirm`。
+
+**改动**(全部 `tdd-orchestrator/scripts/tdd_orchestrate.py`):
+- **移植** `RESUME_PROMPT`(续做指令:先只读 git 确认现状 → 未完成则继续做完 → 自行 commit+push 回报,无需主理人确认)+ `RESUME_DONE_MARKERS`/`RESUME_CONTINUE_CUES`(完成标记/延续语)+ `_classify_mid_work()`(半途停下判定)。
+- 新增 `_resume_branch_line(machine_cfg, client_name)`(移植 hub `discipline.branch_line`/`policy_for_instance`:local 实例或显式 `branch_policy=mainline` → 主分支口径;否则 feature/<slug> 隔离口径)。
+- 新增 `_last_real_message(cc, sid)`(读末条 assistant/user 消息)+ `_resume_session_running(s)`(`time.updated > time.idle` 运行判定,移植 opencode `_is_running_detail`)。
+- 新增 `resume_interrupted_sessions(machine_cfg, cfg, dry_run, explain, min_idle_minutes=15, recent_hours=12.0, no_midwork, allow_prod, client_filter)`:对候选实例 `list_sessions`(含 `outcome`/`time.updated`/`location.directory`/`title`)→ 运行判定 → A 类 `outcome=interrupted` 直接恢复;B 类 `succeeded/空` 读末条消息判半途停下 → 冷却(min-idle-minutes)/并发位(`_client_concurrency_limit` - running)/生产跳过 → `send_prompt(RESUME_PROMPT)`。
+- **argparse**:`--resume`(恢复)/`--resume-client`(指定实例)/`--resume-explain`(判定理由)/`--min-idle-minutes`/`--recent-hours`/`--no-resume-midwork`/`--allow-prod`;`_WORKLOG_ACTIONS` 加 `("resume", "--resume")`。
+- **main() 独立分发**(靠前、不依赖 TDD 完整配置):`--resume --dry-run` = 只读识别(列出候选+判定理由,不发送);实际恢复模式有候选但 0 成功 → 退出码 1(下一轮巡检自动重试)。
+
+**能力收敛说明**:`confirm_session.py`(check/fix/wait 模型切换 + 执行确认)不移植 `--confirm`——T1 实例级模型链已覆盖「按真实 provider 选模型」,T5 异步投递「入队即 verified」+ `dispatch.py --backfill`/`auto_advance`(git 真理)已覆盖「执行确认」,模型切换黑窗由 T2 家族黑窗 + `apply_model_rule` 承接。
+
+**验证(全过)**:
+- `py_compile` ✓;AST 断言 5 个 T7 函数全部定义 ✓。
+- 单元 9/9:`_classify_mid_work` 含完成标记/延续语/工具未收尾/非 assistant/无消息全对;`_resume_branch_line` local-45278→主分支、lan-189→feature/;`RESUME_PROMPT.format` 含反斜杠目录冒烟 ✓。
+- 集成 dry-run(lan-189):A 类识别 `TDD S-cfc-71 GREEN 实现`(ses_e477c18a,outcome=interrupted)→ 恢复候选 ✓;B 类 `[scn] 运行 1/3(余 2 位)` + `[cool] 空闲10分<15(冷却)` + `[chk] succeeded→无明确半途信号`/`→含完成标记`(正确排除已收尾)✓;dry-run 未发送,退出码 0 ✓。
+
+**下一步**:T8(巡检并入 WorkBuddy automation)→ 第二步 hub 退役归档(T1–T8 稳定 ≥3 日)。
+