@specpow/framework 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/builtin/schemas/mes-prd-to-code/references.md +20 -7
  3. package/builtin/schemas/mes-prd-to-code/rules.md +8 -4
  4. package/builtin/schemas/mes-prd-to-code/schema.yaml +2 -2
  5. package/builtin/schemas/mes-prd-to-code/templates/tech-design.md +10 -3
  6. package/builtin/skills/execution-sdd-orchestrator/SKILL.md +18 -18
  7. package/builtin/skills/execution-subagent-dispatch/SKILL.md +9 -9
  8. package/builtin/skills/planning-apply-change/SKILL.md +1 -1
  9. package/builtin/skills/planning-explore/SKILL.md +1 -1
  10. package/builtin/skills/using-specpow/SKILL.md +3 -3
  11. package/dist/cli/index.js +1 -1
  12. package/dist/commands/apply.d.ts.map +1 -1
  13. package/dist/commands/apply.js +7 -5
  14. package/dist/commands/apply.js.map +1 -1
  15. package/dist/commands/doctor.d.ts.map +1 -1
  16. package/dist/commands/doctor.js +64 -0
  17. package/dist/commands/doctor.js.map +1 -1
  18. package/dist/commands/execute.d.ts.map +1 -1
  19. package/dist/commands/execute.js +3 -2
  20. package/dist/commands/execute.js.map +1 -1
  21. package/dist/commands/status.d.ts.map +1 -1
  22. package/dist/commands/status.js +2 -1
  23. package/dist/commands/status.js.map +1 -1
  24. package/dist/commands/workflow/index.d.ts.map +1 -1
  25. package/dist/commands/workflow/index.js +2 -1
  26. package/dist/commands/workflow/index.js.map +1 -1
  27. package/dist/core/archive/delta-merger.d.ts +6 -1
  28. package/dist/core/archive/delta-merger.d.ts.map +1 -1
  29. package/dist/core/archive/delta-merger.js +23 -10
  30. package/dist/core/archive/delta-merger.js.map +1 -1
  31. package/dist/core/archive/engine.d.ts.map +1 -1
  32. package/dist/core/archive/engine.js +53 -5
  33. package/dist/core/archive/engine.js.map +1 -1
  34. package/dist/core/config/config-schema.d.ts +96 -0
  35. package/dist/core/config/config-schema.d.ts.map +1 -1
  36. package/dist/core/config/config-schema.js +9 -1
  37. package/dist/core/config/config-schema.js.map +1 -1
  38. package/dist/core/migration/index.d.ts.map +1 -1
  39. package/dist/core/migration/index.js +128 -2
  40. package/dist/core/migration/index.js.map +1 -1
  41. package/dist/core/workspace/change-workspace.d.ts +59 -0
  42. package/dist/core/workspace/change-workspace.d.ts.map +1 -0
  43. package/dist/core/workspace/change-workspace.js +75 -0
  44. package/dist/core/workspace/change-workspace.js.map +1 -0
  45. package/dist/core/workspace/index.d.ts +6 -0
  46. package/dist/core/workspace/index.d.ts.map +1 -0
  47. package/dist/core/workspace/index.js +5 -0
  48. package/dist/core/workspace/index.js.map +1 -0
  49. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,63 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.7.0] - 2026-09-10
