@hunter-harness/workflow-harness 0.2.47 → 0.2.48

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 (122) hide show
  1. package/harness/bundles/general/claude-code/.harness-build.json +1 -1
  2. package/harness/bundles/general/claude-code/README.md +9 -8
  3. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +2 -2
  4. package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
  5. package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  6. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +1 -1
  7. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +1 -1
  8. package/harness/bundles/general/claude-code/harness-review/SKILL.md +1 -1
  9. package/harness/bundles/general/claude-code/harness-run/SKILL.md +1 -1
  10. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +1 -1
  11. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +1 -1
  12. package/harness/bundles/general/claude-code/harness-test/SKILL.md +1 -1
  13. package/harness/bundles/general/claude-code/scripts/harness_gate.py +8 -2
  14. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  15. package/harness/bundles/general/codebuddy/README.md +9 -8
  16. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +2 -2
  17. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
  18. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  19. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  20. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +1 -1
  21. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +1 -1
  22. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +1 -1
  23. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +1 -1
  24. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +1 -1
  25. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +1 -1
  26. package/harness/bundles/general/codebuddy/scripts/harness_gate.py +8 -2
  27. package/harness/bundles/general/codex/.harness-build.json +1 -1
  28. package/harness/bundles/general/codex/README.md +9 -8
  29. package/harness/bundles/general/codex/harness-archive/SKILL.md +2 -2
  30. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
  31. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +1 -1
  32. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +1 -1
  33. package/harness/bundles/general/codex/harness-plan/SKILL.md +1 -1
  34. package/harness/bundles/general/codex/harness-review/SKILL.md +1 -1
  35. package/harness/bundles/general/codex/harness-run/SKILL.md +1 -1
  36. package/harness/bundles/general/codex/harness-submit/SKILL.md +1 -1
  37. package/harness/bundles/general/codex/harness-sync/SKILL.md +1 -1
  38. package/harness/bundles/general/codex/harness-test/SKILL.md +1 -1
  39. package/harness/bundles/general/codex/scripts/harness_gate.py +8 -2
  40. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  41. package/harness/bundles/general/cursor/README.md +9 -8
  42. package/harness/bundles/general/cursor/harness-archive/SKILL.md +2 -2
  43. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
  44. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  45. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +1 -1
  46. package/harness/bundles/general/cursor/harness-plan/SKILL.md +1 -1
  47. package/harness/bundles/general/cursor/harness-review/SKILL.md +1 -1
  48. package/harness/bundles/general/cursor/harness-run/SKILL.md +1 -1
  49. package/harness/bundles/general/cursor/harness-submit/SKILL.md +1 -1
  50. package/harness/bundles/general/cursor/harness-sync/SKILL.md +1 -1
  51. package/harness/bundles/general/cursor/harness-test/SKILL.md +1 -1
  52. package/harness/bundles/general/cursor/scripts/harness_gate.py +8 -2
  53. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  54. package/harness/bundles/java/claude-code/README.md +9 -8
  55. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +1 -1
  56. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +2 -2
  57. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
  58. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +1 -1
  59. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +1 -1
  60. package/harness/bundles/java/claude-code/harness-package/SKILL.md +1 -1
  61. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +1 -1
  62. package/harness/bundles/java/claude-code/harness-review/SKILL.md +1 -1
  63. package/harness/bundles/java/claude-code/harness-run/SKILL.md +1 -1
  64. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +1 -1
  65. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +1 -1
  66. package/harness/bundles/java/claude-code/harness-test/SKILL.md +1 -1
  67. package/harness/bundles/java/claude-code/scripts/harness_gate.py +8 -2
  68. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  69. package/harness/bundles/java/codebuddy/README.md +9 -8
  70. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +1 -1
  71. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +2 -2
  72. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
  73. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +1 -1
  74. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +1 -1
  75. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +1 -1
  76. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +1 -1
  77. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +1 -1
  78. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +1 -1
  79. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +1 -1
  80. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +1 -1
  81. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +1 -1
  82. package/harness/bundles/java/codebuddy/scripts/harness_gate.py +8 -2
  83. package/harness/bundles/java/codex/.harness-build.json +1 -1
  84. package/harness/bundles/java/codex/README.md +9 -8
  85. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +1 -1
  86. package/harness/bundles/java/codex/harness-archive/SKILL.md +2 -2
  87. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
  88. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +1 -1
  89. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +1 -1
  90. package/harness/bundles/java/codex/harness-package/SKILL.md +1 -1
  91. package/harness/bundles/java/codex/harness-plan/SKILL.md +1 -1
  92. package/harness/bundles/java/codex/harness-review/SKILL.md +1 -1
  93. package/harness/bundles/java/codex/harness-run/SKILL.md +1 -1
  94. package/harness/bundles/java/codex/harness-submit/SKILL.md +1 -1
  95. package/harness/bundles/java/codex/harness-sync/SKILL.md +1 -1
  96. package/harness/bundles/java/codex/harness-test/SKILL.md +1 -1
  97. package/harness/bundles/java/codex/scripts/harness_gate.py +8 -2
  98. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  99. package/harness/bundles/java/cursor/README.md +9 -8
  100. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +1 -1
  101. package/harness/bundles/java/cursor/harness-archive/SKILL.md +2 -2
  102. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
  103. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +1 -1
  104. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +1 -1
  105. package/harness/bundles/java/cursor/harness-package/SKILL.md +1 -1
  106. package/harness/bundles/java/cursor/harness-plan/SKILL.md +1 -1
  107. package/harness/bundles/java/cursor/harness-review/SKILL.md +1 -1
  108. package/harness/bundles/java/cursor/harness-run/SKILL.md +1 -1
  109. package/harness/bundles/java/cursor/harness-submit/SKILL.md +1 -1
  110. package/harness/bundles/java/cursor/harness-sync/SKILL.md +1 -1
  111. package/harness/bundles/java/cursor/harness-test/SKILL.md +1 -1
  112. package/harness/bundles/java/cursor/scripts/harness_gate.py +8 -2
  113. package/harness/manifests/general/claude-code.json +15 -15
  114. package/harness/manifests/general/codebuddy.json +15 -15
  115. package/harness/manifests/general/codex.json +15 -15
  116. package/harness/manifests/general/cursor.json +15 -15
  117. package/harness/manifests/java/claude-code.json +17 -17
  118. package/harness/manifests/java/codebuddy.json +17 -17
  119. package/harness/manifests/java/codex.json +17 -17
  120. package/harness/manifests/java/cursor.json +17 -17
  121. package/hunter-workflow-family.json +4 -4
  122. package/package.json +1 -1
