- proposal/design/specs/tasks:将固定 5 阶段重构为可配置 pipeline(discuss + pipeline + archive 三明治结构) - 引入 stage 完成判定(文档落地基线 + 可选 validate 实质门禁)与 finish 硬门禁 - 保留 explore 会话记录 session-ses_1357.md 作为思考溯源
3.6 KiB
3.6 KiB
1. 类型与数据模型
- 1.1 在
src/types.ts中定义 StageConfig、PipelineConfig、StageStatus、ChangeStatus 接口(按 design.md D9 数据模型) - 1.2 从
src/types.ts移除 STAGES 常量和 5 个旧 Stage 接口(DiscussStage/PlanStage/TaskStage/BuildStage/ArchiveStage) - 1.3 清理文件路径常量:移除旧 stage 专用路径,保留通用路径(changes/、archive/)
2. 配置系统
- 2.1 重写
src/core/config.ts加载逻辑:解析新stages数组格式,返回 PipelineConfig - 2.2 实现 config schema 校验:stage id 格式(
^[a-z][a-z-]*$)、唯一性、保留字(discuss/finish/status/archive/init)、pipeline 至少 1 个 stage、validate 可构造为 AsyncFunction - 2.3 重写
src/defaults/config.ts:默认 5 阶段 pipeline(requirements/design/plan/task/build),每个 stage 含对应默认 prompt - 2.4 实现配置合并:默认配置 + 用户
.rune/config.yaml覆盖
3. 完成判定引擎
- 3.1 实现 validate 执行器:
new AsyncFunction('ctx', body),注入ctx.changeDir,返回{ passed: boolean, reason: string | null } - 3.2 重写
src/core/scanner.ts:遍历 pipeline stages,检查<id>.md存在性 + 执行 validate(若有),派生 StageStatus[] - 3.3 派生 ChangeStatus:计算 currentIndex(第一个未 done 的索引)和 allDone
4. 提示词组装
- 4.1 用通用
assembleStagePrompt(stage: StageConfig, changeDir: string)替换src/core/assembler.ts中 5 个专用 assembleXxxPrompt 函数
5. CLI 命令层
- 5.1 重写
src/cli.ts:启动时读取配置,为每个 pipeline stage 动态注册rune <stage-id> <change>命令 - 5.2 实现 stage 命令软门禁:检查该 stage 所有前置 fully-done 才输出提示词,否则报错指引
- 5.3 重写 finish 命令硬门禁:检查所有 stage fully-done(列出全部未完成项及原因),通过后移动变更目录到 archive/
- 5.4 保留 discuss 命令:行为与 0.1.x 一致(输出探索模式 prompt,无门禁,不产文档)
- 5.5 实现 status 命令:输出每阶段状态(文档存在/validate 通过/done)+ 整体进度(currentIndex/allDone)
6. 适配器层
- 6.1 更新
src/adapters/opencode.ts:从配置动态注入 stage 命令和 skill 文件(替换for (stage of STAGES)) - 6.2 更新
src/adapters/claude-code.ts:同上,动态注入
7. init 命令
- 7.1 更新
src/commands/init.ts:生成新格式.rune/config.yaml(默认 5 阶段 pipeline 配置)
8. 测试
- 8.1 配置校验测试:合法/非法 id、重复 id、保留字、空 pipeline、validate 语法错误
- 8.2 validate 执行器测试:truthy 返回通过、falsy 返回失败、异常捕获含 message、异步函数、ctx.changeDir 正确注入
- 8.3 scanner 测试:空目录全未完成、部分完成、全完成、validate 失败场景、currentIndex/allDone 计算
- 8.4 软门禁测试:前置全完成放行、前置有未完成拒绝并报错、首阶段无门禁
- 8.5 finish 硬门禁测试:全完成时归档移动目录、有未完成时拒绝并列出全部未完成项及原因
- 8.6 动态命令注册测试:从配置生成正确命令集、自定义 stage id 注册为命令
9. 质量保障与文档
- 9.1 运行
bun test确保全量测试通过 - 9.2 运行
oxlint确保无 lint 错误 - 9.3 运行
oxfmt确保格式一致 - 9.4 更新 README.md:新配置格式、三明治流程说明、命令列表
- 9.5 编写迁移指引:旧用户从 0.1.x 升级(重新 init + 手动迁移变更内容)