9
+
10
+ ### 🐛 Archive Integrity — 归档完整性与变更工作区收口
11
+
12
+ 修复归档时静默损坏主规范、遗漏执行记录的结构性缺陷,建立变更路径的唯一真相源。
13
+
14
+ #### 修复
15
+
16
+ - **delta 代码围栏占位符泄漏**(`src/core/archive/delta-merger.ts`):`mergeDeltaSpec()` 此前只还原主规范侧掩码表,delta 侧 `deltaPlaceholders` 从未还原,导致 delta 需求块含 ``` 围栏(JSON/YAML/示例代码)时归档后主规范出现 `__CODE_FENCE_0__` 字面量
17
+ - `maskCodeFences(content, namespace?)` 新增可选命名空间,主规范与 delta 分别使用 `__CODE_FENCE_base_<n>__` / `__CODE_FENCE_delta_<n>__`,缺省保持旧格式以兼容
18
+ - 冲突提前返回路径与正常返回路径均还原两侧掩码
19
+ - `unmaskCodeFences()` 由 `replace()` 改为 `split()/join()`,全量替换且不解析 `$&`、`$1`、`$$` 替换语义,围栏内容逐字节一致
20
+
21
+ #### 新增
22
+
23
+ - **ChangeWorkspace 模块**(`src/core/workspace/`):变更路径唯一真相源
24
+ - `createChangeWorkspace(projectRoot, changeName, config)` 统一解析 `root` / `sddDir` / `ledgerPath`
25
+ - `artifacts()` 返回有序产物清单,`hasLegacySdd()` 提供遗留 `.specpow/sdd/<change>/` 只读兜底
26
+ - **`specpow doctor` 归档健康自检**:扫描主规范中的 `__CODE_FENCE_` 残留(报告文件与行号),检测待迁移的遗留 SDD 工作区,并入输出与退出码
27
+ - **归档元数据清单化**:`_ARCHIVE_METADATA.json` 新增 `artifacts` 字段记录本次归档产物
28
+
29
+ #### 变更
30
+
31
+ - **`sdd.workspaceDir` 语义变更(破坏性)**:由"变更工作区路径"改为"变更目录内的 SDD 子目录名",默认值 `.specpow/changes` → `sdd`;SDD 工作区固定为 `<changesDir>/<change>/sdd/`,`.` 表示工件直接位于变更目录根部
32
+ - **ArchiveEngine 清单驱动归档**:`archive()` 依据 `ChangeWorkspace.artifacts()` 搬运,归档目录必然包含账本 `progress.md` 与全部 `task-*-brief` / `task-*-report` / `review*`;`rollback()` 整体回收归档目录并保留已并入的统一位置
33
+ - **命令层路径收口**:`apply` / `execute` / `status` / workflow gate 移除散落的 `join(config.sdd.workspaceDir, ...)`,统一改用 `ChangeWorkspace`
34
+ - **技能文档路径对齐**:`builtin/skills/` 中 `.specpow/sdd/{change}` → `.specpow/changes/{change}/sdd`,并修正 `execution-sdd-orchestrator` 中过时的 `.specpow/openspec/changes/{change}`
35
+
36
+ #### 迁移
37
+
38
+ - 新增迁移步骤 `normalize-sdd-workspace`:将遗留 `.specpow/sdd/<change>/` 及散落在变更目录根部的 SDD 工件(`progress.md`、`task-*-brief.md`、`task-*-report.md`、`review*.md`、`review-result.json`、`re-review-result.json`)移动至 `<changesDir>/<change>/sdd/`,并把 `config.sdd.workspaceDir` 改写为 `sdd`;幂等、失败不删除源、支持 `dryRun`
39
+
40
+ #### 注意
41
+
42
+ - 若你的脚本或 CI 手工依赖 `sdd.workspaceDir` 旧值(`.specpow/changes`)拼接路径,需改为使用变更目录内的 `sdd/` 子目录;可通过 `specpow doctor` 确认迁移状态
43
+
44
+ #### 测试
45
+
46
+ - 新增 `test/delta-merger-enhanced.test.ts`(围栏合并回归:MODIFIED/ADDED 围栏、双侧同名索引互不串扰、`$&`/`$1`/`$$` 保留、冲突路径无残留)
47
+ - 新增 `test/change-workspace.test.ts`、`test/doctor-archive-check.test.ts`
48
+ - 扩充 `test/archive-engine.test.ts`(归档含 sdd 子目录、遗留 sdd 并入与清理、artifacts 清单、回滚还原)、`test/migration.test.ts`(移动/幂等/原位置清理)
49
+
50
+ ## [0.6.1] - 2026-09-10
51
+
52
+ ### 🔧 mes-prd-to-code Schema 规则修正
53
+
54
+ 统一后端 Excel 导出/导入公共基类约定,修正包路径错误。
55
+
56
+ #### 变更内容
57
+
58
+ - **后端公共类引用规则**:导出统一使用 `BaseExcelExportTemplate`、导入统一使用 `BaseAnalysisEventListener`(均为 `com.twsz.mom.ds.util.excel`)
59
+ - **后端 Controller 规范**:导出/导入逻辑封装在 ServiceImpl,Controller 只负责调用
60
+ - **EasyExcel 白名单**:仅允许 `EasyExcel.read(...)`(作为 `BaseAnalysisEventListener` 的驱动入口);禁止 `EasyExcel.write(...)`、`doReadSync()`
61
+ - **ExcelUtil 废弃**:`com.twsz.mom.web.utils.ExcelUtil` 标注为已废弃,禁止使用
62
+ - 修正 `BaseExcelExportTemplate` 包路径(`core.web.excel` → `ds.util.excel`)并补齐 API 说明(`getTotal()`、`getData(start, size)`,start 从 1 开始)
63
+ - `templates/tech-design.md` 伪代码由 `uploadExcel(List<T>)` 改为 `export(...)` + `handle(List<T>)`
64
+
8
65
  ## [0.5.29] - 2026-08-31
9
66
 
10
67
  ### ✨ Memory Auto Adapter 系统
@@ -37,13 +37,14 @@
37
37
  - `new BaseException(String message)` → 从消息构造
38
38
  - `new BaseException(HttpStatus status, Object... args)` → 带参数格式化
39
39
 
40
- ### ExcelUtil (com.twsz.mom.core.utils.ExcelUtil)
40
+ ### ExcelUtil (com.twsz.mom.web.utils.ExcelUtil) 【已废弃,禁止使用】
41
41
  - `importExcel(InputStream is)` → `List<Map<String, Object>>`(原始导入)
42
42
  - `importExcel(InputStream is, Class<T> clazz)` → `List<T>`(类型化导入)
43
43
  - `export(HttpServletResponse resp, Class<T> clazz, Boolean isCsv, Collection<?> data)` → 标准导出
44
44
  - `export(HttpServletResponse resp, Class<T> clazz, Boolean isCsv, Supplier<Collection<?>> supplier)` → 懒加载导出
45
45
  - `responseJson(HttpServletResponse resp, ResponseWrapper<T> wrapper)` → 写 JSON 错误响应
46
46
  - `exportException(HttpServletResponse resp, Throwable e)` → 写异常为 JSON
47
+ - 废弃说明: 导出改用 BaseExcelExportTemplate,导入改用 BaseAnalysisEventListener;本节仅用于识别存量代码
47
48
 
48
49
  ### ApplicationContextUtil (com.twsz.mom.core.utils.ApplicationContextUtil)
49
50
  - `getUserActName()` → 获取当前登录用户名称(仅在业务逻辑中需要用户名时使用,如日志记录、业务校验)
@@ -53,12 +54,24 @@
53
54
  - `fastSimpleUUID()` → 生成无横线 UUID(用于导出文件名等)
54
55
 
55
56
  ### EasyExcel (com.alibaba.excel.EasyExcel)
56
- - `EasyExcel.write(OutputStream, Class<T>).sheet("sheet").doWrite(List)` → 简单导出
57
- - `EasyExcel.read(InputStream, Class<T>, ReadListener).sheet().doRead()` → 监听式导入
58
-
59
- ### BaseExcelExportTemplate (com.twsz.mom.core.web.excel.BaseExcelExportTemplate)
60
- - 抽象类:`getTotal()` + `getData(Integer start, Integer size)` → 分批导出模板
61
- - 默认 batch size: 1000, sheet max: 1,048,576
57
+ - `EasyExcel.read(InputStream, Class<T>, ReadListener).sheet().doRead()` → 监听式导入(唯一允许用法,必须配合 BaseAnalysisEventListener)
58
+ - 禁止: EasyExcel.write(...)、EasyExcel.read(...).doReadSync()
59
+
60
+ ### BaseExcelExportTemplate (com.twsz.mom.ds.util.excel.BaseExcelExportTemplate)
61
+ - 定义: public abstract class BaseExcelExportTemplate<T>
62
+ - 抽象方法: int getTotal() List<T> getData(Integer start, Integer size)
63
+ - 重要: getData 的 start 参数从 1 开始(源码按 getData(i + 1, batchSize) 调用)
64
+ - 构造器: (Class<T>) / (String fileName, String sheetName, Class<T>) / (..., Integer batchSize) / (..., Integer batchSize, Integer sheetNum)
65
+ - 默认值: batchSize=1000, sheetNum=1048576;sheetNum < batchSize 抛 BaseException
66
+ - exportBatch(HttpServletResponse, Converter<?>...) → 同步导出,内置 try-catch,失败回写 ResponseWrapper.ofFail("导出失败")
67
+ - exportBatch(OutputStream, WriteHandler, Converter<?>...) → 异步落文件,抛异常
68
+
69
+ ### BaseAnalysisEventListener (com.twsz.mom.ds.util.excel.BaseAnalysisEventListener)
70
+ - 定义: public abstract class BaseAnalysisEventListener<T> extends com.alibaba.excel.event.AnalysisEventListener<T>
71
+ - 构造器: (int batchSize)
72
+ - 抽象方法: void handle(List<T> dataList) — 唯一需要实现的方法
73
+ - 分批机制: invoke() 累积满 batchSize 触发 handle() 并清空;doAfterAllAnalysed() 冲刷余量
74
+ - 用法: EasyExcel.read(inputStream, Entity.class, new BaseAnalysisEventListener<Entity>(1000){ handle(list) }).sheet().doRead()
62
75
 
63
76
  ### ViewModel 常量 (com.twsz.mom.ds.model.ViewModel)
64
77
  - `ViewModel.OPT_ADD = "1"` — 新增标记
@@ -58,8 +58,10 @@
58
58
  - Controller 只做参数校验和结果封装,禁止写业务逻辑
59
59
  - 禁止在 Controller 中 try-catch(全局异常处理器 @ControllerAdvice 统一处理)
60
60
  - delete 接口: @DeleteMapping,接收 `Long[] ids`
61
- - export 接口: 使用 ExcelUtil.export() EasyExcel 直接写入 HttpServletResponse
62
- - import 接口: 接收 MultipartFile,使用 ExcelUtil.importExcel() EasyExcel.read()
61
+ - export 接口: 必须用 BaseExcelExportTemplate 匿名子类(实现 getTotal()、getData(start, size),start 从 1 开始),调用 exportBatch(HttpServletResponse, Converter...) 写入响应;禁止 ExcelUtil.export()、禁止 EasyExcel.write()
62
+ - export 位置: 匿名子类封装在 ServiceImpl 导出方法中(如 entityService.export(entity, response)),Controller 只注入调用,禁止在 Controller 内写导出逻辑
63
+ - import 接口: 接收 MultipartFile,必须用 EasyExcel.read(inputStream, Entity.class, new BaseAnalysisEventListener<Entity>(batchSize) { handle(List<Entity>) }).sheet().doRead() 驱动;禁止 ExcelUtil.importExcel()、禁止 doReadSync() 裸读
64
+ - import 位置: 校验与入库逻辑写在 BaseAnalysisEventListener.handle(List<Entity>) 内,由 batchSize 控制分批;禁止在 handle() 内单条循环查询
63
65
 
64
66
  ## 后端 Service 规范
65
67
 
@@ -107,8 +109,10 @@
107
109
  - BaseException: `new BaseException(AIHttpStatus.XXX.getCode(), AIHttpStatus.XXX.getMessage())` — com.twsz.mom.core.exception.BaseException
108
110
  - PageForm<T>: size(页大小), current(页码,1-based), condition(查询条件对象) — com.twsz.mom.core.common.PageForm
109
111
  - ApplicationContextUtil: 获取当前用户名称(getUserActName) — com.twsz.mom.core.utils.ApplicationContextUtil
110
- - ExcelUtil: importExcel/export — com.twsz.mom.core.utils.ExcelUtil
111
- - EasyExcel: com.alibaba.excel.EasyExcel
112
+ - BaseExcelExportTemplate: 导出统一基类,匿名子类实现 getTotal() 与 getData(start, size)(start 从 1 开始),调用 exportBatch(response, converters...) — com.twsz.mom.ds.util.excel.BaseExcelExportTemplate
113
+ - BaseAnalysisEventListener: 导入统一监听器,new BaseAnalysisEventListener<T>(batchSize){ handle(list) },配合 EasyExcel.read(...) 驱动 — com.twsz.mom.ds.util.excel.BaseAnalysisEventListener
114
+ - EasyExcel: 仅允许 EasyExcel.read(...) 驱动 BaseAnalysisEventListener,禁止 EasyExcel.write() — com.alibaba.excel.EasyExcel
115
+ - ExcelUtil: 【已废弃,禁止使用】 — com.twsz.mom.web.utils.ExcelUtil
112
116
  - ViewModel.OPT_ADD = "1", OPT_MODIFY = "2", OPT_DELETE = "3", OPT_NOT_MODIFY_DATE = "0"
113
117
  - IdUtil: cn.hutool.core.util.IdUtil(fastSimpleUUID 等)
114
118
 
@@ -230,7 +230,7 @@ artifacts:
230
230
  - PUT /{entity}/update — 修改
231
231
  - DELETE /{entity}/delete — 批量删除
232
232
  - POST /{entity}/export — 导出
233
- - POST /{entity}/uploadExcel — 导入(如有)
233
+ - POST /{entity}/uploadExcel — 导入(如有),由 BaseAnalysisEventListener 承载批量校验与入库
234
234
  - 外部接口(如功能文档有定义):
235
235
  - 按功能文档定义的路径和方法
236
236
  - 请求/响应格式按功能文档
@@ -409,7 +409,7 @@ artifacts:
409
409
  - deleteByIds: 批量删除+级联
410
410
  - search: 分页查询
411
411
  - list: 列表查询
412
- - importExcel/uploadExcel: 逐行校验、跳过统计(如有)
412
+ - uploadExcel: BaseAnalysisEventListener.handle() 内批量校验、跳过统计(如有)
413
413
 
414
414
  ## 文件路径
415
415
  测试文件放在: src/test/java/{与ServiceImpl相同的包路径}/
@@ -236,10 +236,17 @@ insert({Entity} entity):
236
236
  1. <校验规则描述>
237
237
  2. <校验通过> → baseMapper.insert(entity)
238
238
 
239
- uploadExcel(List<{Entity}> list):
239
+ export({Entity} entity, HttpServletResponse response):
240
+ new BaseExcelExportTemplate<{Entity}>({Entity}.class) {
241
+ getTotal() → <总数查询描述>
242
+ getData(start, size) → <分页查询描述,start 从 1 开始>
243
+ }.exportBatch(response)
244
+
245
+ handle(List<{Entity}> list):
246
+ // BaseAnalysisEventListener 回调,由 EasyExcel.read(...).doRead() 驱动
240
247
  @Transactional(rollbackFor = Exception.class)
241
- 1. <导入校验描述>
242
- 2. 逐行 insert
248
+ 1. <批量导入校验描述>
249
+ 2. 批量 insert(按 batchSize 分批)
243
250
  ```
