release-skill 0.2.6 → 0.2.8

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 (63) 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 +42 -0
  7. package/INSTALL.md +12 -12
  8. package/INSTALL.zh-CN.md +10 -10
  9. package/README.md +26 -11
  10. package/README.zh-CN.md +22 -11
  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 +2619 -1728
  14. package/adapters/claude/schemas/.render-manifest.json +2 -2
  15. package/adapters/claude/schemas/release-project.schema.json +60 -0
  16. package/adapters/claude/skills/release-prepare/SKILL.md +5 -0
  17. package/adapters/claude/skills/release-setup/SKILL.md +10 -1
  18. package/adapters/claude/skills/release-verify/SKILL.md +4 -2
  19. package/adapters/codex/.codex-plugin/plugin.json +2 -2
  20. package/adapters/codex/bin/release-skill.bundle.mjs +2619 -1728
  21. package/adapters/codex/schemas/.render-manifest.json +2 -2
  22. package/adapters/codex/schemas/release-project.schema.json +60 -0
  23. package/adapters/codex/skills/release-prepare/SKILL.md +5 -0
  24. package/adapters/codex/skills/release-setup/SKILL.md +10 -1
  25. package/adapters/codex/skills/release-verify/SKILL.md +4 -2
  26. package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
  27. package/adapters/kimi/bin/release-skill.bundle.mjs +2619 -1728
  28. package/adapters/kimi/schemas/.render-manifest.json +2 -2
  29. package/adapters/kimi/schemas/release-project.schema.json +60 -0
  30. package/adapters/kimi/skills/release-prepare/SKILL.md +5 -0
  31. package/adapters/kimi/skills/release-setup/SKILL.md +10 -1
  32. package/adapters/kimi/skills/release-verify/SKILL.md +4 -2
  33. package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
  34. package/adapters/workbuddy/bin/release-skill.bundle.mjs +2619 -1728
  35. package/adapters/workbuddy/schemas/.render-manifest.json +2 -2
  36. package/adapters/workbuddy/schemas/release-project.schema.json +60 -0
  37. package/adapters/workbuddy/skills/release-prepare/SKILL.md +5 -0
  38. package/adapters/workbuddy/skills/release-setup/SKILL.md +10 -1
  39. package/adapters/workbuddy/skills/release-verify/SKILL.md +4 -2
  40. package/bin/release-skill.bundle.mjs +2619 -1728
  41. package/package.json +1 -1
  42. package/schemas/.render-manifest.json +2 -2
  43. package/schemas/release-project.schema.json +60 -0
  44. package/skills/release-prepare/SKILL.md +5 -0
  45. package/skills/release-setup/SKILL.md +10 -1
  46. package/skills/release-verify/SKILL.md +4 -2
  47. package/skills-src/release-prepare/SKILL.md +5 -0
  48. package/skills-src/release-setup/SKILL.md +10 -1
  49. package/skills-src/release-verify/SKILL.md +4 -2
  50. package/src/adapters/npm.mjs +54 -2
  51. package/src/adapters/plugin-marketplace.mjs +4 -29
  52. package/src/commands/prepare.mjs +49 -3
  53. package/src/commands/publish.mjs +2 -2
  54. package/src/commands/reconcile.mjs +39 -0
  55. package/src/commands/setup.mjs +168 -0
  56. package/src/commands/verify.mjs +28 -1
  57. package/src/core/config.mjs +48 -0
  58. package/src/core/public-surface.mjs +509 -0
  59. package/src/npm/npm-entry-closure.mjs +195 -0
  60. package/src/platforms/codebuddy.mjs +19 -11
  61. package/src/platforms/codex.mjs +18 -10
  62. package/src/platforms/kimi.mjs +26 -39
  63. package/src/snapshot/frozen.mjs +51 -19
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "name": "release-skill",
11
11
  "source": "./",
12
- "version": "0.2.6",
12
+ "version": "0.2.8",
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.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "广州市风荷科技有限公司"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-skill",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "广州市风荷科技有限公司"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-skill",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "广州市风荷科技有限公司"
@@ -19,7 +19,7 @@
19
19
  ],
