@hunter-harness/workflow-harness 0.2.50 → 0.2.52

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 (218) hide show
  1. package/harness/bundles/general/claude-code/.harness-build.json +1 -1
  2. package/harness/bundles/general/claude-code/README.md +4 -4
  3. package/harness/bundles/general/claude-code/harness-archive/SKILL.md +6 -6
  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 +42 -258
  6. package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +38 -120
  7. package/harness/bundles/general/claude-code/harness-plan/SKILL.md +4 -4
  8. package/harness/bundles/general/claude-code/harness-plan/checklist.md +2 -2
  9. package/harness/bundles/general/claude-code/harness-review/SKILL.md +2 -2
  10. package/harness/bundles/general/claude-code/harness-run/SKILL.md +2 -2
  11. package/harness/bundles/general/claude-code/harness-submit/SKILL.md +2 -2
  12. package/harness/bundles/general/claude-code/harness-sync/SKILL.md +7 -7
  13. package/harness/bundles/general/claude-code/harness-sync/reference.md +18 -11
  14. package/harness/bundles/general/claude-code/harness-test/SKILL.md +2 -2
  15. package/harness/bundles/general/claude-code/protocols/archive-report-protocol.md +5 -7
  16. package/harness/bundles/general/claude-code/protocols/state-layout-protocol.md +17 -11
  17. package/harness/bundles/general/claude-code/scripts/harness_archive.py +748 -200
  18. package/harness/bundles/general/claude-code/scripts/harness_profile.py +0 -1
  19. package/harness/bundles/general/claude-code/scripts/harness_state.py +3 -5
  20. package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
  21. package/harness/bundles/general/codebuddy/README.md +4 -4
  22. package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +6 -6
  23. package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
  24. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +39 -244
  25. package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +35 -106
  26. package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +4 -4
  27. package/harness/bundles/general/codebuddy/harness-plan/checklist.md +2 -2
  28. package/harness/bundles/general/codebuddy/harness-review/SKILL.md +2 -2
  29. package/harness/bundles/general/codebuddy/harness-run/SKILL.md +2 -2
  30. package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +2 -2
  31. package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +8 -8
  32. package/harness/bundles/general/codebuddy/harness-sync/reference.md +18 -11
  33. package/harness/bundles/general/codebuddy/harness-test/SKILL.md +2 -2
  34. package/harness/bundles/general/codebuddy/protocols/archive-report-protocol.md +5 -7
  35. package/harness/bundles/general/codebuddy/protocols/state-layout-protocol.md +17 -11
  36. package/harness/bundles/general/codebuddy/scripts/harness_archive.py +748 -200
  37. package/harness/bundles/general/codebuddy/scripts/harness_profile.py +0 -1
  38. package/harness/bundles/general/codebuddy/scripts/harness_state.py +3 -5
  39. package/harness/bundles/general/codex/.harness-build.json +1 -1
  40. package/harness/bundles/general/codex/README.md +4 -4
  41. package/harness/bundles/general/codex/harness-archive/SKILL.md +6 -6
  42. package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
  43. package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +39 -244
  44. package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +35 -106
  45. package/harness/bundles/general/codex/harness-plan/SKILL.md +4 -4
  46. package/harness/bundles/general/codex/harness-plan/checklist.md +2 -2
  47. package/harness/bundles/general/codex/harness-review/SKILL.md +2 -2
  48. package/harness/bundles/general/codex/harness-run/SKILL.md +2 -2
  49. package/harness/bundles/general/codex/harness-submit/SKILL.md +2 -2
  50. package/harness/bundles/general/codex/harness-sync/SKILL.md +8 -8
  51. package/harness/bundles/general/codex/harness-sync/reference.md +18 -11
  52. package/harness/bundles/general/codex/harness-test/SKILL.md +2 -2
  53. package/harness/bundles/general/codex/protocols/archive-report-protocol.md +5 -7
  54. package/harness/bundles/general/codex/protocols/state-layout-protocol.md +17 -11
  55. package/harness/bundles/general/codex/scripts/harness_archive.py +748 -200
  56. package/harness/bundles/general/codex/scripts/harness_profile.py +0 -1
  57. package/harness/bundles/general/codex/scripts/harness_state.py +3 -5
  58. package/harness/bundles/general/cursor/.harness-build.json +1 -1
  59. package/harness/bundles/general/cursor/README.md +4 -4
  60. package/harness/bundles/general/cursor/harness-archive/SKILL.md +6 -6
  61. package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
  62. package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +39 -244
  63. package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +35 -106
  64. package/harness/bundles/general/cursor/harness-plan/SKILL.md +4 -4
  65. package/harness/bundles/general/cursor/harness-plan/checklist.md +2 -2
  66. package/harness/bundles/general/cursor/harness-review/SKILL.md +2 -2
  67. package/harness/bundles/general/cursor/harness-run/SKILL.md +2 -2
  68. package/harness/bundles/general/cursor/harness-submit/SKILL.md +2 -2
  69. package/harness/bundles/general/cursor/harness-sync/SKILL.md +8 -8
  70. package/harness/bundles/general/cursor/harness-sync/reference.md +18 -11
  71. package/harness/bundles/general/cursor/harness-test/SKILL.md +2 -2
  72. package/harness/bundles/general/cursor/protocols/archive-report-protocol.md +5 -7
  73. package/harness/bundles/general/cursor/protocols/state-layout-protocol.md +17 -11
  74. package/harness/bundles/general/cursor/scripts/harness_archive.py +748 -200
  75. package/harness/bundles/general/cursor/scripts/harness_profile.py +0 -1
  76. package/harness/bundles/general/cursor/scripts/harness_state.py +3 -5
  77. package/harness/bundles/java/claude-code/.harness-build.json +1 -1
  78. package/harness/bundles/java/claude-code/README.md +4 -4
  79. package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +2 -2
  80. package/harness/bundles/java/claude-code/harness-archive/SKILL.md +6 -6
  81. package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
  82. package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +42 -258
  83. package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +38 -120
  84. package/harness/bundles/java/claude-code/harness-package/SKILL.md +2 -2
  85. package/harness/bundles/java/claude-code/harness-plan/SKILL.md +4 -4
  86. package/harness/bundles/java/claude-code/harness-plan/checklist.md +2 -2
  87. package/harness/bundles/java/claude-code/harness-review/SKILL.md +2 -2
  88. package/harness/bundles/java/claude-code/harness-run/SKILL.md +2 -2
  89. package/harness/bundles/java/claude-code/harness-submit/SKILL.md +2 -2
  90. package/harness/bundles/java/claude-code/harness-sync/SKILL.md +7 -7
  91. package/harness/bundles/java/claude-code/harness-sync/reference.md +18 -11
  92. package/harness/bundles/java/claude-code/harness-test/SKILL.md +2 -2
  93. package/harness/bundles/java/claude-code/protocols/archive-report-protocol.md +5 -7
  94. package/harness/bundles/java/claude-code/protocols/state-layout-protocol.md +17 -11
  95. package/harness/bundles/java/claude-code/scripts/harness_archive.py +748 -200
  96. package/harness/bundles/java/claude-code/scripts/harness_profile.py +0 -1
  97. package/harness/bundles/java/claude-code/scripts/harness_state.py +3 -5
  98. package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
  99. package/harness/bundles/java/codebuddy/README.md +4 -4
  100. package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +2 -2
  101. package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +6 -6
  102. package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
  103. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +39 -244
  104. package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +35 -106
  105. package/harness/bundles/java/codebuddy/harness-package/SKILL.md +2 -2
  106. package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +4 -4
  107. package/harness/bundles/java/codebuddy/harness-plan/checklist.md +2 -2
  108. package/harness/bundles/java/codebuddy/harness-review/SKILL.md +2 -2
  109. package/harness/bundles/java/codebuddy/harness-run/SKILL.md +2 -2
  110. package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +2 -2
  111. package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +8 -8
  112. package/harness/bundles/java/codebuddy/harness-sync/reference.md +18 -11
  113. package/harness/bundles/java/codebuddy/harness-test/SKILL.md +2 -2
  114. package/harness/bundles/java/codebuddy/protocols/archive-report-protocol.md +5 -7
  115. package/harness/bundles/java/codebuddy/protocols/state-layout-protocol.md +17 -11
  116. package/harness/bundles/java/codebuddy/scripts/harness_archive.py +748 -200
  117. package/harness/bundles/java/codebuddy/scripts/harness_profile.py +0 -1
  118. package/harness/bundles/java/codebuddy/scripts/harness_state.py +3 -5
  119. package/harness/bundles/java/codex/.harness-build.json +1 -1
  120. package/harness/bundles/java/codex/README.md +4 -4
  121. package/harness/bundles/java/codex/harness-apidoc/SKILL.md +2 -2
  122. package/harness/bundles/java/codex/harness-archive/SKILL.md +6 -6
  123. package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
  124. package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +39 -244
  125. package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +35 -106
  126. package/harness/bundles/java/codex/harness-package/SKILL.md +2 -2
  127. package/harness/bundles/java/codex/harness-plan/SKILL.md +4 -4
  128. package/harness/bundles/java/codex/harness-plan/checklist.md +2 -2
  129. package/harness/bundles/java/codex/harness-review/SKILL.md +2 -2
  130. package/harness/bundles/java/codex/harness-run/SKILL.md +2 -2
  131. package/harness/bundles/java/codex/harness-submit/SKILL.md +2 -2
  132. package/harness/bundles/java/codex/harness-sync/SKILL.md +8 -8
  133. package/harness/bundles/java/codex/harness-sync/reference.md +18 -11
  134. package/harness/bundles/java/codex/harness-test/SKILL.md +2 -2
  135. package/harness/bundles/java/codex/protocols/archive-report-protocol.md +5 -7
  136. package/harness/bundles/java/codex/protocols/state-layout-protocol.md +17 -11
  137. package/harness/bundles/java/codex/scripts/harness_archive.py +748 -200
  138. package/harness/bundles/java/codex/scripts/harness_profile.py +0 -1
  139. package/harness/bundles/java/codex/scripts/harness_state.py +3 -5
  140. package/harness/bundles/java/cursor/.harness-build.json +1 -1
  141. package/harness/bundles/java/cursor/README.md +4 -4
  142. package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +2 -2
  143. package/harness/bundles/java/cursor/harness-archive/SKILL.md +6 -6
  144. package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
  145. package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +39 -244
  146. package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +35 -106
  147. package/harness/bundles/java/cursor/harness-package/SKILL.md +2 -2
  148. package/harness/bundles/java/cursor/harness-plan/SKILL.md +4 -4
  149. package/harness/bundles/java/cursor/harness-plan/checklist.md +2 -2
  150. package/harness/bundles/java/cursor/harness-review/SKILL.md +2 -2
  151. package/harness/bundles/java/cursor/harness-run/SKILL.md +2 -2
  152. package/harness/bundles/java/cursor/harness-submit/SKILL.md +2 -2
  153. package/harness/bundles/java/cursor/harness-sync/SKILL.md +8 -8
  154. package/harness/bundles/java/cursor/harness-sync/reference.md +18 -11
  155. package/harness/bundles/java/cursor/harness-test/SKILL.md +2 -2
  156. package/harness/bundles/java/cursor/protocols/archive-report-protocol.md +5 -7
  157. package/harness/bundles/java/cursor/protocols/state-layout-protocol.md +17 -11
  158. package/harness/bundles/java/cursor/scripts/harness_archive.py +748 -200
  159. package/harness/bundles/java/cursor/scripts/harness_profile.py +0 -1
  160. package/harness/bundles/java/cursor/scripts/harness_state.py +3 -5
  161. package/harness/manifests/general/claude-code.json +21 -45
  162. package/harness/manifests/general/codebuddy.json +21 -45
  163. package/harness/manifests/general/codex.json +21 -45
  164. package/harness/manifests/general/cursor.json +21 -45
  165. package/harness/manifests/java/claude-code.json +23 -47
  166. package/harness/manifests/java/codebuddy.json +23 -47
  167. package/harness/manifests/java/codex.json +23 -47
  168. package/harness/manifests/java/cursor.json +23 -47
  169. package/hunter-workflow-family.json +4 -4
  170. package/package.json +1 -1
  171. package/harness/bundles/general/claude-code/harness-knowledge-ingest/design.md +0 -842
  172. package/harness/bundles/general/claude-code/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
  173. package/harness/bundles/general/claude-code/harness-knowledge-ingest/mcp-config.example.json +0 -10
  174. package/harness/bundles/general/claude-code/harness-knowledge-ingest/reference.md +0 -413
  175. package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
  176. package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
  177. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/design.md +0 -842
  178. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
  179. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/mcp-config.example.json +0 -10
  180. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/reference.md +0 -413
  181. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
  182. package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
  183. package/harness/bundles/general/codex/harness-knowledge-ingest/design.md +0 -842
  184. package/harness/bundles/general/codex/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
  185. package/harness/bundles/general/codex/harness-knowledge-ingest/mcp-config.example.json +0 -10
  186. package/harness/bundles/general/codex/harness-knowledge-ingest/reference.md +0 -413
  187. package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
  188. package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
  189. package/harness/bundles/general/cursor/harness-knowledge-ingest/design.md +0 -842
  190. package/harness/bundles/general/cursor/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
  191. package/harness/bundles/general/cursor/harness-knowledge-ingest/mcp-config.example.json +0 -10
  192. package/harness/bundles/general/cursor/harness-knowledge-ingest/reference.md +0 -413
  193. package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
  194. package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
  195. package/harness/bundles/java/claude-code/harness-knowledge-ingest/design.md +0 -842
  196. package/harness/bundles/java/claude-code/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
  197. package/harness/bundles/java/claude-code/harness-knowledge-ingest/mcp-config.example.json +0 -10
  198. package/harness/bundles/java/claude-code/harness-knowledge-ingest/reference.md +0 -413
  199. package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
  200. package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
  201. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/design.md +0 -842
  202. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
  203. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/mcp-config.example.json +0 -10
  204. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/reference.md +0 -413
  205. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
  206. package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
  207. package/harness/bundles/java/codex/harness-knowledge-ingest/design.md +0 -842
  208. package/harness/bundles/java/codex/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
  209. package/harness/bundles/java/codex/harness-knowledge-ingest/mcp-config.example.json +0 -10
  210. package/harness/bundles/java/codex/harness-knowledge-ingest/reference.md +0 -413
  211. package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
  212. package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
  213. package/harness/bundles/java/cursor/harness-knowledge-ingest/design.md +0 -842
  214. package/harness/bundles/java/cursor/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
  215. package/harness/bundles/java/cursor/harness-knowledge-ingest/mcp-config.example.json +0 -10
  216. package/harness/bundles/java/cursor/harness-knowledge-ingest/reference.md +0 -413
  217. package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
  218. package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
