--- name: binder-protocol description: >- 当需要把 binder 设计协议草稿编译成结构化 protocol.yaml、校验协议、或按阶段切出 stage slice 时使用;对应 openbinder protocol validate/compile/show 三个子命令。典型触发语:"把这份 protocol 草稿编译一下""校验这个 protocol.yaml""把 cofold_scoring 阶段的切片拿出来"。同义场景:协议编译、protocol compiler、十阶段、stage slice、阶段上下文、protocol validate。 argument-hint: '[validate |compile |show --stage ]' metadata: domains: [protein-binder, protocol, stage-gate] last_reviewed: '2026-08-20' --- # binder-protocol:协议编译、校验与阶段切片 ## 目的 长篇散文协议没法直接驱动可审计的流程。本技能把人写的协议草稿编译成规范的 `protocol.yaml`(`ProtocolSpec`):十个规范阶段逐一显式声明 inputs、allowed decisions、required outputs、hard rules、stop conditions,使每个阶段可寻址、可切片、可校验。编译产物是 replay、evaluate-agent、audit-ranking 共同依赖的"流程宪法"。 十个规范阶段(`CANONICAL_STAGE_IDS`): `target_research → construct_selection → epitope_selection → method_allocation → candidate_generation → candidate_filtering → cofold_scoring → optimization → final_ranking → delivery` ## 前置检查 1. 草稿 YAML 已存在(参考 `fixtures/synthetic/protocol-draft.yaml` 的 draft 形式:`stages` 为映射、无 `schema_version`)。 2. 若草稿引用 source_id,决定校验强度:传 `--sources-dir sources/` 则检查 `source-registered` 规则;不传则跳过该规则(协议可以引用本检出中未登记的源,但跳过是显式的,不是静默猜测)。 3. 若有 `source.lock.json`,compile 时传 `--lock` 把 pinned revision 写进 `protocol-source.json`;没有 lock 时该字段为 `null`/`unresolved`——**永不猜 revision**。 4. 产物落盘:`output/binder-protocol///`。 ## 1 · 编译(compile) ```bash openbinder protocol compile --out output/binder-protocol/// \ [--sources-dir sources/] [--lock source.lock.json] ``` 产出三个文件并登记 provenance: - `protocol.yaml` — 规范 `ProtocolSpec`(draft 的 stages 映射被归一化为有序列表); - Markdown 报告 — 编译过程与全部校验发现; - `protocol-source.json` — 源引用(locked revision 或 `null`/`unresolved`)。 有任何 error 级校验发现时 compile 失败:exit 2,产物照常写出供排查,状态标注 failed。 ## 2 · 校验(validate) ```bash openbinder protocol validate [--sources-dir sources/] ``` - 除 schema 形状外检查域规则:阶段覆盖与顺序、stage_id 唯一、每阶段完整性(inputs/outputs/hard rules 等)、`cofold_scoring`/`final_ranking`/`delivery` 三个产出结论的阶段必须声明结果报告方式(防止预测被写成测量); - 每条发现打印 `[error|warn] rule (stage)`;存在 error 时 exit 2,仅有 warn 时 exit 0 但必须把 warn 原样转述给用户确认是有意为之。 ## 3 · 阶段切片(show --stage) ```bash openbinder protocol show --stage cofold_scoring ``` - 输出该阶段的紧凑 JSON 切片:阶段定义 + 全局规则 + 前序阶段产出;`ranking_rules` 只对 `final_ranking`/`optimization` 两个排序相关阶段附带。 - **这是给模型/计划用的唯一正确上下文形式**:不要把整份 protocol 喂给每次调用。规划型 agent(binder-planner)做计划时只能用 stage slice。 ## 4 · 阶段门禁 "protocol compiled" 是五个人工 stage gate 之一:编译与校验通过后,把 `protocol.yaml`、报告、`protocol-source.json` 的路径与 warn 清单提交 stage-gate 审批,用户 approve 后才进入 replay/eval 阶段。revise 时归档旧产物、带着意见重跑,不覆盖。stage-gate 技能来自 openscience 插件;未安装 openscience 时,直接向用户呈现产物与 warn 清单、等用户口头 approve / revise / reject 即可,其余流程不变。 ## 输出模板 ```markdown ## 协议编译/校验结果: - 产物:`protocol.yaml` / 编译报告 / `protocol-source.json` 的路径 - 阶段数与覆盖: - 校验发现:<逐条 [error|warn],无则写"no issues"> - 源引用: - 待审批:是 / 否(stage gate 状态) ``` ## 本技能不做什么 - 不发明协议内容:编译是结构化与校验,不替作者补写科学决策;草稿缺什么就如实报 error。 - 不猜 revision:没有 lock 时 `protocol-source.json` 写 `null`/`unresolved`。 - 不跳过 stage gate:编译通过 ≠ 可以直接进入下一步,审批权在用户。 - 不把 warn 当 ok:warn 必须逐条向用户披露。 ## 收尾与下一步 - 报告编译状态与全部发现,提交 stage-gate 等待 approve / revise / reject。 - approve 后:下一步通常是 binder-replay(回放已记录的 campaign)或 binder-agent-eval(用 stage slice 驱动决策评测)。