news 2026/10/1 16:00:46

OpenRig slice 脚手架解析:从 `placeholder` 模板到可执行的 SPEC 工作流

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenRig slice 脚手架解析:从 `placeholder` 模板到可执行的 SPEC 工作流
  • 人工智能
  • AI Agent
  • 多智能体
  • Agent 编排
  • 代码智能体
  • CLI

【免费下载链接】openrig

Multi-agent harness that runs Claude Code and Codex together as one system

项目地址:https://gitcode.com/GitHub_Trending/op/openrig
点击查看免费下载

本指南深入剖析 OpenRig(一个将 Claude Code 与 Codex 编排为统一多 Agent 系统的控制平面)中,rig scope slice create生成新 slice 时所依据的官方模板——packages/cli/src/lib/scope-templates/placeholder.md。你将掌握:该模板如何构成一个 slice 的 SPEC 骨架(Intent → Mini-requirements → Proof contract)、每个 frontmatter 字段(id / slice / mission / status / intent / depends_on)的含义与写入方、rig scope命令族如何消费并审计这些字段,以及为何“未完成的模板占位符”会被系统刻意识别为“尚未编写”而非“已交付”。读完即可用rig scope亲手搭出符合 SDLC 约定的 slice,并理解从模板占位符到最终证据闭环的完整流转。

模板总览:一个 slice 的生命起点

OpenRig 的所有 slice 与 mission 文档都不是手工从零敲出来的——rig scope slice create从scope-templates/目录读取 Markdown 模板,执行占位符替换后落盘。placeholder.md就是其中默认(且最通用)的 slice 模板:当你执行rig scope slice create <mission> <slug>而未显式指定--template时,使用的正是它。