@@ -21,14 +21,14 @@ disallowed-tools:
21
21
  - Bash(awk *)
22
22
  - Bash(curl *)
23
23
  ---
24
- <!-- generated by harness_deploy.py; core=6b900d319d6b6d77; overlay=none; agent=claude-code; do not edit -->
24
+ <!-- generated by harness_deploy.py; core=bde20b36d56b03f4; overlay=none; agent=claude-code; do not edit -->
25
25
  # harness-plan — 需求规划
26
26
 
27
27
  ## Purpose
28
28
 
29
29
  确定 change 后必须运行 `python <skills-root>/scripts/harness_gate.py classify --change <id> --stage plan --json`,并把脚本返回的 risk tier、默认阶段、条件阶段和必需验证写入计划;不得凭模型印象另建风险分级。
30
30
 
31
- 需求 → 设计文档 → 任务拆分 → 测试场景表(编码/测试唯一真相源)。存在 `.harness/archive/` 或 `.harness/knowledge/` 时须先 `harness-knowledge-query`。
31
+ 需求 → 设计文档 → 任务拆分 → 测试场景表(编码/测试唯一真相源)。项目已绑定远端平台时先执行一次 `harness-knowledge-query`;远端不可用则记录 issue 并继续,不做本地回退。
32
32
 