20
20
  "defaultPrompt": [
21
21
  "Assess this project for release readiness.",
22
- "Prepare a release plan for version 0.2.6.",
22
+ "Prepare a release plan for version 0.2.8.",
23
23
  "Help me understand the release workflow."
24
24
  ]
25
25
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-skill",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "广州市风荷科技有限公司"
package/CHANGELOG.md CHANGED
@@ -1,5 +1,47 @@
1
1
  # Changelog
2
2
 
3
+ <!-- release-skill:changelog:start version=0.2.8 locale=en baseline=sha256:ad6e8910f1af206463b5decf134b82590787b77f5a88faca3d8985d3686b111b -->
4
+ ## [0.2.8] - 2026-07-30
5
+
6
+ v0.2.8 adds a project-configurable expected public-surface gate so newly added or omitted release files cannot silently disappear from a frozen snapshot.
7
+
8
+ ### Added
9
+
10
+ - **Expected public surface**: release units can declare physical scan roots with compact `include` and `exclude` globs instead of maintaining a second per-file checker.
11
+ - **Exhaustive classification diagnostics**: prepare reports missing mappings, unexpected mappings, unclassified files, and files that ambiguously match both include and exclude rules.
12
+
13
+ ### Changed
14
+
15
+ - **Post-build release gate**: prepare scans the actual workspace after build hooks and blocks before source-authority closure, baseline capture, snapshot construction, or plan creation.
16
+ - **Bounded glob and path safety**: the built-in scanner supports `*`, `?`, and `**`, rejects overlapping or escaping scan roots, and keeps workspace control paths outside the project classification surface.
17
+
18
+ ### Fixed
19
+
20
+ - **Silent release-file omission**: a file classified for publication can no longer be absent from `publicFiles` while the release still reaches `PREPARED`.
21
+ <!-- release-skill:changelog:end version=0.2.8 locale=en -->
22
+
23
+
24
+ <!-- release-skill:changelog:start version=0.2.7 locale=en baseline=sha256:05d12ddcc435b3c4438561dba780481ead1ac7662d946c3c36ddf8123dcaebe3 -->
25
+ ## [0.2.7] - 2026-07-29
26
+
27
+ v0.2.7 prevents npm packages with missing declared runtime entries from being prepared, published, reconciled, or marked as verified.
28
+
29
+ ### Added
30
+
31
+ - **Static npm entry closure**: release-skill checks `bin`, `main`, `module`, `types`, `typings`, and concrete local `exports` targets against the exact frozen tarball and the freshly installed package.
32
+ - **Setup diagnostics**: setup reports declared npm entry candidates as tracked, untracked, ignored, missing, or non-regular without modifying project configuration.
33
+
34
+ ### Changed
35
+
36
+ - **Fail-closed unsupported exports**: wildcard exports and fallback arrays remain outside the minimal resolver boundary and now block release instead of being guessed or silently skipped.
37
+ - **Final write-boundary verification**: the npm adapter rechecks the same digest-verified tarball buffer immediately before registry publication.
38
+
39
+ ### Fixed
40
+
41
+ - **Empty-shell package verification**: a package can no longer reach `PREPARED`, remote publication, reconciliation, or `VERIFIED` when its declared runtime or type entry is absent.
42
+ <!-- release-skill:changelog:end version=0.2.7 locale=en -->
43
+
44
+
3
45
  <!-- release-skill:changelog:start version=0.2.6 locale=en baseline=sha256:ba7fe1d8cbae8ea3a539016c1231acd066f6dbf30b6e1ebb9db50e7c04e69253 -->
4
46
  ## [0.2.6] - 2026-07-29
5
47
 
package/INSTALL.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [简体中文](INSTALL.zh-CN.md)
4
4
 
5
- <!-- release-skill:release-version: 0.2.6 -->
5
+ <!-- release-skill:release-version: 0.2.8 -->
6
6
  ## Prerequisites
