@namewta/speculo 0.2.3 → 0.2.7

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 (131) hide show
  1. package/README.md +11 -15
  2. package/dist/src/index.js +72 -8
  3. package/dist/src/index.js.map +1 -1
  4. package/dist/src/migrate.js +8 -8
  5. package/dist/src/migrate.js.map +1 -1
  6. package/dist/src/workflows.js +2 -2
  7. package/dist/src/workflows.js.map +1 -1
  8. package/package.json +1 -1
  9. package/template/.speculo/README.md +3 -3
  10. package/template/AGENTS.md +4 -0
  11. package/template/CLAUDE.md +3 -0
  12. package/template/canonical/README.md +114 -0
  13. package/template/canonical/canonical-domain-modeling.md +289 -0
  14. package/template/canonical/canonical-skill-example.md +608 -0
  15. package/template/canonical/canonical-teach.md +296 -0
  16. package/template/commands/archive-and-consolidate.md +49 -0
  17. package/template/commands/docs-sync.md +2 -2
  18. package/template/commands/retro.md +1 -1
  19. package/template/commands/status.md +2 -2
  20. package/template/skills/archive-and-consolidate/SKILL.md +179 -0
  21. package/template/skills/archive-and-consolidate/assets/archive-plan-template.md +34 -0
  22. package/template/skills/archive-and-consolidate/assets/cleanup-candidate-template.md +69 -0
  23. package/template/skills/archive-and-consolidate/assets/consolidation-plan-template.md +67 -0
  24. package/template/skills/archive-and-consolidate/references/archive-rules.md +48 -0
  25. package/template/skills/archive-and-consolidate/references/cleanup-rules.md +73 -0
  26. package/template/skills/archive-and-consolidate/references/consolidation-rules.md +70 -0
  27. package/template/skills/archive-and-consolidate/references/knowledge-graduation.md +50 -0
  28. package/template/skills/docs-sync/references/workflow-scope-contract.md +3 -3
  29. package/template/skills/speculo-retro/SKILL.md +1 -1
  30. package/template/skills/speculo-retro/references/issue-drafting-sop.md +1 -1
  31. package/template/skills/worktree-isolation/references/merge-and-cleanup.md +2 -2
  32. package/template/vendor/README.md +3 -3
  33. package/template/vendor/khazix-skills/neat-freak/SKILL.md +210 -0
  34. package/template/vendor/khazix-skills/neat-freak/references/agent-paths.md +72 -0
  35. package/template/vendor/khazix-skills/neat-freak/references/governance.md +88 -0
  36. package/template/vendor/khazix-skills/neat-freak/references/sync-matrix.md +77 -0
  37. package/template/vendor/khazix-skills/neat-freak/references/verification.md +92 -0
  38. package/template/vendor/khazix-skills/neat-freak/scripts/audit-inventory.sh +106 -0
  39. package/template/workflows/person/INDEX.md +12 -0
  40. package/template/workflows/person/M-mao-zedong-cognitive-os/M-mao-zedong-cognitive-os.md +73 -74
  41. package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +85 -0
  42. package/template/workflows/specdev/D-diagnose-bugs/cleanup-postmortem.md +37 -0
  43. package/template/workflows/specdev/D-diagnose-bugs/feedback-loop-techniques.md +84 -0
  44. package/template/workflows/specdev/D-diagnose-bugs/hypothesis-format.md +46 -0
  45. package/template/workflows/specdev/D-diagnose-bugs/instrumentation-rules.md +51 -0
  46. package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +54 -0
  47. package/template/workflows/specdev/G-grill-with-docs/adr-format.md +77 -0
  48. package/template/workflows/specdev/G-grill-with-docs/context-format.md +63 -0
  49. package/template/workflows/specdev/G-grill-with-docs/domain-modeling-rules.md +93 -0
  50. package/template/workflows/specdev/G-grill-with-docs/grilling-protocol.md +54 -0
  51. package/template/workflows/specdev/G-grill-with-docs/log-format.md +99 -0
  52. package/template/workflows/specdev/I-implement/I-implement.md +85 -0
  53. package/template/workflows/specdev/I-implement/code-review-process.md +83 -0
  54. package/template/workflows/specdev/I-implement/codebase-design-glossary.md +109 -0
  55. package/template/workflows/specdev/I-implement/deepening.md +37 -0
  56. package/template/workflows/specdev/I-implement/design-it-twice.md +44 -0
  57. package/template/workflows/specdev/I-implement/tdd-examples.md +139 -0
  58. package/template/workflows/specdev/I-implement/tdd-rules.md +31 -0
  59. package/template/workflows/specdev/I-init-setup/I-init-setup.md +132 -0
  60. package/template/workflows/specdev/I-init-setup/domain-layout.md +90 -0
  61. package/template/workflows/specdev/I-init-setup/status-labels.md +54 -0
  62. package/template/workflows/specdev/I-init-setup/tracking-convention.md +58 -0
  63. package/template/workflows/specdev/INDEX.md +88 -0
  64. package/template/workflows/specdev/S-spec/S-spec.md +91 -0
  65. package/template/workflows/specdev/T-tickets/T-tickets.md +241 -0
  66. package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +209 -0
  67. package/template/workflows/specdev/_state/adr/.gitkeep +0 -0
  68. package/template/workflows/specdev/_state/archive/.gitkeep +0 -0
  69. package/template/workflows/specdev/_state/changes/.gitkeep +0 -0
  70. package/template/workflows/specdev/_state/context/.gitkeep +0 -0
  71. package/template/workflows/{matt-pocock → specdev}/_state/status.json +1 -1
  72. package/template/commands/finalize.md +0 -37
  73. package/template/commands/knowledge-prune.md +0 -20
  74. package/template/skills/change-lifecycle/SKILL.md +0 -25
  75. package/template/skills/change-lifecycle/assets/completion-summary-template.md +0 -25
  76. package/template/skills/change-lifecycle/assets/completion-verification-template.md +0 -29
  77. package/template/skills/change-lifecycle/references/completion-gate.md +0 -19
  78. package/template/skills/change-lifecycle/references/finalize-archive.md +0 -32
  79. package/template/skills/knowledge-prune/SKILL.md +0 -29
  80. package/template/skills/knowledge-prune/references/audit-rules.md +0 -24
  81. package/template/skills/runtime-context/SKILL.md +0 -54
  82. package/template/skills/runtime-context/references/path-resolution.md +0 -41
  83. package/template/workflows/matt-pocock/PERSISTENCE.md +0 -80
  84. package/template/workflows/matt-pocock/WORKFLOW.md +0 -103
  85. package/template/workflows/matt-pocock/_state/archive/.gitkeep +0 -1
  86. package/template/workflows/matt-pocock/_state/changes/.gitkeep +0 -1
  87. package/template/workflows/matt-pocock/atomic-skills/ask-matt.md +0 -21
  88. package/template/workflows/matt-pocock/atomic-skills/claude-handoff.md +0 -21
  89. package/template/workflows/matt-pocock/atomic-skills/code-review.md +0 -21
  90. package/template/workflows/matt-pocock/atomic-skills/codebase-design.md +0 -21
  91. package/template/workflows/matt-pocock/atomic-skills/diagnosing-bugs.md +0 -21
  92. package/template/workflows/matt-pocock/atomic-skills/domain-modeling.md +0 -21
  93. package/template/workflows/matt-pocock/atomic-skills/grill-me.md +0 -21
  94. package/template/workflows/matt-pocock/atomic-skills/grill-with-docs.md +0 -21
  95. package/template/workflows/matt-pocock/atomic-skills/grilling.md +0 -21
  96. package/template/workflows/matt-pocock/atomic-skills/handoff.md +0 -21
  97. package/template/workflows/matt-pocock/atomic-skills/implement.md +0 -21
  98. package/template/workflows/matt-pocock/atomic-skills/improve-codebase-architecture.md +0 -21
  99. package/template/workflows/matt-pocock/atomic-skills/loop-me.md +0 -21
  100. package/template/workflows/matt-pocock/atomic-skills/prototype.md +0 -21
  101. package/template/workflows/matt-pocock/atomic-skills/research.md +0 -21
  102. package/template/workflows/matt-pocock/atomic-skills/resolving-merge-conflicts.md +0 -21
  103. package/template/workflows/matt-pocock/atomic-skills/setup-matt-pocock-skills.md +0 -21
  104. package/template/workflows/matt-pocock/atomic-skills/tdd.md +0 -21
  105. package/template/workflows/matt-pocock/atomic-skills/teach.md +0 -21
  106. package/template/workflows/matt-pocock/atomic-skills/to-spec.md +0 -21
  107. package/template/workflows/matt-pocock/atomic-skills/to-tickets.md +0 -21
  108. package/template/workflows/matt-pocock/atomic-skills/triage.md +0 -21
  109. package/template/workflows/matt-pocock/atomic-skills/wayfinder.md +0 -21
  110. package/template/workflows/matt-pocock/atomic-skills/wizard.md +0 -21
  111. package/template/workflows/matt-pocock/atomic-skills/writing-beats.md +0 -21
  112. package/template/workflows/matt-pocock/atomic-skills/writing-fragments.md +0 -21
  113. package/template/workflows/matt-pocock/atomic-skills/writing-great-skills.md +0 -21
  114. package/template/workflows/matt-pocock/atomic-skills/writing-shape.md +0 -20
  115. package/template/workflows/matt-pocock/routes/architecture.md +0 -24
  116. package/template/workflows/matt-pocock/routes/diagnose.md +0 -22
  117. package/template/workflows/matt-pocock/routes/experimental.md +0 -18
  118. package/template/workflows/matt-pocock/routes/idea-to-delivery.md +0 -63
  119. package/template/workflows/matt-pocock/routes/merge-conflicts.md +0 -19
  120. package/template/workflows/matt-pocock/routes/productivity.md +0 -25
  121. package/template/workflows/matt-pocock/routes/research-prototype.md +0 -20
  122. package/template/workflows/matt-pocock/routes/review.md +0 -19
  123. package/template/workflows/matt-pocock/routes/setup.md +0 -42
  124. package/template/workflows/matt-pocock/routes/triage.md +0 -25
  125. package/template/workflows/matt-pocock/routes/wayfinder.md +0 -27
  126. package/template/workflows/person/PERSISTENCE.md +0 -56
  127. package/template/workflows/person/WORKFLOW.md +0 -50
  128. package/template/workflows/person/_state/.config/LESSONS.md +0 -3
  129. package/template/workflows/person/_state/.config/RULES.md +0 -3
  130. package/template/workflows/person/_state/.config/context/.gitkeep +0 -1
  131. package/template/workflows/person/_templates/mao-consultation-output-template.md +0 -55
