多竞赛 Orchestrator
方法论道层 · Career/竞赛方法论
多竞赛 Orchestrator
viewtype=状态机 · 答:多竞赛 Orchestrator 怎么并发调度与不空等 · 不答:具体 session 实现
并发调度与不空等原则
真源路径:career/competitions/_infra/ORCHESTRATOR.md · 图型:状态机 · 域:Career/竞赛方法论
真源正文
竞赛 Orchestrator 手册
一个主 session 当 Orchestrator,通过 tmux 启动多个子 session 并行/串行处理各竞赛。
本文件定义:谁做什么、怎么调度、卡住怎么办、怎么把决策收敛到一处、怎么交接。
落地资产:启动器 launch_fable_session.sh、决策台 ../DECISIONS.md、各竞赛 TASK_CARD.md 与 MILESTONE_*.md。
1. 角色分工(硬边界)
| 角色 | 是谁 | 负责 | 不碰 |
|---|---|---|---|
| Orchestrator | 主 session(当前这个) | 浏览器操作(提交/查分/建 key/报名)、协调、把待决策收敛进 DECISIONS.md、向用户汇报、给子 session 派活 | 不亲写竞赛实现代码(交子 session) |
| 子 session | tmux 里的 clean Fable/Codex,每竞赛一个 | 该竞赛的实现(搭管线/跑实验/改代码/本地验证),做完写 handoff 交回 | 不做浏览器提交(登录态+最终确认在 Orchestrator/用户)、不跨竞赛 |
| 用户 | 你 | 对所有竞赛的关键点拍板(看 DECISIONS.md 一次决定) | 不用逐 session 盯 |
分工依据:浏览器登录态与最终提交确认集中在主 session(避免子 session 各自处理凭据、避开无人值守权限死锁);实现代码是纯文件+bash 工作,子 session 用 acceptEdits 自主跑。呼应用户既定纪律「网页/实现交 clean session,报名/收集/排期归主 agent」。
2. 并发调度策略(用户明确要求)
核心:不空等。 任一竞赛卡在「等用户决策」或「等外部」,Orchestrator 立即让下一个竞赛的实现先动。
Orchestrator 主循环:
for 竞赛 in 启动序(DECISIONS.md D3 定):
读该竞赛 TASK_CARD + MILESTONE
若有挡路决策未决 → 记入 DECISIONS.md → 跳过,去下一个竞赛(不空等)
否则 → 启动子 session 跑实现(launch_fable_session.sh)
子 session 报「需决策」→ Orchestrator 收进 DECISIONS.md,切下一个竞赛
子 session 报「阶段完成」→ Orchestrator 验收 + 更新 MILESTONE + 汇报用户
所有竞赛都卡在决策 → Orchestrator 把 DECISIONS.md 整理好,一次性交给用户阻塞→切换判据:子 session 触及以下任一即「阻塞」,Orchestrator 记决策点并切下一个——
- 需要用户拍板(选型/投入/凭据)
- 需要浏览器登录态(提交/下载登录墙后内容)
- 需要外部(等评测结果/等额度/等报名开放)
用户不及时回复时:不停。按 D3 序让下一个竞赛实现跑起来;用户回来看 DECISIONS.md 一次性清账。
3. 决策收敛(单一入口)
所有待决策只进 ../DECISIONS.md,分三档(🔴挡路/🟡可先动/🟢顺手)。用户只看这一个文件,回复形如「D1:A D4:A」,Orchestrator 据此分发。已决的移到文末存档。子 session 不直接找用户要决策,一律回报 Orchestrator 汇总。
4. 启动子 session
bash competitions/_infra/launch_fable_session.sh <name> <workdir> <task_card>
# 例(讯飞):
bash competitions/_infra/launch_fable_session.sh xfyun_exec ~/code/comp_xfyun \
career/competitions/xfyun_nl2workflow/TASK_CARD.md- 每竞赛代码在
~/code/comp_<slug>/(context-infra 之外,合规且不被自动 commit)。 - 子 session 用
--model fable --permission-mode acceptEdits;跑 python/pip 若被权限拦,在该 workdir 的.claude/settings.jsonallowlist(禁 dangerously-skip-permissions)。 - 观察:
tmux attach -t <name>(detach: Ctrl-b d);列表tmux ls。
5. 子 session 的 TASK_CARD 必含
自包含,让子 session 零上下文也能开工(参考 AFAC 的 afac2026_task4_memory_qa/TASK_CARD.md):
① 前置检查(不满足就停下报告,别瞎跑)② 够用的背景(评分/约束/数据位置)③ 工作循环 ④ 硬边界(只在本竞赛目录、不碰浏览器、不 git、context 紧写 handoff 交回)⑤ 优化 roadmap(若有)。
6. Handoff(context 压力/换 session 时交接)
任一 session(含 Orchestrator)context 吃紧 → 写 handoff 到该竞赛 MILESTONE_<date>.md 或 ~/code/comp_<slug>/logs/session_progress.md,含:当前状态一句话、真源指针、下一步单一动作、断点续跑方式。新 Orchestrator 冷启动读 PROGRAM_HANDOFF.md(程序级)+ 各竞赛 MILESTONE 即可接手。
7. 当前实例状态(2026-07-17)
- Orchestrator=本 session;AFAC 由主 session 直驱(未拆子 session,因浏览器提交+快速迭代耦合紧)。
- v2 AFAC 跑中(item-1 保守组装,国内站北京区)。
- 其他竞赛:待 D3 定序后逐个起子 session。
- 决策台:DECISIONS.md 有 D1-D7 待你清。
provenance:career/competitions/_infra/ORCHESTRATOR.md data/methodology_dao.mjs