7
7
 
8
8
  - Node.js 22.0.0 or later
@@ -120,7 +120,7 @@ as a version-pinned **manual** install plus trusted observation/attestation:
120
120
  permanent writes are consistent. The run record gives the pinned install URL
121
121
  and the attestation path.
122
122
  2. Read the requirement at
123
- `<root>/.release-skill/kimi-attestations/<planDigest>/<plugin>/release-skill-kimi-manual-install.json`.
123
+ `<root>/.release-skill/kimi-attestations/<plugin>/release-skill-kimi-manual-install.json`.
124
124
  3. Launch Kimi Code and install from the release tag pinned to the exact
125
125
  version (never the bare repository URL, which installs the latest release or
126
126
  default branch), confirm the trust prompt, then reload. Before writing the
@@ -128,19 +128,19 @@ as a version-pinned **manual** install plus trusted observation/attestation:
128
128
  frozen version; otherwise do NOT issue an attestation.
129
129
 
130
130
  ```
131
- /plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.2.6
131
+ /plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.2.8
132
132
  /plugins reload
133
133
  ```
134
134
 
135
135
  4. Write the attestation JSON to
136
- `<root>/.release-skill/kimi-attestations/<planDigest>/<plugin>/release-skill-kimi-attestation.json`.
136
+ `<root>/.release-skill/kimi-attestations/<plugin>/release-skill-kimi-attestation.json`.
137
137
  `planDigest` MUST be the frozen **plan** digest; `result` accepts only
138
138
  `"passed"` or `"failed"`. Example:
139
139
 
140
140
  ```json
141
141
  {
142
142
  "platform": "kimi",
143
- "version": "0.2.6",
143
+ "version": "0.2.8",
144
144
  "planDigest": "<64-hex frozen plan digest>",
145
145
  "result": "passed",
146
146
  "actor": "<person who confirmed>",
@@ -150,8 +150,8 @@ as a version-pinned **manual** install plus trusted observation/attestation:
150
150
  ```
151
151
 
152
152
  5. Run `release-skill verify --run <publish-run>` (→
153
- `VERIFIED`). The verify command reads the attestation from the same
154
- plan-digest-keyed directory, so the fresh run directory does not lose the proof.
153
+ `VERIFIED`). The verify command reads the attestation from the stable
154
+ plugin-level directory, so the fresh run directory does not lose the proof.
155
155
 
156
156
  When a platform has no reliable automated verification, the bound human
157
157
  `passed`/`failed` attestation is authoritative. The `verify` command consumes
@@ -191,20 +191,20 @@ attestation (the same capability gap and closed loop as Kimi Code):
191
191
  install path fails closed. The run enters `PUBLISHED` after all remote
192
192
  permanent writes are consistent. The run record gives the attestation path.
193
193
  2. Read the requirement at
194
- `<root>/.release-skill/codebuddy-attestations/<planDigest>/<plugin>/release-skill-codebuddy-manual-install.json`.
194
+ `<root>/.release-skill/codebuddy-attestations/<plugin>/release-skill-codebuddy-manual-install.json`.
195
195
  3. Install release-skill from the bundled-family marketplace `ifoohoo/release-skill`
