release-skill 0.9.17 → 0.9.19

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 (266) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +2 -2
  4. package/.cursor-plugin/plugin.json +10 -0
  5. package/.kimi-plugin/plugin.json +1 -1
  6. package/.qoder-plugin/plugin.json +1 -1
  7. package/CHANGELOG.md +70 -2
  8. package/INSTALL.md +66 -9
  9. package/INSTALL.zh-CN.md +49 -8
  10. package/README.md +41 -20
  11. package/README.zh-CN.md +31 -19
  12. package/adapters/claude/.claude-plugin/plugin.json +1 -1
  13. package/adapters/claude/bin/consumer-contract-vectors.json +7 -7
  14. package/adapters/claude/bin/error-codes.json +1 -1
  15. package/adapters/claude/bin/foundation-resource-binding.json +1 -1
  16. package/adapters/claude/bin/prebuild-manifest.json +8 -4
  17. package/adapters/claude/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  18. package/adapters/claude/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  19. package/adapters/claude/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  20. package/adapters/claude/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  21. package/adapters/claude/bin/registry.json +1 -1
  22. package/adapters/claude/bin/release-skill.bundle.mjs +4425 -1519
  23. package/adapters/claude/bin/rules.json +1 -1
  24. package/adapters/claude/data/hosts/cursor/host-descriptor.json +34 -0
  25. package/adapters/claude/data/hosts/registry.json +1 -0
  26. package/adapters/claude/schemas/release-plan.schema.json +255 -25
  27. package/adapters/claude/schemas/release-project.schema.json +228 -26
  28. package/adapters/claude/skills/release-finish/SKILL.md +46 -7
  29. package/adapters/claude/skills/release-help/SKILL.md +47 -103
  30. package/adapters/claude/skills/release-verify/SKILL.md +2 -2
  31. package/adapters/claude/src/schemas/host-descriptor.schema.json +9 -2
  32. package/adapters/codex/.codex-plugin/plugin.json +2 -2
  33. package/adapters/codex/bin/consumer-contract-vectors.json +7 -7
  34. package/adapters/codex/bin/error-codes.json +1 -1
  35. package/adapters/codex/bin/foundation-resource-binding.json +1 -1
  36. package/adapters/codex/bin/prebuild-manifest.json +8 -4
  37. package/adapters/codex/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  38. package/adapters/codex/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  39. package/adapters/codex/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  40. package/adapters/codex/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  41. package/adapters/codex/bin/registry.json +1 -1
  42. package/adapters/codex/bin/release-skill.bundle.mjs +4425 -1519
  43. package/adapters/codex/bin/rules.json +1 -1
  44. package/adapters/codex/data/hosts/cursor/host-descriptor.json +34 -0
  45. package/adapters/codex/data/hosts/registry.json +1 -0
  46. package/adapters/codex/schemas/release-plan.schema.json +255 -25
  47. package/adapters/codex/schemas/release-project.schema.json +228 -26
  48. package/adapters/codex/skills/release-finish/SKILL.md +46 -7
  49. package/adapters/codex/skills/release-help/SKILL.md +49 -105
  50. package/adapters/codex/skills/release-verify/SKILL.md +2 -2
  51. package/adapters/codex/src/schemas/host-descriptor.schema.json +9 -2
  52. package/adapters/cursor/.cursor-plugin/plugin.json +10 -0
  53. package/adapters/cursor/bin/consumer-contract-vectors.json +110 -0
  54. package/adapters/cursor/bin/error-codes.json +161 -0
  55. package/adapters/cursor/bin/foundation-legal/skill-family-contracts/LICENSE +202 -0
  56. package/adapters/cursor/bin/foundation-legal/skill-family-contracts/NOTICE +10 -0
  57. package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/LICENSE +202 -0
  58. package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/NOTICE +10 -0
  59. package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/THIRD_PARTY_NOTICES +142 -0
  60. package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/LICENSE +202 -0
  61. package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/NOTICE +10 -0
  62. package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/native-NOTICE +2 -0
  63. package/adapters/cursor/bin/foundation-resource-binding.json +1 -0
  64. package/adapters/cursor/bin/kernel-protocol.json +60 -0
  65. package/adapters/cursor/bin/license-texts/Apache-2.0.txt +201 -0
  66. package/adapters/cursor/bin/license-texts/MIT.txt +21 -0
  67. package/adapters/cursor/bin/prebuild-manifest.json +83 -0
  68. package/adapters/cursor/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  69. package/adapters/cursor/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  70. package/adapters/cursor/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  71. package/adapters/cursor/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  72. package/adapters/cursor/bin/registry.json +347 -0
  73. package/adapters/cursor/bin/release-skill-local-finish.mjs +4 -0
  74. package/adapters/cursor/bin/release-skill.bundle.mjs +152352 -0
  75. package/adapters/cursor/bin/release-skill.mjs +54 -0
  76. package/adapters/cursor/bin/rules.json +104 -0
  77. package/adapters/cursor/bin/schemas/consumer-contract-vector.schema.json +149 -0
  78. package/adapters/cursor/data/hosts/claude/host-descriptor.json +45 -0
  79. package/adapters/cursor/data/hosts/codebuddy/host-descriptor.json +26 -0
  80. package/adapters/cursor/data/hosts/codex/host-descriptor.json +45 -0
  81. package/adapters/cursor/data/hosts/cursor/host-descriptor.json +34 -0
  82. package/adapters/cursor/data/hosts/deepseek-harness/host-descriptor.json +23 -0
  83. package/adapters/cursor/data/hosts/kimi-code/host-descriptor.json +36 -0
  84. package/adapters/cursor/data/hosts/qoder/host-descriptor.json +26 -0
  85. package/adapters/cursor/data/hosts/registry.json +14 -0
  86. package/adapters/cursor/data/hosts/workbuddy/host-descriptor.json +34 -0
  87. package/adapters/cursor/data/licensing/registry.json +211 -0
  88. package/adapters/cursor/data/licensing/schema.json +207 -0
  89. package/adapters/cursor/native/safe-write/binding.gyp +41 -0
  90. package/adapters/cursor/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
  91. package/adapters/cursor/native/safe-write/prebuilds.json +24 -0
  92. package/adapters/cursor/native/safe-write/src/safe_write.cc +2032 -0
  93. package/adapters/cursor/schemas/.render-manifest.json +41 -0
  94. package/adapters/cursor/schemas/approval-record.schema.json +115 -0
  95. package/adapters/cursor/schemas/artifact-lock.schema.json +111 -0
  96. package/adapters/cursor/schemas/artifact-plan.schema.json +52 -0
  97. package/adapters/cursor/schemas/artifact-policy.schema.json +76 -0
  98. package/adapters/cursor/schemas/evidence-event-v2.schema.json +164 -0
  99. package/adapters/cursor/schemas/evidence-event.schema.json +89 -0
  100. package/adapters/cursor/schemas/postpublish-approval-record.schema.json +47 -0
  101. package/adapters/cursor/schemas/release-plan.schema.json +2226 -0
  102. package/adapters/cursor/schemas/release-project.schema.json +1815 -0
  103. package/adapters/cursor/schemas/release-run.schema.json +777 -0
  104. package/adapters/cursor/skills/release-assess/SKILL.md +61 -0
  105. package/adapters/cursor/skills/release-config/SKILL.md +151 -0
  106. package/adapters/cursor/skills/release-docs/SKILL.md +120 -0
  107. package/adapters/cursor/skills/release-finish/SKILL.md +181 -0
  108. package/adapters/cursor/skills/release-help/SKILL.md +98 -0
  109. package/adapters/cursor/skills/release-marketplace/SKILL.md +157 -0
  110. package/adapters/cursor/skills/release-prepare/SKILL.md +136 -0
  111. package/adapters/cursor/skills/release-publish/SKILL.md +92 -0
  112. package/adapters/cursor/skills/release-reconcile/SKILL.md +81 -0
  113. package/adapters/cursor/skills/release-setup/SKILL.md +132 -0
  114. package/adapters/cursor/skills/release-verify/SKILL.md +110 -0
  115. package/adapters/cursor/src/schemas/adapter-build-manifest.schema.json +41 -0
  116. package/adapters/cursor/src/schemas/adapter-peer-verification-request.schema.json +54 -0
  117. package/adapters/cursor/src/schemas/adapter-peer-verification-result.schema.json +54 -0
  118. package/adapters/cursor/src/schemas/adapter-source.schema.json +47 -0
  119. package/adapters/cursor/src/schemas/audit-baseline-pin.schema.json +163 -0
  120. package/adapters/cursor/src/schemas/declared-read-surface-result.schema.json +61 -0
  121. package/adapters/cursor/src/schemas/engineering-baseline.schema.json +77 -0
  122. package/adapters/cursor/src/schemas/executable-identity-observation.schema.json +162 -0
  123. package/adapters/cursor/src/schemas/filesystem-root-binding.schema.json +14 -0
  124. package/adapters/cursor/src/schemas/filesystem-tree-observation.schema.json +71 -0
  125. package/adapters/cursor/src/schemas/fixed-set-publication-manifest.schema.json +108 -0
  126. package/adapters/cursor/src/schemas/fixed-set-publication-receipt.schema.json +148 -0
  127. package/adapters/cursor/src/schemas/host-capability-fact.schema.json +31 -0
  128. package/adapters/cursor/src/schemas/host-descriptor.schema.json +144 -0
  129. package/adapters/cursor/src/schemas/host-operation-plan.schema.json +57 -0
  130. package/adapters/cursor/src/schemas/host-operation-receipt.schema.json +81 -0
  131. package/adapters/cursor/src/schemas/host-probe-result.schema.json +30 -0
  132. package/adapters/cursor/src/schemas/host-registry.schema.json +18 -0
  133. package/adapters/cursor/src/schemas/host-verification-request.schema.json +67 -0
  134. package/adapters/cursor/src/schemas/host-verification-result.schema.json +149 -0
  135. package/adapters/cursor/src/schemas/managed-file-lock.schema.json +77 -0
  136. package/adapters/cursor/src/schemas/migration-manifest.schema.json +412 -0
  137. package/adapters/cursor/src/schemas/observation-scope.schema.json +91 -0
  138. package/adapters/cursor/src/schemas/operation-request.schema.json +58 -0
  139. package/adapters/cursor/src/schemas/operation-result.schema.json +130 -0
  140. package/adapters/cursor/src/schemas/platform-difference-registry.schema.json +110 -0
  141. package/adapters/cursor/src/schemas/plugin-verification-request.schema.json +499 -0
  142. package/adapters/cursor/src/schemas/plugin-verification-result.schema.json +1217 -0
  143. package/adapters/cursor/src/schemas/profile-adoption-declaration.schema.json +111 -0
  144. package/adapters/cursor/src/schemas/profile-descriptor.schema.json +99 -0
  145. package/adapters/cursor/src/schemas/project-manifest.schema.json +67 -0
  146. package/adapters/cursor/src/schemas/project-profile.schema.json +25 -0
  147. package/adapters/cursor/src/schemas/public-boundary-declaration.schema.json +73 -0
  148. package/adapters/cursor/src/schemas/report-binding.schema.json +42 -0
  149. package/adapters/cursor/src/schemas/report-model.schema.json +308 -0
  150. package/adapters/cursor/src/schemas/skill-family-directory-verification-request.schema.json +100 -0
  151. package/adapters/cursor/src/schemas/skill-family-directory-verification-result.schema.json +193 -0
  152. package/adapters/cursor/src/schemas/source-authority-receipt.schema.json +31 -0
  153. package/adapters/cursor/src/schemas/state-event-envelope.schema.json +38 -0
  154. package/adapters/cursor/src/schemas/state-snapshot-metadata.schema.json +25 -0
  155. package/adapters/cursor/src/schemas/structured-scan-policy.schema.json +97 -0
  156. package/adapters/cursor/src/schemas/surface-scan-policy.schema.json +42 -0
  157. package/adapters/cursor/src/schemas/timeout-policy.schema.json +24 -0
  158. package/adapters/cursor/src/schemas/token-estimate-record.schema.json +75 -0
  159. package/adapters/cursor/src/schemas/token-estimate-result.schema.json +43 -0
  160. package/adapters/cursor/src/schemas/watchdog-termination-envelope.schema.json +156 -0
  161. package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
  162. package/adapters/kimi/bin/consumer-contract-vectors.json +7 -7
  163. package/adapters/kimi/bin/error-codes.json +1 -1
  164. package/adapters/kimi/bin/foundation-resource-binding.json +1 -1
  165. package/adapters/kimi/bin/prebuild-manifest.json +8 -4
  166. package/adapters/kimi/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  167. package/adapters/kimi/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  168. package/adapters/kimi/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  169. package/adapters/kimi/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  170. package/adapters/kimi/bin/registry.json +1 -1
  171. package/adapters/kimi/bin/release-skill.bundle.mjs +4425 -1519
  172. package/adapters/kimi/bin/rules.json +1 -1
  173. package/adapters/kimi/data/hosts/cursor/host-descriptor.json +34 -0
  174. package/adapters/kimi/data/hosts/registry.json +1 -0
  175. package/adapters/kimi/schemas/release-plan.schema.json +255 -25
  176. package/adapters/kimi/schemas/release-project.schema.json +228 -26
  177. package/adapters/kimi/skills/release-finish/SKILL.md +46 -7
  178. package/adapters/kimi/skills/release-help/SKILL.md +49 -105
  179. package/adapters/kimi/skills/release-verify/SKILL.md +2 -2
  180. package/adapters/kimi/src/schemas/host-descriptor.schema.json +9 -2
  181. package/adapters/qoder/.qoder-plugin/plugin.json +1 -1
  182. package/adapters/qoder/bin/consumer-contract-vectors.json +7 -7
  183. package/adapters/qoder/bin/error-codes.json +1 -1
  184. package/adapters/qoder/bin/foundation-resource-binding.json +1 -1
  185. package/adapters/qoder/bin/prebuild-manifest.json +8 -4
  186. package/adapters/qoder/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  187. package/adapters/qoder/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  188. package/adapters/qoder/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  189. package/adapters/qoder/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  190. package/adapters/qoder/bin/registry.json +1 -1
  191. package/adapters/qoder/bin/release-skill.bundle.mjs +4425 -1519
  192. package/adapters/qoder/bin/rules.json +1 -1
  193. package/adapters/qoder/data/hosts/cursor/host-descriptor.json +34 -0
  194. package/adapters/qoder/data/hosts/registry.json +1 -0
  195. package/adapters/qoder/schemas/release-plan.schema.json +255 -25
  196. package/adapters/qoder/schemas/release-project.schema.json +228 -26
  197. package/adapters/qoder/skills/release-finish/SKILL.md +46 -7
  198. package/adapters/qoder/skills/release-help/SKILL.md +49 -105
  199. package/adapters/qoder/skills/release-verify/SKILL.md +2 -2
  200. package/adapters/qoder/src/schemas/host-descriptor.schema.json +9 -2
  201. package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
  202. package/adapters/workbuddy/bin/consumer-contract-vectors.json +7 -7
  203. package/adapters/workbuddy/bin/error-codes.json +1 -1
  204. package/adapters/workbuddy/bin/foundation-resource-binding.json +1 -1
  205. package/adapters/workbuddy/bin/prebuild-manifest.json +8 -4
  206. package/adapters/workbuddy/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  207. package/adapters/workbuddy/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  208. package/adapters/workbuddy/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  209. package/adapters/workbuddy/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  210. package/adapters/workbuddy/bin/registry.json +1 -1
  211. package/adapters/workbuddy/bin/release-skill.bundle.mjs +4425 -1519
  212. package/adapters/workbuddy/bin/rules.json +1 -1
  213. package/adapters/workbuddy/data/hosts/cursor/host-descriptor.json +34 -0
  214. package/adapters/workbuddy/data/hosts/registry.json +1 -0
  215. package/adapters/workbuddy/schemas/release-plan.schema.json +255 -25
  216. package/adapters/workbuddy/schemas/release-project.schema.json +228 -26
  217. package/adapters/workbuddy/skills/release-finish/SKILL.md +46 -7
  218. package/adapters/workbuddy/skills/release-help/SKILL.md +47 -103
  219. package/adapters/workbuddy/skills/release-verify/SKILL.md +2 -2
  220. package/adapters/workbuddy/src/schemas/host-descriptor.schema.json +9 -2
  221. package/bin/consumer-contract-vectors.json +7 -7
  222. package/bin/error-codes.json +1 -1
  223. package/bin/foundation-resource-binding.json +1 -1
  224. package/bin/prebuild-manifest.json +8 -4
  225. package/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  226. package/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  227. package/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  228. package/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  229. package/bin/registry.json +1 -1
  230. package/bin/release-skill-cli.mjs +115 -15
  231. package/bin/release-skill.bundle.mjs +4425 -1519
  232. package/bin/rules.json +1 -1
  233. package/data/hosts/cursor/host-descriptor.json +34 -0
  234. package/data/hosts/registry.json +1 -0
  235. package/package.json +7 -5
  236. package/platform-manifest.json +75 -9
  237. package/references/02-project-config.md +4 -0
  238. package/schemas/release-plan.schema.json +255 -25
  239. package/schemas/release-project.schema.json +228 -26
  240. package/scripts/sync-public-files.mjs +3 -22
  241. package/skills/release-finish/SKILL.md +46 -7
  242. package/skills/release-help/SKILL.md +47 -103
  243. package/skills/release-verify/SKILL.md +2 -2
  244. package/skills-src/release-finish/SKILL.md +46 -7
  245. package/skills-src/release-help/SKILL.md +47 -103
  246. package/skills-src/release-verify/SKILL.md +2 -2
  247. package/src/adapters/contract.mjs +1 -0
  248. package/src/adapters/plugin-marketplace.mjs +201 -9
  249. package/src/commands/post-release-finish.mjs +448 -0
  250. package/src/commands/post-release-local.mjs +312 -36
  251. package/src/commands/prepare.mjs +74 -9
  252. package/src/commands/publish.mjs +4 -1
  253. package/src/commands/ship.mjs +3 -0
  254. package/src/commands/verify.mjs +73 -0
  255. package/src/core/checkpoints.mjs +5 -2
  256. package/src/core/config.mjs +1 -1
  257. package/src/core/foundation-host-verification.mjs +168 -0
  258. package/src/core/plan.mjs +19 -1
  259. package/src/core/postpublish.mjs +9 -1
  260. package/src/core/run-retention.mjs +1 -1
  261. package/src/core/surface-host-bindings.mjs +1 -0
  262. package/src/core/verification-gates.mjs +1 -1
  263. package/src/platforms/registry.mjs +225 -16
  264. package/src/producers/build-adapters.mjs +21 -26
  265. package/src/producers/foundation-resource-projection.mjs +3 -3
  266. package/src/schemas/host-descriptor.schema.json +9 -2
