release-skill 0.1.3 → 0.1.4

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 (95) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/.codex-plugin/plugin.json +3 -3
  4. package/CHANGELOG.md +29 -0
  5. package/INSTALL.md +69 -32
  6. package/INSTALL.zh-CN.md +64 -26
  7. package/README.md +101 -37
  8. package/README.zh-CN.md +87 -28
  9. package/adapters/claude/.claude-plugin/marketplace.json +1 -1
  10. package/adapters/claude/.claude-plugin/plugin.json +1 -1
  11. package/adapters/claude/bin/release-skill.bundle.mjs +79284 -0
  12. package/adapters/claude/bin/release-skill.mjs +34 -0
  13. package/adapters/claude/native/safe-write/binding.gyp +40 -0
  14. package/adapters/claude/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
  15. package/adapters/claude/native/safe-write/prebuilds.json +24 -0
  16. package/adapters/claude/native/safe-write/src/safe_write.cc +2032 -0
  17. package/adapters/claude/schemas/.render-manifest.json +37 -0
  18. package/adapters/claude/schemas/approval-record.schema.json +115 -0
  19. package/adapters/claude/schemas/artifact-lock.schema.json +111 -0
  20. package/adapters/claude/schemas/artifact-plan.schema.json +52 -0
  21. package/adapters/claude/schemas/artifact-policy.schema.json +76 -0
  22. package/adapters/claude/schemas/evidence-event.schema.json +89 -0
  23. package/adapters/claude/schemas/release-plan.schema.json +860 -0
  24. package/adapters/claude/schemas/release-project.schema.json +736 -0
  25. package/adapters/claude/schemas/release-run.schema.json +342 -0
  26. package/adapters/claude/skills/release-assess/SKILL.md +5 -6
  27. package/adapters/claude/skills/release-help/SKILL.md +11 -18
  28. package/adapters/claude/skills/release-prepare/SKILL.md +6 -6
  29. package/adapters/claude/skills/release-publish/SKILL.md +1 -4
  30. package/adapters/claude/skills/release-reconcile/SKILL.md +5 -5
  31. package/adapters/claude/skills/release-setup/SKILL.md +64 -80
  32. package/adapters/claude/skills/release-verify/SKILL.md +4 -7
  33. package/adapters/codex/.codex-plugin/plugin.json +2 -2
  34. package/adapters/codex/bin/release-skill.bundle.mjs +79284 -0
  35. package/adapters/codex/bin/release-skill.mjs +34 -0
  36. package/adapters/codex/native/safe-write/binding.gyp +40 -0
  37. package/adapters/codex/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
  38. package/adapters/codex/native/safe-write/prebuilds.json +24 -0
  39. package/adapters/codex/native/safe-write/src/safe_write.cc +2032 -0
  40. package/adapters/codex/schemas/.render-manifest.json +37 -0
  41. package/adapters/codex/schemas/approval-record.schema.json +115 -0
  42. package/adapters/codex/schemas/artifact-lock.schema.json +111 -0
  43. package/adapters/codex/schemas/artifact-plan.schema.json +52 -0
  44. package/adapters/codex/schemas/artifact-policy.schema.json +76 -0
  45. package/adapters/codex/schemas/evidence-event.schema.json +89 -0
  46. package/adapters/codex/schemas/release-plan.schema.json +860 -0
  47. package/adapters/codex/schemas/release-project.schema.json +736 -0
  48. package/adapters/codex/schemas/release-run.schema.json +342 -0
  49. package/adapters/codex/skills/release-assess/SKILL.md +12 -6
  50. package/adapters/codex/skills/release-help/SKILL.md +18 -18
  51. package/adapters/codex/skills/release-prepare/SKILL.md +13 -6
  52. package/adapters/codex/skills/release-publish/SKILL.md +8 -4
  53. package/adapters/codex/skills/release-reconcile/SKILL.md +12 -5
  54. package/adapters/codex/skills/release-setup/SKILL.md +71 -80
  55. package/adapters/codex/skills/release-verify/SKILL.md +11 -7
  56. package/bin/release-skill-cli.mjs +807 -0
  57. package/bin/release-skill.bundle.mjs +79284 -0
  58. package/bin/release-skill.mjs +23 -788
  59. package/package.json +6 -2
  60. package/references/02-project-config.md +2 -2
  61. package/schemas/release-plan.schema.json +7 -1
  62. package/schemas/release-project.schema.json +8 -0
  63. package/scripts/build-bundle.mjs +133 -0
  64. package/skills/release-assess/SKILL.md +5 -6
  65. package/skills/release-help/SKILL.md +11 -18
  66. package/skills/release-prepare/SKILL.md +6 -6
  67. package/skills/release-publish/SKILL.md +1 -4
  68. package/skills/release-reconcile/SKILL.md +5 -5
  69. package/skills/release-setup/SKILL.md +64 -80
  70. package/skills/release-verify/SKILL.md +4 -7
  71. package/skills-src/release-assess/SKILL.md +5 -6
  72. package/skills-src/release-help/SKILL.md +11 -18
  73. package/skills-src/release-prepare/SKILL.md +6 -6
  74. package/skills-src/release-publish/SKILL.md +1 -4
  75. package/skills-src/release-reconcile/SKILL.md +5 -5
  76. package/skills-src/release-setup/SKILL.md +64 -80
  77. package/skills-src/release-verify/SKILL.md +4 -7
  78. package/src/adapters/npm.mjs +5 -13
  79. package/src/adapters/plugin-marketplace.mjs +67 -31
  80. package/src/artifacts/policy.mjs +4 -7
  81. package/src/artifacts/safe-fs-backend-internal.mjs +69 -21
  82. package/src/commands/prepare.mjs +22 -1
  83. package/src/commands/publish.mjs +1 -0
  84. package/src/commands/setup.mjs +667 -28
  85. package/src/core/approval.mjs +4 -6
  86. package/src/core/config.mjs +8 -8
  87. package/src/core/pkg-root.mjs +22 -0
  88. package/src/core/plan.mjs +9 -4
  89. package/src/core/run.mjs +4 -4
  90. package/src/core/trusted-resource.mjs +96 -0
  91. package/src/docs/version-gate.mjs +164 -0
  92. package/src/producers/build-adapters.mjs +512 -55
  93. package/src/snapshot/frozen.mjs +133 -3
  94. package/src/snapshot/public-map.mjs +7 -4
  95. package/src/snapshot/scan.mjs +2 -1