@@ -2,5 +2,5 @@
2
2
  "schemaVersion": 1,
3
3
  "overlay": "none",
4
4
  "agent": "claude-code",
5
- "coreHash": "d5cc283de8c743a2"
5
+ "coreHash": "0c6cb544b7c0aef7"
6
6
  }
@@ -221,17 +221,18 @@ harness-skills/
221
221
  |-------|----------|------|:--------:|:--------:|----------|
222
222
  | harness-sync | `/harness-sync` | 10 项元数据检查(7 核心 + 3 辅助) | 初始化检查 | ✅ | 控制台报告 + 自动更新 |
223
223
  | harness-codebase-map | `/harness-codebase-map` | 生成代码库地图(7 类文档 + summary + manifest) | `sync`/独立 | ✅ | `.harness/codebase/map/` |
224
- | harness-plan | `/harness-plan` | 需求→设计→任务拆分→**测试场景表** + 自动命名变更名 | `sync` | | `.harness/changes/<cn>/plans/` |
225
- | harness-run | `/harness-run` | TDD 循环 变更簇编码 | `plan` | | `.harness/changes/<cn>/sqls/` |
226
- | harness-test | `/harness-test` | 单元测试+接口测试+30条避坑 | `run` | | `.harness/changes/<cn>/reports/test/` |
227
- | harness-review | `/harness-review` | 6维度参考性审查(不阻塞后续流程) | `test` | | `.harness/changes/<cn>/reports/review/` |
228
- | harness-submit | `/harness-submit` 或 `/harness-merge`(别名) | commit+push(主目录)/ worktree:本地 commit→--no-ff 合并→push 主分支 | `review` | | ledger `mergeFinalHash` + 控制台报告 |
229
- | harness-archive | `/harness-archive` | 归档产出到 archive/YYYY-MM-DD-<cn>,释放工作区 | `submit` | | `.harness/archive/YYYY-MM-DD-<cn>/` |
224
+ | harness-plan | `/harness-plan` | 需求→设计→任务拆分→**测试场景表** + 自动命名变更名 | `sync` | 手动 | `.harness/changes/<cn>/plans/` |
225
+ | harness-run | `/harness-run` | TDD 循环 变更簇编码 | `plan` | 手动 | `.harness/changes/<cn>/sqls/` |
226
+ | harness-test | `/harness-test` | 单元测试+接口测试+30条避坑 | `run` | 手动 | `.harness/changes/<cn>/reports/test/` |
227
+ | harness-review | `/harness-review` | 6维度参考性审查(不阻塞后续流程) | `test` | 手动 | `.harness/changes/<cn>/reports/review/` |
228
+ | harness-submit | `/harness-submit` 或 `/harness-merge`(别名) | commit+push(主目录)/ worktree:本地 commit→--no-ff 合并→push 主分支 | `review` | 手动 | ledger `mergeFinalHash` + 控制台报告 |
229
+ | harness-archive | `/harness-archive` | 归档产出到 archive/YYYY-MM-DD-<cn>,释放工作区 | `submit` | 手动 | `.harness/archive/YYYY-MM-DD-<cn>/` |
230
230
  | harness-knowledge-query | `/harness-knowledge-query` | 查询 .harness/knowledge 历史上下文,生成需求 context pack | `sync`/独立 | ✅ | `.harness/knowledge/context-packs/` |
231
231
  | harness-knowledge-ingest | `/harness-knowledge-ingest` | 从 archive 整理/同步/维护知识索引(promote/demote/audit) | `archive` | ✅ | `.harness/knowledge/index.json` |
232
232
 
233
- > 所有 harness skill 均支持被其他 skill 调用。`harness-run`、`harness-submit`、`harness-archive` 涉及 git 写操作、文件移动或归档,被其他 skill 调用时必须确保前置条件已满足。
233
+ > 生命周期 skill(plan run → test → review → submit → archive)为**手动触发**:单阶段结束后停止,不自动接续下一阶段(已设 `disable-model-invocation`)。sync / codebase-map / knowledge 等辅助 skill 仍可按需被调用。`harness-run`、`harness-submit`、`harness-archive` 涉及 git 写操作、文件移动或归档,调用前必须确保前置条件已满足。
234
234
  > `<cn>` = change-name,由 harness-plan 阶段7确定。其他 skill 自动扫描未归档变更定位。
235
+ > 门禁默认 `gate_severity_mode=lenient`(可再生 soft site → WARN);发布阶段与 3 类硬不变量仍 fail-closed。可用 `HUNTER_HARNESS_GATE_MODE` 或 `gate-policy.json` 的 `severityMode` 强制 `strict`。
235
236
 
236
237
  ## 关键合规约束(强制)
237
238
 
@@ -279,7 +280,7 @@ harness-skills/
279
280
  | **submit hash 记录** | pre-pull local hash + final pushed hash 双标注(主目录);worktree 模式 submit 段只本地 commit,合并段产生 `mergeFinalHash`,archive 以 `mergeFinalHash` 为准(无则回退 final pushed hash) |
280
281
  | **archive 阶段 1** | 归档前确认 commit 已 push、hash 与 submit/merge 记录一致、test/review 报告状态;阶段边界由 finalize 单进程维护,调用者不额外 append |
281
282
  | **archive 文件移动** | 只用 PowerShell 或 Read+Write+验证,**禁止 Bash mv/cp/rm**;移动失败时不删除原目录 |
