@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
@@ -3,206 +3,219 @@ id: specdev/tickets
3
3
  type: workflow-entry
4
4
  workflow: specdev
5
5
  name: 拆分 Tickets
6
- description: 将 spec 或计划拆分为一组曳光弹式垂直切片 tickets,每个声明阻塞边,持久化到变更目录。支持宽重构的扩展-收缩排序。
7
- keywords: [tickets, 拆分, 任务, 垂直切片, 阻塞, 曳光弹]
6
+ description: 将 Spec、计划或已确认对话拆成曳光弹式垂直切片;每个 Ticket 决策完备、可独立验证、适配单一上下文,并建立阻塞 DAG、路径所有权和执行就绪门禁。
7
+ keywords: [tickets, 拆分, 垂直切片, 阻塞, 曳光弹, decision-complete, readiness]
8
8
  ---
9
9
 
10
10
  # 拆分 Tickets
11
11
 
12
- plan、spec 或对话拆分为一组 **tickets** —— 曳光弹式垂直切片,每个 ticket 声明**阻塞**它的那些 tickets。
12
+ Ticket 是**决策完备的微型执行计划**:它消除执行者在目标、范围、公共契约、关键顺序和验收上的关键决策,但不展开逐行代码、局部变量或可从现有惯例自然推导的实现细节。
13
13
 
14
- ## 流程
15
-
16
- ### 1. 收集上下文
17
-
18
- 基于对话上下文中已有的内容进行工作。如果用户将某个引用(spec 路径或其他标识)作为参数传入,拉取它并读取其完整内容。
19
-
20
- 主要输入来源:
21
- - 如果已有 spec,读取 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>` —— 这是 ticket 拆分的首要依据。
22
- - 读取 `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` 了解本 change 的架构决策——ticket 不应与已做出的决策冲突。
23
- - 读取 `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>` 了解本 change 的领域词汇表。
24
- - 读取 `<Path>{roots.state}/specdev/adr/</Path>` —— 已确认并提升到永久的架构决策,始终反映项目当前架构现状。
25
- - 读取 `<Path>{roots.state}/specdev/context/</Path>` —— 已确认并提升到永久的领域词汇表,始终反映项目当前领域术语现状。
26
-
27
- 如果尚未有 spec,可以基于对话中的计划或待办列表进行拆分,但优先建议用户先运行 `<Path>{roots.workflows}/specdev/S-spec/S-spec.md</Path>` 产出 spec 以获得更精确的拆分。
28
-
29
- **完成标准**:上下文(spec、对话、代码库)已收集,所有必要输入源已读取。
14
+ work 保留原有能力:代码库探索、prefactor 识别、曳光弹垂直切片、真实阻塞边、用户粒度核对、宽重构的 expand-contract 排序、Ticket 独立文件和总体 Tickets Map。
30
15
 
31
- ### 2. 探索代码库
16
+ ## 输入
32
17
 
33
- 如果尚未探索代码库,进行探索以了解代码的当前状态。Ticket 标题和描述应使用项目的领域词汇表,并尊重所涉及区域的 ADR。
18
+ 优先读取:
34
19
 
35
- 寻找预重构(prefactor)的机会,使实现更简单。"让变更变容易,然后做容易的变更。"
20
+ - 当前 Spec:`<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`
21
+ - 当前架构决策:`<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`
22
+ - 当前领域上下文:`<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`
23
+ - 当前设计日志:`<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>`
24
+ - Bug 诊断:`<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>`
25
+ - 永久架构决策:`<Path>{roots.state}/specdev/adr/</Path>`
26
+ - 永久领域上下文:`<Path>{roots.state}/specdev/context/</Path>`
27
+ - 项目当前代码、测试、配置、schema 和 CI 事实。
36
28
 
37
- 具体做法:
38
- - 识别即将被修改的模块——它们的接口是否清晰?依赖是否合理?
39
- - 如果某个模块的当前结构会使后续实现变得复杂,先提出一个重构 ticket,放在功能 tickets 之前。
40
- - 预重构必须独立有价值——不是为了"更干净"而重构,而是为了"让后续变更更安全/更简单"。
29
+ 若尚无 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`,只有在用户提供的计划或对话已经等价覆盖目标、范围、关键决定和可判定验收时才可继续;否则建议先运行 `<Path>{roots.workflows}/specdev/S-spec/S-spec.md</Path>`。
41
30
 
42
- 若探索中遇到不熟悉的模块、外部依赖或第三方库——其接口设计意图和行为特征尚不明确——调用 `<Path>{roots.workflows}/specdev/common/research/SKILL.md</Path>` 完成探查后再继续识别预重构机会。
43
-
44
- **完成标准**:代码库已探索,预重构机会已识别,领域词汇表和 ADR 已纳入考量。
31
+ ## 流程
45
32
 
46
- ### 3. 草拟垂直切片
33
+ ### 1. 输入预检
47
34
 
