@hunter-harness/workflow-harness 0.2.27 → 0.2.29

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 (226) hide show
  1. package/harness/bundles/general/claude-code/.harness-build.json +1 -1
  2. package/harness/bundles/general/claude-code/contracts/workflow-policy.json +34 -2
  3. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +1 -1
  4. package/harness/bundles/general/claude-code/harness-archive/templates/render-summary.mjs +25 -6
  5. package/harness/bundles/general/claude-code/harness-archive/templates/summary-data-template.json +44 -0
  6. package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
  7. package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  8. package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +493 -74
  9. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +1 -1
  10. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +1 -1
  11. package/harness/bundles/general/claude-code/harness-review/SKILL.md +1 -1
  12. package/harness/bundles/general/claude-code/harness-run/SKILL.md +1 -1
  13. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +1 -1
  14. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
  15. package/harness/bundles/general/claude-code/harness-test/SKILL.md +26 -2
  16. package/harness/bundles/general/claude-code/harness-test/checklist.md +15 -0
  17. package/harness/bundles/general/claude-code/harness-test/reference.md +28 -4
  18. package/harness/bundles/general/claude-code/scripts/harness_archive.py +2061 -187
  19. package/harness/bundles/general/claude-code/scripts/harness_events.py +43 -9
  20. package/harness/bundles/general/claude-code/scripts/harness_gate.py +491 -7
  21. package/harness/bundles/general/claude-code/scripts/harness_integration.py +232 -0
  22. package/harness/bundles/general/claude-code/scripts/harness_phase.py +758 -1
  23. package/harness/bundles/general/claude-code/scripts/harness_plan_finalize.py +74 -0
  24. package/harness/bundles/general/claude-code/scripts/harness_retry.py +175 -0
  25. package/harness/bundles/general/claude-code/scripts/harness_test_guard.py +702 -22
  26. package/harness/bundles/general/claude-code/scripts/harness_test_runner.py +974 -0
  27. package/harness/bundles/general/claude-code/scripts/harness_workflow_policy.py +87 -0
  28. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  29. package/harness/bundles/general/codebuddy/contracts/workflow-policy.json +34 -2
  30. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +1 -1
  31. package/harness/bundles/general/codebuddy/harness-archive/templates/render-summary.mjs +25 -6
  32. package/harness/bundles/general/codebuddy/harness-archive/templates/summary-data-template.json +44 -0
  33. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
  34. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  35. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +493 -74
  36. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  37. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +1 -1
  38. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +1 -1
  39. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +1 -1
  40. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +1 -1
  41. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
  42. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +26 -2
  43. package/harness/bundles/general/codebuddy/harness-test/checklist.md +15 -0
  44. package/harness/bundles/general/codebuddy/harness-test/reference.md +28 -4
  45. package/harness/bundles/general/codebuddy/scripts/harness_archive.py +2061 -187
  46. package/harness/bundles/general/codebuddy/scripts/harness_events.py +43 -9
  47. package/harness/bundles/general/codebuddy/scripts/harness_gate.py +491 -7
  48. package/harness/bundles/general/codebuddy/scripts/harness_integration.py +232 -0
  49. package/harness/bundles/general/codebuddy/scripts/harness_phase.py +758 -1
  50. package/harness/bundles/general/codebuddy/scripts/harness_plan_finalize.py +74 -0
  51. package/harness/bundles/general/codebuddy/scripts/harness_retry.py +175 -0
  52. package/harness/bundles/general/codebuddy/scripts/harness_test_guard.py +702 -22
  53. package/harness/bundles/general/codebuddy/scripts/harness_test_runner.py +974 -0
  54. package/harness/bundles/general/codebuddy/scripts/harness_workflow_policy.py +87 -0
  55. package/harness/bundles/general/codex/.harness-build.json +1 -1
  56. package/harness/bundles/general/codex/contracts/workflow-policy.json +34 -2
  57. package/harness/bundles/general/codex/harness-archive/SKILL.md +1 -1
  58. package/harness/bundles/general/codex/harness-archive/templates/render-summary.mjs +25 -6
  59. package/harness/bundles/general/codex/harness-archive/templates/summary-data-template.json +44 -0
  60. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
  61. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +1 -1
  62. package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +493 -74
  63. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
  64. package/harness/bundles/general/codex/harness-plan/SKILL.md +1 -1
  65. package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
  66. package/harness/bundles/general/codex/harness-run/SKILL.md +1 -1
  67. package/harness/bundles/general/codex/harness-submit/SKILL.md +1 -1
  68. package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
  69. package/harness/bundles/general/codex/harness-test/SKILL.md +26 -2
  70. package/harness/bundles/general/codex/harness-test/checklist.md +15 -0
  71. package/harness/bundles/general/codex/harness-test/reference.md +28 -4
  72. package/harness/bundles/general/codex/scripts/harness_archive.py +2061 -187
  73. package/harness/bundles/general/codex/scripts/harness_events.py +43 -9
  74. package/harness/bundles/general/codex/scripts/harness_gate.py +491 -7
  75. package/harness/bundles/general/codex/scripts/harness_integration.py +232 -0
  76. package/harness/bundles/general/codex/scripts/harness_phase.py +758 -1
  77. package/harness/bundles/general/codex/scripts/harness_plan_finalize.py +74 -0
  78. package/harness/bundles/general/codex/scripts/harness_retry.py +175 -0
  79. package/harness/bundles/general/codex/scripts/harness_test_guard.py +702 -22
  80. package/harness/bundles/general/codex/scripts/harness_test_runner.py +974 -0
  81. package/harness/bundles/general/codex/scripts/harness_workflow_policy.py +87 -0
  82. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  83. package/harness/bundles/general/cursor/contracts/workflow-policy.json +34 -2
  84. package/harness/bundles/general/cursor/harness-archive/SKILL.md +1 -1
  85. package/harness/bundles/general/cursor/harness-archive/templates/render-summary.mjs +25 -6
  86. package/harness/bundles/general/cursor/harness-archive/templates/summary-data-template.json +44 -0
  87. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
  88. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  89. package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +493 -74
  90. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
  91. package/harness/bundles/general/cursor/harness-plan/SKILL.md +1 -1
  92. package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
  93. package/harness/bundles/general/cursor/harness-run/SKILL.md +1 -1
  94. package/harness/bundles/general/cursor/harness-submit/SKILL.md +1 -1
  95. package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
  96. package/harness/bundles/general/cursor/harness-test/SKILL.md +26 -2
  97. package/harness/bundles/general/cursor/harness-test/checklist.md +15 -0
  98. package/harness/bundles/general/cursor/harness-test/reference.md +28 -4
  99. package/harness/bundles/general/cursor/scripts/harness_archive.py +2061 -187
  100. package/harness/bundles/general/cursor/scripts/harness_events.py +43 -9
  101. package/harness/bundles/general/cursor/scripts/harness_gate.py +491 -7
  102. package/harness/bundles/general/cursor/scripts/harness_integration.py +232 -0
  103. package/harness/bundles/general/cursor/scripts/harness_phase.py +758 -1
  104. package/harness/bundles/general/cursor/scripts/harness_plan_finalize.py +74 -0
  105. package/harness/bundles/general/cursor/scripts/harness_retry.py +175 -0
  106. package/harness/bundles/general/cursor/scripts/harness_test_guard.py +702 -22
  107. package/harness/bundles/general/cursor/scripts/harness_test_runner.py +974 -0
  108. package/harness/bundles/general/cursor/scripts/harness_workflow_policy.py +87 -0
  109. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  110. package/harness/bundles/java/claude-code/contracts/workflow-policy.json +34 -2
  111. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
  112. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +1 -1
  113. package/harness/bundles/java/claude-code/harness-archive/templates/render-summary.mjs +25 -6
  114. package/harness/bundles/java/claude-code/harness-archive/templates/summary-data-template.json +44 -0
  115. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
  116. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  117. package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +493 -74
  118. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
  119. package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
  120. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +1 -1
  121. package/harness/bundles/java/claude-code/harness-review/SKILL.md +1 -1
  122. package/harness/bundles/java/claude-code/harness-run/SKILL.md +1 -1
  123. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +1 -1
  124. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
  125. package/harness/bundles/java/claude-code/harness-test/SKILL.md +26 -2
  126. package/harness/bundles/java/claude-code/scripts/harness_archive.py +2061 -187
  127. package/harness/bundles/java/claude-code/scripts/harness_events.py +43 -9
  128. package/harness/bundles/java/claude-code/scripts/harness_gate.py +491 -7
  129. package/harness/bundles/java/claude-code/scripts/harness_integration.py +232 -0
  130. package/harness/bundles/java/claude-code/scripts/harness_phase.py +758 -1
  131. package/harness/bundles/java/claude-code/scripts/harness_plan_finalize.py +74 -0
  132. package/harness/bundles/java/claude-code/scripts/harness_retry.py +175 -0
  133. package/harness/bundles/java/claude-code/scripts/harness_test_guard.py +702 -22
  134. package/harness/bundles/java/claude-code/scripts/harness_test_runner.py +974 -0
  135. package/harness/bundles/java/claude-code/scripts/harness_workflow_policy.py +87 -0
  136. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  137. package/harness/bundles/java/codebuddy/contracts/workflow-policy.json +34 -2
  138. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
  139. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +1 -1
  140. package/harness/bundles/java/codebuddy/harness-archive/templates/render-summary.mjs +25 -6
  141. package/harness/bundles/java/codebuddy/harness-archive/templates/summary-data-template.json +44 -0
  142. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
  143. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  144. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +493 -74
  145. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  146. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
  147. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +1 -1
  148. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +1 -1
  149. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +1 -1
  150. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +1 -1
  151. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
  152. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +26 -2
  153. package/harness/bundles/java/codebuddy/scripts/harness_archive.py +2061 -187
  154. package/harness/bundles/java/codebuddy/scripts/harness_events.py +43 -9
  155. package/harness/bundles/java/codebuddy/scripts/harness_gate.py +491 -7
  156. package/harness/bundles/java/codebuddy/scripts/harness_integration.py +232 -0
  157. package/harness/bundles/java/codebuddy/scripts/harness_phase.py +758 -1
  158. package/harness/bundles/java/codebuddy/scripts/harness_plan_finalize.py +74 -0
  159. package/harness/bundles/java/codebuddy/scripts/harness_retry.py +175 -0
  160. package/harness/bundles/java/codebuddy/scripts/harness_test_guard.py +702 -22
  161. package/harness/bundles/java/codebuddy/scripts/harness_test_runner.py +974 -0
  162. package/harness/bundles/java/codebuddy/scripts/harness_workflow_policy.py +87 -0
  163. package/harness/bundles/java/codex/.harness-build.json +1 -1
  164. package/harness/bundles/java/codex/contracts/workflow-policy.json +34 -2
  165. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
  166. package/harness/bundles/java/codex/harness-archive/SKILL.md +1 -1
  167. package/harness/bundles/java/codex/harness-archive/templates/render-summary.mjs +25 -6
  168. package/harness/bundles/java/codex/harness-archive/templates/summary-data-template.json +44 -0
  169. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
  170. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +1 -1
  171. package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +493 -74
  172. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
  173. package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
  174. package/harness/bundles/java/codex/harness-plan/SKILL.md +1 -1
  175. package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
  176. package/harness/bundles/java/codex/harness-run/SKILL.md +1 -1
  177. package/harness/bundles/java/codex/harness-submit/SKILL.md +1 -1
  178. package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
  179. package/harness/bundles/java/codex/harness-test/SKILL.md +26 -2
  180. package/harness/bundles/java/codex/scripts/harness_archive.py +2061 -187
  181. package/harness/bundles/java/codex/scripts/harness_events.py +43 -9
  182. package/harness/bundles/java/codex/scripts/harness_gate.py +491 -7
  183. package/harness/bundles/java/codex/scripts/harness_integration.py +232 -0
  184. package/harness/bundles/java/codex/scripts/harness_phase.py +758 -1
  185. package/harness/bundles/java/codex/scripts/harness_plan_finalize.py +74 -0
  186. package/harness/bundles/java/codex/scripts/harness_retry.py +175 -0
  187. package/harness/bundles/java/codex/scripts/harness_test_guard.py +702 -22
  188. package/harness/bundles/java/codex/scripts/harness_test_runner.py +974 -0
  189. package/harness/bundles/java/codex/scripts/harness_workflow_policy.py +87 -0
  190. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  191. package/harness/bundles/java/cursor/contracts/workflow-policy.json +34 -2
  192. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
  193. package/harness/bundles/java/cursor/harness-archive/SKILL.md +1 -1
  194. package/harness/bundles/java/cursor/harness-archive/templates/render-summary.mjs +25 -6
  195. package/harness/bundles/java/cursor/harness-archive/templates/summary-data-template.json +44 -0
  196. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
  197. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  198. package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +493 -74
  199. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
  200. package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
  201. package/harness/bundles/java/cursor/harness-plan/SKILL.md +1 -1
  202. package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
  203. package/harness/bundles/java/cursor/harness-run/SKILL.md +1 -1
  204. package/harness/bundles/java/cursor/harness-submit/SKILL.md +1 -1
  205. package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
  206. package/harness/bundles/java/cursor/harness-test/SKILL.md +26 -2
  207. package/harness/bundles/java/cursor/scripts/harness_archive.py +2061 -187
  208. package/harness/bundles/java/cursor/scripts/harness_events.py +43 -9
  209. package/harness/bundles/java/cursor/scripts/harness_gate.py +491 -7
  210. package/harness/bundles/java/cursor/scripts/harness_integration.py +232 -0
  211. package/harness/bundles/java/cursor/scripts/harness_phase.py +758 -1
  212. package/harness/bundles/java/cursor/scripts/harness_plan_finalize.py +74 -0
  213. package/harness/bundles/java/cursor/scripts/harness_retry.py +175 -0
  214. package/harness/bundles/java/cursor/scripts/harness_test_guard.py +702 -22
  215. package/harness/bundles/java/cursor/scripts/harness_test_runner.py +974 -0
  216. package/harness/bundles/java/cursor/scripts/harness_workflow_policy.py +87 -0
  217. package/harness/manifests/general/claude-code.json +34 -26
  218. package/harness/manifests/general/codebuddy.json +34 -26
  219. package/harness/manifests/general/codex.json +34 -26
  220. package/harness/manifests/general/cursor.json +34 -26
  221. package/harness/manifests/java/claude-code.json +34 -26
  222. package/harness/manifests/java/codebuddy.json +34 -26
  223. package/harness/manifests/java/codex.json +34 -26
  224. package/harness/manifests/java/cursor.json +34 -26
  225. package/hunter-workflow-family.json +2 -2
  226. package/package.json +1 -1