282
- | **archive final-summary.html** | 默认运行 `harness_archive.py finalize`:由 events/ledger/log/manifest 生成 `summary-data.json`,再由 `templates/render-summary.mjs` 渲染 `final-summary.html`,内嵌 validate。无测试或无 review 时必须在 JSON 中标记 `NOT_RUN` / `ADVISORY_NOT_RUN`,禁止伪造 100% 通过率。必须真实展示状态演进(✅OK / 🟡WARN / 🔁REUSED / 🔁RETESTED / 📝ADVISORY / 🧹NON_BEHAVIORAL_CLEANUP) |
283
+ | **archive final-summary** | 必须运行 `harness_archive.py finalize` 生成权威 `summary-data.json` 并完成 validate;`final-summary.html` 为可选展示投影(默认渲染,失败只记 warning 不回滚;`finalize --no-html` 可跳过)。无测试或无 review 时必须在 JSON 中标记 `NOT_RUN` / `ADVISORY_NOT_RUN`,禁止伪造 100% 通过率。状态演进须真实展示(✅OK / 🟡WARN / 🔁REUSED / 🔁RETESTED / 📝ADVISORY / 🧹NON_BEHAVIORAL_CLEANUP) |
283
284
 
284
285
  ### 敏感信息脱敏
285
286
 
@@ -21,7 +21,7 @@ disallowed-tools:
21
21
  - Bash(awk *)
22
22
  - Bash(curl *)
23
23
  ---
24
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=claude-code; do not edit -->
24
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=claude-code; do not edit -->
25
25
  # harness-archive — 变更归档
26
26
 
27
27
  ## Purpose
@@ -155,7 +155,7 @@ disallowed-tools:
155
155
 
156
156
  ### 四、数据化归档门禁(先数据后渲染)
157
157
 
158
- 必须通过 `harness_archive.py finalize` 生成 `reports/final/summary-data.json` `final-summary.html` 并完成 validate;**禁止模型临场写 500+ 行 HTML**。统计数字只能来自 summary-data、events、ledger 或 manifest。详见 `../protocols/report-pipeline-protocol.md`、`../protocols/archive-report-protocol.md`、`reference.md`。
158
+ 必须通过 `harness_archive.py finalize` 生成权威 `reports/final/summary-data.json` 并完成 validate;`final-summary.html` 为可选展示投影(默认渲染;渲染失败只记 warning、不回滚归档;`finalize --no-html` 可完全跳过本地 HTML)。**禁止模型临场写 500+ 行 HTML**。统计数字只能来自 summary-data、events、ledger 或 manifest。详见 `../protocols/report-pipeline-protocol.md`、`../protocols/archive-report-protocol.md`、`reference.md`。
159
159
 
160
160
  ### 五、manifest/checksum 必须存在
161
161
 
@@ -20,7 +20,7 @@ disallowed-tools:
20
20
  - Bash(awk *)
21
21
  - Bash(curl *)
22
22
  ---
23
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=claude-code; do not edit -->
23
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=claude-code; do not edit -->
24
24
  # harness-codebase-map — 代码库地图
25
25
 
26
26
  ## Purpose
@@ -20,7 +20,7 @@ disallowed-tools:
20
20
  - Bash(awk *)
21
21
  - Bash(curl *)
22
22
  ---
23
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=claude-code; do not edit -->
23
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=claude-code; do not edit -->
24
24
  # harness-knowledge-ingest
25
25
 
26
26
  从 `.harness/archive/**/reports/final/summary-data.json` 抽取项目知识,生成并维护本地 `.harness/knowledge/` 索引。
@@ -20,7 +20,7 @@ disallowed-tools:
20
20
  - Bash(awk *)
21
21
  - Bash(curl *)
22
22
  ---
23
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=claude-code; do not edit -->
23
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=claude-code; do not edit -->
24
24
  # harness-knowledge-query
25
25
 
26
26
  并行 change 中查询必须传 `--change <change-id>`;成功后以该 change 的 `meta/knowledge-context.json` 为稳定指针。全局 `context-packs/latest.json` 仅向后兼容,不得用于判断多个 active change 的上下文归属。
@@ -21,7 +21,7 @@ disallowed-tools:
21
21
  - Bash(awk *)
22
22
  - Bash(curl *)
23
23
  ---
24
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=claude-code; do not edit -->
24
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=claude-code; do not edit -->
25
25
  # harness-plan — 需求规划
26
26
 
27
27
  ## Purpose
@@ -22,7 +22,7 @@ disallowed-tools:
22
22
  - Bash(curl *)
23
23
  - Bash(codegraph *)
24
24
  ---
25
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=claude-code; do not edit -->
25
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=claude-code; do not edit -->
26
26
  # harness-review — 代码审查
27
27
 
28
28
  ## Purpose
@@ -22,7 +22,7 @@ disallowed-tools:
22
22
  - Bash(curl *)
23
23
  - Bash(codegraph *)
24
24
  ---
25
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=claude-code; do not edit -->
25
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=claude-code; do not edit -->
26
26
  # harness-run — 需求编码
27
27
 
28
28
  ## Purpose
@@ -21,7 +21,7 @@ disallowed-tools:
21
21
  - Bash(awk *)
22
22
  - Bash(curl *)
23
23
  ---
24
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=claude-code; do not edit -->
24
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=claude-code; do not edit -->
25
25
  # harness-submit — 最终提交(含 worktree 合并)
26
26
 
27
27
  ## Purpose
@@ -19,7 +19,7 @@ disallowed-tools:
19
19
  - Bash(awk *)
20
20
  - Bash(curl *)
21
21
  ---
22
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=claude-code; do not edit -->
22
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=claude-code; do not edit -->
23
23
  # harness-sync
24
24
 
25
25
  ## Purpose
@@ -23,7 +23,7 @@ disallowed-tools:
23
23
  - Bash(node *)
24
24
  - Bash(codegraph *)
25
25
  ---