48
- 将工作拆分为**曳光弹** tickets。每个切片横向切穿每一层(schema、API、UI、测试),是一条窄但**完整**的路径——是垂直切片,不是某一层的水平切片。
35
+ 1. 读取所有存在的上游工件;
36
+ 2. 检查 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>` 的 `ready_for_tickets`;
37
+ 3. 按 `<Path>{roots.workflows}/specdev/common/rules/artifact-contract.md</Path>` 处理 Spec、ADR、用户决定与代码事实的冲突;
38
+ 4. 将未知项分类为可发现事实、高影响用户决定和低影响实现细节;
39
+ 5. 高影响未决问题没有关闭时停止,不通过更详细的 Ticket 文字伪装决策完备。
49
40
 
50
- 垂直切片规则:
51
- - 一个完成的切片可以独立演示或验证——用户可以感知到它交付的行为
52
- - 每个切片的大小适配单个全新上下文窗口——一个 agent 会话可以在不间断的情况下完成它
53
- - 任何预重构应最先完成——它们解除后续 tickets 的阻塞
41
+ **完成标准**:拆分依据、权威顺序、合同范围与未决问题已明确。
54
42
 
55
- 为每个 ticket 标注其**阻塞边** —— 即必须在它开始之前完成的其他 tickets。没有阻塞边的 ticket 可以立即开始。
43
+ ### 2. 探索代码库与实现地形
56
44
 
57
- **宽重构是垂直切片的例外。** **宽重构**是指一个机械性变更 —— 重命名字段、修改共享符号的类型 —— 其**影响范围**辐射整个代码库,因此单次编辑会破坏数千个调用点,任何垂直切片都无法以绿色状态落地。不要强行将其塞入曳光弹;应将其排序为**扩展-收缩**序列:
45
+ 如果尚未探索,进行只读探索:
58
46
 
59
- 1. **扩展**:在旧形式旁边添加新形式,使一切不中断。旧代码仍然工作,新代码可用但尚未被调用。
60
- 2. **分批迁移调用点**:按影响范围分批(按包、按目录),每批是一个由扩展阶段阻塞的独立 ticket。保持 CI 逐批绿色,因为旧形式仍然存在。
61
- 3. **收缩**:当没有调用方残留时删除旧形式,由一个由所有迁移批次阻塞的 ticket 负责。
47
+ - 找到行为入口、稳定接口、测试接缝、数据流和错误路径;
48
+ - 查找相邻或类似实现,优先复用项目现有模式;
49
+ - 识别可能修改的模块、公共路径、共享文件、迁移索引和全局注册点;
50
+ - 查找现有测试命令、夹具、类型检查、构建和 CI 门禁;
51
+ - 对照 `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>` 使用项目领域词汇;
52
+ - 对照 `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` 与 `<Path>{roots.state}/specdev/adr/</Path>` 避免重新争论已接受决策。
62
53
 
63
- 当连批次本身都无法独立保持绿色时,保持排序不变,但让它们共享一个集成分支,所有批次共同阻塞一个最终的集成验证 ticket —— 绿色仅在该处得到承诺。
54
+ 遇到不熟悉的模块、外部依赖或第三方库时,使用 `<Path>{roots.workflows}/specdev/common/skills/research/SKILL.md</Path>`,再继续拆分。
64
55
 
65
- **完成标准**:曳光弹式垂直切片已草拟,每个 ticket 的阻塞边已标注。
56
+ #### Prefactor
66
57
 
67
- ### 4. 与用户核对
58
+ 遵循“让变更变容易,然后做容易的变更”:
68
59
 
69
- 以编号列表形式呈现提议的拆分方案。对于每个 ticket,展示:
60
+ - 如果当前接口、依赖或接缝会使后续实现明显不安全或重复,提出前置 prefactor Ticket;
61
+ - prefactor 必须说明它解除的具体阻碍;
62
+ - prefactor 必须独立有价值且可验证;
63
+ - 不为了“更干净”而创建与目标无关的重构 Ticket。
70
64
 
71
- - **标题**:简短的描述性名称
72
- - **被阻塞于**:必须首先完成的其他 tickets(如有),或"无 —— 可立即开始"
73
- - **它交付什么**:此 ticket 使哪些端到端行为可用,从用户视角描述
65
+ **完成标准**:实现地形、稳定接缝、共享路径与必要 prefactor 已识别。
74
66
 
75
- 询问用户:
67
+ ### 3. 草拟曳光弹式垂直切片
76
68
 
77
- - 粒度是否合适?(太粗 —— 一个 ticket 内塞了太多决策,难以在一个会话内完成;太细 —— ticket 之间没有实质性行为差异)
78
- - 阻塞边是否正确 —— 每个 ticket 是否只依赖于真正阻碍它的 tickets?是否有不必要的阻塞关系?
79
- - 是否有 tickets 应合并或进一步拆分?
69
+ 加载 `<Path>{roots.workflows}/specdev/T-tickets/decomposition-rules.md</Path>`。每个切片应横向穿过交付该行为所需的最小层次组合,而不是把数据库、后端、前端和测试拆成互相无价值的水平 Ticket。
80
70
 
81
- 迭代直到用户批准拆分方案。每次修改后重新展示完整列表。
71
+ 每个 Ticket 必须:
82
72
 
83
- **完成标准**:用户已确认粒度、阻塞边与合并/拆分方案。批准后,tickets 将写入 `ticket/` 目录(一个 ticket 一个独立文件,命名为 `NN-<name>.md`),并生成 `tickets-map.md` 作为总体地图和执行清单。
73
+ - 交付一个可观察行为,或一个能独立解除后续阻塞的安全准备能力;
74
+ - 完成后可以独立演示、测试或验证;
75
+ - 适合一个全新 Agent 上下文在不中断的情况下完成;
76
+ - 与其他 Ticket 有实质行为差异;
77
+ - 只依赖真正阻止它开始的前置产物;
78
+ - 自带至少一种完成证据。
84
79
 
85
- ### 5. 发布
80
+ #### 宽重构例外
86
81
 
87
- 将已批准的 tickets 写入变更目录,**每个 ticket 一个独立文件**,并生成总体地图文件。按以下三步执行:
82
+ 字段重命名、共享符号类型变化、协议升级等宽机械变更无法安全塞入单个垂直切片时,按以下顺序:
88
83
 
89
- **5a. 创建 ticket 目录**
84
+ 1. **Expand**:在旧形式旁增加新形式,保持旧调用方可工作;
85
+ 2. **Migrate batches**:按包、目录、消费者或风险分批迁移,每批独立成 Ticket;
86
+ 3. **Contract**:确认旧调用点为零后删除旧形式;
87
+ 4. 若迁移批次无法各自保持绿色,使用隔离集成分支和最终集成验证 Gate,但仍保留明确的批次与责任边界。
90
88
 
91
- 创建 `<Path>{roots.state}/specdev/changes/{change}/ticket/</Path>` 目录。
89
+ **完成标准**:每个 Ticket 的可观察产出、真实阻塞边和验证方式已草拟。
92
90
 
93
- **5b. 写入单个 ticket 文件**
91
+ ### 4. 判定规划深度与风险
94
92
 
95
- 按依赖顺序(无阻塞者在前,被阻塞者在后),为每个 ticket 创建独立文件 `<Path>{roots.state}/specdev/changes/{change}/ticket/NN-<ticket-name>.md</Path>`。`NN` ticket 编号(两位零填充阿拉伯数字:`01`, `02`, ..., `10`, ...),代表执行顺序。文件名与编号均不含 `#` 字符,避免 Markdown 链接被编码为 `%23`。
93
+ `<Path>{roots.workflows}/specdev/common/rules/readiness-and-depth.md</Path>` 为每个 Ticket 标注:
96
94
 