196
196
  (https://github.com/ifoohoo/release-skill). Before writing the
197
197
  attestation you MUST confirm the installed plugin manifest version equals the
198
198
  frozen version; otherwise do NOT issue an attestation.
199
199
  4. Write the attestation JSON to
200
- `<root>/.release-skill/codebuddy-attestations/<planDigest>/<plugin>/release-skill-codebuddy-attestation.json`.
200
+ `<root>/.release-skill/codebuddy-attestations/<plugin>/release-skill-codebuddy-attestation.json`.
201
201
  `planDigest` MUST be the frozen **plan** digest; `result` accepts only
202
202
  `"passed"` or `"failed"`. Example:
203
203
 
204
204
  ```json
205
205
  {
206
206
  "platform": "codebuddy",
207
- "version": "0.2.6",
207
+ "version": "0.2.8",
208
208
  "planDigest": "<64-hex frozen plan digest>",
209
209
  "result": "passed",
210
210
  "actor": "<person who confirmed>",
@@ -214,8 +214,8 @@ attestation (the same capability gap and closed loop as Kimi Code):
214
214
  ```
215
215
 
216
216
  5. Run `release-skill verify --run <publish-run>` (→
217
- `VERIFIED`). The verify command reads the attestation from the same
218
- plan-digest-keyed directory, so the fresh run directory does not lose the proof.
217
+ `VERIFIED`). The verify command reads the attestation from the stable
218
+ plugin-level directory, so the fresh run directory does not lose the proof.
219
219
 
220
220
  When a platform has no reliable automated verification, the bound human
221
221
  `passed`/`failed` attestation is authoritative. The `verify` command consumes
package/INSTALL.zh-CN.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](INSTALL.md)
4
4
 
5
- <!-- release-skill:release-version: 0.2.6 -->
5
+ <!-- release-skill:release-version: 0.2.8 -->
6
6
  ## 前置条件
7
7
 
8
8
  - Node.js 22.0.0 或更高版本
@@ -106,25 +106,25 @@ release-skill 把 Kimi 安装建模为“版本钉死的手动安装 + 可信观
106
106
  1. `publish` 先完成自动化远端写入(Git branch/tag、npm、GitHub Release)。
107
107
  `kimi-marketplace-install` 动作在 publish 阶段记录为 `DEFERRED`,不调用市场适配器,自动化安装路径失败关闭。全部远端永久写入一致后运行进入 `PUBLISHED`。运行记录会给出钉死的安装 URL 与证明写入路径。
108
108
  2. 读取 requirement:
109
- `<root>/.release-skill/kimi-attestations/<planDigest>/<plugin>/release-skill-kimi-manual-install.json`。
109
+ `<root>/.release-skill/kimi-attestations/<plugin>/release-skill-kimi-manual-install.json`。
110
110
  3. 启动 Kimi Code,从钉死到精确版本的 release tag 安装(切勿使用裸仓库地址,
111
111
  它会安装最新 release 或默认分支),确认信任提示后重新加载。写出证明之前,
112
112
  必须核实已安装插件清单版本等于冻结版本;否则**不得**出具证明。
113
113
 
114
114
  ```
115
- /plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.2.6
115
+ /plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.2.8
116
116
  /plugins reload
117
117
  ```
118
118
 
119
119
  4. 把人工结果 JSON 写入
120
- `<root>/.release-skill/kimi-attestations/<planDigest>/<plugin>/release-skill-kimi-attestation.json`。
120
+ `<root>/.release-skill/kimi-attestations/<plugin>/release-skill-kimi-attestation.json`。
121
121
  `planDigest` 必须是冻结**计划**摘要;`result` 只接受 `"passed"` 或 `"failed"`。
122
122
  示例:
123
123
 
124
124
  ```json
125
125
  {
126
126
  "platform": "kimi",
127
- "version": "0.2.6",
127
+ "version": "0.2.8",
128
128
  "planDigest": "<64 位十六进制冻结计划摘要>",
129
129
  "result": "passed",
130
130
  "actor": "<确认人>",
@@ -134,7 +134,7 @@ release-skill 把 Kimi 安装建模为“版本钉死的手动安装 + 可信观
134
134
  ```
135
135
 
136
136
  5. 运行 `release-skill verify --run <publish-run>`(→
137
- `VERIFIED`)。verify 命令从同一个按计划摘要命名的目录读取证明,因此新的
137
+ `VERIFIED`)。verify 命令从稳定的插件级目录读取证明,因此新的
138
138
  run 目录不会丢失该证明。
139
139
 
140
140
  当平台没有可靠的自动化验证时,绑定后的人工 `passed`/`failed` 结果即为权威判定。