26
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=claude-code; do not edit -->
26
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=claude-code; do not edit -->
27
27
  # harness-test — 测试执行
28
28
 
29
29
  ## Purpose
@@ -150,7 +150,13 @@ GATE_WARNINGS_REL = Path("evidence") / "gate-warnings.ndjson"
150
150
 
151
151
 
152
152
  def gate_severity_mode(project: Path, change_dir: Path | None = None) -> str:
153
- """Resolve gate severity mode: env > change gate-policy > project config."""
153
+ """Resolve gate severity mode: env > change gate-policy > project config.
154
+
155
+ Default is ``lenient`` (soft regenerable sites → WARN). Release phases and
156
+ the three hard invariants stay fail-closed; set ``HUNTER_HARNESS_GATE_MODE``
157
+ or ``gate-policy.json`` ``severityMode`` to ``strict`` to force fail-closed
158
+ soft sites as well.
159
+ """
154
160
  env_mode = str(os.environ.get("HUNTER_HARNESS_GATE_MODE") or "").strip().lower()
155
161
  if env_mode in {"strict", "lenient"}:
156
162
  return env_mode
@@ -170,7 +176,7 @@ def gate_severity_mode(project: Path, change_dir: Path | None = None) -> str:
170
176
  value = str(document.get("severityMode") or "").strip().lower()
171
177
  if value in {"strict", "lenient"}:
172
178
  return value
173
- return "strict"
179
+ return "lenient"
174
180
 
175
181
 
176
182
  def gate_soft_allowed(mode: str, phase: str, site: str) -> bool:
@@ -2,5 +2,5 @@
2
2
  "schemaVersion": 1,
3
3
  "overlay": "none",
4
4
  "agent": "codebuddy",
5
- "coreHash": "d5cc283de8c743a2"
5
+ "coreHash": "0c6cb544b7c0aef7"
6
6
  }
@@ -221,17 +221,18 @@ harness-skills/
221
221
  |-------|----------|------|:--------:|:--------:|----------|
222
222
  | harness-sync | `/harness-sync` | 10 项元数据检查(7 核心 + 3 辅助) | 初始化检查 | ✅ | 控制台报告 + 自动更新 |
223
223
  | harness-codebase-map | `/harness-codebase-map` | 生成代码库地图(7 类文档 + summary + manifest) | `sync`/独立 | ✅ | `.harness/codebase/map/` |
224
- | harness-plan | `/harness-plan` | 需求→设计→任务拆分→**测试场景表** + 自动命名变更名 | `sync` | | `.harness/changes/<cn>/plans/` |
225
- | harness-run | `/harness-run` | TDD 循环 变更簇编码 | `plan` | | `.harness/changes/<cn>/sqls/` |
226
- | harness-test | `/harness-test` | 单元测试+接口测试+30条避坑 | `run` | | `.harness/changes/<cn>/reports/test/` |
227
- | harness-review | `/harness-review` | 6维度参考性审查(不阻塞后续流程) | `test` | | `.harness/changes/<cn>/reports/review/` |
228
- | harness-submit | `/harness-submit` 或 `/harness-merge`(别名) | commit+push(主目录)/ worktree:本地 commit→--no-ff 合并→push 主分支 | `review` | | ledger `mergeFinalHash` + 控制台报告 |
229
- | harness-archive | `/harness-archive` | 归档产出到 archive/YYYY-MM-DD-<cn>,释放工作区 | `submit` | | `.harness/archive/YYYY-MM-DD-<cn>/` |
224
+ | harness-plan | `/harness-plan` | 需求→设计→任务拆分→**测试场景表** + 自动命名变更名 | `sync` | 手动 | `.harness/changes/<cn>/plans/` |
225
+ | harness-run | `/harness-run` | TDD 循环 变更簇编码 | `plan` | 手动 | `.harness/changes/<cn>/sqls/` |
226
+ | harness-test | `/harness-test` | 单元测试+接口测试+30条避坑 | `run` | 手动 | `.harness/changes/<cn>/reports/test/` |
227
+ | harness-review | `/harness-review` | 6维度参考性审查(不阻塞后续流程) | `test` | 手动 | `.harness/changes/<cn>/reports/review/` |
228
+ | harness-submit | `/harness-submit` 或 `/harness-merge`(别名) | commit+push(主目录)/ worktree:本地 commit→--no-ff 合并→push 主分支 | `review` | 手动 | ledger `mergeFinalHash` + 控制台报告 |
229
+ | harness-archive | `/harness-archive` | 归档产出到 archive/YYYY-MM-DD-<cn>,释放工作区 | `submit` | 手动 | `.harness/archive/YYYY-MM-DD-<cn>/` |
230
230
  | harness-knowledge-query | `/harness-knowledge-query` | 查询 .harness/knowledge 历史上下文,生成需求 context pack | `sync`/独立 | ✅ | `.harness/knowledge/context-packs/` |
231
231
  | harness-knowledge-ingest | `/harness-knowledge-ingest` | 从 archive 整理/同步/维护知识索引(promote/demote/audit) | `archive` | ✅ | `.harness/knowledge/index.json` |
232
232
 
233
- > 所有 harness skill 均支持被其他 skill 调用。`harness-run`、`harness-submit`、`harness-archive` 涉及 git 写操作、文件移动或归档,被其他 skill 调用时必须确保前置条件已满足。
233
+ > 生命周期 skill(plan run → test → review → submit → archive)为**手动触发**:单阶段结束后停止,不自动接续下一阶段(已设 `disable-model-invocation`)。sync / codebase-map / knowledge 等辅助 skill 仍可按需被调用。`harness-run`、`harness-submit`、`harness-archive` 涉及 git 写操作、文件移动或归档,调用前必须确保前置条件已满足。
234
234
  > `<cn>` = change-name,由 harness-plan 阶段7确定。其他 skill 自动扫描未归档变更定位。
235
+ > 门禁默认 `gate_severity_mode=lenient`(可再生 soft site → WARN);发布阶段与 3 类硬不变量仍 fail-closed。可用 `HUNTER_HARNESS_GATE_MODE` 或 `gate-policy.json` 的 `severityMode` 强制 `strict`。
235
236
 
