Files
Rune-Spec/openspec/changes/configurable-pipeline/proposal.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

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