@namewta/speculo 0.3.0 → 0.3.2

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 (149) hide show
  1. package/README.md +1 -2
  2. package/dist/src/cli.js +40 -6
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/index.js +5 -0
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/skills-mirror.d.ts +38 -0
  7. package/dist/src/skills-mirror.js +160 -0
  8. package/dist/src/skills-mirror.js.map +1 -0
  9. package/package.json +3 -2
  10. package/template/canonical/README.md +7 -1
  11. package/template/canonical/canonical-specdev-engineering-cognitive-mentor.md +2040 -0
  12. package/template/canonical/canonical-specdev-goal-plan.md +1379 -0
  13. package/template/canonical/canonical-specdev-grill-with-docs.md +848 -285
  14. package/template/canonical/canonical-specdev-spec.md +1061 -46
  15. package/template/canonical/canonical-specdev-tickets.md +1529 -175
  16. package/template/canonical/canonical-specdev-wayfinder.md +677 -107
  17. package/template/commands/git-repository-audit.md +682 -0
  18. package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +69 -36
  19. package/template/workflows/specdev/A-archive-and-consolidate/archive-checklist.md +15 -0
  20. package/template/workflows/specdev/A-archive-and-consolidate/knowledge-promotion-rules.md +32 -0
  21. package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +51 -51
  22. package/template/workflows/specdev/D-diagnose-bugs/diagnosis-template.md +64 -0
  23. package/template/workflows/specdev/E-engineering-cognitive-mentor/E-engineering-cognitive-mentor.md +252 -0
  24. package/template/workflows/specdev/E-engineering-cognitive-mentor/architecture-guidance.md +90 -0
  25. package/template/workflows/specdev/E-engineering-cognitive-mentor/bug-guidance.md +80 -0
  26. package/template/workflows/specdev/E-engineering-cognitive-mentor/codebase-guidance.md +107 -0
  27. package/template/workflows/specdev/E-engineering-cognitive-mentor/comprehension-and-closure.md +95 -0
  28. package/template/workflows/specdev/E-engineering-cognitive-mentor/domain-learning-guidance.md +62 -0
  29. package/template/workflows/specdev/E-engineering-cognitive-mentor/evidence-and-options.md +132 -0
  30. package/template/workflows/specdev/E-engineering-cognitive-mentor/interaction-protocol.md +116 -0
  31. package/template/workflows/specdev/E-engineering-cognitive-mentor/mentor-report-template.md +135 -0
  32. package/template/workflows/specdev/E-engineering-cognitive-mentor/mode-routing.md +47 -0
  33. package/template/workflows/specdev/E-engineering-cognitive-mentor/persistence-and-resume.md +147 -0
  34. package/template/workflows/specdev/E-engineering-cognitive-mentor/requirements-guidance.md +92 -0
  35. package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +100 -30
  36. package/template/workflows/specdev/G-grill-with-docs/adr-format.md +22 -77
  37. package/template/workflows/specdev/G-grill-with-docs/context-format.md +27 -53
  38. package/template/workflows/specdev/G-grill-with-docs/domain-modeling-rules.md +6 -82
  39. package/template/workflows/specdev/G-grill-with-docs/grilling-protocol.md +32 -49
  40. package/template/workflows/specdev/G-grill-with-docs/log-format.md +16 -98
  41. package/template/workflows/specdev/I-implement/I-implement.md +168 -52
  42. package/template/workflows/specdev/I-implement/code-review-process.md +10 -76
  43. package/template/workflows/specdev/I-implement/codebase-design-glossary.md +12 -109
  44. package/template/workflows/specdev/I-implement/deepening.md +12 -32
  45. package/template/workflows/specdev/I-implement/design-it-twice.md +6 -41
  46. package/template/workflows/specdev/I-implement/evidence-template.md +69 -0
  47. package/template/workflows/specdev/I-implement/execution-preflight.md +20 -0
  48. package/template/workflows/specdev/I-implement/tdd-examples.md +10 -135
  49. package/template/workflows/specdev/I-implement/tdd-rules.md +12 -28
  50. package/template/workflows/specdev/I-init-setup/I-init-setup.md +81 -86
  51. package/template/workflows/specdev/I-init-setup/change-status-template.json +15 -0
  52. package/template/workflows/specdev/I-init-setup/config-template.json +26 -0
  53. package/template/workflows/specdev/I-init-setup/domain-layout-template.md +23 -0
  54. package/template/workflows/specdev/I-init-setup/status-labels-template.md +55 -0
  55. package/template/workflows/specdev/I-init-setup/status-template.json +7 -0
  56. package/template/workflows/specdev/I-init-setup/tracking-template.md +10 -0
  57. package/template/workflows/specdev/INDEX.md +165 -82
  58. package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +108 -44
  59. package/template/workflows/specdev/P-goal-plan/completion-control.md +79 -0
  60. package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +105 -0
  61. package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +115 -0
  62. package/template/workflows/specdev/P-goal-plan/planning-modes.md +70 -0
  63. package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +103 -40
  64. package/template/workflows/specdev/R-review-architecture/architecture-review-report-template.html +58 -0
  65. package/template/workflows/specdev/R-review-architecture/architecture-review-template.md +68 -0
  66. package/template/workflows/specdev/R-review-architecture/proposal-to-ticket.md +11 -0
  67. package/template/workflows/specdev/S-spec/S-spec.md +103 -49
  68. package/template/workflows/specdev/S-spec/spec-readiness.md +16 -0
  69. package/template/workflows/specdev/S-spec/spec-template.md +95 -0
  70. package/template/workflows/specdev/T-tickets/T-tickets.md +146 -133
  71. package/template/workflows/specdev/T-tickets/decomposition-rules.md +56 -0
  72. package/template/workflows/specdev/T-tickets/ticket-readiness.md +45 -0
  73. package/template/workflows/specdev/T-tickets/ticket-template.md +124 -0
  74. package/template/workflows/specdev/T-tickets/tickets-map-template.md +52 -50
  75. package/template/workflows/specdev/T-triage/T-triage.md +32 -63
  76. package/template/workflows/specdev/T-triage/triage-template.md +29 -0
  77. package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +88 -155
  78. package/template/workflows/specdev/W-wayfinder/investigation-ticket-template.md +50 -0
  79. package/template/workflows/specdev/W-wayfinder/wayfinder-map-template.md +46 -0
  80. package/template/workflows/specdev/_state/status.json +1 -1
  81. package/template/workflows/specdev/common/README.md +47 -0
  82. package/template/workflows/specdev/common/rules/artifact-contract.md +57 -0
  83. package/template/workflows/specdev/common/rules/code-commenting-rule.md +39 -0
  84. package/template/workflows/specdev/common/rules/deviation-control.md +43 -0
  85. package/template/workflows/specdev/common/rules/evidence-and-verification.md +57 -0
  86. package/template/workflows/specdev/common/rules/path-ownership.md +35 -0
  87. package/template/workflows/specdev/common/rules/path-reference-contract.md +116 -0
  88. package/template/workflows/specdev/common/rules/planning-principles.md +57 -0
  89. package/template/workflows/specdev/common/rules/readiness-and-depth.md +51 -0
  90. package/template/workflows/specdev/common/schemas/change-status.schema.json +170 -0
  91. package/template/workflows/specdev/common/schemas/config.schema.json +54 -0
  92. package/template/workflows/specdev/common/schemas/goal-plan.schema.json +21 -0
  93. package/template/workflows/specdev/common/schemas/spec.schema.json +16 -0
  94. package/template/workflows/specdev/common/schemas/status.schema.json +149 -0
  95. package/template/workflows/specdev/common/schemas/ticket.schema.json +130 -0
  96. package/template/workflows/specdev/common/schemas/tickets-map.schema.json +14 -0
  97. package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +28 -0
  98. package/template/workflows/specdev/common/skills/dev-worktree/references/create.md +30 -0
  99. package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +16 -0
  100. package/template/workflows/specdev/common/skills/research/SKILL.md +43 -0
  101. package/template/workflows/specdev/common/tools/README.md +16 -0
  102. package/template/workflows/specdev/common/tools/validate-specdev.mjs +1155 -0
  103. package/template/canonical/canonical-teach.md +0 -301
  104. package/template/workflows/specdev/A-archive-and-consolidate/archive-rules.md +0 -49
  105. package/template/workflows/specdev/A-archive-and-consolidate/cleanup-rules.md +0 -80
  106. package/template/workflows/specdev/A-archive-and-consolidate/consolidation-rules.md +0 -122
  107. package/template/workflows/specdev/A-archive-and-consolidate/discrimination-guide.md +0 -96
  108. package/template/workflows/specdev/A-archive-and-consolidate/knowledge-graduation.md +0 -51
  109. package/template/workflows/specdev/D-diagnose-bugs/cleanup-postmortem.md +0 -37
  110. package/template/workflows/specdev/D-diagnose-bugs/feedback-loop-techniques.md +0 -84
  111. package/template/workflows/specdev/D-diagnose-bugs/hypothesis-format.md +0 -46
  112. package/template/workflows/specdev/D-diagnose-bugs/instrumentation-rules.md +0 -51
  113. package/template/workflows/specdev/I-init-setup/domain-layout.md +0 -55
  114. package/template/workflows/specdev/I-init-setup/status-labels.md +0 -53
  115. package/template/workflows/specdev/I-init-setup/tracking-convention.md +0 -52
  116. package/template/workflows/specdev/P-goal-plan/execution-sections.md +0 -126
  117. package/template/workflows/specdev/P-goal-plan/governance-sections.md +0 -103
  118. package/template/workflows/specdev/P-goal-plan/input-validation.md +0 -94
  119. package/template/workflows/specdev/P-goal-plan/lead-orchestration-protocol.md +0 -158
  120. package/template/workflows/specdev/P-goal-plan/quick-reference-table.md +0 -60
  121. package/template/workflows/specdev/P-goal-plan/vision-sections.md +0 -80
  122. package/template/workflows/specdev/R-review-architecture/exploration-guide.md +0 -103
  123. package/template/workflows/specdev/R-review-architecture/html-report-template.md +0 -124
  124. package/template/workflows/specdev/T-triage/artifact-templates.md +0 -122
  125. package/template/workflows/specdev/T-triage/intake-rules.md +0 -71
  126. package/template/workflows/specdev/T-triage/routing-rules.md +0 -70
  127. package/template/workflows/specdev/T-triage/understanding-rules.md +0 -102
  128. package/template/workflows/specdev/_state/adr/.gitkeep +0 -0
  129. package/template/workflows/specdev/_state/context/.gitkeep +0 -0
  130. package/template/workflows/specdev/_state/research/.gitkeep +0 -0
  131. package/template/workflows/specdev/common/dev-worktree/SKILL.md +0 -48
  132. package/template/workflows/specdev/common/dev-worktree/references/create.md +0 -63
  133. package/template/workflows/specdev/common/dev-worktree/references/finalize.md +0 -102
  134. package/template/workflows/specdev/common/handoff/SKILL.md +0 -42
  135. package/template/workflows/specdev/common/neat-freak/SKILL.md +0 -210
  136. package/template/workflows/specdev/common/neat-freak/references/agent-paths.md +0 -72
  137. package/template/workflows/specdev/common/neat-freak/references/governance.md +0 -88
  138. package/template/workflows/specdev/common/neat-freak/references/sync-matrix.md +0 -77
  139. package/template/workflows/specdev/common/neat-freak/references/verification.md +0 -92
  140. package/template/workflows/specdev/common/neat-freak/scripts/audit-inventory.sh +0 -106
  141. package/template/workflows/specdev/common/prototype/LOGIC.md +0 -89
  142. package/template/workflows/specdev/common/prototype/SKILL.md +0 -78
  143. package/template/workflows/specdev/common/prototype/UI.md +0 -120
  144. package/template/workflows/specdev/common/research/SKILL.md +0 -54
  145. package/template/workflows/specdev/common/resolving-merge-conflicts/SKILL.md +0 -14
  146. package/template/workflows/specdev/common/scripts/hitl-loop.template.sh +0 -41
  147. package/template/workflows/specdev/common/triage/AGENT-BRIEF.md +0 -204
  148. package/template/workflows/specdev/common/triage/OUT-OF-SCOPE.md +0 -104
  149. package/template/workflows/specdev/common/triage/SKILL.md +0 -112