@@ -166,19 +166,19 @@ codebuddy CLI 可以添加市场并安装插件,但 **`plugin marketplace add`
166
166
  `codebuddy-marketplace-install` 动作在 publish 阶段记录为 `DEFERRED`,不调用
167
167
  市场适配器,自动化安装路径失败关闭。全部远端永久写入一致后运行进入 `PUBLISHED`。运行记录会给出证明写入路径。
168
168
  2. 读取 requirement:
169
- `<root>/.release-skill/codebuddy-attestations/<planDigest>/<plugin>/release-skill-codebuddy-manual-install.json`。
169
+ `<root>/.release-skill/codebuddy-attestations/<plugin>/release-skill-codebuddy-manual-install.json`。
170
170
  3. 从 bundled-family 市场 `ifoohoo/release-skill`
171
171
  (https://github.com/ifoohoo/release-skill)安装 release-skill。
172
172
  写出证明之前,必须核实已安装插件清单版本等于冻结版本;否则**不得**出具证明。
173
173
  4. 把人工结果 JSON 写入
174
- `<root>/.release-skill/codebuddy-attestations/<planDigest>/<plugin>/release-skill-codebuddy-attestation.json`。
174
+ `<root>/.release-skill/codebuddy-attestations/<plugin>/release-skill-codebuddy-attestation.json`。
175
175
  `planDigest` 必须是冻结**计划**摘要;`result` 只接受 `"passed"` 或 `"failed"`。
176
176
  示例:
177
177
 
178
178
  ```json
179
179
  {
180
180
  "platform": "codebuddy",
181
- "version": "0.2.6",
181
+ "version": "0.2.8",
182
182
  "planDigest": "<64 位十六进制冻结计划摘要>",
183
183
  "result": "passed",
184
184
  "actor": "<确认人>",
@@ -188,7 +188,7 @@ codebuddy CLI 可以添加市场并安装插件,但 **`plugin marketplace add`
188
188
  ```
189
189
 
190
190
  5. 运行 `release-skill verify --run <publish-run>`(→
191
- `VERIFIED`)。verify 命令从同一个按计划摘要命名的目录读取证明,因此新的
191
+ `VERIFIED`)。verify 命令从稳定的插件级目录读取证明,因此新的
192
192
  run 目录不会丢失该证明。
193
193
 
194
194
  当平台没有可靠的自动化验证时,绑定后的人工 `passed`/`failed` 结果即为权威判定。
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [简体中文](README.zh-CN.md) · Installation: [English](INSTALL.md) / [简体中文](INSTALL.zh-CN.md)
4
4
 
5
- <!-- release-skill:release-version: 0.2.6 -->
5
+ <!-- release-skill:release-version: 0.2.8 -->
6
6
  Release preparation for Claude Code, CodeBuddy, WorkBuddy, Codex, and Kimi Code, with human-edited files kept intact.
7
7
 
8
8
  release-skill helps a maintainer answer three questions: what will be released,
@@ -14,27 +14,27 @@ Setup surfaces only the deterministic `compactSummary` review view; the full
14
14
  report stays in a temporary session directory.
15
15
 
16
16
  <!-- release-skill:managed:start id=latest-release -->
17
- **0.2.6** (2026-07-29)
17
+ **0.2.8** (2026-07-30)
18
18
 
19
- v0.2.6 adds a source-authority content gate so a production release cannot succeed while the project workspace's real default branch still exposes stale public files.
19
+ v0.2.8 adds a project-configurable expected public-surface gate so newly added or omitted release files cannot silently disappear from a frozen snapshot.
20
20
 
21
21
  **Added**
22
22
 
23
- - **Source-authority content closure**: prepare freezes the exact public input paths and executable modes that must exist on the configured source repository's actual default branch.
24
- - **Pre-publish remote proof**: publish compares the frozen closure with the remote default branch before any external write and records a digest-bound receipt that verify requires.
23
+ - **Expected public surface**: release units can declare physical scan roots with compact `include` and `exclude` globs instead of maintaining a second per-file checker.
24
+ - **Exhaustive classification diagnostics**: prepare reports missing mappings, unexpected mappings, unclassified files, and files that ambiguously match both include and exclude rules.
25
25
 