236
237
  ## 关键合规约束(强制)
237
238
 
@@ -279,7 +280,7 @@ harness-skills/
279
280
  | **submit hash 记录** | pre-pull local hash + final pushed hash 双标注(主目录);worktree 模式 submit 段只本地 commit,合并段产生 `mergeFinalHash`,archive 以 `mergeFinalHash` 为准(无则回退 final pushed hash) |
280
281
  | **archive 阶段 1** | 归档前确认 commit 已 push、hash 与 submit/merge 记录一致、test/review 报告状态;阶段边界由 finalize 单进程维护,调用者不额外 append |
281
282
  | **archive 文件移动** | 只用 PowerShell 或 Read+Write+验证,**禁止 Bash mv/cp/rm**;移动失败时不删除原目录 |
282
- | **archive final-summary.html** | 默认运行 `harness_archive.py finalize`:由 events/ledger/log/manifest 生成 `summary-data.json`,再由 `templates/render-summary.mjs` 渲染 `final-summary.html`,内嵌 validate。无测试或无 review 时必须在 JSON 中标记 `NOT_RUN` / `ADVISORY_NOT_RUN`,禁止伪造 100% 通过率。必须真实展示状态演进(✅OK / 🟡WARN / 🔁REUSED / 🔁RETESTED / 📝ADVISORY / 🧹NON_BEHAVIORAL_CLEANUP) |
283
+ | **archive final-summary** | 必须运行 `harness_archive.py finalize` 生成权威 `summary-data.json` 并完成 validate;`final-summary.html` 为可选展示投影(默认渲染,失败只记 warning 不回滚;`finalize --no-html` 可跳过)。无测试或无 review 时必须在 JSON 中标记 `NOT_RUN` / `ADVISORY_NOT_RUN`,禁止伪造 100% 通过率。状态演进须真实展示(✅OK / 🟡WARN / 🔁REUSED / 🔁RETESTED / 📝ADVISORY / 🧹NON_BEHAVIORAL_CLEANUP) |
283
284
 
284
285
  ### 敏感信息脱敏
285
286
 
@@ -3,7 +3,7 @@ name: harness-archive
3
3
  description: 归档所有变更产出(计划/测试报告/审查/SQL/API文档)到 .harness/archive/,含归档元数据。仅当用户显式调用
4
4
  /harness-archive 时使用;不得被其他阶段 skill 自动接续触发。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=codebuddy; do not edit -->
7
7
  # harness-archive — 变更归档
8
8
 
9
9
  ## Purpose
@@ -137,7 +137,7 @@ description: 归档所有变更产出(计划/测试报告/审查/SQL/API文档
137
137
 
138
138
  ### 四、数据化归档门禁(先数据后渲染)
139
139
 
140
- 必须通过 `harness_archive.py finalize` 生成 `reports/final/summary-data.json` `final-summary.html` 并完成 validate;**禁止模型临场写 500+ 行 HTML**。统计数字只能来自 summary-data、events、ledger 或 manifest。详见 `../protocols/report-pipeline-protocol.md`、`../protocols/archive-report-protocol.md`、`reference.md`。
140
+ 必须通过 `harness_archive.py finalize` 生成权威 `reports/final/summary-data.json` 并完成 validate;`final-summary.html` 为可选展示投影(默认渲染;渲染失败只记 warning、不回滚归档;`finalize --no-html` 可完全跳过本地 HTML)。**禁止模型临场写 500+ 行 HTML**。统计数字只能来自 summary-data、events、ledger 或 manifest。详见 `../protocols/report-pipeline-protocol.md`、`../protocols/archive-report-protocol.md`、`reference.md`。
141
141
 
142
142
  ### 五、manifest/checksum 必须存在
143
143
 
@@ -3,7 +3,7 @@ name: harness-codebase-map
3
3
  description: 分析现有代码库并生成 .harness/codebase/map/
4
4
  下的结构化代码库地图。用于陌生项目理解、重大改造前梳理、harness-sync 提示 map 过期后的人工刷新。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=codebuddy; do not edit -->
7
7
  # harness-codebase-map — 代码库地图
8
8
 
9
9
  ## Purpose
@@ -3,7 +3,7 @@ name: harness-knowledge-ingest
3
3
  description: 从 .harness/archive 归档整理、同步和维护项目知识索引。适用场景:ingest knowledge、sync
4
4
  knowledge、rebuild knowledge index、promote knowledge、确认知识条目、检查知识库是否过期。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=codebuddy; do not edit -->
7
7
  # harness-knowledge-ingest
8
8
 
9
9
  从 `.harness/archive/**/reports/final/summary-data.json` 抽取项目知识,生成并维护本地 `.harness/knowledge/` 索引。
@@ -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=d5cc283de8c743a2; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=codebuddy; 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 的上下文归属。
@@ -3,7 +3,7 @@ name: harness-plan
3
3
  description: 将需求转化为设计文档+实施计划+完整测试场景表,必须在编码前完成。仅当用户显式调用 /harness-plan 或明确要求进入
4
4
  Harness 规划阶段时使用;不得因用户描述需求就自动触发。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=codebuddy; do not edit -->
7
7
  # harness-plan — 需求规划
8
8
 
9
9
  ## Purpose
@@ -4,7 +4,7 @@ description: 6维度代码审查(架构/安全/规范/兼容/测试/性能)
4
4
  .harness/context-index.json)和测试场景表,在隔离上下文运行。仅当用户显式调用 /harness-review 时使用;不得在
5
5
  test 结束后自动接续执行。
6
6
  ---
7
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=codebuddy; do not edit -->
7
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=codebuddy; do not edit -->
8
8
  # harness-review — 代码审查
9
9
 
10
10
  ## Purpose
@@ -3,7 +3,7 @@ name: harness-run
3
3
  description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编译验证),逐变更簇实现计划中的任务。仅当用户显式调用
