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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +3 -3
- package/CHANGELOG.md +29 -0
- package/INSTALL.md +69 -32
- package/INSTALL.zh-CN.md +64 -26
- package/README.md +101 -37
- package/README.zh-CN.md +87 -28
- package/adapters/claude/.claude-plugin/marketplace.json +1 -1
- package/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/adapters/claude/bin/release-skill.bundle.mjs +79284 -0
- package/adapters/claude/bin/release-skill.mjs +34 -0
- package/adapters/claude/native/safe-write/binding.gyp +40 -0
- package/adapters/claude/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
- package/adapters/claude/native/safe-write/prebuilds.json +24 -0
- package/adapters/claude/native/safe-write/src/safe_write.cc +2032 -0
- package/adapters/claude/schemas/.render-manifest.json +37 -0
- package/adapters/claude/schemas/approval-record.schema.json +115 -0
- package/adapters/claude/schemas/artifact-lock.schema.json +111 -0
- package/adapters/claude/schemas/artifact-plan.schema.json +52 -0
- package/adapters/claude/schemas/artifact-policy.schema.json +76 -0
- package/adapters/claude/schemas/evidence-event.schema.json +89 -0
- package/adapters/claude/schemas/release-plan.schema.json +860 -0
- package/adapters/claude/schemas/release-project.schema.json +736 -0
- package/adapters/claude/schemas/release-run.schema.json +342 -0
- package/adapters/claude/skills/release-assess/SKILL.md +5 -6
- package/adapters/claude/skills/release-help/SKILL.md +11 -18
- package/adapters/claude/skills/release-prepare/SKILL.md +6 -6
- package/adapters/claude/skills/release-publish/SKILL.md +1 -4
- package/adapters/claude/skills/release-reconcile/SKILL.md +5 -5
- package/adapters/claude/skills/release-setup/SKILL.md +64 -80
- package/adapters/claude/skills/release-verify/SKILL.md +4 -7
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/release-skill.bundle.mjs +79284 -0
- package/adapters/codex/bin/release-skill.mjs +34 -0
- package/adapters/codex/native/safe-write/binding.gyp +40 -0
- package/adapters/codex/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
- package/adapters/codex/native/safe-write/prebuilds.json +24 -0
- package/adapters/codex/native/safe-write/src/safe_write.cc +2032 -0
- package/adapters/codex/schemas/.render-manifest.json +37 -0
- package/adapters/codex/schemas/approval-record.schema.json +115 -0
- package/adapters/codex/schemas/artifact-lock.schema.json +111 -0
- package/adapters/codex/schemas/artifact-plan.schema.json +52 -0
- package/adapters/codex/schemas/artifact-policy.schema.json +76 -0
- package/adapters/codex/schemas/evidence-event.schema.json +89 -0
- package/adapters/codex/schemas/release-plan.schema.json +860 -0
- package/adapters/codex/schemas/release-project.schema.json +736 -0
- package/adapters/codex/schemas/release-run.schema.json +342 -0
- package/adapters/codex/skills/release-assess/SKILL.md +12 -6
- package/adapters/codex/skills/release-help/SKILL.md +18 -18
- package/adapters/codex/skills/release-prepare/SKILL.md +13 -6
- package/adapters/codex/skills/release-publish/SKILL.md +8 -4
- package/adapters/codex/skills/release-reconcile/SKILL.md +12 -5
- package/adapters/codex/skills/release-setup/SKILL.md +71 -80
- package/adapters/codex/skills/release-verify/SKILL.md +11 -7
- package/bin/release-skill-cli.mjs +807 -0
- package/bin/release-skill.bundle.mjs +79284 -0
- package/bin/release-skill.mjs +23 -788
- package/package.json +6 -2
- package/references/02-project-config.md +2 -2
- package/schemas/release-plan.schema.json +7 -1
- package/schemas/release-project.schema.json +8 -0
- package/scripts/build-bundle.mjs +133 -0
- package/skills/release-assess/SKILL.md +5 -6
- package/skills/release-help/SKILL.md +11 -18
- package/skills/release-prepare/SKILL.md +6 -6
- package/skills/release-publish/SKILL.md +1 -4
- package/skills/release-reconcile/SKILL.md +5 -5
- package/skills/release-setup/SKILL.md +64 -80
- package/skills/release-verify/SKILL.md +4 -7
- package/skills-src/release-assess/SKILL.md +5 -6
- package/skills-src/release-help/SKILL.md +11 -18
- package/skills-src/release-prepare/SKILL.md +6 -6
- package/skills-src/release-publish/SKILL.md +1 -4
- package/skills-src/release-reconcile/SKILL.md +5 -5
- package/skills-src/release-setup/SKILL.md +64 -80
- package/skills-src/release-verify/SKILL.md +4 -7
- package/src/adapters/npm.mjs +5 -13
- package/src/adapters/plugin-marketplace.mjs +67 -31
- package/src/artifacts/policy.mjs +4 -7
- package/src/artifacts/safe-fs-backend-internal.mjs +69 -21
- package/src/commands/prepare.mjs +22 -1
- package/src/commands/publish.mjs +1 -0
- package/src/commands/setup.mjs +667 -28
- package/src/core/approval.mjs +4 -6
- package/src/core/config.mjs +8 -8
- package/src/core/pkg-root.mjs +22 -0
- package/src/core/plan.mjs +9 -4
- package/src/core/run.mjs +4 -4
- package/src/core/trusted-resource.mjs +96 -0
- package/src/docs/version-gate.mjs +164 -0
- package/src/producers/build-adapters.mjs +512 -55
- package/src/snapshot/frozen.mjs +133 -3
- package/src/snapshot/public-map.mjs +7 -4
- 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
|
|
13
|
-
>
|
|
14
|
-
>
|
|
15
|
-
>
|
|
16
|
-
>
|
|
17
|
-
>
|
|
18
|
-
>
|
|
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
|
-
>
|
|
22
|
-
>
|
|
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
|
-
|
|
101
|
-
`
|
|
102
|
-
|
|
109
|
+
setup 默认只读。可能很大的完整报告只写入临时文件;用户和 Agent 只查看确定性的
|
|
110
|
+
`compactSummary`(紧凑摘要)审阅视图。紧凑摘要不能替代授权:`setupDigest` 仍绑定
|
|
111
|
+
完整事实、候选和 answers。
|
|
103
112
|
|
|
104
113
|
```bash
|
|
105
|
-
|
|
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
|
-
|
|
109
|
-
|
|
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
|
-
|
|
113
|
-
`
|
|
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
|
-
|
|
154
|
-
|
|
155
|
-
`mode: none`。
|
|
213
|
+
这是 schema 参考,不是接入模板。正常 setup 必须使用机器提案;只有确认不存在任何
|
|
214
|
+
历史公开版本时才可使用 `mode: none`。
|
|
156
215
|
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
|
|
442
|
+
按上文机械提取 `compactSummary` 与 `recommendedAnswers`,只确认一次绑定后的
|
|
443
|
+
`setupDigest`;配置已存在时跳过。
|
|
385
444
|
3. **就绪评估(只读):**
|
|
386
445
|
```bash
|
|
387
446
|
"${CLI[@]}" assess --root "$PROJECT" --offline --json
|