@@ -0,0 +1,68 @@
1
+ ---
2
+ artifact: architecture-review
3
+ change: <YYYY-MM-DD-topic>
4
+ status: draft
5
+ ---
6
+
7
+ # Architecture Review: <范围>
8
+
9
+ - **决策记录:** `<Path>{roots.state}/specdev/changes/{change}/architecture-review.md</Path>`
10
+ - **可视化报告:** `<Path>{roots.state}/specdev/changes/{change}/architecture-review.html</Path>`
11
+
12
+ ## 1. 审查压力与范围
13
+
14
+ - 触发目标:
15
+ - 审查入口:
16
+ - 相关行为或 Ticket:
17
+ - 不审查范围:
18
+ - 成功标准:
19
+
20
+ ## 2. 当前结构地图
21
+
22
+ ### 模块与接口
23
+
24
+ ### 数据、控制与错误流
25
+
26
+ ### 变化热点与测试接缝
27
+
28
+ ## 3. 候选提案
29
+
30
+ ### AR-001: <标题>
31
+
32
+ - **机制:** shallow-module / seam-leak / locality / dependency / temporal-coupling / shared-state / migration
33
+ - **严重度:** low / medium / high / critical
34
+ - **证据:** `<Path>project/relative/path</Path>`
35
+ - **问题如何发生:**
36
+ - **用户或工程影响:**
37
+ - **当前 workaround:**
38
+ - **不做后果:**
39
+
40
+ #### 方案 A:保持现状
41
+
42
+ #### 方案 B:推荐最小深层化
43
+
44
+ #### 方案 C:替代方案
45
+
46
+ | 维度 | A | B | C |
47
+ |---|---|---|---|
48
+ | 调用者复杂度 | | | |
49
+ | 接口稳定性 | | | |
50
+ | 迁移与兼容 | | | |
51
+ | 测试与验证 | | | |
52
+ | 回滚 | | | |
53
+ | 事故半径 | | | |
54
+
55
+ - **推荐:**
56
+ - **建议 Planning Depth:** lite / standard / deep
57
+ - **访谈状态:** proposed / accepted / adjusted / deferred / rejected
58
+ - **用户结论:**
59
+ - **ADR 影响:** 无 / `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` 中的 ADR-###
60
+
61
+ ## 4. 优先级与依赖
62
+
63
+ | Candidate | Value | Risk Reduction | Cost | Dependency | Decision |
64
+ |---|---|---|---|---|---|
65
+
66
+ ## 5. 下一步
67
+
68
+ - 接受项进入 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`。
@@ -0,0 +1,11 @@
1
+ # 架构提案转 Ticket
2
+
3
+ 本规则由 `<Path>{roots.workflows}/specdev/R-review-architecture/R-review-architecture.md</Path>` 在候选被用户接受后加载。
4
+
5
+ - 只有有代码证据、具体收益和用户接受的提案才生成 Ticket。
6
+ - Prefactor Ticket 必须指出解除的后续阻碍、受益 Ticket 或行为,以及独立验证。
7
+ - 修改公共接口、schema、数据或大范围调用方时使用 Deep,并采用 expand → migrate → observe → contract。
8
+ - 架构报告中的项目路径只是审查证据;生成 Ticket 时重新确认当前项目路径和所有权。
9
+ - 不把“清理整个模块”写成单一 Ticket;按可验证安全落点拆分。
10
+ - 任何会改变外部行为或验收合同的提案先修订 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`。
11
+ - 任何会改变已接受架构决策的提案先更新 `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`。
@@ -3,91 +3,145 @@ id: specdev/spec
3
3
  type: workflow-entry
