context-infra 检查与复盘infra.guiming.net · 全内容自包含呈现 · 生成于 2026-07-21 16:28 UTC

workflow_module_integration_protocol

Z3 全文↑ Z2 条目

道-方法 · 道层 skill 全文

← 返回道层 skill 索引 · 返回方法论区

本页是 <code>rules/skills/drafts/workflow_module_integration_protocol.md</code> 的逐字投影(仅隐私清洗,零改写)。

时点提示:本页是仓内文件 rules/skills/drafts/workflow_module_integration_protocol.md 的逐字投影(仅做隐私清洗:仓库根绝对路径→相对路径、家目录→~/;除此零改写)。若源文件后续有修订,以仓内真源为准。

报告元数据(frontmatter)
name: workflow_module_integration_protocol
description: 标准化模块接入协议 v0.1——模块自描述契约(MODULE.md)为中心,规定注册/调用/留痕/测试/依赖版本五件事,容纳实现态与设计态模块共存
type: Workflow(道层/治理)
status: draft (Beta) — 晋级前需 ≥1 个真实模块端到端跑通协议校验(P5 eval_harness 集成验证)
created: 2026-07-04
version: 0.1.0 (draft)

模块接入协议 v0.1(道·治理)

一句话

每个模块(工具/skill/adhoc program)拥有自己的一份契约文件 MODULE.md,声明它是什么、怎么被调用、怎么留痕、怎么被测试、依赖什么;中央目录只是从这些契约派生的投影,不是权威源;成熟度差异(已实现/设计态/仅占位)由契约内容本身承载,不靠单独的分类表。

何时用

新建一个工具/skill/program 模块、要让它被别的模块正式引用、或要登记它"将来会被怎么接入"时,写一份 MODULE.md。既有模块补契约同理。跨模块调用、留痕、测试集成的具体做法见下文"协议五件事"。

不做什么(边界)

协议五件事

契约分两层:静态注册契约(本节,模块自己拥有)+运行时调用信封(第 2 件事,复用既有 grant/Charter,不新造)。

1. 如何注册(登记面 + 字段)

登记面 = 模块自有目录下一份 MODULE.md(工具模块放 tools/<m>/MODULE.md;设计态 program 模块放 adhoc_jobs/<program>/MODULE.md)。frontmatter 载机读字段(schema_version: module-1 起),正文载人读契约。

静态契约字段与何时必填(精简 take/leave 理由):

字段必填条件一句话理由
module_id总是聚合根 identity,外部唯一引用锚,不穿透内部
capability_class总是能力类别(如 test_evaluation/context_collection/requirement_analysis),设计态模块靠它先占坑
maturity总是implemented / design_only / placeholder,解"模块未实现也要模块化"与"现在就要协议"的张力(见下节)
contract_version总是契约自身版本,供 depends_on pin
owned_decisionimplemented深模块的"secret"——它封装的那个易变决策,一行说清楚
interface_surfaceimplemented对外最小入口(CLI 签名/callable/artifact 契约);gate 类模块此字段指向 gate_manifest 行,不复制 entrypoint/exit_codes
essential_outputsimplemented他人可消费的持久结果契约;禁列内部临时文件——跨模块只应引用 essential state,不应读另一模块的缓存/中间产物
depends_onimplemented显式依赖声明,带 contract_version pin;依赖不能是"agent 记得怎么调"的隐性知识
receiptsimplemented声明它发哪些 tool 名到 trace 总线
test_contractimplementedprovider 契约测试路径 + e2e 路径
paired_skillimplemented治理它的 dao/shu skill
context_assumptionsimplemented本模块对输入/环境的假设——把运行时耦合(环境变量、目录结构假设等)从"接入时的运行时惊喜"变成声明字段,这是本协议信息密度最高、价值最大的字段
verified_againstimplemented输出已针对哪些 oracle/契约/证据验证过

design_only/placeholder 模块只需module_id/capability_class/maturity/schema_version/contract_version + 一个对齐触发条件(见"占位契约机制"),不填 interface_surface/essential_outputs(尚无实现,填了即冒充)。

两个字段不进静态契约,留给运行时信封:repair_request(契约不匹配时的修复动作)、clarification_needed(首次接入/跨版本触发澄清)——它们是运行时失败响应,不是静态声明。

2. 如何被调用(运行时信封)

module_id 引用,不穿透内部实现。调用复用既有 dispatch_helper() + Charterscope_in/forbidden_read/tool_grant),不新造调用层。运行时信封复用 workflow_agent_communication_protocol 的 grant/handoff(may_read/forbidden_read/output_contract/named_inputs)承载:调用方声明的 context_assumptions(它对被调模块的假设)+ repair_request(消费方发现契约不匹配时发,不是裸错误码)+ clarification_needed(首次接入或跨版本时触发协调者,不静默假设兼容)。消费方只读被调方 essential_outputs 声明的结果契约,禁解析其内部临时文件。