4
4
  /harness-run 时使用;不得因用户提到编码/实现就自动触发,也不得被其他阶段 skill 自动接续。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=codebuddy; do not edit -->
7
7
  # harness-run — 需求编码
8
8
 
9
9
  ## Purpose
@@ -3,7 +3,7 @@ name: harness-submit
3
3
  description: 最终提交封装:验证→中文 commit→提交/推送;worktree 模式含 --no-ff 合并回主分支。仅当用户显式调用
4
4
  /harness-submit(或 /harness-merge 重入合并段)时使用;用户口头说'提交/commit/push'时必须先确认,不得自动触发。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=codebuddy; do not edit -->
7
7
  # harness-submit — 最终提交(含 worktree 合并)
8
8
 
9
9
  ## Purpose
@@ -4,7 +4,7 @@ description: Use when the user asks to synchronize, refresh, or validate Harness
4
4
  metadata, adapters, knowledge, rules, instruction entrypoints, config origins,
5
5
  or CodeGraph status.
6
6
  ---
7
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=codebuddy; do not edit -->
7
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=codebuddy; do not edit -->
8
8
  # harness-sync
9
9
 
10
10
  ## Purpose
@@ -3,7 +3,7 @@ name: harness-test
3
3
  description: 测试执行:读取场景表,执行单元测试+API接口测试+数据兼容验证,输出测试报告。仅当用户显式调用 /harness-test
4
4
  时使用;不得在 run 结束后自动接续执行。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=d5cc283de8c743a2; overlay=none; agent=codebuddy; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=0c6cb544b7c0aef7; overlay=none; agent=codebuddy; do not edit -->
7
7
  # harness-test — 测试执行
8
8
 
9
9
  ## Purpose
@@ -150,7 +150,13 @@ GATE_WARNINGS_REL = Path("evidence") / "gate-warnings.ndjson"
150
150
 
151
151
 
152
152
  def gate_severity_mode(project: Path, change_dir: Path | None = None) -> str:
153
- """Resolve gate severity mode: env > change gate-policy > project config."""
153
+ """Resolve gate severity mode: env > change gate-policy > project config.
154
+
155
+ Default is ``lenient`` (soft regenerable sites → WARN). Release phases and
156
+ the three hard invariants stay fail-closed; set ``HUNTER_HARNESS_GATE_MODE``
157
+ or ``gate-policy.json`` ``severityMode`` to ``strict`` to force fail-closed
158
+ soft sites as well.
159
+ """
154
160
  env_mode = str(os.environ.get("HUNTER_HARNESS_GATE_MODE") or "").strip().lower()
155
161
  if env_mode in {"strict", "lenient"}:
156
162
  return env_mode
@@ -170,7 +176,7 @@ def gate_severity_mode(project: Path, change_dir: Path | None = None) -> str:
170
176
  value = str(document.get("severityMode") or "").strip().lower()
171
177
  if value in {"strict", "lenient"}:
172
178
  return value
173
- return "strict"
179
+ return "lenient"
174
180
 
175
181
 
176
182
  def gate_soft_allowed(mode: str, phase: str, site: str) -> bool:
@@ -2,5 +2,5 @@
2
2
  "schemaVersion": 1,
3
3
  "overlay": "none",
4
4
  "agent": "codex",
5
- "coreHash": "25cf57e2e035246a"
5
+ "coreHash": "45d6a7410e5db82b"
6
6
  }
@@ -221,17 +221,18 @@ harness-skills/
221
221
  |-------|----------|------|:--------:|:--------:|----------|
222
222
  | harness-sync | `/harness-sync` | 10 项元数据检查(7 核心 + 3 辅助) | 初始化检查 | ✅ | 控制台报告 + 自动更新 |
223
223
  | harness-codebase-map | `/harness-codebase-map` | 生成代码库地图(7 类文档 + summary + manifest) | `sync`/独立 | ✅ | `.harness/codebase/map/` |
224
- | harness-plan | `/harness-plan` | 需求→设计→任务拆分→**测试场景表** + 自动命名变更名 | `sync` | | `.harness/changes/<cn>/plans/` |
225
- | harness-run | `/harness-run` | TDD 循环 变更簇编码 | `plan` | | `.harness/changes/<cn>/sqls/` |
226
- | harness-test | `/harness-test` | 单元测试+接口测试+30条避坑 | `run` | | `.harness/changes/<cn>/reports/test/` |
227
- | harness-review | `/harness-review` | 6维度参考性审查(不阻塞后续流程) | `test` | | `.harness/changes/<cn>/reports/review/` |
228
- | harness-submit | `/harness-submit` 或 `/harness-merge`(别名) | commit+push(主目录)/ worktree:本地 commit→--no-ff 合并→push 主分支 | `review` | | ledger `mergeFinalHash` + 控制台报告 |
229
- | harness-archive | `/harness-archive` | 归档产出到 archive/YYYY-MM-DD-<cn>,释放工作区 | `submit` | | `.harness/archive/YYYY-MM-DD-<cn>/` |
224
+ | harness-plan | `/harness-plan` | 需求→设计→任务拆分→**测试场景表** + 自动命名变更名 | `sync` | 手动 | `.harness/changes/<cn>/plans/` |
225
+ | harness-run | `/harness-run` | TDD 循环 变更簇编码 | `plan` | 手动 | `.harness/changes/<cn>/sqls/` |
226
+ | harness-test | `/harness-test` | 单元测试+接口测试+30条避坑 | `run` | 手动 | `.harness/changes/<cn>/reports/test/` |
227
+ | harness-review | `/harness-review` | 6维度参考性审查(不阻塞后续流程) | `test` | 手动 | `.harness/changes/<cn>/reports/review/` |
228
+ | harness-submit | `/harness-submit` 或 `/harness-merge`(别名) | commit+push(主目录)/ worktree:本地 commit→--no-ff 合并→push 主分支 | `review` | 手动 | ledger `mergeFinalHash` + 控制台报告 |
229
+ | harness-archive | `/harness-archive` | 归档产出到 archive/YYYY-MM-DD-<cn>,释放工作区 | `submit` | 手动 | `.harness/archive/YYYY-MM-DD-<cn>/` |
230
230
  | harness-knowledge-query | `/harness-knowledge-query` | 查询 .harness/knowledge 历史上下文,生成需求 context pack | `sync`/独立 | ✅ | `.harness/knowledge/context-packs/` |
