spec-manager 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 (159) hide show
  1. package/AGENTS.md +27 -0
  2. package/CODEBUDDY.md +19 -0
  3. package/LICENSE +21 -0
  4. package/README.md +531 -0
  5. package/dist/cli/audit.d.ts +10 -0
  6. package/dist/cli/audit.d.ts.map +1 -0
  7. package/dist/cli/audit.js +62 -0
  8. package/dist/cli/audit.js.map +1 -0
  9. package/dist/cli/change.d.ts +10 -0
  10. package/dist/cli/change.d.ts.map +1 -0
  11. package/dist/cli/change.js +103 -0
  12. package/dist/cli/change.js.map +1 -0
  13. package/dist/cli/common.d.ts +5 -0
  14. package/dist/cli/common.d.ts.map +1 -0
  15. package/dist/cli/common.js +17 -0
  16. package/dist/cli/common.js.map +1 -0
  17. package/dist/cli/decision.d.ts +13 -0
  18. package/dist/cli/decision.d.ts.map +1 -0
  19. package/dist/cli/decision.js +185 -0
  20. package/dist/cli/decision.js.map +1 -0
  21. package/dist/cli/dict.d.ts +10 -0
  22. package/dist/cli/dict.d.ts.map +1 -0
  23. package/dist/cli/dict.js +73 -0
  24. package/dist/cli/dict.js.map +1 -0
  25. package/dist/cli/incident.d.ts +10 -0
  26. package/dist/cli/incident.d.ts.map +1 -0
  27. package/dist/cli/incident.js +119 -0
  28. package/dist/cli/incident.js.map +1 -0
  29. package/dist/cli/index.d.ts +3 -0
  30. package/dist/cli/index.d.ts.map +1 -0
  31. package/dist/cli/index.js +30 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/cli/project.d.ts +3 -0
  34. package/dist/cli/project.d.ts.map +1 -0
  35. package/dist/cli/project.js +144 -0
  36. package/dist/cli/project.js.map +1 -0
  37. package/dist/cli/spec.d.ts +3 -0
  38. package/dist/cli/spec.d.ts.map +1 -0
  39. package/dist/cli/spec.js +289 -0
  40. package/dist/cli/spec.js.map +1 -0
  41. package/dist/cli/task.d.ts +14 -0
  42. package/dist/cli/task.d.ts.map +1 -0
  43. package/dist/cli/task.js +287 -0
  44. package/dist/cli/task.js.map +1 -0
  45. package/dist/cli/usability.d.ts +3 -0
  46. package/dist/cli/usability.d.ts.map +1 -0
  47. package/dist/cli/usability.js +153 -0
  48. package/dist/cli/usability.js.map +1 -0
  49. package/dist/core/agents.d.ts +43 -0
  50. package/dist/core/agents.d.ts.map +1 -0
  51. package/dist/core/agents.js +194 -0
  52. package/dist/core/agents.js.map +1 -0
  53. package/dist/core/archive.d.ts +35 -0
  54. package/dist/core/archive.d.ts.map +1 -0
  55. package/dist/core/archive.js +360 -0
  56. package/dist/core/archive.js.map +1 -0
  57. package/dist/core/audit-events.d.ts +12 -0
  58. package/dist/core/audit-events.d.ts.map +1 -0
  59. package/dist/core/audit-events.js +16 -0
  60. package/dist/core/audit-events.js.map +1 -0
  61. package/dist/core/audit.d.ts +78 -0
  62. package/dist/core/audit.d.ts.map +1 -0
  63. package/dist/core/audit.js +157 -0
  64. package/dist/core/audit.js.map +1 -0
  65. package/dist/core/constants.d.ts +28 -0
  66. package/dist/core/constants.d.ts.map +1 -0
  67. package/dist/core/constants.js +30 -0
  68. package/dist/core/constants.js.map +1 -0
  69. package/dist/core/decision.d.ts +69 -0
  70. package/dist/core/decision.d.ts.map +1 -0
  71. package/dist/core/decision.js +210 -0
  72. package/dist/core/decision.js.map +1 -0
  73. package/dist/core/delta.d.ts +85 -0
  74. package/dist/core/delta.d.ts.map +1 -0
  75. package/dist/core/delta.js +264 -0
  76. package/dist/core/delta.js.map +1 -0
  77. package/dist/core/dict.d.ts +28 -0
  78. package/dist/core/dict.d.ts.map +1 -0
  79. package/dist/core/dict.js +57 -0
  80. package/dist/core/dict.js.map +1 -0
  81. package/dist/core/frontmatter.d.ts +19 -0
  82. package/dist/core/frontmatter.d.ts.map +1 -0
  83. package/dist/core/frontmatter.js +57 -0
  84. package/dist/core/frontmatter.js.map +1 -0
  85. package/dist/core/incident.d.ts +45 -0
  86. package/dist/core/incident.d.ts.map +1 -0
  87. package/dist/core/incident.js +128 -0
  88. package/dist/core/incident.js.map +1 -0
  89. package/dist/core/paths.d.ts +68 -0
  90. package/dist/core/paths.d.ts.map +1 -0
  91. package/dist/core/paths.js +162 -0
  92. package/dist/core/paths.js.map +1 -0
  93. package/dist/core/repository.d.ts +13 -0
  94. package/dist/core/repository.d.ts.map +1 -0
  95. package/dist/core/repository.js +29 -0
  96. package/dist/core/repository.js.map +1 -0
  97. package/dist/core/spec-io.d.ts +125 -0
  98. package/dist/core/spec-io.d.ts.map +1 -0
  99. package/dist/core/spec-io.js +260 -0
  100. package/dist/core/spec-io.js.map +1 -0
  101. package/dist/core/status.d.ts +22 -0
  102. package/dist/core/status.d.ts.map +1 -0
  103. package/dist/core/status.js +54 -0
  104. package/dist/core/status.js.map +1 -0
  105. package/dist/core/task.d.ts +118 -0
  106. package/dist/core/task.d.ts.map +1 -0
  107. package/dist/core/task.js +340 -0
  108. package/dist/core/task.js.map +1 -0
  109. package/dist/core/usability.d.ts +25 -0
  110. package/dist/core/usability.d.ts.map +1 -0
  111. package/dist/core/usability.js +136 -0
  112. package/dist/core/usability.js.map +1 -0
  113. package/dist/core/validate.d.ts +34 -0
  114. package/dist/core/validate.d.ts.map +1 -0
  115. package/dist/core/validate.js +195 -0
  116. package/dist/core/validate.js.map +1 -0
  117. package/dist/index.d.ts +11 -0
  118. package/dist/index.d.ts.map +1 -0
  119. package/dist/index.js +12 -0
  120. package/dist/index.js.map +1 -0
  121. package/dist/schemas/change.d.ts +138 -0
  122. package/dist/schemas/change.d.ts.map +1 -0
  123. package/dist/schemas/change.js +38 -0
  124. package/dist/schemas/change.js.map +1 -0
  125. package/dist/schemas/spec.d.ts +233 -0
  126. package/dist/schemas/spec.d.ts.map +1 -0
  127. package/dist/schemas/spec.js +56 -0
  128. package/dist/schemas/spec.js.map +1 -0
  129. package/package.json +66 -0
  130. package/rules/_TEMPLATE.md +20 -0
  131. package/rules/code-discipline.md +47 -0
  132. package/rules/codebase-survey.md +37 -0
  133. package/rules/delta.md +42 -0
  134. package/rules/doc-governance.md +195 -0
  135. package/rules/flow-control.md +65 -0
  136. package/rules/quality-gate.md +73 -0
  137. package/skill/SKILL.md +90 -0
  138. package/skill/subskills/adr.md +73 -0
  139. package/skill/subskills/change.md +118 -0
  140. package/skill/subskills/design.md +53 -0
  141. package/skill/subskills/impl.md +100 -0
  142. package/skill/subskills/plan.md +46 -0
  143. package/skill/subskills/postmortem.md +77 -0
  144. package/skill/subskills/prd.md +72 -0
  145. package/skill/subskills/quick.md +25 -0
  146. package/skill/subskills/release.md +50 -0
  147. package/skill/subskills/research.md +35 -0
  148. package/skill/subskills/runbook.md +44 -0
  149. package/skill/subskills/testplan.md +48 -0
  150. package/templates/L0-prd.md +43 -0
  151. package/templates/L1-prd.md +130 -0
  152. package/templates/L2-design.md +135 -0
  153. package/templates/L3-impl.md +125 -0
  154. package/templates/agent-plan.json +17 -0
  155. package/templates/agents/AGENTS.md +27 -0
  156. package/templates/agents/CLAUDE.md +11 -0
  157. package/templates/agents/CODEBUDDY.md +23 -0
  158. package/templates/agents/codebuddy-skill/SKILL.md +46 -0
  159. package/templates/decision.md +42 -0