97
- 每个 ticket 文件按以下模板填写:
95
+ - `lite`:局部、可逆、沿用既有模式、无公共契约或迁移影响;
96
+ - `standard`:大多数多文件或跨层垂直切片;
97
+ - `deep`:公共 API/schema、数据迁移、安全/隐私/资金、不可逆操作、expand-contract、共享核心路径、多 Agent 或高事故半径。
98
98
 
99
- ```markdown
100
- # Ticket NN: <标题>
99
+ 规划深度不是优先级,也不是 Gate。每个 Ticket 必须记录触发该深度的原因。
101
100
 
102
- - **被阻塞于:** `./ticket/NN-<name>.md`, `./ticket/NN-<name>.md`(相对路径,或多个用逗号分隔。无阻塞则写"无 —— 可立即开始"。查看被引用 ticket 文件中的状态字段自行判断是否已就绪)
103
- - **状态:** 未开始
101
+ ### 5. 写成决策完备 Ticket
104
102
 
105
- <!-- 如需了解整体上下文、所有 ticket 的依赖关系全景或横切关注点,请查看 `../tickets-map.md`。 -->
103
+ 使用 `<Path>{roots.workflows}/specdev/T-tickets/ticket-template.md</Path>` 填写:
106
104
 
107
- ## 战略与背景
105
+ - 战略目标、可观察产出与来源追踪;
106
+ - 当前代码事实和需求差距;
107
+ - 已锁定决策、低影响假设和未决问题;
108
+ - IN / REUSE / OUT;
109
+ - 用户或调用者视角的端到端行为;
110
+ - Standard/Deep 的接口、输入输出、不变量、数据流、失败与兼容契约;
111
+ - 有序执行路线和安全落点;
112
+ - expected、writable、read-only、shared 路径;
113
+ - 正常、失败和回归验证矩阵;
114
+ - 用户界面交互受影响时的 Lead E2E Gate;
115
+ - Deep 的迁移、兼容窗口、监控、回滚和不可逆批准点;
116
+ - 可判定验收标准。
108
117
 
109
- <!-- [必填] 本 ticket 的战略上下文。 -->
118
+ 路径所有权必须遵守 `<Path>{roots.workflows}/specdev/common/rules/path-ownership.md</Path>`,证据设计必须遵守 `<Path>{roots.workflows}/specdev/common/rules/evidence-and-verification.md</Path>`。
110
119
 
111
- - **本 ticket 战略**:一句话——本 ticket 做什么 + 为什么 + 以什么为基础(新建/复用现有模块)
112
- - **与该 ticket 相关的已确认决策**:逐条列出与本 ticket 范围相关的已拍板决策(从 ADR、spec 或对话中提取),防止实现时重新扯皮
113
- - **与该 ticket 相关的当前现状**:逐条列出与本 ticket 相关的、与需求不符的现有代码/行为。格式:文件路径 + 当前行为 + 为何不满足需求。可附近似行号作定位提示,不作承诺——实施时以现场代码为准
114
- - **该 ticket 的预期产出**:完成后可观察到的行为变化
120
+ ### 6. 构建依赖 DAG、合同覆盖与并发检查
115
121
 
116
- ## 范围边界
122
+ 1. 使用 Ticket ID 建立 `blocked_by`;
123
+ 2. 检测循环和不存在的引用;
124
+ 3. 识别根 Ticket、汇合点、扇出与收缩点;
125
+ 4. 为每个 Spec 验收合同映射至少一个 Ticket;
126
+ 5. 检查并行候选的 `writable_paths` 是否相交;
127
+ 6. 共享路径必须指定唯一 owner,通常由 Lead 或专门 Ticket 修改;
128
+ 7. 不得用依赖边表达“可能更方便”或纯粹的人员交接。
117
129
 
118
- | IN(本 ticket 构建) | REUSE(复用现有,不改动) | OUT(本 ticket 明确不做) |
119
- |---------------------|-------------------------|-------------------------|
120
- | ... | ... | ... |
130
+ 使用 `<Path>{roots.workflows}/specdev/T-tickets/tickets-map-template.md</Path>` 草拟总体 Map。
121
131
 
122
- ## 要构建什么
132
+ ### 7. Definition of Ready
123
133
 
124
- <从用户视角描述此 ticket 交付的端到端行为。用户能做什么、看到什么变化。不是逐层实现清单。一到三段。>
134
+ 加载 `<Path>{roots.workflows}/specdev/T-tickets/ticket-readiness.md</Path>` 逐个检查。
125
135
 
126
- ## 交付物
136
+ 存在以下任一情况时 `ready: false`:
127
137
 
128
- <!-- 本 ticket 产出的文件/模块/功能。新增文件标 **新增**,重度重构标 **重构**。 -->
138
+ - 会改变行为、接口、数据、兼容、安全、范围或验收的未决问题;
139
+ - 依赖缺失或 DAG 有环;
140
+ - 可写路径不明确或并行所有权冲突;
141
+ - 验证方法不能执行且没有批准的替代证据;
142
+ - 单个新上下文无法完成;
143
+ - Standard/Deep 缺少有序执行路线;
144
+ - Deep 缺少迁移、兼容、监控、回滚或批准点。
129
145
 
130
- - **新增** path/to/new.ts —— 描述
131
- - 修改 path/to/existing.ts —— 改动内容
146
+ ### 8. 与用户核对
132
147
 
133
- ## 需阅读的文件
148
+ 以完整编号列表展示所有 Ticket,至少包含:
134
149
 
135
- <!-- 可选:仅当 ticket 涉及非显而易见的代码区域时填写。简单 ticket 可省略整个小节。 -->
150
+ - 标题;
151
+ - 可观察交付;
152
+ - 被阻塞于;
153
+ - Planning Depth 与触发原因;
154
+ - 风险;
155
+ - Ready 状态;
156
+ - 关键未决问题;
157
+ - 预计并行组和共享路径 owner。
136
158
 
137
- | 文件 | 目的 |
138
- |------|------|
139
- | path | 为何需要阅读 |
159
+ 核对:
140
160
 
141
- ## 保留/不动
161
+ - 粒度是否适合单一上下文;
162
+ - 是否出现水平切片;
163
+ - 阻塞边是否真实;
164
+ - 是否应合并、进一步拆分或增加 prefactor;
165
+ - 合同是否全部覆盖;
166
+ - 路径所有权和验证是否可信。
142
167
 
143
- <!-- 本 ticket 绝对不能碰的代码、契约或数据。无则写"无"。 -->
168
+ 每次修改后重新展示完整列表,直到用户批准。用户明确要求一次性自主规划且不存在高影响未知项时,可使用推荐默认值并把假设写入 Ticket,不为形式重复询问。
144
169
 
145
- ## 实现要点
170
+ ### 9. 发布
146
171
 
147
- <!-- 可选:3-7 条关键技术决策。简单 ticket 可省略整个小节。 -->
172
+ 创建:
148
173
 
149
- 1. 关键技术点
150
- 2. 关键技术点
174
+ - Ticket 目录:`<Path>{roots.state}/specdev/changes/{change}/ticket/</Path>`
175
+ - Tickets Map:`<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>`
176
+ - Evidence 目录:`<Path>{roots.state}/specdev/changes/{change}/evidence/</Path>`
151
177
 
152
- ## 验收标准
178
+ 按拓扑顺序写入 Ticket:
153
179
 
154
- - [ ] 可验证的验收条件
155
- - [ ] 可验证的验收条件
180
+ ```text
181
+ <Path>{roots.state}/specdev/changes/{change}/ticket/NN-<ticket-name>.md</Path>
156
182
  ```
157
183
 
158
- **模板填写说明:**
159
-
160
- - **被阻塞于**使用指向 `./ticket/` 目录的相对路径(如 `./ticket/01-auth.md`),多个用逗号分隔。执行者应自行打开被引用的 ticket 文件查看其状态字段,判断阻塞是否已解除
161
- - **状态**初始固定为"未开始";实现者开始工作时改为"进行中",完成后改为"已完成"
162
- - **战略与背景**是必填段——为执行者提供该 ticket 的决策锚点和当前现状。从 spec、ADR、对话中提取,不确定的标记 `[待确认]`
163
- - **范围边界**是必填段——明确本 ticket 的 IN/REUSE/OUT 三列,防止范围蔓延。OUT 列吸收"明确不做"的内容
164
- - **交付物**列出本 ticket 产出的具体文件——新增标 **新增**,修改不标,重构标 **重构**。让执行者明确知道要动哪些文件
165
- - **需阅读的文件**仅在涉及非显而易见的代码区域时填写——告诉执行者上下文边界
166
- - **保留/不动**是本 ticket 的安全边界——显式列出不能碰的代码/契约/数据。无则写"无"
167
- - **实现要点**仅在 ticket 涉及有意义的架构决策时填写(3-7 条)。简单 ticket 省略
168
- - **验收标准**使用 `- [ ]` checklist 格式,每条具体、可独立验证。优先写可执行命令,其次写手动检查步骤
169
- - 描述统一使用深层模块设计词汇:模块/接口/接缝/适配器,而非组件/服务/边界
184
+ `NN` 使用两位或更多位零填充数字;Ticket frontmatter ID 使用 `T-NN`。Ticket 的 `blocked_by` 使用 Ticket ID,而不是相对文件路径。
170
185
 
171
- 避免在 ticket 文件中写入绝对路径;行号仅作近似定位提示,不作承诺。例外:如果原型产生了一个代码片段,它比文字更精确地编码了一个决策(状态机、reducer、schema、类型结构),将其内联并简要注明来自原型。精简到富含决策的部分 —— 不是可运行的演示,只是关键部分。
186
+ 使用 `<Path>{roots.workflows}/specdev/T-tickets/ticket-template.md</Path>` `<Path>{roots.workflows}/specdev/T-tickets/tickets-map-template.md</Path>` 生成工件,并对照:
172
187
 
173
- **5c. 写入 tickets-map.md**
188
+ - `<Path>{roots.workflows}/specdev/common/schemas/ticket.schema.json</Path>`
189
+ - `<Path>{roots.workflows}/specdev/common/schemas/tickets-map.schema.json</Path>`
174
190
 
175
- 创建 `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>`,作为所有 ticket 的总体地图和执行看板。格式遵循权威模板 `<Path>{roots.workflows}/specdev/T-tickets/tickets-map-template.md</Path>`——加载该模板获取完整的节结构、表格列定义和填写约定。
191
+ 运行:
176
192
 
177
- T-tickets 阶段填写的列:**编号**、**Ticket**、**被阻塞于**、**状态**(初始"未开始")。**Gate** 和 **Contract ID** 列暂留空或标注 `[待标注]`——由后续 P-goal-plan 在标注门禁层级时填充。**依赖关系**节写入基础 ASCII 树形图(阻塞链),后续 P-goal-plan 在此基础上叠加门禁边界(`--- P0 gate ---`)、就绪标记 `[READY]` 和扇出标记 `[FAN-OUT: N路并行]`。**并行规则**节按模板保留——T-tickets 阶段写入规则文本,P-goal-plan 阶段可调整并发数。
193
+ ```bash
194
+ node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> \
195
+ <Path>{roots.state}/specdev/changes/{change}</Path>
196
+ ```
178
197
 
179
- **tickets-map.md 填写说明:**
198
+ 更新 `<Path>{roots.state}/specdev/status.json</Path>` 与 `<Path>{roots.state}/specdev/changes/{change}/.status.json</Path>`。
180
199
 
181
- - **执行清单**的 Ticket 列使用指向 `./ticket/` 目录的相对链接(纯数字编号前缀,如 `./ticket/01-auth.md`)
182
- - **编号**列使用 `01`、`02`、`10` 格式(两位零填充阿拉伯数字,不含 `#`),代表依赖顺序
183
- - **被阻塞于**列填写阻塞者的编号(如 `01`、`02, 05`)
184
- - **状态**列由 T-tickets 初始化为"未开始",后续由实现者手动更新——始终以对应 ticket 文件中的状态字段为权威来源
185
- - **Gate** 列(P0/P1/P2)和 **Contract ID** 列由 P-goal-plan 填充;T-tickets 阶段留空或标 `[待标注]`
186
- - **依赖关系**用 ASCII 树形图展示阻塞链——T-tickets 写入基础结构,P-goal-plan 叠加门禁标注
187
- - **横切关注点**只放跨 ticket 的规则——单 ticket 的规则留在该 ticket 文件内
188
- - **阻塞关系说明**在依赖图非平凡时补充文字解释
200
+ ## 完成标准
189
201
 