从模板加载器源码可以看到模板被设计成“与源码同住”的文档:

  • 源码树(packages/cli/src/lib/scope/ → ../scope-templates)与构建产物(dist/lib/scope-templates)都会被探测,第一个存在者胜出;
  • 模板是普通 Markdown,可像文档一样编辑,构建时由 packages/cli/package.json 的build脚本cp src/lib/scope-templates/*.md dist/lib/scope-templates/复制进发布包;
  • 渲染时用applyPlaceholders做纯字符串替换:{{id}}、{{slice_number}}、{{slug}}、{{mission}}、{{title}}、{{created_date}}、{{intent}}、{{depends_on}}等占位符一一对应RenderOpts接口的字段。

对 slice 而言,占位符值由 packages/cli/src/commands/scope.ts 的buildSliceCreateCommand在创建时计算:

  • nn:nextSliceNN取该 mission 下已有 slice 序号的下一个,文件夹命名为NN-slug(如03-fix-login);
  • id:由sliceIdFromMission(missionId, nn)铸成missionId.NN形式的稳定 dot-ID;
  • title:默认由titleFromSlug将 slug 转成首字母大写的展示名;
  • intent:默认等于 title,也可用--intent显式提供。

模板全文(含渲染后语义)

--- id: {{id}} slice: {{slice_number}}-{{slug}} mission: {{mission}} status: placeholder stage: wip verified: {{created_date}} against scaffold (rig scope create) created: {{created_date}} intent: {{intent_yaml}} depends_on: {{depends_on}} --- # Slice {{slice_number}} — {{title}} ## Intent {{intent}} ## Mini-requirements 1. [The concise one-glance requirement tier — numbered observable outcomes. For a small slice this may BE the whole plan.] ## Proof contract - [ ] [One promised deliverable, written as an observable outcome — captured. Each item pairs with its proof via `rig proof add … --evidences` (media attached with `--media`); UI deliverables name their planned mockup.] ## Source material - [Paths or refs] ## Intent visual Non-visual slices: mark this section N/A. - Intent image: Intent visual - Durable diff: change.diff - Regenerate preview: from `packages/ui`, run `{{intent_visual_build_command}}` to rebuild `twin-out/intent.html` (gitignored). ## Status - TODO: [next steps] ## Dependencies - [Cross-slice / cross-release] --- > **How you work this slice (SOP):** conventions SSOT: `docs/reference/sdlc-conventions.md` (installed: `$OPENRIG_HOME/reference/sdlc-conventions.md`) — read its COMPONENT MENU first: your mission chooses the build path (the simple default flow · the wave model · the assigned rigorous overlay) and the planning rigor (the P0–P4 dial); do not assume the heavy flow unless your mission or dispatch assigns it. Full flow for the default path: the `mission-slice-sop` skill. The floor on every path: track on PROGRESS.md; evidence lands via `rig proof add` (never hand-placed); a slice is **not done** until its promised outcomes have evidence; verify with `rig scope audit`.

这段模板浓缩了 OpenRig 的核心理念:意图先于实现、可观测结果先于代码、证据先于宣称完成。它是SDLC 约定文档(docs/reference/sdlc-conventions.md,安装后位于$OPENRIG_HOME/reference/sdlc-conventions.md)在磁盘上的第一处落地。

Frontmatter 字段逐项拆解

模板 frontmatter 的每个字段都对应一条约定,且多数由 CLI 在创建时自动铸入。下表汇总字段、含义与来源:

字段模板占位符含义写入方
id{{id}}稳定 dot-ID(<mission-id>.<NN>)rig scope slice create自动铸入
slice{{slice_number}}-{{slug}}文件夹名(NN-slug)CLI 按序号计算
mission{{mission}}所属 mission 名称CLI 传入
status固定值placeholder初始状态,声明“尚未编写内容”模板固定
stage固定值wip认识论成熟度等级(P0 起点)模板固定
verified{{created_date}} against scaffold (rig scope create)证明来源行CLI 铸入创建日期
created{{created_date}}创建日期(ISO)todayDateISO()
intent{{intent_yaml}}作者的意图,JSON 序列化CLI(--intent或默认 title)
depends_on{{depends_on}}兄弟 slice 的构建顺序依赖(dot-ID 列表)CLI(--depends-on,JSON 数组)

几个值得注意的实现细节:

  • status: placeholder是设计而非占位符文字:新创建的 slice 首先处于“占位”状态。与此对应,intent会被 JSON 序列化进 frontmatter(applyPlaceholders中JSON.stringify(opts.intent ?? opts.title)),便于机器读取。
  • verified行自带 provenance:模板初始值写明“against scaffold (rig scope create)”,遵守“不允许裸时间戳”的约定——它声明了自己是“对脚手架的验证”,而不是对实现的验证。后续用rig scope slice verified <slice> --against <source>覆写为对真实实现的验证。
  • stage属于受控枚举:packages/cli/src/lib/scope/types.ts 定义了六档STAGE_VALUES:wip | provisional | established | canonical | superseded | retired。模板锚定在最低档wip,rig scope slice stage <slice> <new-stage>会拒绝枚举外的任意值,且superseded必须用--successor指名继任者。

正文四大节的约定语义

模板正文固定了五个 Markdown 小节,其中三个是SDLC 约定要求的“约定小节”,顺序固定、标题精确:

Intent(意图)

{{intent}}被替换为创建时写入的意图文本。约定要求它是“逐字记录的意图”。TUI 与审计工具都通过精确标题## Intent来定位它——scope-convention-scaffold.test.ts 中用常量CONVENTION_SECTIONS = ["## Intent", "## Mini-requirements", "## Proof contract"]校验脚手架输出必须按序包含这三节。

Mini-requirements(微型需求)

模板给的是编号列表占位1. [...]。这一层的地位特殊:它是对人类操作者第一个结构化检查点,批准从这一层开始(见sdlc-conventions.md的 A2 节)。对小型 slice(bug 修复、研究笔记),“mini-requirements 可能就是整份规格”——这正是模板注释“For a small slice this may BE the whole plan”的来源。

从占位符识别源码看,编号条目还有一层机器语义:hasAuthoredNumberedItem会扫描正文中形如1./1)的条目,仅当至少存在一条文本非占位符的编号条目时才判定“已编写”。这意味着:一个仍停留在1. [...]的 slice,在系统眼里就是尚未进入可批准状态的“脚手架”,而不是一份已完成的规格。

Proof contract(证明契约)

复选框列表,每项是一个“可观测结果”形式的承诺交付物。模板示例- [ ] [...]之后,真实写法应如下(来自sdlc-conventions.mdB1 节):

## Proof contract - [ ] The consolidated `rig ps` default renders all rigs with a rollup footer — captured. - [ ] UI: the slice review tab renders the three-section stack — screenshot vs the locked mockup.

每条契约项之后通过rig proof add … --evidences <编号或文本>与证据工件一一配对——这正是 TUI 的 DELIVERED 区渲染“计划 ↔ 交付”配对的数据来源。UI 交付物必须附带计划 mockup(plannedRef);后端/文档类 slice 无需 mockup,缺失也不算缺口。

Source material / Intent visual / Status / Dependencies

这四个小节按需填写:Source material 记录路径或参考;Intent visual 针对 UI slice(非视觉 slice 标 N/A,模板也明确要求);Status 是 TODO 列表;Dependencies 记录跨 slice / 跨 release 依赖。模板末尾的 SOP 引用块是给 agent 的操作指引——默认路径走mission-slice-sopskill,重型流程(Part B)必须由人类或编排器显式指派,agent 不得自选。

从模板到磁盘:rig scope slice create的实际产物

当运行以下命令时(模板默认placeholder):

rig scope slice create release-0.6.1 login-timeout \ --title "Login Timeout Handling" \ --intent "Users see a clear timeout message instead of a hung session." \ --depends-on "OPR.0.6.1.2"

buildSliceCreateCommand 会按序完成:校验模板种类与 slug → 计算NN、铸造 dot-ID → 渲染 SPEC 正文与 PROOF 骨架 → 原子落盘(失败时整体回滚)→ 写入slice.yaml并更新 mission 的组成清单。最终目录形态:

<mission>/slices/03-login-timeout/ ├── SPEC.md # 即 placeholder 模板渲染结果 ├── slice.yaml # openrig.slice/v0alpha1 清单(指向 SPEC.md / PROGRESS.md / PROOF.md) ├── PROGRESS.md # 验收清单(渲染自 slice-progress.md 模板) ├── PROOF.md # 证据摘要骨架(渲染自 proof.md 模板) └── proof/ # 证据工件目录(初始为空)
  • PROGRESS.md由 slice-progress.md 渲染,固定三个验收项:- [ ] Implementation complete、- [ ] Tests passing、- [ ] Review approved。这三个常量被scaffold-placeholder.ts 的GENERIC_SCAFFOLD_ACCEPTANCE精确引用并做防漂移同步测试。
  • PROOF.md由 proof.md 渲染,内置“drop 动词”指引:媒体文件放入proof/后必须用rig proof add <id> --artifact-type qa --verdict PASS --candidate-sha <tip> --money-evidence "<one line>" --evidences "1" --media "screenshot-01.png"挂接,手工放文件而不 drop 会被视为未配对、unverified。
  • --readme-only开关会在 SPEC.md frontmatter 插入progress_rail: readme-only,从而不生成 PROGRESS.md(适用于只靠 README 轨道的轻量 scope)。

占位符识别:系统如何区分“脚手架”与“已编写”

这个模板里所有方括号内容(如1. [...]、- [ ] [...])并非随意示例,而是被核心代码当作语义标记消费的。三个谓词构成完整识别文法:

  1. isScaffoldPlaceholderText(text):修剪后文本完全被方括号包裹(^\[.*\]$)即为脚手架占位符。注意这是刻意设计:[a] and [b]这种“方括号包裹的真实交付物”同样会被识别为占位符——文法忠实,不搞特例。
  2. hasAuthoredNumberedItem(body):正文中只要存在一条非占位符的编号条目(1.或1)形式)即视为已编写。这是评审与审计共同依赖的“唯一已编写编号条目文法”。
  3. isPlaceholderOnlyBlock(block)/isPristineScaffoldSection(body):按行判定一个区块是否“全占位”。isPristineScaffoldSection额外剥掉编号/复选框/列表前缀再判定——用于证明契约的来源选择:selectProofContractBody按“已编写的 SPEC → PRD → README → null”的优先级挑选当前契约,只有未污染(pristine)的 SPEC 小节才允许让位给 README。

这套文法的价值在于:审计与评审永远不把模板残留当成已交付内容。一个只写了模板原样的 slice,在rig scope audit眼中就是“无已编写编号条目”,无法通过“开始批准”的门槛。

验证与审计:rig scope audit

SDLC 约定(A6 节)规定审计是建议性、fail-open的:记录与建议,绝不阻塞写入路径。审计入口rig scope audit --mission <name>会检查:

  • 三大约定小节(## Intent/## Mini-requirements/## Proof contract)是否按序存在(缺失时 UI 渲染为静默的“—”);
  • 目录命名是否符合NN-slug约定(不符合产生id_convention_violation高优先级 finding);
  • proof/工件是否携带合法 C1 头、UI slice 是否引用 mockup;
  • 依赖图(Ready:/Waiting:/Advisory:三类)是否与depends_on一致。

审计同样消费占位符文法:一个仍处于模板原样的 slice 会被如实报告为“尚未编写”,而不是“内容通过”。这正是“unknown 报为 unknown,而非失败”的诚实原则在工具链中的体现。

从占位符到证据闭环:完整流转图

rig scope slice create → SPEC.md(模板渲染,status: placeholder) │ ▼ 作者填写 Intent / Mini-requirements / Proof contract(替换方括号占位) │ ▼ rig scope slice progress --add/--set → PROGRESS.md 验收行(确定性更新) rig scope slice approve --scope spec → plan-lock(Part B 流程,锁 SPEC 与 mockup) │ ▼ 构建 → 视觉比对 → rig proof add … --evidences "1,3" --media "walk.webm,panel.png" │ (证据 drop,写入 C1 头) ▼ rig scope slice approve --scope delivery → proof-lock(终态签核) │ ▼ rig scope audit / rig workspace validate → 建议性审计,全链路闭环

贯穿始终的两条纪律:证据必须经rig proof add落地,绝不手工放置;slice 直到其承诺结果具备证据才算完成。模板中status: placeholder的初始值、verified行的 provenance、以及方括号占位符的机器识别,共同保证了这条闭环不会因为“看起来写了”而提前虚报完成——这正是 OpenRig 在编排多 Agent 系统时,把“诚实”落成可审计机制的核心手段。

如需深入,可继续阅读:SDLC 约定 SSOT、mission-slice-sop skill、模板加载与渲染实现、scope CLI 全部动词、以及脚手架约定测试。

  • 人工智能
  • AI Agent
  • 多智能体
  • Agent 编排
  • 代码智能体
  • CLI

【免费下载链接】openrig

Multi-agent harness that runs Claude Code and Codex together as one system

项目地址:https://gitcode.com/GitHub_Trending/op/openrig
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 16:00:45

9个月的活,AI 45分钟做完:当顶级程序员决定不再写代码

"我估计要学9个月的活&#xff0c;AI不到45分钟做完"——但真相比这句话复杂得多技术观点深度分析2026年9月David Heinemeier Hansson&#xff08;DHH&#xff09;&#xff0c;Ruby on Rails创始人、37signals联合创始人兼CTO。过去二十年&#xff0c;他是全球最知名…

作者头像 李华
网站建设 2026/10/1 16:00:16

Ansys Workbench螺栓仿真:三条路线、预紧力与非线性收敛

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 15:59:56

做影视解说用什么配音工具效果好

声明&#xff1a;本文基于公开产品的陆续体验整理&#xff0c;没有商业合作&#xff0c;也不替任何一家站台。下面说的好与不好&#xff0c;都来自我自己实际跑过的片子和踩过的坑&#xff0c;供做影视解说的朋友对照着挑。结论先看做影视解说挑配音工具&#xff0c;先把三件事…

作者头像 李华
网站建设 2026/10/1 15:58:02

公卫项目实践:疾控全域多业务档案场景与系统落地思路

一、疾控全域档案业务场景1. 监管业务&#xff08;餐饮、职业、公共场所卫生&#xff09;&#xff1a;一机构一档&#xff0c;归集采样、核查、技术指导记录&#xff1b;2. 突发应急业务&#xff1a;一事一档&#xff0c;聚集性疫情、中毒事件独立立卷&#xff0c;案卷与涉事机…

作者头像 李华
网站建设 2026/10/1 15:57:07

Linux-MariaDB数据库

Linux-MariaDB数据库&#x1f4d6;简介&#xff1a;CentOS7 &#xff0c;完整讲解 MariaDB 部署安装、配置文件分层结构&#xff1b;基础 SQL 增删改查&#xff1b;数据库用户与精细化权限管理&#xff1b;逻辑 / 物理备份恢复&#xff1b;企业数据库主流架构&#xff1b;主从复…

作者头像 李华
网站建设 2026/10/1 15:57:00

TTF字体完全指南:从TrueType原理到跨平台安装与开发排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华