244
251
 
245
252
  ### 3.4 Controller
@@ -11,16 +11,16 @@ trigger: on-demand
11
11
 
12
12
  ## 前置条件
13
13
 
14
- - 变更提案已完成:`.specpow/openspec/changes/{change}/` 存在
15
- - 任务清单已生成:`.specpow/openspec/changes/{change}/task-manifest.json`(Host-Driven 模式由 `apply.ts` 生成)
16
- - Ledger 位置:`.specpow/sdd/{change}/progress.md`
14
+ - 变更提案已完成:`.specpow/changes/{change}/` 存在
15
+ - 任务清单已生成:`.specpow/changes/{change}/task-manifest.json`(Host-Driven 模式由 `apply.ts` 生成)
16
+ - Ledger 位置:`.specpow/changes/{change}/sdd/progress.md`
17
17
 
18
18
  ## 执行流程
19
19
 
20
20
  ### 步骤 1:初始化
21
21
 
22
22
  1. 读取 Ledger(`progress.md`),检查是否有已完成的任务(断点续跑)
23
- 2. 读取任务清单:`.specpow/openspec/changes/{change}/task-manifest.json`(包含增强描述和 specConstraints)
23
+ 2. 读取任务清单:`.specpow/changes/{change}/task-manifest.json`(包含增强描述和 specConstraints)
24
24
  3. 记录 BASE commit:`git rev-parse HEAD`