@@ -0,0 +1,50 @@
1
+ # Release 子 skill — 发布说明 / changelog
2
+
3
+ ## 用途
4
+
5
+ 为每个版本写 release notes(`releases/vX.Y.Z-release.md`):
6
+ - 用户可见的变更
7
+ - 关联的 L1/L2/L3 spec
8
+ - 回滚说明
9
+
10
+ ## 流程
11
+
12
+ 1. 列出当前活跃 L1/L2/L3
13
+
14
+ ```bash
15
+ spec-manager spec list --status implemented
16
+ spec-manager change list
17
+ ```
18
+
19
+ 2. 选本次发布的 spec 范围(按 milestone 过滤)
20
+
21
+ 3. 写 release notes:
22
+
23
+ ```bash
24
+ mkdir -p releases
25
+ cat > releases/v1.2.0-release.md <<'EOF'
26
+ # v1.2.0 — <主题>
27
+
28
+ ## 新增
29
+ - 2FA 强制登录(2026-06-04-a1b2c3 MODIFIED)
30
+
31
+ ## 修复
32
+ - JWT 过期返回 401 而非 500(2026-06-04-c3d4e5 bugfix)
33
+
34
+ ## 变更
35
+ - 数据库 schema: users 表加 mfa_secret 字段(migration 2026_05_11)
36
+
37
+ ## 回滚
38
+ - 关闭 2FA 强制开关(`AUTH_REQUIRE_2FA=false`)
39
+ - DB 回滚:down migration
40
+
41
+ ## 关联决策
42
+ - DC-002:改用 PASETO(影响 AC-1)
43
+ EOF
44
+ ```
45
+
46
+ 4. 同步到 git tag + GitHub release(如需)
47
+
48
+ ## 关联规则
49
+
50
+ - 关联到 R14 跨层引用用 code 不是复述
@@ -0,0 +1,35 @@
1
+ # Sub-skill: Research(只读)
2
+
3
+ > 🛑 **硬红线**:本 skill 全程**只读**。如果用户意图是改文档/建 spec/写代码,必须先切到 prd/design/impl/quick 等子 skill。
4
+ > 以下工具/子命令**严禁**调用:
5
+ >
6
+ > | 类别 | 禁用的 CLI 子命令 |
7
+ > |---|---|
8
+ > | 写 spec | `spec new` / `spec update` / `spec confirm` / `spec freeze` / `spec implement` / `spec add-relation` / `spec delete` |
9
+ > | 写决策 | `decision create` / `decision update` / `decision set-partial` / `decision supersede` / `decision delete` |
10
+ > | 写 task | `task create` / `task start` / `task step` / `task complete` / `task fail` / `task wait` |
11
+ > | 写 change | `change new` / `change archive` |
12
+ > | 写 incident | `incident new` / `incident update` |
13
+ > | 写 audit | `audit hit` / `audit report` / `audit session` |
14
+ > | 项目级写 | `project init` / `dict register` |
15
+ >
16
+ > 若用户要"查完后顺手改一下",**先停下来切到对应写 skill**,不要在本 skill 里偷偷调 write 子命令。
17
+
18
+ ## 路由自检
19
+
20
+ ✓ 走本 skill 的信号:用户说"查 / 看 / 列 / 统计 / 了解 / 搜索 X"
21
+ ✗ 不走的信号:用户说"新功能"(→ prd.md)等任何意图要改文档
22
+
23
+ ## 流程
24
+
25
+ 1. **仅用只读命令**:
26
+ ```bash
27
+ spec-manager spec list [--level L1] [--topic X] [--status draft]
28
+ spec-manager spec show <code> # 默认 narrow 视图(R19)
29
+ spec-manager spec show <code> --include-content # 仅当 aiSummary 不够时
30
+ spec-manager decision list --topic X
31
+ spec-manager project status
32
+ spec-manager audit show [--rule R1]
33
+ ```
34
+ 2. **禁止**:任何 `new` / `update` / `confirm` / `freeze` / `implement` / `add-relation` / `delete`
35
+ 3. **R19 优先**:默认读 aiSummary 而非全文
@@ -0,0 +1,44 @@
1
+ # Runbook 子 skill — 运维手册 / oncall 应急
2
+
3
+ ## 用途
4
+
5
+ 长期档案,存放 oncall 应急手册、部署手册、故障排查清单。
6
+
7
+ ## 流程
8
+
9
+ 1. 新建 runbook:
10
+
11
+ ```bash
12
+ mkdir -p runbooks
13
+ cat > runbooks/auth-service-down.md <<'EOF'
14
+ # Auth Service 宕机应急
15
+
16
+ ## 现象
17
+ - 监控:auth-service 5xx 比例 > 50% 持续 5 分钟
18
+ - 用户:登录按钮转圈无响应
19
+
20
+ ## 第一步:止血
21
+ - 查看日志:`docker logs auth-service --tail 200`
22
+ - 重启:`docker compose restart auth-service`
23
+
24
+ ## 第二步:根因
25
+ - 查 PostgreSQL 连接数:`SELECT count(*) FROM pg_stat_activity;`
26
+ - 如果 > 80%:kill 慢查询
27
+ - 如果 JWT secret 轮换:检查 `JWT_SECRET` env 是否同步
28
+
29
+ ## 第三步:回滚
30
+ - 切回上一版本:`docker compose up -d --scale auth-service=0 && git checkout v1.1.0 && docker compose up -d`
31
+
32
+ ## 关联
33
+ - 关联 spec:2026-06-04-a1b2c3
34
+ - 历史 incident:INC-20260513-001
35
+ EOF
36
+ ```
37
+
38
+ 2. 关联到 incident 模板(写 incident 时引用 runbook)
39
+
40
+ 3. 长期维护:每次重大故障后写 incident → 复盘 → 更新 runbook
41
+
42
+ ## 关联规则
43
+
44
+ - 关联到 R18 L1 implemented 后必须建决策卡片(重大运维决策也算)
@@ -0,0 +1,48 @@
1
+ # TestPlan 子 skill — 测试方案
2
+
3
+ ## 用途
4
+
5
+ 为 L3 spec 写"测试方案"(testplan.md):
6
+ - 描述本 L3 实施时需要的测试类型 + 用例
7
+ - 与 plan.md 互补:plan = 时间维度,testplan = 质量维度
8
+
9
+ ## 流程
10
+
11
+ 1. 读 L3 spec + 父 L2
12
+
13
+ ```bash
14
+ spec-manager spec show 2026-06-04-c3d4e5 --include-content
15
+ ```
16
+
17
+ 2. 创建 testplan:
18
+
19
+ ```bash
20
+ # 用 git 直接写,或:
21
+ mkdir -p testplans/auth
22
+ cat > testplans/auth/2026-06-04-c3d4e5-testplan.md <<'EOF'
23
+ # <L3 title> 测试方案
24
+
25
+ ## 单元测试
26
+ - 覆盖函数:
27
+ - signJwt():正常 + 异常(key 缺失 / 过期)
28
+ - verifyJwt():合法 / 过期 / 篡改签名
29
+
30
+ ## 集成测试
31
+ - 登录成功 → 拿到 token → 调 /me 拿到 user
32
+ - token 过期 → 401
33
+ - 篡改 token → 401
34
+
35
+ ## 端到端
36
+ - Playwright:注册 → 登录 → 访问受保护页
37
+
38
+ ## 验证命令
39
+ - pnpm test
40
+ - pnpm test:integration
41
+ EOF
42
+ ```
43
+
44
+ 3. 写完同样用 `spec update --ai-summary` 记一句
45
+
46
+ ## 关联规则
47
+
48
+ - R10 planJson 最后一步必须是验证(testplan 是 plan 的姊妹)
@@ -0,0 +1,43 @@
1
+ <!-- ========== Stage Charter: L0 Vision ==========
2
+ Value: 长期方向档案 — 回答"3-5 年后这个产品要变成什么"
3
+ Time horizon: 极长期(3-5 年,只在大方向变化时更新)
4
+ Target reader: 高层/投资人/产品负责人、未来 AI agent 在评估某 L1 是否符合产品方向时的参照
5
+ Must NOT have:
6
+ - 用户故事 / 验收标准 → 下到 L1
7
+ - 模块 / 接口 / 数据模型 → 下到 L2
8
+ - 实施步骤 / 验证命令 → 下到 L3
9
+ Soft boundary: 路线图按里程碑划分,每个里程碑对应 1-N 个 L1 spec(用 code 引用,不复述)
10
+
11
+ L0 ↔ L1 ↔ L2 ↔ L3 关系:
12
+ L0 = 愿景(1 个项目通常 1 个 L0)
13
+ L1 = 需求(每个 L0 里程碑下挂多个 L1)
14
+ L2 = 设计(每个 L1 下挂多个 L2)
15
+ L3 = 实施(每个 L2 下挂多个 L3)
16
+
17
+ Expert guidelines:
18
+ - 愿景 1-2 段,不要写产品功能清单(那是 L1)
19
+ - 路线图按"里程碑"划分而非"季度",每段 1-2 句话
20
+ - 路线图每阶段必须标 milestone 编号(对齐 schema 的 milestone 字段,如 v1.0/v1.1)
21
+ - 不量化目标(那是 L1 度量指标)
22
+ - L0 改动频率极低,不要在 L0 里写"持续优化"这种不会过时的废话
23
+ ========== -->
24
+
25
+ # {{title}} — 愿景
26
+
27
+ ## 愿景
28
+
29
+ <1-2 段话回答:这个产品/系统 3-5 年后要变成什么?为什么世界需要它?禁止"打造一流/持续优化"等空话。>
30
+
31
+ ## 路线图
32
+
33
+ <按里程碑划分,每段 1-2 句话,标 milestone 编号(v1.0/v1.1/...)。每个 milestone 对应 1-N 个 L1 spec,用 code 引用(写完 L1 后回头补全)>。
34
+
35
+ | 里程碑 | 方向 | L1 关联 |
36
+ |---|---|---|
37
+ | v1.0 | <一句话:这一里程碑的核心交付> | <L1 code, 写完 L1 后填> |
38
+ | v1.1 | <一句话> | - |
39
+ | v2.0 | <一句话> | - |
40
+
41
+ ## 关联
42
+
43
+ <parentCode: 无(L0 是顶层)。若有前序 L0,列 based_on/supersedes 关系。>
@@ -0,0 +1,130 @@
1
+ <!-- ========== Stage Charter: L1 PRD ==========
2
+ Value: 业务档案馆 — 回答"为什么做这个功能"
3
+ Time horizon: 长期(≥1 年,功能下线前都有效)
4
+ Target reader: 产品/业务方、未来 AI agent 在做类似需求时的参照
5
+ Must NOT have:
6
+ - 文件路径 / DDL / planJson / bash 命令 → 下到 L3
7
+ - 具体技术选型 / API 签名 / 函数名 → 下到 L2
8
+ - 实施步骤 / 步骤验证 → 下到 L3
9
+ Soft boundary: 可引用上层 plan/PRD id,不复述(见 rules/doc-governance.md#R14)
10
+
11
+ Expert guidelines:
12
+ - 背景必须有数据/证据支撑(事故次数/耗时/成本),不接受"大家都觉得"式论述
13
+ - 用户故事按 MoSCoW 分级(Must/Should/Could/Won't),Must 3-5 条
14
+ - 验收标准必须可判定(能回答 yes/no),禁止"改善/提升/优化"等模糊词
15
+ - 范围边界的"不做"同等重要,必须列出至少 2 条显式排除
16
+ - 度量指标必须有基线值和目标值,无基线则标注"待测量"
17
+ - 设计原则是给 L2 的约束,每条附带"违反判断标准"
18
+ - 问题归类先于用户故事,确保需求来源可追溯
19
+
20
+ PRE-WRITE INTERACTION (mandatory):
21
+ 在写 L1 正文之前,AI agent 必须先用当前工具的用户提问能力向用户确认以下 3 个问题。
22
+ Q4 历史决策查询(执行于 Q1-Q3 之前): AI agent 必须先调 `spec-manager decision list --topic <topic>`。
23
+ 若存在 active 决策卡片,将决策摘要展示给用户。
24
+ 让用户确认新 L1 是否与历史决策一致或有意覆盖。
25
+ ========== -->
26
+
27
+ # {{title}} — 需求文档
28
+
29
+ ## 背景
30
+
31
+ <痛点/数据/业务动机。说明为什么此刻要做、不做会怎样。必须包含量化证据(事故次数/耗时/成本)。禁止技术方案描述>
32
+
33
+ ## 问题归类
34
+
35
+ <将背景中的问题按根因分类,标注优先级。帮助后续 L2 按类别拆分而非按事件堆砌>
36
+
37
+ | 类别 | 问题描述 | 优先级 | 证据来源 |
38
+ |---|---|---|---|
39
+ | ... | ... | P1/P2/P3 | <incident/数据/用户反馈> |
40
+
41
+ ## 用户故事
42
+
43
+ <As a <角色>, I want <能力>, so that <价值>。按 MoSCoW 分级>
44
+
45
+ ### Must have
46
+
47
+ - As a ..., I want ..., so that ...
48
+
49
+ ### Should have
50
+
51
+ - As a ..., I want ..., so that ...
52
+
53
+ ### Could have
54
+
55
+ - As a ..., I want ..., so that ...
56
+
57
+ ## 功能目标
58
+
59
+ <"能做什么"对比表。现状列必须真实可验证,目标列禁止"更好/更快"等模糊词>
60
+
61
+ | 能力 | 现状(量化) | 目标(量化) |
62
+ |---|---|---|
63
+ | ... | ... | ... |
64
+
65
+ ## 验收标准
66
+
67
+ <用户视角的成功判据。每条必须是 given/when/then 格式,可直接作为测试用例。禁止 grep/curl 等技术手段>
68
+
69
+ > **RFC 2119 关键字指引**: 验收标准中使用以下关键字标注约束级别:
70
+ > - **SHALL** (必须) — 硬性要求,不满足则验收不通过
71
+ > - **MUST** (应当) — 强烈建议,例外需说明理由
72
+ > - **SHOULD** (推荐) — 最佳实践,可酌情调整
73
+ > - **MAY** (可选) — 完全可选
74
+ >
75
+ > 示例: `**AC-1**: **Given** X, **When** Y, **Then** 系统 **SHALL** 返回 Z`
76
+
77
+ 1. **AC-1**: **Given** ..., **When** ..., **Then** ... **SHALL** ...
78
+ 2. **AC-2**: **Given** ..., **When** ..., **Then** ... **MUST** ...
79
+
80
+ ## 度量指标
81
+
82
+ <上线后如何衡量成功。每个指标必须有基线、目标、测量方式>
83
+
84
+ | 指标 | 基线 | 目标 | 测量方式 |
85
+ |---|---|---|---|
86
+ | ... | <当前值/待测量> | ... | <数据源/查询方式> |
87
+
88
+ ## 范围边界
89
+
90
+ - **做**:...
91
+ - **不做**(显式排除,至少 2 条):
92
+ - ...
93
+ - ...
94
+ - **推迟**(后续版本考虑):...
95
+
96
+ ## 设计原则
97
+
98
+ <指导后续 L2 技术决策的约束条件。每条原则附带"违反判断标准">
99
+
100
+ 1. **原则名** — 一句话描述。违反判断:<怎么判断违反了这条原则>
101
+ 2. ...
102
+
103
+ ## 里程碑
104
+
105
+ <按交付阶段划分,每阶段标注核心交付物和前置依赖。无需精确到天>
106
+
107
+ | 阶段 | 交付内容 | 前置依赖 | 优先级 |
108
+ |---|---|---|---|
109
+ | Phase 1 | ... | 无 | P1 |
110
+ | Phase 2 | ... | Phase 1 完成 | P2 |
111
+
112
+ ## 交付物分解
113
+
114
+ <模块/领域粒度的交付物清单。用于预估 L2 个数。禁止文件级。每个交付物标注归属阶段>
115
+
116
+ | 交付物 | 归属阶段 | 预估 L2 个数 |
117
+ |---|---|---|
118
+ | ... | Phase 1 | 1-2 |
119
+
120
+ ## 风险与依赖
121
+
122
+ <业务层面的风险和外部依赖。技术风险下到 L2>
123
+
124
+ | 风险/依赖 | 影响 | 缓解措施 |
125
+ |---|---|---|
126
+ | ... | ... | ... |
127
+
128
+ ## 关联
129
+
130
+ <parentCode: PLAN-xxx-001 的 specCode。若有前序 L1,列 based_on/supersedes 关系。若基于 PRD,标注 PRD 编号>
@@ -0,0 +1,135 @@
1
+ <!-- ========== Stage Charter: L2 Design ==========
2
+ Value: 技术契约 — 回答"用什么方案、改哪些模块、API 长什么样"
3
+ Time horizon: 中期(模块演进前有效)
4
+ Target reader: L3 写作者、代码审核者
5
+ Must NOT have:
6
+ - 业务背景论证 / 用户故事 → 上到 L1
7
+ - 具体文件路径 / 函数签名 / planJson → 下到 L3
8
+ - 实施步骤 / 步骤验证 → 下到 L3
9
+ Soft boundary: 可引用父 L1 code + 一句话定位,不复述(见 rules/doc-governance.md#R14)
10
+
11
+ Expert guidelines:
12
+ - 关键技术决策必须用表格,每行含"用户选定 + 选定理由",不允许空泛叙述
13
+ - 接口契约必须精确到请求/响应/错误码
14
+ - L3 裂变计划按模块边界拆,不是按功能点(R17)
15
+ ========== -->
16
+
17
+ # {{title}} — 技术设计
18
+
19
+ ## 方案概述
20
+
21
+ <一段话 + ASCII 架构图(可选)>
22
+
23
+ ```
24
+ [组件 A] ──HTTP──> [组件 B]
25
+
26
+ └──> [DB]
27
+ ```
28
+
29
+ ## 关键技术决策
30
+
31
+ <关键选型的"问题/选项/选择/理由"表。空选项或"随便选"会被审计拦截>
32
+
33
+ | 问题 | 候选选项 | 用户选择 | 选定理由 |
34
+ |---|---|---|---|
35
+ | ... | A:..., B:... | A | ... |
36
+ | ... | A:..., B:... | B | ... |
37
+
38
+ ## 受影响模块
39
+
40
+ <按模块/目录组织。每行标注变更类型/范围/测试策略>
41
+
42
+ | 模块/路径 | 变更类型 | 范围 | 测试策略 |
43
+ |---|---|---|---|
44
+ | ... | 新增/修改/删除 | 函数级 | 单元/集成 |
45
+
46
+ ## 数据模型
47
+
48
+ <实体/字段/类型/变更/默认值/向后兼容。Schema 变更同步登记到 dict>
49
+
50
+ | 实体 | 字段 | 类型 | 变更 | 默认值 | 向后兼容 |
51
+ |---|---|---|---|---|---|
52
+ | ... | ... | ... | 新增/修改 | ... | 是/否 |
53
+
54
+ ## 接口契约
55
+
56
+ <每个端点: 请求 / 成功响应 / 错误响应表>
57
+
58
+ ### POST /api/example
59
+
60
+ **请求**:
61
+ ```json
62
+ { "field": "value" }
63
+ ```
64
+
65
+ **成功响应 (200)**:
66
+ ```json
67
+ { "id": 123, "status": "ok" }
68
+ ```
69
+
70
+ **错误响应**:
71
+
72
+ | 状态码 | 错误码 | 触发条件 |
73
+ |---|---|---|
74
+ | 400 | INVALID_INPUT | 参数校验失败 |
75
+ | 401 | UNAUTHORIZED | 未登录 |
76
+ | 403 | FORBIDDEN | 权限不足 |
77
+ | 409 | DUPLICATE | 资源已存在 |
78
+
79
+ ## 容错与降级
80
+
81
+ <故障场景/影响/降级策略/恢复>
82
+
83
+ | 场景 | 影响 | 降级策略 | 恢复方式 |
84
+ |---|---|---|---|
85
+ | 依赖 X 不可用 | ... | ... | ... |
86
+
87
+ ## 向后兼容
88
+
89
+ <API/数据/迁移计划>
90
+
91
+ - **API**: ...
92
+ - **数据**: ...
93
+ - **迁移**: ...
94
+
95
+ ## 关键交互流程
96
+
97
+ <时序图(可选 ASCII)+ 异常分支>
98
+
99
+ ```
100
+ 用户 → API → Service → DB
101
+ │ │ │ │
102
+ │ │ │ └─ 写记录
103
+ │ │ └─ 计算 X
104
+ │ └─ 返回 200
105
+ └─ 收到响应
106
+ ```
107
+
108
+ ## 可观测性
109
+
110
+ <日志/指标/告警>
111
+
112
+ - **日志**: ...
113
+ - **指标**: ...
114
+ - **告警**: ...
115
+
116
+ ## 复用清单
117
+
118
+ <必须引用具体文件路径和类/函数名,不允许"用现有的 X"这种泛化>
119
+
120
+ | 工具类/基类 | 路径 | 类/函数 | 用途 |
121
+ |---|---|---|---|
122
+ | ... | src/.../X.java | Y | ... |
123
+
124
+ ## L3 裂变计划
125
+
126
+ <本 L2 拆成几个 L3 执行,按模块边界而非功能点。R17: 1:1 或 1:2>
127
+
128
+ | L3 code | 范围 | 前置依赖 |
129
+ |---|---|---|
130
+ | 2026-06-06-c3d4e5 | ... | 无 |
131
+ | 2026-06-07-d4e5f6 | ... | 2026-06-06-c3d4e5 implemented |
132
+
133
+ ## 关联
134
+
135
+ <引用父 L1 的 code + 一句话定位,不展开复述>
@@ -0,0 +1,125 @@
1
+ <!-- ========== Stage Charter: L3 Impl ==========
2
+ Value: 执行日志 — 回答"具体改哪些文件/函数,怎么验证"
3
+ Time horizon: 短期(实施完成即沉淀,后续仅供审计)
4
+ Target reader: Agent Task 执行者(AI agent)、代码审核者
5
+ Must NOT have:
6
+ - 业务背景论证 / 用户故事 → 上到 L1
7
+ - 架构选型对比 / 多方案比较 → 上到 L2
8
+ - 成功标准(用户视角) → 上到 L1
9
+ - 重复方案概述 → 引用 L2 code 即可
10
+ Soft boundary: 可引用父 L2 code + 一句话定位,不复述(见 rules/doc-governance.md#R14)
11
+
12
+ Expert guidelines:
13
+ - 每步实施必须精确到函数/方法级别,禁止"修改相关代码"等模糊表述
14
+ - planJson 字段名必须从 templates/agent-plan.json 读取,禁止凭记忆(R12/INC-005)
15
+ - step_report 每步必须携带 outputJson(R15),格式见下方模板
16
+ - coveredSpecs: 若本 Task 实际覆盖多条 L3,必须在 planJson 中声明
17
+ - 验证命令必须可直接粘贴执行,含预期输出的精确匹配串
18
+ - 回滚方案不是可选项,每个 L3 必须说明"改坏了怎么恢复"
19
+ - 写 L3 前必须执行 Level 3 文件级分析(R23,见 rules/codebase-survey.md)
20
+ - 注: optimization-L1 P0 — 本模板不再含"变更文件清单"表格,文件变更由 git 管理
21
+ ========== -->
22
+
23
+ # {{title}} — 实施规格
24
+
25
+ ## 目标
26
+
27
+ <一句话 + 引用父 L2 的 deliverable 编号。形如"实施 2026-06-05-b2c3d4 的 deliverables 1/2/3">
28
+
29
+ **前置依赖**:<前序 L3 specCode 已 implemented 声明,若无则"无">
30
+
31
+ ## 实施步骤
32
+
33
+ > **RFC 2119 关键字指引**: 实施步骤中使用以下关键字标注约束级别:
34
+ > - **SHALL** (必须) — 硬性要求,不执行则任务不可完成
35
+ > - **MUST** (应当) — 强烈建议,例外需说明理由
36
+ > - **SHOULD** (推荐) — 最佳实践,可酌情调整
37
+ > - **MAY** (可选) — 完全可选
38
+
39
+ ### Step 1 — 上下文收集
40
+
41
+ - `spec-manager spec show <本 L3 code> --include-content` + `spec-manager spec show <父 L2 code> --include-content`
42
+ - 执行 Level 3 文件级分析(R23):
43
+ - 查架构基线获取文件清单
44
+ - Read L2"受影响模块"中的每个文件,确认存在
45
+ - 追踪 import/依赖关系
46
+ - 识别测试文件
47
+ - 验证变更清单中所有路径
48
+ - `Read templates/agent-plan.json` 确认 planJson 字段名(R12)
49
+
50
+ ### Step 2 — <具体动作>
51
+
52
+ - <精确到 Edit/Write/Bash,含 old_string 锚点>
53
+ - 完成后 step_report outputJson:
54
+ ```json
55
+ {"summary": "<完成内容>", "files": ["<变更文件>"]}
56
+ ```
57
+
58
+ ### Step N-1 — 部署(若涉及后端)
59
+
60
+ ### Step N — 验证
61
+
62
+ <必须有正向验证(正常输入) + 反向验证(错误/边界输入)>
63
+
64
+ ## 验证命令
65
+
66
+ ```bash
67
+ # 正向验证: 正常场景
68
+ # 命令 + 预期输出(精确匹配串)
69
+ ...
70
+
71
+ # 反向验证: 错误/边界场景
72
+ # 命令 + 预期错误码/消息
73
+ ...
74
+ ```
75
+
76
+ ## step_report 模板
77
+
78
+ <每步完成后调用 `spec-manager task step` 时使用此格式。必须在工作完成后调用,不得预报>
79
+
80
+ ```json
81
+ {
82
+ "taskId": "<task id>",
83
+ "stepNo": 1,
84
+ "stepType": "mcp_tool",
85
+ "status": "succeeded",
86
+ "toolName": "<实际调用的工具名>",
87
+ "latencyMs": "<实际耗时>",
88
+ "outputJson": "{\"summary\":\"<完成内容>\",\"files\":[\"<变更文件>\"]}"
89
+ }
90
+ ```
91
+
92
+ ## planJson (final)
93
+
94
+ <⚠️ 字段名必须与 templates/agent-plan.json 一致: stepNo / stepType / name。禁止凭记忆拼写>
95
+
96
+ ```json
97
+ {
98
+ "coveredSpecs": ["<若覆盖多条 L3,列出所有 specCode;单条则省略此字段>"],
99
+ "steps": [
100
+ {"stepNo": 1, "stepType": "mcp_tool", "name": "上下文收集: spec-manager spec show(L3 + 父 L2)"},
101
+ {"stepNo": 2, "stepType": "mcp_tool", "name": "<动词+宾语+文件>"},
102
+ {"stepNo": "N-1", "stepType": "mcp_tool", "name": "部署(若涉及后端)"},
103
+ {"stepNo": "N", "stepType": "mcp_tool", "name": "验证: <命令 + 预期输出>"}
104
+ ]
105
+ }
106
+ ```
107
+
108
+ <autoConfirm 取值 + 理由>
109
+
110
+ ## 回滚方案
111
+
112
+ <改坏了怎么恢复。必填>
113
+
114
+ | 场景 | 回滚操作 | 预估耗时 |
115
+ |---|---|---|
116
+ | 代码问题 | `git revert <commit>` + 重新部署 | < 5 min |
117
+ | 数据问题 | <SQL 回滚脚本/备份恢复> | ... |
118
+
119
+ ## 执行风险
120
+
121
+ <这一步卡住怎么办。禁架构风险(上到 L2)>
122
+
123
+ | 风险 | 应对 |
124
+ |---|---|
125
+ | ... | ... |
@@ -0,0 +1,17 @@
1
+ {
2
+ "_comment": "agent planJson 模板。字段名 stepNo / stepType / name,禁止用 no / type / desc (INC-005)。",
3
+ "_constraints": [
4
+ "step 1 必须是上下文收集(读 L3 spec + 父 L2 + 历史任务)",
5
+ "末步必须是可执行的验证命令(R10)",
6
+ "单 Agent Task = 单 L3 spec,步数 ≤ 20(R11);超 16 步必拆 L3",
7
+ "每步 name 必须含 verb+object+file,禁止'优化/改进/处理'等模糊动词",
8
+ "stepType 仅限 llm_call / mcp_tool / human_gate"
9
+ ],
10
+ "coveredSpecs": ["2026-06-04-c3d4e5"],
11
+ "steps": [
12
+ {"stepNo": 1, "stepType": "mcp_tool", "name": "上下文收集: spec-manager spec show L3 + 父 L2 + 读 templates/agent-plan.json"},
13
+ {"stepNo": 2, "stepType": "mcp_tool", "name": "编辑 <ServiceName>.java 新增方法 <verb>"},
14
+ {"stepNo": "N-1", "stepType": "mcp_tool", "name": "部署后端 JAR (如涉及)"},
15
+ {"stepNo": "N", "stepType": "mcp_tool", "name": "验证: curl http://... 返回 200 + 预期 body"}
16
+ ]
17
+ }
@@ -0,0 +1,27 @@
1
+ # spec-manager Workflow Capsule
2
+
3
+ This file is the spec-manager skill-like entrypoint for Codex, OpenCode, and other `AGENTS.md`-compatible tools. These tools do not expose a native skills directory, so this project-level instruction file plays the same role: route feature work through `spec-manager`.
4
+
5
+ This project uses `spec-manager` for local-first spec-driven development. Specs, tasks, decisions, changes, and audit data are stored as markdown/JSON files in the repository.
6
+
7
+ ## Mandatory Workflow
8
+
9
+ - Feature work MUST go through `spec-manager`; do not jump directly from a user request to implementation code.
10
+ - New or non-trivial work follows L1 PRD -> L2 Design -> L3 Impl -> Agent Task.
11
+ - Never write implementation code unless the relevant L3 spec is `frozen`.
12
+ - `draft -> confirmed` and `confirmed -> frozen` are user review actions. After writing spec content, stop and wait for explicit user approval.
13
+ - Before creating a new spec, inspect existing specs and decisions with `spec-manager spec list` and `spec-manager decision list --topic <topic>`.
14
+ - Before code edits, read the relevant frozen L3 spec and create/start an Agent Task.
15
+ - Record execution with `spec-manager task step`; finish with `spec-manager task complete`.
16
+
17
+ ## Common Commands
18
+
19
+ ```bash
20
+ spec-manager project status
21
+ spec-manager spec list
22
+ spec-manager spec show <code> --include-content
23
+ spec-manager decision list --topic <topic>
24
+ spec-manager task list --topic <topic>
25
+ ```
26
+
27
+ When the user asks for `/spec-manager <request>` or asks to use spec-manager, treat it as a request to follow this workflow.
@@ -0,0 +1,11 @@
1
+ # Spec-Driven Development
2
+
3
+ This project uses `spec-manager` via the `/spec-manager` skill.
4
+
5
+ - All feature work MUST go through `/spec-manager`; no direct code changes for non-trivial work.
6
+ - Never write implementation code without a frozen L3 spec.
7
+ - Never skip human review gates. L1, L2, and L3 each require explicit user approval.
8
+ - Status transitions (`confirm` and `freeze`) are user actions, not AI actions.
9
+ - For research, prefer `spec-manager spec show` metadata first, then `--include-content` when full context is required.
10
+
11
+ Use the installed `.claude/skills/spec-manager/` skill when the user invokes `/spec-manager` or approves the next spec-manager step.