@@ -3,7 +3,7 @@ name: harness-knowledge-query
3
3
  description: 根据新需求、设计任务、代码修改请求或问题排查,在规划和编码前查询 .harness/knowledge
4
4
  历史上下文。适用场景:query knowledge、查找历史需求、根据归档理解需求、继续之前类似开发、生成需求上下文包。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=d70b94f2d89d763b; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=3beba4c2f5327623; overlay=none; agent=codex; do not edit -->
7
7
  # harness-knowledge-query
8
8
 
9
9
  并行 change 中查询必须传 `--change <change-id>`;成功后以该 change 的 `meta/knowledge-context.json` 为稳定指针。全局 `context-packs/latest.json` 仅向后兼容,不得用于判断多个 active change 的上下文归属。
@@ -2,7 +2,7 @@
2
2
  name: harness-plan
3
3
  description: 将需求转化为设计文档+实施计划+完整测试场景表,必须在编码前完成。使用场景:需求分析、feature plan、技术方案设计、实现方案规划
4
4
  ---
5
- <!-- generated by harness_deploy.py; core=d70b94f2d89d763b; overlay=none; agent=codex; do not edit -->
5
+ <!-- generated by harness_deploy.py; core=3beba4c2f5327623; overlay=none; agent=codex; do not edit -->
6
6
  # harness-plan — 需求规划
