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:
2026-06-15 19:04:03 +08:00
parent 4e5c0805a2
commit a6b76b690a
8 changed files with 7844 additions and 0 deletions

View 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 逻辑、动态命令注册均需新测试覆盖