231
231
  | harness-knowledge-ingest | `/harness-knowledge-ingest` | 从 archive 整理/同步/维护知识索引(promote/demote/audit) | `archive` | ✅ | `.harness/knowledge/index.json` |
232
232
 
233
- > 所有 harness skill 均支持被其他 skill 调用。`harness-run`、`harness-submit`、`harness-archive` 涉及 git 写操作、文件移动或归档,被其他 skill 调用时必须确保前置条件已满足。
233
+ > 生命周期 skill(plan run → test → review → submit → archive)为**手动触发**:单阶段结束后停止,不自动接续下一阶段(已设 `disable-model-invocation`)。sync / codebase-map / knowledge 等辅助 skill 仍可按需被调用。`harness-run`、`harness-submit`、`harness-archive` 涉及 git 写操作、文件移动或归档,调用前必须确保前置条件已满足。
234
234
  > `<cn>` = change-name,由 harness-plan 阶段7确定。其他 skill 自动扫描未归档变更定位。
235
+ > 门禁默认 `gate_severity_mode=lenient`(可再生 soft site → WARN);发布阶段与 3 类硬不变量仍 fail-closed。可用 `HUNTER_HARNESS_GATE_MODE` 或 `gate-policy.json` 的 `severityMode` 强制 `strict`。
235
236
 
236
237
  ## 关键合规约束(强制)
237
238
 
@@ -279,7 +280,7 @@ harness-skills/
279
280
  | **submit hash 记录** | pre-pull local hash + final pushed hash 双标注(主目录);worktree 模式 submit 段只本地 commit,合并段产生 `mergeFinalHash`,archive 以 `mergeFinalHash` 为准(无则回退 final pushed hash) |
280
281
  | **archive 阶段 1** | 归档前确认 commit 已 push、hash 与 submit/merge 记录一致、test/review 报告状态;阶段边界由 finalize 单进程维护,调用者不额外 append |
281
282
  | **archive 文件移动** | 只用 PowerShell 或 Read+Write+验证,**禁止 Bash mv/cp/rm**;移动失败时不删除原目录 |
282
- | **archive final-summary.html** | 默认运行 `harness_archive.py finalize`:由 events/ledger/log/manifest 生成 `summary-data.json`,再由 `templates/render-summary.mjs` 渲染 `final-summary.html`,内嵌 validate。无测试或无 review 时必须在 JSON 中标记 `NOT_RUN` / `ADVISORY_NOT_RUN`,禁止伪造 100% 通过率。必须真实展示状态演进(✅OK / 🟡WARN / 🔁REUSED / 🔁RETESTED / 📝ADVISORY / 🧹NON_BEHAVIORAL_CLEANUP) |
283
+ | **archive final-summary** | 必须运行 `harness_archive.py finalize` 生成权威 `summary-data.json` 并完成 validate;`final-summary.html` 为可选展示投影(默认渲染,失败只记 warning 不回滚;`finalize --no-html` 可跳过)。无测试或无 review 时必须在 JSON 中标记 `NOT_RUN` / `ADVISORY_NOT_RUN`,禁止伪造 100% 通过率。状态演进须真实展示(✅OK / 🟡WARN / 🔁REUSED / 🔁RETESTED / 📝ADVISORY / 🧹NON_BEHAVIORAL_CLEANUP) |
283
284
 
284
285
  ### 敏感信息脱敏
285
286
 
@@ -3,7 +3,7 @@ name: harness-archive
3
3
  description: 归档所有变更产出(计划/测试报告/审查/SQL/API文档)到 .harness/archive/,含归档元数据。仅当用户显式调用
4
4
  /harness-archive 时使用;不得被其他阶段 skill 自动接续触发。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=25cf57e2e035246a; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=45d6a7410e5db82b; overlay=none; agent=codex; do not edit -->
7
7
  # harness-archive — 变更归档
8
8
 
9
9
  ## Purpose
@@ -137,7 +137,7 @@ description: 归档所有变更产出(计划/测试报告/审查/SQL/API文档
137
137
 
138
138
  ### 四、数据化归档门禁(先数据后渲染)
139
139
 
140
- 必须通过 `harness_archive.py finalize` 生成 `reports/final/summary-data.json` `final-summary.html` 并完成 validate;**禁止模型临场写 500+ 行 HTML**。统计数字只能来自 summary-data、events、ledger 或 manifest。详见 `../protocols/report-pipeline-protocol.md`、`../protocols/archive-report-protocol.md`、`reference.md`。
140
+ 必须通过 `harness_archive.py finalize` 生成权威 `reports/final/summary-data.json` 并完成 validate;`final-summary.html` 为可选展示投影(默认渲染;渲染失败只记 warning、不回滚归档;`finalize --no-html` 可完全跳过本地 HTML)。**禁止模型临场写 500+ 行 HTML**。统计数字只能来自 summary-data、events、ledger 或 manifest。详见 `../protocols/report-pipeline-protocol.md`、`../protocols/archive-report-protocol.md`、`reference.md`。
141
141
 
142
142
  ### 五、manifest/checksum 必须存在
143
143
 
@@ -3,7 +3,7 @@ name: harness-codebase-map
3
3
  description: 分析现有代码库并生成 .harness/codebase/map/
4
4
  下的结构化代码库地图。用于陌生项目理解、重大改造前梳理、harness-sync 提示 map 过期后的人工刷新。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=25cf57e2e035246a; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=45d6a7410e5db82b; overlay=none; agent=codex; do not edit -->
7
7
  # harness-codebase-map — 代码库地图
8
8
 
9
9
  ## Purpose
@@ -3,7 +3,7 @@ name: harness-knowledge-ingest
3
3
  description: 从 .harness/archive 归档整理、同步和维护项目知识索引。适用场景:ingest knowledge、sync
4
4
  knowledge、rebuild knowledge index、promote knowledge、确认知识条目、检查知识库是否过期。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=25cf57e2e035246a; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=45d6a7410e5db82b; overlay=none; agent=codex; do not edit -->
7
7
  # harness-knowledge-ingest
8
8
 
9
9
  从 `.harness/archive/**/reports/final/summary-data.json` 抽取项目知识,生成并维护本地 `.harness/knowledge/` 索引。
@@ -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=25cf57e2e035246a; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=45d6a7410e5db82b; 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 的上下文归属。
@@ -3,7 +3,7 @@ name: harness-plan
3
3
  description: 将需求转化为设计文档+实施计划+完整测试场景表,必须在编码前完成。仅当用户显式调用 /harness-plan 或明确要求进入
4
4
  Harness 规划阶段时使用;不得因用户描述需求就自动触发。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=25cf57e2e035246a; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=45d6a7410e5db82b; overlay=none; agent=codex; do not edit -->
7
7
  # harness-plan — 需求规划
8
8
 
9
9
  ## Purpose
@@ -4,7 +4,7 @@ description: 6维度代码审查(架构/安全/规范/兼容/测试/性能)
4
4
  .harness/context-index.json)和测试场景表,在隔离上下文运行。仅当用户显式调用 /harness-review 时使用;不得在