7
7
 
8
8
  ## Purpose
@@ -3,7 +3,7 @@ name: harness-review
3
3
  description: 6维度代码审查(架构/安全/规范/兼容/测试/性能),对照项目规则(见
4
4
  .harness/context-index.json)和测试场景表,在隔离上下文运行。使用场景:代码审查、提交前检查、合并评审
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=d70b94f2d89d763b; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=3beba4c2f5327623; overlay=none; agent=codex; do not edit -->
7
7
  # harness-review — 代码审查
8
8
 
9
9
  ## Purpose
@@ -2,7 +2,7 @@
2
2
  name: harness-run
3
3
  description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编译验证),逐变更簇实现计划中的任务。使用场景:开始编码、实现功能、写代码、TDD 编码
4
4
  ---
5
- <!-- generated by harness_deploy.py; core=d70b94f2d89d763b; overlay=none; agent=codex; do not edit -->
5
+ <!-- generated by harness_deploy.py; core=3beba4c2f5327623; overlay=none; agent=codex; do not edit -->
6
6
  # harness-run — 需求编码
7
7
 
8
8
  ## Purpose
@@ -3,7 +3,7 @@ name: harness-submit
3
3
  description: 最终提交封装:验证→中文 commit→提交/推送;worktree 模式含 --no-ff
