@chongyan/autospec 1.0.1

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 (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +472 -0
  3. package/README.md +476 -0
  4. package/bin/autospec.js +3 -0
  5. package/knowledge/README.md +144 -0
  6. package/knowledge/checklists/code.md +182 -0
  7. package/knowledge/checklists/design.md +196 -0
  8. package/knowledge/checklists/release.md +70 -0
  9. package/knowledge/checklists/requirement.md +169 -0
  10. package/knowledge/checklists/test.md +46 -0
  11. package/knowledge/config/README.en.md +44 -0
  12. package/knowledge/config/README.md +44 -0
  13. package/knowledge/config/role-composition.yaml +98 -0
  14. package/knowledge/config/role-extensions.yaml +140 -0
  15. package/knowledge/config/skill-compositions.yaml +142 -0
  16. package/knowledge/config/team-stage.yaml +95 -0
  17. package/knowledge/config/team-tasks.yaml +139 -0
  18. package/knowledge/config/team-triggers.yaml +198 -0
  19. package/knowledge/config/validation-patterns.yaml +137 -0
  20. package/knowledge/domain/README.md +115 -0
  21. package/knowledge/domain/flows/README.md +194 -0
  22. package/knowledge/domain/glossary.md +143 -0
  23. package/knowledge/domain/rules.md +138 -0
  24. package/knowledge/environment/README.en.md +36 -0
  25. package/knowledge/environment/README.md +87 -0
  26. package/knowledge/environment/component-knowledge.md +316 -0
  27. package/knowledge/environment/detection-patterns.yaml +502 -0
  28. package/knowledge/environment/middleware-knowledge.md +237 -0
  29. package/knowledge/environment/template-registry.md +321 -0
  30. package/knowledge/guides/domain-driven-design.md +345 -0
  31. package/knowledge/guides/knowledge-management.md +369 -0
  32. package/knowledge/guides/requirement-engineering.md +329 -0
  33. package/knowledge/guides/stages/ai-effect-evaluator.md +93 -0
  34. package/knowledge/guides/stages/code-implementer.md +205 -0
  35. package/knowledge/guides/stages/code-reviewer.md +111 -0
  36. package/knowledge/guides/stages/consistency-checker.md +177 -0
  37. package/knowledge/guides/stages/design-planner.md +401 -0
  38. package/knowledge/guides/stages/design-reviewer.md +83 -0
  39. package/knowledge/guides/stages/integration-test-runner.md +105 -0
  40. package/knowledge/guides/stages/release-checker.md +205 -0
  41. package/knowledge/guides/stages/requirement-analyzer.md +195 -0
  42. package/knowledge/guides/stages/requirement-reviewer.md +83 -0
  43. package/knowledge/guides/stages/security-reviewer.md +89 -0
  44. package/knowledge/guides/stages/test-context-analyzer.md +250 -0
  45. package/knowledge/guides/stages/test-generator.md +241 -0
  46. package/knowledge/guides/stages/test-planner.md +183 -0
  47. package/knowledge/guides/stages/test-reviewer.md +76 -0
  48. package/knowledge/guides/stages/unit-test-runner.md +83 -0
  49. package/knowledge/guides/support/ai-agent-analyzer.md +362 -0
  50. package/knowledge/guides/support/ai-anomaly-analyzer.md +213 -0
  51. package/knowledge/guides/support/ai-artifact-evaluator.md +192 -0
  52. package/knowledge/guides/support/ai-capability-analyzer.md +193 -0
  53. package/knowledge/guides/support/ai-component-analyzer.md +169 -0
  54. package/knowledge/guides/support/ai-data-validator.md +276 -0
  55. package/knowledge/guides/support/ai-evaluation-planner.md +374 -0
  56. package/knowledge/guides/support/ai-path-evaluator.md +274 -0
  57. package/knowledge/guides/support/ai-pipeline-evaluator.md +219 -0
  58. package/knowledge/guides/support/ai-rag-analyzer.md +339 -0
  59. package/knowledge/guides/support/ai-task-assessor.md +418 -0
  60. package/knowledge/guides/support/ai-test-diagnostics.md +133 -0
  61. package/knowledge/guides/support/complexity-assessor.md +268 -0
  62. package/knowledge/guides/support/component-discovery.md +183 -0
  63. package/knowledge/guides/support/environment-scanner.md +207 -0
  64. package/knowledge/guides/support/environment-validator.md +207 -0
  65. package/knowledge/guides/support/knowledge-generator.md +234 -0
  66. package/knowledge/guides/support/methodology-extractor.md +55 -0
  67. package/knowledge/guides/support/pipeline-protocol.md +438 -0
  68. package/knowledge/guides/support/practice-logger.md +359 -0
  69. package/knowledge/guides/support/scope-inference.md +174 -0
  70. package/knowledge/guides/support/skill-distiller.md +91 -0
  71. package/knowledge/guides/support/skill-updater.md +45 -0
  72. package/knowledge/guides/support/skill-validator.md +72 -0
  73. package/knowledge/guides/support/team-orchestrator.md +323 -0
  74. package/knowledge/guides/support/tech-stack-analyzer.md +139 -0
  75. package/knowledge/guides/support/test-runner.md +254 -0
  76. package/knowledge/guides/system-design.md +352 -0
  77. package/knowledge/organization/ai-native-team.md +318 -0
  78. package/knowledge/organization/team-metrics.md +228 -0
  79. package/knowledge/principles/constitution.md +134 -0
  80. package/knowledge/principles/core-principles.md +368 -0
  81. package/knowledge/principles/design-philosophy.md +877 -0
  82. package/knowledge/principles/evolution.md +553 -0
  83. package/knowledge/process/01-requirement.md +113 -0
  84. package/knowledge/process/02-design.md +123 -0
  85. package/knowledge/process/03-implementation.md +90 -0
  86. package/knowledge/process/04-review.md +80 -0
  87. package/knowledge/process/05-testing.md +90 -0
  88. package/knowledge/process/06-delivery.md +88 -0
  89. package/knowledge/process/README.en.md +38 -0
  90. package/knowledge/process/README.md +48 -0
  91. package/knowledge/process/ai-sdlc.md +475 -0
  92. package/knowledge/process/overview.md +319 -0
  93. package/knowledge/standards/code-review.md +876 -0
  94. package/knowledge/standards/coding-style.md +940 -0
  95. package/knowledge/standards/data-consistency.md +1085 -0
  96. package/knowledge/standards/document-versioning.md +210 -0
  97. package/knowledge/standards/risk-detection.md +186 -0
  98. package/knowledge/templates/ai-evaluation.md +150 -0
  99. package/knowledge/templates/api-design.md +117 -0
  100. package/knowledge/templates/database-design.md +132 -0
  101. package/knowledge/templates/domain-driven-design.md +321 -0
  102. package/knowledge/templates/product-proposal.md +201 -0
  103. package/knowledge/templates/system-design.md +227 -0
  104. package/knowledge/templates/task-breakdown.md +107 -0
  105. package/knowledge/templates/test-case.md +170 -0
  106. package/package.json +53 -0
  107. package/plugins/.claude-plugin/plugin.json +134 -0
  108. package/plugins/agents/roles/ai-engineer.md +129 -0
  109. package/plugins/agents/roles/backend-engineer.md +165 -0
  110. package/plugins/agents/roles/ceo.md +94 -0
  111. package/plugins/agents/roles/data-engineer.md +135 -0
  112. package/plugins/agents/roles/devops-engineer.md +181 -0
  113. package/plugins/agents/roles/frontend-engineer.md +129 -0
  114. package/plugins/agents/roles/product-owner.md +98 -0
  115. package/plugins/agents/roles/quality-engineer.md +129 -0
  116. package/plugins/agents/roles/security-engineer.md +180 -0
  117. package/plugins/agents/roles/tech-lead.md +97 -0
  118. package/plugins/agents/support/blind-comparator.md +88 -0
  119. package/plugins/agents/support/consistency-checker.md +103 -0
  120. package/plugins/agents/support/failure-diagnostician.md +141 -0
  121. package/plugins/agents/support/independent-reviewer.md +80 -0
  122. package/plugins/agents/support/safety-auditor.md +121 -0
  123. package/plugins/agents/support/skill-benchmarker.md +86 -0
  124. package/plugins/agents/support/skill-forger.md +105 -0
  125. package/plugins/agents/support/stage-gate-evaluator.md +121 -0
  126. package/plugins/agents/support/test-coverage-reviewer.md +73 -0
  127. package/plugins/benchmarks/templates/README.md +44 -0
  128. package/plugins/benchmarks/templates/commands/explore-template.yaml +48 -0
  129. package/plugins/benchmarks/templates/pipeline/agile-template.yaml +84 -0
  130. package/plugins/benchmarks/templates/pipeline/waterfall-template.yaml +106 -0
  131. package/plugins/benchmarks/templates/skills/requirement-analyzer-template.yaml +48 -0
  132. package/plugins/commands/README.en.md +96 -0
  133. package/plugins/commands/README.md +96 -0
  134. package/plugins/commands/apply.md +191 -0
  135. package/plugins/commands/archive.md +76 -0
  136. package/plugins/commands/env-export.md +79 -0
  137. package/plugins/commands/env-sync.md +640 -0
  138. package/plugins/commands/env-template.md +223 -0
  139. package/plugins/commands/env-update.md +264 -0
  140. package/plugins/commands/env-validate.md +176 -0
  141. package/plugins/commands/env.md +79 -0
  142. package/plugins/commands/explore.md +76 -0
  143. package/plugins/commands/field-evolve.md +536 -0
  144. package/plugins/commands/memory.md +249 -0
  145. package/plugins/commands/project-evolve.md +821 -0
  146. package/plugins/commands/propose.md +93 -0
  147. package/plugins/commands/review.md +140 -0
  148. package/plugins/commands/run.md +224 -0
  149. package/plugins/commands/status.md +62 -0
  150. package/plugins/commands/validate.md +108 -0
  151. package/plugins/hooks/README.en.md +56 -0
  152. package/plugins/hooks/README.md +56 -0
  153. package/plugins/hooks/ai-project-guard.js +329 -0
  154. package/plugins/hooks/artifact-evaluation-hook.js +237 -0
  155. package/plugins/hooks/constitution-guard.js +211 -0
  156. package/plugins/hooks/environment-autocommit.js +264 -0
  157. package/plugins/hooks/environment-manager.js +778 -0
  158. package/plugins/hooks/execution-tracker.js +354 -0
  159. package/plugins/hooks/frozen-zone-guard.js +140 -0
  160. package/plugins/hooks/layer1-validator.js +423 -0
  161. package/plugins/hooks/lib/artifact-evaluator.js +414 -0
  162. package/plugins/hooks/lib/benchmarks/change-detector.js +390 -0
  163. package/plugins/hooks/lib/benchmarks/evaluator.js +605 -0
  164. package/plugins/hooks/lib/benchmarks/integration-example.js +169 -0
  165. package/plugins/hooks/lib/data-and-ai-detector.js +275 -0
  166. package/plugins/hooks/lib/detection-pattern-loader.js +865 -0
  167. package/plugins/hooks/lib/directory-discovery.js +395 -0
  168. package/plugins/hooks/lib/environment-config-loader.js +341 -0
  169. package/plugins/hooks/lib/environment-detector.js +553 -0
  170. package/plugins/hooks/lib/environment-evolver.js +564 -0
  171. package/plugins/hooks/lib/environment-registry.js +813 -0
  172. package/plugins/hooks/lib/execution-path.js +427 -0
  173. package/plugins/hooks/lib/hook-error-recorder.js +245 -0
  174. package/plugins/hooks/lib/hook-logger.js +538 -0
  175. package/plugins/hooks/lib/hook-runner.js +97 -0
  176. package/plugins/hooks/lib/hook-runner.sh +44 -0
  177. package/plugins/hooks/lib/hook-state-manager.js +480 -0
  178. package/plugins/hooks/lib/memory-extractor.js +377 -0
  179. package/plugins/hooks/lib/memory-manager.js +673 -0
  180. package/plugins/hooks/lib/metrics-analyzer.js +489 -0
  181. package/plugins/hooks/lib/project-evolution/auto-fixer.js +511 -0
  182. package/plugins/hooks/lib/project-evolution/memory-manager.js +346 -0
  183. package/plugins/hooks/lib/project-evolution/pattern-detector.js +476 -0
  184. package/plugins/hooks/lib/project-evolution/semantic-indexer.js +480 -0
  185. package/plugins/hooks/lib/project-structure-detector.js +326 -0
  186. package/plugins/hooks/lib/rollback-tracker.js +346 -0
  187. package/plugins/hooks/lib/source-code-scanner.js +596 -0
  188. package/plugins/hooks/lib/technology-stack-detector.js +374 -0
  189. package/plugins/hooks/lib/test-failure-analyzer.js +375 -0
  190. package/plugins/hooks/lib/test-failure-fixer.js +268 -0
  191. package/plugins/hooks/lib/trace-context.js +277 -0
  192. package/plugins/hooks/lib/validation-patterns.js +415 -0
  193. package/plugins/hooks/memory-sync.js +171 -0
  194. package/plugins/hooks/pipeline-observer.js +413 -0
  195. package/plugins/hooks/scope-sentinel.js +204 -0
  196. package/plugins/hooks/trace-initialization.js +169 -0
  197. package/plugins/memory/templates/code-quality.yaml +149 -0
  198. package/plugins/memory/templates/multi-system.yaml +155 -0
  199. package/plugins/memory/templates/team-habits.yaml +119 -0
  200. package/plugins/memory/templates/testing.yaml +121 -0
  201. package/plugins/skills/README.en.md +47 -0
  202. package/plugins/skills/README.md +104 -0
  203. package/plugins/skills/benchmark-executor/README.md +93 -0
  204. package/plugins/skills/benchmark-executor/SKILL.md +647 -0
  205. package/plugins/skills/benchmark-generator/SKILL.md +349 -0
  206. package/plugins/skills/delivery-stage/SKILL.md +203 -0
  207. package/plugins/skills/design-stage/SKILL.md +216 -0
  208. package/plugins/skills/evolution-process/SKILL.md +291 -0
  209. package/plugins/skills/exploration-phase/SKILL.md +133 -0
  210. package/plugins/skills/implementation-stage/SKILL.md +179 -0
  211. package/plugins/skills/layer1-validation/SKILL.md +79 -0
  212. package/plugins/skills/pending-dashboard/SKILL.md +109 -0
  213. package/plugins/skills/project-evolution/SKILL.md +847 -0
  214. package/plugins/skills/requirement-stage/SKILL.md +183 -0
  215. package/plugins/skills/skill-forge/SKILL.md +223 -0
  216. package/plugins/skills/skill-forge/references/description-guide.md +92 -0
  217. package/plugins/skills/skill-forge/references/quality-rubric.md +104 -0
  218. package/plugins/skills/skill-forge/references/skill-template.md +106 -0
  219. package/plugins/skills/startup-guard/SKILL.md +38 -0
  220. package/plugins/skills/testing-stage/SKILL.md +195 -0
  221. package/scripts/cli/global-init.js +288 -0
  222. package/scripts/cli/global.js +324 -0
  223. package/scripts/cli/index.js +55 -0
  224. package/scripts/cli/init.js +382 -0
  225. package/scripts/cli/list.js +69 -0
  226. package/scripts/cli/org.js +340 -0
  227. package/scripts/cli/update.js +44 -0
  228. package/scripts/config/commands.config.js +145 -0
  229. package/scripts/config/hooks.config.js +197 -0
  230. package/scripts/evolution/evolution-router.js +273 -0
  231. package/scripts/evolution/evolution-signal-collector.js +307 -0
  232. package/scripts/evolution/knowledge-loader.js +346 -0
  233. package/scripts/evolution/marketplace.js +317 -0
  234. package/scripts/evolution/version-manager.js +371 -0
  235. package/scripts/install/agents.js +106 -0
  236. package/scripts/install/commands.js +133 -0
  237. package/scripts/install/constants.js +424 -0
  238. package/scripts/install/hook-logger.js +536 -0
  239. package/scripts/install/hooks.js +110 -0
  240. package/scripts/install/index.js +39 -0
  241. package/scripts/install/skills.js +95 -0
  242. package/scripts/postinstall.js +25 -0
  243. package/scripts/state.js +376 -0
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: startup-guard
3
+ description: "When a development task, coding request, feature implementation, or bug fix is detected — but NO /autospec: command was used — ensures AutoSpec startup gate protocol is followed before any code is written."
4
+ ---
5
+
6
+ # AutoSpec 启动门禁(自动触发)
7
+
8
+ 你检测到了一个开发类任务,但用户**没有通过 /autospec: 命令启动**。
9
+
10
+ ## 跳过条件
11
+
12
+ 如果用户已经通过以下任一命令启动流程,**本 skill 不生效**(用户主动走流程 = 门禁已过):
13
+ - `/autospec:run`(含 --workflow 参数)
14
+ - `/autospec:explore`、`/autospec:propose`、`/autospec:apply`、`/autospec:archive`
15
+
16
+ ## 门禁检查(仅非命令触发时执行)
17
+
18
+ 1. 确认 `.autospec/knowledge/` 存在(如不存在,提示用户运行 `autospec init`)
19
+ 2. **情境识别(CP2)**:分析任务类型,推荐最匹配的迭代模式:
20
+ - 新功能/大变更 → `/autospec:run --workflow=waterfall` 或 `/autospec:explore`
21
+ - 紧急bug修复 → `/autospec:run --workflow=hotfix`
22
+ - 技术可行性验证 → `/autospec:run --workflow=experiment`
23
+ - 用户故事迭代 → `/autospec:run --workflow=agile`
24
+ 3. 提醒用户:检测到开发任务,建议通过 AutoSpec 流程执行
25
+ 4. 推荐命令:
26
+ - `/autospec:run` — 完整流程 + 模式选择(推荐)
27
+ - `/autospec:explore` — 从需求探索开始
28
+ - `/autospec:run --workflow=hotfix` — 快速修复
29
+ - `/autospec:run --workflow=experiment` — 技术探索
30
+ - `/autospec:run --workflow=agile` — 敏捷迭代
31
+ 5. 如果用户明确表示不走流程,尊重用户选择
32
+
33
+ ## 违规处理
34
+
35
+ 如果发现自己已经跳过门禁开始写代码(且不是通过 / 命令触发的):
36
+ - **立即停止**
37
+ - 提醒用户可以使用 `/autospec:run` 启动流程
38
+ - 或使用 `/autospec:run --workflow=hotfix`、`/autospec:run --workflow=experiment` 选择更轻量的模式
@@ -0,0 +1,195 @@
1
+ ---
2
+ name: testing-stage
3
+ description: "When test case generation, QA testing, test plan creation, or test coverage analysis is needed — loads AutoSpec testing process and skill."
4
+ ---
5
+
6
+ # AutoSpec QA测试(Stage 05)
7
+
8
+ 你正在执行QA测试阶段。此阶段从用户视角验证产品功能正确性。
9
+
10
+ ## 前置检查
11
+
12
+ 1. 确认代码审查阶段已完成(检查 `.autospec/runtime/state.json`)
13
+ 2. 读取 `${KNOWLEDGE}/principles/constitution.md` → 确认红线
14
+ 3. 读取需求文档(验收标准是测试用例的基础)
15
+ 4. **检查是否为多系统项目**:读取 `.autospec/runtime/config.json` 的 `subsystems` 字段
16
+ 5. **检查是否需要效果评测**:检查是否有 ai 类型子系统或 needsEvaluation=true
17
+ 6. 如有角色配置,加载 `${KNOWLEDGE}/guides/stages/{角色}-profile.md` 中**QA测试阶段**关注点(如后端关注接口契约测试/数据一致性测试)
18
+ 7. 加载认知增强原则:读取 `${KNOWLEDGE}/principles/core-principles.md` → 本阶段重点应用 CP6(错误即信号)、CP10(自我质检)、CP1(合伙人模式)
19
+
20
+ ## 执行
21
+
22
+ ### Step 1: 确定模式
23
+
24
+ 读取 `.autospec/runtime/config.json`,检查 `subsystems` 字段:
25
+ - **无 subsystems 或长度为1** → 单系统模式
26
+ - **有 subsystems 且长度>1** → 多系统模式
27
+
28
+ 检查是否需要效果评测:
29
+ - 有 `type: ai` 的子系统或 `needsEvaluation: true` → 需要效果评测开发
30
+
31
+ ### Step 2: 单系统模式(普通功能)
32
+
33
+ 1. **【强制】** 加载做类skill:读取 `${KNOWLEDGE}/guides/stages/test-planner.md` → **测试方案规划**
34
+ 2. **【强制】** 加载做类skill:读取 `${KNOWLEDGE}/guides/stages/test-generator.md` → **测试代码生成**
35
+ 3. 加载方法论原则:读取 `${KNOWLEDGE}/principles/core-principles.md` → 注入 P1(验证为王) 测试原则
36
+ 4. 逐条对照需求验收标准,生成测试用例
37
+ 5. 生成边界条件和异常路径测试
38
+ 6. 针对关键假设设计验证用例
39
+ 7. 如有角色特有测试关注点(如后端的"幂等验证"、前端的"跨浏览器兼容"),额外覆盖
40
+ 8. 将测试用例转化为可执行的测试代码
41
+ 9. **运行所有测试**,生成测试报告
42
+
43
+ ### Step 3: 多系统模式
44
+
45
+ 1. **各子系统测试**:
46
+ ```
47
+ for subsystem in config.subsystems:
48
+ a. 运行 {subsystem.test}
49
+ b. 收集测试结果
50
+ c. 产出 tests/{subsystem.name}.md
51
+ ```
52
+
53
+ 2. **集成测试**:
54
+ - 设计跨系统测试场景(基于 design/overview.md 中的系统交互)
55
+ - 执行端到端测试
56
+ - 产出 `tests/integration.md`
57
+
58
+ 3. **验收标准对照**:
59
+ - 逐条对照需求文档中的验收标准
60
+ - 确保每条标准都有对应测试覆盖
61
+
62
+ ### Step 4: 效果评测开发(AI/模型类功能)
63
+
64
+ 当项目包含 AI/模型 相关功能时,测试阶段需要额外开发:
65
+
66
+ #### 4.1 评测需求分析
67
+
68
+ 1. 从需求文档中提取效果相关指标:
69
+ - 准确率、召回率、F1等(分类任务)
70
+ - BLEU、ROUGE等(生成任务)
71
+ - 任务完成率、响应质量(智能体)
72
+ - 业务效果指标(转化率、用户满意度等)
73
+
74
+ 2. 确定评测方法:
75
+ - 自动评测(有标注数据)
76
+ - 人工评测(需要评测人员)
77
+ - A/B测试(线上对比)
78
+ - LLM-as-Judge(用LLM评估LLM)
79
+
80
+ #### 4.2 评测数据集构建
81
+
82
+ 1. 从需求中提取典型场景
83
+ 2. 构造正例和反例
84
+ 3. 标注预期结果
85
+ 4. 写入 `tests/evaluation/dataset/`
86
+
87
+ #### 4.3 评测脚本开发
88
+
89
+ 产出 `tests/evaluation/evaluator.py`:
90
+ - 加载模型/智能体
91
+ - 执行评测数据集
92
+ - 计算效果指标
93
+ - 生成评测报告
94
+
95
+ #### 4.4 智能体评测
96
+
97
+ 如果项目包含智能体(Agent)功能:
98
+
99
+ 1. **任务完成评测**:定义评测任务集,执行并判断成功率
100
+ 2. **响应质量评测**:使用LLM-as-Judge评估
101
+ 3. **工具使用评测**:验证工具调用正确性
102
+
103
+ #### 4.5 数据系统测试
104
+
105
+ 如果项目包含数据系统(data类型):
106
+
107
+ 1. **数据质量测试**:完整性、一致性、准确性检查
108
+ 2. **ETL流程测试**:数据转换正确性、异常处理
109
+ 3. **性能测试**:大数据量处理能力
110
+
111
+ #### 4.6 评测报告生成
112
+
113
+ 产出 `tests/evaluation-report.md`:
114
+ - 评测概述(方法、数据集规模)
115
+ - 效果指标结果
116
+ - 与基线/目标对比
117
+ - Badcase分析
118
+ - 改进建议
119
+
120
+ ## 认知纪律(本阶段:批判思维 + 错误捕获)
121
+
122
+ - **CP6 错误即信号**:测试失败不是坏事,是发现问题的好时机。每个失败的测试用例都要分析根因:是代码bug?需求歧义?还是测试用例设计问题?
123
+ - **CP10 自我质检**:测试完成前自问:我是否覆盖了所有验收标准?核心路径都测了吗?有没有"看起来测了很多但关键的没测"的情况?
124
+ - **CP1 合伙人模式**:如果测试过程中发现需求或设计的缺陷,必须指出,不要只是让测试通过
125
+
126
+ ## 验证
127
+
128
+ ### Layer 1: 确定性验证
129
+ - 所有测试用例执行通过
130
+ - 测试覆盖率满足要求
131
+ - 无跳过或被禁用的测试
132
+ - **多系统模式**:所有子系统测试都通过
133
+ - **效果评测模式**:评测脚本可运行,评测报告已产出
134
+
135
+ ### Layer 2: AI审查(做审分离)
136
+ 使用 **test-coverage-reviewer** Agent(专用测试审查Agent)执行独立审查:
137
+ ```
138
+ **【强制】** 调用 Agent 工具:
139
+ prompt: 请审查以下测试方案和结果。
140
+ 1. 先读取审查标准: ${KNOWLEDGE}/guides/stages/test-reviewer.md
141
+ 2. 测试用例和测试代码
142
+ 3. 测试执行报告(或 tests/ 目录)
143
+ 4. 上游需求文档: .autospec/specs/{feature}/requirement.md(用于验证覆盖度)
144
+ 5. 关键假设清单
145
+ 注意:你是独立审查者,评估测试充分性,不参考测试生成过程
146
+ ```
147
+
148
+ ### Layer 3: Benchmarks 评测(新增)
149
+
150
+ **【强制】** 执行 testing benchmarks 评测:
151
+ ```
152
+ 1. 执行测试套件,收集覆盖率报告
153
+ 2. 调用 benchmark-executor 执行评测:
154
+ - TST-001: 测试覆盖率(行覆盖>=80%、分支覆盖>=70%、核心功能100%)
155
+ - TST-002: 测试质量(无Flaky test、执行时间<5分钟、测试数据独立)
156
+ - TST-003: 集成测试(关键路径有集成测试、契约测试覆盖)
157
+ 3. 生成评测报告到 .autospec/benchmarks/results/testing-{run-id}.json
158
+ 4. 如评测未通过:
159
+ - 生成改进建议
160
+ - 返回 Step 2 补充测试
161
+ - 最多重试 3 次
162
+ 5. 如评测通过:
163
+ - 记录评测结果
164
+ - 允许进入 delivery stage
165
+ ```
166
+
167
+ **评测触发方式**:
168
+ - 自动触发:测试执行完成后自动执行
169
+ - 手动触发:`/benchmark --run --stage=testing`
170
+ - 变更触发:tests/ 目录修改后自动重新评测
171
+
172
+ ## 阶段门禁(所有自主级别)
173
+
174
+ 使用 **stage-gate-evaluator** Agent 评估产出物是否达到准出标准:
175
+ ```
176
+ **【强制】** 调用 Agent 工具:
177
+ prompt: 请评估QA测试阶段的产出物是否达到准出标准。
178
+ 当前阶段:Stage 05 QA测试
179
+ 产出物:测试用例 + 测试执行报告(或 tests/ 目录)
180
+ 准出标准:测试覆盖率 + 验收标准覆盖度
181
+ 上游契约:.autospec/specs/{feature}/requirement.md
182
+ 自主级别:{自主/交互}
183
+ ```
184
+
185
+ **根据自主级别处理评估结果**:
186
+ - **交互模式**:评估结果提交人工确认,AI 等待用户批准后继续
187
+ - **自主模式**:评估通过后自动进入下一阶段,评估不通过进入精准回退
188
+
189
+ ## 完成
190
+
191
+ - 两层验证通过 + 阶段门禁评估通过 → 输出测试报告 → 更新 `.autospec/runtime/state.json` → 进入交付部署
192
+ - 不通过 → 精准回退:
193
+ - Level 1: 内联重试(单次)
194
+ - Level 2: 修正循环(最多3次,只重处理失败项)
195
+ - Level 3: 3次后使用 **failure-diagnostician** Agent 执行根因分析,再升级用户
@@ -0,0 +1,288 @@
1
+ /**
2
+ * Global Init - 全局初始化脚本
3
+ *
4
+ * 自动在用户主目录创建全局知识库结构
5
+ * 创建 Claude Code skills 符号链接
6
+ * 注册全局 plugin.json
7
+ */
8
+
9
+ import fs from 'fs';
10
+ import path from 'path';
11
+ import os from 'os';
12
+ import chalk from 'chalk';
13
+ import {
14
+ GLOBAL_AUTOSPEC_DIR,
15
+ GLOBAL_AUTOSPEC_SUBDIRS,
16
+ CLAUDE_CODE_SKILLS_DIR
17
+ } from '../install/constants.js';
18
+
19
+ /**
20
+ * 获取全局知识库根目录
21
+ */
22
+ function getGlobalDir() {
23
+ return path.join(os.homedir(), GLOBAL_AUTOSPEC_DIR);
24
+ }
25
+
26
+ /**
27
+ * 获取 Claude Code skills 目录
28
+ */
29
+ function getClaudeCodeSkillsDir() {
30
+ return path.join(os.homedir(), CLAUDE_CODE_SKILLS_DIR);
31
+ }
32
+
33
+ /**
34
+ * 创建目录
35
+ */
36
+ function ensureDir(dir) {
37
+ if (!fs.existsSync(dir)) {
38
+ fs.mkdirSync(dir, { recursive: true });
39
+ }
40
+ }
41
+
42
+ /**
43
+ * 复制目录
44
+ */
45
+ function copyDir(src, dest) {
46
+ ensureDir(dest);
47
+ if (!fs.existsSync(src)) {
48
+ return;
49
+ }
50
+ const entries = fs.readdirSync(src, { withFileTypes: true });
51
+ for (const entry of entries) {
52
+ const srcPath = path.join(src, entry.name);
53
+ const destPath = path.join(dest, entry.name);
54
+ if (entry.isDirectory()) {
55
+ copyDir(srcPath, destPath);
56
+ } else {
57
+ fs.copyFileSync(srcPath, destPath);
58
+ }
59
+ }
60
+ }
61
+
62
+ /**
63
+ * 初始化全局知识库
64
+ */
65
+ export function initGlobalKnowledge(options = {}) {
66
+ const globalDir = getGlobalDir();
67
+ const results = {
68
+ directoriesCreated: false,
69
+ skillsLinked: false,
70
+ pluginJsonCreated: false,
71
+ errors: []
72
+ };
73
+
74
+ console.log(chalk.bold('\n AutoSpec Global Knowledge Init\n'));
75
+ console.log(` Target: ${globalDir}`);
76
+ console.log();
77
+
78
+ try {
79
+ // 1. 创建全局知识库目录结构
80
+ const subdirs = Object.values(GLOBAL_AUTOSPEC_SUBDIRS);
81
+ for (const subdir of subdirs) {
82
+ const fullPath = path.join(globalDir, subdir);
83
+ ensureDir(fullPath);
84
+ }
85
+ results.directoriesCreated = true;
86
+ console.log(chalk.green(' ✓') + ' 目录结构已创建');
87
+
88
+ // 2. 创建 Claude Code skills 符号链接
89
+ results.skillsLinked = linkClaudeCodeSkills(globalDir);
90
+ if (results.skillsLinked) {
91
+ console.log(chalk.green(' ✓') + ' Claude Code skills 已链接');
92
+ }
93
+
94
+ // 3. 创建全局 plugin.json
95
+ results.pluginJsonCreated = createGlobalPluginJson(globalDir);
96
+ if (results.pluginJsonCreated) {
97
+ console.log(chalk.green(' ✓') + ' 全局 plugin.json 已创建');
98
+ }
99
+
100
+ console.log();
101
+ return results;
102
+ } catch (e) {
103
+ results.errors.push(e.message);
104
+ console.log(chalk.red(` ✗ 初始化失败: ${e.message}`));
105
+ return results;
106
+ }
107
+ }
108
+
109
+ /**
110
+ * 创建 Claude Code skills 符号链接
111
+ */
112
+ function linkClaudeCodeSkills(globalDir) {
113
+ const autoSpecSkillsDir = path.join(globalDir, GLOBAL_AUTOSPEC_SUBDIRS.SKILLS);
114
+ const claudeSkillsDir = getClaudeCodeSkillsDir();
115
+
116
+ // 确保 Claude Code skills 目录存在
117
+ ensureDir(claudeSkillsDir);
118
+
119
+ // 创建符号链接指向全局 skills
120
+ const symlinkPath = path.join(claudeSkillsDir, 'autospec');
121
+
122
+ try {
123
+ // 如果已存在,先删除
124
+ if (fs.existsSync(symlinkPath)) {
125
+ const stats = fs.lstatSync(symlinkPath);
126
+ if (stats.isSymbolicLink()) {
127
+ fs.unlinkSync(symlinkPath);
128
+ } else {
129
+ // 如果是目录,先删除
130
+ fs.rmSync(symlinkPath, { recursive: true });
131
+ }
132
+ }
133
+
134
+ // 创建符号链接
135
+ fs.symlinkSync(autoSpecSkillsDir, symlinkPath, 'dir');
136
+ return true;
137
+ } catch (e) {
138
+ // 符号链接创建失败时使用副本
139
+ console.log(chalk.yellow(` ⚠ 符号链接创建失败,使用副本: ${e.message}`));
140
+
141
+ const targetPath = path.join(claudeSkillsDir, 'autospec');
142
+ if (fs.existsSync(targetPath)) {
143
+ fs.rmSync(targetPath, { recursive: true });
144
+ }
145
+ copyDir(autoSpecSkillsDir, targetPath);
146
+ return true;
147
+ }
148
+ }
149
+
150
+ /**
151
+ * 创建全局 plugin.json
152
+ */
153
+ function createGlobalPluginJson(globalDir) {
154
+ const pluginJsonPath = path.join(globalDir, 'plugin.json');
155
+
156
+ const pluginJson = {
157
+ name: 'autospec-global',
158
+ version: '1.0.0',
159
+ namespace: 'autospec',
160
+ description: 'AutoSpec 全局知识库',
161
+ skills: [],
162
+ commands: [],
163
+ agents: []
164
+ };
165
+
166
+ try {
167
+ fs.writeFileSync(pluginJsonPath, JSON.stringify(pluginJson, null, 2));
168
+ return true;
169
+ } catch (e) {
170
+ return false;
171
+ }
172
+ }
173
+
174
+ /**
175
+ * 同步全局知识到项目
176
+ */
177
+ export function syncToProject(projectDir, options = {}) {
178
+ const globalDir = getGlobalDir();
179
+ const results = {
180
+ skillsSynced: false,
181
+ knowledgeSynced: false,
182
+ errors: []
183
+ };
184
+
185
+ console.log(chalk.bold('\n Syncing Global Knowledge to Project\n'));
186
+ console.log(` Global: ${globalDir}`);
187
+ console.log(` Project: ${projectDir}`);
188
+ console.log();
189
+
190
+ try {
191
+ // 同步 skills
192
+ const globalSkillsDir = path.join(globalDir, GLOBAL_AUTOSPEC_SUBDIRS.SKILLS);
193
+ const projectSkillsDir = path.join(projectDir, '.autospec', 'skills');
194
+
195
+ if (fs.existsSync(globalSkillsDir)) {
196
+ copyDir(globalSkillsDir, projectSkillsDir);
197
+ results.skillsSynced = true;
198
+ console.log(chalk.green(' ✓') + ' Skills synced');
199
+ }
200
+
201
+ // 同步 knowledge
202
+ const globalKnowledgeDir = path.join(globalDir, GLOBAL_AUTOSPEC_SUBDIRS.KNOWLEDGE);
203
+ const projectKnowledgeDir = path.join(projectDir, '.autospec', 'knowledge');
204
+
205
+ if (fs.existsSync(globalKnowledgeDir)) {
206
+ // 只同步自由区
207
+ const stagesDir = path.join(globalKnowledgeDir, 'guides', 'stages');
208
+ const domainDir = path.join(globalKnowledgeDir, 'domain');
209
+
210
+ ensureDir(path.join(projectKnowledgeDir, 'guides'));
211
+
212
+ if (fs.existsSync(stagesDir)) {
213
+ copyDir(stagesDir, path.join(projectKnowledgeDir, 'guides', 'stages'));
214
+ }
215
+ if (fs.existsSync(domainDir)) {
216
+ copyDir(domainDir, path.join(projectKnowledgeDir, 'domain'));
217
+ }
218
+ results.knowledgeSynced = true;
219
+ console.log(chalk.green(' ✓') + ' Knowledge synced');
220
+ }
221
+
222
+ console.log();
223
+ return results;
224
+ } catch (e) {
225
+ results.errors.push(e.message);
226
+ console.log(chalk.red(` ✗ Sync failed: ${e.message}`));
227
+ return results;
228
+ }
229
+ }
230
+
231
+ /**
232
+ * 检查全局知识库是否已初始化
233
+ */
234
+ export function isGlobalInitialized() {
235
+ const globalDir = getGlobalDir();
236
+ return fs.existsSync(globalDir);
237
+ }
238
+
239
+ /**
240
+ * 获取全局知识库状态
241
+ */
242
+ export function getGlobalStatus() {
243
+ const globalDir = getGlobalDir();
244
+
245
+ if (!fs.existsSync(globalDir)) {
246
+ return { initialized: false };
247
+ }
248
+
249
+ // 统计
250
+ const skillsDir = path.join(globalDir, GLOBAL_AUTOSPEC_SUBDIRS.SKILLS);
251
+ let skillCount = 0;
252
+ if (fs.existsSync(skillsDir)) {
253
+ skillCount = fs.readdirSync(skillsDir).filter(f => {
254
+ const fullPath = path.join(skillsDir, f);
255
+ return fs.statSync(fullPath).isDirectory();
256
+ }).length;
257
+ }
258
+
259
+ const rolesDir = path.join(globalDir, GLOBAL_AUTOSPEC_SUBDIRS.ROLES);
260
+ let roleCount = 0;
261
+ if (fs.existsSync(rolesDir)) {
262
+ roleCount = fs.readdirSync(rolesDir).filter(f => {
263
+ const fullPath = path.join(rolesDir, f);
264
+ return fs.statSync(fullPath).isDirectory();
265
+ }).length;
266
+ }
267
+
268
+ // 检查 Claude Code skills 链接
269
+ const claudeSkillsDir = getClaudeCodeSkillsDir();
270
+ const symlinkPath = path.join(claudeSkillsDir, 'autospec');
271
+ const skillsLinked = fs.existsSync(symlinkPath);
272
+
273
+ return {
274
+ initialized: true,
275
+ path: globalDir,
276
+ skillCount,
277
+ roleCount,
278
+ skillsLinked,
279
+ claudeCodeSkillsPath: symlinkPath
280
+ };
281
+ }
282
+
283
+ export default {
284
+ initGlobalKnowledge,
285
+ syncToProject,
286
+ isGlobalInitialized,
287
+ getGlobalStatus
288
+ };