190
- **完成标准**:`ticket/` 目录与全部 `NN-<ticket-name>.md` 已按依赖顺序写入;`tickets-map.md` 已按模板落盘(Gate / Contract ID `[待标注]`);每个 ticket 含阻塞边、战略与背景、范围边界、交付物、保留/不动与验收标准。
202
+ - Ticket 目录和 Map 已写入完整 Path 标签 所指位置;
203
+ - Spec 合同全部 covered 或有明确批准的 deferred;
204
+ - DAG 无环、阻塞引用存在;
205
+ - Ready Ticket 无高影响未知项;
206
+ - 并行 Ticket 无未解决的可写冲突;
207
+ - 每个 Ticket 可独立验证且适配单一上下文;
208
+ - Prefactor 与 expand-contract 使用条件正确;
209
+ - 用户已批准拆分或明确授权自主发布;
210
+ - 校验器无 error。
191
211
 
192
212
  ## 子文件引用
193
213
 
194
- | 文件 | 内容 | 触发条件 |
195
- |------|------|----------|
196
- | `<Path>{roots.workflows}/specdev/T-tickets/tickets-map-template.md</Path>` | tickets-map.md 权威模板——执行清单六列表格、门禁标注 DAG、并行规则、横切关注点 | 进入步骤 5c「写入 tickets-map.md」时加载——T-tickets 按此模板输出基础结构,P-goal-plan 随后标注 Gate、Contract ID 和门禁 DAG |
197
-
198
- 本入口为单文件 work,所有 ticket 拆分流程内容均已内联。以下引用供其他 work 读取产物:
199
-
200
- - `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>` —— 总体地图与执行清单(编号 | Ticket | 被阻塞于 | Gate | Contract ID | 状态),格式遵循 `<Path>{roots.workflows}/specdev/T-tickets/tickets-map-template.md</Path>`
201
- - `<Path>{roots.state}/specdev/changes/{change}/ticket/</Path>` —— 独立 ticket 文件目录,每个文件命名为 `NN-<ticket-name>.md`(`NN` = `01`, `02`, ..., `10`, ...)
202
- - `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>` —— 上游 spec(拆分依据)
203
- - `<Path>{roots.state}/specdev/adr/</Path>` —— 永久架构决策目录(已确认并提升的 ADR)
204
- - `<Path>{roots.state}/specdev/context/</Path>` —— 永久领域词汇表目录(已确认并提升的 CONTEXT)
214
+ - 拆分规则:`<Path>{roots.workflows}/specdev/T-tickets/decomposition-rules.md</Path>`
215
+ - Ticket 就绪规则:`<Path>{roots.workflows}/specdev/T-tickets/ticket-readiness.md</Path>`
216
+ - Ticket 模板:`<Path>{roots.workflows}/specdev/T-tickets/ticket-template.md</Path>`
217
+ - Tickets Map 模板:`<Path>{roots.workflows}/specdev/T-tickets/tickets-map-template.md</Path>`
205
218
 
