docs: 新增 configurable-pipeline 变更提案,探索可配置多阶段流水线模型
- proposal/design/specs/tasks:将固定 5 阶段重构为可配置 pipeline(discuss + pipeline + archive 三明治结构) - 引入 stage 完成判定(文档落地基线 + 可选 validate 实质门禁)与 finish 硬门禁 - 保留 explore 会话记录 session-ses_1357.md 作为思考溯源
This commit is contained in:
46
openspec/changes/configurable-pipeline/proposal.md
Normal file
46
openspec/changes/configurable-pipeline/proposal.md
Normal file
@@ -0,0 +1,46 @@
|
||||
## Why
|
||||
|
||||
当前 Rune 把 5 个固定阶段(discuss→plan→task→build→archive)硬编码在 6 处源码里(types/cli/assembler/scanner/defaults/adapters),用户无法自定义阶段流程。不同项目需要不同的工作流(有的要 code-review 阶段,有的不需要 design),但框架不给出任何灵活性。更严重的是,唯一的不可逆操作 `finish`(归档移动目录)**不校验前置阶段是否完成**——agent 可以跳过任意阶段直接归档,流程约束形同虚设。
|
||||
|
||||
需要一套**可配置但可强制**的流水线模型:用户自定义阶段,CLI 用"文档落地 + 可选 validate"作为完成判据,`finish` 硬门禁拦住跳过。
|
||||
|
||||
## What Changes
|
||||
|
||||
- **BREAKING** 移除固定的 STAGES 常量和 5 个 Stage 接口,替换为通用 StageConfig 结构
|
||||
- **BREAKING** 移除 cli.ts 里 5 个硬编码 command,替换为从配置动态生成的 stage 命令
|
||||
- **BREAKING** 移除 assembler.ts 里 5 个专用 assembleXxxPrompt 函数,替换为 1 个通用 assembleStagePrompt
|
||||
- **BREAKING** 移除 scanner.ts 里 planCompleted/buildUnlocked 等固定语义函数,替换为配置驱动的完成判定
|
||||
- 引入三明治结构:`discuss`(固定,pipeline 之前,无门禁,不产文档)+ `pipeline`(可配置的线性阶段序列)+ `archive`(固定,pipeline 之后,终端收尾)
|
||||
- 每个 pipeline 阶段产出且仅产出一个 `<stage-id>.md` 文档;文档存在 = 基线完成
|
||||
- 每个阶段可配置可选的 `validate` 函数(JS,接收 changeDir),通过 = 实质完成
|
||||
- `finish` 升级为硬门禁:所有阶段实质完成才允许归档
|
||||
- 默认 pipeline 拆成 5 个阶段:`[requirements, design, plan, task, build]`(把旧 plan 的 3 文档拆成 3 个线性阶段,消除多文档特例)
|
||||
- `discuss` 命令保留,行为不变(输出讨论提示词)
|
||||
- 新增配置 schema:`stages` 数组,每项含 `id`/`prompt`/可选 `validate`
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
|
||||
- `pipeline`: 可配置的流水线模型——配置格式、stage 结构(id/prompt/validate)、默认流水线、stage id 命名规则
|
||||
- `stage-completion`: 阶段完成判定机制——文档落地(基线 done)+ validate 函数(实质 done)、两档门禁(软门禁挡 stage 命令、硬门禁挡 finish)
|
||||
- `flow-commands`: 流程驱动 CLI 命令——discuss(固定前置)、动态 stage 命令(软门禁)、finish(硬门禁+归档)、status(审计可见性)
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
(无——openspec/specs/ 为空,全部为新建。)
|
||||
|
||||
## Impact
|
||||
|
||||
- **源码重构**(6 处固定阶段渗透点全部替换):
|
||||
- `src/types.ts`:移除 STAGES + 5 个 Stage 接口,新增 StageConfig/PipelineConfig 类型
|
||||
- `src/cli.ts`:5 个硬编码 command → 从配置动态注册 stage 命令
|
||||
- `src/core/assembler.ts`:5 个专用函数 → 1 个通用 assembleStagePrompt
|
||||
- `src/core/scanner.ts`:固定语义 → 配置驱动的通用扫描+完成判定
|
||||
- `src/core/config.ts`:新增 pipeline schema 校验(stage id 唯一性、字符集、validate 语法)
|
||||
- `src/defaults/config.ts`:5 个固定 prompt → 默认 5 阶段 pipeline 配置
|
||||
- `src/adapters/opencode.ts`、`src/adapters/claude-code.ts`:for(stage of STAGES) → 从配置注入
|
||||
- **validate 执行引擎**(新增):解析 JS 函数字符串 + 注入 changeDir + 执行 + 捕获结果/异常
|
||||
- **finish 门禁**(新增/修复):归档前校验所有阶段实质完成
|
||||
- **配置 schema 变更**:用户现有 `.rune/config.yaml` 的 stage 配置不兼容(BREAKING),需提供迁移指引或 init 重新生成
|
||||
- **测试**:scanner 完成判定、validate 执行、gate 逻辑、动态命令注册均需新测试覆盖
|
||||
Reference in New Issue
Block a user