4
4
  合并回主分支。使用场景:提交代码、commit、push、合并分支、merge to main、完成开发
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=d70b94f2d89d763b; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=3beba4c2f5327623; overlay=none; agent=codex; do not edit -->
7
7
  # harness-submit — 最终提交(含 worktree 合并)
8
8
 
9
9
  ## Purpose
@@ -2,7 +2,7 @@
2
2
  name: harness-sync
3
3
  description: 检查并更新项目AI元数据(CodeGraph索引、harness-codebase-map分析、CLAUDE.md、AGENTS.md、.harness/完整性),确保Claude对代码库的理解与最新代码一致。当用户说'同步/更新索引/刷新元数据/检查一致性'时使用
4
4
  ---
5
- <!-- generated by harness_deploy.py; core=d70b94f2d89d763b; overlay=none; agent=codex; do not edit -->
5
+ <!-- generated by harness_deploy.py; core=3beba4c2f5327623; overlay=none; agent=codex; do not edit -->
6
6
  # harness-sync — 元数据同步
7
7
 
8
8
  ## Purpose
@@ -2,7 +2,7 @@
2
2
  name: harness-test
3
3
  description: 测试执行:读取场景表,执行单元测试+API接口测试+数据兼容验证,输出测试报告。当用户说'跑测试/验证/跑用例/接口测试/单元测试'时使用