package/README.zh-CN.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  [English](README.md) · 安装指南:[中文](INSTALL.zh-CN.md) / [English](INSTALL.md)
4
4
 
5
+ <!-- release-skill:release-version: 0.1.4 -->
5
6
  面向 Claude Code 和 Codex 的发布准备工具,完整保留人工维护的文件内容。
6
7
 
7
8
  release-skill 帮助维护者回答三个问题:准备发布什么、还有哪些检查未通过、最终
@@ -9,17 +10,20 @@ release-skill 帮助维护者回答三个问题:准备发布什么、还有哪
9
10
  最后一步重新生成 README、重新打包活动工作区或覆盖人工内容。
10
11
 
11
12
  <!-- release-skill:capability:external-write-boundary -->
12
- > **当前边界:** v0.1.1 已完成 GitHub 与 npm 的真实生产发布,并从冻结 Git ref
13
- > 完成精确 npm 安装及 Claude/Codex 消费者安装验证。同一工作流还通过了本地
14
- > 生产等价协议套件:测试运行真实 release-skill CLI 和冻结制品,Git 目标是本地
15
- > bare remote,`gh`、`npm`、Claude、Codex 使用协议级 fake。该套件没有提供 OS 级
16
- > 网络隔离,也不能证明其他项目的认证、权限、限流和最终一致性行为与本次发布相同;
17
- > 每个项目的第一次生产发布仍应作为受监控 canary。`prepare --online` 观察 bound
18
- > 前序公开基线,漂移或不可观察时失败关闭;远端唯一性检查在 `publish` 全局预检执行。
13
+ > **当前边界:** v0.1.4 是当前发布版本。v0.1.1 已完成 GitHub 与 npm
14
+ > 真实生产发布,是首次生产验证的历史里程碑,并从冻结 Git ref 完成精确 npm
15
+ > 安装及 Claude/Codex 消费者安装验证;“当前发布版本”与“首次生产验证里程碑”
16
+ > 是两个不同的事实,不得混写成同一含义。同一工作流还通过了本地
17
+ > 生产等价协议套件:测试运行真实 release-skill CLI 和冻结制品,Git 目标是
18
+ > 本地 bare remote,`gh`、`npm`、Claude、Codex 使用协议级 fake。该套件没有
19
+ > 提供 OS 级网络隔离,也不能证明其他项目的认证、权限、限流和最终一致性行为
20
+ > 与本次发布相同;每个项目的第一次生产发布仍应作为受监控 canary。
21
+ > `prepare --online` 观察 bound 前序公开基线,漂移或不可观察时失败关闭;
22
+ > 远端唯一性检查在 `publish` 全局预检执行。
19
23
 