33
33
  ## When to Use
34
34
 
@@ -46,7 +46,7 @@ disallowed-tools:
46
46
  6. **implementation-detail** — 自适应执行参考;legacy 缺失 🟡WARN,不阻断
47
47
  7. **test-scenarios** — 测试真相源:`plans/<change>-test-scenarios.md`
48
48
  8. **禁止读取 `docs/superpowers/` 作为正式输入** — 旧草稿仅人工线索
49
- 9. **每个 skill 边界只刷新一次状态快照** — 先运行 `python <skills-root>/scripts/harness_state.py capture --project . --change-dir ".harness/changes/<change-name>" --base <baseCommit> --json`;`changedSegments=[]` 时复用已有 profile/rules/map/knowledge/change/code 指纹,不再重复跑全量 `harness-sync`、知识重建或代码库扫描。只有对应 segment 变化或缺失时才定向刷新;快照不能替代源码读取和验证门禁。
49
+ 9. **每个 skill 边界只刷新一次状态快照** — 先运行 `python <skills-root>/scripts/harness_state.py capture --project . --change-dir ".harness/changes/<change-name>" --base <baseCommit> --json`;`changedSegments=[]` 时复用已有 profile/rules/map/change/code 指纹,不再重复跑全量 `harness-sync` 或代码库扫描。`knowledge` 段仅为兼容空段,知识始终按需远端查询;快照不能替代源码读取和验证门禁。
50
50
 