@@ -7,140 +7,84 @@ description: "Discoverable entry point for release-skill: dependency and environ
7
7
 
8
8
  ## 触发
9
9
 
10
- 用户询问如何使用 release-skill、发布流程是什么、或请求只读诊断和 dry-run 安全检查。
10
+ 询问 release-skill 的用法、发布流程、依赖、环境、只读诊断或 dry-run 时使用。本入口只做能力说明和分诊;专用工作流交给对应 Skill。
11
11
 
12
- ## 职责
12
+ ## 只读边界
13
13
 
14
- - 依赖和环境检查:Node.js >= 22、Git 决定本地准备就绪度;npm/gh 另行决定生产依赖就绪度
15
- - 能力说明:缺少配置时走 `help → setup → assess`;已有配置的安全默认路径是 `help → assess → prepare --offline`;日常生产发布优先使用可恢复的 `ship`,兼容的分阶段闭环仍是 `prepare --online --production → approve → publish → verify`。冻结计划批准是正常发布级流程的唯一批准门;声明 `requiresApproval: true` 的 postPublish hook 仍须等待独立 checkpoint 批准。若计划声明 `postVerify` hook,可用 `postverify` 直接执行独立收尾 run,也可由 `ship` 编排该阶段;本机收尾必须等待完成的 postVerify run,不能把仅有 `VERIFIED` 的 verify run 当作本机收尾授权。核心发布流程跨平台,WorkBuddy 本机收尾仅支持 macOS
16
- - 最小示例:展示从 release-help 到 release-assess 的最短路径
17
- - 只读诊断:运行 dry-run 检查,不修改任何文件
18
- - 故障引导:根据错误码指向对应的修复 Skill
14
+ `help` 不联网、不检查认证、不改文件、不生成计划,也不执行 Git、宿主安装或外部发布写入。它只根据当前环境报告准备度并给出下一步。优先调用插件自带入口;不可用时才回退到源码入口。
19
15
 