20
24
  <!-- release-skill:capability:safe-first-command -->
21
- > **v0.1.1 已完成真实生产发布与验证。** npm 安装的 CLI 是受支持的用户入口;
22
- > 源码 checkout 保留为开发/贡献者路径。
25
+ > **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.1.4 是当前发布版本。**
26
+ > npm 安装的 CLI 是受支持的用户入口;源码 checkout 保留为开发/贡献者路径。
23
27
  >
24
28
  > **第一条命令:**
25
29
  > - npm 安装:`npm install -g release-skill` → `release-skill help`
@@ -47,6 +51,11 @@ release-skill 不重新生成、也不回写项目源文件。`prepare` 从当
47
51
  - 远端 branch、tag、Release 或 npm 版本冲突时交给人工;系统不 force、不覆盖。
48
52
  - 只有 `publicFiles` 明确列出的文件会被复制;需要发布的翻译 README、图片、
49
53
  演示文件和链接文档都要显式加入配置。
54
+ - 发布只冻结当前真相:`prepare` 不会刷新或重写人工文档。维护者必须先更新
55
+ README、INSTALL 与 CHANGELOG(包括必须与 `package.json` 版本一致的机器可读
56
+ `release-skill:release-version` 标记,以及当前包版本的正式 CHANGELOG 标题),
57
+ 再 prepare、审阅和批准。任一文档版本标记或 CHANGELOG 当前版本条目漂移时,
58
+ 发布前门禁失败关闭。
50
59
 
51
60
  保护规则只有一句话:**复制当前事实,冻结已审阅事实,不重写人工事实。**
52
61
 
@@ -95,24 +104,75 @@ npm exec --yes pnpm@10.17.1 -- install --frozen-lockfile
95
104
  !.release-skill/project.yaml
96
105
  ```
97
106
 
98
- ### 首次接入:先发现,再由人工定稿
107
+ ### 首次接入:不加载完整报告的确定性流程
99
108
 
100
- 项目尚无配置时,先运行只读 setup。它会扫描包、插件清单、Git remote、旧版
101
- `public-release.json` 和质量脚本,列出发布单元、tag、分支、前序公开基线及验证
102
- gate 候选,但不会读取 README 正文作为指令,也不会自动选择或执行脚本:
109
+ setup 默认只读。可能很大的完整报告只写入临时文件;用户和 Agent 只查看确定性的
110
+ `compactSummary`(紧凑摘要)审阅视图。紧凑摘要不能替代授权:`setupDigest` 仍绑定
111
+ 完整事实、候选和 answers。
103
112
 
104
113
  ```bash