51
51
  状态目录分层:新路径优先,旧路径兼容 → [[../protocols/state-layout-protocol.md|state-layout-protocol]]
52
52
  > 片段:read-protocol · plan 额外写 `meta/worktree.json`、`meta/change-context.json`
@@ -86,7 +86,7 @@ disallowed-tools:
86
86
  |------|------|
87
87
  | 0 | 用当前解释器运行 `harness_runtime.py doctor`,后续消费绝对 argv;git status;脏工作区 → baseline 隔离 + `decision`,不询问 |
88
88
  | 0.5 | 先执行 `harness_context.py prepare --phase plan --executor <tool> [--change <id>] --json`,以其唯一 change/executionRoot 初始化 plan-run-id 与 attempt(首次为 1),用同一身份追加 `phase.start`;从第一条知识查询起保留事件证据,并在 finalizer 中复用该身份 |
89
- | 1 | `harness-knowledge-query` 单次 query(内部 ensure-current;失败记 `issue`) |
89
+ | 1 | `harness-knowledge-query` 单次远端 query(失败记 `issue`,不建立本地索引或离线回退) |
90
90
  | 2 | 歧义优先检查 + 复杂度分级;先确认会改变实现方向的语义歧义 |
91
91
  | 3 | 按复杂度执行有预算的代码探索;简单修复不得扩散到无关模块 |
92
92
  | 4 | **设计审批包** blocking user confirmation;确认事件早于 approved 设计文档和 `meta/worktree.json` |
@@ -15,8 +15,8 @@ description: harness-plan 的阶段检查清单和覆盖检查列表。仅在执
15
15
  ## 阶段 0.5:事件初始化与知识查询
16
16
 
17
17
  - [ ] 先确定 change-name、稳定的 plan-run-id 与 attempt(首次为 1),立即用 `harness_events.py append ... --phase plan --type phase.start --run-id <plan-run-id> --attempt <attempt>` 追加开始事件
18
- - [ ] 再执行一次 knowledge `query`;由 query 内部 ensure-current,不另跑前置 sync
19
- - [ ] 查询失败追加 `issue`,不得重跑“sync + query”循环或假装已读取历史
18
+ - [ ] 项目已绑定平台时执行一次远端 knowledge `query`;不另跑前置 sync,不创建本地索引
19
+ - [ ] 查询失败追加 `issue`,不得回退本地 archive/SQLite、重跑“sync + query”循环或假装已读取历史
20
20
 
21
21
  ## 阶段 2:歧义优先检查与复杂度分级
22
22
 
@@ -22,7 +22,7 @@ disallowed-tools:
22
22
  - Bash(curl *)
23
23
  - Bash(codegraph *)
24
24
  ---
25
- <!-- generated by harness_deploy.py; core=6b900d319d6b6d77; overlay=none; agent=claude-code; do not edit -->
25
+ <!-- generated by harness_deploy.py; core=bde20b36d56b03f4; overlay=none; agent=claude-code; do not edit -->
26
26
  # harness-review — 代码审查
27
27
 
28
28
  ## Purpose
@@ -56,7 +56,7 @@ disallowed-tools:
56
56
  6. **implementation-detail** — 自适应执行参考;legacy 缺失 🟡WARN,不阻断
57
57
  7. **test-scenarios** — 测试真相源:`plans/<change>-test-scenarios.md`
58
58
  8. **禁止读取 `docs/superpowers/` 作为正式输入** — 旧草稿仅人工线索
59
- 9. **每个 skill 边界只刷新一次状态快照** — 先运行 `python <skills-root>/scripts/harness_state.py capture --project . --change-dir ".harness/changes/<change-name>" --base <baseCommit> --json`;`changedSegments=[]` 时复用已有 profile/rules/map/knowledge/change/code 指纹,不再重复跑全量 `harness-sync`、知识重建或代码库扫描。只有对应 segment 变化或缺失时才定向刷新;快照不能替代源码读取和验证门禁。
59
+ 9. **每个 skill 边界只刷新一次状态快照** — 先运行 `python <skills-root>/scripts/harness_state.py capture --project . --change-dir ".harness/changes/<change-name>" --base <baseCommit> --json`;`changedSegments=[]` 时复用已有 profile/rules/map/change/code 指纹,不再重复跑全量 `harness-sync` 或代码库扫描。`knowledge` 段仅为兼容空段,知识始终按需远端查询;快照不能替代源码读取和验证门禁。
60
60
 
61
61
  状态目录分层:新路径优先,旧路径兼容 → [[../protocols/state-layout-protocol.md|state-layout-protocol]]
62
62
  > 片段:read-protocol
@@ -22,7 +22,7 @@ disallowed-tools:
22
22
  - Bash(curl *)
23
23
  - Bash(codegraph *)
24
24
  ---
25
- <!-- generated by harness_deploy.py; core=6b900d319d6b6d77; overlay=none; agent=claude-code; do not edit -->
25
+ <!-- generated by harness_deploy.py; core=bde20b36d56b03f4; overlay=none; agent=claude-code; do not edit -->
26
26
  # harness-run — 需求编码
27
27
 
28
28
  ## Purpose
