spec-canon 0.1.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 (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +90 -0
  3. package/bin/spec-canon.mjs +2 -0
  4. package/dist/commands/init.d.ts +2 -0
  5. package/dist/commands/init.js +97 -0
  6. package/dist/commands/prompt.d.ts +2 -0
  7. package/dist/commands/prompt.js +145 -0
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.js +11 -0
  10. package/dist/prompts/catalog.d.ts +20 -0
  11. package/dist/prompts/catalog.js +31 -0
  12. package/dist/prompts/renderer.d.ts +5 -0
  13. package/dist/prompts/renderer.js +21 -0
  14. package/dist/templates/index.d.ts +6 -0
  15. package/dist/templates/index.js +32 -0
  16. package/dist/utils/fs.d.ts +5 -0
  17. package/dist/utils/fs.js +29 -0
  18. package/dist/utils/logger.d.ts +8 -0
  19. package/dist/utils/logger.js +26 -0
  20. package/package.json +49 -0
  21. package/templates/00_context.md +48 -0
  22. package/templates/01_requirement.md +40 -0
  23. package/templates/02_interface.md +64 -0
  24. package/templates/03_implementation.md +81 -0
  25. package/templates/04_test_spec.md +34 -0
  26. package/templates/AI_CHANGELOG.md +11 -0
  27. package/templates/claude-md-section.md +66 -0
  28. package/templates/domain_spec.md +38 -0
  29. package/templates/domains-readme.md +21 -0
  30. package/templates/prompts/catalog.json +139 -0
  31. package/templates/prompts/daily/domain_sync.md +48 -0
  32. package/templates/prompts/daily/step0.5_context.md +21 -0
  33. package/templates/prompts/daily/step0.5_context_from_code.md +4 -0
  34. package/templates/prompts/daily/step0.5_context_with_domain.md +11 -0
  35. package/templates/prompts/daily/step0_context.md +21 -0
  36. package/templates/prompts/daily/step0_init.md +2 -0
  37. package/templates/prompts/daily/step1_requirement.md +13 -0
  38. package/templates/prompts/daily/step2_implementation.md +7 -0
  39. package/templates/prompts/daily/step2_interface.md +3 -0
  40. package/templates/prompts/daily/step2_test_spec.md +4 -0
  41. package/templates/prompts/daily/step3_execute.md +3 -0
  42. package/templates/prompts/daily/step4_review.md +4 -0
  43. package/templates/prompts/daily/step5_archive_cross_domain.md +3 -0
  44. package/templates/prompts/daily/step5_archive_domain.md +11 -0
  45. package/templates/prompts/guide.md +86 -0
  46. package/templates/prompts/iterative/cold_batch_baseline.md +15 -0
  47. package/templates/prompts/iterative/cold_batch_identify.md +37 -0
  48. package/templates/prompts/iterative/cold_batch_structure.md +21 -0
  49. package/templates/prompts/iterative/cold_lazy_first_domain_spec.md +9 -0
  50. package/templates/prompts/iterative/split_evaluate.md +16 -0
  51. package/templates/prompts/iterative/split_execute.md +14 -0
  52. package/templates/prompts/new-project/phase0_context_from_prd.md +11 -0
  53. package/templates/prompts/new-project/phase3_first_domain_spec.md +4 -0
  54. package/templates/skill.md +12 -0
@@ -0,0 +1,48 @@
1
+ # Context: [变更名称]
2
+ > 生成时间: YYYY-MM-DD | 生成者: Claude Code + @[工程师]
3
+ > 本文档描述启动本变更时的系统现状,作为 01-04 的共享前提。
4
+
5
+ ## 1. 业务背景(Business Context)
6
+ [这个变更所在的业务域是什么?用户场景是什么?
7
+ 为什么现在要做?—— 从 PRD 中提炼,2-3 段即可]
8
+ (→ 下游消费者:01_requirement 的 Background 段落可直接引用)
9
+
10
+ ## 2. 系统现状(Current State)
11
+
12
+ ### 2.1 相关模块
13
+ - `模块A`(path/to/module-a/):负责 [职责],当前状态 [正常/有已知问题]
14
+ - `模块B`(path/to/module-b/):负责 [职责]
15
+ (→ 下游消费者:03_implementation 的 File Changes、04_test_spec 的 Regression Impact)
16
+
17
+ ### 2.2 相关数据模型
18
+ - `table_a`:[关键字段说明,当前索引情况]
19
+ - `table_b`:[与 table_a 的关联关系]
20
+ (→ 下游消费者:02_interface 的字段命名对齐、03_implementation 的 Data Changes)
21
+
22
+ ### 2.3 相关接口(已有的)
23
+ - `GET /api/v1/xxx`:[用途,当前调用方]
24
+ - `POST /api/v1/yyy`:[用途]
25
+ (→ 下游消费者:02_interface 的风格一致性、错误码体系对齐)
26
+
27
+ ### 2.4 依赖服务
28
+ - [内部服务]:积分服务 v2(HTTP),SLA: P99 < 100ms
29
+ - [外部服务]:支付网关(无直接依赖 / 有依赖)
30
+
31
+ ## 3. 技术约束(Technical Constraints)
32
+ - [性能]:当前 QPS 约 [N],峰值 [M]
33
+ - [数据量]:table_a 当前 [X] 万行,月增 [Y] 万
34
+ - [兼容性]:需兼容客户端 v2.1+(不支持 [某特性])
35
+ - [安全]:涉及 [用户隐私/资金] 数据,需 [脱敏/审计]
36
+ (→ 下游消费者:01_requirement 的 Constraints、02_interface 的版本策略)
37
+
38
+ ## 4. 历史决策(Prior Decisions)
39
+ - [YYYY-MM-DD] 曾考虑过 [方案X],因 [原因] 放弃
40
+ (来源:@spec-canon/decisions/AI_CHANGELOG.md)
41
+ - [YYYY-MM-DD] [模块A] 重构时选择了 [方案Y],需注意 [遗留约束]
42
+ (→ 下游消费者:03_implementation 的 Design Decision,避免重复评估已否决方案)
43
+
44
+ ## 5. 已知风险与坑位(Known Pitfalls)
45
+ - table_a 的 idx_xxx 索引在高并发写入时有锁竞争
46
+ - 模块B 的 xxxMethod() 不是线程安全的,不要并发调用
47
+ - [其他团队经验/踩坑记录]
48
+ (→ 下游消费者:03_implementation 的坑位规避、04_test_spec 的边界用例)
@@ -0,0 +1,40 @@
1
+ # Change: [功能名称]
2
+ > Spec Owner: @[工程师姓名] | Status: draft / approved / archived
3
+ > PRD 来源: [PRD 链接或编号]
4
+ > 系统现状: @spec-canon/changes/change-xxx/00_context.md
5
+
6
+ ## 1. Background(背景)
7
+ [为什么要做这个功能?解决什么问题?—— 1-2 段即可]
8
+
9
+ ## 2. Goals(目标)
10
+ - Goal-1: [要达成的结果]
11
+ - Goal-2: [要达成的结果]
12
+
13
+ ## 3. Scope(范围)
14
+ ### In Scope(本次做)
15
+ - [条目化列出]
16
+
17
+ ### Out of Scope(本次不做)
18
+ - [条目化列出,明确边界]
19
+
20
+ ## 4. Acceptance Criteria(验收标准)
21
+ - AC-1: [具体的、可验证的验收条件]
22
+ - AC-2: [具体的、可验证的验收条件]
23
+ - AC-3: [具体的、可验证的验收条件]
24
+ (至少覆盖:主流程 + 幂等/重复 + 2 个失败场景)
25
+
26
+ ## 5. Constraints(约束)
27
+ - 性能:[如 P95 < 200ms]
28
+ - 安全:[如 需鉴权、脱敏]
29
+ - 兼容:[如 需兼容旧版客户端]
30
+ - 依赖:[如 依赖积分服务 v2 接口]
31
+
32
+ ## 6. Risks & Rollout(风险与上线策略)
33
+ - 风险:[已识别的风险]
34
+ - 灰度策略:[如 先开放 5% 流量]
35
+ - 回滚预案:[如 关闭功能开关即可回滚]
36
+
37
+ ## 7. Consistency Check(一致性自检)
38
+ - [ ] 各 AC 之间无矛盾
39
+ - [ ] 约束条件在所有 AC 场景下成立
40
+ - [ ] In/Out Scope 边界无灰色地带
@@ -0,0 +1,64 @@
1
+ # Interface Spec: [功能名称]
2
+ > Spec Owner: @[工程师姓名] | Status: draft / approved
3
+ > 系统现状: @spec-canon/changes/change-xxx/00_context.md
4
+ > 对齐 01: @spec-canon/changes/change-xxx/01_requirement.md
5
+
6
+ ## 1. Overview(总览)
7
+ - 鉴权方式:Bearer Token
8
+ - 幂等要求:[描述幂等键]
9
+ - 版本策略:[如 v1 接口保持向后兼容]
10
+ - 错误码体系:[遵循项目统一错误码规范]
11
+
12
+ ## 2. Endpoints
13
+
14
+ ### API-1: [HTTP方法] [路径]
15
+ > 对应 AC: AC-1, AC-2
16
+
17
+ **Request**
18
+
19
+ | 字段 | 类型 | 必填 | 说明 | 校验规则 |
20
+ |---|---|---|---|---|
21
+ | field1 | string | Y | 描述 | 正则/长度/枚举 |
22
+ | field2 | int | N | 描述 | 范围 |
23
+
24
+ **Response (Success)**
25
+
26
+ | 字段 | 类型 | Nullable | 说明 |
27
+ |---|---|---|---|
28
+ | field1 | boolean | N | 描述 |
29
+ | field2 | string | Y | 描述 |
30
+
31
+ **Error Codes**
32
+
33
+ | 错误码 | HTTP Status | 说明 | 触发条件 |
34
+ |---|---|---|---|
35
+ | INVALID_PARAM | 400 | 参数非法 | field1 格式不符 |
36
+ | UNAUTHORIZED | 401 | 未授权 | Token 无效或过期 |
37
+
38
+ **Examples**
39
+ ```json
40
+ // 成功 — 首次操作
41
+ Request: { "field1": "value" }
42
+ Response: { "field1": true, "field2": "xxx" }
43
+
44
+ // 成功 — 幂等场景
45
+ Request: { "field1": "value" } (第二次请求)
46
+ Response: { "field1": true, "field2": "xxx" } (结果一致)
47
+
48
+ // 失败 — 参数错误
49
+ Request: { "field1": "" }
50
+ Response: { "code": "INVALID_PARAM", "message": "field1 不能为空" }
51
+ ```
52
+
53
+ ## 3. Data Schema(可选,供 DTO 生成使用)
54
+ ```typescript
55
+ // TypeScript 类型定义(AI 可直接用于前端)
56
+ interface XxxResponse {
57
+ field1: boolean;
58
+ field2: string | null;
59
+ }
60
+ ```
61
+
62
+ ## 4. Notes(补充说明)
63
+ - 兼容性注意事项
64
+ - 与其他接口的联动关系
@@ -0,0 +1,81 @@
1
+ # Implementation Spec: [功能名称]
2
+ > Spec Owner: @[工程师姓名] | Status: draft / approved
3
+ > 系统现状: @spec-canon/changes/change-xxx/00_context.md
4
+ > 对齐 01: @spec-canon/changes/change-xxx/01_requirement.md
5
+ > 对齐 02: @spec-canon/changes/change-xxx/02_interface.md
6
+
7
+ ## 1. Goal Recap(目标复述)
8
+ 用 3-5 行复述本次要实现什么,确保 AI 理解正确。
9
+
10
+ ## 2. Design Decision(设计决策)
11
+
12
+ ### 选定方案
13
+ [描述选定的技术方案]
14
+
15
+ ### 备选方案对比
16
+
17
+ | 维度 | 方案 A(选定) | 方案 B | 方案 C |
18
+ |---|---|---|---|
19
+ | 复杂度 | ★★☆ | ★★★★ | ★★★ |
20
+ | 性能 | ★★★ | ★★★★★ | ★★★★ |
21
+ | 可维护性 | ★★★★★ | ★★★ | ★★ |
22
+ | 风险 | ★★ | ★★★ | ★★★★ |
23
+
24
+ **选择理由**:[为什么选 A,trade-off 是什么]
25
+
26
+ ## 3. File Changes(变更范围)
27
+ - `path/to/FileA.java` — 新增 [类/方法]
28
+ - `path/to/FileB.java` — 修改 [方法名],调整 [逻辑]
29
+ - `path/to/FileC.java` — 新增(新文件)
30
+ - `path/to/TestD.java` — 新增单测
31
+
32
+ ## 4. Data Changes(数据变更,如适用)
33
+ ```sql
34
+ -- 新增表 / 索引 / 字段
35
+ ALTER TABLE xxx ADD COLUMN yyy;
36
+ CREATE UNIQUE INDEX idx_xxx ON table(col1, col2);
37
+ ```
38
+
39
+ ## 5. Core Logic(核心逻辑)
40
+
41
+ ### 伪代码
42
+
43
+ ```
44
+ 1. 解析参数,校验格式
45
+ 2. 开启事务
46
+ 3. 尝试插入记录(唯一约束保证幂等)
47
+ - 冲突 → 返回已处理结果
48
+ 4. 插入成功 → 执行业务逻辑
49
+ 5. 提交事务
50
+ 6. 查询最新状态 → 组装响应
51
+ ```
52
+
53
+ ### 不变量断言(复杂逻辑时使用)
54
+ - INV-1: [不变量描述]
55
+ - INV-2: [不变量描述]
56
+
57
+ ### 状态图(复杂逻辑时使用)
58
+ ```mermaid
59
+ stateDiagram-v2
60
+ [描述状态流转]
61
+ ```
62
+
63
+ ## 6. Execution Plan(分步执行计划)
64
+
65
+ ### Step 1: [步骤标题]
66
+ - 动作:[具体做什么]
67
+ - 文件:`path/to/file`
68
+ - ✅ 验证:`[验证命令]`(必须通过才进入下一步)
69
+
70
+ ### Step 2: [步骤标题]
71
+ - 动作:[具体做什么]
72
+ - 文件:`path/to/file`
73
+ - ✅ 验证:`[验证命令]`
74
+
75
+ ### Step 3: [步骤标题]
76
+ ...
77
+
78
+ ## 7. Rollback & Compatibility(回滚与兼容)
79
+ - 回滚方式:[如何回退]
80
+ - 兼容影响:[影响哪些现有功能]
81
+ - 配置项:[需要配置什么]
@@ -0,0 +1,34 @@
1
+ # Test Spec: [功能名称]
2
+ > Spec Owner: @[工程师姓名] | Status: draft / approved
3
+ > 系统现状: @spec-canon/changes/change-xxx/00_context.md
4
+ > 对齐 01: AC-1 ~ AC-N
5
+ > 对齐 02: 所有 Endpoints
6
+
7
+ ## 1. Test Scope(测试范围)
8
+ - Service 层:单测
9
+ - Controller 层:契约测试 / 集成测试
10
+ - 接口级:契约测试(Schema 比对)
11
+
12
+ ## 2. Test Strategy(测试策略)
13
+ | 层级 | 测试类型 | 工具 | 覆盖重点 |
14
+ |---|---|---|---|
15
+ | Service | 单测 | JUnit 5 + Mockito | 业务逻辑、幂等、异常 |
16
+ | Controller | 集成测试 | MockMvc / WebTestClient | 参数校验、响应格式 |
17
+ | 契约 | Schema 比对 | 自定义断言 | Response 与 02_interface 一致 |
18
+
19
+ ## 3. Test Cases(用例清单)
20
+
21
+ | 编号 | 场景 | 输入 | 期望结果 | 对齐 AC |
22
+ |---|---|---|---|---|
23
+ | TC-01 | [正常路径] | [输入] | [期望] | AC-1 |
24
+ | TC-02 | [幂等场景] | [输入] | [期望] | AC-1 |
25
+ | TC-03 | [参数异常] | [输入] | [期望错误码] | AC-2 |
26
+ | TC-04 | [并发场景] | [输入] | [期望] | AC-1 |
27
+
28
+ ## 4. Test Data(数据准备)
29
+ - 前置数据:[需要预置什么数据]
30
+ - 时间假设:[如 "当天" 以服务端 UTC 为准]
31
+ - Mock 依赖:[哪些外部服务需要 Mock]
32
+
33
+ ## 5. Regression Impact(回归影响)
34
+ - [列出可能影响的现有功能,提示需要回归]
@@ -0,0 +1,11 @@
1
+ # AI Decision Changelog
2
+
3
+ ## 2026-02-26 feat-xxx-checkin
4
+ - **Decision**: 幂等通过数据库唯一约束实现,而非 Redis 计数
5
+ - **Reason**: 降低一致性风险,数据库作为单一事实来源
6
+ - **Risk**: 高并发写入压力;需关注索引与事务耗时
7
+ - **Alternatives**: Redis 分布式锁(性能优但一致性弱)
8
+ - **Spec**: @spec-canon/changes/feat-xxx-checkin/03_implementation.md
9
+
10
+ ## 2026-02-20 feat-yyy-points
11
+ ...
@@ -0,0 +1,66 @@
1
+ ## SDD 工作流协议
2
+
3
+ ### 角色定义
4
+ 你是一名遵循 Spec-Driven Development 协议的高级工程师。
5
+ 核心原则:**先文档后代码,人做判断题,AI 做填空题。**
6
+
7
+ ### 核心规则
8
+ - **Context First**:编码前,必须先阅读 `spec-canon/` 下对应的 Spec 文件
9
+ - **No Hallucination**:如果用户请求与 Spec 矛盾,立即停止并要求澄清
10
+ - **Trim to Fit**:根据任务规模裁剪文档集(见下方裁剪表),不为小任务生成全套文档
11
+ - **Update Loop**:如果修改了代码逻辑,必须同步提议更新对应的 Spec 文件
12
+ - **Gate Enforcement**:每个编码步骤完成后,运行该步骤的验证命令(编译/测试),不通过则不进入下一步
13
+
14
+ ### 文档体系
15
+
16
+ | 层级 | 文件 | 生命周期 | 职责 |
17
+ |---|---|---|---|
18
+ | 系统级 | `spec-canon/domains/README.md` | 持续更新 | 域间关系全景 |
19
+ | 系统级 | `spec-canon/domains/<domain>/domain_spec.md` | 持续累积 | 系统当前行为(Canon) |
20
+ | Change 级 | `spec-canon/changes/<change>/00~04` | 单次生命周期 | 本次变更做了什么 |
21
+ | 项目级 | `spec-canon/decisions/AI_CHANGELOG.md` | 持续累积 | 技术决策留痕 |
22
+ | 项目级 | `spec-canon/skills/SKILL.md` | 持续累积 | 团队规则库(开始任务前先阅读) |
23
+
24
+ Change Spec 生成顺序(后者依赖前者作为上下文):
25
+ `00_context → 01_requirement → 02_interface → 03_implementation → 04_test_spec`
26
+
27
+ 变更类型包括 feat/fix/refactor/perf/chore/ci/docs/style/test,不同类型按需裁剪文档集。
28
+
29
+ ### 任务规模裁剪
30
+
31
+ | 任务规模 | 最小文档集 | 归档回填 |
32
+ |---|---|---|
33
+ | 小 Bugfix | 仅 `AI_CHANGELOG`(追加一条) | 不回填 |
34
+ | 小需求 | `01_requirement`(精简版)+ `AI_CHANGELOG` | 仅回填新增接口/规则 |
35
+ | 中等需求 | `01` + `02_interface` + `AI_CHANGELOG` | 回填接口 + 业务规则 |
36
+ | 复杂需求 | 完整 `00`→`01`→`02`→`03`→`04` + `AI_CHANGELOG` | 完整回填 + 检查跨域依赖 |
37
+
38
+ 裁剪原则:`00_context` 的必要性取决于 AI 是否需要理解系统现状;归档回填的必要性取决于是否产生系统级变更(新接口/新规则/数据模型变更)。
39
+
40
+ ### 日常工作流
41
+
42
+ 复杂需求的完整流程(小任务按裁剪表跳过前置步骤,但始终执行 Review):
43
+
44
+ | 步骤 | 提示词 ID | 产出 | 人工审阅点 |
45
+ |---|---|---|---|
46
+ | Step 0 | `ctx`(`-d` 或 `-m`) | `00_context.md` | 补充技术约束和团队经验 |
47
+ | Step 1 | `req` | `01_requirement.md` | 审阅验收标准,Sign-off |
48
+ | Step 2 | `iface` → `impl-spec` → `test-spec` | `02` / `03` / `04` | 审阅接口设计、文件路径、步骤顺序 |
49
+ | Step 3 | `impl` | 分步编码 | 逐步确认,Gate 验证 |
50
+ | Step 4 | `review` | 审查 + `AI_CHANGELOG` | 最终确认 |
51
+ | Step 5 | `domain-sync` | 回填 domain_spec + 更新域间关系 | 审阅草稿后写入 |
52
+
53
+ domain_spec 生命周期:变更启动时从 domain_spec 读取现状生成 `00_context`;变更完成时通过 `domain-sync` 将关键信息回填。
54
+
55
+ ### CLI 工具
56
+
57
+ 项目已配置 `spec-canon` CLI,可获取各步骤的标准提示词:
58
+
59
+ ```bash
60
+ spec-canon prompt guide # 决策树:根据项目阶段选择提示词序列
61
+ spec-canon prompt list # 列出所有可用提示词
62
+ spec-canon prompt show <id> [选项] # 输出指定提示词(自动替换变量)
63
+ # 示例: spec-canon prompt show req -c my-change -p @docs/prd.md
64
+ ```
65
+
66
+ 变量选项:`-c` 变更名 / `-d` 域名 / `-m` 模块路径 / `-p` PRD 引用。
@@ -0,0 +1,38 @@
1
+ # Domain Spec: [业务域名称]
2
+ > 最后更新: YYYY-MM-DD | 更新来源: change-xxx
3
+ > 本文档描述 [业务域] 的系统当前行为,由各变更归档时回填更新。
4
+
5
+ ## 1. 业务规则(Business Rules)
6
+ - BR-1: [规则描述]
7
+ (来源: feat-001 AC-1)
8
+ - BR-2: [规则描述]
9
+ (来源: feat-002 AC-1~AC-3)
10
+
11
+ ## 2. 状态流转(State Machine)
12
+ ```mermaid
13
+ stateDiagram-v2
14
+ [描述当前完整的状态流转]
15
+ ```
16
+ (来源: feat-001 03§5 + feat-002 03§5)
17
+
18
+ ## 3. 数据流转(Data Flow)
19
+ ```
20
+ [描述当前完整的数据流经路径]
21
+ ```
22
+ (来源: feat-001 03§5,feat-002 更新)
23
+
24
+ ## 4. 接口清单(API Surface)
25
+ | 接口 | 方法 | 用途 | 引入版本 |
26
+ |---|---|---|---|
27
+ | `/api/v1/xxx` | POST | [用途] | feat-001 |
28
+ | `/api/v1/yyy` | GET | [用途] | feat-002 |
29
+ (详细契约见各变更的 02_interface.md)
30
+
31
+ ## 5. 数据模型(Data Model)
32
+ | 表 | 关键字段 | 索引 | 引入/变更来源 |
33
+ |---|---|---|---|
34
+ | `table_a` | col1, col2, col3 | UK(col1, col2) | feat-001 创建, feat-002 追加 col3 |
35
+
36
+ ## 6. 已知约束与坑位(Known Constraints)
37
+ - [约束/坑位描述]
38
+ (来源: feat-001 开发过程 / SKILL.md)
@@ -0,0 +1,21 @@
1
+ # 域全景(Domain Overview)
2
+
3
+ > 本文档描述项目各业务域及其关联关系。随着变更的开发和归档持续更新。
4
+
5
+ ## 域清单
6
+
7
+ | 域名 | 职责 | domain_spec |
8
+ |---|---|---|
9
+ | <!-- 在此添加业务域 --> | | |
10
+
11
+ ## 域间关系
12
+
13
+ ```
14
+ <!-- 用 ASCII 或 Mermaid 描述域间依赖关系 -->
15
+ ```
16
+
17
+ ## 更新记录
18
+
19
+ | 日期 | 变更 | 来源 |
20
+ |---|---|---|
21
+ | <!-- 记录每次域结构变更 --> | | |
@@ -0,0 +1,139 @@
1
+ {
2
+ "prompts": [
3
+ {
4
+ "id": "ctx",
5
+ "aliases": ["00"],
6
+ "name": "生成 00_context",
7
+ "file": "daily/step0_context.md",
8
+ "stage": "daily",
9
+ "step": "0",
10
+ "description": "生成 00_context.md(-d 从 domain_spec / -m 从代码库)",
11
+ "variables": ["CHANGE"],
12
+ "tags": ["daily", "iterative"]
13
+ },
14
+ {
15
+ "id": "req",
16
+ "aliases": ["01"],
17
+ "name": "生成 01_requirement",
18
+ "file": "daily/step1_requirement.md",
19
+ "stage": "daily",
20
+ "step": "1",
21
+ "description": "生成需求规格,含影响分析",
22
+ "variables": ["CHANGE", "PRD"],
23
+ "tags": ["daily", "new-project", "iterative"]
24
+ },
25
+ {
26
+ "id": "iface",
27
+ "aliases": ["02"],
28
+ "name": "生成 02_interface",
29
+ "file": "daily/step2_interface.md",
30
+ "stage": "daily",
31
+ "step": "2",
32
+ "description": "生成接口设计文档",
33
+ "variables": ["CHANGE"],
34
+ "tags": ["daily", "new-project", "iterative"]
35
+ },
36
+ {
37
+ "id": "impl-spec",
38
+ "aliases": ["03"],
39
+ "name": "生成 03_implementation",
40
+ "file": "daily/step2_implementation.md",
41
+ "stage": "daily",
42
+ "step": "2",
43
+ "description": "生成实施方案,含设计决策",
44
+ "variables": ["CHANGE"],
45
+ "tags": ["daily", "new-project", "iterative"]
46
+ },
47
+ {
48
+ "id": "test-spec",
49
+ "aliases": ["04"],
50
+ "name": "生成 04_test_spec",
51
+ "file": "daily/step2_test_spec.md",
52
+ "stage": "daily",
53
+ "step": "2",
54
+ "description": "生成测试规格",
55
+ "variables": ["CHANGE"],
56
+ "tags": ["daily", "new-project", "iterative"]
57
+ },
58
+ {
59
+ "id": "impl",
60
+ "name": "分步编码",
61
+ "file": "daily/step3_execute.md",
62
+ "stage": "daily",
63
+ "step": "3",
64
+ "description": "按 implementation 文档分步执行编码",
65
+ "variables": ["CHANGE"],
66
+ "tags": ["daily", "new-project", "iterative"]
67
+ },
68
+ {
69
+ "id": "review",
70
+ "name": "审查 + AI_CHANGELOG",
71
+ "file": "daily/step4_review.md",
72
+ "stage": "daily",
73
+ "step": "4",
74
+ "description": "基于 Spec 审查代码变更并更新变更日志",
75
+ "variables": ["CHANGE"],
76
+ "tags": ["daily", "new-project", "iterative"]
77
+ },
78
+ {
79
+ "id": "domain-sync",
80
+ "name": "归档:domain_spec + 域间关系",
81
+ "file": "daily/domain_sync.md",
82
+ "stage": "daily",
83
+ "step": "5",
84
+ "description": "创建/更新 domain_spec 并检查跨域依赖",
85
+ "variables": ["CHANGE", "DOMAIN"],
86
+ "tags": ["daily", "new-project", "iterative"]
87
+ },
88
+ {
89
+ "id": "domain-identify",
90
+ "name": "识别业务域 + 评估拆分",
91
+ "file": "iterative/cold_batch_identify.md",
92
+ "stage": "iterative",
93
+ "step": "B-1",
94
+ "description": "扫描代码库识别业务域并评估子域分拆",
95
+ "variables": [],
96
+ "tags": ["iterative"]
97
+ },
98
+ {
99
+ "id": "domain-setup",
100
+ "name": "创建目录结构 + 索引",
101
+ "file": "iterative/cold_batch_structure.md",
102
+ "stage": "iterative",
103
+ "step": "B-2",
104
+ "description": "批量创建域目录和域间关系索引",
105
+ "variables": [],
106
+ "tags": ["iterative"]
107
+ },
108
+ {
109
+ "id": "domain-base",
110
+ "name": "生成基线 domain_spec",
111
+ "file": "iterative/cold_batch_baseline.md",
112
+ "stage": "iterative",
113
+ "step": "B-3",
114
+ "description": "逐域生成基线版 domain_spec",
115
+ "variables": ["DOMAIN"],
116
+ "tags": ["iterative"]
117
+ },
118
+ {
119
+ "id": "domain-split",
120
+ "name": "单域拆分评估",
121
+ "file": "iterative/split_evaluate.md",
122
+ "stage": "iterative",
123
+ "step": "split",
124
+ "description": "评估单个业务域是否需要拆分为子域",
125
+ "variables": ["DOMAIN"],
126
+ "tags": ["iterative", "daily"]
127
+ },
128
+ {
129
+ "id": "domain-split-run",
130
+ "name": "执行已确认的拆分方案",
131
+ "file": "iterative/split_execute.md",
132
+ "stage": "iterative",
133
+ "step": "split",
134
+ "description": "执行经人工确认的域拆分操作",
135
+ "variables": ["DOMAIN"],
136
+ "tags": ["iterative", "daily"]
137
+ }
138
+ ]
139
+ }
@@ -0,0 +1,48 @@
1
+ 请检查 spec-canon/domains/{{DOMAIN}}/domain_spec.md 是否已存在,然后按以下分支执行:
2
+
3
+ ## 分支判断
4
+
5
+ ### 如果 domain_spec.md 已存在 → UPDATE 模式
6
+
7
+ 请阅读 @spec-canon/changes/{{CHANGE}}/ 下的全部 Spec 文档(00_context ~ 04_test_spec),
8
+ 将关键信息回填到 @spec-canon/domains/{{DOMAIN}}/domain_spec.md。
9
+ 要求:
10
+ 1. 新增/变更的业务规则 → §1,标注来源变更编号
11
+ 2. 状态机变化 → §2
12
+ 3. 数据流变化 → §3
13
+ 4. 新增接口 → §4
14
+ 5. 数据模型变更 → §5
15
+ 6. 新坑位 → §6 + 同步到 SKILL.md
16
+ 7. 00_context.md 中有而 domain_spec 中没有的信息 → 补充
17
+ 请先输出回填草稿,等我审阅。
18
+
19
+ ### 如果 domain_spec.md 不存在 → CREATE 模式
20
+
21
+ 请检查代码库中是否有 {{DOMAIN}} 相关的模块或代码:
22
+
23
+ **如果有相关代码** → 扫描代码库创建:
24
+ 请阅读 @spec-canon/changes/{{CHANGE}}/ 下的全部 Spec 文档(00_context ~ 04_test_spec),
25
+ 同时扫描代码库中与 {{DOMAIN}} 相关的全部模块,
26
+ 按照 @spec-canon/templates/domain_spec.md 模板,
27
+ 创建 spec-canon/domains/{{DOMAIN}}/domain_spec.md。要求:
28
+ 1. 不只是本次变更涉及的内容——要覆盖该业务域的全部现有行为
29
+ 2. 本次变更的 Spec 作为主要信息源,代码库扫描作为补充
30
+ 3. 标注信息来源:[Change Spec] 或 [代码库扫描]
31
+ 4. 标注置信度:✅ 确定 / ⚠️ 推测 / ❓ 需确认
32
+ 5. 评估是否需要子域分拆(按子域分拆规则:B/C/D 任一满足即建议拆分,E 可否决拆分,A 仅为预警)
33
+
34
+ **如果没有相关代码** → 仅从 Change Spec 创建:
35
+ 请阅读 @spec-canon/changes/{{CHANGE}}/ 下的全部 Spec 文档,
36
+ 按照 @spec-canon/templates/domain_spec.md 模板,
37
+ 创建 spec-canon/domains/{{DOMAIN}}/domain_spec.md。
38
+ 这是该领域的首份 domain_spec,请完整录入所有信息。
39
+
40
+ ---
41
+
42
+ ## 跨域依赖检查
43
+
44
+ 无论上面执行了哪个分支,都请执行以下检查:
45
+
46
+ 请对比本次 @spec-canon/changes/{{CHANGE}}/ 的 00_context.md §2.4 依赖服务
47
+ 和 @spec-canon/domains/README.md 中的域间依赖明细,
48
+ 检查是否有新增的跨域依赖。如果有,输出 README.md 更新草稿。
@@ -0,0 +1,21 @@
1
+ {{#if DOMAIN}}
2
+ 请先阅读 @spec-canon/domains/README.md 的域间依赖关系,
3
+ 识别与 {{DOMAIN}} 相关的所有上下游域。
4
+ 然后阅读 @spec-canon/domains/{{DOMAIN}}/domain_spec.md
5
+ 以及相关上下游域的 domain_spec.md,
6
+ {{/if}}
7
+ {{#if MODULE}}
8
+ 请分析代码库中与 {{MODULE}} 相关的代码,
9
+ {{/if}}
10
+ 按照 @spec-canon/templates/00_context.md 模板,
11
+ 生成 spec-canon/features/{{FEATURE}}/00_context.md。
12
+ {{#if DOMAIN}}
13
+ 1. 基础信息从 domain_spec 提取
14
+ 2. §2.4 依赖服务须包含 README.md 中标注的跨域业务依赖
15
+ 3. 补充本 Feature 特有的约束
16
+ 4. 检查 domain_spec 是否有过时信息
17
+ 5. 标注需要我补充的信息
18
+ {{/if}}
19
+ {{#if MODULE}}
20
+ 标注无法确定的信息,等我补充。
21
+ {{/if}}
@@ -0,0 +1,4 @@
1
+ 请分析代码库中与 {{MODULE}} 相关的代码,
2
+ 按照 @spec-canon/templates/00_context.md 模板,
3
+ 生成 spec-canon/features/{{FEATURE}}/00_context.md。
4
+ 标注无法确定的信息,等我补充。
@@ -0,0 +1,11 @@
1
+ 请先阅读 @spec-canon/domains/README.md 的域间依赖关系,
2
+ 识别与 {{DOMAIN}} 相关的所有上下游域。
3
+ 然后阅读 @spec-canon/domains/{{DOMAIN}}/domain_spec.md
4
+ 以及相关上下游域的 domain_spec.md,
5
+ 按照 @spec-canon/templates/00_context.md 模板,
6
+ 生成 spec-canon/features/{{FEATURE}}/00_context.md。
7
+ 1. 基础信息从 domain_spec 提取
8
+ 2. §2.4 依赖服务须包含 README.md 中标注的跨域业务依赖
9
+ 3. 补充本 Feature 特有的约束
10
+ 4. 检查 domain_spec 是否有过时信息
11
+ 5. 标注需要我补充的信息
@@ -0,0 +1,21 @@
1
+ {{#if DOMAIN}}
2
+ 请先阅读 @spec-canon/domains/README.md 的域间依赖关系,
3
+ 识别与 {{DOMAIN}} 相关的所有上下游域。
4
+ 然后阅读 @spec-canon/domains/{{DOMAIN}}/domain_spec.md
5
+ 以及相关上下游域的 domain_spec.md,
6
+ {{/if}}
7
+ {{#if MODULE}}
8
+ 请分析代码库中与 {{MODULE}} 相关的代码,
9
+ {{/if}}
10
+ 按照 @spec-canon/templates/00_context.md 模板,
11
+ 生成 spec-canon/changes/{{CHANGE}}/00_context.md。
12
+ {{#if DOMAIN}}
13
+ 1. 基础信息从 domain_spec 提取
14
+ 2. §2.4 依赖服务须包含 README.md 中标注的跨域业务依赖
15
+ 3. 补充本次变更特有的约束
16
+ 4. 检查 domain_spec 是否有过时信息
17
+ 5. 标注需要我补充的信息
18
+ {{/if}}
19
+ {{#if MODULE}}
20
+ 标注无法确定的信息,等我补充。
21
+ {{/if}}
@@ -0,0 +1,2 @@
1
+ 请阅读 @CLAUDE.md 和 @spec-canon/skills/SKILL.md,确认你理解了项目约束和 SDD 工作流。
2
+ 简要复述关键规则。