5
5
  test 结束后自动接续执行。
6
6
  ---
7
- <!-- generated by harness_deploy.py; core=25cf57e2e035246a; overlay=none; agent=codex; do not edit -->
7
+ <!-- generated by harness_deploy.py; core=45d6a7410e5db82b; overlay=none; agent=codex; do not edit -->
8
8
  # harness-review — 代码审查
9
9
 
10
10
  ## Purpose
@@ -3,7 +3,7 @@ name: harness-run
3
3
  description: 按变更簇执行 TDD 编码循环(RED→GREEN→REFACTOR→编译验证),逐变更簇实现计划中的任务。仅当用户显式调用
4
4
  /harness-run 时使用;不得因用户提到编码/实现就自动触发,也不得被其他阶段 skill 自动接续。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=25cf57e2e035246a; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=45d6a7410e5db82b; overlay=none; agent=codex; do not edit -->
7
7
  # harness-run — 需求编码
8
8
 
9
9
  ## Purpose
@@ -3,7 +3,7 @@ name: harness-submit
3
3
  description: 最终提交封装:验证→中文 commit→提交/推送;worktree 模式含 --no-ff 合并回主分支。仅当用户显式调用
4
4
  /harness-submit(或 /harness-merge 重入合并段)时使用;用户口头说'提交/commit/push'时必须先确认,不得自动触发。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=25cf57e2e035246a; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=45d6a7410e5db82b; overlay=none; agent=codex; do not edit -->
7
7
  # harness-submit — 最终提交(含 worktree 合并)
8
8
 
9
9
  ## Purpose
@@ -4,7 +4,7 @@ description: Use when the user asks to synchronize, refresh, or validate Harness
4
4
  metadata, adapters, knowledge, rules, instruction entrypoints, config origins,
5
5
  or CodeGraph status.
6
6
  ---
7
- <!-- generated by harness_deploy.py; core=25cf57e2e035246a; overlay=none; agent=codex; do not edit -->
7
+ <!-- generated by harness_deploy.py; core=45d6a7410e5db82b; overlay=none; agent=codex; do not edit -->
8
8
  # harness-sync
9
9
 
10
10
  ## Purpose
@@ -3,7 +3,7 @@ name: harness-test
3
3
  description: 测试执行:读取场景表,执行单元测试+API接口测试+数据兼容验证,输出测试报告。仅当用户显式调用 /harness-test
4
4
  时使用;不得在 run 结束后自动接续执行。
5
5
  ---
6
- <!-- generated by harness_deploy.py; core=25cf57e2e035246a; overlay=none; agent=codex; do not edit -->
6
+ <!-- generated by harness_deploy.py; core=45d6a7410e5db82b; overlay=none; agent=codex; do not edit -->
7
7
  # harness-test — 测试执行
8
8
 
9
9
  ## Purpose
@@ -150,7 +150,13 @@ GATE_WARNINGS_REL = Path("evidence") / "gate-warnings.ndjson"
150
150
 
151
151
 
152
152
  def gate_severity_mode(project: Path, change_dir: Path | None = None) -> str:
153
- """Resolve gate severity mode: env > change gate-policy > project config."""
153
+ """Resolve gate severity mode: env > change gate-policy > project config.
154
+
155
+ Default is ``lenient`` (soft regenerable sites → WARN). Release phases and
156
+ the three hard invariants stay fail-closed; set ``HUNTER_HARNESS_GATE_MODE``
157
+ or ``gate-policy.json`` ``severityMode`` to ``strict`` to force fail-closed
158
+ soft sites as well.
159
+ """
154
160
  env_mode = str(os.environ.get("HUNTER_HARNESS_GATE_MODE") or "").strip().lower()
155
161
  if env_mode in {"strict", "lenient"}:
156
162
  return env_mode
@@ -170,7 +176,7 @@ def gate_severity_mode(project: Path, change_dir: Path | None = None) -> str:
170
176
  value = str(document.get("severityMode") or "").strip().lower()
171
177
  if value in {"strict", "lenient"}:
172
178
  return value
173
- return "strict"
179
+ return "lenient"
174
180
 
175
181
 
176
182
  def gate_soft_allowed(mode: str, phase: str, site: str) -> bool:
@@ -2,5 +2,5 @@
2
2
  "schemaVersion": 1,
3
3
  "overlay": "none",
4
4
  "agent": "cursor",
5
- "coreHash": "93162755f0b5376e"
5
+ "coreHash": "13a1b1511d09a998"
6
6
  }