@@ -67,7 +67,7 @@ disallowed-tools:
67
67
  6. **implementation-detail** — 自适应执行参考;legacy 缺失 🟡WARN,不阻断
68
68
  7. **test-scenarios** — 测试真相源:`plans/<change>-test-scenarios.md`
69
69
  8. **禁止读取 `docs/superpowers/` 作为正式输入** — 旧草稿仅人工线索
70
- 9. **每个 skill 边界只刷新一次状态快照** — 先运行 `python <skills-root>/scripts/harness_state.py capture --project . --change-dir ".harness/changes/<change-name>" --base <baseCommit> --json`;`changedSegments=[]` 时复用已有 profile/rules/map/knowledge/change/code 指纹,不再重复跑全量 `harness-sync`、知识重建或代码库扫描。只有对应 segment 变化或缺失时才定向刷新;快照不能替代源码读取和验证门禁。
70
+ 9. **每个 skill 边界只刷新一次状态快照** — 先运行 `python <skills-root>/scripts/harness_state.py capture --project . --change-dir ".harness/changes/<change-name>" --base <baseCommit> --json`;`changedSegments=[]` 时复用已有 profile/rules/map/change/code 指纹,不再重复跑全量 `harness-sync` 或代码库扫描。`knowledge` 段仅为兼容空段,知识始终按需远端查询;快照不能替代源码读取和验证门禁。
71
71
 
72
72
  状态目录分层:新路径优先,旧路径兼容 → [[../protocols/state-layout-protocol.md|state-layout-protocol]]
73
73
  > 片段:read-protocol · run 必读文件优先级 → `reference.md` Step 0
@@ -21,7 +21,7 @@ disallowed-tools:
21
21
  - Bash(awk *)
22
22
  - Bash(curl *)
23
23
  ---
24
- <!-- generated by harness_deploy.py; core=6b900d319d6b6d77; overlay=none; agent=claude-code; do not edit -->
24
+ <!-- generated by harness_deploy.py; core=bde20b36d56b03f4; overlay=none; agent=claude-code; do not edit -->
25
25
  # harness-submit — 最终提交(含 worktree 合并)
26
26
 
27
27
  ## Purpose
@@ -55,7 +55,7 @@ disallowed-tools:
55
55
  6. **implementation-detail** — 自适应执行参考;legacy 缺失 🟡WARN,不阻断
56
56
  7. **test-scenarios** — 测试真相源:`plans/<change>-test-scenarios.md`
57
57
  8. **禁止读取 `docs/superpowers/` 作为正式输入** — 旧草稿仅人工线索
58
- 9. **每个 skill 边界只刷新一次状态快照** — 先运行 `python <skills-root>/scripts/harness_state.py capture --project . --change-dir ".harness/changes/<change-name>" --base <baseCommit> --json`;`changedSegments=[]` 时复用已有 profile/rules/map/knowledge/change/code 指纹,不再重复跑全量 `harness-sync`、知识重建或代码库扫描。只有对应 segment 变化或缺失时才定向刷新;快照不能替代源码读取和验证门禁。
58
+ 9. **每个 skill 边界只刷新一次状态快照** — 先运行 `python <skills-root>/scripts/harness_state.py capture --project . --change-dir ".harness/changes/<change-name>" --base <baseCommit> --json`;`changedSegments=[]` 时复用已有 profile/rules/map/change/code 指纹,不再重复跑全量 `harness-sync` 或代码库扫描。`knowledge` 段仅为兼容空段,知识始终按需远端查询;快照不能替代源码读取和验证门禁。
59
59
 
60
60
  状态目录分层:新路径优先,旧路径兼容 → [[../protocols/state-layout-protocol.md|state-layout-protocol]]
61
61
  > 片段:read-protocol
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: harness-sync
3
- description: "Use when the user asks to synchronize, refresh, or validate Harness metadata, adapters, knowledge, rules, instruction entrypoints, config origins, or CodeGraph status."
3
+ description: "Use when the user asks to synchronize, refresh, or validate Harness metadata, adapters, remote knowledge ownership, instruction entrypoints, config origins, or CodeGraph status."
4
4
  argument-hint: "项目路径或留空使用当前目录"
5
5
  effort: medium
6
6
  allowed-tools: [Read, Glob, Grep, Edit, Write, Bash(powershell.exe:*)]
@@ -19,12 +19,12 @@ disallowed-tools:
19
19
  - Bash(awk *)
20
20
  - Bash(curl *)
21
21
  ---
22
- <!-- generated by harness_deploy.py; core=6b900d319d6b6d77; overlay=none; agent=claude-code; do not edit -->
22
+ <!-- generated by harness_deploy.py; core=bde20b36d56b03f4; overlay=none; agent=claude-code; do not edit -->
23
23
  # harness-sync
24
24
 
25
25
  ## Purpose
26
26
 
27
- 通过一个有界入口同步 Harness 投影、知识、公共规则和元数据,并输出可验证的组件收据。
27
+ 通过一个有界入口刷新 Harness Adapter 与元数据、检查远端知识职责和项目指令状态,并输出可验证的组件收据。`sync` 不直接改写 AGENTS/CLAUDE/CODEBUDDY 或规则;文档优化使用远端审计提案。
28
28
 
29
29
  ## Before running
30
30
 
@@ -39,7 +39,7 @@ disallowed-tools:
39
39
  npx hunter-harness sync --project <项目路径> --profile interactive --progress jsonl --json