4
4
  workflow: specdev
5
5
  name: 编写 Spec
6
- description: 将当前对话综合为一份完整的 spec 文档,包含问题陈述、解决方案、用户故事、实现决策和测试决策,持久化到变更目录。
7
- keywords: [spec, 规范, 需求, PRD, 用户故事]
6
+ description: 综合已知事实、设计决定、诊断与代码现状,产出以外部行为和验收合同为权威的 Ready Spec。
7
+ keywords: [spec, PRD, 用户故事, 验收合同, 接缝, 范围, readiness]
8
8
  ---
9
9
 
10
10
  # 编写 Spec
11
11
 
12
- work 读取当前对话上下文和代码库理解,产出一份 spec(你可能也称之为 PRD)。不要访谈用户 —— 仅综合你已经知道的内容。
12
+ work 以“综合已有上下文”为主,不启动宽泛访谈。它保留原有的代码库探索、领域词汇、ADR 约束、测试接缝设计和用户确认能力,但将确认限制为真正影响外部行为或验证的高价值问题。
13
+
14
+ Spec 决定“为什么、为谁、系统应表现为何”。它可以锁定影响公共接口、数据、兼容、安全或验收的实现约束,但不写逐文件施工计划。
15
+
16
+ ## 输入
17
+
18
+ 按存在情况读取:
19
+
20
+ - `<Path>{roots.state}/specdev/changes/{change}/source-issue.md</Path>`
21
+ - `<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>`
22
+ - `<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>`
23
+ - `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>`
24
+ - `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`
25
+ - `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`
26
+ - `<Path>{roots.state}/specdev/context/</Path>`
27
+ - `<Path>{roots.state}/specdev/adr/</Path>`
28
+ - 当前代码、测试、接口、schema、配置和运行事实。
29
+
30
+ 不存在的可选工件静默跳过,不得把缺失内容当作已确认事实。
13
31
 