25
25
 
26
26
  ### 步骤 2:逐任务执行
@@ -30,7 +30,7 @@ trigger: on-demand
30
30
  #### 2a. 创建 Brief
31
31
 
32
32
  读取任务信息,创建 brief 文件:
33
- - **路径**:`.specpow/sdd/{change}/task-{N}-brief.md`
33
+ - **路径**:`.specpow/changes/{change}/sdd/task-{N}-brief.md`
34
34
  - **内容**:
35
35
  ```markdown
36
36
  # Task {N}: {title}
@@ -45,7 +45,7 @@ trigger: on-demand
45
45
  {spec constraints from specs/ directory}
46
46
 
47
47
  ## 输出要求
48
- 完成后写 Report JSON 到:`.specpow/sdd/{change}/task-{N}-report.md`
48
+ 完成后写 Report JSON 到:`.specpow/changes/{change}/sdd/task-{N}-report.md`
49
49
  ```
50
50
 
51
51
  #### 2b. 派发实现者子代理
@@ -64,7 +64,7 @@ trigger: on-demand
64
64
 
65
65
  #### 2c. 检查 Report
66
66
 
67
- 读取 `.specpow/sdd/{change}/task-{N}-report.md`,解析 JSON:
67
+ 读取 `.specpow/changes/{change}/sdd/task-{N}-report.md`,解析 JSON:
68
68
  ```json
69
69
  {
70
70
  "status": "done|blocked|in_progress|done_with_concerns|needs_context",
@@ -84,7 +84,7 @@ trigger: on-demand
84
84
  ```bash