4
4
  ---
5
- <!-- generated by harness_deploy.py; core=d70b94f2d89d763b; overlay=none; agent=codex; do not edit -->
5
+ <!-- generated by harness_deploy.py; core=3beba4c2f5327623; overlay=none; agent=codex; do not edit -->
6
6
  # harness-test — 测试执行
7
7
 
8
8
  ## Purpose
@@ -47,6 +47,29 @@ description: 测试执行:读取场景表,执行单元测试+API接口测试
47
47
 
48
48
  并行服务测试先运行 `harness_change.py lease-port --change <id> --run-id <run-id> --range <start-end> --json`,再把返回端口传给 `harness_service.py ensure --leased-port <port> --lease-owner <run-id>`。`serviceStart` 的 command/health/overlay 可用 `{leasedPort}` 占位符;用户自启进程仍只进入 Service Gate,禁止 kill。测试清理的 `finally` 中运行 `harness_change.py release-port --change <id> --run-id <run-id> --json`,避免租约池耗尽。
49
49
 
50
+ ### Phase -1:资源安全门(任何测试命令之前)
51
+
52
+ 测试默认使用 `safe` 资源档位,禁止直接执行会把整套测试放进同一长生命周期的裸命令。所有本地测试命令必须由 `harness/scripts/harness_test_runner.py` 托管:
53
+
54
+ ```text
55
+ python harness/scripts/harness_test_runner.py exec --profile safe --timeout-seconds <秒> -- <测试命令及参数>
56
+ ```
57
+
58
+ 对于 Python `unittest` 测试库,必须使用逐模块隔离模式,不得执行裸 `python -m unittest discover ...`:
59
+
60
+ ```text
61
+ python harness/scripts/harness_test_runner.py unittest --profile safe --tests-dir <测试目录>
62
+ ```
63
+
64
+ 资源档位是硬合同:
65
+
66
+ - `safe`:默认;普通测试模块串行执行,每个模块使用全新进程。
67
+ - `system`:只执行服务生命周期、集成等资源密集型模块。
68
+ - `full`:先执行普通模块,再执行资源密集型模块;仍保持逐模块串行。
69
+ - `system` / `full` 只有在用户明确要求资源密集型测试、传入 `--confirm-resource-intensive`,或受控 CI 设置 `CI=true` / `HARNESS_ALLOW_RESOURCE_INTENSIVE_TESTS=1` 时才允许执行。
70
+
71
+ Runner 强制同项目单实例、低调度优先级、逐命令超时、正常结束和异常结束的进程树清理。`HARNESS_TEST_MAX_WORKERS` 默认且最高为 `2`,只能调低,不能调高;技术栈自身的并发参数也必须收敛到该值。Windows detached-service 模块在执行前先做 nested-breakaway 能力探测,受限沙箱不支持时立即返回 `DETACHED_PROCESS_CAPABILITY_UNAVAILABLE`,不得让每个服务用例逐一超时。出现该错误、`TEST_RUN_ALREADY_ACTIVE`、`PROCESS_TREE_ISOLATION_UNAVAILABLE` 或 `TEST_COMMAND_TIMEOUT` 必须停止,不得绕过 Runner 重跑裸命令。完整约束见 `checklist.md`「0.0-A 资源安全档位」。
72
+
50
73
  ### Phase 0:环境准备(主会话执行,需要交互确认)
