release-skill 0.9.5 → 0.9.6
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 +1 -1
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +2 -2
- package/.kimi-plugin/plugin.json +1 -1
- package/CHANGELOG.md +27 -0
- package/INSTALL.md +2 -2
- package/INSTALL.zh-CN.md +2 -2
- package/README.md +16 -16
- package/README.zh-CN.md +14 -15
- 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 +172 -10
- package/adapters/claude/skills/release-help/SKILL.md +5 -1
- package/adapters/claude/skills/release-verify/SKILL.md +13 -1
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/release-skill.bundle.mjs +172 -10
- package/adapters/codex/skills/release-help/SKILL.md +5 -1
- package/adapters/codex/skills/release-verify/SKILL.md +13 -1
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +172 -10
- package/adapters/kimi/skills/release-help/SKILL.md +5 -1
- package/adapters/kimi/skills/release-verify/SKILL.md +13 -1
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +172 -10
- package/adapters/workbuddy/skills/release-help/SKILL.md +5 -1
- package/adapters/workbuddy/skills/release-verify/SKILL.md +13 -1
- package/bin/release-skill-cli.mjs +130 -6
- package/bin/release-skill.bundle.mjs +172 -10
- package/package.json +1 -1
- package/platform-manifest.json +4 -4
- package/skills/release-help/SKILL.md +5 -1
- package/skills/release-verify/SKILL.md +13 -1
- package/skills-src/release-help/SKILL.md +5 -1
- package/skills-src/release-verify/SKILL.md +13 -1
- package/src/adapters/plugin-marketplace.mjs +54 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.6",
|
|
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.9.
|
|
22
|
+
"Prepare a release plan for version 0.9.6.",
|
|
23
23
|
"Help me understand the release workflow."
|
|
24
24
|
]
|
|
25
25
|
}
|
package/.kimi-plugin/plugin.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.9.6 locale=en baseline=sha256:cc19a29543385bc4fbb52ac576b2310bca4b6963121dce82ada0ac933e237bfd -->
|
|
4
|
+
## [0.9.6] - 2026-09-02
|
|
5
|
+
|
|
6
|
+
0.9.6 is a local source candidate that adds a public `postverify` CLI for same-lineage postPublish hooks without ship state, and records host-added symlinks in Claude and Codex marketplace install trees without following them. It consumes the three Foundation packages at the exact 0.16.0 release. This note is not evidence of publication, real-host acceptance, consumer installation verification, or independent acceptance.
|
|
7
|
+
|
|
8
|
+
### Security
|
|
9
|
+
|
|
10
|
+
- `postverify` binds `planDigest`, the source `VERIFIED` run, each `hookId`, and its immutable hook approval; expired or mismatched approvals fail closed before hook execution, without adding a second state or authority.
|
|
11
|
+
- Declared payload symlinks, frozen-source symlinks, and legacy install-tree symlinks continue to fail closed; host-added symlinks are recorded as raw targets only.
|
|
12
|
+
- Any host plan remains a qualified frozen-plan path and requires a VERIFIED-run from the same release lineage before host acceptance; this source candidate does not provide that acceptance.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- Add the public `postverify` command for phase-by-phase `prepare` → `approve` → `publish` → `distribute` → `verify` lineages that need to run approved postPublish hooks without a ship state or a second authority.
|
|
17
|
+
- Record host-added symlinks in Claude and Codex marketplace install trees as paths and raw targets without following them, while keeping declared and frozen symlinks fail-closed.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Use Foundation 0.16.0 `createFilesystemRootBinding` and `observeFilesystemTree` in record mode for Claude and Codex marketplace install-tree observation; ordinary files keep the existing comparison, directories stay out of extra installed paths, and the frozen `manifestDigest` remains unchanged.
|
|
22
|
+
- Keep the narrow R-05 Hook cache v2 consumer path and the stable isolated install-tree record path; this candidate does not expand standalone-index or host acceptance support.
|
|
23
|
+
- Retain the explicit CodeBuddy plugin entry (`marketplace: release-skill`) and `--root <project-root>` in release-finish local-finish examples.
|
|
24
|
+
|
|
25
|
+
### Upgrade Notes
|
|
26
|
+
|
|
27
|
+
Prepare a new 0.9.6 plan when adopting these changes. The `postverify` command requires the same plan digest, a source `VERIFIED` run, and an immutable approval for each declared hook; an expired or mismatched approval stops before hook execution. Real-host acceptance still requires an officially published and VERIFIED release; the official 0.9.6 entry must be installed or reloaded first. A source candidate, an older installed entry, or the mere existence of plan and run files cannot complete real-host acceptance. Each selected host must complete a first successful update. On the second run, Claude, Kimi, CodeBuddy, and WorkBuddy must report `ALREADY_CURRENT`; Codex may report `UPDATED` only when it reinstalls the same exact 0.9.6 frozen reference, payload validation passes, and `restartRequired=true` is declared. This source candidate does not claim publication, GLAF4 acceptance, Hub postVerify, or consumer-installation verification.
|
|
28
|
+
<!-- release-skill:changelog:end version=0.9.6 locale=en -->
|
|
29
|
+
|
|
3
30
|
<!-- release-skill:changelog:start version=0.9.5 locale=en baseline=sha256:21c87f71244641b1819ee77ca067f65fd29caa64e42229184cd552b82829d86b -->
|
|
4
31
|
## [0.9.5] - 2026-09-02
|
|
5
32
|
|
package/INSTALL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[简体中文](INSTALL.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.9.
|
|
5
|
+
<!-- release-skill:release-version: 0.9.6 -->
|
|
6
6
|
## Prerequisites
|
|
7
7
|
|
|
8
8
|
- Node.js 22.0.0 or later
|
|
@@ -114,7 +114,7 @@ tag pinned to the exact version (never the bare repository URL, which installs
|
|
|
114
114
|
the latest release or default branch), confirm the trust prompt, then reload:
|
|
115
115
|
|
|
116
116
|
```
|
|
117
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.
|
|
117
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.6
|
|
118
118
|
/plugins reload
|
|
119
119
|
```
|
|
120
120
|
|
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.9.
|
|
5
|
+
<!-- release-skill:release-version: 0.9.6 -->
|
|
6
6
|
## 前置条件
|
|
7
7
|
|
|
8
8
|
- Node.js 22.0.0 或更高版本
|
|
@@ -104,7 +104,7 @@ Kimi Code 有交互式插件市场,但**没有可脚本化的非交互安装
|
|
|
104
104
|
(切勿使用裸仓库地址,它会安装最新 release 或默认分支),确认信任提示后重新加载:
|
|
105
105
|
|
|
106
106
|
```
|
|
107
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.
|
|
107
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.9.6
|
|
108
108
|
/plugins reload
|
|
109
109
|
```
|
|
110
110
|
|
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.9.
|
|
5
|
+
<!-- release-skill:release-version: 0.9.6 -->
|
|
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,35 +14,34 @@ 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.9.
|
|
17
|
+
**0.9.6** (2026-09-02)
|
|
18
18
|
|
|
19
|
-
0.9.
|
|
19
|
+
0.9.6 is a local source candidate that adds a public `postverify` CLI for same-lineage postPublish hooks without ship state, and records host-added symlinks in Claude and Codex marketplace install trees without following them. It consumes the three Foundation packages at the exact 0.16.0 release. This note is not evidence of publication, real-host acceptance, consumer installation verification, or independent acceptance.
|
|
20
20
|
|
|
21
21
|
**Security**
|
|
22
22
|
|
|
23
|
-
-
|
|
23
|
+
- `postverify` binds `planDigest`, the source `VERIFIED` run, each `hookId`, and its immutable hook approval; expired or mismatched approvals fail closed before hook execution, without adding a second state or authority.
|
|
24
|
+
- Declared payload symlinks, frozen-source symlinks, and legacy install-tree symlinks continue to fail closed; host-added symlinks are recorded as raw targets only.
|
|
24
25
|
- Any host plan remains a qualified frozen-plan path and requires a VERIFIED-run from the same release lineage before host acceptance; this source candidate does not provide that acceptance.
|
|
25
26
|
|
|
26
27
|
**Added**
|
|
27
28
|
|
|
28
|
-
-
|
|
29
|
-
-
|
|
29
|
+
- Add the public `postverify` command for phase-by-phase `prepare` → `approve` → `publish` → `distribute` → `verify` lineages that need to run approved postPublish hooks without a ship state or a second authority.
|
|
30
|
+
- Record host-added symlinks in Claude and Codex marketplace install trees as paths and raw targets without following them, while keeping declared and frozen symlinks fail-closed.
|
|
30
31
|
|
|
31
32
|
**Changed**
|
|
32
33
|
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
- The CodeBuddy plugin declares `marketplace: release-skill`, and both release-finish local-finish examples pass `--root <project-root>`.
|
|
37
|
-
- Keep the narrow R-05 Hook cache v2 consumer path in the current 0.9.5 candidate; this does not add a broader Hook cache or host acceptance surface.
|
|
34
|
+
- Use Foundation 0.16.0 `createFilesystemRootBinding` and `observeFilesystemTree` in record mode for Claude and Codex marketplace install-tree observation; ordinary files keep the existing comparison, directories stay out of extra installed paths, and the frozen `manifestDigest` remains unchanged.
|
|
35
|
+
- Keep the narrow R-05 Hook cache v2 consumer path and the stable isolated install-tree record path; this candidate does not expand standalone-index or host acceptance support.
|
|
36
|
+
- Retain the explicit CodeBuddy plugin entry (`marketplace: release-skill`) and `--root <project-root>` in release-finish local-finish examples.
|
|
38
37
|
|
|
39
38
|
**Upgrade Notes**
|
|
40
39
|
|
|
41
|
-
Prepare a new 0.9.
|
|
40
|
+
Prepare a new 0.9.6 plan when adopting these changes. The `postverify` command requires the same plan digest, a source `VERIFIED` run, and an immutable approval for each declared hook; an expired or mismatched approval stops before hook execution. Real-host acceptance still requires an officially published and VERIFIED release; the official 0.9.6 entry must be installed or reloaded first. A source candidate, an older installed entry, or the mere existence of plan and run files cannot complete real-host acceptance. Each selected host must complete a first successful update. On the second run, Claude, Kimi, CodeBuddy, and WorkBuddy must report `ALREADY_CURRENT`; Codex may report `UPDATED` only when it reinstalls the same exact 0.9.6 frozen reference, payload validation passes, and `restartRequired=true` is declared. This source candidate does not claim publication, GLAF4 acceptance, Hub postVerify, or consumer-installation verification.
|
|
42
41
|
<!-- release-skill:managed:end id=latest-release -->
|
|
43
42
|
|
|
44
43
|
<!-- release-skill:capability:external-write-boundary -->
|
|
45
|
-
> **Current boundary:** v0.9.
|
|
44
|
+
> **Current boundary:** v0.9.6 is the current source candidate. This README
|
|
46
45
|
> records intended scope and verification boundaries; it is not evidence of
|
|
47
46
|
> publication, consumer-installation verification, or independent acceptance.
|
|
48
47
|
> Release availability must be established from the corresponding release records
|
|
@@ -66,7 +65,7 @@ Prepare a new 0.9.5 plan when adopting these changes. Complete postVerify with `
|
|
|
66
65
|
> publish global preflight.
|
|
67
66
|
|
|
68
67
|
<!-- release-skill:capability:safe-first-command -->
|
|
69
|
-
> **Production path verified since the v0.1.1 milestone; v0.9.
|
|
68
|
+
> **Production path verified since the v0.1.1 milestone; v0.9.6 is the current
|
|
70
69
|
> source candidate. Its README does not establish publication,
|
|
71
70
|
> consumer-installation verification, or independent acceptance.**
|
|
72
71
|
> The npm-installed CLI is the supported user entry. Source checkout
|
|
@@ -95,8 +94,9 @@ checkpoints remain intact and use matching-version recovery. Evidence v1 stays
|
|
|
95
94
|
read-only; v2 uses a closed top level with phase extensions in `details`.
|
|
96
95
|
Summaries and recovery suggestions are diagnostic, never publication authority.
|
|
97
96
|
|
|
98
|
-
The current 0.9.
|
|
99
|
-
path and the stable isolated install-tree record
|
|
97
|
+
The current 0.9.6 candidate includes the narrow R-05 Hook cache v2 consumer
|
|
98
|
+
path, the public `postverify` path, and the stable isolated install-tree record
|
|
99
|
+
path (A2/A3). It still
|
|
100
100
|
excludes R-02 safe full-tree inventory, R-10 historical-release verification
|
|
101
101
|
implementation, real Kimi/WorkBuddy public-marketplace installation and
|
|
102
102
|
invocation gates, and an Audit public offline release-record verifier.
|
package/README.zh-CN.md
CHANGED
|
@@ -2,41 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) · 安装指南:[中文](INSTALL.zh-CN.md) / [English](INSTALL.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.9.
|
|
5
|
+
<!-- release-skill:release-version: 0.9.6 -->
|
|
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.9.
|
|
11
|
+
**0.9.6** (2026-09-02)
|
|
12
12
|
|
|
13
|
-
0.9.
|
|
13
|
+
0.9.6 是当前本地源码候选,新增无需 ship 状态即可处理同一发布谱系 postPublish hook 的公开 `postverify` 命令,并在 Claude 和 Codex 市场安装树中记录宿主新增的 symlink,不跟随链接。三项 Foundation 依赖均精确消费已发布的 0.16.0。本说明不代表已经发布、完成真实宿主验收、完成消费者安装验证或通过独立验收。
|
|
14
14
|
|
|
15
15
|
**安全**
|
|
16
16
|
|
|
17
|
-
-
|
|
17
|
+
- `postverify` 绑定 `planDigest`、源 `VERIFIED` run、每个 `hookId` 和对应的不可变 hook approval;批准过期或不匹配时,在执行 hook 前失败关闭,不增加第二状态或第二权威。
|
|
18
|
+
- 声明载荷 symlink、冻结源码 symlink 和 legacy 安装树 symlink 继续失败关闭;宿主新增 symlink 只记录原始目标。
|
|
18
19
|
- 任何宿主计划都必须是合格冻结计划,并要求同一发布谱系的 VERIFIED run 才能开始宿主验收;本源码候选不提供该验收。
|
|
19
20
|
|
|
20
21
|
**新增**
|
|
21
22
|
|
|
22
|
-
-
|
|
23
|
-
-
|
|
23
|
+
- 新增公开 `postverify` 命令,支持沿 `prepare` → `approve` → `publish` → `distribute` → `verify` 阶段谱系,在没有 ship 状态或第二权威的情况下执行已批准的 postPublish hook。
|
|
24
|
+
- Claude 和 Codex 市场安装树记录宿主新增 symlink 的路径和原始目标,不跟随链接;声明载荷和冻结源码中的 symlink 仍失败关闭。
|
|
24
25
|
|
|
25
26
|
**变更**
|
|
26
27
|
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
- CodeBuddy 插件显式声明 `marketplace: release-skill`;两个 release-finish 本机收尾示例都传入 `--root <project-root>`。
|
|
31
|
-
- 当前 0.9.5 候选保留窄范围的 R-05 Hook cache v2 消费路径;本版不扩大 Hook cache 或宿主验收范围。
|
|
28
|
+
- Claude 和 Codex 市场安装树使用 Foundation 0.16.0 的 `createFilesystemRootBinding` 与 record 模式 `observeFilesystemTree`;普通文件继续使用现有比较,目录不进入额外安装路径,冻结的 `manifestDigest` 保持不变。
|
|
29
|
+
- 保留窄范围的 R-05 Hook cache v2 消费路径和稳定的隔离安装树记录路径;本候选不扩展 standalone-index 或宿主验收支持。
|
|
30
|
+
- 保留 CodeBuddy 插件显式的 `marketplace: release-skill` 条目,以及 release-finish 本机收尾示例中的 `--root <project-root>`。
|
|
32
31
|
|
|
33
32
|
**升级说明**
|
|
34
33
|
|
|
35
|
-
采用这些改动时请重新准备 0.9.
|
|
34
|
+
采用这些改动时请重新准备 0.9.6 计划。`postverify` 要求同一计划摘要、源 `VERIFIED` run,以及每个已声明 hook 的不可变 approval;批准过期或不匹配时会在执行 hook 前停止。真实宿主验收仍要求正式发布并达到 VERIFIED;正式的 0.9.6 入口必须先安装或重载。源码候选、旧的已安装入口,或仅存在计划和运行文件,都不能完成真实宿主验收。每个选定宿主都必须先完成首次成功更新。第二次运行时,Claude、Kimi、CodeBuddy 和 WorkBuddy 必须返回 `ALREADY_CURRENT`;Codex 可以使用 `UPDATED`,但只有在重新安装同一精确 0.9.6 冻结引用、载荷验证通过并声明 `restartRequired=true` 时才允许这样返回。本源码候选不提供该验收,也不代表已经发布、完成 GLAF4 验收、完成 Hub postVerify 或完成消费者安装验证。
|
|
36
35
|
<!-- release-skill:managed:end id=latest-release -->
|
|
37
36
|
|
|
38
37
|
<!-- release-skill:capability:external-write-boundary -->
|
|
39
|
-
> **当前边界:** v0.9.
|
|
38
|
+
> **当前边界:** v0.9.6 只是当前源码候选。本 README 记录预期范围与验证边界,
|
|
40
39
|
> 不代表已经发布、完成消费者安装验证或通过独立验收。
|
|
41
40
|
> 版本可用性以对应发布记录及发布后验证结果为准。
|
|
42
41
|
> v0.4.1 是更早的已发布里程碑(v0.2.2 曾处于已发布状态,后因平台验证收敛修复而更新)。
|
|
@@ -52,7 +51,7 @@ release-skill 帮助维护者回答三个问题:准备发布什么、还有哪
|
|
|
52
51
|
> 远端唯一性检查在 `publish` 全局预检执行。
|
|
53
52
|
|
|
54
53
|
<!-- release-skill:capability:safe-first-command -->
|
|
55
|
-
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.9.
|
|
54
|
+
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.9.6 是当前源码候选,本 README 不证明该候选已经发布、完成消费者安装验证或通过独立验收。**
|
|
56
55
|
> npm 安装的 CLI 是受支持的用户入口;源码 checkout 保留为开发/贡献者路径。
|
|
57
56
|
>
|
|
58
57
|
> **第一条命令:**
|
|
@@ -70,7 +69,7 @@ marketplace 委托目标工作区发布的边界不变。
|
|
|
70
69
|
|
|
71
70
|
旧 production 计划缺少 `sourceAuthority` 时,在外部写入前拒绝。未发生外部写入的计划必须重新 prepare 并批准新摘要,不能补写旧计划或迁移批准。已有 `PARTIAL` 保留检查点,走匹配版本的恢复路径。evidence v1 只读;v2 顶层封闭,阶段扩展放在 `details`。摘要和恢复建议只作诊断,不构成发布权威。
|
|
72
71
|
|
|
73
|
-
当前 0.9.
|
|
72
|
+
当前 0.9.6 候选包含窄范围的 R-05 Hook cache v2 消费路径、公开 `postverify` 路径和稳定隔离安装树记录路径(A2/A3)。当前仍不包含 R-02 安全整树盘点、R-10 历史发布验证的产品实现、真实 Kimi/WorkBuddy 公开市场安装与调用门禁或 Audit 公开离线发布记录验证器。本范围说明不构成远端发布记录或消费者升级指引。
|
|
74
73
|
|
|
75
74
|
Foundation 三包精确依赖已发布的 0.16.0。新生成的 Kimi/CodeBuddy 同仓计划在 verify 阶段调用正式 `runPluginVerification`,把完整冻结载荷交给 Foundation,并记录最小的 `install-only` 观察收据。Kimi 映射为 `kimi-code`,CodeBuddy 映射为兼容的 `workbuddy`。`observed` 与 `payloadMatches` 只表示机制观察结果,不代表远端已发布或 release-skill 已完成领域验证。独立市场来源、真实市场安装和宿主调用仍是人工后续任务。
|
|
76
75
|
|
|
@@ -9,9 +9,9 @@ const __bundlePkgRoot = __bundleResolve(__bundleDirname(__bundleFileURLToPath(im
|
|
|
9
9
|
// Provide a real require() for CJS packages bundled into ESM (e.g. yaml, ajv).
|
|
10
10
|
const __bundleRealRequire = __bundleCreateRequire(import.meta.url);
|
|
11
11
|
// Package identity injected at build time — closure-independent --version probe.
|
|
12
|
-
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.
|
|
12
|
+
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.9.6"});
|
|
13
13
|
// Build-time source digest for the BUNDLE_STALE freshness gate (see above).
|
|
14
|
-
const __bundleSourceDigest = "
|
|
14
|
+
const __bundleSourceDigest = "8fd8e6c5f7796efe9e1f7153382b50c74d78a4b5f836f872837ff2f11e4daeb5";
|
|
15
15
|
|
|
16
16
|
var __create = Object.create;
|
|
17
17
|
var __defProp = Object.defineProperty;
|
|
@@ -109640,6 +109640,39 @@ function transportPayload(entries) {
|
|
|
109640
109640
|
contentDigest
|
|
109641
109641
|
}));
|
|
109642
109642
|
}
|
|
109643
|
+
function foundationPayloadMembers(observation) {
|
|
109644
|
+
return observation.members.map((member) => {
|
|
109645
|
+
if (member.type === "file") {
|
|
109646
|
+
return {
|
|
109647
|
+
path: member.path,
|
|
109648
|
+
type: member.type,
|
|
109649
|
+
mode: member.statMode & ~146,
|
|
109650
|
+
size: member.bytes,
|
|
109651
|
+
contentDigest: member.sha256
|
|
109652
|
+
};
|
|
109653
|
+
}
|
|
109654
|
+
if (member.type === "directory") {
|
|
109655
|
+
return { path: member.path, type: member.type, mode: member.statMode };
|
|
109656
|
+
}
|
|
109657
|
+
return {
|
|
109658
|
+
path: member.path,
|
|
109659
|
+
type: member.type,
|
|
109660
|
+
mode: member.statMode,
|
|
109661
|
+
size: member.bytes,
|
|
109662
|
+
targetBase64: member.targetBase64
|
|
109663
|
+
};
|
|
109664
|
+
});
|
|
109665
|
+
}
|
|
109666
|
+
async function observeMarketplaceInstallTree(installPath) {
|
|
109667
|
+
const canonicalInstallPath = await realpath22(installPath);
|
|
109668
|
+
const rootBinding = await createFilesystemRootBinding(canonicalInstallPath);
|
|
109669
|
+
const observation = await observeFilesystemTree({
|
|
109670
|
+
root: canonicalInstallPath,
|
|
109671
|
+
rootBinding,
|
|
109672
|
+
symlinkPolicy: { mode: "record" }
|
|
109673
|
+
});
|
|
109674
|
+
return foundationPayloadMembers(observation);
|
|
109675
|
+
}
|
|
109643
109676
|
function resolveMarketplaceRoot(platform, marketplaceIndexPath) {
|
|
109644
109677
|
const defaultMarketplace = platform.manifestPaths.marketplace;
|
|
109645
109678
|
if (!defaultMarketplace) {
|
|
@@ -109869,10 +109902,10 @@ async function verifyInstalledMarketplacePayload(action, context, installPath, c
|
|
|
109869
109902
|
throw new Error(`unsupported marketplace payload contract: ${JSON.stringify(payloadContract)}`);
|
|
109870
109903
|
}
|
|
109871
109904
|
if (payloadContract === PAYLOAD_CONTRACT_DECLARED_MANIFEST || payloadContract === PAYLOAD_CONTRACT_EXTERNAL_MARKETPLACE) {
|
|
109872
|
-
const
|
|
109905
|
+
const installedMembers = await observeMarketplaceInstallTree(installPath);
|
|
109873
109906
|
const authorityPayload = transportPayload(authorityEntries);
|
|
109874
109907
|
const installedByPath = new Map(
|
|
109875
|
-
|
|
109908
|
+
installedMembers.map((entry) => [entry.path, entry])
|
|
109876
109909
|
);
|
|
109877
109910
|
const conflicts = [];
|
|
109878
109911
|
for (const authorityEntry of authorityPayload) {
|
|
@@ -109897,11 +109930,19 @@ async function verifyInstalledMarketplacePayload(action, context, installPath, c
|
|
|
109897
109930
|
);
|
|
109898
109931
|
}
|
|
109899
109932
|
const authorityPaths = new Set(authorityPayload.map((entry) => entry.path));
|
|
109900
|
-
const
|
|
109933
|
+
const extraMembers = installedMembers.filter((entry) => entry.type !== "directory" && !authorityPaths.has(entry.path));
|
|
109934
|
+
const extraPaths = extraMembers.map((entry) => entry.path);
|
|
109901
109935
|
const extraInstalledPaths = extraPaths.slice(0, EXTRA_INSTALLED_PATHS_CAP);
|
|
109936
|
+
const extraInstalledLinks = extraMembers.filter((entry) => entry.type === "symlink").slice(0, EXTRA_INSTALLED_PATHS_CAP).map((entry) => ({
|
|
109937
|
+
path: entry.path,
|
|
109938
|
+
targetBase64: entry.targetBase64,
|
|
109939
|
+
bytes: entry.size,
|
|
109940
|
+
statMode: entry.mode
|
|
109941
|
+
}));
|
|
109902
109942
|
return {
|
|
109903
109943
|
manifestDigest: action.manifestDigest,
|
|
109904
109944
|
extraInstalledPaths,
|
|
109945
|
+
...extraInstalledLinks.length > 0 ? { extraInstalledLinks } : {},
|
|
109905
109946
|
...extraPaths.length > EXTRA_INSTALLED_PATHS_CAP ? { extraInstalledPathsTotal: extraPaths.length } : {}
|
|
109906
109947
|
};
|
|
109907
109948
|
}
|
|
@@ -109917,6 +109958,7 @@ function extraInstalledPathsAudit(binding) {
|
|
|
109917
109958
|
if (!binding || !Array.isArray(binding.extraInstalledPaths)) return {};
|
|
109918
109959
|
return {
|
|
109919
109960
|
extraInstalledPaths: binding.extraInstalledPaths,
|
|
109961
|
+
...Array.isArray(binding.extraInstalledLinks) && binding.extraInstalledLinks.length > 0 ? { extraInstalledLinks: binding.extraInstalledLinks } : {},
|
|
109920
109962
|
...binding.extraInstalledPathsTotal !== void 0 ? { extraInstalledPathsTotal: binding.extraInstalledPathsTotal } : {}
|
|
109921
109963
|
};
|
|
109922
109964
|
}
|
|
@@ -112320,6 +112362,7 @@ var init_plugin_marketplace = __esm({
|
|
|
112320
112362
|
async "src/adapters/plugin-marketplace.mjs"() {
|
|
112321
112363
|
init_contract();
|
|
112322
112364
|
init_installation_contract();
|
|
112365
|
+
init_src2();
|
|
112323
112366
|
init_frozen();
|
|
112324
112367
|
await init_registry2();
|
|
112325
112368
|
await init_kimi();
|
|
@@ -112332,6 +112375,8 @@ var init_plugin_marketplace = __esm({
|
|
|
112332
112375
|
PAYLOAD_CONTRACT_EXTERNAL_MARKETPLACE = "external-marketplace-v1";
|
|
112333
112376
|
EXTRA_INSTALLED_PATHS_CAP = 200;
|
|
112334
112377
|
PAYLOAD_CONFLICT_REPORT_CAP = 10;
|
|
112378
|
+
__name(foundationPayloadMembers, "foundationPayloadMembers");
|
|
112379
|
+
__name(observeMarketplaceInstallTree, "observeMarketplaceInstallTree");
|
|
112335
112380
|
CONSUMER_INSTALL_RECIPE_VERSION = "consumer-install-v1";
|
|
112336
112381
|
__name(resolveMarketplaceRoot, "resolveMarketplaceRoot");
|
|
112337
112382
|
__name(extractDeclaredPluginSource, "extractDeclaredPluginSource");
|
|
@@ -145779,7 +145824,7 @@ guardOutputStream(process.stdout);
|
|
|
145779
145824
|
guardOutputStream(process.stderr);
|
|
145780
145825
|
registerPathRedactor(redactSensitivePaths);
|
|
145781
145826
|
var execFile19 = promisify26(execFileCb22);
|
|
145782
|
-
var COMMANDS = /* @__PURE__ */ new Set(["help", "setup", "assess", "prepare", "approve", "publish", "reconcile", "verify", "ship", "post-release", "attest", "hooks", "artifacts", "docs", "distribute", "route", "lineage"]);
|
|
145827
|
+
var COMMANDS = /* @__PURE__ */ new Set(["help", "setup", "assess", "prepare", "approve", "publish", "reconcile", "verify", "postverify", "ship", "post-release", "attest", "hooks", "artifacts", "docs", "distribute", "route", "lineage"]);
|
|
145783
145828
|
function flushOutputStream(stream) {
|
|
145784
145829
|
if (!stream?.writable || stream.destroyed || stream.writableEnded || outputStreamStates.get(stream)?.failed) {
|
|
145785
145830
|
return Promise.resolve();
|
|
@@ -145970,6 +146015,11 @@ function getCapabilityMaturity() {
|
|
|
145970
146015
|
mode: "fresh consumer verification (protocol-tested; no OS/network sandbox)",
|
|
145971
146016
|
description: "Recheck remote state, exact npm installation, CLI help, and automated Claude/Codex installs before VERIFIED; Kimi/CodeBuddy remain unverified manual follow-ups"
|
|
145972
146017
|
},
|
|
146018
|
+
postverify: {
|
|
146019
|
+
available: true,
|
|
146020
|
+
mode: "independent postVerify execution",
|
|
146021
|
+
description: "Run approved postVerify hooks from a VERIFIED run in an independent run; never reads or writes ship state"
|
|
146022
|
+
},
|
|
145973
146023
|
distribute: {
|
|
145974
146024
|
available: true,
|
|
145975
146025
|
mode: "controlled production (protocol-tested; no OS/network sandbox)",
|
|
@@ -146003,6 +146053,7 @@ Commands:
|
|
|
146003
146053
|
publish Publish frozen GitHub/npm artifacts after approval
|
|
146004
146054
|
reconcile Resume PARTIAL state from evidence; conflicts require a human
|
|
146005
146055
|
verify Fresh remote and consumer verification; only this reaches VERIFIED
|
|
146056
|
+
postverify Run approved postVerify hooks from a VERIFIED run in an independent run
|
|
146006
146057
|
ship Resume one durable prepare -> approve -> publish -> verify flow; completes a parked
|
|
146007
146058
|
postVerify hook once its checkpoint approval is provided (--hook-approval)
|
|
146008
146059
|
post-release Inspect optional local finishing work after VERIFIED; update installed host plugins
|
|
@@ -146017,10 +146068,10 @@ Commands:
|
|
|
146017
146068
|
|
|
146018
146069
|
Options:
|
|
146019
146070
|
--root <path> Project root directory (default: cwd)
|
|
146020
|
-
--plan <path> Path to the release plan file
|
|
146071
|
+
--plan <path> Path to the release plan file (required for approve/publish/reconcile/verify/postverify)
|
|
146021
146072
|
--run <path> Path to the release run file, or a run directory whose release-run.json
|
|
146022
|
-
is resolved automatically (required for reconcile/verify)
|
|
146023
|
-
--approval <path> Path to the approval record
|
|
146073
|
+
is resolved automatically (required for reconcile/verify/postverify)
|
|
146074
|
+
--approval <path> Path to the release-level approval record (required for publish/postverify)
|
|
146024
146075
|
--production Prepare immutable Git/npm production artifacts
|
|
146025
146076
|
--output <path> Override prepare/approve output path (non-production only)
|
|
146026
146077
|
--run-dir <path> Override prepare run directory; production requires one direct child of .release-skill/runs
|
|
@@ -146057,7 +146108,7 @@ Options:
|
|
|
146057
146108
|
--install-path <path> Actual managed plugin path when closure verification requires it
|
|
146058
146109
|
--install-channel <desktop|cli> CodeBuddy installation channel when required
|
|
146059
146110
|
--approve Approve the ship plan (boolean; plan digest is auto-resolved)
|
|
146060
|
-
--hook-approval <path> Checkpoint approval for
|
|
146111
|
+
--hook-approval <path> Checkpoint approval for one requiresApproval hook (ship/distribute/postverify; repeatable)
|
|
146061
146112
|
--state <path> Override the durable ship state file
|
|
146062
146113
|
--update-local-hosts Update installed plugins for selected local hosts after VERIFIED
|
|
146063
146114
|
--hosts <ids> Comma-separated local hosts for post-release update. No local host is updated unless --hosts contains at least one id
|
|
@@ -147076,6 +147127,117 @@ if (command === "verify") {
|
|
|
147076
147127
|
await exitAfterFlush(err.exitCode ?? 1);
|
|
147077
147128
|
}
|
|
147078
147129
|
}
|
|
147130
|
+
if (command === "postverify") {
|
|
147131
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
147132
|
+
const helpText = `release-skill postverify - Run approved postVerify hooks from a VERIFIED run
|
|
147133
|
+
|
|
147134
|
+
Usage:
|
|
147135
|
+
release-skill postverify [--root <path>] --plan <path> --approval <path> --run <path> [options]
|
|
147136
|
+
|
|
147137
|
+
Required options:
|
|
147138
|
+
--plan <path> Path to the release plan file
|
|
147139
|
+
--approval <path> Path to the release-level approval record
|
|
147140
|
+
--run <path> Path to the VERIFIED verify run file or directory
|
|
147141
|
+
|
|
147142
|
+
Optional options:
|
|
147143
|
+
--root <path> Project root directory (default: cwd)
|
|
147144
|
+
--hook-approval <path> Checkpoint approval for a requiresApproval postVerify hook (repeatable)
|
|
147145
|
+
--json Output results as JSON
|
|
147146
|
+
-h, --help Show this help message and exit
|
|
147147
|
+
|
|
147148
|
+
This command creates an independent postVerify run and never reads or writes ship state.`;
|
|
147149
|
+
if (hasJson) {
|
|
147150
|
+
console.log(JSON.stringify({
|
|
147151
|
+
command: "postverify",
|
|
147152
|
+
status: "HELP",
|
|
147153
|
+
usage: "release-skill postverify [--root <path>] --plan <path> --approval <path> --run <path> [options]",
|
|
147154
|
+
options: {
|
|
147155
|
+
"--root": "Project root directory (default: cwd)",
|
|
147156
|
+
"--plan": "Path to the release plan file (required)",
|
|
147157
|
+
"--approval": "Path to the release-level approval record (required)",
|
|
147158
|
+
"--run": "Path to the VERIFIED verify run file or directory (required)",
|
|
147159
|
+
"--hook-approval": "Checkpoint approval for a requiresApproval postVerify hook (repeatable)",
|
|
147160
|
+
"--json": "Output results as JSON",
|
|
147161
|
+
"-h, --help": "Show this help message and exit"
|
|
147162
|
+
},
|
|
147163
|
+
message: "Creates an independent postVerify run and never reads or writes ship state."
|
|
147164
|
+
}, null, 2));
|
|
147165
|
+
} else {
|
|
147166
|
+
console.log(helpText);
|
|
147167
|
+
}
|
|
147168
|
+
await exitAfterFlush(0);
|
|
147169
|
+
}
|
|
147170
|
+
let malformedValuedFlag;
|
|
147171
|
+
const value = /* @__PURE__ */ __name((flag) => {
|
|
147172
|
+
let firstValue;
|
|
147173
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
147174
|
+
if (args[i] !== flag) continue;
|
|
147175
|
+
const next = args[i + 1];
|
|
147176
|
+
if (!next || next.startsWith("-")) {
|
|
147177
|
+
malformedValuedFlag ??= flag;
|
|
147178
|
+
continue;
|
|
147179
|
+
}
|
|
147180
|
+
firstValue ??= next;
|
|
147181
|
+
}
|
|
147182
|
+
return firstValue;
|
|
147183
|
+
}, "value");
|
|
147184
|
+
const root = resolve41(value("--root") ?? process.cwd());
|
|
147185
|
+
const planPath = value("--plan");
|
|
147186
|
+
const approvalPath = value("--approval");
|
|
147187
|
+
const runPath = value("--run");
|
|
147188
|
+
const postpublishApprovalPaths = [];
|
|
147189
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
147190
|
+
if (args[i] === "--hook-approval") {
|
|
147191
|
+
const next = args[i + 1];
|
|
147192
|
+
if (!next || next.startsWith("-")) {
|
|
147193
|
+
malformedValuedFlag ??= "--hook-approval";
|
|
147194
|
+
} else {
|
|
147195
|
+
postpublishApprovalPaths.push(resolve41(next));
|
|
147196
|
+
}
|
|
147197
|
+
}
|
|
147198
|
+
}
|
|
147199
|
+
if (malformedValuedFlag || !planPath || !approvalPath || !runPath) {
|
|
147200
|
+
const msg = "postverify requires --plan <path>, --approval <path>, and --run <path>";
|
|
147201
|
+
if (hasJson) {
|
|
147202
|
+
console.log(JSON.stringify({ error: MISSING_PARAMETERS, message: msg, exitCode: EXIT_CODE_MAP[MISSING_PARAMETERS] }));
|
|
147203
|
+
} else {
|
|
147204
|
+
console.error(`Error: ${msg}`);
|
|
147205
|
+
}
|
|
147206
|
+
await exitAfterFlush(EXIT_CODE_MAP[MISSING_PARAMETERS]);
|
|
147207
|
+
}
|
|
147208
|
+
try {
|
|
147209
|
+
const { postVerifyRelease: postVerifyRelease2 } = await init_postverify().then(() => postverify_exports);
|
|
147210
|
+
const result2 = await postVerifyRelease2({
|
|
147211
|
+
planPath: resolve41(planPath),
|
|
147212
|
+
approvalPath: resolve41(approvalPath),
|
|
147213
|
+
sourceRunPath: resolve41(runPath),
|
|
147214
|
+
root,
|
|
147215
|
+
...postpublishApprovalPaths.length > 0 ? { postpublishApprovalPaths } : {}
|
|
147216
|
+
});
|
|
147217
|
+
if (hasJson) {
|
|
147218
|
+
console.log(JSON.stringify(result2, null, 2));
|
|
147219
|
+
} else {
|
|
147220
|
+
console.log(`PostVerify status: ${result2.status}`);
|
|
147221
|
+
for (const cp4 of result2.checkpoints ?? []) {
|
|
147222
|
+
console.log(` ${cp4.actionId}: ${cp4.status}`);
|
|
147223
|
+
}
|
|
147224
|
+
if (result2.runPath) console.log(`PostVerify run: ${result2.runPath}`);
|
|
147225
|
+
}
|
|
147226
|
+
await exitAfterFlush(result2.status === "DISTRIBUTED" ? 0 : 1);
|
|
147227
|
+
} catch (err) {
|
|
147228
|
+
if (hasJson) {
|
|
147229
|
+
console.log(JSON.stringify({
|
|
147230
|
+
error: err.code ?? "UNKNOWN_ERROR",
|
|
147231
|
+
message: err.message,
|
|
147232
|
+
details: err.details ?? {},
|
|
147233
|
+
exitCode: err.exitCode ?? 1
|
|
147234
|
+
}));
|
|
147235
|
+
} else {
|
|
147236
|
+
console.error(`Error: ${err.message}`);
|
|
147237
|
+
}
|
|
147238
|
+
await exitAfterFlush(err.exitCode ?? 1);
|
|
147239
|
+
}
|
|
147240
|
+
}
|
|
147079
147241
|
if (command === "publish") {
|
|
147080
147242
|
const rootIdx = args.indexOf("--root");
|
|
147081
147243
|
const rawRoot = rootIdx !== -1 && args[rootIdx + 1] ? args[rootIdx + 1] : process.cwd();
|
|
@@ -12,7 +12,7 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
12
12
|
## 职责
|
|
13
13
|
|
|
14
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
|
|
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
16
|
- 最小示例:展示从 release-help 到 release-assess 的最短路径
|
|
17
17
|
- 只读诊断:运行 dry-run 检查,不修改任何文件
|
|
18
18
|
- 故障引导:根据错误码指向对应的修复 Skill
|
|
@@ -51,6 +51,10 @@ node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" ship --root <path> --target-v
|
|
|
51
51
|
# 多发布单元项目显式选择本轮范围;未传 --unit 时仍为全部单元
|
|
52
52
|
node "${CLAUDE_PLUGIN_ROOT}/bin/release-skill.mjs" ship --root <path> \
|
|
53
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
|
|
54
58
|
# 开发阶段执行声明 hooks 并生成 prepare 可复用的内容绑定收据
|
|
55
59
|
# 配置时刻即授权(FM-16 处置 A):hook 是任意本地进程、无隔离、触发前无确认点,
|
|
56
60
|
# 命令调用本身即授权执行配置中的 hooks
|