105
- release-skill setup --root /absolute/path/to/my-project --json
114
+ PROJECT=/absolute/path/to/my-project
115
+ SETUP_SESSION="$(mktemp -d "${TMPDIR:-/tmp}/release-setup.XXXXXX")"
116
+ REPORT="$SETUP_SESSION/discovery.json"
117
+ ANSWERS="$SETUP_SESSION/answers.json"
118
+ BOUND_REPORT="$SETUP_SESSION/bound.json"
119
+ printf 'SETUP_SESSION=%s\nPROJECT=%s\n' "$SETUP_SESSION" "$PROJECT"
120
+
121
+ release-skill setup --root "$PROJECT" --json > "$REPORT" || test "$?" -eq 2
122
+ node -e 'const fs=require("node:fs");const r=JSON.parse(fs.readFileSync(process.argv[1],"utf8"));if(!r.compactSummary){console.error("compactSummary missing");process.exit(2)}process.stdout.write(JSON.stringify(r.compactSummary,null,2)+"\n")' "$REPORT"
123
+ ```
124
+
125
+ `NEEDS_INPUT` 和 `LOCAL_ONLY_DETECTED` 按设计返回退出码 2。若
126
+ `proposalConflicts` 非空,包括 `PUBLIC_REPO_AUTHORITY_CONFLICT` 或公开文件映射冲突,
127
+ 必须停止自动路径,由人工修正冲突的仓库或映射权威事实后重新运行 setup,不得猜测选边。
128
+
129
+ 没有冲突时,只能机械提取机器提案;Agent 不得重写或逐项抄写:
130
+
131
+ ```bash
132
+ SETUP_SESSION='/上一步打印的会话目录绝对路径'
133
+ PROJECT='/上一步打印的项目绝对路径'
134
+ REPORT="$SETUP_SESSION/discovery.json"
135
+ ANSWERS="$SETUP_SESSION/answers.json"
136
+ BOUND_REPORT="$SETUP_SESSION/bound.json"
137
+ node -e 'const fs=require("node:fs");const r=JSON.parse(fs.readFileSync(process.argv[1],"utf8"));if((r.proposalConflicts??[]).length){console.error("proposal conflicts require human resolution");process.exit(2)}if(!r.recommendedAnswers){console.error("recommendedAnswers missing");process.exit(2)}fs.writeFileSync(process.argv[2],JSON.stringify(r.recommendedAnswers,null,2)+"\n",{flag:"wx",mode:0o600})' "$REPORT" "$ANSWERS"
138
+
139
+ release-skill setup --root "$PROJECT" --answers "$ANSWERS" --json > "$BOUND_REPORT"
140
+ node -e 'const fs=require("node:fs");const r=JSON.parse(fs.readFileSync(process.argv[1],"utf8"));if(!r.compactSummary||!r.setupDigest){console.error("bound setup report incomplete");process.exit(2)}process.stdout.write(JSON.stringify({compactSummary:r.compactSummary,setupDigest:r.setupDigest},null,2)+"\n")' "$BOUND_REPORT"
141
+ printf 'SETUP_SESSION=%s\nPROJECT=%s\n' "$SETUP_SESSION" "$PROJECT"
106
142
  ```
107
143
 
108
- `NEEDS_INPUT` 和 `LOCAL_ONLY_DETECTED` 会按设计返回退出码 2:它们表示仍需人工决策,
109
- 不是内部崩溃。自动化应读取 JSON 的 `status`,不要把 setup 的所有非零退出码都当作
110
- 工具故障。
144
+ 只审阅这份绑定摘要和精确摘要值,并由用户确认一次。确认后使用其字面量首次创建配置:
145
+
146
+ ```bash
147
+ SETUP_SESSION=<上一步打印的会话目录绝对路径>
148
+ PROJECT=<上一步打印的项目绝对路径>
149
+ ANSWERS="$SETUP_SESSION/answers.json"
150
+ CREATED_REPORT="$SETUP_SESSION/created.json"
151
+ POST_REPORT="$SETUP_SESSION/post-setup.json"
152
+ ASSESS_REPORT="$SETUP_SESSION/assess.json"
153
+ release-skill setup --root "$PROJECT" --answers "$ANSWERS" \
154
+ --write --confirm-setup <已确认的 setupDigest> --json > "$CREATED_REPORT"
155
+ release-skill setup --root "$PROJECT" --json > "$POST_REPORT"
156
+ set +e
157
+ release-skill assess --root "$PROJECT" --offline --json > "$ASSESS_REPORT"
158
+ ASSESS_EXIT=$?
159
+ set -e
160
+ [ "$ASSESS_EXIT" -eq 0 ] || [ "$ASSESS_EXIT" -eq 1 ] || exit "$ASSESS_EXIT"
161
+ node -e 'const fs=require("node:fs");const [c,p,a]=process.argv.slice(1).map(x=>JSON.parse(fs.readFileSync(x,"utf8")));if(c.status!=="CONFIG_CREATED"||p.status!=="ALREADY_CONFIGURED"||!["ASSESSED","NEEDS_INPUT","BLOCKED"].includes(a.status)){process.exit(2)}process.stdout.write(JSON.stringify({created:c.status,postSetup:p.status,assessment:{status:a.status,summary:a.summary,gapCount:(a.gaps??[]).length,blockingCodes:(a.gaps??[]).filter(g=>g.severity==="error").map(g=>g.code)}},null,2)+"\n")' "$CREATED_REPORT" "$POST_REPORT" "$ASSESS_REPORT"
162
+ node -e 'require("node:fs").rmSync(process.argv[1],{recursive:true,force:false})' "$SETUP_SESSION"
163
+ ```
164
+
165
+ 写入必须返回 `CONFIG_CREATED`,下一次 setup 必须返回 `ALREADY_CONFIGURED`。已有配置
166
+ 永不重新生成,后续只做经审阅的增量编辑。解释器/包管理器间接脚本会以
167
+ `SIDE_EFFECTS_UNPROVEN` 排除,不会自动选择;项目特有 hook/gate 只有人工审阅后才
168
+ 增量加入:hook 编辑 `projectConfig.hooks`;gate 编辑 `verificationGates` 并将同一 id
169
+ 加入 `selectedGateIds`,随后重新运行绑定 dry-run。人工文件保持 `mode: preserve`;只有显式跨单元共享源才使用
170
+ `sourceScope: workspace`。
171
+
172
+ #### 进阶 schema 参考——不是首次接入主路径
111
173
 
112
- 审阅候选后,人工创建 answers JSON,其中 `projectConfig` 是完整配置,
113
- `selectedGateIds` 与其中 `verificationGates[].id` 必须精确一致;不需要个性化 gate
114
- 时显式使用空数组。带 answers 再 dry-run 一次,确认它绑定的新 `setupDigest`,最后
115
- 才允许首次创建配置:
174
+ 下面只说明 schema 形状。正常 setup 不应手写,而应按上文机械提取
175
+ `recommendedAnswers`。
116
176
 
117
177
  ```json
