Files
Rune-Spec/openspec/changes/configurable-pipeline/specs/pipeline/spec.md
lanyuanxiaoyao a6b76b690a docs: 新增 configurable-pipeline 变更提案,探索可配置多阶段流水线模型
- proposal/design/specs/tasks:将固定 5 阶段重构为可配置 pipeline(discuss + pipeline + archive 三明治结构)
- 引入 stage 完成判定(文档落地基线 + 可选 validate 实质门禁)与 finish 硬门禁
- 保留 explore 会话记录 session-ses_1357.md 作为思考溯源
2026-06-15 19:04:03 +08:00

106 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## ADDED Requirements
### Requirement: 流水线配置格式
流水线 MUST 在配置文件中通过 `stages` 有序数组定义。每个 stage MUST 包含 `id`(字符串)和 `prompt`字符串MAY 包含 `validate`JS 函数体字符串。stages 数组的顺序即为阶段执行顺序。
#### Scenario: 最小合法配置
- **WHEN** 配置文件包含 `stages: [{ id: "plan", prompt: "..." }]`
- **THEN** 配置加载成功,流水线包含 1 个阶段
#### Scenario: 含 validate 的完整配置
- **WHEN** 配置文件包含 `stages: [{ id: "build", prompt: "...", validate: "return true;" }]`
- **THEN** 配置加载成功build 阶段关联了 validate 函数
#### Scenario: 缺少 id 的 stage
- **WHEN** 配置文件中某个 stage 缺少 `id` 字段
- **THEN** 配置加载失败,报错指出哪个 stage 缺少 id
#### Scenario: 缺少 prompt 的 stage
- **WHEN** 配置文件中某个 stage 缺少 `prompt` 字段
- **THEN** 配置加载失败,报错指出哪个 stage 缺少 prompt
### Requirement: Stage ID 命名规则
Stage id MUST 匹配 `^[a-z][a-z-]*$`小写字母开头后续只允许小写字母和短横线。Stage id MUST 在同一流水线内唯一。Stage id MUST NOT 使用保留字:`discuss``finish``status``archive``init`
#### Scenario: 合法 id
- **WHEN** stage id 为 `code-review`
- **THEN** 配置校验通过
#### Scenario: 包含大写字母的 id
- **WHEN** stage id 为 `CodeReview`
- **THEN** 配置校验失败,报错指出 id 必须为 `[a-z][a-z-]*` 格式
#### Scenario: 包含数字的 id
- **WHEN** stage id 为 `stage1`
- **THEN** 配置校验失败,报错指出 id 只允许小写字母和短横线
#### Scenario: 重复 id
- **WHEN** 流水线包含两个 id 为 `plan` 的 stage
- **THEN** 配置校验失败,报错指出 stage id 不可重复
#### Scenario: 保留字 id
- **WHEN** stage id 为 `finish`
- **THEN** 配置校验失败,报错指出 `finish` 是保留字不可用作 stage id
### Requirement: Stage 文档约定
每个 pipeline stage 产出且仅产出一个文档,文件名由 stage id 派生:`<stage-id>.md`。文档 MUST 位于变更目录内(如 `changes/my-feature/plan.md`。Stage id 到文件名的映射 MUST NOT 可配置——统一规则不可覆盖。
#### Scenario: 文档文件名派生
- **WHEN** stage id 为 `design`
- **THEN** 该阶段的产出文档路径为 `<changeDir>/design.md`
#### Scenario: 含短横线的 id 文件名
- **WHEN** stage id 为 `code-review`
- **THEN** 该阶段的产出文档路径为 `<changeDir>/code-review.md`
### Requirement: 默认流水线
当用户执行 `rune init` 或配置中未定义 `stages` 时,系统 MUST 提供默认流水线,包含 5 个阶段,按序为:`requirements``design``plan``task``build`。每个默认阶段 MUST 包含对应的默认 prompt。
#### Scenario: init 生成默认流水线
- **WHEN** 用户执行 `rune init`
- **THEN** 生成的配置文件包含 5 个阶段requirements、design、plan、task、build各含默认 prompt
#### Scenario: 配置中无 stages 时回退默认
- **WHEN** 配置文件加载后 stages 为空或未定义
- **THEN** 系统使用默认 5 阶段流水线
### Requirement: 流水线线性有序
流水线 MUST 是线性有序序列——不支持分支、条件跳过或并行阶段。阶段的执行顺序由配置数组顺序决定。Stage N 的前置条件是 Stage 0 至 Stage N-1 全部完成。
#### Scenario: 阶段顺序由数组决定
- **WHEN** 配置定义 stages 为 `[A, B, C]`
- **THEN** 执行顺序固定为 A→B→CB 的前置是 A 完成C 的前置是 A 和 B 完成
### Requirement: 配置 schema 校验
配置加载时 MUST 执行以下校验任一失败则拒绝加载并给出明确错误信息stage id 格式、唯一性、保留字检查pipeline 至少 1 个 stagevalidate若有是可构造为函数的合法 JS 字符串。
#### Scenario: validate 语法错误
- **WHEN** 某个 stage 的 validate 值为 `return {{{`
- **THEN** 配置加载失败,报错指出该 stage 的 validate 不是合法 JS
#### Scenario: 空流水线
- **WHEN** 配置文件中 stages 为空数组
- **THEN** 配置加载失败,报错指出流水线至少需要 1 个阶段