40
40
  ```
41
41
 
42
- CLI 负责 Python runtime 解析、投影事务、knowledge、rules、map、指令图、配置来源、change 状态及 CodeGraph 证据汇总。禁止直接调用内部 Python 脚本,禁止使用固定 `HEAD~5`,禁止自动全量重建 CodeGraph。
42
+ CLI 负责 Python runtime 解析、Adapter 事务、远端知识职责、文档审计提示、map、指令图、配置来源、change 状态及 CodeGraph 证据汇总。禁止直接调用旧知识 Python 脚本,禁止使用固定 `HEAD~5`,禁止自动全量重建 CodeGraph。
43
43
 
44
44
  只读诊断使用 `--check`(`--dry-run` 为兼容别名);它不得写报告、receipt 或投影。
45
45
  长阶段的 heartbeat 写 stderr;stdout 只保留紧凑摘要。完整报告写入摘要中的
@@ -54,17 +54,17 @@ JSON 报告回显到对话。
54
54
  ## Interpret
55
55
 
56
56
  - `OK`:所有可验证组件通过。
57
- - `ADVISORY`:索引最新,但有待评审候选等非阻塞健康提示;退出码仍为 0
57
+ - `ADVISORY`:例如需要运行中文指令审计提案;退出码仍为 0,且 `sync` 本身没有改写文档。
58
58
  - `WARN`:存在过期、冲突、待评审或 `UNKNOWN` 证据;按 `reportPath` 中的 `nextAction` 处理。
59
59
  - `FAIL`:组件执行失败;不得宣称同步完成。
60
60
  - `BLOCKED`:runtime、项目状态或能力契约阻塞;先修复阻塞条件。
61
61
  - `UNKNOWN`:证据不足,不等于成功,也不触发无界重建。
62
62
 
63
- 非交互或 CI 使用 `--check --profile general --progress jsonl --json`,不得等待规则候选确认。交互式运行若报告规则待评审,再按 `reference.md` 的显式入口处理。
63
+ 非交互或 CI 使用 `--check --profile general --progress jsonl --json`。交互式运行若报告 `INSTRUCTION_AUDIT_REQUIRED`,运行 `hunter-harness instructions audit`;规则候选只进入提案,永不自动应用。
64
64
 
65
65
  ## Safety
66
66
 
67
- 同步不得修改 `.harness/state` 或 `.harness/cache` 的内部文件;只通过 CLI 事务写入。配置真源与生成投影存在漂移时只报告,不静默覆盖真源。change 清理先 dry-run,仅对已验证归档收据执行安全清理。
67
+ 同步不得直接修改项目指令文档或规则。配置真源与生成投影存在漂移时只报告,不静默覆盖真源。change 清理先 dry-run,仅对已验证归档收据执行安全清理。知识查询和 ingest 均为远端职责,不创建 `.harness/knowledge`。
68
68
 
69
69
  ## P0 执行可信度规则
70
70
 
@@ -29,7 +29,7 @@ CLI 按以下顺序解析 Python,并在详细报告中记录来源:
29
29
  5. `python3`
30
30
  6. `python`
31
31
 
32
- 所有探测都必须有超时。完全不可用时返回 `PYTHON_RUNTIME_UNAVAILABLE`,且不得进入 knowledge rules 阶段。
32
+ 所有探测都必须有超时。完全不可用时返回 `PYTHON_RUNTIME_UNAVAILABLE`,并跳过仍依赖 Python 的变更状态阶段;远端知识和指令审计不允许回退到本地 Python 实现。
33
33
 
34
34
  ## 3. 统一同步
35
35
 
@@ -84,9 +84,8 @@ npx hunter-harness sync --check --project <项目路径> --profile general --pro
84
84
  |---|---|---|
85
85
  | capability | CLI 版本、必需能力 | 不匹配立即 `BLOCKED` |
86
86
  | adapter projection | 事务后的实际文件 hash | 使用 post-transaction 校验;partial refresh 不得把未选 adapter 标成 stale |
87
- | managed blocks | 全文件解析树 | 重复 ID、嵌套、闭合不匹配为结构错误 |
88
- | knowledge | manifest、entry 文件、SQLite ID 集合 | 三者不一致为 `FAIL`;进度与性能指标落报告 |
89
- | rules | 投影收据、冲突、待评审数 | 真实分歧只报告,不覆盖 |
87
+ | knowledge | 远端职责声明 | 固定报告 `remote-only`、`fallback=false`、`localIndex=false`;不运行本地 ingest |
88
+ | rules | 审计—提案—应用契约 | `sync` 只给出 `instructions audit` 下一步,不改写文档或自动应用候选 |
90
89
  | codebase map | manifest 文档清单、hash、生成时间 | 真实文件校验,不复用旧 display status |
91
90
  | instruction graph | 入口、include 边、环、主题可达性 | 缺失引用或循环为 `FAIL` |
92
91
  | config origins | canonical/projection 路径与 hash | 漂移 `WARN`,不静默覆盖 |
@@ -94,8 +93,7 @@ npx hunter-harness sync --check --project <项目路径> --profile general --pro
94
93
  | CodeGraph | `codegraph status --json` 的 pending、数据库观察时间、watcher 可达性 | 输出 `CURRENT/PENDING/STALE/INDEX_PRESENT_UNVERIFIED/MISSING/UNKNOWN`;日志 mtime 只证明 watcher 活动,不证明索引完成;不自动全量 reindex |
95
94
 
96
95
  全局状态优先级:`BLOCKED` → `FAIL` → `WARN` → `ADVISORY` → `OK`。任一 `UNKNOWN`
97
- 至少使全局结果为 `WARN`。knowledge freshness health 分开:索引一致但仍有待裁决候选时
98
- 为 `ADVISORY`,不得误报为过期。
96
+ 至少使全局结果为 `WARN`。远端知识可用性由实际 query/upload 收据判断,`sync` 不伪造本地 freshness。
99
97
 
100
98
  ## 5. Git 与 CodeGraph
101
99
 
@@ -136,15 +134,23 @@ npx hunter-harness doctor --managed-blocks --json
136
134
 
137
135
  change cleanup 由同步报告提供具体动作。只允许已验证的 `ARCHIVED_LEFTOVER` 进入删除路径;`RECOVERABLE` 只能移入隔离区;`ORPHAN`/`INVALID` 保持原状并提示人工处理。
138
136
 
139
- ## 9. 规则候选
137
+ ## 9. 中文指令与规则提案
140
138
 
141
- 非交互 sync 只报告待评审数。用户主动要求评审时,先读取候选:
139
+ `sync` 只报告 `INSTRUCTION_AUDIT_REQUIRED`。需要优化时执行:
142
140
 
143
141
  ```powershell