3. 如何留痕(接 receipts 总线)

复用统一 trace bus(contexts/tool_receipts/receipts.jsonl),沿用既有行 schema。模块 receipts 字段声明它发的 tool 名前缀。不新建第二条 trace 总线——自定义 trace 格式曾因不兼容仓库校验器酿成事故,这是已发生过的教训,不要重蹈。

4. 如何被测试(provider 契约测试 + e2e 分离)

模块交 provider 契约测试(证接口如声明工作,含畸形/超范围输入行为)+ 登记 e2e(真实场景集成)。这是本协议与测试能力模块(eval_harness)的接口:eval_harness 既是一个待接入模块(自己也要填 4.1 契约),又是测试能力的提供者(别的模块经它做 e2e)。

5. 如何声明依赖与版本

depends_oncontract_version pin;模块自身带 contract_version;路径变更走 reference_validator.py rename 的 CASCADE 机制,不手改引用。设计本身即分阶段传输的通信,允许占位契约(下节),不必一次到位。

占位契约机制

这条机制解的张力:一边是"模块尚未完全实现也要坚持模块化 mindset",另一边是"协议现在就要能覆盖所有已知模块"。两者不矛盾——用成熟度分档化解:

占位契约的唯一硬义务:声明将来它会以什么 module_id 被引用、大致属于哪个能力类别、一条可核验的对齐触发条件。这样协议第一版就能对所有已知模块登记,而不必等它们全部实现完才纳入。

复用不重造(扩展谁 / 指向谁 / 绝不平行复制谁)

既有资产关系单一真源纪律
gate_manifest(工具路径查 tools/INDEX.mdgate 类模块的 interface_surface/test_contract 指向其行;gate_manifest 仍是 gate 执行配置(entrypoint/regulator/exit_codes)SSOTMODULE.md 不复制这些字段,只放指针
plan_loader schemaphase 类工作的 MODULE.md 指向其 plan.yaml;协议复用其字段词表(entry_criteria/exit_criteria/expected_outputs/depends_on/skill_injection不替换 plan_loader,phase 契约仍是 phase 执行真源
Charter + dispatch_helper()第 2 件事的运行时调用信封直接复用不新造调用层
tools/INDEX.mdmodule_id → 路径 解析默认走 INDEX.mdMODULE.md 不硬编码兄弟模块路径,按名引用
workflow_agent_communication_protocol运行时 agent 授权层复用它;本协议是系统契约层(新层)两层不共用一套 schema,各自的文档里写清楚边界
reference_validator校验器复用其依赖图 + CASCADE 改名

登记面裁定(各归属唯一位置,不平行复制):

  1. 协议 spec(本文件)——治理纪律的家在 skill 系统,不另起平行 spec 位置。
  2. 每模块契约<module_dir>/MODULE.md(authored 本质态)。
  3. 校验器module_registry(工具,路径查 tools/INDEX.md),镜像既有 gate check.py 的形态:校验 frontmatter 合规。
  4. 派生中央目录 → v0.1 明确延后;≥2 个 implemented 模块接入后再建为 GENERATED 投影,不 authored、不平行复制。

验收标准

一个没有任何上下文的 agent,拿这份 MODULE.md 就能判断它合规与否:

以上标准由配套工具机械核验,见下节;agent 自己判断时也应按这张清单逐条过,而不是凭感觉判断"看起来像那么回事"。

配套工具

module_registry 的校验器(按名引用,工具路径查 tools/INDEX.md)对上述验收标准做机械校验,输出 PASS/FLAG + 逐条可定位缺陷(字段名 + 期望 + 实际)。新写或修改一份 MODULE.md 后,跑一次该校验器确认合规。

已知陷阱

本 skill 是全新 draft,尚无自身的真实踩坑记录。但协议设计本身吸取了一条已发生的失效前车:gate_manifest 曾试图作"中央注册表"覆盖全部 gate,结果绝大多数行长期停留在"已登记但未真正驱动执行"的状态——注册 ≠ 强制。这是本协议选择"模块自描述契约为中心、中央目录只做延后的派生投影"而非"扩大中央 manifest"的直接原因,写在这里提醒:任何试图把本协议改回"先建一个大 manifest 再登记"的提案,都要先回答"如何不重蹈这条覆辙"。

claim ceiling

observational——本协议是纸面设计 + 4 个契约实例(1 个 implemented + 3 个占位态),尚未经过运行时真实调用验证。首个真验证 = 一个模块(eval_harness)真实端到端集成跑通该协议后的运行时观测。晋级前禁止声称"协议已验证 / production-ready",也禁止声称"四个模块已接入"——占位态模块只是登记了将来怎么接,不是可调用状态。


← 返回道层 skill 索引 · 返回方法论区