- proposal/design/specs/tasks:将固定 5 阶段重构为可配置 pipeline(discuss + pipeline + archive 三明治结构) - 引入 stage 完成判定(文档落地基线 + 可选 validate 实质门禁)与 finish 硬门禁 - 保留 explore 会话记录 session-ses_1357.md 作为思考溯源
106 lines
4.2 KiB
Markdown
106 lines
4.2 KiB
Markdown
## 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→C,B 的前置是 A 完成,C 的前置是 A 和 B 完成
|
||
|
||
### Requirement: 配置 schema 校验
|
||
|
||
配置加载时 MUST 执行以下校验,任一失败则拒绝加载并给出明确错误信息:stage id 格式、唯一性、保留字检查;pipeline 至少 1 个 stage;validate(若有)是可构造为函数的合法 JS 字符串。
|
||
|
||
#### Scenario: validate 语法错误
|
||
|
||
- **WHEN** 某个 stage 的 validate 值为 `return {{{`
|
||
- **THEN** 配置加载失败,报错指出该 stage 的 validate 不是合法 JS
|
||
|
||
#### Scenario: 空流水线
|
||
|
||
- **WHEN** 配置文件中 stages 为空数组
|
||
- **THEN** 配置加载失败,报错指出流水线至少需要 1 个阶段
|