## 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,检查 `.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 ` 命令 - [ ] 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 + 手动迁移变更内容)