206
219
  ## 下一步
207
220
 
208
- 如果 ticket 数量超过 10 个,建议运行 `<Path>{roots.workflows}/specdev/P-goal-plan/P-goal-plan.md</Path>` 产出目标规划文档,定义里程碑级约束、质量门禁和执行协议,为大规模协调执行做准备。
221
+ 满足任一情况时建议运行 `<Path>{roots.workflows}/specdev/P-goal-plan/P-goal-plan.md</Path>`:Ticket 数量达到或超过 10、存在多 Agent 并行、Deep Ticket、迁移、共享契约、多个 Gate 或高风险发布。少量线性 Ready Ticket 可直接进入 `<Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>`。
@@ -0,0 +1,56 @@
1
+ # Ticket 拆分规则
2
+
3
+ 本文件由 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>` 在草拟切片时加载,并受 `<Path>{roots.workflows}/specdev/common/rules/planning-principles.md</Path>` 约束。
4
+
5
+ ## 好的垂直切片
6
+
7
+ - 从稳定入口到可观察结果形成闭环;
8
+ - 包含该行为所需的最小 schema、接口、交互与测试组合;
9
+ - 完成后仓库处于可验证状态;
10
+ - 与其他切片有实质行为差异;
11
+ - 可以由一个全新上下文完成;
12
+ - 不需要执行者重新决定外部行为或公共契约。
13
+
14
+ ## 拆分信号
15
+
16
+ 出现任一情况应拆分:
17
+
18
+ - 包含两个可独立发布或验证的用户行为;
19
+ - 需要多个不同领域或架构决策;
20
+ - 预计超出单一上下文;
21
+ - `writable_paths` 过宽且可通过接缝隔离;
22
+ - 验证必须等到不相关工作完成;
23
+ - 一个部分高风险、另一部分低风险;
24
+ - 一个部分改变共享契约,其他部分只是消费者迁移。
25
+
26
+ ## 合并信号
27
+
28
+ 出现任一情况应合并:
29
+
30
+ - 两个 Ticket 单独完成都没有可观察价值或安全准备价值;
31
+ - 只是按技术层水平分割;
32
+ - 验收、代码范围和证据高度重叠;
33
+ - 依赖边只是人为交接,没有真实前置产物;
34
+ - 拆分后每个 Ticket 都需要重复相同关键上下文和同一不可分割验证。
35
+
36
+ ## 特殊模式
37
+
38
+ ### Prefactor
39
+
40
+ 必须说明解除的具体阻碍、后续受益 Ticket 和独立验证。不能只写“清理代码”。
41
+
42
+ ### Expand-contract
43
+
44
+ 先扩展兼容层,再分批迁移,最后收缩。每批应保持绿色;不能保持绿色时必须有隔离集成分支与最终集成 Gate。
45
+
46
+ ### Research spike
47
+
48
+ 未知足以阻止决策时,进入 `<Path>{roots.workflows}/specdev/W-wayfinder/W-wayfinder.md</Path>`。调查 Ticket 只回答决策问题,不顺手实现产品代码。
49
+
50
+ ### Shared contract
51
+
52
+ 先由单一 owner Ticket 修改共享契约并形成稳定证据,再扇出消费者 Ticket。共享路径规则见 `<Path>{roots.workflows}/specdev/common/rules/path-ownership.md</Path>`。
53
+
54
+ ### Bug fix
55
+
56
+ 已确认根因时,以 `<Path>{roots.state}/specdev/changes/{change}/diagnosis.md</Path>` 的修复契约为依据;根因未知时先运行 `<Path>{roots.workflows}/specdev/D-diagnose-bugs/D-diagnose-bugs.md</Path>`。
@@ -0,0 +1,45 @@
1
+ # Ticket Definition of Ready
2
+
3
+ 本检查由 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>` 使用,并细化 `<Path>{roots.workflows}/specdev/common/rules/readiness-and-depth.md</Path>`。
4
+
5
+ ## 通用门禁
6
+
7
+ - [ ] frontmatter 字段完整,Ticket ID、文件名和 `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>` 一致。
8
+ - [ ] 可观察产出单一、明确且可验证。
9
+ - [ ] 来源和验收合同映射存在。
10
+ - [ ] IN、REUSE、OUT 无冲突。
11
+ - [ ] 高影响未决问题为零。
12
+ - [ ] `blocked_by` 指向存在的 Ticket,DAG 无环。
13
+ - [ ] `expected_changes`、`writable_paths`、`read_only_paths` 和 `shared_paths` 中的项目路径都使用项目相对 Path 标签。
14
+ - [ ] `writable_paths` 非空,或明确为仅文档、调查或无代码变更。
15
+ - [ ] 每个 shared path 在 `shared_path_owners` 中有唯一 owner。
16
+ - [ ] 正常、失败和回归至少各有一条验证,或有可信的不适用原因。
17
+ - [ ] 仅当用户界面交互受影响时定义 E2E,且 owner 为 Lead 集成 Gate。
18
+ - [ ] Evidence 位置明确为 `<Path>{roots.state}/specdev/changes/{change}/evidence/{ticket-id}.md</Path>`。
19
+ - [ ] 单个全新上下文能够完成;否则已拆分。
20
+ - [ ] 所有内部文件与目录引用使用完整根变量 Path 标签。
21
+
22
+ ## Standard 门禁
23
+
24
+ - [ ] 实现契约包含入口、输入输出、不变量、状态或数据流、失败行为和兼容。
25
+ - [ ] 有 3–7 步有序执行路线。
26
+ - [ ] 路径所有权足以支持并发判断。
27
+ - [ ] 验证矩阵可以证明外部行为,而非只检查内部调用。
28
+
29
+ ## Deep 门禁
30
+
31
+ - [ ] 迁移顺序、兼容窗口、监控、回滚或前向恢复、收缩条件和批准点完整。
32
+ - [ ] 安全、隐私、资金或数据完整性风险有缓解与验证。
33
+ - [ ] 跨 Agent 路径所有权和集成 Gate 明确。
34
+ - [ ] expand-contract 的收缩条件可通过扫描、指标、查询或测试证明。
35
+
36
+ ## Ready 状态
37
+
38
+ 只有全部适用项通过时才能设置:
39
+
40
+ ```yaml
41
+ ready: true
42
+ status: ready
43
+ ```
44
+
45
+ 未通过时保持 `ready: false`,并在未决问题、阻塞原因或偏差记录中写明原因。
@@ -0,0 +1,124 @@
1
+ ---
2
+ schema_version: 3
3
+ artifact: ticket
4
+ change: <YYYY-MM-DD-topic>
5
+ id: T-01
6
+ title: <标题>
7
+ status: draft
8
+ planning_depth: standard
9
+ planning_depth_reason: <触发该深度的事实>
10
+ ready: false
11
+ risk: medium
12
+ blocked_by: []
13
+ contract_ids: [AC-001]
14
+ owner: unassigned
15
+ expected_changes: ["<Path>src/example.ts</Path>"]
16
+ writable_paths: ["<Path>src/example/**</Path>"]
17
+ read_only_paths: []
18
+ shared_paths: []
19
+ shared_path_owners: []
20
+ ---
21
+
22
+ # Ticket T-01: <标题>
23
+
24
+ - **Ticket 文件:** `<Path>{roots.state}/specdev/changes/{change}/ticket/01-<ticket-name>.md</Path>`
25
+ - **总体 Map:** `<Path>{roots.state}/specdev/changes/{change}/tickets-map.md</Path>`
26
+ - **上游 Spec:** `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`
27
+ - **完成 Evidence:** `<Path>{roots.state}/specdev/changes/{change}/evidence/T-01.md</Path>`
28
+
29
+ ## 1. 战略与来源
30
+
31
+ - **目标:** 做什么、为什么、基于什么现有能力。
32
+ - **可观察产出:** 完成后用户、调用者或系统外部可以观察到什么。
33
+ - **来源:** `US-###`、`AC-###`、`ADR-###`、`USER-DECISION`、`CODE`、`RESEARCH` 或 `DIAG-###`。
34
+ - **当前事实:** 相关现状与目标差距;项目文件使用项目相对 Path 标签,例如 `<Path>src/example.ts</Path>`。
35
+ - **Planning Depth 原因:** 说明为什么是 Lite、Standard 或 Deep。
36
+
37
+ ## 2. 决策状态
38
+
39
+ ### 已锁定决策
40
+
41
+ - ...
42
+
43
+ ### 已采用的低影响假设
44
+
45
+ - 无。
46
+
47
+ ### 未决问题
48
+
49
+ 无。
50
+
51
+ 存在会改变行为、接口、数据、兼容、安全、范围、迁移或验收的问题时,frontmatter 中 `ready` 必须为 `false`。
52
+
53
+ ## 3. 范围边界
54
+
55
+ | IN(本 Ticket 构建) | REUSE(复用且不改变契约) | OUT(明确不做) |
56
+ |---|---|---|
57
+ | ... | ... | ... |
58
+
59
+ ## 4. 要构建什么
60
+
61
+ 从用户或调用者视角描述一条完整行为路径:入口、动作、可观察结果、失败行为和边界。不要按数据库、后端、前端、测试等技术层分段罗列。
62
+
63
+ ## 5. 实现契约
64
+
65
+ <!-- Lite 可压缩为适用条目;Standard 和 Deep 必填。 -->
66
+
67
+ - **入口或接缝:**
68
+ - **输入与输出:**
69
+ - **公共接口变化:** 无 / ...
70
+ - **不变量:**
71
+ - **状态或数据流:**
72
+ - **错误与失败行为:**
73
+ - **兼容要求:**
74
+ - **安全与隐私要求:** 不适用:原因 / ...
75
+
76
+ ## 6. 执行路线
77
+
78
+ <!-- Lite 通常 1–3 步;Standard 和 Deep 通常 3–7 步。描述行为顺序、安全落点和验证时机,不写逐行代码。 -->
79
+
80
+ 1. 建立或确认验证接缝,使目标行为或关键风险按预期失败。
81
+ 2. ...
82
+ 3. 形成保持仓库可验证的安全落点。
83
+ 4. 运行定向验证和适用回归。
84
+
85
+ ## 7. 路径访问契约
86
+
87
+ - **预计修改点:** 与 `expected_changes` 对齐,仅作导航。
88
+ - **可写范围:** 与 `writable_paths` 对齐;越界前必须停止。
89
+ - **只读上下文:** 与 `read_only_paths` 对齐。
90
+ - **共享路径:** 与 `shared_paths` 对齐;每项在 `shared_path_owners` 指定唯一 owner。
91
+ - **保留或不动:** 无 / ...
92
+
93
+ 项目路径必须写成项目相对 Path 标签。SpecDev 工件必须使用完整根变量 Path 标签。
94
+
95
+ ## 8. 验证矩阵
96
+
97
+ | 行为或风险 | 验证接缝 | 命令或步骤 | 预期结果 | Evidence |
98
+ |---|---|---|---|---|
99
+ | 正常路径 | ... | ... | ... | `<Path>{roots.state}/specdev/changes/{change}/evidence/T-01.md</Path>` |
100
+ | 失败路径 | ... | ... | ... | `<Path>{roots.state}/specdev/changes/{change}/evidence/T-01.md</Path>` |
101
+ | 回归 | ... | ... | ... | `<Path>{roots.state}/specdev/changes/{change}/evidence/T-01.md</Path>` |
102
+
103
+ 不适用的关键风险类别必须写“不适用:原因”。
104
+
105
+ 仅当用户界面交互受影响时增加 E2E 行;owner 固定为 Lead 集成 Gate,Worker 只提供场景与预期。
106
+
107
+ ## 9. 发布、迁移与恢复
108
+
109
+ <!-- Deep 必填;其他深度仅在适用时保留。 -->
110
+
111
+ - **迁移顺序:** 不适用:原因 / ...
112
+ - **兼容窗口:** 不适用:原因 / ...
113
+ - **监控信号:** 不适用:原因 / ...
114
+ - **回滚或前向恢复:**
115
+ - **不可逆操作与批准点:** 无 / ...
116
+ - **收缩条件:** 不适用:原因 / 旧调用点、旧数据或旧协议使用量为零并有 Evidence。
117
+
118
+ ## 10. 验收标准
119
+
120
+ - [ ] `AC-001`:<可判定结果>。
121
+ - [ ] 验证矩阵全部执行并记录到 `<Path>{roots.state}/specdev/changes/{change}/evidence/T-01.md</Path>`。
122
+ - [ ] 实际项目修改未超出 `writable_paths`,shared path 由指定 owner 修改。
123
+ - [ ] 未发生未批准的范围、契约或发布偏差。
124
+ - [ ] Ticket、Tickets Map 和 Evidence 状态一致。