@@ -0,0 +1,12 @@
1
+ ---
2
+ id: person/index
3
+ type: workflow-index
4
+ workflow: person
5
+ auto_generated: true
6
+ ---
7
+
8
+ # person — Work Index
9
+
10
+ > 本文件由 `generate-index.mjs` 自动生成,**禁止手动编辑**。
11
+
12
+ - **M-mao-zedong-cognitive-os** — 毛泽东认知操作系统:以毛泽东方法论为底座的问题诊断、战略制定与行动规划咨询
@@ -9,81 +9,80 @@ keywords: [毛泽东, 毛选, 矛盾分析, 战略, 组织, 咨询]
9
9
 
10
10
  # 毛泽东 · 认知操作系统
11
11
 
12
- 本入口把“分析问题—制定战略—组织行动”组织为渐进披露的咨询流程。产物写入当前 `person/changes/<change>/`。
13
-
14
- ## 阶段
15
-
16
- ```xml
17
- <sequence>
18
- <phase id="activate" order="1">
19
- <instructions root="workflow" path="M-mao-zedong-cognitive-os/activate.md" />
20
- <artifact root="change" path="problem-statement.md" />
21
- <completion>首次激活声明已执行,问题陈述无 TODO。</completion>
22
- </phase>
23
- <phase id="diagnose" order="2">
24
- <instructions root="workflow" path="M-mao-zedong-cognitive-os/diagnose.md" />
25
- <artifact root="change" path="analysis.md" />
26
- <completion>至少两个诊断模型已应用,分析无 TODO。</completion>
27
- </phase>
28
- <phase id="strategize" order="3">
29
- <instructions root="workflow" path="M-mao-zedong-cognitive-os/strategize.md" />
30
- <artifact root="change" path="strategy.md" />
31
- <completion>主要矛盾和战略框架已确认。</completion>
32
- </phase>
33
- <phase id="mobilize" order="4">
34
- <instructions root="workflow" path="M-mao-zedong-cognitive-os/mobilize.md" />
35
- <artifact root="change" path="action-plan.md" />
36
- <completion>行动、责任与反馈机制已明确。</completion>
37
- </phase>
38
- <phase id="deliver" order="5">
39
- <instructions root="workflow" path="M-mao-zedong-cognitive-os/deliver.md" />
40
- <template root="workflow" path="_templates/mao-consultation-output-template.md" />
41
- <artifact root="change" path="consultation-output.md" />
42
- <completion>综合输出无 TODO,并经用户确认。</completion>
43
- </phase>
44
- </sequence>
45
- ```
46
-
47
- ## 依赖
48
-
49
- ```xml
50
- <dependencies>
51
- <dependency kind="hard" from="diagnose" to="activate" />
52
- <dependency kind="hard" from="strategize" to="diagnose" />
53
- <dependency kind="hard" from="mobilize" to="strategize" />
54
- <dependency kind="hard" from="deliver" to="mobilize" />
55
- </dependencies>
56
- ```
57
-
58
- ## 状态扩展字段
59
-
60
- ```xml
61
- <state-schema>
62
- <field name="problem_type" type="string" />
63
- <field name="primary_framework" type="string" />
64
- <field name="models_applied" type="array" />
65
- <field name="frameworks_applied" type="array" />
66
- <field name="methods_applied" type="array" />
67
- <field name="quotes_cited" type="array" />
68
- <field name="consultation_status" type="activating|diagnosing|strategizing|mobilizing|delivering|completed" />
69
- </state-schema>
70
- ```
71
-
72
- ## 状态转移
73
-
74
- ```xml
75
- <transitions>
76
- <transition from="activate" to="diagnose" />
77
- <transition from="diagnose" to="strategize" />
78
- <transition from="strategize" to="mobilize" />
79
- <transition from="mobilize" to="deliver" />
80
- <transition from="deliver" to="finalize">
81
- <command root="commands" path="finalize.md" />
82
- <when>用户确认综合咨询输出。</when>
83
- </transition>
84
- </transitions>
85
- ```
12
+ 本入口把"分析问题—制定战略—组织行动"组织为渐进披露的咨询流程。产物写入当前 `person/changes/<change>/`。
13
+
14
+ ## 流程
15
+
16
+ ### 1. 激活与问诊
17
+
18
+ 委托给 `<Path>{roots.workflows}/person/M-mao-zedong-cognitive-os/activate.md</Path>`。输出首次激活声明,通过开口三问摸清用户处境,判定问题类型并匹配主框架。
19
+
20
+ 产物:`<Path>{roots.state}/person/changes/{change}/problem-statement.md</Path>`
21
+
22
+ **完成标准**:首次激活声明已输出,至少已追问 2 个开口问题且用户已回应,问题类型与主框架已匹配,problem-statement.md 六段均已填写无残留 `[TODO:]`。
23
+
24
+ ### 2. 诊断分析
25
+
26
+ 依赖步骤 1 的 problem-statement.md。委托给 `<Path>{roots.workflows}/person/M-mao-zedong-cognitive-os/diagnose.md</Path>`。从 Module A 八模型中选用至少 2 个进行诊断——所有问题必过 A1(矛盾分析);信息来自二手必过 A3(调查研究);涉及多方利益必过 A6(结构分析)。
27
+
28
+ 产物:`<Path>{roots.state}/person/changes/{change}/analysis.md</Path>`
29
+
30
+ **完成标准**:已应用至少 2 个 Module A 模型,每个模型结论带条件与局限,主要矛盾已明确写出且带论证,analysis.md 无残留 `[TODO:]`。
31
+
32
+ ### 3. 战略制定
33
+
34
+ 依赖步骤 2 的 analysis.md。委托给 `<Path>{roots.workflows}/person/M-mao-zedong-cognitive-os/strategize.md</Path>`。沿元框架流水线(定性→定向→站位→时间→投放→运用)展开主框架,必要时补充辅助框架。
35
+
36
+ 产物:`<Path>{roots.state}/person/changes/{change}/strategy.md</Path>`
37
+
38
+ **完成标准**:主框架已选定并充分展开,阶段划分清晰(至少分两步),有明确的关键战役判断,strategy.md 无残留 `[TODO:]`。
39
+
40
+ ### 4. 组织行动
41
+
42
+ 依赖步骤 3 的 strategy.md。委托给 `<Path>{roots.workflows}/person/M-mao-zedong-cognitive-os/mobilize.md</Path>`。将战略转化为具体行动方案——谁来干、干什么、什么时候干完、干到什么程度算好、干砸了怎么办。
43
+
44
+ 产物:`<Path>{roots.state}/person/changes/{change}/action-plan.md</Path>`
45
+
46
+ **完成标准**:行动、责任与反馈机制已明确,action-plan.md 无残留 `[TODO:]`。
47
+
48
+ ### 5. 综合交付
49
+
50
+ 依赖前四步全部产物。委托给 `<Path>{roots.workflows}/person/M-mao-zedong-cognitive-os/deliver.md</Path>`。按模板 `../_templates/mao-consultation-output-template.md` 整合为连贯的教员第一人称咨询输出——五拍论证节奏、收尾四动作、引用纪律、反模式检查和内在张力标注。
51
+
52
+ 产物:`<Path>{roots.state}/person/changes/{change}/consultation-output.md</Path>`
53
+
54
+ **完成标准**:已整合四阶段产物为连贯的教员第一人称咨询输出,五拍论证节奏可辨识,收尾四动作齐全,所有毛泽东原文引用均带篇目出处,反模式检查通过,consultation-output.md 无残留 `[TODO:]`。
55
+
56
+ ## 依赖关系
57
+
58
+ - 步骤 2「诊断分析」依赖步骤 1「激活与问诊」
59
+ - 步骤 3「战略制定」依赖步骤 2「诊断分析」
60
+ - 步骤 4「组织行动」依赖步骤 3「战略制定」
61
+ - 步骤 5「综合交付」依赖步骤 4「组织行动」
62
+
63
+ 所有步骤为硬依赖——前一产物必须完成并验证后才能进入下一步。
64
+
65
+ ## 状态追踪
66
+
67
+ 咨询过程中维护以下状态字段,记录在 `<Path>{roots.state}/person/status.json</Path>` 中:
68
+
69
+ - **`problem_type`**(字符串)—— 问题类型,从激活阶段的问题类型表中选定
70
+ - **`primary_framework`**(字符串)—— 匹配的主框架及篇目编号
71
+ - **`models_applied`**(数组)—— 诊断阶段已应用的 Module A 模型列表
72
+ - **`frameworks_applied`**(数组)—— 战略阶段已应用的 Module B 框架列表
73
+ - **`methods_applied`**(数组)—— 组织阶段已应用的 Module C 方法列表
74
+ - **`quotes_cited`**(数组)—— 已引用的毛泽东原话及出处
75
+ - **`consultation_status`**(字符串)—— 当前阶段:`activating` → `diagnosing` → `strategizing` → `mobilizing` → `delivering` → `completed`
86
76
 
