release-skill 0.9.4 → 0.9.5

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 (58) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codebuddy-plugin/plugin.json +1 -1
  4. package/.codex-plugin/plugin.json +2 -2
  5. package/.kimi-plugin/plugin.json +1 -1
  6. package/CHANGELOG.md +29 -0
  7. package/INSTALL.md +2 -2
  8. package/INSTALL.zh-CN.md +2 -2
  9. package/README.md +20 -16
  10. package/README.zh-CN.md +19 -16
  11. package/adapters/claude/.claude-plugin/marketplace.json +1 -1
  12. package/adapters/claude/.claude-plugin/plugin.json +1 -1
  13. package/adapters/claude/bin/release-skill.bundle.mjs +866 -166
  14. package/adapters/claude/schemas/release-plan.schema.json +36 -0
  15. package/adapters/claude/schemas/release-project.schema.json +31 -0
  16. package/adapters/claude/skills/release-finish/SKILL.md +5 -5
  17. package/adapters/claude/skills/release-help/SKILL.md +3 -3
  18. package/adapters/claude/skills/release-verify/SKILL.md +2 -1
  19. package/adapters/codex/.codex-plugin/plugin.json +2 -2
  20. package/adapters/codex/bin/release-skill.bundle.mjs +866 -166
  21. package/adapters/codex/schemas/release-plan.schema.json +36 -0
  22. package/adapters/codex/schemas/release-project.schema.json +31 -0
  23. package/adapters/codex/skills/release-finish/SKILL.md +5 -5
  24. package/adapters/codex/skills/release-help/SKILL.md +3 -3
  25. package/adapters/codex/skills/release-verify/SKILL.md +2 -1
  26. package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
  27. package/adapters/kimi/bin/release-skill.bundle.mjs +866 -166
  28. package/adapters/kimi/schemas/release-plan.schema.json +36 -0
  29. package/adapters/kimi/schemas/release-project.schema.json +31 -0
  30. package/adapters/kimi/skills/release-finish/SKILL.md +5 -5
  31. package/adapters/kimi/skills/release-help/SKILL.md +3 -3
  32. package/adapters/kimi/skills/release-verify/SKILL.md +2 -1
  33. package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
  34. package/adapters/workbuddy/bin/release-skill.bundle.mjs +866 -166
  35. package/adapters/workbuddy/schemas/release-plan.schema.json +36 -0
  36. package/adapters/workbuddy/schemas/release-project.schema.json +31 -0
  37. package/adapters/workbuddy/skills/release-finish/SKILL.md +5 -5
  38. package/adapters/workbuddy/skills/release-help/SKILL.md +3 -3
  39. package/adapters/workbuddy/skills/release-verify/SKILL.md +2 -1
  40. package/bin/release-skill-cli.mjs +87 -20
  41. package/bin/release-skill.bundle.mjs +866 -166
  42. package/package.json +1 -1
  43. package/platform-manifest.json +4 -4
  44. package/schemas/release-plan.schema.json +36 -0
  45. package/schemas/release-project.schema.json +31 -0
  46. package/skills/release-finish/SKILL.md +5 -5
  47. package/skills/release-help/SKILL.md +3 -3
  48. package/skills/release-verify/SKILL.md +2 -1
  49. package/skills-src/release-finish/SKILL.md +5 -5
  50. package/skills-src/release-help/SKILL.md +3 -3
  51. package/skills-src/release-verify/SKILL.md +2 -1
  52. package/src/commands/post-release-local.mjs +204 -10
  53. package/src/commands/prepare.mjs +178 -9
  54. package/src/commands/ship.mjs +26 -11
  55. package/src/commands/verify.mjs +175 -2
  56. package/src/core/plan.mjs +45 -1
  57. package/src/platforms/registry.mjs +97 -0
  58. package/src/readme/contract.mjs +23 -3
@@ -539,6 +539,18 @@
539
539
  ],
540
540
  "description": "市场来源类型:bundled-family(技能族自带市场文件)或 standalone-index(独立市场仓库);每个平台每次发布只冻结一种来源"
541
541
  },