51
74
 
52
75
  先 `harness_change.py resolve [--change] --json` 解析 change-id;再 **`harness_gate.py begin --phase test --change <id>`**(禁止手工 phase.start / 手写 ledger)。执行各项强制环境检查 + **命令执行模式 preflight (0.1)**;只有首选执行器不可用时,才执行 fallback 执行器探测。
@@ -112,7 +135,7 @@ Phase 1 前先读 `.harness/changes/<change-name>/evidence/verification-ledger.j
112
135
 
113
136
  ### 五、命令与请求超时治理
114
137
 
115
- 所有命令必须有「预期时长 + 超时上限」,超过预期必须输出一次状态行,**不得静默等待**。`durationMs > 10000` → 🟡 SLOW,`> 30000` → ❌ TIMEOUT_RISK。详见 `reference.md`「命令与请求超时治理」。
138
+ 所有命令必须通过资源安全 Runner 设置「预期时长 + 超时上限」,超过预期必须输出一次状态行,**不得静默等待**。测试模块超时或退出时必须清理其进程树;`durationMs > 10000` → 🟡 SLOW,`> 30000` → ❌ TIMEOUT_RISK。详见 `reference.md`「命令与请求超时治理」。
116
139
 
117
140
  ### 五-A、陈旧测试安全修复
118
141
 
@@ -167,6 +190,7 @@ python <skills-root>/scripts/harness_test_guard.py record --project . --change-d
167
190
  本 skill **仅允许**以下 blocking user confirmation;其余默认值 + `decision` 事件:
168
191
 
169
192
  1. **Service Gate**:仅当 `harness_service.py ensure` 返回 `needs-user-decision`(用户进程占端口)时询问处理方式
193
+ 2. **资源密集型测试确认**:仅当发布/验收确实需要 `system` 或 `full` 档位,且用户尚未明确授权时询问;获得授权后传入 `--confirm-resource-intensive`
170
194
 
171
195
  ## 执行日志
172
196
 
@@ -38,6 +38,20 @@ description: harness-test 的 Phase 0 环境准备 + Playwright 探测 + 关门
38
38
 
39
39
  然后确定变更名:用 Glob 搜索 `.harness/changes/*/plans/*-plan.md`(**排除 `.harness/archive/*/`**),读取 frontmatter 提取 `change-name`。
40
40
 
41
+ #### 0.0-A 资源安全档位(所有测试的硬前置)
42
+
43
+ - [ ] 默认选择 `safe`,测试命令由 `harness/scripts/harness_test_runner.py` 托管;禁止裸跑整库 discovery 或工具默认无限并发
44
+ - [ ] Python `unittest` 使用逐模块隔离模式;每个 `test_*.py` 在独立解释器中串行执行,失败默认立即停止
45
+ - [ ] 同项目单实例锁已获得;出现 `TEST_RUN_ALREADY_ACTIVE` 时停止,不得启动第二套测试
46
+ - [ ] `HARNESS_TEST_MAX_WORKERS` 为 `1` 或 `2`,且技术栈自身 worker 参数不高于该值
47
+ - [ ] 每个模块/命令设置明确超时;超时返回 `TEST_COMMAND_TIMEOUT` 并清理整棵进程树
48
+ - [ ] Windows 普通模块使用 kill-on-close Job Object;显式测试 detached service 的模块改用精确 PID 血缘跟踪;其他平台使用独立进程组
49
+ - [ ] Windows detached-service 模块执行前 nested-breakaway preflight 已通过;`DETACHED_PROCESS_CAPABILITY_UNAVAILABLE` 时立即停止并切换到允许该能力的执行环境,不逐用例等待超时
50
+ - [ ] 任一隔离模式返回 `PROCESS_TREE_ISOLATION_UNAVAILABLE` 时停止资源密集型测试
51
+ - [ ] `system` / `full` 属于资源密集型档位:用户明确授权后才传 `--confirm-resource-intensive`;受控 CI 可用 `CI=true`
52
+ - [ ] `safe` 不包含服务生命周期和集成模块;`full` 仍按“普通模块 → 资源密集型模块”顺序串行,不得恢复单进程全量 discovery
53
+ - [ ] 测试前记录已有工作区状态;测试后状态只允许包含本轮预期变化,不要求删除用户原有变更
54
+
41
55
  #### 0.1 命令执行模式 preflight(⚠️ 必须在编译/启动服务/生成执行器之前执行)
42
56
 
43
57
  - [ ] 检查 PowerShell 基础命令:`powershell.exe -NoProfile -Command "$PSVersionTable.PSVersion"` 返回 exitCode=0
@@ -319,6 +333,7 @@ powershell.exe -NoProfile -Command "try { (Invoke-WebRequest -Uri 'http://127.0.
319
333
  - [ ] 检查报告和日志是否包含明文凭证/password/secret/access-key/client-secret
320
334
  - [ ] 检查 `.harness/changes/<change>/runtime/` 是否不会被提交(.gitignore 确认)
321
335
  - [ ] **服务生命周期收尾**:AI_STARTED→Stop-Process / USER_STARTED→提示 / REUSED_EXISTING→保留或确认 / NOT_STARTED→N/A
336
+ - [ ] **资源生命周期收尾**:Runner 单实例锁已释放,测试进程树无新增残留,未对用户原有 Python/Node 进程做宽泛清理
322
337
  - [ ] 检查测试数据是否需要清理
323
338
  - [ ] 检查请求执行器结果是否完整(4 种执行器,未与接口测试执行器混写)
324
339
  - [ ] 检查是否存在慢请求或超时风险
@@ -442,6 +442,29 @@ foreach ($scenario in $scenarios) {
442
442
  $results | ConvertTo-Json -Depth 4
443
443
  ```