118
178
  {
@@ -150,13 +210,11 @@ release-skill setup --root /absolute/path/to/my-project --json
150
210
  }
151
211
  ```
152
212
 
153
- 这是完整的 schema 形状,不是项目事实的权威答案。仓库、渠道、基线与公开文件
154
- 都必须替换为本项目经审阅的事实;只有确认不存在任何历史公开版本时才可使用
155
- `mode: none`。
213
+ 这是 schema 参考,不是接入模板。正常 setup 必须使用机器提案;只有确认不存在任何
214
+ 历史公开版本时才可使用 `mode: none`。
156
215
 
157
- 如果要选择一个 dry-run 已报告的 gate,保留同一份完整 `projectConfig`,在其中增加
158
- 顶层 `verificationGates`,并让外层 `selectedGateIds` 完全一致。例如 dry-run 已
159
- 报告 `my-project-script-test` 时:
216
+ 下面的参考只说明人工审阅过的 gate `selectedGateIds` 的精确对应关系。需要时仅对
217
+ 已提取的机器提案做这一处增量编辑:
160
218
 
161
219
  ```json
162
220
  {
@@ -381,7 +439,8 @@ v0.1.1 生产发布验证完成后,npm 安装的 CLI 是受支持的用户入
381
439
  ```bash
382
440
  "${CLI[@]}" setup --root "$PROJECT" --json
383
441
  ```
384
- 按上文完成 answers 和精确 `setupDigest` 确认;配置已存在时跳过。
442
+ 按上文机械提取 `compactSummary` `recommendedAnswers`,只确认一次绑定后的
443
+ `setupDigest`;配置已存在时跳过。
385
444
  3. **就绪评估(只读):**
386
445
  ```bash
387
446
  "${CLI[@]}" assess --root "$PROJECT" --offline --json
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "name": "release-skill",
11
11
  "source": "./",
12
- "version": "0.1.3",
12
+ "version": "0.1.4",
13
13
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification"
14
14
  }
15
15
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-skill",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "release-skill contributors"