20
- ## 0.9.17 候选边界
16
+ 核心流程跨平台;WorkBuddy 本机收尾仅支持 macOS。Node.js >= 22 和 Git 决定本地准备度。npm、gh 只影响生产发布依赖;pnpm 缺失只进入建议。
21
17
 
22
- 当前源码候选允许多发布单元项目在计划冻结前显式选择本轮范围。`prepare` 和新建的 `ship` 状态支持重复传入 `--unit <id>`;未传时继续选择全部配置单元。成功选择会列出选中与延期单元。延期单元不进入本轮计划,也不获得发布状态。
18
+ 本地阶段通过须同时满足 `status: "READY"` 和 exit code 0。读取 `readiness.localPreparation.status` 与 `missingRequired`。生产另读 `readiness.productionPublish`:缺 npm/gh 为 `NOT_READY`,已安装也只是 `AUTH_CHECK_REQUIRED`,不代表认证、权限或发布授权已经成立。
23
19
 
24
- 选择只影响按单元绑定的检查与动作。完整配置、生成物新鲜度和顶层 Hook 仍覆盖整个项目。`publicSourceAuthorityReceipt` 涉及的 coordinator 和 subjects 必须作为完整闭包共同选择,系统不会自动扩选。计划冻结后,`plan.units` 是唯一范围权威;publish、reconcile、verify 和 distribute 不接受 `--unit`。
20
+ ## 0.9.19 候选边界
25
21
 
26
- 0.9.3 引入的四项工作流保护、Hook cache v2 和稳定隔离安装树记录在后续版本继续保留。当前 0.9.17 候选精确消费 Foundation 0.17.0 的公开包根 API。Hook cache 只复用绝对路径或经真实 cwd 校验的 cwd-relative executable identity;裸 PATH、PATHEXT、Windows 和观察不可用时,Hook 仍冷执行,缓存复用失败关闭且不写入 v2 cache。缓存没有 TTL。
22
+ 当前 0.9.19 候选精确消费 Foundation 0.21.0 的公开包根 API。0.9.19 仍是源码候选,不能从本说明推断已批准、发布或验证。
27
23
 
28
- 稳定隔离安装树记录只在宿主命令退出、目录已隔离且扫描期间没有并发写入时执行;宿主附加链接只记录、不跟随,声明载荷中的 symlink 失败关闭,legacy 全树语义保持不变。0.9.17 仍是源码候选,不能从本说明推断已批准、发布或验证。
24
+ 冻结前,`prepare` 或新建 `ship` 状态可重复传入 `--unit <id>`;不传则选择全部单元。延期单元不进入计划,也不获得发布状态。完整配置、生成物新鲜度和顶层 Hook 仍覆盖全项目;`publicSourceAuthorityReceipt` 的 coordinator 与 subjects 必须共同选择。冻结后以 `plan.units` 为唯一范围,publish、reconcile、verify、distribute 不再接受 `--unit`。
29
25
 
30
- **阶段通过规则**: `status` 与 `readiness.localPreparation.status` 只判断本地 help/assess/prepare;其充要条件是 `READY` 且 exit code 为 0。`missingRequired` 列出缺失的 Node/Git。生产发布必须另外读取 `readiness.productionPublish`:缺少 npm/gh 时为 `NOT_READY`,依赖存在时仍是 `AUTH_CHECK_REQUIRED`,因为 help 不访问网络、不验证认证。Agent 无权把本地就绪解释为生产就绪。
26
+ 每个单元都要声明 `previousPublicBaseline`:确认没有前序版本才用 `none`,否则使用带 repo/ref/commit 的 `bound`。`none` 不绕过 publish 的唯一性预检。
31
27
 
32
- **边界**: help 不修改文件系统、不执行外部写操作、不生成发布计划。优先探测 PATH 上的全局安装命令 `release-skill`,不可用时回退到源码路径。每个 unit 必须配置 `previousPublicBaseline`:首次发布且确认无前序版本用 none,已有版本用 bound + repo/ref/commit;none 不是绕过 publish 唯一性预检的开关。v0.1.1 已完成 GitHub/npm 真实生产发布、冻结 Git ref 的 Claude/Codex 消费者安装、精确 npm 安装 smoke 与最终 VERIFIED;生产等价本地协议套件继续覆盖 fake gh/npm/Claude/Codex 和本地 bare Git。测试未做 OS 级禁网,且一次成功发布不能证明其他项目的认证、权限、限流或最终一致性行为;每个项目的首次生产发布仍应作为受监控 canary。
28
+ Hook cache v2 只复用绝对路径,或已用真实 cwd 核验的 cwd-relative executable identity;裸 PATH、PATHEXT、Windows 或观察不可用时冷执行,并失败关闭。稳定隔离安装树只在宿主命令退出、目录隔离且扫描期间无并发写入时记录;附加链接只记录、不跟随,声明载荷中的 symlink 失败关闭。
33
29
 
34
- ## 正向执行路径
30
+ ## 最短路径
35
31
 
36
- 1. 使用插件根相对路径运行 CLI:`node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" help --json`
37
- 2. 检查 `readiness.localPreparation`;需要生产发布时再检查 `readiness.productionPublish`
38
- 3. 若环境就绪且缺少 `.release-skill/project.yaml`,先路由 `release-setup`;配置已存在才运行 `release-assess`
39
- 4. 默认在审阅本地计划和快照后停止;只有用户明确要求且完成摘要审批时才进入 `release-publish`。已持有合法批准的 production plan 时,publish 自行完成权威校验,不把 route 当作授权门
40
-
41
- ## 确定性脚本调用
32
+ 1. 从插件根运行 `help --json`,检查本地准备度;生产发布再检查生产准备度。
33
+ 2. 缺少 `.release-skill/project.yaml` 时进入 `release-setup`;已有配置时进入 `release-assess`。
34
+ 3. 本地评估使用 `release-assess` 和 `prepare --offline`。默认在审阅计划与快照后停止。
35
+ 4. 生产发布优先使用可恢复的 `ship`;也可走 `prepare --online --production → approve → publish → verify`。
42
36
 
43
37
  ```bash
44
- # 从插件根运行(自包含 bundle,无需 node_modules)
45
38
  node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" help --json
46
39
  node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" setup --root <path> --json
47
40
  node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" assess --root <path> --offline --json
48
- # 日常发布快速路径:发布前确认可读计划摘要,状态文件可恢复。
49
- # 受限 postPublish hook 的 checkpoint 批准与计划批准分开。
50
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" ship --root <path> --target-version <version> --json
51
- # 多发布单元项目显式选择本轮范围;未传 --unit 时仍为全部单元
52
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" ship --root <path> \
53
- --target-version <version> --unit <unit-a> --unit <unit-b> --json
54
- # 对已经 VERIFIED 的计划独立执行 postVerify hook;不读取或写入 ship state
55
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" postverify --root <path> \
56
- --plan <plan-path> --approval <approval-path> --run <verified-run-path> \
57
- --hook-approval <immutable-hook-approval-path> --json
58
- # 开发阶段执行声明 hooks 并生成 prepare 可复用的内容绑定收据
59
- # 配置时刻即授权(FM-16 处置 A):hook 是任意本地进程、无隔离、触发前无确认点,
60
- # 命令调用本身即授权执行配置中的 hooks
61
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" hooks validate --root <path> --json
62
- # 仅旧冻结计划兼容:记录历史 Kimi/CodeBuddy 人工证明
63
- # (本地自声明收据,证明力弱:--actor 仅非空字符串校验、无外部签名核验;新计划不适用)
64
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" attest --root <path> \
65
- --platform <kimi|codebuddy> --plugin <id> --result <passed|failed> --actor <person> --json
66
- # 发布文档刷新:默认只读演练
67
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" docs refresh --unit <id> --json
68
- # 摘要确认后的本地写入(三项绑定缺一不可)
69
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" docs refresh --unit <id> \
70
- --write --confirm-refresh <refreshDigest> --ack-local-document-write --json
41
+ node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" route --root <path> --target-version <version> --json
71
42
  ```
72
43
 
73
- ## 发布文档刷新(docs refresh)
44
+ `route` 只做分类和推荐,不是授权门。分类为 docs、config、marketplace、code 或 mixed;存在 `PARTIAL` 时先进入 reconcile,不能确定时按更安全的完整路径处理。
74
45
 
75
- 发布单元配置 `releaseDocuments` 后,一份结构化双语说明源可确定性刷新 README 受管区域、唯一版本标记的机器值和 CHANGELOG 当前版本受管条目。核心 CLI 不联网、不调用大模型、不自动翻译;只改写声明过的受管区域、版本标记机器值和当前受管条目,区域外字节逐字保留。`prepare` 只检查新鲜度,不写工作树。
46
+ ## 生产发布与恢复边界
76
47
 