444
444
 
445
+ ## 资源安全测试执行
446
+
447
+ ### 档位与确认
448
+
449
+ | 档位 | 默认 | 执行范围 | 确认 |
450
+ |---|:---:|---|---|
451
+ | `safe` | ✅ | 普通模块,逐模块串行 | 不需要 |
452
+ | `system` | ❌ | 服务生命周期、集成等资源密集型模块 | `--confirm-resource-intensive` 或受控 CI |
453
+ | `full` | ❌ | 普通模块后接资源密集型模块,仍逐模块串行 | `--confirm-resource-intensive` 或受控 CI |
454
+
455
+ 通用命令通过 `harness_test_runner.py exec` 托管;Python `unittest` 测试库通过 `harness_test_runner.py unittest` 逐文件执行。不得把“完整验证”解释为单解释器的裸 discovery,也不得同时启动两套同项目测试。
456
+
457
+ ### 资源边界
458
+
459
+ - `HARNESS_TEST_MAX_WORKERS` 默认且最高为 `2`,环境变量只能进一步调低。
460
+ - Runner 获取基于项目绝对路径的单实例锁;活动 owner 存在时返回 `TEST_RUN_ALREADY_ACTIVE`。
461
+ - Runner 降低自身调度优先级,子进程继承该优先级。
462
+ - Windows 普通模块进入 kill-on-close Job Object;显式验证 detached service 的模块不能嵌套 Job,Runner 持续记录从测试根进程派生的精确 PID 血缘并在结束时逐一回收。其他平台进入独立进程组。
463
+ - detached-service 模块启动前先执行两级 nested-breakaway preflight;受限沙箱拒绝时返回 `DETACHED_PROCESS_CAPABILITY_UNAVAILABLE` 并在模块开始前失败,避免所有服务用例各自等待启动超时。
464
+ - 正常返回、失败、超时和中断均执行进程树清理;PID 血缘模式只处理本次测试的后代,不按进程名做全局清理。
465
+ - 单模块超时返回 `TEST_COMMAND_TIMEOUT`;无法建立进程树隔离返回 `PROCESS_TREE_ISOLATION_UNAVAILABLE`。两者都不得以裸命令重试。
466
+ - 清理只作用于 Runner 创建的进程树,禁止 `taskkill /IM python.exe`、`Stop-Process -Name node` 等宽泛清理用户进程。
467
+
445
468
  ## 命令与请求超时治理