14
32
  ## 流程
15
33
 
16
- ### 1. 探索代码库
34
+ ### 1. Grounding 与事实探索
17
35
 
18
- 探索仓库以了解代码库的当前状态(如果尚未这样做)。在整个 spec 中使用项目的领域词汇表,并尊重所涉及区域的任何 ADR。
36
+ 1. 汇总用户目标、受众、问题、限制和已有决定;
37
+ 2. 只读探索相关代码、测试、配置、schema 和相邻实现;
38
+ 3. 使用 `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>` 与 `<Path>{roots.state}/specdev/context/</Path>` 的术语,不自创冲突名称;
39
+ 4. 使用 `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` 与 `<Path>{roots.state}/specdev/adr/</Path>` 的已接受决策;
40
+ 5. 按 `<Path>{roots.workflows}/specdev/common/rules/planning-principles.md</Path>` 区分可发现事实、高影响偏好和低影响实现细节;
41
+ 6. 按 `<Path>{roots.workflows}/specdev/common/rules/artifact-contract.md</Path>` 处理冲突;
42
+ 7. 外部依赖、标准或版本行为不清楚时使用 `<Path>{roots.workflows}/specdev/common/skills/research/SKILL.md</Path>`。
19
43
 
20
- 先读取 `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>` 了解项目的领域词汇表——使用其中的术语定义,不要自创名称。
44
+ 广泛的产品或架构取舍仍未确定时,返回 `<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>`;不要在 Spec 中用猜测补齐。
21
45
 