77
- - **配置**:`releaseDocuments.notesSource`(说明源路径,只允许 `{version}` 占位符与 `.yaml`/`.yml`/`.json` 后缀)、`locales`(如 `[en, zh-CN]`)、`changelogs`(path + locale)、`readmes`(path + locale + `regions` 受管区域 id + `versionMarkers` 版本标记模式)。版本标记模式必须与 README 现有唯一标记精确匹配,`{version}` 代表机器版本值,刷新只替换该值;零次或多次匹配失败关闭。
78
- - **说明源**:`version` 必须与单元版本精确一致,`date` 为 `YYYY-MM-DD`,每个配置语种恰好出现一次且 `summary`、变更项非空,`security`/`breaking`/`added`/`changed`/`deprecated`/`removed`/`fixed` 至少一个类别含条目。YAML alias、重复键、未知字段和语种回退都失败关闭。
79
- - **只读演练**:`docs refresh --unit <id> --json` 输出逐文件相对路径、locale、新旧摘要、`version`、`locales`、`inputDigest`、`refreshDigest` 和 `nextCommand.argv`;候选无变化时 `status: "clean"`。
80
- - **确认写入**:必须同时提供 `--write`、精确 `--confirm-refresh <refreshDigest>` 和 `--ack-local-document-write`,全部目标作为一个事务提交;成功后立即复演必须为 `clean`。
48
+ 只有用户明确要求生产发布,且冻结计划摘要已经人工审阅,才进入 `release-publish`。冻结计划批准是发布级唯一批准门;publish 会自行核对 plan、approval、digest、目标版本、远端冲突和允许动作。route、help、`READY`、历史成功或 `VERIFIED` 都不能替代批准。
81
49
 
82
- **授权边界**:本地发布文档写入授权只覆盖声明的本地文档目标,不是 Git 提交、push、publish 或安装的授权。hook/gate 由对应命令调用直接授权——在 project.yaml 配置 hook 即完成授权(配置时刻即授权契约,FM-16 处置 A):hook 是任意本地进程、无文件系统/网络隔离、触发前无确认点,配置者须对其内容负责;恢复触发前强制确认门为后续加固项。写入后必须审阅、提交,再重新 prepare。
50
+ `requiresApproval: true` 的 postPublish hook 还需要独立 checkpoint 批准。项目配置中的其他 hook 是任意本地进程,没有文件系统或网络隔离;执行相应命令即授权运行,help 不替用户作出该授权。
83
51
 
84
- ## 故障路由
52
+ 外部写入按 checkpoint 停止;部分成功进入 `PARTIAL`。不得自动删除远端标签、覆盖 Release、unpublish npm 或从头重跑。使用 `release-reconcile` 查询远端实际状态,只重试安全且未完成的动作;冲突交回人工决定。
85
53
 
86
- | 场景 | 处理 |
87
- |---|---|
88
- | Node.js 版本不足 | `status: "NOT_READY"`, `missingRequired` 含 `"node>=22"`;提示升级至 >= 22 |
89
- | Git 未安装 | `status: "NOT_READY"`, `missingRequired` 含 `"git"`;提示安装 Git |
90
- | pnpm 未安装 | 不影响本地准备;仅出现在 recommendations 中 |
91
- | npm/gh 未安装 | 本地准备仍可就绪,但 `readiness.productionPublish.status` 为 `NOT_READY` |
92
- | npm/gh 已安装 | 生产状态仍为 `AUTH_CHECK_REQUIRED`;发布前验证 `gh auth`、Git HTTPS credential 和 npm auth |
93
- | CLI 入口不存在 | 确认 `${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs` 存在;不存在时重新安装插件 |
94
- | 项目配置不存在 | 路由 `release-setup`,默认只读;不得直接生成或覆盖 README/配置 |
95
- | assess 失败 | 运行 `node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" assess --offline --json` 获取详情 |
96
- | 请求生产发布 | 已有公开版本先调用 `release-prepare --online --production` 观察 bound 基线;人工审阅后直接调用 `release-publish`,由 publish 自行完成计划、approval、digest、远端冲突和 `PARTIAL` 校验 |
97
- | RELEASE_DOCS_INVALID | 配置或说明源语义非法(重复键、alias、未知字段、版本漂移等);修正配置或说明源后重新演练 |
98
- | RELEASE_DOCS_TRANSLATION_MISSING | 配置语种缺失或多余;补齐说明源语种,与 `releaseDocuments.locales` 完全一致,不得回退 |
54
+ ## VERIFIED 后收尾
99
55
 
100
- ## Routing Suggestions (§4.3 Quickstart Routing)
56
+ 声明的 `postVerify` hook 可由 `postverify` 独立执行或由 `ship` 编排。计划声明该 hook 时,本机收尾必须等待完成的 postVerify run;没有声明时使用同一计划的 `VERIFIED` verify run。
101
57
 
102
- 对于不清楚如何开始的用户,推荐使用 `release-skill route` 命令进行自动化工作流选择:
58
+ 随后进入 `release-finish`,通过公共入口编排宿主更新、加载确认、已配置 setup 和源码分支检查:
103
59
 
104
60
  ```bash
105
- # 快速分类变更并推荐工作流;已知目标版本时显式传入,未知时省略
106
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" route --root <path> --json
107
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" route --root <path> \
108
- --target-version <version> --json
109
-
110
- # JSON 输出包含 classification 和 recommendation 字段
111
- {
112
- "classification": {
113
- "code": [],
114
- "docs": ["README.md"],
115
- "config": [],
116
- "marketplace": [],
117
- "mixed": false
118
- },
119
- "recommendation": {
120
- "workflowKind": "docs-only",
121
- "reason": "Pure documentation changes detected...",
122
- "firstCommand": "release-docs"
123
- }
124
- }
61
+ node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill-local-finish.mjs" \
62
+ --root <project-root> --plan <plan-path> --run <verify-or-postverify-run-path> \
63
+ --finish --json
125
64
  ```
126
65
 
127
- **可用工作流**:
128
- - `docs-only`: 纯文档变更(跳过代码类门限)
129
- - `config-only`: 纯配置变更(schema 验证 + 决策分支)
130
- - `marketplace-only`: 纯 marketplace 索引变更(条目更新 + snapshot 同步)
131
- - `full-happy-end`: 混合变更或无法确定(fail-closed 到最安全路径)
132
- - `reconcile`: 存在 PARTIAL 运行时需先恢复
133
- - `help`: 无变更且未指定目标版本
66
+ 首次结果可能请求用户选择分支和本机宿主,或返回需要智能体实际加载并调用 setup 的请求。将绑定反馈写入文件后,以同一入口增加 `--finish-feedback <feedback-path>` 再次汇总。完整参数、反馈合同、宿主限制和 macOS Cursor 安装见 `release-finish`。仅有 `VERIFIED` 不构成本机写入、插件更新、分支合并或 setup 写入授权;收尾结果也不改写发布状态。
67
+
68
+ ## 专用工作流路由
69
+
70
+ - 消费项目的 Cursor 场景配置、受控可执行目录、用户状态目录、结果不确定时的现场保留与复验,见 `release-verify`。
71
+ - README、CHANGELOG 和双语说明的 `docs refresh` 演练、摘要确认与受管写入,见 `release-docs`。
72
+ - VERIFIED 后的分支决定、宿主更新、加载反馈、setup 和源码检查,见 `release-finish`。
73
+ - 纯配置变更,见 `release-config`。
74
+ - 纯 marketplace 索引与快照变更,见 `release-marketplace`。
75
+
76
+ 这些入口保留各自的参数、确认和失败关闭规则;help 不复制或放宽它们。
134
77
 
135
- 参考文档:
136
- - [`release-docs`](../release-docs/SKILL.md) - 文档工作流详解
137
- - [`release-config`](../release-config/SKILL.md) - 配置工作流详解
138
- - [`release-marketplace`](../release-marketplace/SKILL.md) - Marketplace 工作流详解
78
+ ## 故障分诊
139
79
 
140
- | RELEASE_DOCS_CONFLICT | 目标含非受管同版本条目、受管标记损坏或人工冲突;人工修复目标并保留人工修改后重新演练 |
141
- | RELEASE_DOCS_REFRESH_STALE | 确认绑定后候选已变化;重新演练取得新 `refreshDigest` 再确认写入 |
142
- | RELEASE_DOCS_STALE | prepare 检测到文档未刷新;按 `docs refresh` → 审阅 → 提交 → 重新 prepare 恢复 |
80
+ - Node.js 或 Git 缺失:读取 `missingRequired`,补齐依赖后重跑 help。
81
+ - npm/gh 缺失或未认证:本地准备仍可继续;生产发布前另行完成 gh、Git HTTPS credential 与 npm auth 检查。
82
+ - CLI 入口缺失:确认 `${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs` 存在;缺失时重新安装插件。
83
+ - 项目配置缺失:进入 `release-setup` 的只读发现,不直接生成或覆盖 README/配置。
84
+ - assess 失败:运行 `release-assess` 的离线诊断并按错误码处理。
85
+ - `PARTIAL` 或远端冲突:进入 `release-reconcile`,保留已经成功的 checkpoint。
86
+ - 文档、Cursor、宿主更新或本机收尾失败:转到上节对应专用 Skill,不在 help 中猜测恢复步骤。
143
87
 
144
88
  ## 后续引导
145
89
 
146
- 本地准备就绪后下一步运行 `release-assess`:`node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" assess`。生产发布还要求 npm、gh 可用,并在发布前另行完成认证检查。
90
+ 本地就绪后运行 `release-assess`;需要生产发布时,再确认 npm、gh、认证、冻结计划和有效批准。
@@ -50,7 +50,7 @@ ship state;hook approval 缺失、错误或过期时,在 hook 执行前失
50
50
  2. 使用插件根相对路径运行 CLI;命令调用本身即授权执行已配置的 verification gate 和 smoke process
51
51
  3. 检查 exit code 和结构化状态:`VERIFIED`(全部通过)/ 失败(具体错误)
52
52
  4. 只有 `VERIFIED` 才是发布 happy end