26
26
  **Changed**
27
27
 
28
- - **Branch topology tolerance**: projects may develop directly on the default branch or use release branches; compliance is based on final content, not merge ancestry or a hard-coded branch name.
29
- - **Minimal conflict policy**: divergent or conflicting source state fails closed with diagnostics; Release Skill does not auto-merge, rebase, force-push, or create a replacement branch workflow.
28
+ - **Post-build release gate**: prepare scans the actual workspace after build hooks and blocks before source-authority closure, baseline capture, snapshot construction, or plan creation.
29
+ - **Bounded glob and path safety**: the built-in scanner supports `*`, `?`, and `**`, rejects overlapping or escaping scan roots, and keeps workspace control paths outside the project classification surface.
30
30
 
31
31
  **Fixed**
32
32
 
33
- - **Stale workspace README after release**: production publishing now blocks when the source workspace's real default branch does not contain the frozen public README and other declared source inputs.
33
+ - **Silent release-file omission**: a file classified for publication can no longer be absent from `publicFiles` while the release still reaches `PREPARED`.
34
34
  <!-- release-skill:managed:end id=latest-release -->
35
35
 
36
36
  <!-- release-skill:capability:external-write-boundary -->
37
- > **Current boundary:** v0.2.6 is the current release (v0.2.2 previously held
37
+ > **Current boundary:** v0.2.8 is the current release (v0.2.2 previously held
38
38
  > published status before the platform verification convergence fix was added).
39
39
  > v0.1.1 completed a real production release to GitHub and npm — the first
40
40
  > production-verified milestone — followed by
@@ -52,7 +52,7 @@ v0.2.6 adds a source-authority content gate so a production release cannot succe
52
52
  > publish global preflight.
53
53
 
54
54
  <!-- release-skill:capability:safe-first-command -->
55
- > **Production path verified since the v0.1.1 milestone; v0.2.6 is the current
55
+ > **Production path verified since the v0.1.1 milestone; v0.2.8 is the current
56
56
  > release.** The npm-installed CLI is the supported user entry. Source checkout
57
57
  > is the development/contributor fallback.
58
58
  >
@@ -167,7 +167,12 @@ ACTOR=your-name
167
167
  ```
168
168
  The write must return `CONFIG_CREATED`; the next setup must return
169
169
  `ALREADY_CONFIGURED`. Existing configuration is never regenerated — make only
170
- reviewed incremental edits. Discovered scripts are `SIDE_EFFECTS_UNPROVEN`.
170
+ reviewed incremental edits. For npm units, setup also reports each concrete
171
+ `bin`/`main`/`module`/`types`/`typings`/`exports` target and legacy
172
+ `npmRequiredPackagePaths` as tracked, untracked, ignored, missing, or
173
+ non-regular. These are review candidates only: setup never copies them into
174
+ `publicFiles` or `requiredPublicFiles`. Discovered scripts are
175
+ `SIDE_EFFECTS_UNPROVEN`.
171
176
  Add a project-specific hook or gate only after human review: edit
172
177
  `projectConfig.hooks`, or edit `verificationGates` and add the same id to
173
178
  `selectedGateIds`, then rerun the bound dry-run.
@@ -485,6 +490,16 @@ npm tarballs, then checks remote commit/tree/tag integrity. Claude/Codex
485
490
  verification is automated; Kimi Code and CodeBuddy/WorkBuddy require a trusted
486
491
  attestation bound to the frozen plan digest.
487
492
 
493
+ For every npm distribution, `prepare` statically checks the exact packed
494
+ tarball against concrete `package.json` entry targets. `publish` and
495
+ `reconcile` repeat the same check on the frozen tarball before any remote
496
+ action, and `verify` repeats it against the exact installed package before
497
+ allowing `VERIFIED`. `smokeBin` remains optional: when configured it adds an
498
+ authorized runtime smoke test; when absent, the static entry-closure check is
499
+ still mandatory. Wildcard exports and fallback arrays are deliberately outside
500
+ the first minimal semantic boundary, so the static gate fails closed until the
501
+ declaration is narrowed to concrete targets.
502
+
488
503
  <!-- release-skill:capability:unsupported-scope -->
489
504
  - no automatic README generation or source-file overwrite;
490
505
  - no automatic conflict merge or rollback workflow;
package/README.zh-CN.md CHANGED
@@ -2,33 +2,33 @@
2
2
 
3
3
  [English](README.md) · 安装指南:[中文](INSTALL.zh-CN.md) / [English](INSTALL.md)
4
4
 
5
- <!-- release-skill:release-version: 0.2.6 -->
5
+ <!-- release-skill:release-version: 0.2.8 -->
6
6
  面向 Claude Code、CodeBuddy、WorkBuddy、Codex 和 Kimi Code 的发布准备工具,完整保留人工维护的文件内容。
7
7
 
8
8
  release-skill 帮助维护者回答三个问题:准备发布什么、还有哪些检查未通过、最终发布的内容是什么。它不重新生成、也不回写项目源文件。`prepare` 把每个配置的公开文件复制到隔离快照并验证字节——先冻结并供人工审阅,再从同一份冻结产物发布。`setup` 只显示确定性的 `compactSummary` 审阅视图,完整报告保留在临时会话目录中。
9
9
 
10
10
  <!-- release-skill:managed:start id=latest-release -->
11
- **0.2.6** (2026-07-29)
11
+ **0.2.8** (2026-07-30)
12
12
 
13
- v0.2.6 新增源码权威内容门,避免生产发布完成后,项目工作区的真实默认分支仍对外展示旧 README 等公开文件。
13
+ v0.2.8 新增项目可配置的期望发布面门禁,防止新增或漏声明的发布文件静默消失在冻结快照之外。
14
14
 
15
15
  **新增**
16
16
 
17
- - **源码权威内容闭包**:prepare 冻结必须出现在所配置源码仓真实默认分支上的公开输入路径、内容与可执行位。
18
- - **发布前远端证明**:publish 在任何外部写入前对比冻结闭包与远端默认分支,并生成摘要绑定的收据;verify 必须消费该收据。
17
+ - **期望发布面**:发布单元可以通过精简的 `include`、`exclude` glob 声明物理扫描根,无需再维护第二份逐文件检查器。
18
+ - **穷举分类诊断**:prepare 会报告缺失映射、多余映射、未分类文件,以及同时命中包含和排除规则的歧义文件。
19
19
 
20
20
  **变更**
21
21
 
22
- - **兼容不同分支拓扑**:项目既可直接在默认分支迭代,也可使用发布分支;是否合规只看最终内容,不依赖合并祖先关系或写死的分支名。
23
- - **最小冲突策略**:分叉或冲突状态失败关闭并给出诊断;Release Skill 不自动 merge、rebase、force-push,也不引入替代性的分支工作流。
22
+ - **构建后发布门禁**:prepare 在 build hook 后扫描真实工作区,并在源码权威闭集、基线捕获、快照构建和计划写入前阻断失败。
23
+ - **有界 glob 与路径安全**:内建扫描器支持 `*`、`?`、`**`,拒绝重叠或逃逸的扫描根,并将工作区控制面排除在项目分类范围之外。
24
24
 
25
25
  **修复**
26
26
 
27
- - **修复发布后工作区 README 陈旧**:当源码工作区真实默认分支缺少冻结后的 README 或其他声明输入时,生产发布会在外部写入前阻断。
27
+ - **发布文件静默漏项**:已归类为应发布的文件如果缺少 `publicFiles` 映射,发布将无法再进入 `PREPARED`。
28
28
  <!-- release-skill:managed:end id=latest-release -->
29
29
 
30
30
  <!-- release-skill:capability:external-write-boundary -->
31
- > **当前边界:** v0.2.6 是当前发布版本(v0.2.2 曾处于已发布状态,后因平台验证收敛修复而更新)。
31
+ > **当前边界:** v0.2.8 是当前发布版本(v0.2.2 曾处于已发布状态,后因平台验证收敛修复而更新)。
32
32
  > v0.1.1 已完成 GitHub 与 npm 的
33
33
  > 真实生产发布,是首次生产验证的历史里程碑,并从冻结 Git ref 完成精确 npm
34
34
  > 安装及 Claude/Codex 消费者安装验证;"当前发布版本"与"首次生产验证里程碑"
@@ -41,7 +41,7 @@ v0.2.6 新增源码权威内容门,避免生产发布完成后,项目工作
41
41
  > 远端唯一性检查在 `publish` 全局预检执行。
42
42
 
43
43
  <!-- release-skill:capability:safe-first-command -->
44
- > **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.2.6 是当前发布版本。**
44
+ > **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.2.8 是当前发布版本。**
45
45
  > npm 安装的 CLI 是受支持的用户入口;源码 checkout 保留为开发/贡献者路径。
46
46
  >
47
47
  > **第一条命令:**
@@ -152,7 +152,11 @@ ACTOR=your-name
152
152
  ```
153
153
  写入必须返回 `CONFIG_CREATED`,下一次 setup 必须返回 `ALREADY_CONFIGURED`。
154
154
  已有配置永不重新生成,后续只做经审阅的增量编辑。发现的脚本标记为
155
- `SIDE_EFFECTS_UNPROVEN`。只有在人工审阅之后才添加项目专属 hook gate:
155
+ `SIDE_EFFECTS_UNPROVEN`。对于 npm 单元,setup 还会把具体
156
+ `bin`/`main`/`module`/`types`/`typings`/`exports` 目标和旧
157
+ `npmRequiredPackagePaths` 标成已跟踪、未跟踪、已忽略、缺失或非普通文件。
158
+ 这些只是假设候选:setup 不会自动写入 `publicFiles` 或
159
+ `requiredPublicFiles`。只有在人工审阅之后才添加项目专属 hook 或 gate:
156
160
  编辑 `projectConfig.hooks`,或编辑 `verificationGates` 并把同一个 id 加入
157
161
  `selectedGateIds`,然后重新运行绑定 dry-run。配置已存在时跳过。
158
162
  完整多步流程见 [INSTALL.zh-CN.md](INSTALL.zh-CN.md#首次接入)。
@@ -437,6 +441,13 @@ hook 仅在人工审阅后、以 `--acknowledge-hook-side-effects` 显式授权
437
441
 
438
442
  每个适配器闭包都自带 CLI、skills 和 schemas 副本,安装后无需外部依赖即可运行。Claude/Codex 验证是自动化的;Kimi Code 和 CodeBuddy/WorkBuddy 需要绑定冻结计划摘要的可信证明。
439
443
 
444
+ 每个 npm 分发在 `prepare` 时都会针对精确封装的 tarball 静态校验
445
+ `package.json` 声明的具体入口。`publish` 与 `reconcile` 在任何远端动作前对同一
446
+ 冻结 tarball 重复校验,`verify` 则在允许进入 `VERIFIED` 前对精确安装目录重复校验。
447
+ `smokeBin` 仍是可选的:配置后增加需授权的运行时烟雾测试;未配置时,静态入口闭包
448
+ 检查仍然是强制门禁。通配符 exports 与 fallback array 刻意不纳入首版最小语义边界,
449
+ 静态门禁会阻断,直到入口声明收窄为具体目标。
450
+
440
451
  <!-- release-skill:capability:unsupported-scope -->
441
452
  - 不自动生成 README,不覆盖项目源文件;
442
453
  - 不自动合并冲突,也不要求回滚工作流;
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "name": "release-skill",
11
11
  "source": "./",
12
- "version": "0.2.6",
12
+ "version": "0.2.8",
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.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "广州市风荷科技有限公司"