22
- 再读取 `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` 了解已做出的架构决策——不要与已有决策冲突。如果 spec 涉及与某 ADR 相同或相邻的区域,在实现决策中引用该 ADR。
46
+ ### 2. 定义问题、用户和成功
23
47
 
24
- `{change}` 为当前活跃变更的目录名,格式为 `<YYYY-MM-DD>-<topic>`。如果尚未创建变更目录,先运行 `<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>` 的启动变更阶段初始化 CONTEXT.md 和 ADR.md。
48
+ 从用户或调用者视角写明:
25
49
 
26
- 若代码库探索中遇到不熟悉的模块、外部依赖、第三方 SDK 或技术领域,调用 `<Path>{roots.workflows}/specdev/common/research/SKILL.md</Path>` 进行针对性调查——了解其设计意图、API 契约和行为特征——再基于完整理解撰写 spec。
50
+ - 当前问题与影响;
51
+ - 目标用户、调用者或运营角色;
52
+ - 主要场景和现有痛点;
53
+ - 成功状态与可观察结果;
54
+ - 明确非目标。
27
55
 
28
- **完成标准**:代码库当前状态已理解,领域词汇表和 ADR 已纳入考量。
56
+ 目标不能只写“新增模块”“修改接口”或“完成 Ticket”。
29
57
 
30
- ### 2. 草拟接缝
58
+ ### 3. 定义外部行为与范围
31
59
 
32
- 草拟你将用于测试该功能的接缝(seam)。接缝是你可以插入测试以验证行为的位置——API 端点、CLI 命令、UI 交互点、事件回调等。
60
+ 写明:
33
61
 