53
- 5. 达到 `VERIFIED` 后先检查计划是否声明 `postVerify` hook:直接收尾使用独立的 `postverify --plan --approval --run --hook-approval`,由该命令产生 `DISTRIBUTED` postVerify run;若仍由持久化 ship state 承担编排,则使用 `ship --hook-approval` 完成同一阶段,再把最终 run 路径交给 `release-finish`。没有 postVerify hook 时,把当前 verify run 路径交给 `release-finish`。随后按清单主动询问分支合并和本机宿主插件更新;发布策略已包含分支动作时略过合并询问
53
+ 5. 达到 `VERIFIED` 后先检查计划是否声明 `postVerify` hook:直接收尾使用独立的 `postverify --plan --approval --run --hook-approval`,由该命令产生 `DISTRIBUTED` postVerify run;若仍由持久化 ship state 承担编排,则使用 `ship --hook-approval` 完成同一阶段,再把最终 run 路径交给 `release-finish`。没有 postVerify hook 时,把当前 verify run 路径交给 `release-finish`。随后执行返回的 `post-release --finish` 命令,按 `nextActions` 补齐分支决定、宿主加载与真实 setup 结果;发布策略已包含分支动作时略过合并询问
54
54
 
55
55
  ## 确定性脚本调用
56
56
 
@@ -77,7 +77,7 @@ node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" postverify --root <path> \
77
77
 
78
78
  ## 发布后收尾
79
79
 
80
- `VERIFIED` 不代表要自动修改开发分支或本机宿主。进入 `release-finish` 后,只有用户明确同意,才执行对应的本地动作。本机插件更新失败不会改变发布终态。
80
+ `VERIFIED` 不代表要自动修改开发分支或本机宿主。进入 `release-finish` 后,只有用户明确同意,才执行对应的本地动作。`post-release --finish` 退出 0 需要所有适用步骤完成或明确跳过;单纯的宿主 `UPDATED` 不代表新入口已加载,也不代表 setup 已执行。本机插件更新失败不会改变发布终态。
81
81
  核心 prepare、publish、verify 流程跨平台;WorkBuddy 的本机收尾探测和更新仅支持 macOS。
82
82
 
83
83
  ## 烟雾测试
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: release-finish
3
- description: 发布达到 VERIFIED 后处理发布收尾:确认 postVerify 提案送达边界,按发布分支策略决定是否询问合并,并在用户确认后更新本机 Claude、Codex、Kimi、CodeBuddy/WorkBuddy、Qoder 插件
3
+ description: 发布达到 VERIFIED 后编排完整收尾:处理分支决定和本机宿主更新,确认实际加载,调用已配置的 setup,检查源码分支并汇总剩余工作
4
4
  ---
5
5
 
6
6
  # release-finish
@@ -15,7 +15,7 @@ description: 发布达到 VERIFIED 后处理发布收尾:确认 postVerify 提
15
15
 
16
16
  默认只读取冻结计划和 verify 或 postVerify run。没有用户明确同意,不合并分支,不更新插件。用户显式选择 Kimi 更新后,只有标准初始目录信任界面和插件信任界面中的冻结身份都通过核对,才确认当前项目并安装。用户显式选择 Qoder 且冻结计划声明该宿主后,才执行计划绑定的 Hub 更新。
17
17
 
18
- ## 先生成收尾清单
18
+ ## 进入完整收尾
19
19
 
20
20
  从插件根执行:
21
21
 
@@ -24,18 +24,22 @@ node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill-local-finish.mjs" \
24
24
  --root <project-root> \
25
25
  --plan <plan-path> \
26
26
  --run <verify-or-postverify-run-path> \
27
+ --finish \
27
28
  --json
28
29
  ```
29
30
 
30
31
  脚本只接受与冻结计划一致的显式运行证据:计划未声明 `postVerify` hook 时,传入同计划的 `VERIFIED` verify run;计划声明了 `postVerify` hook 时,必须传入同计划、沿同一 `VERIFIED` verify run 继承谱系且所有 hook checkpoint 均为 `succeeded` 或 `NO_CHANGE` 的 `DISTRIBUTED` postVerify run。postVerify 尚未完成时,不能直接运行本机收尾;应先完成所需 checkpoint approval,再通过 `ship` 完成 postVerify,并使用结果中的 postVerify run 路径。
31
32
 
33
+ `--finish` 每次都返回 `merge`、`host-update`、`host-load`、`setup` 和 `source-branch` 五个步骤。`COMPLETE` 表示本次收尾没有待办,`PENDING` 以退出码 2 要求当前智能体续接,`FAILED` 以退出码 1 保留确定失败。脚本观察标为 `script-observed`;宿主加载与 setup 结果标为 `agent-reported`。两种来源都不改写 `VERIFIED`。
34
+
32
35
  ## 主动询问
33
36
 
34
- 读取返回的 `merge` 和 `localHostUpdate`:
37
+ 读取 `finish.steps` 和 `finish.nextActions`:
35
38
 
36
39
  1. `merge.promptRequired=false` 时,发布工作流已经推进或初始化目标分支,不再询问合并。
37
40
  2. `merge.promptRequired=true` 时,向用户说明尚未覆盖的发布分支,并询问是否需要合并。用户同意后,先只读核对源分支、目标分支、工作区状态和项目既有合并方式,再用明确的分支名执行;本脚本不猜分支,也不自动推送。
38
- 3. `localHostUpdate.promptRequired=true` 时,列出计划覆盖的宿主,询问是否更新本机插件。Hub-backed 目标必须显示其声明的 Hub、插件和宿主。Qoder 是其中唯一可执行的 Hub-backed 目标;Claude/Codex 使用现有 marketplace 管理入口,Kimi 使用冻结 GitHub Release 和现有人工确认路径,CodeBuddy/WorkBuddy 明确人工处理且不能固定 Hub ref。后续“用户同意更新”段适用于 `available=true` 的 executable externalActions 目标和 Qoder Hub 目标,其余 Hub-backed 目标仍为人工入口。两个问题可以一次问完。
41
+ 3. `choose-local-hosts` 出现时,列出计划覆盖的宿主,询问是否更新本机插件。Hub-backed 目标必须显示其声明的 Hub、插件和宿主。Qoder 是其中唯一可执行的 Hub-backed 目标;Claude/Codex 使用现有 marketplace 管理入口,Kimi 使用冻结 GitHub Release 和现有人工确认路径,CodeBuddy/WorkBuddy 明确人工处理且不能固定 Hub ref。后续“用户同意更新”段适用于 `available=true` 的 executable externalActions 目标和 Qoder Hub 目标,其余 Hub-backed 目标仍为人工入口。分支决定和宿主选择可以一次问完。
42
+ 4. 用户明确不处理本机宿主时,向同一命令加入 `--skip-local-hosts`。该选择会显示地跳过宿主更新、加载和 setup,不得与 `--hosts` 或 `--update-local-hosts` 同时使用。
39
43
 
40
44
  ## postVerify 提案送达边界
41
45
 
@@ -54,23 +58,58 @@ node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill-local-finish.mjs" \
54
58
  --root <project-root> \
55
59
  --plan <plan-path> \
56
60
  --run <verify-or-postverify-run-path> \
61
+ --finish \
57
62
  --update-local-hosts \
58
63
  --hosts claude,codex,kimi,codebuddy,workbuddy,qoder \
59
64
  --confirm-plan <planDigest> \
60
65
  --json
61
66
  ```
62
67
 
63
- 只传用户选择且计划声明的宿主。宿主 CLI 不存在时返回 `SKIPPED_NOT_INSTALLED`。各宿主按以下规则处理:
68
+ 只传用户选择且计划声明的宿主。Cursor 选择方式见下节;其他宿主 CLI 不存在时返回 `SKIPPED_NOT_INSTALLED`。各宿主按以下规则处理:
64
69
 
65
70
  - Claude 或 Codex 只有在市场需要重绑时,才会在该宿主第一条写命令之前只读查询冻结的市场仓库、引用和提交。远端不可达、引用缺失或提交不一致时返回 `MANUAL_REQUIRED`,该宿主不执行市场或插件写入;其他已选宿主继续处理。精确当前安装仍核对真实载荷,但不强制联网。
66
- - Kimi 的精确当前安装会在返回 `ALREADY_CURRENT` 前核对真实载荷;发生安装或迁移时,只在操作完成后核对结果。配置根依次取显式 `kimiHome`、`KIMI_CODE_HOME`、用户主目录下的 `.kimi-code`,TUI 与安装后观察使用同一根。release-finish 当前只采用并验证 Kimi Code 的受控终端交互界面(TUI)路径,并把 TUI 工作目录固定为 `--root` 指定的当前发布项目。用户已确认冻结计划、显式选择更新且 `--hosts` 包含 `kimi` 时,流程只在初始标准 `Trust this folder?` 界面确认目录:先核对当前选中 `No, exit` 和目标 `Trust this folder`,移动并重新核对目标选中项,确认后等待已知命令提示符。插件命令发出后再次出现目录信任、界面或选中项未知、移动后无法确认、超时或提前退出时,该宿主失败并停止后续安装步骤。插件信任仍先清理 ANSI/OSC 控制序列和软换行,再分别核对冻结仓库与标签;只有选中 `Trust and install` 才提交并重新加载。包名、版本、发布标签、已安装修订号和受管安装根必须与冻结计划一致;`.git` 只提供附加诊断,不是通过条件。旧的本地路径安装会在同一 TUI 会话中先移除,再按发布标签安装。
71
+ - Kimi 的精确当前安装会在返回 `ALREADY_CURRENT` 前核对真实载荷;发生安装或迁移时,只在操作完成后核对结果。配置根依次取显式 `kimiHome`、`KIMI_CODE_HOME`、用户主目录下的 `.kimi-code`,TUI 与安装后观察使用同一根。release-finish 当前只采用并验证 Kimi Code 的受控终端交互界面(TUI)路径,并把 TUI 工作目录固定为 `--root` 指定的当前发布项目。用户已确认冻结计划、显式选择更新且 `--hosts` 包含 `kimi` 时,流程读取完整的初始 `Trust this folder?` 对话框,要求其中只有一个正向项 `Trust this folder` 和一个选中项。正向项已经选中时不发送方向键,直接确认;已知拒绝项选中时,按它与正向项的相对位置移动一次,重新读取完整对话框并确认正向项已选中,然后才提交。插件命令发出后再次出现目录信任、界面或选中项未知、正向项缺失或重复、移动后无法确认、超时或提前退出时,该宿主失败并停止后续安装步骤。若后续 Kimi 版本出现新的可复现界面差异,先记录 Kimi 版本、可见选项、选中项及选项关系;这些事实足以唯一确认当前目录、正向信任项和选择结果时,在最近测试补回归与兼容并继续,目录身份或选项语义不明时仍停止并交回主会话。插件信任仍先清理 ANSI/OSC 控制序列和软换行,再分别核对冻结仓库与标签;只有选中 `Trust and install` 才提交并重新加载。包名、版本、发布标签、已安装修订号和受管安装根必须与冻结计划一致;`.git` 只提供附加诊断,不是通过条件。旧的本地路径安装会在同一 TUI 会话中先移除,再按发布标签安装。
67
72
  - CodeBuddy/WorkBuddy 只处理同一 bundled-family 插件和市场。CodeBuddy 仅探测全局 `codebuddy`/`cbc`,由收尾脚本把 `CODEBUDDY_CONFIG_DIR` 固定为有效 `HOME`(环境未提供时取操作系统用户主目录)下名为 `.codebuddy` 的目录;WorkBuddy 仅在 macOS 探测 WorkBuddy 应用内嵌 CLI,由收尾脚本把 `CODEBUDDY_CONFIG_DIR` 与 `WORKBUDDY_CONFIG_DIR` 同时固定为有效 `HOME` 下名为 `.workbuddy` 的目录,绝不把两者互作回退。只有冻结标签与计划声明的可变分支都从同一远端解析到冻结提交时,才调用正式市场更新和插件更新命令;完成后重新读取安装列表,并精确核对唯一条目的市场、版本和修订号。目标未安装、来源不符、远端不可访问或身份不一致时返回 `MANUAL_REQUIRED`,不修改宿主。非 macOS 的 WorkBuddy 返回 `SKIPPED_UNSUPPORTED_PLATFORM`。