446
469
 
447
470
  所有命令必须有"预期时长 + 超时上限",超过预期时长**必须输出一次当前状态**:
@@ -457,6 +480,7 @@ $results | ConvertTo-Json -Depth 4
457
480
  | health probe | < 1s | **3s** | 计入启动状态机 |
458
481
  | 构建工具编译(如 Maven compile) | 10–60s | **180s** | 输出最后 30 行日志后停 |
459
482
  | 测试命令(如 Maven test) | 60–180s | **300s** | 输出失败用例后停 |
483
+ | 资源密集型测试模块 | 60–300s | **600s** | 终止该模块进程树,停止后续模块 |
460
484
  | service start | 30–60s | **120s** | 4.1 启动状态机收敛 |
461
485
 
462
486
  **§5.22 分层耗时与反馈规则**:
@@ -811,10 +835,10 @@ python <skills-root>/scripts/harness_ledger.py can-reuse --change-dir <dir> --ve
811
835
  4. 检查报告和日志是否包含明文凭证/password/secret/access-key/client-secret
812
836
  5. 检查 `.harness/changes/<change>/runtime/` 是否不会被提交(.gitignore 确认)
813
837
  6. **服务生命周期收尾**:AI_STARTED→Stop-Process / USER_STARTED→只提示 / REUSED_EXISTING→保留或用户确认 / NOT_STARTED→N/A
814
- 7. 检查测试数据是否需要清理
815
- 8. 检查请求执行器结果是否完整(4 种执行器表完整、未与接口测试执行器混写)
816
- 9. 检查是否存在慢请求或超时风险
817
- 10. 如果存在未清理测试数据、fallback 请求执行器、慢请求或环境变更 → 至少 🟡WARN
838
+ 7. **资源生命周期收尾**:单实例锁已释放、Runner 管理的进程树无残留;禁止宽泛停止用户原有进程
839
+ 8. 检查测试数据是否需要清理
840
+ 9. 检查请求执行器结果是否完整(4 种执行器表完整、未与接口测试执行器混写)
841
+ 10. 检查是否存在慢请求或超时风险;若有未清理测试数据、fallback、慢请求或环境变更 → 至少 🟡WARN
818
842
 
819
843
  ## 真实 diffHash 生成
820
844