85
85
  BASE_COMMIT={recorded base commit}
86
86
  HEAD_COMMIT=$(git rev-parse HEAD)
87
- git diff ${BASE_COMMIT}..${HEAD_COMMIT} > .specpow/sdd/{change}/review-package.md
87
+ git diff ${BASE_COMMIT}..${HEAD_COMMIT} > .specpow/changes/{change}/sdd/review-package.md
88
88
  ```
89
89
 
90
90
  #### 2e. 派发审查者子代理
@@ -98,7 +98,7 @@ git diff ${BASE_COMMIT}..${HEAD_COMMIT} > .specpow/sdd/{change}/review-package.m
98
98
  - **阶段 A:Spec 合规性** — 实现是否满足 spec 要求
99
99
  - **阶段 B:代码质量** — bug、安全问题、性能问题
100
100
  - **阶段 C:TDD 合规** — 测试是否充分
101
- 4. 输出 Review JSON 到 `.specpow/sdd/{change}/review-result.json`:
101
+ 4. 输出 Review JSON 到 `.specpow/changes/{change}/sdd/review-result.json`:
102
102
  ```json
103
103
  {
104
104
  "specCompliant": true/false,
@@ -147,7 +147,7 @@ fi
147
147
  每轮:
148
148
 
149
149
  1. **派发实现者修复(复用原始 brief)**
150
- - Brief 路径不变:`.specpow/sdd/{change}/task-{N}-brief.md`(不修改 brief 文件)
150
+ - Brief 路径不变:`.specpow/changes/{change}/sdd/task-{N}-brief.md`(不修改 brief 文件)
151
151
  - Open findings 通过指令传递给实现者,不写入 brief 文件
152
152
  - **模型升级**:第 4-5 轮使用比当前高一级模型
153
153
  - **指令**:修复 findings → 写 Report JSON 到 `task-{N}-report.md.fix-{R}`
@@ -157,13 +157,13 @@ fi
157
157
  FIX_BASE=$(git rev-parse HEAD)
158
158
  # 实现者修复后...
159
159
  FIX_HEAD=$(git rev-parse HEAD)
160
- git diff ${FIX_BASE}..${FIX_HEAD} > .specpow/sdd/{change}/review-package.md
160
+ git diff ${FIX_BASE}..${FIX_HEAD} > .specpow/changes/{change}/sdd/review-package.md
161
161
  ```
162
162
 
163
163
  3. **派发重审者(范围限定)**
164
164
  - **只审查修复部分**,不重新审查整个任务
165
165
  - **指令**:对每个 finding 判定 `addressed: true/false`
166
- - 输出更新后的 review JSON 到 `.specpow/sdd/{change}/re-review-result.json`
166
+ - 输出更新后的 review JSON 到 `.specpow/changes/{change}/sdd/re-review-result.json`
167
167
 
168
168
  4. **运行测试**
169
169
 
@@ -225,7 +225,7 @@ fi
225
225
  # 为每个任务创建独立 worktree
226
226
  BASE_COMMIT=$(git rev-parse HEAD)
227
227
  BRANCH_NAME="specpow-parallel-{TASK_NUM}-{TIMESTAMP}"
228
- WORKTREE_PATH=".specpow/sdd/{change}/.worktrees/task-{TASK_NUM}"
228
+ WORKTREE_PATH=".specpow/changes/{change}/sdd/.worktrees/task-{TASK_NUM}"
229
229
 
230
230
  git worktree add -b "$BRANCH_NAME" "$WORKTREE_PATH" "$BASE_COMMIT"
231
231
  ```
@@ -250,9 +250,9 @@ git worktree add -b "$BRANCH_NAME" "$WORKTREE_PATH" "$BASE_COMMIT"
250
250
  **并行派发示例**(Claude Code):
251
251
  ```
252
252
  同时发起多个 Agent 调用:
253
- - Agent 1: "Task 1 in worktree .specpow/sdd/{change}/.worktrees/task-1"
254
- - Agent 2: "Task 2 in worktree .specpow/sdd/{change}/.worktrees/task-2"
255
- - Agent 3: "Task 3 in worktree .specpow/sdd/{change}/.worktrees/task-3"
253
+ - Agent 1: "Task 1 in worktree .specpow/changes/{change}/sdd/.worktrees/task-1"
254
+ - Agent 2: "Task 2 in worktree .specpow/changes/{change}/sdd/.worktrees/task-2"
255
+ - Agent 3: "Task 3 in worktree .specpow/changes/{change}/sdd/.worktrees/task-3"
256
256
  ```
257
257
 
258
258
  ##### 2c. 等待所有子代理完成
@@ -291,7 +291,7 @@ done
291
291
 
292
292
  ```bash
293
293
  # 删除 worktree 和分支
294
- git worktree remove ".specpow/sdd/{change}/.worktrees/task-{TASK_NUM}" --force
294
+ git worktree remove ".specpow/changes/{change}/sdd/.worktrees/task-{TASK_NUM}" --force
295
295
  git branch -D "specpow-parallel-{TASK_NUM}-xxx"
296
296
  ```
297
297
 
@@ -332,7 +332,7 @@ Layer {L}: complete ({N} tasks merged, {C} conflicts detected)
332
332
 
333
333
  ## Ledger 记录格式
334
334
 
335
- 每完成一个操作,**追加一行**到 `.specpow/sdd/{change}/progress.md`。
335
+ 每完成一个操作,**追加一行**到 `.specpow/changes/{change}/sdd/progress.md`。
336
336
  格式为**扁平日志行**(不是结构化 markdown),ledger.ts 用正则解析这些行。
337
337
 
338
338
  首行固定为:
@@ -81,10 +81,10 @@ trigger: on-demand
81
81
  | 变量 | 来源 | 示例 |
82
82
  |------|------|------|
83
83
  | `{projectContext}` | 项目根目录名 | `specpow` |
84
- | `{briefPath}` | 任务简报路径 | `.specpow/sdd/{change}/task-{N}-brief.md` |
84
+ | `{briefPath}` | 任务简报路径 | `.specpow/changes/{change}/sdd/task-{N}-brief.md` |
85
85
  | `{specConstraints}` | specs/ 目录中的规范内容 | 从 `specs/*.md` 读取 |
86
86
  | `{filesList}` | 任务涉及的文件列表 | 从任务描述中提取 |
87
- | `{reportPath}` | 实现报告输出路径 | `.specpow/sdd/{change}/task-{N}-report.md` |
87
+ | `{reportPath}` | 实现报告输出路径 | `.specpow/changes/{change}/sdd/task-{N}-report.md` |
88
88
 
89
89
  ### Fix 轮次的实现者派发
90
90
 
@@ -157,9 +157,9 @@ trigger: on-demand
157
157
  | 变量 | 来源 | 示例 |
158
158
  |------|------|------|
159
159
  | `{taskTitle}` | 任务标题 | 从 brief 中读取 |
160
- | `{briefPath}` | 任务简报路径 | `.specpow/sdd/{change}/task-{N}-brief.md` |
161
- | `{reviewPackagePath}` | 审查包路径(diff) | `.specpow/sdd/{change}/review-package.md` |
162
- | `{reviewResultPath}` | 审查结果输出路径 | `.specpow/sdd/{change}/review-result.json` |
160
+ | `{briefPath}` | 任务简报路径 | `.specpow/changes/{change}/sdd/task-{N}-brief.md` |
161
+ | `{reviewPackagePath}` | 审查包路径(diff) | `.specpow/changes/{change}/sdd/review-package.md` |
162
+ | `{reviewResultPath}` | 审查结果输出路径 | `.specpow/changes/{change}/sdd/review-result.json` |
163
163
 
164
164
  ### 审查要点
165
165
 
@@ -193,9 +193,9 @@ trigger: on-demand
193
193
 
194
194
  | 变量 | 来源 | 示例 |
195
195
  |------|------|------|
196
- | `{fixDiffPath}` | 修复 diff 路径 | `.specpow/sdd/{change}/review-package.md`(复用审查包命名) |
196
+ | `{fixDiffPath}` | 修复 diff 路径 | `.specpow/changes/{change}/sdd/review-package.md`(复用审查包命名) |
197
197
  | `{openFindingsList}` | 开放 findings 列表 | 格式化后的 finding 列表(见下方) |
198
- | `{reReviewResultPath}` | 重审结果输出路径 | `.specpow/sdd/{change}/re-review-result.json` |
198
+ | `{reReviewResultPath}` | 重审结果输出路径 | `.specpow/changes/{change}/sdd/re-review-result.json` |
199
199
 
200
200
  ### Open Findings 列表格式
201
201
 
@@ -238,7 +238,7 @@ trigger: on-demand
238
238
  # 1. 生成审查包(diff)
239
239
  BASE_COMMIT={recorded base commit}
240
240
  HEAD_COMMIT=$(git rev-parse HEAD)
241
- git diff ${BASE_COMMIT}..${HEAD_COMMIT} > .specpow/sdd/{change}/review-package.md
241
+ git diff ${BASE_COMMIT}..${HEAD_COMMIT} > .specpow/changes/{change}/sdd/review-package.md
242
242
 
243
243
  # 2. 使用宿主原生 subagent 工具派发审查者
244
244
  # Prompt: 审查者模板(见上方)
@@ -255,7 +255,7 @@ git diff ${BASE_COMMIT}..${HEAD_COMMIT} > .specpow/sdd/{change}/review-package.m
255
255
  FIX_BASE=$(git rev-parse HEAD)
256
256
  # 实现者修复后...
257
257
  FIX_HEAD=$(git rev-parse HEAD)
258
- git diff ${FIX_BASE}..${FIX_HEAD} > .specpow/sdd/{change}/review-package.md
258
+ git diff ${FIX_BASE}..${FIX_HEAD} > .specpow/changes/{change}/sdd/review-package.md
259
259
 
260
260
  # 2. 使用宿主原生 subagent 工具派发重审者
261
261
  # Prompt: 重审者模板(见上方)+ open findings 列表
@@ -62,7 +62,7 @@ specpow instructions apply --change <name> --json
62
62
  使用 SDD 引擎执行计划。
63
63
  [设置: 工作区已验证]
64
64
  [读取计划文件: tasks.md]
65
- [创建工作区 .specpow/sdd/<plan-name>/]
65
+ [创建工作区 .specpow/changes/<plan-name>/sdd/]
66
66
  [初始化账本]
67
67
  [为所有任务创建 todo]
68
68
  ```
@@ -56,7 +56,7 @@ description: 苏格拉底式需求探索。在任何编码之前激活。探索
56
56
  ### 阶段 5: 写设计文档
57
57
  将确认的设计写入文档:
58
58
  ```
59
- .specpow/openspec/changes/<change-name>/exploration.md
59
+ .specpow/changes/<change-name>/exploration.md
60
60
  ```
61
61
 
62
62
  ### 阶段 6: 自审
@@ -28,7 +28,7 @@ TypeScript 代码仅负责非 AI 工作(文件创建、schema 解析)。**
28
28
 
29
29
  1. **先查技能** — 任何响应或行动之前,先扫描 `.specpow/skills/` 目录查找相关技能
30
30
  2. **文件即接口** — 子代理通过文件通信(brief、report、review JSON),不通过对话上下文
31
- 3. **Ledger 是真相** — 上下文压缩后,信任 Ledger(`.specpow/sdd/<change>/progress.md`)和 git log,不信任自己的记忆
31
+ 3. **Ledger 是真相** — 上下文压缩后,信任 Ledger(`.specpow/changes/<change>/sdd/progress.md`)和 git log,不信任自己的记忆
32
32
  4. **TDD 强制** — RED → GREEN → REFACTOR,不可跳过
33
33
  5. **规范即契约** — specs 中定义的行为必须被实现遵守
34
34
  6. **审查+测试才完成** — 每个任务实施完成后,必须经过**代码审查**且**测试全部通过**,才能标记为 done。审查通过后标记完成;审查未通过则进入修复循环(最多 5 轮),每轮修复后重新审查修复部分。
@@ -43,7 +43,7 @@ TypeScript 代码仅负责非 AI 工作(文件创建、schema 解析)。**
43
43
  | `specpow explore "..."` | 调用 `planning-explore` 技能 |
44
44
  | `specpow propose <name>` | 调用 `planning-propose` 技能 |
45
45
  | 任何编码任务 | 先检查 `.specpow/skills/` 是否有适用技能 |
46
- | 发现 SDD 工作区(`.specpow/sdd/<change>/`) | 自动读取 progress.md 并按 SDD 流程继续 |
46
+ | 发现 SDD 工作区(`.specpow/changes/<change>/sdd/`) | 自动读取 progress.md 并按 SDD 流程继续 |
47
47
 
48
48
  ## Host-Driven 模式核心概念
49
49
 
@@ -54,7 +54,7 @@ TypeScript 代码仅负责非 AI 工作(文件创建、schema 解析)。**
54
54
  | **Subagent 工具** | 派发实现者/审查者子代理 | Claude Code: Agent tool; Cursor: subagent |
55
55
  | **File I/O** | 读写 brief、report、review JSON | Read/Write 工具 |
56
56
  | **Bash** | 执行 git 操作、运行测试 | `git diff`, `npm test` |
57
- | **Ledger** | 记录进度、恢复状态 | 追加到 `.specpow/sdd/<change>/progress.md` |
57
+ | **Ledger** | 记录进度、恢复状态 | 追加到 `.specpow/changes/<change>/sdd/progress.md` |
58
58
 
59
59
  ### 文件通信协议
60
60
 
package/dist/cli/index.js CHANGED
@@ -206,7 +206,7 @@ export async function runCli() {
206
206
  program
207
207
  .command('migrate')
208
208
  .description('版本迁移 — 升级到最新版本')
209
- .option('--to <version>', '目标版本', '0.2.0')
209
+ .option('--to <version>', '目标版本', '0.4.0')
210
210
  .option('--step <name>', '只执行指定迁移步骤')
211
211
  .option('--dry-run', '预览迁移计划,不实际执行')
212
212
  .option('--no-backup', '跳过自动备份')
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA0CD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8WtE"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA0CD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+WtE"}
@@ -14,6 +14,7 @@ import { markTaskDone } from '../core/task-parser.js';
14
14
  import { GlobalConfigManager } from '../core/config/global-config.js';
15
15
  import { successResponse, outputJson } from '../core/agent-contract.js';
16
16
  import { validateDeltaSpecNames } from '../core/validation/index.js';
17
+ import { createChangeWorkspace } from '../core/workspace/index.js';
17
18
  /**
18
19
  * 检测是否在 AI 工具内嵌终端中运行
19
20
  * 返回检测到的工具名称,未检测到时返回 null
@@ -85,7 +86,8 @@ export async function applyChange(options) {
85
86
  return;
86
87
  }
87
88
  }
88
- const changeDir = join(changesDir, changeName);
89
+ const ws = createChangeWorkspace(projectRoot, changeName, config);
90
+ const changeDir = ws.root;
89
91
  if (!existsSync(changeDir)) {
90
92
  console.log(chalk.red(`变更 "${changeName}" 不存在。`));
91
93
  return;
@@ -160,7 +162,7 @@ export async function applyChange(options) {
160
162
  return;
161
163
  }
162
164
  // 初始化 SDD 引擎
163
- const workspaceDir = join(projectRoot, config.sdd.workspaceDir, changeName);
165
+ const workspaceDir = ws.sddDir;
164
166
  // 从 config.json 读取模型配置
165
167
  const configManager = new GlobalConfigManager(projectRoot);
166
168
  const sddConfig = configManager.get('sdd');
@@ -229,7 +231,7 @@ export async function applyChange(options) {
229
231
  ### 快速参考
230
232
 
231
233
  1. 读取任务清单(task-manifest.json)
232
- 2. 检查 Ledger(\`${join(config.sdd.workspaceDir, changeName, 'progress.md')}\`)是否有已完成任务
234
+ 2. 检查 Ledger(\`${ws.ledgerPath}\`)是否有已完成任务
233
235
  3. 逐任务执行:
234
236
  - 创建 Brief → task-{N}-brief.md
235
237
  - 派发实现者子代理 → 读 brief → 写代码 → 写 report
@@ -246,8 +248,8 @@ export async function applyChange(options) {
246
248
 
247
249
  ### 关键文件位置
248
250
 
249
- - Ledger: \`${join(config.sdd.workspaceDir, changeName, 'progress.md')}\`
250
- - 工作区: \`${workspaceDir}\`
251
+ - Ledger: \`${ws.ledgerPath}\`
252
+ - 工作区: \`${ws.sddDir}\`
251
253
  - 技能目录: \`${config.paths.skillsDir}/\`
252
254
 
253
255
  ### 铁律
@@ -1 +1 @@
1
- {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA4G3E;AAYD;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B9C"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAkI3E;AA0DD;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B9C"}
@@ -108,8 +108,72 @@ export async function runDoctor(projectRoot) {
108
108
  fix: fs.existsSync(nodeModules) ? undefined : '运行 pnpm install',
109
109
  });
110
110
  }
111
+ // 8. 检查主规范是否残留代码围栏占位符(归档合并污染的迹象)
112
+ const fenceResidues = findFenceResidues(specsDir);
113
+ checks.push({
114
+ name: '规范围栏残留',
115
+ status: fenceResidues.length > 0 ? 'warn' : 'ok',
116
+ message: fenceResidues.length > 0
117
+ ? `检测到 ${fenceResidues.length} 处 __CODE_FENCE_ 残留: ${fenceResidues.slice(0, 3).join(', ')}`
118
+ : '主规范无代码围栏占位符残留',
119
+ fix: fenceResidues.length > 0 ? '检查归档合并逻辑后重试 specpow archive' : undefined,
120
+ });
121
+ // 9. 检查是否存在遗留外部账本(需要执行 normalize-sdd-workspace 迁移)
122
+ const legacyChanges = findLegacySddChanges(projectRoot, changesDir);
123
+ checks.push({
124
+ name: 'SDD 工作区布局',
125
+ status: legacyChanges.length > 0 ? 'warn' : 'ok',
126
+ message: legacyChanges.length > 0
127
+ ? `检测到 ${legacyChanges.length} 个遗留外部账本: ${legacyChanges.slice(0, 3).join(', ')},需要执行迁移 normalize-sdd-workspace`
128
+ : 'SDD 工作区布局正常(无遗留外部账本)',
129
+ fix: legacyChanges.length > 0 ? '运行 specpow migrate(normalize-sdd-workspace)' : undefined,
130
+ });
111
131
  return checks;
112
132
  }
133
+ /**
134
+ * 扫描目录下所有 .md 文件,返回包含 __CODE_FENCE_ 占位符的位置(path:line)
135
+ */
136
+ function findFenceResidues(dir) {
137
+ const results = [];
138
+ if (!fs.existsSync(dir))
139
+ return results;
140
+ const walk = (current) => {
141
+ for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
142
+ const full = path.join(current, entry.name);
143
+ if (entry.isDirectory()) {
144
+ walk(full);
145
+ continue;
146
+ }
147
+ if (!entry.name.endsWith('.md'))
148
+ continue;
149
+ const lines = fs.readFileSync(full, 'utf-8').split(/\r?\n/);
150
+ lines.forEach((line, index) => {
151
+ if (line.includes('__CODE_FENCE_')) {
152
+ results.push(`${full}:${index + 1}`);
153
+ }
154
+ });
155
+ }
156
+ };
157
+ walk(dir);
158
+ return results;
159
+ }
160
+ /**
161
+ * 返回同时存在于活跃变更目录与遗留 .specpow/sdd/ 下的变更名
162
+ */
163
+ function findLegacySddChanges(projectRoot, changesDir) {
164
+ const legacyRoot = path.join(projectRoot, '.specpow', 'sdd');
165
+ if (!fs.existsSync(legacyRoot))
166
+ return [];
167
+ const result = [];
168
+ for (const entry of fs.readdirSync(legacyRoot, { withFileTypes: true })) {
169
+ if (!entry.isDirectory())
170
+ continue;
171
+ if (fs.existsSync(path.join(changesDir, entry.name))) {
172
+ result.push(entry.name);
173
+ }
174
+ }
175
+ return result;
176
+ }
113
177
  function countSkillFiles(dir) {
114
178
  if (!fs.existsSync(dir))
115
179
  return 0;