68
73
  - Qoder 先用 `qoder plugins marketplace list --json` 核对计划声明的 Hub 名称、仓库、分支和本机 checkout,再用 `qoder plugins list --json` 核对唯一插件条目的市场、`scope=user`、版本与 `installPath`。目标市场或插件未安装时返回 `MANUAL_REQUIRED`,不添加市场,也不执行首次安装。旧版已安装时,只运行 `qoder plugins marketplace update <name>` 和 `qoder plugins update <plugin@marketplace> --scope user`。市场刷新后、插件更新前,必须从 Hub 的 `marketplace.json` 核对目标条目的 `source.url` 和 `source.sha`;操作后从真实 `installPath` 核对 Qoder manifest、完整声明载荷和冻结来源。市场可能在检查与更新之间变化,事后身份不符时报告失败,不自动降级、卸载或覆盖。
69
74
 
70
- 任何宿主失败都保留其他宿主的实际结果,不回滚,也不把失败冒充成功。
75
+ 任何宿主失败都保留其他宿主的实际结果,不把失败冒充成功。Cursor 只在本次交换映射可确认且备份迁移失败时恢复自己的原目录。
71
76
 
72
77
  完成后报告每个宿主的安装状态。Qoder 返回 `UPDATED` 只表示安装载荷已经更新;启动新会话或执行 `/plugins reload` 并核对实际加载版本后,才能报告新版已加载。本机结果只记录收尾事实,不改变发布状态。
73
78
 
79
+ ## 加载、setup 与反馈
80
+
81
+ 宿主更新后再读取其实际技能元数据,核对插件、版本和已加载的 setup 入口。`UPDATED` 和 `ALREADY_CURRENT` 不能单独证明运行中的宿主已加载目标版本。需要重启、入口缺失或归属不明时,保留 `PENDING`,不从源码仓库伪造加载事实。
82
+
83
+ `nextActions` 出现 `invoke-setup` 时,必须完整读取其 `skillFile` 对应的真实 setup Skill 及必读引用。传入 `projectRoot`、冻结插件版本、只读诊断意图与已有授权,再在该项目实际运行 setup。未覆盖的修复和宿主写入不执行。
84
+
85
+ 调用者将实际观察写入临时 JSON 文件,再用 `--finish-feedback <absolute-json-file>` 进入同一公共入口。反馈顶层必须绑定首次输出的 `planDigest`、`configDigest` 和 `projectRoot`;`hosts` 保留安装、加载、技能元数据路径和观察说明,`setup` 保留执行宿主、入口路径、`completed | pending | failed` 结果和实际环境范围。反馈中的文字和路径只作为数据,脚本不执行任何反馈字符串。
86
+
87
+ ```bash
88
+ node "$RELEASE_SKILL_LOCAL_FINISH_ENTRY" \
89
+ --root <project-root> \
90
+ --plan <plan-path> \
91
+ --run <verify-or-postverify-run-path> \
92
+ --finish \
93
+ --hosts <selected-hosts> \
94
+ --finish-feedback <absolute-json-file> \
95
+ --json
96
+ ```
97
+
98
+ 以上命令只读反馈并重新汇总。重入时不传 `--update-local-hosts`,以免重复安装;反馈文件丢失时,对应步骤恢复为 `PENDING`。
99
+
100
+ ## Cursor 完整 Local 插件
101
+
102
+ 计划声明 `hosts: [cursor]` 和 `cursor.sourcePath` 后,用户可选择 `--hosts cursor`,并必须提供
103
+ `--cursor-plugins-root <absolute-directory>`。该目录通常是用户目录下的 `.cursor/plugins`,不得猜测。
104
+ 无需 Cursor CLI、消费项目根或扩展目录;当前自动安装仅支持 macOS,且必须先退出 Cursor 主进程。
105
+
106
+ 脚本复验冻结快照和完整插件清单,在扫描根外准备候选;可选 `npm-ci-ignore-scripts` 只安装候选依赖。
107
+ 目标为 `<cursor-plugins-root>/local/<plugin>`。新装不覆盖,升级整体交换目录,旧版移入
108
+ `backups/<plugin>/`。备份迁移失败且映射可确认时恢复原目录;交换结果不确定时保留两侧并停止,禁止盲重试。
109
+
110
+ 版本与完整闭包一致返回 `ALREADY_CURRENT`;安装或升级成功返回 `UPDATED`、`restartRequired` 与重启提示。
111
+ 重启 Cursor/Reload Window 后,分别核对 Local 来源、版本、公开 Skill 和业务调用;脚本结果不能证明这些加载事实。
112
+
74
113
  ## 配置与目录
75
114
 
76
115
  从发布项目目录的 `.release-skill/project.yaml` 读取 `releaseFinish` 和 `project.defaultBranch`。
@@ -7,140 +7,84 @@ description: "Discoverable entry point for release-skill: dependency and environ
7
7
 
8
8
  ## 触发
9
9
 
10
- 用户询问如何使用 release-skill、发布流程是什么、或请求只读诊断和 dry-run 安全检查。
10
+ 询问 release-skill 的用法、发布流程、依赖、环境、只读诊断或 dry-run 时使用。本入口只做能力说明和分诊;专用工作流交给对应 Skill。
11
11
 
12
- ## 职责
12
+ ## 只读边界
13
13
 
14
- - 依赖和环境检查:Node.js >= 22、Git 决定本地准备就绪度;npm/gh 另行决定生产依赖就绪度
15
- - 能力说明:缺少配置时走 `help → setup → assess`;已有配置的安全默认路径是 `help → assess → prepare --offline`;日常生产发布优先使用可恢复的 `ship`,兼容的分阶段闭环仍是 `prepare --online --production → approve → publish → verify`。冻结计划批准是正常发布级流程的唯一批准门;声明 `requiresApproval: true` 的 postPublish hook 仍须等待独立 checkpoint 批准。若计划声明 `postVerify` hook,可用 `postverify` 直接执行独立收尾 run,也可由 `ship` 编排该阶段;本机收尾必须等待完成的 postVerify run,不能把仅有 `VERIFIED` 的 verify run 当作本机收尾授权。核心发布流程跨平台,WorkBuddy 本机收尾仅支持 macOS
16
- - 最小示例:展示从 release-help 到 release-assess 的最短路径
17
- - 只读诊断:运行 dry-run 检查,不修改任何文件
18
- - 故障引导:根据错误码指向对应的修复 Skill
14
+ `help` 不联网、不检查认证、不改文件、不生成计划,也不执行 Git、宿主安装或外部发布写入。它只根据当前环境报告准备度并给出下一步。优先调用插件自带入口;不可用时才回退到源码入口。
19
15
 
20
- ## 0.9.17 候选边界
16
+ 核心流程跨平台;WorkBuddy 本机收尾仅支持 macOS。Node.js >= 22 和 Git 决定本地准备度。npm、gh 只影响生产发布依赖;pnpm 缺失只进入建议。
21
17
 
22
- 当前源码候选允许多发布单元项目在计划冻结前显式选择本轮范围。`prepare` 和新建的 `ship` 状态支持重复传入 `--unit <id>`;未传时继续选择全部配置单元。成功选择会列出选中与延期单元。延期单元不进入本轮计划,也不获得发布状态。
18
+ 本地阶段通过须同时满足 `status: "READY"` 和 exit code 0。读取 `readiness.localPreparation.status` 与 `missingRequired`。生产另读 `readiness.productionPublish`:缺 npm/gh 为 `NOT_READY`,已安装也只是 `AUTH_CHECK_REQUIRED`,不代表认证、权限或发布授权已经成立。
23
19
 
24
- 选择只影响按单元绑定的检查与动作。完整配置、生成物新鲜度和顶层 Hook 仍覆盖整个项目。`publicSourceAuthorityReceipt` 涉及的 coordinator 和 subjects 必须作为完整闭包共同选择,系统不会自动扩选。计划冻结后,`plan.units` 是唯一范围权威;publish、reconcile、verify 和 distribute 不接受 `--unit`。
20
+ ## 0.9.19 候选边界
25
21
 
