@namewta/speculo 0.1.20 → 0.2.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 (275) hide show
  1. package/README.md +68 -78
  2. package/dist/src/cli.js +57 -34
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/index.d.ts +1 -3
  5. package/dist/src/index.js +128 -168
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/migrate.d.ts +38 -0
  8. package/dist/src/migrate.js +646 -0
  9. package/dist/src/migrate.js.map +1 -0
  10. package/dist/src/workflows.d.ts +7 -37
  11. package/dist/src/workflows.js +49 -123
  12. package/dist/src/workflows.js.map +1 -1
  13. package/package.json +6 -4
  14. package/template/.speculo/README.md +20 -0
  15. package/template/.speculo/workspace.json +12 -0
  16. package/template/commands/docs-sync.md +28 -0
  17. package/template/commands/finalize.md +37 -0
  18. package/template/commands/knowledge-prune.md +20 -0
  19. package/template/commands/retro.md +15 -8
  20. package/template/commands/status.md +8 -51
  21. package/template/skills/agents-md-builder/SKILL.md +14 -101
  22. package/template/skills/change-lifecycle/SKILL.md +25 -0
  23. package/template/{workflows/dev/_templates → skills/change-lifecycle/assets}/completion-summary-template.md +2 -2
  24. package/template/{workflows/dev/_templates → skills/change-lifecycle/assets}/completion-verification-template.md +1 -1
  25. package/template/skills/change-lifecycle/references/completion-gate.md +19 -0
  26. package/template/skills/change-lifecycle/references/finalize-archive.md +32 -0
  27. package/template/skills/docs-sync/SKILL.md +22 -0
  28. package/template/skills/docs-sync/assets/report-template.md +45 -0
  29. package/template/skills/docs-sync/assets/state-template.json +20 -0
  30. package/template/skills/docs-sync/assets/workflow-scope-template.json +9 -0
  31. package/template/skills/docs-sync/references/agents-contract.md +43 -0
  32. package/template/skills/docs-sync/references/changelog-contract.md +39 -0
  33. package/template/skills/docs-sync/references/document-lifecycle-contract.md +38 -0
  34. package/template/skills/docs-sync/references/git-state-contract.md +67 -0
  35. package/template/skills/docs-sync/references/readme-contract.md +44 -0
  36. package/template/skills/docs-sync/references/workflow-scope-contract.md +50 -0
  37. package/template/skills/github-npm-ops/SKILL.md +14 -39
  38. package/template/skills/github-npm-ops/references/failure-recovery.md +3 -3
  39. package/template/skills/github-npm-ops/references/issue-pr-triage.md +1 -1
  40. package/template/skills/github-npm-ops/references/preflight-checklist.md +4 -4
  41. package/template/skills/github-npm-ops/references/release-notes-injection.md +1 -1
  42. package/template/skills/github-npm-ops/references/release-pipeline.md +13 -13
  43. package/template/skills/github-npm-ops/references/version-bump-flow.md +3 -3
  44. package/template/skills/knowledge-prune/SKILL.md +29 -0
  45. package/template/skills/knowledge-prune/references/audit-rules.md +24 -0
  46. package/template/skills/runtime-context/SKILL.md +43 -0
  47. package/template/skills/runtime-context/references/path-resolution.md +32 -0
  48. package/template/skills/speculo-retro/SKILL.md +13 -37
  49. package/template/skills/speculo-retro/references/friction-taxonomy.md +3 -3
  50. package/template/skills/speculo-retro/references/issue-drafting-sop.md +3 -3
  51. package/template/skills/worktree-isolation/SKILL.md +10 -46
  52. package/template/skills/worktree-isolation/references/audit-branch-tree.md +2 -2
  53. package/template/skills/worktree-isolation/references/create-worktree.md +6 -6
  54. package/template/skills/worktree-isolation/references/merge-and-cleanup.md +5 -5
  55. package/template/vendor/README.md +11 -10
  56. package/template/vendor/matt-pocock/README.md +41 -0
  57. package/template/vendor/matt-pocock/engineering/README.md +28 -0
  58. package/template/vendor/matt-pocock/engineering/ask-matt/SKILL.md +76 -0
  59. package/template/vendor/matt-pocock/engineering/code-review/SKILL.md +89 -0
  60. package/template/vendor/matt-pocock/engineering/codebase-design/DEEPENING.md +37 -0
  61. package/template/vendor/matt-pocock/engineering/codebase-design/DESIGN-IT-TWICE.md +44 -0
  62. package/template/vendor/matt-pocock/engineering/codebase-design/SKILL.md +114 -0
  63. package/template/vendor/matt-pocock/engineering/diagnosing-bugs/SKILL.md +134 -0
  64. package/template/vendor/matt-pocock/engineering/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
  65. package/template/vendor/matt-pocock/engineering/domain-modeling/ADR-FORMAT.md +47 -0
  66. package/template/vendor/matt-pocock/engineering/domain-modeling/CONTEXT-FORMAT.md +60 -0
  67. package/template/vendor/matt-pocock/engineering/domain-modeling/SKILL.md +74 -0
  68. package/template/vendor/matt-pocock/engineering/grill-with-docs/SKILL.md +7 -0
  69. package/template/vendor/matt-pocock/engineering/implement/SKILL.md +15 -0
  70. package/template/vendor/matt-pocock/engineering/improve-codebase-architecture/HTML-REPORT.md +123 -0
  71. package/template/vendor/matt-pocock/engineering/improve-codebase-architecture/SKILL.md +66 -0
  72. package/template/vendor/matt-pocock/engineering/prototype/LOGIC.md +79 -0
  73. package/template/vendor/matt-pocock/engineering/prototype/SKILL.md +30 -0
  74. package/template/vendor/matt-pocock/engineering/prototype/UI.md +112 -0
  75. package/template/vendor/matt-pocock/engineering/research/SKILL.md +12 -0
  76. package/template/vendor/matt-pocock/engineering/resolving-merge-conflicts/SKILL.md +14 -0
  77. package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/SKILL.md +127 -0
  78. package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/domain.md +51 -0
  79. package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/issue-tracker-github.md +45 -0
  80. package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/issue-tracker-gitlab.md +46 -0
  81. package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/issue-tracker-local.md +30 -0
  82. package/template/vendor/matt-pocock/engineering/setup-matt-pocock-skills/triage-labels.md +15 -0
  83. package/template/vendor/matt-pocock/engineering/tdd/SKILL.md +36 -0
  84. package/template/vendor/matt-pocock/engineering/tdd/mocking.md +59 -0
  85. package/template/vendor/matt-pocock/engineering/tdd/tests.md +77 -0
  86. package/template/vendor/matt-pocock/engineering/to-spec/SKILL.md +75 -0
  87. package/template/vendor/matt-pocock/engineering/to-tickets/SKILL.md +113 -0
  88. package/template/vendor/matt-pocock/engineering/triage/AGENT-BRIEF.md +204 -0
  89. package/template/vendor/matt-pocock/engineering/triage/OUT-OF-SCOPE.md +104 -0
  90. package/template/vendor/matt-pocock/engineering/triage/SKILL.md +112 -0
  91. package/template/vendor/matt-pocock/engineering/wayfinder/SKILL.md +127 -0
  92. package/template/vendor/matt-pocock/in-progress/README.md +10 -0
  93. package/template/vendor/matt-pocock/in-progress/claude-handoff/SKILL.md +18 -0
  94. package/template/vendor/matt-pocock/in-progress/loop-me/SKILL.md +32 -0
  95. package/template/vendor/matt-pocock/in-progress/wizard/SKILL.md +45 -0
  96. package/template/vendor/matt-pocock/in-progress/wizard/template.sh +211 -0
  97. package/template/vendor/matt-pocock/in-progress/writing-beats/SKILL.md +67 -0
  98. package/template/vendor/matt-pocock/in-progress/writing-fragments/SKILL.md +78 -0
  99. package/template/vendor/matt-pocock/in-progress/writing-shape/SKILL.md +79 -0
  100. package/template/vendor/matt-pocock/productivity/README.md +18 -0
  101. package/template/vendor/matt-pocock/productivity/grill-me/SKILL.md +7 -0
  102. package/template/vendor/matt-pocock/productivity/grilling/SKILL.md +12 -0
  103. package/template/vendor/matt-pocock/productivity/handoff/SKILL.md +16 -0
  104. package/template/vendor/matt-pocock/productivity/teach/GLOSSARY-FORMAT.md +35 -0
  105. package/template/vendor/matt-pocock/productivity/teach/LEARNING-RECORD-FORMAT.md +46 -0
  106. package/template/vendor/matt-pocock/productivity/teach/MISSION-FORMAT.md +31 -0
  107. package/template/vendor/matt-pocock/productivity/teach/RESOURCES-FORMAT.md +32 -0
  108. package/template/vendor/matt-pocock/productivity/teach/SKILL.md +140 -0
  109. package/template/vendor/matt-pocock/productivity/writing-great-skills/GLOSSARY.md +201 -0
  110. package/template/vendor/matt-pocock/productivity/writing-great-skills/SKILL.md +83 -0
  111. package/template/workflows/matt-pocock/WORKFLOW.md +145 -0
  112. package/template/workflows/matt-pocock/_state/status.json +5 -0
  113. package/template/workflows/matt-pocock/routes/architecture.md +24 -0
  114. package/template/workflows/matt-pocock/routes/diagnose.md +22 -0
  115. package/template/workflows/matt-pocock/routes/experimental.md +18 -0
  116. package/template/workflows/matt-pocock/routes/idea-to-delivery.md +63 -0
  117. package/template/workflows/matt-pocock/routes/merge-conflicts.md +19 -0
  118. package/template/workflows/matt-pocock/routes/productivity.md +25 -0
  119. package/template/workflows/matt-pocock/routes/research-prototype.md +20 -0
  120. package/template/workflows/matt-pocock/routes/review.md +19 -0
  121. package/template/workflows/matt-pocock/routes/setup.md +42 -0
  122. package/template/workflows/matt-pocock/routes/triage.md +25 -0
  123. package/template/workflows/matt-pocock/routes/wayfinder.md +27 -0
  124. package/template/workflows/person/M-mao-zedong-cognitive-os/M-mao-zedong-cognitive-os.md +74 -185
  125. package/template/workflows/person/M-mao-zedong-cognitive-os/activate.md +3 -2
  126. package/template/workflows/person/M-mao-zedong-cognitive-os/books/README.md +12 -238
  127. package/template/workflows/person/M-mao-zedong-cognitive-os/deliver.md +6 -5
  128. package/template/workflows/person/M-mao-zedong-cognitive-os/diagnose.md +5 -63
  129. package/template/workflows/person/M-mao-zedong-cognitive-os/mobilize.md +7 -54
  130. package/template/workflows/person/M-mao-zedong-cognitive-os/references/research/15-quote-bank.md +10 -10
  131. package/template/workflows/person/M-mao-zedong-cognitive-os/strategize.md +6 -72
  132. package/template/workflows/person/WORKFLOW.md +68 -0
  133. package/template/workflows/person/_state/.config/LESSONS.md +3 -0
  134. package/template/workflows/person/_state/.config/RULES.md +3 -0
  135. package/template/workflows/person/_state/changes/.gitkeep +1 -0
  136. package/template/workflows/person/_state/status.json +5 -0
  137. package/template/.speculo/.config/LESSONS.md +0 -9
  138. package/template/.speculo/.config/RULES.md +0 -11
  139. package/template/.speculo/AGENTS.md +0 -30
  140. package/template/.speculo/archive/AGENTS.md +0 -28
  141. package/template/.speculo/archive/dev/.gitkeep +0 -0
  142. package/template/.speculo/archive/person/.gitkeep +0 -0
  143. package/template/.speculo/dev/.gitkeep +0 -0
  144. package/template/.speculo/dev/docs-sync-state.json +0 -14
  145. package/template/.speculo/dev-status.json +0 -3
  146. package/template/.speculo/doc-status.json +0 -3
  147. package/template/.speculo/person/.gitkeep +0 -0
  148. package/template/.speculo/person-status.json +0 -1
  149. package/template/commands/archive.md +0 -68
  150. package/template/commands/caveman.md +0 -50
  151. package/template/commands/config-prune.md +0 -59
  152. package/template/commands/grill-me.md +0 -48
  153. package/template/commands/handoff.md +0 -59
  154. package/template/commands/scaffold-exercises.md +0 -56
  155. package/template/commands/write-a-skill.md +0 -52
  156. package/template/skills/caveman/SKILL.md +0 -38
  157. package/template/skills/caveman/references/compression-rules.md +0 -102
  158. package/template/skills/config-prune/SKILL.md +0 -66
  159. package/template/skills/grill-me/SKILL.md +0 -40
  160. package/template/skills/handoff/SKILL.md +0 -50
  161. package/template/skills/scaffold-exercises/SKILL.md +0 -41
  162. package/template/skills/scaffold-exercises/references/exercise-structure.md +0 -85
  163. package/template/skills/scaffold-exercises/references/lint-and-git.md +0 -54
  164. package/template/skills/speculo-write/SKILL.md +0 -56
  165. package/template/skills/speculo-write/references/asset-selection-sop.md +0 -67
  166. package/template/skills/speculo-write/references/authoring-quality-levers.md +0 -61
  167. package/template/skills/speculo-write/references/command-authoring-sop.md +0 -98
  168. package/template/skills/speculo-write/references/migration-sop.md +0 -101
  169. package/template/skills/speculo-write/references/persistence-contract-sop.md +0 -192
  170. package/template/skills/speculo-write/references/skill-authoring-sop.md +0 -212
  171. package/template/skills/speculo-write/references/validation-checklist.md +0 -85
  172. package/template/skills/speculo-write/references/workflow-authoring-sop.md +0 -132
  173. package/template/vendor/codebase-design/DEEPENING.md +0 -37
  174. package/template/vendor/codebase-design/DESIGN-IT-TWICE.md +0 -44
  175. package/template/vendor/codebase-design/SKILL.md +0 -114
  176. package/template/vendor/officecli/SKILL.md +0 -415
  177. package/template/vendor/resolving-merge-conflicts/SKILL.md +0 -14
  178. package/template/workflows/dev/01-grill-with-docs/01-grill-with-docs.md +0 -107
  179. package/template/workflows/dev/01-grill-with-docs/grill-context-scan.md +0 -30
  180. package/template/workflows/dev/01-grill-with-docs/grill-decision.md +0 -38
  181. package/template/workflows/dev/02-prd/02-prd.md +0 -70
  182. package/template/workflows/dev/02-prd/prd-synthesis.md +0 -30
  183. package/template/workflows/dev/02-prd/prd-zoom-out.md +0 -29
  184. package/template/workflows/dev/03-tdd/03-tdd.md +0 -158
  185. package/template/workflows/dev/03-tdd/mocking.md +0 -43
  186. package/template/workflows/dev/03-tdd/refactoring.md +0 -10
  187. package/template/workflows/dev/03-tdd/tdd-finish.md +0 -34
  188. package/template/workflows/dev/03-tdd/tdd-loop.md +0 -36
  189. package/template/workflows/dev/03-tdd/tdd-plan.md +0 -37
  190. package/template/workflows/dev/03-tdd/tests.md +0 -61
  191. package/template/workflows/dev/04-finalize/04-finalize.md +0 -137
  192. package/template/workflows/dev/04-finalize/completion-gate.md +0 -41
  193. package/template/workflows/dev/04-finalize/finalize-archive.md +0 -55
  194. package/template/workflows/dev/A-improve-architecture/A-improve-architecture.md +0 -143
  195. package/template/workflows/dev/A-improve-architecture/HTML-REPORT.md +0 -123
  196. package/template/workflows/dev/AGENTS.md +0 -87
  197. package/template/workflows/dev/D-docs-sync/D-docs-sync.md +0 -127
  198. package/template/workflows/dev/D-docs-sync/agents-contract.md +0 -95
  199. package/template/workflows/dev/D-docs-sync/changelog-contract.md +0 -155
  200. package/template/workflows/dev/D-docs-sync/config-contract.md +0 -75
  201. package/template/workflows/dev/D-docs-sync/docs-sync-diff.md +0 -86
  202. package/template/workflows/dev/D-docs-sync/docs-sync-finish.md +0 -37
  203. package/template/workflows/dev/D-docs-sync/docs-sync-state.md +0 -47
  204. package/template/workflows/dev/D-docs-sync/docs-sync-update.md +0 -44
  205. package/template/workflows/dev/D-docs-sync/knowledge-extract.md +0 -66
  206. package/template/workflows/dev/D-docs-sync/readme-contract.md +0 -124
  207. package/template/workflows/dev/D-docs-sync/state-json-schema.md +0 -172
  208. package/template/workflows/dev/H-diagnose/H-diagnose.md +0 -119
  209. package/template/workflows/dev/H-diagnose/diagnose-fix.md +0 -34
  210. package/template/workflows/dev/H-diagnose/diagnose-guide.md +0 -144
  211. package/template/workflows/dev/H-diagnose/diagnose-loop.md +0 -41
  212. package/template/workflows/dev/H-diagnose/scripts/hitl-loop.template.sh +0 -41
  213. package/template/workflows/dev/I-to-issues/I-to-issues.md +0 -140
  214. package/template/workflows/dev/I-to-issues/issues-slices.md +0 -211
  215. package/template/workflows/dev/M-domain-modeling/ADR-FORMAT.md +0 -74
  216. package/template/workflows/dev/M-domain-modeling/CONTEXT-FORMAT.md +0 -67
  217. package/template/workflows/dev/M-domain-modeling/M-domain-modeling.md +0 -118
  218. package/template/workflows/dev/R-review/R-review.md +0 -163
  219. package/template/workflows/dev/R-review/code-quality-checklist.md +0 -118
  220. package/template/workflows/dev/R-review/removal-checklist.md +0 -53
  221. package/template/workflows/dev/R-review/review-axes.md +0 -61
  222. package/template/workflows/dev/R-review/review-setup.md +0 -73
  223. package/template/workflows/dev/R-review/review-verdict.md +0 -43
  224. package/template/workflows/dev/R-review/security-checklist.md +0 -126
  225. package/template/workflows/dev/R-review/solid-checklist.md +0 -73
  226. package/template/workflows/dev/_templates/diagnosis-template.md +0 -20
  227. package/template/workflows/dev/_templates/docs-sync-report-template.md +0 -45
  228. package/template/workflows/dev/_templates/docs-sync-state-template.json +0 -14
  229. package/template/workflows/dev/_templates/domain-model-log-template.md +0 -20
  230. package/template/workflows/dev/_templates/grill-context-map-template.md +0 -20
  231. package/template/workflows/dev/_templates/grill-decision-log-template.md +0 -20
  232. package/template/workflows/dev/_templates/issues-slices-template.md +0 -106
  233. package/template/workflows/dev/_templates/prd-overview-template.md +0 -20
  234. package/template/workflows/dev/_templates/prd-template.md +0 -26
  235. package/template/workflows/dev/_templates/regression-template.md +0 -20
  236. package/template/workflows/dev/_templates/review-report-template.md +0 -30
  237. package/template/workflows/dev/_templates/review-sources-template.md +0 -33
  238. package/template/workflows/dev/_templates/review-verdict-template.md +0 -33
  239. package/template/workflows/dev/_templates/tdd-log-template.md +0 -23
  240. package/template/workflows/dev/_templates/tdd-plan-template.md +0 -35
  241. package/template/workflows/dev/_templates/tdd-verification-template.md +0 -26
  242. package/template/workflows/doc/AGENTS.md +0 -72
  243. package/template/workflows/doc/B-writing-beats/B-writing-beats.md +0 -79
  244. package/template/workflows/doc/B-writing-beats/writing-beats-append.md +0 -31
  245. package/template/workflows/doc/B-writing-beats/writing-beats-options.md +0 -29
  246. package/template/workflows/doc/E-edit-article/E-edit-article.md +0 -79
  247. package/template/workflows/doc/E-edit-article/edit-article-plan.md +0 -30
  248. package/template/workflows/doc/E-edit-article/edit-article-rewrite.md +0 -31
  249. package/template/workflows/doc/F-writing-fragments/F-writing-fragments.md +0 -80
  250. package/template/workflows/doc/F-writing-fragments/writing-fragments-interview.md +0 -32
  251. package/template/workflows/doc/F-writing-fragments/writing-fragments-log.md +0 -29
  252. package/template/workflows/doc/S-writing-shape/S-writing-shape.md +0 -81
  253. package/template/workflows/doc/S-writing-shape/writing-shape-block.md +0 -32
  254. package/template/workflows/doc/S-writing-shape/writing-shape-opening.md +0 -27
  255. package/template/workflows/doc/T-teach/T-teach.md +0 -147
  256. package/template/workflows/doc/T-teach/teach-lesson-wrap.md +0 -63
  257. package/template/workflows/doc/T-teach/teach-lesson.md +0 -53
  258. package/template/workflows/doc/T-teach/teach-mission.md +0 -33
  259. package/template/workflows/doc/T-teach/teach-resources.md +0 -36
  260. package/template/workflows/doc/_templates/edit-article-plan-template.md +0 -25
  261. package/template/workflows/doc/_templates/edit-article-template.md +0 -7
  262. package/template/workflows/doc/_templates/teach-glossary-template.md +0 -26
  263. package/template/workflows/doc/_templates/teach-learning-record-template.md +0 -38
  264. package/template/workflows/doc/_templates/teach-mission-template.md +0 -19
  265. package/template/workflows/doc/_templates/teach-resources-template.md +0 -18
  266. package/template/workflows/doc/_templates/writing-article-template.md +0 -7
  267. package/template/workflows/doc/_templates/writing-beat-options-template.md +0 -21
  268. package/template/workflows/doc/_templates/writing-fragments-template.md +0 -7
  269. package/template/workflows/doc/_templates/writing-interview-log-template.md +0 -21
  270. package/template/workflows/doc/_templates/writing-shape-log-template.md +0 -25
  271. package/template/workflows/person/AGENTS.md +0 -60
  272. /package/template/{.speculo/.config/adr → workflows/matt-pocock/_state/archive}/.gitkeep +0 -0
  273. /package/template/{.speculo/.config/context → workflows/matt-pocock/_state/changes}/.gitkeep +0 -0
  274. /package/template/{.speculo/archive/doc → workflows/person/_state/.config/context}/.gitkeep +0 -0
  275. /package/template/{.speculo/doc → workflows/person/_state/archive}/.gitkeep +0 -0