34
- **接缝规则:**
62
+ - 解决方案摘要;
63
+ - 正常路径;
64
+ - 边界和失败路径;
65
+ - 稳定错误行为;
66
+ - 状态转换和不变量;
67
+ - IN、REUSE、OUT;
68
+ - 需要保持的既有行为;
69
+ - 公共接口、数据、安全、迁移和运维影响。
35
70
 
36
- - 优先使用现有接缝而不是新建。查看代码库中已有的测试,了解项目如何注入测试。
37
- - 使用尽可能高层的接缝。UI 测试 > API 测试 > 单元测试,按此优先级选择。
38
- - 如果需要新接缝,在尽可能高的层级提出。代码库中的接缝越少越好 —— 理想数量是 1 个。
39
- - 每个接缝描述:接缝位置(什么模块/组件)、接缝类型(E2E、API、单元)、何时触发、如何验证。
71
+ 局部文件组织、辅助函数和逐行实现不进入 Spec。
40
72
 
41
- **与用户确认这些接缝是否符合他们的期望。** 展示草拟的接缝列表,询问:
42
- - 接缝层级是否合适?(太高可能遗漏细节,太低可能过于脆弱)
43
- - 是否有遗漏的接缝?
44
- - 现有接缝是否已足够,无需新增?
73
+ ### 4. 设计验证接缝
45
74
 
46
- **完成标准**:测试接缝已草拟并经用户确认。
75
+ 优先复用现有稳定接缝。通常优先顺序是用户端到端行为、公共 API 或 CLI、事件或集成接缝、稳定单元接缝;实际层级由风险和项目先例决定,不机械追求最高层测试。
47
76
 
48
- ### 3. 编写 spec
77
+ 每个接缝写明:
49
78
 
50
- 按以下模板编写完整 spec,写入 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`。
79
+ - 入口位置和类型;
80
+ - 触发方式;
81
+ - 可观察结果;
82
+ - 覆盖哪些验收合同;
83
+ - 现有测试先例或命令。
51
84
 
52
- ---
85
+ 若接缝选择会显著改变可测试性、事故半径或实现范围,向用户做一次聚焦确认;接缝可由代码和已有测试明确推导时,直接采用并记录依据,不为形式提问。
53
86
 
54
- **问题陈述** —— 从用户视角描述用户面临的问题。不要描述技术问题——描述用户遇到的困境、无法完成的任务、或当前流程中的痛点。一两段即可,但必须具体到让读者理解"为什么需要这个功能"。
87
+ 证据规则见 `<Path>{roots.workflows}/specdev/common/rules/evidence-and-verification.md</Path>`。
55
88
 
56
- **解决方案** —— 从用户视角描述问题的解决方案。描述用户将如何与新功能交互、他们的体验将如何改变。不要写实现细节——写用户能做什么、看到什么。一两段即可。
89
+ ### 5. 编写 Spec
57
90
 
58
- **用户故事** —— 一个详细的、编号的用户故事列表。每个用户故事格式为:
91
+ 使用 `<Path>{roots.workflows}/specdev/S-spec/spec-template.md</Path>` 写入 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`。
59
92
 
60
- > 作为 &lt;角色&gt;,我希望 &lt;功能&gt;,以便 &lt;收益&gt;
93
+ 稳定编号:
61
94
 
62
- 例如:*作为手机银行客户,我希望查看账户余额,以便做出更明智的消费决策。*
95
+ - `US-###`:用户故事;
96
+ - `AC-###`:验收合同;
97
+ - `NFR-###`:非功能要求;
98
+ - `DEC-###`:已锁定实现约束;
99
+ - `OOS-###`:明确超出范围。
63
100
 
64
- 用户故事列表应极其详尽,涵盖该功能的所有方面。覆盖以下维度:
65
- - 主要流程(happy path)—— 用户最常走的路径
66
- - 边界情况 —— 空数据、极限值、并发操作
67
- - 错误处理 —— 用户犯错时发生什么
68
- - 权限与角色 —— 不同角色的不同体验
69
- - 状态转换 —— 数据从创建到归档的每个状态变化
101
+ 不得虚构错误码、性能阈值、schema、迁移政策、法规或合规要求。项目代码证据使用项目相对 Path 标签。
70
102
 