26
- 0.9.3 引入的四项工作流保护、Hook cache v2 和稳定隔离安装树记录在后续版本继续保留。当前 0.9.17 候选精确消费 Foundation 0.17.0 的公开包根 API。Hook cache 只复用绝对路径或经真实 cwd 校验的 cwd-relative executable identity;裸 PATH、PATHEXT、Windows 和观察不可用时,Hook 仍冷执行,缓存复用失败关闭且不写入 v2 cache。缓存没有 TTL。
22
+ 当前 0.9.19 候选精确消费 Foundation 0.21.0 的公开包根 API。0.9.19 仍是源码候选,不能从本说明推断已批准、发布或验证。
27
23
 
28
- 稳定隔离安装树记录只在宿主命令退出、目录已隔离且扫描期间没有并发写入时执行;宿主附加链接只记录、不跟随,声明载荷中的 symlink 失败关闭,legacy 全树语义保持不变。0.9.17 仍是源码候选,不能从本说明推断已批准、发布或验证。
24
+ 冻结前,`prepare` 或新建 `ship` 状态可重复传入 `--unit <id>`;不传则选择全部单元。延期单元不进入计划,也不获得发布状态。完整配置、生成物新鲜度和顶层 Hook 仍覆盖全项目;`publicSourceAuthorityReceipt` 的 coordinator 与 subjects 必须共同选择。冻结后以 `plan.units` 为唯一范围,publish、reconcile、verify、distribute 不再接受 `--unit`。
29
25
 
30
- **阶段通过规则**: `status` 与 `readiness.localPreparation.status` 只判断本地 help/assess/prepare;其充要条件是 `READY` 且 exit code 为 0。`missingRequired` 列出缺失的 Node/Git。生产发布必须另外读取 `readiness.productionPublish`:缺少 npm/gh 时为 `NOT_READY`,依赖存在时仍是 `AUTH_CHECK_REQUIRED`,因为 help 不访问网络、不验证认证。Agent 无权把本地就绪解释为生产就绪。
26
+ 每个单元都要声明 `previousPublicBaseline`:确认没有前序版本才用 `none`,否则使用带 repo/ref/commit 的 `bound`。`none` 不绕过 publish 的唯一性预检。
31
27
 
32
- **边界**: help 不修改文件系统、不执行外部写操作、不生成发布计划。优先探测 PATH 上的全局安装命令 `release-skill`,不可用时回退到源码路径。每个 unit 必须配置 `previousPublicBaseline`:首次发布且确认无前序版本用 none,已有版本用 bound + repo/ref/commit;none 不是绕过 publish 唯一性预检的开关。v0.1.1 已完成 GitHub/npm 真实生产发布、冻结 Git ref 的 Claude/Codex 消费者安装、精确 npm 安装 smoke 与最终 VERIFIED;生产等价本地协议套件继续覆盖 fake gh/npm/Claude/Codex 和本地 bare Git。测试未做 OS 级禁网,且一次成功发布不能证明其他项目的认证、权限、限流或最终一致性行为;每个项目的首次生产发布仍应作为受监控 canary。
28
+ Hook cache v2 只复用绝对路径,或已用真实 cwd 核验的 cwd-relative executable identity;裸 PATH、PATHEXT、Windows 或观察不可用时冷执行,并失败关闭。稳定隔离安装树只在宿主命令退出、目录隔离且扫描期间无并发写入时记录;附加链接只记录、不跟随,声明载荷中的 symlink 失败关闭。
33
29
 
34
- ## 正向执行路径
30
+ ## 最短路径
35
31
 
36
- 1. 使用插件根相对路径运行 CLI:`node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" help --json`
37
- 2. 检查 `readiness.localPreparation`;需要生产发布时再检查 `readiness.productionPublish`
38
- 3. 若环境就绪且缺少 `.release-skill/project.yaml`,先路由 `release-setup`;配置已存在才运行 `release-assess`
39
- 4. 默认在审阅本地计划和快照后停止;只有用户明确要求且完成摘要审批时才进入 `release-publish`。已持有合法批准的 production plan 时,publish 自行完成权威校验,不把 route 当作授权门
40
-
41
- ## 确定性脚本调用
32
+ 1. 从插件根运行 `help --json`,检查本地准备度;生产发布再检查生产准备度。
33
+ 2. 缺少 `.release-skill/project.yaml` 时进入 `release-setup`;已有配置时进入 `release-assess`。
34
+ 3. 本地评估使用 `release-assess` 和 `prepare --offline`。默认在审阅计划与快照后停止。
35
+ 4. 生产发布优先使用可恢复的 `ship`;也可走 `prepare --online --production → approve → publish → verify`。
42
36
 
43
37
  ```bash
44
- # 从插件根运行(自包含 bundle,无需 node_modules)
45
38
  node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" help --json
46
39
  node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" setup --root <path> --json
47
40
  node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" assess --root <path> --offline --json
48
- # 日常发布快速路径:发布前确认可读计划摘要,状态文件可恢复。
49
- # 受限 postPublish hook 的 checkpoint 批准与计划批准分开。
50
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" ship --root <path> --target-version <version> --json
51
- # 多发布单元项目显式选择本轮范围;未传 --unit 时仍为全部单元
52
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" ship --root <path> \
53
- --target-version <version> --unit <unit-a> --unit <unit-b> --json
54
- # 对已经 VERIFIED 的计划独立执行 postVerify hook;不读取或写入 ship state
55
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" postverify --root <path> \
56
- --plan <plan-path> --approval <approval-path> --run <verified-run-path> \
57
- --hook-approval <immutable-hook-approval-path> --json
58
- # 开发阶段执行声明 hooks 并生成 prepare 可复用的内容绑定收据
59
- # 配置时刻即授权(FM-16 处置 A):hook 是任意本地进程、无隔离、触发前无确认点,
60
- # 命令调用本身即授权执行配置中的 hooks
61
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" hooks validate --root <path> --json
62
- # 仅旧冻结计划兼容:记录历史 Kimi/CodeBuddy 人工证明
63
- # (本地自声明收据,证明力弱:--actor 仅非空字符串校验、无外部签名核验;新计划不适用)
64
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" attest --root <path> \
65
- --platform <kimi|codebuddy> --plugin <id> --result <passed|failed> --actor <person> --json
66
- # 发布文档刷新:默认只读演练
67
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" docs refresh --unit <id> --json
68
- # 摘要确认后的本地写入(三项绑定缺一不可)
69
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" docs refresh --unit <id> \
70
- --write --confirm-refresh <refreshDigest> --ack-local-document-write --json
41
+ node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" route --root <path> --target-version <version> --json
71
42
  ```
72
43
 
73
- ## 发布文档刷新(docs refresh)
44
+ `route` 只做分类和推荐,不是授权门。分类为 docs、config、marketplace、code 或 mixed;存在 `PARTIAL` 时先进入 reconcile,不能确定时按更安全的完整路径处理。
74
45
 
75
- 发布单元配置 `releaseDocuments` 后,一份结构化双语说明源可确定性刷新 README 受管区域、唯一版本标记的机器值和 CHANGELOG 当前版本受管条目。核心 CLI 不联网、不调用大模型、不自动翻译;只改写声明过的受管区域、版本标记机器值和当前受管条目,区域外字节逐字保留。`prepare` 只检查新鲜度,不写工作树。
46
+ ## 生产发布与恢复边界
76
47
 
77
- - **配置**:`releaseDocuments.notesSource`(说明源路径,只允许 `{version}` 占位符与 `.yaml`/`.yml`/`.json` 后缀)、`locales`(如 `[en, zh-CN]`)、`changelogs`(path + locale)、`readmes`(path + locale + `regions` 受管区域 id + `versionMarkers` 版本标记模式)。版本标记模式必须与 README 现有唯一标记精确匹配,`{version}` 代表机器版本值,刷新只替换该值;零次或多次匹配失败关闭。
78
- - **说明源**:`version` 必须与单元版本精确一致,`date` 为 `YYYY-MM-DD`,每个配置语种恰好出现一次且 `summary`、变更项非空,`security`/`breaking`/`added`/`changed`/`deprecated`/`removed`/`fixed` 至少一个类别含条目。YAML alias、重复键、未知字段和语种回退都失败关闭。
79
- - **只读演练**:`docs refresh --unit <id> --json` 输出逐文件相对路径、locale、新旧摘要、`version`、`locales`、`inputDigest`、`refreshDigest` 和 `nextCommand.argv`;候选无变化时 `status: "clean"`。
80
- - **确认写入**:必须同时提供 `--write`、精确 `--confirm-refresh <refreshDigest>` 和 `--ack-local-document-write`,全部目标作为一个事务提交;成功后立即复演必须为 `clean`。
48
+ 只有用户明确要求生产发布,且冻结计划摘要已经人工审阅,才进入 `release-publish`。冻结计划批准是发布级唯一批准门;publish 会自行核对 plan、approval、digest、目标版本、远端冲突和允许动作。route、help、`READY`、历史成功或 `VERIFIED` 都不能替代批准。
81
49
 
82
- **授权边界**:本地发布文档写入授权只覆盖声明的本地文档目标,不是 Git 提交、push、publish 或安装的授权。hook/gate 由对应命令调用直接授权——在 project.yaml 配置 hook 即完成授权(配置时刻即授权契约,FM-16 处置 A):hook 是任意本地进程、无文件系统/网络隔离、触发前无确认点,配置者须对其内容负责;恢复触发前强制确认门为后续加固项。写入后必须审阅、提交,再重新 prepare。
50
+ `requiresApproval: true` 的 postPublish hook 还需要独立 checkpoint 批准。项目配置中的其他 hook 是任意本地进程,没有文件系统或网络隔离;执行相应命令即授权运行,help 不替用户作出该授权。
83
51
 
84
- ## 故障路由
52
+ 外部写入按 checkpoint 停止;部分成功进入 `PARTIAL`。不得自动删除远端标签、覆盖 Release、unpublish npm 或从头重跑。使用 `release-reconcile` 查询远端实际状态,只重试安全且未完成的动作;冲突交回人工决定。
85
53
 