144
- npx hunter-harness rules-review --json
142
+ npx hunter-harness instructions audit --json
145
143
  ```
146
144
 
147
- 公共规则变更仍需展示 evidence 和 diff,并由用户确认。应用后的 decision 必须绑定 candidate revision 与目标 hash;目标变化返回 `RULE_PATCH_STALE`,不得强制覆盖。
145
+ 服务端结合项目类型、现有文档、Codebase Map、近期变更总结和公开最佳实践生成中文提案。
146
+ 提案先保存到 `.harness/state/local/instruction-proposals/`,项目文件保持不变。审阅后显式执行:
147
+
148
+ ```powershell
149
+ npx hunter-harness instructions apply --proposal <proposal.json> --yes --json
150
+ ```
151
+
152
+ 应用必须校验基线 hash 并使用事务;文件在审计后变化则返回 `INSTRUCTION_PROPOSAL_STALE`。
153
+ 近期变更中的经验只形成 rule candidates,`instructions apply` 也不得自动写入这些候选。
148
154
 
149
155
  ## 10. 完成判定
150
156
 
@@ -153,6 +159,7 @@ npx hunter-harness rules-review --json
153
159
  - stdout 摘要与详细报告 hash 一致;
154
160
  - 没有 `FAIL` 或 `BLOCKED`;
155
161
  - 所有自动修复均有 post-transaction 证据;
156
- - knowledge manifest、文件、SQLite 集合一致;
162
+ - knowledge 组件明确为 remote-only,且未创建或刷新本地索引;
163
+ - 文档和规则组件未直接改写项目文件;
157
164
  - 未把 `UNKNOWN` 描述成已验证;
158
165
  - 第二次无输入变化的运行不产生投影 churn。
@@ -23,7 +23,7 @@ disallowed-tools:
23
23
  - Bash(node *)
24
24
  - Bash(codegraph *)
25
25
  ---
26
- <!-- generated by harness_deploy.py; core=6b900d319d6b6d77; overlay=none; agent=claude-code; do not edit -->
26
+ <!-- generated by harness_deploy.py; core=bde20b36d56b03f4; overlay=none; agent=claude-code; do not edit -->
27
27
  # harness-test — 测试执行
28
28
 
29
29
  ## Purpose
@@ -59,7 +59,7 @@ disallowed-tools:
59
59
  6. **implementation-detail** — 自适应执行参考;legacy 缺失 🟡WARN,不阻断
60
60
  7. **test-scenarios** — 测试真相源:`plans/<change>-test-scenarios.md`
61
61
  8. **禁止读取 `docs/superpowers/` 作为正式输入** — 旧草稿仅人工线索
62
- 9. **每个 skill 边界只刷新一次状态快照** — 先运行 `python <skills-root>/scripts/harness_state.py capture --project . --change-dir ".harness/changes/<change-name>" --base <baseCommit> --json`;`changedSegments=[]` 时复用已有 profile/rules/map/knowledge/change/code 指纹,不再重复跑全量 `harness-sync`、知识重建或代码库扫描。只有对应 segment 变化或缺失时才定向刷新;快照不能替代源码读取和验证门禁。
62
+ 9. **每个 skill 边界只刷新一次状态快照** — 先运行 `python <skills-root>/scripts/harness_state.py capture --project . --change-dir ".harness/changes/<change-name>" --base <baseCommit> --json`;`changedSegments=[]` 时复用已有 profile/rules/map/change/code 指纹,不再重复跑全量 `harness-sync` 或代码库扫描。`knowledge` 段仅为兼容空段,知识始终按需远端查询;快照不能替代源码读取和验证门禁。
63
63
 
64
64
  状态目录分层:新路径优先,旧路径兼容 → [[../protocols/state-layout-protocol.md|state-layout-protocol]]
65
65
  > 片段:read-protocol
@@ -173,20 +173,18 @@ python harness/scripts/harness_archive.py repair --archive-dir ".harness/archive
173
173
 
174
174
  repair 先在 archive 外生成候选 derived version,两层 validator 均通过后,才以不可变新版本写入 `derived/v<N>/{summary-data.json, final-summary.html, repair-record.json}`,并把 `derived/authoritative.json` pointer 指向该版本;**原 summary-data.json、final-summary.html 与 manifest 永不覆盖**。知识层只从 authoritative pointer 指向且 hash 校验通过的版本提取条目。
175
175
 
176
- ## 归档与知识维护解耦(§8)
176
+ ## 归档包与服务端知识 ingest(§8)
177
177
 
178
178
  archive close 的破坏性事务只执行确定性 close:
179
179
 
180
180
  ```text
181
181
  status -> manifest -> move -> collect -> render -> validate -> compare