@@ -1,192 +0,0 @@
1
- # Persistence Contract SOP
2
-
3
- `.status.json` schema、目录命名、frontmatter 最小集与写入责任的内化规范。
4
- 本文把 Speculo 持久化契约内化进本 skill,编写资产时**不读仓库 `docs/`**。
5
-
6
- > # ⚠️ 持久化铁律
7
- >
8
- > **Speculo 框架的所有运行时产物,必须且只能存放在 `speculo/.speculo/` 目录中。**
9
- >
10
- > - Workflow 产物 → `speculo/.speculo/<cat>/<change>/`
11
- > - Command 产物 → `speculo/.speculo/commands/<YYYY-MM-DD>-<cmd>-<topic>/`
12
- > - Skill **不自行持久化** → 由调用方写入 `speculo/.speculo/...` 或返回内容
13
- > - **绝对禁止** → `temp/`、系统临时目录、项目根目录的裸 `.speculo/`
14
-
15
- ## 命名铁律
16
-
17
- > ⚠️ **所有 change 目录、command 产物目录、归档路径必须以 `YYYY-MM-DD-` 开头。无一例外。**
18
-
19
- 不带日期的目录名是**无效的**。
20
-
21
- ### 谁必须带日期
22
-
23
- | 必须带 | 规则 | 谁创建 |
24
- |--------|------|--------|
25
- | Change 目录 | `YYYY-MM-DD-<kebab-name>` | Workflow(AI 按用户意图创建) |
26
- | Command 产物目录 | `YYYY-MM-DD-<cmd-name>-<topic>` | Command(AI 执行命令时创建) |
27
- | 归档目标目录 | `archive/<cat>/<YYYY-MM>/<change-name>/` | `archive` 命令或 `dev/04` 工作流 |
28
-
29
- ### 谁不需要带日期
30
-
31
- | 不需要带 | 原因 |
32
- |----------|------|
33
- | Workflow 阶段目录(如 `01-grill-with-docs/`) | 框架资产,非运行时产物 |
34
- | Skill 目录(如 `caveman/`) | 框架资产,非运行时产物 |
35
- | Command 文件(如 `archive.md`) | 框架资产,非运行时产物 |
36
- | 模板文件(`_templates/`) | 框架资产,非运行时产物 |
37
- | `.config/`、`adr/`、`context/` | 项目配置目录 |
38
-
39
- ### 反例
40
-
41
- | ❌ 错误 | ✅ 正确 |
42
- |---------|---------|
43
- | `user-auth` | `2026-06-12-user-auth` |
44
- | `fix-bug` | `2026-06-12-fix-login-bug` |
45
- | `prd-draft` | `2026-06-12-prd-user-flow` |
46
- | `status-snapshot/` | `2026-06-12-status-snapshot/` |
47
-
48
- ### AI 代理执行规则
49
-
50
- 1. **创建 change 目录时**:必须从当前日期生成 `YYYY-MM-DD-<kebab-name>`,`<kebab-name>` 从用户意图提取。
51
- 2. **创建 command 产物目录时**:必须从当前日期生成 `YYYY-MM-DD-<cmd-name>-<topic>`。
52
- 3. **扫描已有 change 时**:不符合 `YYYY-MM-DD-<kebab-name>` 的目录视为 `malformed`,必须汇报用户。
53
- 4. **归档时**:目标路径必须包含 `archive/<cat>/<YYYY-MM>/`,`<YYYY-MM>` 从 change 目录名中的日期提取。
54
-
55
- ## 目录命名
56
-
57
- | 类别 | 模式 | 例 |
58
- |------|------|---|
59
- | Change 目录 | `YYYY-MM-DD-<kebab-name>` | `2026-05-28-user-auth` |
60
- | Command 产物目录 | `YYYY-MM-DD-<cmd-name>-<topic>` | `2026-05-28-debug-login-500` |
61
- | 归档目录 | `archive/<cat>/<YYYY-MM>/<change-name>/` | `archive/dev/2026-05/2026-05-20-payment-flow/` |
62
-
63
- `<cat>` 只能是 `dev`、`doc`、`ops`。
64
-
65
- 命令产生的持久化报告、快照、handoff 和一次性操作记录必须统一写入 `speculo/.speculo/commands/<YYYY-MM-DD>-<cmd-name>-<topic>/`。`temp/`、系统临时目录和项目根目录只允许作为不保留的执行中间位置,禁止作为 Speculo 持久化产物位置。
66
-
67
- ## `.status.json` 元字段(框架强制)
68
-
69
- 每个 change 的状态写在 `speculo/.speculo/<cat>/<change>/.status.json`:
70
-
71
- ```jsonc
72
- {
73
- "name": "string, change 目录名",
74
- "category": "string, dev | doc | person | ops",
75
- "change_status": "string, active | completed | archived",
76
- "execution_mode": "string, 由 workflow 自治声明的命名预设",
77
- "created_at": "string, ISO 8601",
78
- "updated_at": "string, ISO 8601",
79
- "current_phase": "string, 当前 phase id",
80
- "phase_history": [
81
- {
82
- "phase": "string, phase id",
83
- "entered_at": "string, ISO 8601",
84
- "completed_at": "string|null, ISO 8601",
85
- "status": "string, pending | in-progress | completed | skipped | revisited"
86
- }
87
- ]
88
- }
89
- ```
90
-
91
- workflow 自治字段在入口正文 `## 状态扩展字段` 声明,由执行者写入**同一份** `.status.json`,不另开文件。
92
-
93
- ## 顶层索引 schema(薄)
94
-
95
- ```jsonc
96
- // speculo/.speculo/<cat>-status.json
97
- {
98
- "active": [
99
- { "name": "string", "current_phase": "string", "updated_at": "string, ISO 8601" }
100
- ]
101
- }
102
- ```
103
-
104
- - 归档后变更**必须从 active 段移除**。
105
- - 索引可重建:扫 `speculo/.speculo/<cat>/*/.status.json` 即可重建。
106
- - 全局 `STATUS.json` **不物理存在**。
107
-
108
- ## Frontmatter 最小集
109
-
110
- Frontmatter **仅承载发现元数据**(这是什么、叫什么、关于什么)。phases / 模板 / 依赖 / 调用 skill / 状态扩展字段 / 入口协议一律写进 Markdown 正文,用相对路径链接与小标题做渐进披露。
111
-
112
- ```yaml
113
- # workflow
114
- id: <category>/<name> # 必填,全局唯一
115
- category: dev|doc|person|ops # 必填
116
- name: <人类可读名> # 必填
117
- description: <一句话> # 必填
118
- keywords: [...] # 可选
119
-
120
- # command
121
- id: <name> # 必填,唯一
122
- type: command # 必填,固定值
123
- name: <人类可读名> # 必填
124
- description: <一句话> # 必填
125
- keywords: [...] # 可选
126
-
127
- # skill
128
- id: <name> # 必填,唯一
129
- type: skill # 必填,固定值
130
- name: <人类可读名> # 必填
131
- description: <一句话> # 必填
132
- ```
133
-
134
- ## Template 不需要 Frontmatter
135
-
136
- 模板顶部用一段引用说明声明归属,占位符一律 `[TODO: ...]`:
137
-
138
- ```markdown
139
- > **服务工作流:** `<相对路径>`
140
- > **产物文件名:** `<filename>`
141
- > **父目录规则:** 本模板产物写入 `YYYY-MM-DD-<kebab-name>/` change 目录内
142
-
143
- # <标题>
144
-
145
- ## <章节>
146
- [TODO: 具体填写指引]
147
- ```
148
-
149
- ## 相对路径强约束
150
-
151
- 正文引用的 skill / template / 其它 workflow / phase 子文档**必须用相对路径**,禁止裸 id 或绝对路径。
152
-
153
- ## 写入责任
154
-
155
- | 文件 | 用户可写 | AI 可写 |
156
- |------|---------|---------|
157
- | `speculo/.speculo/.config/RULES.md` | ✅ | ❌ |
158
- | `speculo/.speculo/.config/LESSONS.md` | ⚠️ 可追加 | ✅ workflow 末尾追加 |
159
- | `speculo/.speculo/.config/context/*` | ⚠️ 用户确认后 | ✅ 仅在用户确认后写入 |
160
- | `speculo/.speculo/.config/adr/*` | ⚠️ 用户确认后 | ✅ 仅在用户确认后写入 |
161
- | `speculo/.speculo/commands/<command-run>/*` | ⚠️ | ✅ command 按内联模板写入 |
162
- | `speculo/.speculo/<cat>/<change>/*.md` | ⚠️ | ✅ |
163
- | `speculo/.speculo/<cat>/<change>/.status.json` | ❌ | ✅ |
164
- | `speculo/.speculo/*-status.json` | ❌ | ✅ |
165
- | `speculo/.speculo/dev/docs-sync-state.json` | ❌ | ✅ `dev/D-docs-sync` 原子写入;保存 tracked assets 与 git diff 基线 |
166
-
167
- **skill 不拥有独立持久化根目录**:skill 需要生成持久化文件时,必须使用调用方 command / workflow 声明的 `speculo/.speculo/...` 规范目标路径,或返回内容由调用方写入。禁止 skill 自行选择 `temp/`、系统临时目录、项目根目录或额外 state 文件作为持久化位置。
168
-
169
- ## 新分类骨架
170
-
171
- 新增 `<cat>` 分类时初始化:
172
-
173
- - `speculo/.speculo/<cat>-status.json`(`{ "active": [] }`)
174
- - `speculo/.speculo/<cat>/.gitkeep`
175
- - `speculo/.speculo/archive/<cat>/.gitkeep`
176
-
177
- 项目级长期资料放 `speculo/.speculo/.config/`(`RULES.md`、`LESSONS.md`、`context/`、`adr/`),不要新增项目根 state 文件。
178
-
179
- ## 命名校验清单
180
-
181
- ### 创建时
182
-
183
- - [ ] change 目录名匹配 `^\d{4}-\d{2}-\d{2}-[a-z0-9]+(-[a-z0-9]+)*$`
184
- - [ ] command 产物目录名匹配 `^\d{4}-\d{2}-\d{2}-[a-z0-9]+-[a-z0-9]+(-[a-z0-9]+)*$`
185
- - [ ] 日期部分使用**当前日期**(`YYYY-MM-DD`)
186
- - [ ] `<kebab-name>` 从用户意图中提取
187
-
188
- ### 扫描时
189
-
190
- - [ ] 仅处理符合日期命名规范的目录
191
- - [ ] 不符合规范的目录标记为 `malformed`,必须汇报
192
- - [ ] 不自动删除、重命名或忽略 malformed 目录
@@ -1,212 +0,0 @@
1
- # Skill Authoring SOP
2
-
3
- 本文是 Speculo 原子 skill 的编写规范,复刻通用「编写技能」流程并收敛到 Speculo 约束。
4
- 本文已内化全部所需规范;编写 skill 时**不读仓库 `docs/`**,只读本 skill 的 `references/`。
5
-
6
- 质量理论(**可预测性**、**主导词**、**信息层级**、**完成标准**、**修剪**、**失败模式**)是所有 Speculo 资产共享的单一事实源,见 `authoring-quality-levers.md`;本文只补 skill 特有的流程与约束,不复述理论。
7
-
8
- ## 流程
9
-
10
- 1. **收集需求** —— 向用户确认:
11
- - 这个 skill 覆盖什么任务 / 领域?
12
- - 应该处理哪些具体用例?
13
- - 这是可复用的原子能力,还是该升级为 workflow、退化为 command?判定见 `asset-selection-sop.md`。
14
- - 需要可执行脚本,还是只需要指令?
15
- - 有没有外部源技能要迁移?迁移规则见 `migration-sop.md`。
16
-
17
- 2. **起草 skill** —— 创建:
18
- - `SKILL.md`,含 Speculo frontmatter 与五个固定章节。
19
- - `SKILL.md` 接近 500 行时,把细节拆进 `references/`。
20
- - 需要确定性操作时,加 `scripts/`。
21
-
22
- 3. **与用户审查** —— 展示草稿并问:
23
- - 覆盖你的用例了吗?
24
- - 有遗漏或不清楚的地方吗?
25
- - 哪些章节该更详细 / 更简洁?
26
-
27
- ## 入口结构
28
-
29
- skill 放在:
30
-
31
- ```text
32
- template/skills/<name>/SKILL.md
33
- ```
34
-
35
- 目录名用 lowercase kebab-case。整个 skill 目录必须**自包含**:复制到任何项目、只读 `SKILL.md` 即可判断是否使用、需要哪些输入、产生什么输出,不依赖本仓库的 `docs/` 或任何外部文件。
36
-
37
- ```text
38
- <name>/
39
- ├── SKILL.md # 主指令(必需)
40
- ├── references/ # 详细规范 / 变体(按需)
41
- │ └── <task>-sop.md
42
- ├── scripts/ # 确定性工具脚本(按需)
43
- └── examples/ # 示例输入输出(按需)
44
- ```
45
-
46
- ## Frontmatter
47
-
48
- ```yaml
49
- ---
50
- id: <name>
51
- type: skill
52
- name: <人类可读名>
53
- description: <一句话能力说明;含触发场景,第三人称,可与相近 skill 区分>
54
- ---
55
- ```
56
-
57
- description 是 **agent 决定加载哪个 skill 时唯一能看到的内容**,会和其它已装 skill 一起出现在系统提示里。给 agent 刚好够用的信息:(1) 提供什么能力,(2) 何时 / 为何触发(具体关键词、上下文、文件类型)。
58
-
59
- 格式:
60
-
61
- - 最多 1024 字符
62
- - 第三人称
63
- - 第一句:做什么
64
- - 第二句:「当 [具体触发条件] 时使用」
65
- - 用**主导词**措辞触发条件——你真正会用来唤起该 skill 的那个词;同一个词出现在描述、文档、代码里会更可靠地触发(见 `authoring-quality-levers.md`)
66
- - 每个分支只写一个触发器:换名重写同一分支是**重复**,折叠它
67
-
68
- **好的例子**:
69
-
70
- ```
71
- 创建或改造 Speculo workflows、skills、commands 的原子能力;当用户要求迁移外部技能或新增 workflow / skill / command 时使用。
72
- ```
73
-
74
- **坏例子**:
75
-
76
- ```
77
- 帮助处理技能。
78
- ```
79
-
80
- 坏例子让 agent 无法把这个 skill 和其它 authoring 类 skill 区分开。
81
-
82
- ## 正文结构
83
-
84
- `SKILL.md` 保持精简,五个固定章节:
85
-
86
- - `## 何时使用`
87
- - `## 输入`
88
- - `## 输出`
89
- - `## 执行步骤`
90
- - `## 渐进披露`
91
-
92
- 模板:
93
-
94
- ```markdown
95
- ---
96
- id: <name>
97
- type: skill
98
- name: <人类可读名>
99
- description: <能力 + 触发场景,第三人称>
100
- ---
101
-
102
- # <技能名>
103
-
104
- ## 何时使用
105
-
106
- [触发场景;列几条典型用户请求]
107
-
108
- ## 输入
109
-
110
- [需要的输入。本 skill 自带规范,不外读 docs/]
111
-
112
- ## 输出
113
-
114
- [产生什么产物 / 决策 / 检查清单]
115
-
116
- ## 执行步骤
117
-
118
- 1. [最小可工作主流程]
119
- 2. ...
120
-
121
- ## 渐进披露
122
-
123
- - `references/<task>-sop.md`:<何时读取>
124
- ```
125
-
126
- ## 渐进披露
127
-
128
- 所有 reference 都从 `SKILL.md` 直接引用,**单层**,不做多层隐藏。
129
-
130
- 拆分 reference 的条件:
131
-
132
- - `SKILL.md` 接近 500 行
133
- - 内容覆盖多个主题或变体(例如不同资产类型的写法)
134
- - 细节只在特定场景才需要
135
- - 源材料较长,但可以按需读取
136
-
137
- reference 文件用 kebab-case,**按任务而非来源**命名(`workflow-authoring-sop.md`,不是 `from-specforge.md`)。
138
-
139
- 渐进披露的本质是保护**信息层级**、让入口阶梯顶部保持清晰(不只是省 token),由**分支**授权:只把*部分*运行才需要的材料推到指针后,每条路径都需要的内联。指针的**措辞**决定取用时机与可靠性——必备材料触发不可靠时先改措辞、失败才内联(见 `authoring-quality-levers.md`)。
140
-
141
- ## 何时添加脚本
142
-
143
- **加 `scripts/`**,当操作确定且反复执行:
144
-
145
- - frontmatter 校验
146
- - 路径残留扫描
147
- - 模板命名检查
148
- - JSON schema 检查
149
-
150
- 脚本比反复生成代码更省 token、更可靠,且失败可以显式处理。
151
-
152
- **不加 `scripts/`**,当能力主要是判断 / 设计 / 策略 / 协作:
153
-
154
- - 规范判断
155
- - 文档结构设计
156
- - 迁移和融合策略
157
- - 人机协作 SOP
158
-
159
- ## 迁移外部 Skill
160
-
161
- 迁移时**保留**:
162
-
163
- - 触发场景
164
- - 关键输入输出
165
- - 铁律、边界、失败处理
166
- - 可复用命令、检查表、模板片段
167
-
168
- 迁移时**改写**:
169
-
170
- - 外部工具名绑定
171
- - 旧目录布局
172
- - 旧 state 路径
173
- - 不符合 Speculo frontmatter 的元数据
174
- - 脱离调用方的持久化路径、`temp/` 输出、项目根目录 state 和其它散落写入行为
175
-
176
- 多个源技能融合为一个原子 skill 时:入口 `SKILL.md` 只留统一触发与主流程,源技能细节按主题拆进 `references/`,合并重复铁律并保留更严格者。
177
-
178
- ## 持久化边界
179
-
180
- skill **禁止自行选择**持久化位置,包括:
181
-
182
- - `speculo/.speculo/<cat>/<change>/`
183
- - `speculo/.speculo/commands/`
184
- - `speculo/.speculo/*-status.json`
185
- - `.status.json`
186
- - `temp/`、系统临时目录或项目根目录
187
-
188
- 如果某能力需要生成文件型持久化产物,必须满足其一:
189
-
190
- - 调用方 workflow / command 声明规范目标路径,skill 只写入该路径。
191
- - skill 返回内容、摘要和建议文件名,由调用方写入 `speculo/.speculo/...`。
192
-
193
- 无论哪种方式,持久化产物都不得落到 `temp/`、系统临时目录、项目根目录或其它非 Speculo 规范位置。完整写入责任表见 `persistence-contract-sop.md`。
194
-
195
- ## 审查清单
196
-
197
- 起草后检查:
198
-
199
- - [ ] description 含触发条件(「当……时使用」),可与相近 skill 区分
200
- - [ ] frontmatter 是 Speculo 最小集(`id` / `type: skill` / `name` / `description`)
201
- - [ ] `SKILL.md` 含五个固定章节,整体精简(细节已外移)
202
- - [ ] reference 单层引用,按任务命名
203
- - [ ] **自包含**:不引用 `docs/` 或仓库外文件
204
- - [ ] skill 没有自选持久化目录;文件型产物由调用方写入或写入调用方声明的 `speculo/.speculo/...` 路径
205
- - [ ] 没有 README / INSTALLATION / CHANGELOG 等冗余文件
206
- - [ ] 没有时效性信息、旧项目路径、旧工具名或绝对路径绑定
207
- - [ ] 术语一致、含具体示例、引用只有一层深度
208
- - [ ] description 与正文用**主导词**锚定调用与执行
209
- - [ ] 完成标准 / 审查项**可检验**,重要处**穷尽**(驱动彻底调研工作,防过早完成)
210
- - [ ] 逐句过**空操作测试**(删掉模型默认就会做的句子),无**重复 / 沉积 / 蔓延**
211
- - [ ] 跨资产共享规范引用**单一事实源**、未复制
212
- - [ ] 若是内置资产,CLI tests 覆盖复制该 skill
@@ -1,85 +0,0 @@
1
- # Validation Checklist
2
-
3
- ## 结构检查
4
-
5
- - [ ] 新 asset 路径符合 `template/workflows/`、`template/skills/` 或 `template/commands/` 约定
6
- - [ ] workflow 入口文件名与目录名一致
7
- - [ ] skill 入口命名为 `SKILL.md`
8
- - [ ] command 是单个 `.md` 文件
9
- - [ ] reference 文件都被入口直接引用
10
- - [ ] 没有 README、INSTALLATION、CHANGELOG 等冗余 skill 文件
11
-
12
- ## Frontmatter 检查
13
-
14
- - [ ] workflow frontmatter 只包含发现元数据
15
- - [ ] skill frontmatter 包含 `id`、`type: skill`、`name`、`description`
16
- - [ ] command frontmatter 包含 `id`、`type: command`、`name`、`description`,可选 `keywords`
17
- - [ ] 没有把 phases、templates、depends_on、status_extensions 写进 frontmatter
18
-
19
- ## 质量杠杆检查
20
-
21
- > 适用于所有资产类型;理论见 `authoring-quality-levers.md`。
22
-
23
- - [ ] description / 入口用**主导词**锚定调用,正文用同一主导词锚定执行
24
- - [ ] 内容按**信息层级**排布(步骤 / 文件内参考 / 已披露参考),入口阶梯顶部清晰
25
- - [ ] 每个步骤 / phase 的**完成标准**可检验,重要处穷尽
26
- - [ ] 跨资产共享含义只有**单一事实源**,引用方未复制
27
- - [ ] 逐句过**空操作测试**,无**过早完成 / 重复 / 沉积 / 蔓延**诱因
28
-
29
- ## Workflow 检查
30
-
31
- - [ ] 入口正文包含 `## 阶段`
32
- - [ ] 入口正文包含 `## 依赖`
33
- - [ ] 入口正文包含 `## 状态扩展字段`
34
- - [ ] 入口正文包含 `## 完成与状态更新`
35
- - [ ] 每个 phase 文件写清输入、产物、填写引导、边界、完成准则
36
- - [ ] 模板放在对应分类 `_templates/`
37
- - [ ] 模板顶部有服务 workflow 和产物文件名
38
- - [ ] 模板占位符为 `[TODO: ...]`
39
-
40
- ## Skill 检查
41
-
42
- - [ ] `SKILL.md` 能让 agent 判断何时触发
43
- - [ ] 输入、输出、执行步骤清晰
44
- - [ ] 大段细节放入 `references/`
45
- - [ ] 自包含:不引用 `docs/` 或仓库外文件,复制后只读 `SKILL.md` 即可用
46
- - [ ] skill 没有自选持久化目录;文件型产物由调用方写入或写入调用方声明的 `speculo/.speculo/...` 路径
47
- - [ ] 如果需要持久化,明确归档到 `speculo/.speculo/commands/`、`speculo/.speculo/<cat>/<change>/` 或 `speculo/.speculo/.config/` 的哪类规范位置
48
-
49
- ## Command 检查
50
-
51
- - [ ] 归档路径位于 `speculo/.speculo/commands/`
52
- - [ ] 调用 skill 使用相对路径
53
- - [ ] 被调用 skill 没有把持久化产物写到 `temp/`、系统临时目录或项目根目录
54
- - [ ] 破坏性操作要求用户确认
55
- - [ ] 产物模板内联且使用 `[TODO: ...]`
56
-
57
- ## `speculo/.speculo/` 检查
58
-
59
- - [ ] 新分类有 `speculo/.speculo/<cat>-status.json`
60
- - [ ] 新分类有 `speculo/.speculo/<cat>/.gitkeep`
61
- - [ ] 新分类有 `speculo/.speculo/archive/<cat>/.gitkeep`
62
- - [ ] 项目级长期上下文写入 `speculo/.speculo/.config/context/`
63
- - [ ] 项目级 ADR 写入 `speculo/.speculo/.config/adr/`
64
- - [ ] `.config` 清理类资产默认 dry-run,删除或合并前要求用户确认
65
- - [ ] 没有新增项目根 state 文件
66
-
67
- ## 文档与测试
68
-
69
- > 以下索引文件是 Speculo 仓库内的下游同步目标;项目无这些文件时跳过对应项。
70
-
71
- - [ ] 项目若有 `docs/quick-reference.md`,包含新入口
72
- - [ ] 项目若有 `docs/Speculo-architecture.md`,需要时更新内置结构
73
- - [ ] 项目若有 `docs/adopting.md`,需要时更新安装后目录
74
- - [ ] CLI tests 断言 `speculo init` 会复制新内置资产
75
- - [ ] `pnpm test` 通过
76
-
77
- ## 残留检查
78
-
79
- 按迁移来源选择关键词扫描:
80
-
81
- ```bash
82
- rg "\.specforge|\.docs-sync-state|docs/adr/|根目录.*CONTEXT" speculo docs
83
- ```
84
-
85
- 命中结果必须逐条判断:历史说明可保留,执行规范和路径约定不能保留旧值。
@@ -1,132 +0,0 @@
1
- # Workflow Authoring SOP
2
-
3
- phase 的切分、完成准则与措辞遵循 `authoring-quality-levers.md` 的质量杠杆(**按序列拆分**隐藏后续步骤防过早完成、**完成标准**可检验且穷尽、**主导词**锚定调用与执行);本文只补 workflow 特有的结构与路径约束。
4
-
5
- ## 入口结构
6
-
7
- workflow 放在 `template/workflows/<cat>/`,`<cat>` 只能是 `dev`、`doc`、`person`、`ops`。
8
-
9
- 目录和入口文件必须同名:
10
-
11
- ```text
12
- template/workflows/<cat>/<entry>/<entry>.md
13
- ```
14
-
15
- 主线 workflow 使用数字前缀,如 `01-grill-with-docs`。横向 workflow 使用字母前缀,如 `H-diagnose`、`R-review`、`D-docs-sync`。
16
-
17
- ## Frontmatter
18
-
19
- 入口 frontmatter 只承载发现元数据:
20
-
21
- ```yaml
22
- ---
23
- id: <cat>/<name>
24
- category: <cat>
25
- name: <人类可读名>
26
- description: <一句话用途>
27
- keywords: [<关键词>]
28
- ---
29
- ```
30
-
31
- 禁止把 phases、模板、依赖、状态字段写进 frontmatter。
32
-
33
- ## 正文必备章节
34
-
35
- 入口正文必须包含:
36
-
37
- - `## 阶段`
38
- - `## 依赖`
39
- - `## 状态扩展字段`
40
- - `## 完成与状态更新`
41
-
42
- 阶段条目必须写清:
43
-
44
- - 规范 phase 文件
45
- - 模板路径
46
- - 产物文件名
47
- - 完成准则
48
-
49
- ## Phase 文件
50
-
51
- phase 文件不需要 frontmatter。每个 phase 文件写清:
52
-
53
- - 输入
54
- - 产物
55
- - 填写引导
56
- - 边界
57
- - 完成准则
58
-
59
- phase 文件只放该阶段执行所需内容,不重复入口文件的全局说明。
60
-
61
- ## 模板
62
-
63
- 模板放在:
64
-
65
- ```text
66
- template/workflows/<cat>/_templates/
67
- ```
68
-
69
- 命名:
70
-
71
- ```text
72
- <name>-<artifact>-template.md
73
- ```
74
-
75
- 模板不写 frontmatter,顶部用归属说明:
76
-
77
- ```markdown
78
- > **服务工作流:** `../<entry>/<entry>.md`
79
- > **产物文件名:** `<artifact>.md`
80
- ```
81
-
82
- 模板占位符必须使用 `[TODO: ...]`。
83
-
84
- ## 持久化路径
85
-
86
- workflow 产物写入:
87
-
88
- ```text
89
- speculo/.speculo/<cat>/<change>/
90
- ```
91
-
92
- 当前 change 的状态写入:
93
-
94
- ```text
95
- speculo/.speculo/<cat>/<change>/.status.json
96
- ```
97
-
98
- 顶层 active 索引写入:
99
-
100
- ```text
101
- speculo/.speculo/<cat>-status.json
102
- ```
103
-
104
- 项目级规则、经验、上下文和 ADR 使用:
105
-
106
- ```text
107
- speculo/.speculo/.config/RULES.md
108
- speculo/.speculo/.config/LESSONS.md
109
- speculo/.speculo/.config/context/
110
- speculo/.speculo/.config/adr/
111
- ```
112
-
113
- 不要把新状态放到项目根目录。`.status.json` 元字段、顶层索引 schema 和写入责任表见 `persistence-contract-sop.md`。
114
-
115
- ## 索引与文档同步
116
-
117
- 新增 workflow 后检查:
118
-
119
- - 对应分类的 `AGENTS.md` 是否需要新增别名
120
- - `speculo/.speculo/<cat>-status.json` 和 `speculo/.speculo/<cat>/.gitkeep` 是否存在
121
- - `speculo/.speculo/archive/<cat>/.gitkeep` 是否存在
122
- - 项目若有 `docs/quick-reference.md` 等入口索引,是否需要新增条目
123
- - CLI tests 是否需要断言复制新入口
124
-
125
- ## 完成线
126
-
127
- - 入口 frontmatter 合规
128
- - 正文必备章节齐全
129
- - 所有跨文件引用使用相对路径
130
- - 非模板文件不残留无说明 TODO
131
- - 模板只保留 `[TODO: ...]` 占位符
132
- - `pnpm test` 通过或记录无法运行原因
@@ -1,37 +0,0 @@
1
- # 深化(Deepening)
2
-
3
- 如何在给定依赖关系的情况下,安全地深化一组浅模块。假定使用 [SKILL.md](SKILL.md) 中的术语——**module(模块)**、**interface(接口)**、**seam(接缝)**、**adapter(适配器)**。
4
-
5
- ## 依赖分类
6
-
7
- 在评估深化候选时,对其依赖进行分类。分类决定了深化后的模块如何跨接缝进行测试。
8
-
9
- ### 1. 进程内(In-process)
10
-
11
- 纯计算、内存状态、无 I/O。始终可深化——合并模块,直接通过新接口进行测试。不需要适配器。
12
-
13
- ### 2. 本地可替换(Local-substitutable)
14
-
15
- 具有本地测试替代方案的依赖(Postgres 用 PGLite、内存文件系统)。如果存在替代方案则可深化。深化后的模块在测试套件中运行替代方案进行测试。接缝是内部的;模块外部接口处没有端口。
16
-
17
- ### 3. 远程但自有(Remote but owned)(端口与适配器)
18
-
19
- 跨网络边界的自有服务(微服务、内部 API)。在接缝处定义一个**端口(port)**(接口)。深度模块拥有逻辑;传输层作为**适配器(adapter)**注入。测试使用内存适配器。生产环境使用 HTTP/gRPC/队列适配器。
20
-
21
- 推荐形式:*"在接缝处定义一个端口,为生产环境实现 HTTP 适配器,为测试实现内存适配器,这样即使逻辑部署跨网络,仍位于一个深度模块中。"*
22
-
23
- ### 4. 真正外部(True external)(Mock)
24
-
25
- 你无法控制的第三方服务(Stripe、Twilio 等)。深化后的模块将外部依赖作为注入端口接收;测试提供 mock 适配器。
26
-
27
- ## 接缝纪律
28
-
29
- - **一个适配器意味着假设的接缝。两个适配器才意味着真正的接缝。** 除非至少有两个适配器是合理的(通常是生产 + 测试),否则不要引入端口。单适配器接缝只是间接层。
30
- - **内部接缝 vs 外部接缝。** 深度模块可以有内部接缝(对其实现私有,由其自身测试使用)以及其接口处的外部接缝。不要因为测试使用了内部接缝就通过接口暴露它们。
31
-
32
- ## 测试策略:替换,而非叠加
33
-
34
- - 一旦深化模块接口层面的测试存在,浅模块的旧单元测试就成为废料——删除它们。
35
- - 在深化模块的接口层面编写新测试。**接口就是测试面**。
36
- - 测试通过接口断言可观察的结果,而非内部状态。
37
- - 测试应能经受内部重构——它们描述的是行为,而非实现。如果一个测试在实现变更时必须随之改变,那它就是在测试接口背后的内容。