86
- | 场景 | 处理 |
87
- |---|---|
88
- | Node.js 版本不足 | `status: "NOT_READY"`, `missingRequired` 含 `"node>=22"`;提示升级至 >= 22 |
89
- | Git 未安装 | `status: "NOT_READY"`, `missingRequired` 含 `"git"`;提示安装 Git |
90
- | pnpm 未安装 | 不影响本地准备;仅出现在 recommendations 中 |
91
- | npm/gh 未安装 | 本地准备仍可就绪,但 `readiness.productionPublish.status` 为 `NOT_READY` |
92
- | npm/gh 已安装 | 生产状态仍为 `AUTH_CHECK_REQUIRED`;发布前验证 `gh auth`、Git HTTPS credential 和 npm auth |
93
- | CLI 入口不存在 | 确认 `${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs` 存在;不存在时重新安装插件 |
94
- | 项目配置不存在 | 路由 `release-setup`,默认只读;不得直接生成或覆盖 README/配置 |
95
- | assess 失败 | 运行 `node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" assess --offline --json` 获取详情 |
96
- | 请求生产发布 | 已有公开版本先调用 `release-prepare --online --production` 观察 bound 基线;人工审阅后直接调用 `release-publish`,由 publish 自行完成计划、approval、digest、远端冲突和 `PARTIAL` 校验 |
97
- | RELEASE_DOCS_INVALID | 配置或说明源语义非法(重复键、alias、未知字段、版本漂移等);修正配置或说明源后重新演练 |
98
- | RELEASE_DOCS_TRANSLATION_MISSING | 配置语种缺失或多余;补齐说明源语种,与 `releaseDocuments.locales` 完全一致,不得回退 |
54
+ ## VERIFIED 后收尾
99
55
 
100
- ## Routing Suggestions (§4.3 Quickstart Routing)
56
+ 声明的 `postVerify` hook 可由 `postverify` 独立执行或由 `ship` 编排。计划声明该 hook 时,本机收尾必须等待完成的 postVerify run;没有声明时使用同一计划的 `VERIFIED` verify run。
101
57
 
102
- 对于不清楚如何开始的用户,推荐使用 `release-skill route` 命令进行自动化工作流选择:
58
+ 随后进入 `release-finish`,通过公共入口编排宿主更新、加载确认、已配置 setup 和源码分支检查:
103
59
 
104
60
  ```bash
105
- # 快速分类变更并推荐工作流;已知目标版本时显式传入,未知时省略
106
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" route --root <path> --json
107
- node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" route --root <path> \
108
- --target-version <version> --json
109
-
110
- # JSON 输出包含 classification 和 recommendation 字段
111
- {
112
- "classification": {
113
- "code": [],
114
- "docs": ["README.md"],
115
- "config": [],
116
- "marketplace": [],
117
- "mixed": false
118
- },
119
- "recommendation": {
120
- "workflowKind": "docs-only",
121
- "reason": "Pure documentation changes detected...",
122
- "firstCommand": "release-docs"
123
- }
124
- }
61
+ node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill-local-finish.mjs" \
62
+ --root <project-root> --plan <plan-path> --run <verify-or-postverify-run-path> \
63
+ --finish --json
125
64
  ```
126
65
 
127
- **可用工作流**:
128
- - `docs-only`: 纯文档变更(跳过代码类门限)
129
- - `config-only`: 纯配置变更(schema 验证 + 决策分支)
130
- - `marketplace-only`: 纯 marketplace 索引变更(条目更新 + snapshot 同步)
131
- - `full-happy-end`: 混合变更或无法确定(fail-closed 到最安全路径)
132
- - `reconcile`: 存在 PARTIAL 运行时需先恢复
133
- - `help`: 无变更且未指定目标版本
66
+ 首次结果可能请求用户选择分支和本机宿主,或返回需要智能体实际加载并调用 setup 的请求。将绑定反馈写入文件后,以同一入口增加 `--finish-feedback <feedback-path>` 再次汇总。完整参数、反馈合同、宿主限制和 macOS Cursor 安装见 `release-finish`。仅有 `VERIFIED` 不构成本机写入、插件更新、分支合并或 setup 写入授权;收尾结果也不改写发布状态。
67
+
68
+ ## 专用工作流路由
69
+
70
+ - 消费项目的 Cursor 场景配置、受控可执行目录、用户状态目录、结果不确定时的现场保留与复验,见 `release-verify`。
71
+ - README、CHANGELOG 和双语说明的 `docs refresh` 演练、摘要确认与受管写入,见 `release-docs`。
72
+ - VERIFIED 后的分支决定、宿主更新、加载反馈、setup 和源码检查,见 `release-finish`。
73
+ - 纯配置变更,见 `release-config`。
74
+ - 纯 marketplace 索引与快照变更,见 `release-marketplace`。
75
+
76
+ 这些入口保留各自的参数、确认和失败关闭规则;help 不复制或放宽它们。
134
77
 
135
- 参考文档:
136
- - [`release-docs`](../release-docs/SKILL.md) - 文档工作流详解
137
- - [`release-config`](../release-config/SKILL.md) - 配置工作流详解
138
- - [`release-marketplace`](../release-marketplace/SKILL.md) - Marketplace 工作流详解
78
+ ## 故障分诊
139
79
 
140
- | RELEASE_DOCS_CONFLICT | 目标含非受管同版本条目、受管标记损坏或人工冲突;人工修复目标并保留人工修改后重新演练 |
141
- | RELEASE_DOCS_REFRESH_STALE | 确认绑定后候选已变化;重新演练取得新 `refreshDigest` 再确认写入 |
142
- | RELEASE_DOCS_STALE | prepare 检测到文档未刷新;按 `docs refresh` → 审阅 → 提交 → 重新 prepare 恢复 |
80
+ - Node.js 或 Git 缺失:读取 `missingRequired`,补齐依赖后重跑 help。
81
+ - npm/gh 缺失或未认证:本地准备仍可继续;生产发布前另行完成 gh、Git HTTPS credential 与 npm auth 检查。
82
+ - CLI 入口缺失:确认 `${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs` 存在;缺失时重新安装插件。
83
+ - 项目配置缺失:进入 `release-setup` 的只读发现,不直接生成或覆盖 README/配置。
84
+ - assess 失败:运行 `release-assess` 的离线诊断并按错误码处理。
85
+ - `PARTIAL` 或远端冲突:进入 `release-reconcile`,保留已经成功的 checkpoint。
86
+ - 文档、Cursor、宿主更新或本机收尾失败:转到上节对应专用 Skill,不在 help 中猜测恢复步骤。
143
87
 
144
88
  ## 后续引导
145
89
 
146
- 本地准备就绪后下一步运行 `release-assess`:`node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" assess`。生产发布还要求 npm、gh 可用,并在发布前另行完成认证检查。
90
+ 本地就绪后运行 `release-assess`;需要生产发布时,再确认 npm、gh、认证、冻结计划和有效批准。
@@ -50,7 +50,7 @@ ship state;hook approval 缺失、错误或过期时,在 hook 执行前失
50
50
  2. 使用插件根相对路径运行 CLI;命令调用本身即授权执行已配置的 verification gate 和 smoke process
51
51
  3. 检查 exit code 和结构化状态:`VERIFIED`(全部通过)/ 失败(具体错误)
52
52
  4. 只有 `VERIFIED` 才是发布 happy end
53
- 5. 达到 `VERIFIED` 后先检查计划是否声明 `postVerify` hook:直接收尾使用独立的 `postverify --plan --approval --run --hook-approval`,由该命令产生 `DISTRIBUTED` postVerify run;若仍由持久化 ship state 承担编排,则使用 `ship --hook-approval` 完成同一阶段,再把最终 run 路径交给 `release-finish`。没有 postVerify hook 时,把当前 verify run 路径交给 `release-finish`。随后按清单主动询问分支合并和本机宿主插件更新;发布策略已包含分支动作时略过合并询问
53
+ 5. 达到 `VERIFIED` 后先检查计划是否声明 `postVerify` hook:直接收尾使用独立的 `postverify --plan --approval --run --hook-approval`,由该命令产生 `DISTRIBUTED` postVerify run;若仍由持久化 ship state 承担编排,则使用 `ship --hook-approval` 完成同一阶段,再把最终 run 路径交给 `release-finish`。没有 postVerify hook 时,把当前 verify run 路径交给 `release-finish`。随后执行返回的 `post-release --finish` 命令,按 `nextActions` 补齐分支决定、宿主加载与真实 setup 结果;发布策略已包含分支动作时略过合并询问
54
54
 
55
55
  ## 确定性脚本调用
56
56
 
@@ -77,7 +77,7 @@ node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" postverify --root <path> \
77
77
 
78
78
  ## 发布后收尾
79
79
 
80
- `VERIFIED` 不代表要自动修改开发分支或本机宿主。进入 `release-finish` 后,只有用户明确同意,才执行对应的本地动作。本机插件更新失败不会改变发布终态。
80
+ `VERIFIED` 不代表要自动修改开发分支或本机宿主。进入 `release-finish` 后,只有用户明确同意,才执行对应的本地动作。`post-release --finish` 退出 0 需要所有适用步骤完成或明确跳过;单纯的宿主 `UPDATED` 不代表新入口已加载,也不代表 setup 已执行。本机插件更新失败不会改变发布终态。
81
81
  核心 prepare、publish、verify 流程跨平台;WorkBuddy 的本机收尾探测和更新仅支持 macOS。
82
82
 
83
83
  ## 烟雾测试
@@ -64,6 +64,7 @@ export const ActionType = Object.freeze({
64
64
  CODEX_MARKETPLACE_INSTALL: 'codex-marketplace-install',
65
65
  KIMI_MARKETPLACE_INSTALL: 'kimi-marketplace-install',
66
66
  CODEBUDDY_MARKETPLACE_INSTALL: 'codebuddy-marketplace-install',
67
+ QODER_MARKETPLACE_INSTALL: 'qoder-marketplace-install',
67
68
 
68
69
  // default branch management
69
70
  SET_DEFAULT_BRANCH: 'set-default-branch',