87
77
  ## 渐进披露
88
78
 
89
79
  角色、声音、模型和引用规则继续由各 phase 文件及其相对引用拥有;未进入 phase 时不加载对应材料。
80
+
81
+ | 文件 | 触发条件 |
82
+ |------|----------|
83
+ | `<Path>{roots.workflows}/person/M-mao-zedong-cognitive-os/activate.md</Path>` | 步骤 1「激活与问诊」进入时 |
84
+ | `<Path>{roots.workflows}/person/M-mao-zedong-cognitive-os/diagnose.md</Path>` | 步骤 2「诊断分析」进入时 |
85
+ | `<Path>{roots.workflows}/person/M-mao-zedong-cognitive-os/strategize.md</Path>` | 步骤 3「战略制定」进入时 |
86
+ | `<Path>{roots.workflows}/person/M-mao-zedong-cognitive-os/mobilize.md</Path>` | 步骤 4「组织行动」进入时 |
87
+ | `<Path>{roots.workflows}/person/M-mao-zedong-cognitive-os/deliver.md</Path>` | 步骤 5「综合交付」进入时 |
88
+ | `<Path>{roots.workflows}/person/M-mao-zedong-cognitive-os/books/README.md</Path>` | 需要查原文时——引语库 `references/research/15-quote-bank.md` 映射篇目编号到 books 目录 |
@@ -0,0 +1,85 @@
1
+ ---
2
+ id: specdev/diagnose-bugs
3
+ type: workflow-entry
4
+ workflow: specdev
5
+ name: 诊断
6
+ description: 针对疑难 bug 建立诊断循环——构建紧凑反馈回路、复现最小化、可证伪假设排名、插桩定位根因,确认后移交 I-implement 修复。
7
+ keywords: [诊断, 调试, bug, 反馈回路, 假设, 根因分析]
8
+ ---
9
+
10
+ # 诊断
11
+
12
+ 针对疑难 bug 的诊断规程。先建立紧凑的反馈回路锚定症状,再通过可证伪假设排名定位根因,确认后移交 I-implement 执行修复。仅在明确有理由时才跳过阶段。
13
+
14
+ 在开始诊断之前,读取当前变更的上下文与架构决策:
15
+
16
+ - **CONTEXT.md** —— 项目领域术语与概念:`<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>`
17
+ - **ADR.md** —— 架构决策记录:`<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`
18
+
19
+ 如果这些文件不存在,先运行 `<Path>{roots.workflows}/specdev/W-wayfinder/W-wayfinder.md</Path>` 或询问用户以建立上下文。
20
+
21
+ ## 流程
22
+
23
+ ### 1. 加载上下文
24
+
25
+ 读取 `<Path>{roots.state}/specdev/status.json</Path>` 确认活跃变更。读取 CONTEXT.md 获取领域词汇表——使用其中已定义的术语。读取 ADR.md 了解已做出的架构决策——诊断过程中涉及的模块若与已有 ADR 相关,在假设中引用。
26
+
27
+ **完成标准**:活跃变更已确认,领域词汇表和架构决策已加载。`{change}` 已确定。
28
+
29
+ ### 2. 构建反馈回路
30
+
31
+ 委托给 `<Path>{roots.workflows}/specdev/D-diagnose-bugs/feedback-loop-techniques.md</Path>`。构建一个紧凑的通过/失败信号——一条命令,确定性、秒级、agent 可无人值守运行。在此投入不成比例的精力:反馈回路是诊断的超能力。如果确实无法构建回路,向用户明确说明已尝试的方法并请求访问复现环境或捕获产物。
32
+
33
+ **完成标准**:反馈回路紧凑且具备变红能力——一条命令已运行并通过/失败输出验证,确定性、秒级、agent 可运行。回路断言的是用户的确切症状,而非"运行不出错"。
34
+
35
+ ### 3. 复现与最小化
36
+
37
+ 运行回路,确认它产生用户描述的故障模式。然后逐元素削减输入、调用者、配置和数据——每次削减后重新运行回路——只保留对故障有负载作用的部分。
38
+
39
+ **完成标准**:回路已复现用户症状。复现场景已最小化——每个剩余元素都有负载作用,移除任何一个都会使回路变绿。
40
+
41
+ ### 4. 提出诊断计划
42
+
43
+ 委托给 `<Path>{roots.workflows}/specdev/D-diagnose-bugs/hypothesis-format.md</Path>`。生成 3-5 个排名假设,每个假设必须是可证伪的——陈述其预测。将排名列表作为诊断计划呈现给用户确认。用户可能拥有立即重排名的领域知识。如果用户 AFK,按排名继续。
44
+
45
+ **完成标准**:3-5 个可证伪假设已排名并作为诊断计划呈现给用户。用户已确认或 AFK 下按排名继续。
46
+
47
+ ### 5. 插桩验证
48
+
49
+ 委托给 `<Path>{roots.workflows}/specdev/D-diagnose-bugs/instrumentation-rules.md</Path>`。每个探测映射到诊断计划中的一个具体预测。每次只改变一个变量。使用调试器/REPL 优先于日志。所有调试日志使用 `[DEBUG-xxxx]` 唯一前缀标记。
50
+
51
+ **完成标准**:根因已通过插桩确认——某个假设的预测已验证,其他假设已排除。所有探测结果与诊断计划中的预测对应。
52
+
53
+ ### 6. 移交修复
54
+
55
+ 调用 `<Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>` 执行修复。移交以下信息:
56
+
57
+ - **根因描述**——哪个假设被确认,通过什么探测验证
58
+ - **最小复现场景**——阶段 3 产出的最小化复现,可直接转为回归测试
59
+ - **建议的修复接缝**——在哪个模块/接口处修复最合适
60
+
61
+ 修复、回归测试编写和提交由 I-implement 完成。如果不存在正确的测试缝合点,将此发现记录到 `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>` 并在步骤 7 的事后分析中提出架构改进建议。
62
+
63
+ **完成标准**:I-implement 已启动,根因描述、最小复现、建议修复接缝已移交。
64
+
65
+ ### 7. 清理与复盘
66
+
67
+ 委托给 `<Path>{roots.workflows}/specdev/D-diagnose-bugs/cleanup-postmortem.md</Path>`。移除所有 `[DEBUG-xxxx]` 标记的插桩代码,删除一次性原型。在 `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>` 中记录:被证实的假设、根因、修复提交。执行事后分析——什么本可以预防这个 bug?如果涉及架构变更,提出改进建议。
68
+
69
+ **完成标准**:调试产物已清理(grep `[DEBUG-` 无残留),根因已记录到 LOG.md,预防建议已提出。
70
+
71
+ ---
72
+
73
+ ## 子文件引用
74
+
75
+ | 文件 | 内容 | 触发条件 |
76
+ |------|------|---------|
77
+ | `<Path>{roots.workflows}/specdev/D-diagnose-bugs/feedback-loop-techniques.md</Path>` | 10 种反馈回路构建技术、收紧回路、非确定性 bug 策略、无法构建回路时的升级路径、最小化协议 | 步骤 2「构建反馈回路」和步骤 3「复现与最小化」进入时 |
78
+ | `<Path>{roots.workflows}/specdev/D-diagnose-bugs/hypothesis-format.md</Path>` | 可证伪假设格式模板、排名规则、用户 Plan 呈现模板、AFK 默认行为 | 步骤 4「提出诊断计划」进入时 |
79
+ | `<Path>{roots.workflows}/specdev/D-diagnose-bugs/instrumentation-rules.md</Path>` | 探测映射规则、工具偏好、`[DEBUG-xxxx]` 标记约定、性能分支处理 | 步骤 5「插桩验证」进入时 |
80
+ | `<Path>{roots.workflows}/specdev/D-diagnose-bugs/cleanup-postmortem.md</Path>` | 清理检查清单、事后分析问题、预防建议记录格式 | 步骤 7「清理与复盘」进入时 |
81
+
82
+ ## 依赖关系
83
+
84
+ - 依赖 `<Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>` 执行修复——步骤 6 移交已确认的根因和最小复现
85
+ - 依赖 `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>` 和 `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` 提供领域上下文——步骤 1 加载
@@ -0,0 +1,37 @@
1
+ # 清理与事后分析
2
+
3
+ 诊断完成、修复已由 I-implement 执行后,必须完成以下清理和复盘。
4
+
5
+ ## 清理检查清单
6
+
7
+ 逐项确认:
8
+
9
+ - [ ] 原始复现不再复现——重新运行阶段 2 的反馈回路,确认变绿
10
+ - [ ] 回归测试通过——I-implement 已为修复编写并通过回归测试
11
+ - [ ] 所有 `[DEBUG-xxxx]` 插桩已移除——`grep -r "\[DEBUG-"` 项目根目录,确认无残留
12
+ - [ ] 一次性原型已删除——移除所有为诊断创建的临时脚本、测试夹具、mock 数据
13
+ - [ ] 被证实的假设已记录到 `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>`,以便下一个调试者学习
14
+
15
+ ## 记录根因
16
+
17
+ 在 `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>` 中追加条目:
18
+
19
+ ```markdown
20
+ ## [YYYY-MM-DD] 诊断:<bug 简述>
21
+
22
+ - **根因**:<被证实的假设,包含技术细节>
23
+ - **验证方式**:<哪个探测确认了根因>
24
+ - **修复提交**:<I-implement 的提交 hash 或描述>
25
+ - **预防建议**:<什么本可以预防此 bug>
26
+ ```
27
+
28
+ ## 事后分析
29
+
30
+ 问:什么本可以预防这个 bug?从以下维度审视:
31
+
32
+ - **测试缝合点**——是否缺少合适的测试接缝?如果有好的缝合点,此 bug 是否会被更早发现?
33
+ - **接口设计**——接口是否暴露了容易误用的契约?深度是否足够防止调用者犯错?
34
+ - **数据边界**——是否缺少输入校验、类型约束或边界条件处理?
35
+ - **耦合**——是否因模块间的隐藏耦合导致变更的连锁反应?
36
+
37
+ 如果答案涉及架构变更(没有好的测试缝合点、纠缠的调用者、隐藏的耦合),将具体情况记录到 LOG.md 的预防建议中。在修复之后提出建议——此时比诊断开始时拥有更多信息。
@@ -0,0 +1,84 @@
1
+ # 反馈回路构建技术
2
+
3
+ 反馈回路是诊断的核心——一个紧凑的通过/失败信号,锚定 bug 的症状。以下技术按大致优先级排列,从最理想到最后手段。
4
+
5
+ ## 构建方式
6
+
7
+ 按顺序尝试,直到获得一个可工作的回路:
8
+
9
+ ### 1. 失败测试
10
+
11
+ 在能触及 bug 的任意缝合点编写——单元测试、集成测试、端到端测试。优先选择现有的测试缝合点。观察项目中已有的测试了解如何注入测试。
12
+
13
+ ### 2. Curl / HTTP 脚本
14
+
15
+ 针对正在运行的开发服务器。固定请求参数,对响应状态码和关键字段进行断言。
16
+
17
+ ### 3. CLI 调用
18
+
19
+ 带固定输入调用 CLI,将 stdout 与已知良好快照进行 diff。适合命令行工具和数据管道。
20
+
21
+ ### 4. 无头浏览器脚本
22
+
23
+ Playwright 或 Puppeteer 驱动 UI,对 DOM 状态、控制台输出、网络请求进行断言。适合前端 bug。
24
+
25
+ ### 5. 回放捕获的追踪数据
26
+
27
+ 将真实网络请求、负载、事件日志保存到磁盘,在隔离环境中通过代码路径回放。适合需要真实数据的场景。
28
+
29
+ ### 6. 一次性测试夹具
30
+
31
+ 启动系统的最小子集——一个服务、模拟依赖——用单个函数调用驱动 bug 代码路径。适合微服务或多组件交互的 bug。
32
+
33
+ ### 7. 属性 / 模糊测试循环
34
+
35
+ 如果 bug 表现为"有时输出错误",运行 1000 次随机输入寻找故障模式。适合数据相关或边界条件 bug。
36
+
37
+ ### 8. 二分查找夹具
38
+
39
+ 如果 bug 出现在两个已知状态之间(commit、数据集、版本),自动化"在状态 X 启动、检查、重复"以便 `git bisect run`。
40
+
41
+ ### 9. 差分循环
42
+
43
+ 通过旧版本 vs 新版本(或两种配置)运行相同输入,对输出进行 diff。适合回归 bug。
44
+
45
+ ### 10. HITL bash 脚本
46
+
47
+ 最后手段。如果必须由人工点击,使用 `<Path>{roots.vendor}/matt-pocock/engineering/diagnosing-bugs/scripts/hitl-loop.template.sh</Path>` 驱动人工操作,使循环仍然结构化。捕获的输出反馈给 agent。
48
+
49
+ 复制模板,编辑步骤,运行脚本。脚本中的 `step` 函数显示指令并等待按 Enter,`capture` 函数显示问题并读取响应。结束时以 `KEY=VALUE` 格式打印捕获的值供 agent 解析。
50
+
51
+ ## 收紧回路
52
+
53
+ 将回路视为产品。一旦有了一个回路,收紧它:
54
+
55
+ - **更快**——缓存设置、跳过无关初始化、缩小测试范围
56
+ - **更清晰**——针对具体症状断言,而非"没崩溃"
57
+ - **更确定**——固定时间、种子随机数、隔离文件系统、冻结网络
58
+
59
+ 一个 30 秒的抖动回路比没有回路好不了多少;一个 2 秒的确定性回路是调试的超能力。
60
+
61
+ ## 非确定性 bug
62
+
63
+ 目标不是干净的复现,而是更高的复现率。循环触发 100 次,并行化,增加压力,缩小时间窗口,注入 sleep。50% 抖动的 bug 是可调试的;1% 则不行——持续提高复现率直到可调试。
64
+
65
+ ## 当确实无法构建回路时
66
+
67
+ 停下来,明确说明。列出已尝试的方法。向用户请求:
68
+
69
+ 1. 访问能复现的任何环境
70
+ 2. 一个捕获的产物——HAR 文件、日志转储、核心转储、带时间戳的屏幕录制
71
+ 3. 添加临时生产环境插桩的许可
72
+
73
+ 在没有回路的情况下进入假设阶段是本规程要防止的核心失败模式。没有变红能力的命令,就没有后续阶段。
74
+
75
+ ## 最小化协议
76
+
77
+ 复现后,将场景缩小到仍能变红的最小场景。逐个削减以下元素,每次削减后重新运行回路:
78
+
79
+ 1. 输入数据——减少字段、缩小数据集、简化参数
80
+ 2. 调用者——移除中间层、直接调用核心逻辑
81
+ 3. 配置——使用默认值、移除环境变量
82
+ 4. 步骤——跳过前置操作、合并中间步骤
83
+
84
+ 每个剩余元素必须有负载作用——移除其中任何一个都会使回路变绿。最小复现场景缩小了假设空间,并成为最终的回归测试基础。
@@ -0,0 +1,46 @@
1
+ # 假设格式与诊断计划
2
+
3
+ 在插桩之前生成多个排名假设。单一假设会锚定在第一个看似合理的想法上。每个假设必须是可证伪的——陈述其预测。
4
+
5
+ ## 假设格式
6
+
7
+ 每个假设使用以下模板:
8
+
9
+ > 如果 `<根因>` 是原因,那么 `<改变 X>` 会使 bug 消失 / `<改变 Z>` 会使它更糟。
10
+
11
+ 无法陈述预测的假设只是感觉——精炼或丢弃它。
12
+
13
+ 示例:
14
+
15
+ > 如果缓存键在用户 ID 包含特殊字符时生成错误,那么将用户 ID 替换为纯字母数字字符串会使 bug 消失,而保持原 ID 并在缓存查询前打印键值会显示格式错误的键。
16
+
17
+ ## 排名规则
18
+
19
+ 生成 3-5 个假设,按以下优先级排名:
20
+
21
+ 1. **最近变更**——最近修改的代码区域优先。新代码是 bug 最常见的来源。
22
+ 2. **数据边界**——涉及空值、特殊字符、极限值、类型转换的假设优先于一般逻辑错误。
23
+ 3. **时序与并发**——涉及竞态条件、异步顺序、超时的假设在单线程同步假设之后。
24
+ 4. **外部依赖**——涉及第三方库、API 响应变更、环境差异的假设排在最后。
25
+
26
+ ## 诊断计划呈现
27
+
28
+ 将排名假设列表作为诊断计划呈现给用户。使用以下格式:
29
+
30
+ ```markdown
31
+ ## 诊断计划
32
+
33
+ 基于当前症状和代码库理解,以下是 3-5 个按优先级排名的可证伪假设:
34
+
35
+ 1. **[假设名称]** —— 如果 `<根因>` 是原因,那么 `<预测>`。
36
+ 2. **[假设名称]** —— 如果 `<根因>` 是原因,那么 `<预测>`。
37
+ ...
38
+
39
+ 请确认计划或调整优先级。你是否已经排除了其中任何一个?
40
+ ```
41
+
42
+ 用户通常拥有能立即重排名的领域知识——低成本检查点,大幅节省时间。向用户展示后等待确认。
43
+
44
+ ## AFK 默认行为
45
+
46
+ 如果用户 AFK(无响应),按排名继续——从排名最高的假设开始插桩验证。在每个假设被排除后,更新排名并继续下一个,无需等待确认。
@@ -0,0 +1,51 @@
1
+ # 插桩验证规则
2
+
3
+ 每个探测必须映射到诊断计划中的一个具体预测。每次只改变一个变量。
4
+
5
+ ## 探测映射
6
+
7
+ 在添加任何插桩之前,明确陈述:
8
+
9
+ - 此探测验证诊断计划中的哪个假设、哪个预测
10
+ - 期望看到什么结果(如果假设正确)
11
+ - 期望看到什么结果(如果假设错误)
12
+
13
+ 每次探测后记录实际结果,与预测对照。如果预测不匹配,该假设被排除,移至下一个。
14
+
15
+ ## 工具偏好
16
+
17
+ 按优先级选择插桩方式:
18
+
19
+ ### 1. 调试器 / REPL 检查
20
+
21
+ 如果环境支持,优先使用。一个断点胜过十行日志。在关键路径上设置条件断点,检查变量状态和调用栈。
22
+
23
+ ### 2. 针对性日志
24
+
25
+ 在能区分假设的边界处添加日志——模块接口、数据转换点、分支条件。日志内容应包含:
26
+
27
+ - 所在假设的简短标识
28
+ - 关键变量的值
29
+ - 与预测相关的状态信息
30
+
31
+ ### 3. 每条日志必须有明确的验证目标
32
+
33
+ 全量日志淹没信号。每条日志单独对应一个假设预测,通过唯一前缀追溯到诊断计划中的具体条目。
34
+
35
+ ## 调试日志标记
36
+
37
+ 所有调试日志使用唯一前缀标记,格式为 `[DEBUG-xxxx]`,其中 `xxxx` 为 4 位随机字母数字(如 `[DEBUG-a4f2]`)。在日志消息中包含:
38
+
39
+ ```javascript
40
+ console.log(`[DEBUG-a4f2] 缓存键: ${cacheKey}, 用户ID: ${userId}`)
41
+ ```
42
+
43
+ 最终的清理只需一次 `grep`——未标记的日志保留,已标记的日志删除。
44
+
45
+ ## 性能分支
46
+
47
+ 对于性能回归,日志通常是错误工具。替代方案:
48
+
49
+ 1. 建立基线测量——计时夹具、`performance.now()`、分析器、查询计划
50
+ 2. 二分查找——定位引入回归的变更点
51
+ 3. 先测量,后修复——在没有测量基线的情况下,任何优化都是猜测
@@ -0,0 +1,54 @@
1
+ ---
2
+ id: specdev/grill-with-docs
3
+ type: workflow-entry
4
+ workflow: specdev
5
+ name: 设计访谈(带文档)
6
+ description: 无情访谈打磨设计,同时持续产出 ADR.md、LOG.md 和 CONTEXT.md 三个领域文档。在设计讨论中捕获术语定义、记录架构决策、保存完整设计轨迹。
7
+ keywords: [设计, 访谈, 领域建模, ADR, 决策记录, 词汇表, 设计轨迹]
8
+ ---
9
+
10
+ # 设计访谈(带文档)
11
+
12
+ 组合 work——grilling 访谈技术 + domain-modeling 领域建模规程,在无情盘问中打磨设计,同时持续写入 ADR.md、LOG.md 和 CONTEXT.md 三个领域文档。访谈负责深度提问与共识达成,领域建模负责在决策结晶的瞬间捕获术语、记录轨迹、筛选架构决策。
13
+
14
+ 产物统一写入 `<Path>{roots.state}/specdev/changes/{change}/</Path>`,其中 `{change}` 为 `<YYYY-MM-DD>-<topic>` 格式。
15
+
16
+ ## 流程
17
+
18
+ ### 1. 启动变更
19
+
20
+ 创建 `<Path>{roots.state}/specdev/changes/{change}/</Path>` 目录(`{change}` 为 `<YYYY-MM-DD>-<topic>` 格式),初始化三个空文件模板:
21
+
22
+ - `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` — 架构决策记录,仅含 `# 架构决策记录` 标题
23
+ - `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>` — 设计决策日志,含 `# 设计决策日志` 标题及维护规则说明
24
+ - `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>` — 领域词汇表,含 `# {主题} 领域词汇表` 标题及一两句描述
25
+
26
+ **完成标准**:变更目录 `<YYYY-MM-DD>-<topic>` 已创建,初始 ADR.md/LOG.md/CONTEXT.md 已就位。
27
+
28
+ ### 2. 访谈
29
+
30
+ 委托给 `<Path>{roots.workflows}/specdev/G-grill-with-docs/grilling-protocol.md</Path>`。一次一问,沿设计树逐分支推进,在用户确认共识之前不执行方案。访谈过程中随时更新 `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>`,记录每个确认、延后、替代的结论。
31
+
32
+ **完成标准**:访谈完成——一次一问,决策树已遍历,共识已达成。LOG.md 已同步所有访谈结论。
33
+
34
+ ### 3. 捕获文档
35
+
36
+ 委托给 `<Path>{roots.workflows}/specdev/G-grill-with-docs/domain-modeling-rules.md</Path>`。对照词汇表挑战术语、精炼模糊语言、讨论具体场景、与代码交叉引用。
37
+
38
+ - `<Path>{roots.state}/specdev/changes/{change}/LOG.md</Path>` 同步所有结论
39
+ - `<Path>{roots.state}/specdev/changes/{change}/CONTEXT.md</Path>` 精炼术语定义
40
+ - `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` 仅追加满足三条件的架构决策(参见 `<Path>{roots.workflows}/specdev/G-grill-with-docs/adr-format.md</Path>`)
41
+
42
+ **完成标准**:LOG.md 已同步所有结论;CONTEXT.md 已精炼术语;ADR.md 已追加满足三条件的架构决策。
43
+
44
+ ## 子文件引用
45
+
46
+ 本入口及以下子文件按需加载:
47
+
48
+ | 文件 | 触发条件 |
49
+ |------|----------|
50
+ | `<Path>{roots.workflows}/specdev/G-grill-with-docs/grilling-protocol.md</Path>` | 进入步骤 2「访谈」时加载——包含完整访谈协议,一次一问、推荐答案、决策树遍历、LOG.md 同步规则 |
51
+ | `<Path>{roots.workflows}/specdev/G-grill-with-docs/domain-modeling-rules.md</Path>` | 进入步骤 3「捕获文档」时加载——包含三文件分工、对照词汇表挑战、精炼与交叉引用规程、同步规则 |
52
+ | `<Path>{roots.workflows}/specdev/G-grill-with-docs/adr-format.md</Path>` | 需要创建或修改 ADR 条目时加载——单一 ADR.md 文件格式、编号规则、三条件检查、可选元素 |
53
+ | `<Path>{roots.workflows}/specdev/G-grill-with-docs/context-format.md</Path>` | 需要增删改术语时加载——CONTEXT.md 结构、定义规则、增删改操作说明 |
54
+ | `<Path>{roots.workflows}/specdev/G-grill-with-docs/log-format.md</Path>` | 需要记录设计结论时加载——LOG.md 格式、状态标记、编号规则、追加与修订规程 |
@@ -0,0 +1,77 @@
1
+ # ADR.md 格式
2
+
3
+ 所有架构决策记录存放在变更目录的单一 `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>` 文件中。不使用 `docs/adr/` 目录下的编号文件,所有决策在一个文件内按二级标题分段。
4
+
5
+ ## 模板
6
+
7
+ ```md
8
+ # 架构决策记录
9
+
10
+ ## 0001: {决策的简短标题}
11
+
12
+ {1-3 句话:背景是什么,我们做了什么决策,以及为什么。}
13
+
14
+ ---
15
+
16
+ ## 0002: {另一决策标题}
17
+
18
+ {1-3 句话描述。}
19
+
20
+ ---
21
+ ```
22
+
23
+ 每个决策是一个 `##` 二级标题,编号从 `0001` 开始顺序递增。决策之间用 `---` 分隔。
24
+
25
+ 就这样。一个 ADR 条目可以就是一个段落。其价值在于记录*已经*做出了决策以及*为什么*——而不是填满各个部分。
26
+
27
+ ## 追加新决策
28
+
29
+ 1. 读取 `<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`,找到最高现有编号
30
+ 2. 编号加 1
31
+ 3. 在文件末尾追加 `---` 分隔线和新条目
32
+
33
+ ## 可选附加元素
34
+
35
+ 仅当它们真正增加价值时才包含这些。大多数 ADR 不需要它们:
36
+
37
+ - **日期**——在标题行的 `{标题}` 后面加 `(YYYY-MM-DD)`
38
+ - **Status**——`**Status**: proposed | accepted | deprecated | superseded by ADR-NNNN`。当决策被重新审视时,直接修改状态标记
39
+ - **Considered Options**——仅当被拒绝的替代方案值得记住时
40
+ - **Consequences**——仅当需要指出非显而易见的下游影响时
41
+
42
+ ### 带可选元素的示例
43
+
44
+ ```md
45
+ ## 0003: 写模型采用事件溯源(2025-03-15)
46
+
47
+ **Status**: accepted
48
+
49
+ Order 聚合需要完整的变更历史用于审计和补偿。我们选择事件溯源——
50
+ 所有状态变更作为不可变事件存储,当前状态从中投影。
51
+
52
+ **Considered Options**:
53
+ - 事件溯源(已选)——天然审计日志,支持时间旅行调试
54
+ - CRUD + 审计表——更简单,但审计日志与业务逻辑解耦,容易不同步
55
+ - 仅 CRUD——无审计历史,不满足合规要求
56
+
57
+ **Consequences**:
58
+ - 写路径复杂度增加;读路径需要投影
59
+ - 事件 schema 演进需要显式版本策略
60
+ ```
61
+
62
+ ## 修改已有决策
63
+
64
+ - **澄清或补充后果**——直接编辑条目正文
65
+ - **改变状态**——修改 `**Status**` 字段(如 accepted → deprecated)
66
+ - **废弃**——将状态改为 `deprecated`,如被新决策替代则加上 `superseded by ADR-NNNN`
67
+ - **不要删除**——即使决策被废弃,保留条目作为历史上下文
68
+
69
+ ## 三条件检查
70
+
71
+ 在创建 ADR 之前,确认以下三个条件同时为真:
72
+
73
+ 1. **难以逆转**——以后改变主意的成本是实质性的。容易逆转的决策跳过——你反正会逆转的。
74
+ 2. **没有上下文的话令人惊讶**——未来的读者会看着代码想"他们到底为什么这样做?"。不令人惊讶的决策没人会追问,不需要记录。
75
+ 3. **真实权衡的结果**——确实存在替代方案,你基于特定原因选择了一个。没有真正的替代方案就没有可记录的,除了"我们做了显而易见的事"。
76
+
77
+ 如果决策不满足全部三个条件,只记入 LOG.md,不追加 ADR。