542
+ "firstReleaseBootstrap": {
543
+ "type": "string",
544
+ "enum": [
545
+ "manual-index-checkpoint"
546
+ ],
547
+ "description": "首次 standalone-index 发布的人工索引停点;仅显式 opt-in 时启用"
548
+ },
549
+ "marketplaceIndexSha": {
550
+ "type": ["string", "null"],
551
+ "pattern": "^[0-9a-f]{40}$",
552
+ "description": "最终市场索引提交 SHA;首次 bootstrap prepare 阶段必须保持 null,verify 仅记录实际观察值"
553
+ },
542
554
  "marketplaceCommitSha": {
543
555
  "type": "string",
544
556
  "pattern": "^[0-9a-f]{40}$",
@@ -697,6 +709,30 @@
697
709
  ]
698
710
  }
699
711
  },
712
+ {
713
+ "if": {
714
+ "required": [
715
+ "firstReleaseBootstrap"
716
+ ]
717
+ },
718
+ "then": {
719
+ "required": [
720
+ "marketplaceSourceType",
721
+ "marketplaceRepo"
722
+ ],
723
+ "properties": {
724
+ "type": {
725
+ "enum": [
726
+ "claude-plugin",
727
+ "codex-plugin"
728
+ ]
729
+ },
730
+ "marketplaceSourceType": {
731
+ "const": "standalone-index"
732
+ }
733
+ }
734
+ }
735
+ },
700
736
  {
701
737
  "if": {
702
738
  "required": [
@@ -257,6 +257,13 @@
257
257
  ],
258
258
  "description": "市场来源类型:bundled-family(技能族自带市场文件)或 standalone-index(独立市场仓库);每个平台每次发布只冻结一种来源"
259
259
  },
260
+ "firstReleaseBootstrap": {
261
+ "type": "string",
262
+ "enum": [
263
+ "manual-index-checkpoint"
264
+ ],
265
+ "description": "首次 standalone-index 发布的人工索引停点;仅显式 opt-in 时启用"
266
+ },
260
267
  "marketplaceIndexPath": {
261
268
  "type": "string",
262
269
  "minLength": 1,
@@ -447,6 +454,30 @@
447
454
  ]
448
455
  }
449
456
  },