71
- **实现决策** —— 已做出的实现决策列表。可包含:将构建/修改的模块、这些模块将被修改的接口、开发者的技术澄清、架构决策、Schema 变更、API 契约、具体交互。不要包含具体文件路径或代码片段——它们可能很快过时。
103
+ ### 6. Readiness Review
72
104
 
73
- 例外:如果原型产生了一个代码片段,它比文字更精确地编码了一个决策(状态机、reducer、schema、类型结构),将其内联在相关决策中,并简要注明来自原型。精简到富含决策的部分 —— 不是可运行的演示,只是关键部分。
105
+ 加载 `<Path>{roots.workflows}/specdev/S-spec/spec-readiness.md</Path>` 检查 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`。
74
106
 
75
- **测试决策** —— 已做出的测试决策列表。包含:什么构成好测试的描述(只测试外部行为,不测试实现细节)、哪些模块将被测试、测试的先例(即代码库中类似类型的测试)。
107
+ 任何会改变以下内容的未决问题都会使 `ready_for_tickets: false`:
76
108
 
77
- **超出范围** —— 描述此 spec 超出范围的内容。明确说出**不做什么**与说出做什么同样重要。对于每个超出范围的条目,简要说明原因(是后续版本的规划、还是技术上不可行、还是与产品愿景不符)。
109
+ - 外部行为和范围;
110
+ - 公共接口或数据;
111
+ - 安全、隐私、资金或数据完整性;
112
+ - 兼容、迁移和发布约束;
113
+ - 验收合同或验证接缝。
78
114
 
79
- **补充说明** —— 关于该功能的任何补充说明。可包含:已知风险或不确定性、依赖的外部系统或团队、需要进一步调研的领域、迁移或废弃计划。
115
+ 低影响、可逆实现默认值可以作为显式假设,但必须有验证方式。
80
116
 
81
- ---
117
+ ### 7. 发布与路由
82
118
 
83
- 写入后,不要做额外的 triage 或标签操作——spec.md 的地位由其在变更目录中的存在本身决定。
119
+ 1. 对照 `<Path>{roots.workflows}/specdev/common/schemas/spec.schema.json</Path>`;
120
+ 2. 运行:
84
121
 
85
- **完成标准**:spec.md 已写入变更目录——问题陈述、解决方案、用户故事、实现决策、测试决策、超出范围、补充说明各章节齐全,无残留 `[TODO:]`。
122
+ ```bash
123
+ node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> \
124
+ <Path>{roots.state}/specdev/changes/{change}</Path>
125
+ ```
86
126
 
87
- ## 子文件引用
127
+ 3. 更新 `<Path>{roots.state}/specdev/status.json</Path>` 与 `<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>`;
128
+ 4. 汇报主要用户故事、验收合同、范围、验证接缝、风险和 Ready 状态;
129
+ 5. 返回 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`、Ready 状态及下一 Work 的完整路径;
130
+ 6. 只有用户请求或工作流显式串联时,进入 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`。
131
+
132
+ ## 完成标准
88
133
 
89
- 本入口为单文件 work,所有内容均已内联。以下引用仅在其他 work 需要读取 spec 时使用:
134
+ - `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>` 已按模板写入;
135
+ - 问题、目标用户、外部行为、范围和非目标明确;
136
+ - 用户故事覆盖主要、边界、错误、角色和状态场景;
137
+ - 每个验收合同可观察、可判定并绑定验证接缝;
138
+ - 公共接口、数据、兼容、安全和迁移已决定或明确不适用;
139
+ - 高影响未决问题与 `ready_for_tickets` 一致;
140
+ - 不包含逐文件施工计划;
141
+ - Spec、Ready 状态和下一 Work 路径已返回;
142
+ - 状态和用户摘要已更新。
143
+
144
+ ## 子文件引用
90
145
 
91
- - `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>` —— 编写的 spec 产物
92
- - `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>` —— 领域词汇表(阅读用)
93
- - `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` —— 架构决策记录(阅读用)
146
+ - Spec 模板:`<Path>{roots.workflows}/specdev/S-spec/spec-template.md</Path>`
147
+ - Ready 检查:`<Path>{roots.workflows}/specdev/S-spec/spec-readiness.md</Path>`
@@ -0,0 +1,16 @@
1
+ # Spec Readiness
2
+
3
+ 本检查适用于 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`。
4
+
5
+ - [ ] 问题、目标用户和成功标准从用户或调用者视角可理解。
6
+ - [ ] 主要、边界、错误、角色和状态场景足以生成垂直切片。
7
+ - [ ] 每个用户故事至少被一个验收合同覆盖。
8
+ - [ ] 每个验收合同可观察、可判定且有验证接缝。
9
+ - [ ] IN、REUSE、OUT 无冲突。
10
+ - [ ] 公共接口、数据、兼容、安全、迁移和发布影响已决定或明确不适用。
11
+ - [ ] 已锁定实现约束有来源,没有把偏好伪装成事实。
12
+ - [ ] 高影响未决问题为零。
13
+ - [ ] 低影响假设可逆且有验证方式。
14
+ - [ ] 项目路径引用使用项目相对 Path 标签,内部工件使用完整根变量 Path 标签。
15
+ - [ ] Spec 不包含逐文件施工清单或容易过时的行号承诺。
16
+ - [ ] `ready_for_tickets: true` 与实际内容一致。
@@ -0,0 +1,95 @@
1
+ ---
2
+ schema_version: 3
3
+ artifact: spec
4
+ change: <YYYY-MM-DD-topic>
5
+ status: draft
6
+ ready_for_tickets: false
7
+ sources:
8
+ - USER-DECISION:<summary>
9
+ ---
10
+
11
+ # Spec: <标题>
12
+
13
+ - **Spec:** `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`
14
+ - **当前 ADR:** `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`
15
+ - **当前领域上下文:** `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`
16
+
17
+ ## 1. 问题与目标
18
+
19
+ ### 问题陈述
20
+
21
+ ### 目标用户与场景
22
+
23
+ ### 成功标准
24
+
25
+ ### 非目标
26
+
27
+ ## 2. 解决方案与外部行为
28
+
29
+ ### 解决方案摘要
30
+
31
+ ### 主要流程
32
+
33
+ ### 边界、失败与稳定错误行为
34
+
35
+ ### 状态转换与不变量
36
+
37
+ ## 3. 用户故事
38
+
39
+ - **US-001**:作为 <角色>,我希望 <能力>,以便 <收益>。
40
+
41
+ ## 4. 验收合同
42
+
43
+ | ID | 前置条件 | 动作或事件 | 可观察结果 | 验证接缝 |
44
+ |---|---|---|---|---|
45
+ | AC-001 | ... | ... | ... | ... |
46
+
47
+ ## 5. 范围
48
+
49
+ ### IN
50
+
51
+ ### REUSE
52
+
53
+ ### OUT
54
+
55
+ - **OOS-001**:<不做什么及原因>。
56
+
57
+ ## 6. 已锁定实现约束
58
+
59
+ - **DEC-001**:<只写影响公共接口、数据、不变量、兼容、安全或验证的决策>。来源:`ADR-###`。
60
+
61
+ ## 7. 数据、接口与兼容
62
+
63
+ - **公共接口变化:** 无 / ...
64
+ - **数据模型与持久化:** 无 / ...
65
+ - **兼容要求:** 无 / ...
66
+ - **迁移要求:** 无 / ...
67
+ - **发布或运维影响:** 无 / ...
68
+
69
+ ## 8. 非功能要求
70
+
71
+ - **NFR-001 安全与隐私:**
72
+ - **NFR-002 性能与容量:**
73
+ - **NFR-003 可用性与可靠性:**
74
+ - **NFR-004 可观测性与运营:**
75
+
76
+ 不适用的维度写“不适用:原因”。
77
+
78
+ ## 9. 验证策略
79
+
80
+ | 接缝 | 层级 | 覆盖合同 | 现有先例或命令 | Evidence 类型 |
81
+ |---|---|---|---|---|
82
+
83
+ 项目测试先例可引用项目相对路径,例如 `<Path>tests/example.test.ts</Path>`。
84
+
85
+ ## 10. 风险、假设与未决问题
86
+
87
+ ### 风险
88
+
89
+ ### 已采用的低影响假设
90
+
91
+ ### 未决问题
92
+
93
+ 无。
94
+
95
+ 存在高影响未决问题时,`ready_for_tickets` 必须为 `false`。