182
- -> maintenance outbox(pending) -> stop AI service -> return
182
+ -> 生成确定性核心 ZIP -> 上传并等待服务端持久化/ingest 收据 -> stop AI service -> return
183
183
  ```
184
184
 
185
- close **不再同步顺序启动四次** `harness_knowledge.py`(ingest/dedupe/auto-supersede/reverify-stale)。它写一个 `pending` outbox 项即返回,`knowledgeMaintenance=QUEUED`;写 outbox 失败时 `NOT_QUEUED`(warning,不回滚 archive,`finalStatus` 仍由验证事实决定,本次总状态 CONDITIONAL)。
186
-
187
- outbox 布局见 `state-layout-protocol.md`「knowledge maintenance-outbox」。`harness_knowledge.py maintain --project . --archive-id <id>` 单进程推进:claim pending/failed -> running -> 增量 ingest(含 in-memory near-dedupe,不再二次磁盘 dedupe)-> auto-supersede -> reverify-stale -> 导出残余 judge checklist -> completed(或 `completed_rules_pending_judge` 若 `pendingJudgements>0`)。失败 -> failed(attempts+1,可重试);completed 项幂等。`harness-sync` 启动时扫描 pending/failed outbox 并执行 maintain。
188
-
189
- **机械 maintain 不得假装完成语义裁决**:存在待裁决项(conflict / promote-candidate)时状态为 `completed_rules_pending_judge`、`pendingJudgements>0`、写 `pending-judgements-<archive-id>.json`,由模型层后续 `judge --apply` 处理;`manualReview=true` 时保留人工确认。
185
+ close 不再运行 `harness_knowledge.py`,也不写本地 outbox/index。服务端先保存原 ZIP,再安全
186
+ 解包发布核心文件并重建项目语义索引;客户端以 package hash 与 `knowledge_status` 作为收据。
187
+ 失败时本地归档保持有效,待上传 ZIP 保留供同包重试,不允许改走散文件 push 或本地索引。
190
188
 
191
189
  ## 最终状态
192
190
 
@@ -6,7 +6,7 @@ description: harness .harness 状态目录分层协议。用于减少根目录
6
6
 
7
7
  ## 升级与本地状态保护边界
8
8
 
9
- `.harness/archive/`、`.harness/changes/`、`.harness/knowledge/project-local/` 是 protected local roots。CLI init/configure/refresh/rules 操作前必须:
9
+ `.harness/archive/`、`.harness/changes/` 是 protected local roots。CLI init/configure/refresh/rules 操作前必须:
10
10
 
11
11
  1. 综合 project marker、adapter `.harness-build.json`、managed block、恢复事务和非空 `.harness` 判断 `absent / valid / partial / recovery-required`;
12
12
  2. 对 protected roots 记录文件数、目录数、字节数、Merkle root,以及 archive 首末 identity;
@@ -84,21 +84,27 @@ description: harness .harness 状态目录分层协议。用于减少根目录
84
84
  `runtime/retired-service-sessions/`;该动作保留原始回执且不终止进程。受管命令、
85
85
  环境会话和 fixback 的完整合同见 `execution-session-protocol.md`。
86
86
 
87
- ## knowledge maintenance-outbox(§8)
87
+ ## 归档上传重试状态(§8)
88
88
 
89
- 归档 close 不再同步执行知识维护;它写一个 pending outbox 项即返回:
89
+ 知识 ingest Hunter Platform 在接收归档 ZIP 后执行,本地不再创建 `.harness/knowledge`
90
+ 或 maintenance-outbox。尚未被服务端确认持久化的包保存在:
90
91
 
91
92
  ```text
92
- .harness/knowledge/maintenance-outbox/
93
- pending/<archive-id>.json # 待维护
94
- running/<archive-id>.json # maintain 正在处理
95
- completed/<archive-id>.json # 已完成(status=completed 或 completed_rules_pending_judge)
96
- failed/<archive-id>.json # 失败(attempts+1,可重试)
93
+ .harness/state/local/archive-packages/
94
+ <change-key>.zip # 确定性核心归档包
95
+ <change-key>.upload.json # 上传/失败收据(如存在)
97
96
  ```
98
97
 
99
- schema:`{schemaVersion, archiveId, archivePath, archiveManifestHash, status, attempts, createdAt, lastError, pendingJudgements?, completedAt?}`。
100
-
101
- `harness_knowledge.py maintain --project . --archive-id <id>` 单进程顺序:claim pending/failed -> running -> 增量 ingest(`build_index` 内含 in-memory near-dedupe,**不再二次磁盘 dedupe**)-> auto-supersede -> reverify-stale -> 导出残余 judge checklist -> running -> completed(或 `completed_rules_pending_judge` 若 `pendingJudgements>0`)。失败 -> failed(attempts+1,可重试)。completed 项重复 maintain 幂等。`harness-sync` 启动时扫描 pending/failed outbox 并执行 maintain。
98
+ ZIP 只包含 summary、spec、plans、archive-meta、change-context 和包 manifest。上传失败保留;
99
+ 每次 finalize 都先生成 ZIP 与对应回执,再按 `credentials.local.yaml` 或
100
+ `project.yaml` `server.url` + `server.token_env` 环境变量解析远端凭据。缺少凭据、
101
+ 网络失败、无效收据或知识状态为 `indexing`/`failed` 时均保留这两个按 change 命名的文件,
102
+ 因此可枚举 `*.upload.json` 独立重试,不会由后一次归档覆盖前一次。只有 CLI 已核对
103
+ package SHA-256,且服务端同时确认 `archive_status=durable` 与
104
+ `knowledge_status=ready` 时,才清理对应 ZIP 和回执。回执的 `uploadStatus` 为
105
+ `pending|failed|ready`,`reasonCode` 使用 `ARCHIVE_UPLOAD_*` 或
106
+ `ARCHIVE_KNOWLEDGE_*` 稳定错误码;`indexing` 必须映射为 `pending`,不得误报失败。
107
+ 远端知识查询失败不得创建本地 fallback。
102
108
 
103
109
  ## 读取兼容
104
110