457
+ {
458
+ "if": {
459
+ "required": [
460
+ "firstReleaseBootstrap"
461
+ ]
462
+ },
463
+ "then": {
464
+ "required": [
465
+ "marketplaceSourceType",
466
+ "marketplaceRepo"
467
+ ],
468
+ "properties": {
469
+ "type": {
470
+ "enum": [
471
+ "claude-plugin",
472
+ "codex-plugin"
473
+ ]
474
+ },
475
+ "marketplaceSourceType": {
476
+ "const": "standalone-index"
477
+ }
478
+ }
479
+ }
480
+ },
450
481
  {
451
482
  "if": {
452
483
  "required": [
@@ -20,7 +20,7 @@ description: 发布达到 VERIFIED 后处理可选的本地收尾:按发布分
20
20
 
21
21
  这是发布后的独立收尾,不属于 `prepare → approve → publish → verify` 状态机。它不能把本机更新结果写成新的发布状态,也不能因为本机更新失败而降低 `VERIFIED`。
22
22
 
23
- 默认只读取冻结计划和 verify run。没有用户明确同意,不合并分支,不更新插件,不接受 Kimi 的安装信任提示。
23
+ 默认只读取冻结计划和 verify 或 postVerify run。没有用户明确同意,不合并分支,不更新插件,不接受 Kimi 的安装信任提示。
24
24
 
25
25
  ## 先生成收尾清单
26
26
 
@@ -30,11 +30,11 @@ description: 发布达到 VERIFIED 后处理可选的本地收尾:按发布分
30
30
  node "$RELEASE_SKILL_LOCAL_FINISH_ENTRY" \
31
31
  --root <project-root> \
32
32
  --plan <plan-path> \
33
- --run <verified-run-path> \
33
+ --run <verify-or-postverify-run-path> \
34
34
  --json
35
35
  ```
36
36
 
37
- 脚本只接受状态为 `VERIFIED`、且 `planDigest` 与冻结计划一致的 verify run。
37
+ 脚本只接受与冻结计划一致的显式运行证据:计划未声明 `postVerify` hook 时,传入同计划的 `VERIFIED` verify run;计划声明了 `postVerify` hook 时,必须传入同计划、沿同一 `VERIFIED` verify run 继承谱系且所有 hook checkpoint 均为 `succeeded` 或 `NO_CHANGE` 的 `DISTRIBUTED` postVerify runpostVerify 尚未完成时,不能直接运行本机收尾;应先完成所需 checkpoint approval,再通过 `ship` 完成 postVerify,并使用结果中的 postVerify run 路径。
38
38
 
39
39
  ## 主动询问
40
40
 
@@ -52,7 +52,7 @@ node "$RELEASE_SKILL_LOCAL_FINISH_ENTRY" \
52
52
  node "$RELEASE_SKILL_LOCAL_FINISH_ENTRY" \
53
53
  --root <project-root> \
54
54
  --plan <plan-path> \
55
- --run <verified-run-path> \
55
+ --run <verify-or-postverify-run-path> \
56
56
  --update-local-hosts \
57
57
  --hosts claude,codex,kimi,codebuddy,workbuddy \
58
58
  --confirm-plan <planDigest> \
@@ -63,7 +63,7 @@ node "$RELEASE_SKILL_LOCAL_FINISH_ENTRY" \
63
63
 
64
64
  - Claude 先重新绑定冻结市场,再重新观察安装状态;旧插件若仍存在,才调用正式更新命令。Codex 继续按正式市场协议移除并安装冻结的 Git 引用。两者都在安装后核对插件、市场、版本和市场检出提交。
65
65
  - Kimi 的精确当前安装会在返回 `ALREADY_CURRENT` 前核对真实载荷;发生安装或迁移时,只在操作完成后核对结果。包名、版本、发布标签、已安装修订号和受管安装根必须与冻结计划一致;`.git` 只提供附加诊断,不是通过条件。旧的本地路径安装会在同一个受控终端交互界面(TUI)会话中先移除,再按发布标签安装、确认信任并重新加载。
66
- - CodeBuddy/WorkBuddy 只处理同一 bundled-family 插件和市场。只有冻结标签与计划声明的可变分支都从同一远端解析到冻结提交时,才调用正式市场更新和插件更新命令;完成后重新读取安装列表,并精确核对唯一条目的市场、版本和修订号。目标未安装、来源不符、远端不可访问或身份不一致时返回 `MANUAL_REQUIRED`,不修改宿主。
66
+ - 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`。
67
67
 
68
68
  任何宿主失败都保留其他宿主的实际结果,不回滚,也不把失败冒充成功。
69
69
 
@@ -19,12 +19,12 @@ description: "Discoverable entry point for release-skill: dependency and environ
19
19
  ## 职责
20
20
 
21
21
  - 依赖和环境检查:Node.js >= 22、Git 决定本地准备就绪度;npm/gh 另行决定生产依赖就绪度
22
- - 能力说明:缺少配置时走 `help → setup → assess`;已有配置的安全默认路径是 `help → assess → prepare --offline`;日常生产发布优先使用可恢复的 `ship`,兼容的分阶段闭环仍是 `prepare --online --production → approve → publish → verify`。冻结计划批准是正常发布级流程的唯一批准门;声明 `requiresApproval: true` 的 postPublish hook 仍须等待独立 checkpoint 批准
22
+ - 能力说明:缺少配置时走 `help → setup → assess`;已有配置的安全默认路径是 `help → assess → prepare --offline`;日常生产发布优先使用可恢复的 `ship`,兼容的分阶段闭环仍是 `prepare --online --production → approve → publish → verify`。冻结计划批准是正常发布级流程的唯一批准门;声明 `requiresApproval: true` 的 postPublish hook 仍须等待独立 checkpoint 批准。若计划声明 `postVerify` hook,本机收尾必须等待 `ship` 产出的完成 postVerify run,不能把仅有 `VERIFIED` 的 verify run 当作本机收尾授权。核心发布流程跨平台,WorkBuddy 本机收尾仅支持 macOS
23
23
  - 最小示例:展示从 release-help 到 release-assess 的最短路径
24
24
  - 只读诊断:运行 dry-run 检查,不修改任何文件
25
25
  - 故障引导:根据错误码指向对应的修复 Skill
26
26
 
27
- ## 0.9.4 候选边界
27
+ ## 0.9.5 候选边界
28
28
 
29
29
  当前源码候选允许多发布单元项目在计划冻结前显式选择本轮范围。`prepare` 和新建的 `ship` 状态支持重复传入 `--unit <id>`;未传时继续选择全部配置单元。成功选择会列出选中与延期单元。延期单元不进入本轮计划,也不获得发布状态。
30
30
 
@@ -32,7 +32,7 @@ description: "Discoverable entry point for release-skill: dependency and environ
32
32
 
33
33
  0.9.3 引入的四项工作流保护、Hook cache v2 和稳定隔离安装树记录在 0.9.4 继续保留。0.9.4 精确消费 Foundation 0.16.0 的公开包根 API。Hook cache 只复用绝对路径或经真实 cwd 校验的 cwd-relative executable identity;裸 PATH、PATHEXT、Windows 和观察不可用时,Hook 仍冷执行,缓存复用失败关闭且不写入 v2 cache。缓存没有 TTL。
34
34
 
35
- 稳定隔离安装树记录只在宿主命令退出、目录已隔离且扫描期间没有并发写入时执行;宿主附加链接只记录、不跟随,声明载荷中的 symlink 失败关闭,legacy 全树语义保持不变。0.9.4 仍是源码候选,不能从本说明推断已批准、发布或验证。
35
+ 稳定隔离安装树记录只在宿主命令退出、目录已隔离且扫描期间没有并发写入时执行;宿主附加链接只记录、不跟随,声明载荷中的 symlink 失败关闭,legacy 全树语义保持不变。0.9.5 仍是源码候选,不能从本说明推断已批准、发布或验证。
36
36
 
37
37
  **阶段通过规则**: `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 无权把本地就绪解释为生产就绪。
38
38
 
@@ -52,7 +52,7 @@ verify 只接受 `PUBLISHED` 状态的源 run;`VERIFIED` 是终态,不会再
52
52
  2. 使用插件根相对路径运行 CLI;命令调用本身即授权执行已配置的 verification gate 和 smoke process
53
53
  3. 检查 exit code 和结构化状态:`VERIFIED`(全部通过)/ 失败(具体错误)
54
54
  4. 只有 `VERIFIED` 才是发布 happy end
55
- 5. 达到 `VERIFIED` 后立即路由 `release-finish`:先生成只读收尾清单,再按清单主动询问分支合并和本机宿主插件更新;发布策略已包含分支动作时略过合并询问
55
+ 5. 达到 `VERIFIED` 后先检查计划是否声明 `postVerify` hook:有未完成 hook 时,先按 approval 合同批准并通过 `ship` 完成 postVerify,再把最终 `DISTRIBUTED` postVerify run 路径交给 `release-finish`;没有 postVerify hook 时,才把当前 verify run 路径交给 `release-finish`。随后按清单主动询问分支合并和本机宿主插件更新;发布策略已包含分支动作时略过合并询问
56
56
 
57
57
  ## 确定性脚本调用
58
58
 
@@ -73,6 +73,7 @@ node "$RELEASE_SKILL_ENTRY" verify --root <path> --plan <plan-path> --run <run-p
73
73
  ## 发布后收尾
74
74
 
75
75
  `VERIFIED` 不代表要自动修改开发分支或本机宿主。进入 `release-finish` 后,只有用户明确同意,才执行对应的本地动作。本机插件更新失败不会改变发布终态。
76
+ 核心 prepare、publish、verify 流程跨平台;WorkBuddy 的本机收尾探测和更新仅支持 macOS。
76
77
 
77
78
  ## 烟雾测试
78
79
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-skill",
3
- "version": "0.9.4",
3
+ "version": "0.9.5",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "广州市风荷科技有限公司"