release-skill 0.1.5 → 0.1.7
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 +3 -3
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +4 -4
- package/CHANGELOG.md +108 -0
- package/INSTALL.md +81 -1
- package/INSTALL.zh-CN.md +69 -1
- package/LICENSE +1 -0
- package/NOTICE +10 -0
- package/README.md +181 -8
- package/README.zh-CN.md +153 -8
- package/adapters/claude/.claude-plugin/marketplace.json +3 -3
- package/adapters/claude/.claude-plugin/plugin.json +2 -2
- package/adapters/claude/bin/release-skill.bundle.mjs +14182 -10017
- package/adapters/claude/bin/release-skill.mjs +24 -4
- package/adapters/claude/native/safe-write/binding.gyp +2 -1
- package/adapters/claude/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
- package/adapters/claude/native/safe-write/prebuilds.json +1 -1
- package/adapters/claude/schemas/.render-manifest.json +10 -10
- package/adapters/claude/schemas/release-project.schema.json +118 -0
- package/adapters/claude/skills/release-help/SKILL.md +21 -0
- package/adapters/claude/skills/release-prepare/SKILL.md +17 -6
- package/adapters/claude/skills/release-publish/SKILL.md +3 -1
- package/adapters/claude/skills/release-reconcile/SKILL.md +1 -1
- package/adapters/codex/.codex-plugin/plugin.json +4 -4
- package/adapters/codex/bin/release-skill.bundle.mjs +14182 -10017
- package/adapters/codex/bin/release-skill.mjs +24 -4
- package/adapters/codex/native/safe-write/binding.gyp +2 -1
- package/adapters/codex/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
- package/adapters/codex/native/safe-write/prebuilds.json +1 -1
- package/adapters/codex/schemas/.render-manifest.json +10 -10
- package/adapters/codex/schemas/release-project.schema.json +118 -0
- package/adapters/codex/skills/release-help/SKILL.md +21 -0
- package/adapters/codex/skills/release-prepare/SKILL.md +17 -6
- package/adapters/codex/skills/release-publish/SKILL.md +3 -1
- package/adapters/codex/skills/release-reconcile/SKILL.md +1 -1
- package/bin/release-skill-cli.mjs +163 -4
- package/bin/release-skill.bundle.mjs +14182 -10017
- package/bin/release-skill.mjs +24 -4
- package/native/safe-write/binding.gyp +2 -1
- package/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
- package/native/safe-write/prebuilds.json +1 -1
- package/package.json +13 -5
- package/references/.render-manifest.json +4 -4
- package/references/02-project-config.md +24 -0
- package/references/05-evidence-and-errors.md +5 -0
- package/schemas/.render-manifest.json +10 -10
- package/schemas/release-project.schema.json +118 -0
- package/scripts/build-bundle.mjs +15 -2
- package/skills/release-help/SKILL.md +21 -0
- package/skills/release-prepare/SKILL.md +17 -6
- package/skills/release-publish/SKILL.md +3 -1
- package/skills/release-reconcile/SKILL.md +1 -1
- package/skills-src/release-help/SKILL.md +21 -0
- package/skills-src/release-prepare/SKILL.md +17 -6
- package/skills-src/release-publish/SKILL.md +3 -1
- package/skills-src/release-reconcile/SKILL.md +1 -1
- package/src/artifacts/transaction-journal.mjs +1126 -105
- package/src/artifacts/transaction.mjs +313 -130
- package/src/commands/docs.mjs +332 -0
- package/src/commands/prepare.mjs +316 -17
- package/src/core/errors.mjs +64 -2
- package/src/core/redact.mjs +206 -0
- package/src/docs/changelog-renderer.mjs +853 -0
- package/src/docs/config.mjs +337 -0
- package/src/docs/notes-loader.mjs +432 -0
- package/src/docs/notes.mjs +553 -0
- package/src/docs/readme-renderer.mjs +647 -0
- package/src/docs/refresh-planner.mjs +542 -0
- package/src/docs/refresh-service.mjs +675 -0
package/README.zh-CN.md
CHANGED
|
@@ -2,15 +2,39 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) · 安装指南:[中文](INSTALL.zh-CN.md) / [English](INSTALL.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.1.
|
|
5
|
+
<!-- release-skill:release-version: 0.1.7 -->
|
|
6
6
|
面向 Claude Code 和 Codex 的发布准备工具,完整保留人工维护的文件内容。
|
|
7
7
|
|
|
8
8
|
release-skill 帮助维护者回答三个问题:准备发布什么、还有哪些检查未通过、最终
|
|
9
9
|
发布的字节究竟是什么。它先冻结并供人工审阅,再从同一份冻结制品发布,不会在
|
|
10
10
|
最后一步重新生成 README、重新打包活动工作区或覆盖人工内容。
|
|
11
11
|
|
|
12
|
+
<!-- release-skill:managed:start id=latest-release -->
|
|
13
|
+
**0.1.7** (2026-07-23)
|
|
14
|
+
|
|
15
|
+
v0.1.7 是一个组织迁移版本。公开 GitHub 仓库从 `mzdbxqh/release-skill` 迁移至 `ifoohoo/release-skill`(仓库名不变,GitHub 对旧 URL 做重定向),项目新增明确的公司维护主体与版权持有人(广州市风荷科技有限公司),并将面向未来版本的仓库、维护主体、作者与版权元数据在 npm 包、插件市场清单、NOTICE、LICENSE 与发布配置中统一对齐到新组织。npm 包名(`release-skill`)与 npm 发布身份(`publisher: mzdbxqh`)保持不变,已发布的 v0.1.6 标签、GitHub Release 与 npm 版本不被改写。
|
|
16
|
+
|
|
17
|
+
**变更**
|
|
18
|
+
|
|
19
|
+
- **公开仓库迁移至 `ifoohoo` 组织**:公开 GitHub 仓库从
|
|
20
|
+
`mzdbxqh/release-skill` 转移到 `ifoohoo/release-skill`,仓库名不变。默认分支仍为
|
|
21
|
+
`main`,v0.1.6 标签、发行版与历史均被保留,旧 URL 以 HTTP 301 重定向到新位置。
|
|
22
|
+
发布配置(`publicRepo` 与绑定的 `previousPublicBaseline`)现在指向
|
|
23
|
+
`ifoohoo/release-skill`,并以公开 v0.1.6 提交
|
|
24
|
+
`48fb2a258a2786c2e32136ad67bd51f3a280b3b8` 作为上一公开基线。
|
|
25
|
+
- **公司维护主体与版权**:MIT LICENSE(根目录与公开包)现在携带 release-skill
|
|
26
|
+
贡献者与广州市风荷科技有限公司的双行版权声明;NOTICE 明确项目由广州市风荷科技
|
|
27
|
+
有限公司维护,并说明 GitHub 仓库转移属于托管位置与维护身份的行政变更,本身不构成
|
|
28
|
+
著作权转让。
|
|
29
|
+
- **面向未来版本的元数据与组织对齐**:npm `package.json` 的仓库、主页与问题
|
|
30
|
+
跟踪地址指向 `ifoohoo/release-skill`,并在保留 release-skill 贡献者的同时新增公司
|
|
31
|
+
作者。Claude Code 插件市场所有者现在标识 `ifoohoo` 组织。npm 包名
|
|
32
|
+
(`release-skill`)与 npm 发布身份(`publisher: mzdbxqh`)保持不变。
|
|
33
|
+
<!-- release-skill:managed:end id=latest-release -->
|
|
34
|
+
|
|
12
35
|
<!-- release-skill:capability:external-write-boundary -->
|
|
13
|
-
> **当前边界:** v0.1.
|
|
36
|
+
> **当前边界:** v0.1.7 是当前发布版本(v0.1.6 完成真实生产验证后曾处于这一状态)。
|
|
37
|
+
> v0.1.1 已完成 GitHub 与 npm 的
|
|
14
38
|
> 真实生产发布,是首次生产验证的历史里程碑,并从冻结 Git ref 完成精确 npm
|
|
15
39
|
> 安装及 Claude/Codex 消费者安装验证;“当前发布版本”与“首次生产验证里程碑”
|
|
16
40
|
> 是两个不同的事实,不得混写成同一含义。同一工作流还通过了本地
|
|
@@ -22,7 +46,7 @@ release-skill 帮助维护者回答三个问题:准备发布什么、还有哪
|
|
|
22
46
|
> 远端唯一性检查在 `publish` 全局预检执行。
|
|
23
47
|
|
|
24
48
|
<!-- release-skill:capability:safe-first-command -->
|
|
25
|
-
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.1.
|
|
49
|
+
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.1.7 是当前发布版本。**
|
|
26
50
|
> npm 安装的 CLI 是受支持的用户入口;源码 checkout 保留为开发/贡献者路径。
|
|
27
51
|
>
|
|
28
52
|
> **第一条命令:**
|
|
@@ -61,6 +85,10 @@ release-skill 不重新生成、也不回写项目源文件。`prepare` 从当
|
|
|
61
85
|
|
|
62
86
|
## 快速开始
|
|
63
87
|
|
|
88
|
+
下文每个只读步骤都把可能很大的报告保存在临时文件中,只展示确定性的
|
|
89
|
+
`compactSummary`(紧凑摘要)审阅视图;紧凑摘要只是审阅辅助,不能替代绑定摘要
|
|
90
|
+
授权。
|
|
91
|
+
|
|
64
92
|
### 安装 / 前置条件
|
|
65
93
|
|
|
66
94
|
- Node.js 22+
|
|
@@ -456,8 +484,9 @@ v0.1.1 生产发布验证完成后,npm 安装的 CLI 是受支持的用户入
|
|
|
456
484
|
5. **人工审阅:** 检查返回的 `planPath`、`externalActions`、
|
|
457
485
|
`units[].targetVersion` 和 `planDigest`。每个发布单元的快照位于
|
|
458
486
|
`<evidenceDir>/snapshots/<unit-id>/`。release-skill 自身只把数据写入
|
|
459
|
-
`.release-skill/`;获得授权的项目 hook/gate
|
|
460
|
-
|
|
487
|
+
`.release-skill/`;获得授权的项目 hook/gate 是没有操作系统沙箱的任意项目
|
|
488
|
+
进程,可能写入其他位置、访问网络,并读取当前账号可访问的凭据、令牌、密钥和
|
|
489
|
+
环境变量。
|
|
461
490
|
6. **生产计划冻结:**
|
|
462
491
|
```bash
|
|
463
492
|
PRODUCTION_JSON=$("${CLI[@]}" prepare --root "$PROJECT" --online --production \
|
|
@@ -485,7 +514,9 @@ v0.1.1 生产发布验证完成后,npm 安装的 CLI 是受支持的用户入
|
|
|
485
514
|
`latestApprovalPath` 指向 `.release-skill/approval-record.json`,它只是可变便利
|
|
486
515
|
副本,不得传给生产 publish/reconcile。批准 24 小时失效;PARTIAL 恢复可为同一
|
|
487
516
|
plan 重新批准,同时逐字节保留全部旧批准。后续必须使用返回的 immutable
|
|
488
|
-
`approvalPath` 和 `expiresAt
|
|
517
|
+
`approvalPath` 和 `expiresAt`。`--actor` 只是未经认证的本地审计标签:
|
|
518
|
+
release-skill 不执行身份认证、不提供数字签名,因此无法证明真人已经批准——
|
|
519
|
+
它只记录操作者自报的身份。
|
|
489
520
|
8. **发布(从此开始写远端):**
|
|
490
521
|
```bash
|
|
491
522
|
PUBLISH_JSON=$("${CLI[@]}" publish --root "$PROJECT" \
|
|
@@ -516,6 +547,94 @@ GitHub Release → Claude/Codex 插件市场(marketplace)安装”执行并
|
|
|
516
547
|
默认分支名为 `release/<tag>`,可由每个 unit 的 `production.branchTemplate` 配置;
|
|
517
548
|
同名远端对象存在时停止,交由人工判断。
|
|
518
549
|
|
|
550
|
+
### 发布文档刷新(可选)
|
|
551
|
+
|
|
552
|
+
发布单元可以声明 `releaseDocuments`,用一份结构化双语说明源确定性刷新 README
|
|
553
|
+
受管区域和 CHANGELOG 当前版本条目。核心 CLI 完全离线运行:不联网、不调用大模型、
|
|
554
|
+
不自动翻译;只改写声明过的受管区域、唯一版本标记的机器值和 CHANGELOG 当前版本
|
|
555
|
+
受管条目,区域外字节逐字保留。`prepare` 只检查新鲜度,不写工作树。
|
|
556
|
+
|
|
557
|
+
```yaml
|
|
558
|
+
# .release-skill/project.yaml(发布单元片段)
|
|
559
|
+
releaseUnits:
|
|
560
|
+
- id: my-project
|
|
561
|
+
source: .
|
|
562
|
+
releaseDocuments:
|
|
563
|
+
notesSource: release-notes/{version}.yaml
|
|
564
|
+
locales: [en, zh-CN]
|
|
565
|
+
changelogs:
|
|
566
|
+
- path: CHANGELOG.md
|
|
567
|
+
locale: en
|
|
568
|
+
readmes:
|
|
569
|
+
- path: README.md
|
|
570
|
+
locale: en
|
|
571
|
+
regions: [latest-release]
|
|
572
|
+
versionMarkers:
|
|
573
|
+
- id: current-version
|
|
574
|
+
pattern: '<!-- release-skill:version -->v{version}<!-- /release-skill:version -->'
|
|
575
|
+
- path: README.zh-CN.md
|
|
576
|
+
locale: zh-CN
|
|
577
|
+
regions: [latest-release]
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
`notesSource` 和所有目标路径均相对发布单元根。`versionMarkers[].pattern` 必须与
|
|
581
|
+
README 现有唯一版本标记精确匹配,`{version}` 代表机器版本值;刷新只替换该值
|
|
582
|
+
(零次或多次匹配失败关闭)。
|
|
583
|
+
|
|
584
|
+
```yaml
|
|
585
|
+
# release-notes/0.1.6.yaml(结构化说明源)
|
|
586
|
+
version: 0.1.6
|
|
587
|
+
date: 2026-07-21
|
|
588
|
+
locales:
|
|
589
|
+
en:
|
|
590
|
+
summary: Deterministic multilingual release-document refresh.
|
|
591
|
+
changes:
|
|
592
|
+
added:
|
|
593
|
+
- Refresh managed README regions and changelogs from one source.
|
|
594
|
+
upgradeNotes: Review and commit refreshed documents before prepare.
|
|
595
|
+
zh-CN:
|
|
596
|
+
summary: 从同一说明源确定性刷新多语种发布文档。
|
|
597
|
+
changes:
|
|
598
|
+
added:
|
|
599
|
+
- 自动刷新 README 受管区域和 CHANGELOG。
|
|
600
|
+
upgradeNotes: prepare 前审阅并提交刷新结果。
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
`version` 必须与解析出的单元版本精确一致;每个配置语种恰好出现一次,`summary`
|
|
604
|
+
与变更项非空,且 `security`、`breaking`、`added`、`changed`、`deprecated`、
|
|
605
|
+
`removed`、`fixed` 中至少一个类别含条目。YAML alias、重复键、未知字段和语种回退
|
|
606
|
+
均失败关闭。
|
|
607
|
+
|
|
608
|
+
1. **只读演练:**
|
|
609
|
+
```bash
|
|
610
|
+
"${CLI[@]}" docs refresh --root "$PROJECT" --unit my-project --json
|
|
611
|
+
```
|
|
612
|
+
输出 `status`(`changes` 或 `clean`)、逐文件相对 `path`、`locale`、`kind`、
|
|
613
|
+
新旧摘要、单元 `version`、`locales`、`inputDigest` 和 `refreshDigest`。
|
|
614
|
+
`refreshDigest` 绑定协议版本、发布单元、规范说明对象、配置投影和按路径排序的
|
|
615
|
+
逐文件新旧摘要,不绑定时间、绝对路径或展示文本;`nextCommand.argv` 给出精确
|
|
616
|
+
写入命令。
|
|
617
|
+
2. **摘要确认的本地写入(仅在用户明确授权“本地发布文档写入”后执行):**
|
|
618
|
+
```bash
|
|
619
|
+
"${CLI[@]}" docs refresh --root "$PROJECT" --unit my-project \
|
|
620
|
+
--write --confirm-refresh <refreshDigest> \
|
|
621
|
+
--ack-local-document-write --json
|
|
622
|
+
```
|
|
623
|
+
三项绑定缺一不可;摘要不匹配以 `RELEASE_DOCS_REFRESH_STALE` 失败关闭且零写入。
|
|
624
|
+
候选无变化时演练返回 `clean`,写入同样零写入。全部目标作为一个事务提交;
|
|
625
|
+
写入成功后立即复演,必须返回 `clean`。
|
|
626
|
+
|
|
627
|
+
该授权只覆盖声明的本地发布文档目标,不是 hook、Git 提交、push、publish 或安装的
|
|
628
|
+
授权:维护者必须审阅刷新结果并提交,然后重新 `prepare`——新字节会改变快照、
|
|
629
|
+
workspace digest 和 plan digest,旧批准不能授权刷新后的计划。
|
|
630
|
+
|
|
631
|
+
配置了 `releaseDocuments` 的文档发生漂移时,`prepare` 在 hook、基线、快照、
|
|
632
|
+
远端检查和计划冻结前以 `RELEASE_DOCS_STALE` 失败关闭。恢复路径:运行演练,审阅
|
|
633
|
+
展示的文件/语种/版本/摘要,授权并执行本地写入,审阅提交后重新 `prepare`。
|
|
634
|
+
`RELEASE_DOCS_INVALID`(配置或说明数据非法)、`RELEASE_DOCS_TRANSLATION_MISSING`
|
|
635
|
+
(配置语种缺失)和 `RELEASE_DOCS_CONFLICT`(非受管同版本内容或标记损坏)都需要
|
|
636
|
+
先修复源或目标,不得扩大写入范围解决。
|
|
637
|
+
|
|
519
638
|
### 父工作空间 + npm 子单元 + 插件子单元
|
|
520
639
|
|
|
521
640
|
当 monorepo 从不同目录同时产出 npm 包和 Claude/Codex 插件时,应定义独立的
|
|
@@ -524,6 +643,10 @@ GitHub Release → Claude/Codex 插件市场(marketplace)安装”执行并
|
|
|
524
643
|
|
|
525
644
|
本例中的 `project` 是父工作空间的编排容器,本身不是公开发布单元;如果工作空间
|
|
526
645
|
根目录也要发布独立仓库或 package,应再增加一个 `source: .` 的 release unit。
|
|
646
|
+
`version.source` 相对于该发布单元的 `source` 目录解析
|
|
647
|
+
(`version.source` is resolved relative to that release unit's `source` directory):
|
|
648
|
+
`source: packages/app` 的单元应直接写 `package.json`,而不是
|
|
649
|
+
`packages/app/package.json`。
|
|
527
650
|
|
|
528
651
|
```yaml
|
|
529
652
|
apiVersion: release-skill/v1
|
|
@@ -537,7 +660,7 @@ releaseUnits:
|
|
|
537
660
|
source: packages/app
|
|
538
661
|
publicRepo: owner/my-app
|
|
539
662
|
version:
|
|
540
|
-
source:
|
|
663
|
+
source: package.json
|
|
541
664
|
tagTemplate: my-app-v{version}
|
|
542
665
|
distributions:
|
|
543
666
|
- type: npm
|
|
@@ -573,7 +696,7 @@ releaseUnits:
|
|
|
573
696
|
source: packages/plugin
|
|
574
697
|
publicRepo: owner/my-plugin
|
|
575
698
|
version:
|
|
576
|
-
source:
|
|
699
|
+
source: package.json
|
|
577
700
|
tagTemplate: my-plugin-v{version}
|
|
578
701
|
distributions:
|
|
579
702
|
# 只有当单元确实发布插件时才声明插件消费者。
|
|
@@ -692,6 +815,28 @@ reconcile 成功只返回 `PUBLISHED`,不会返回 `VERIFIED`;只有全新
|
|
|
692
815
|
父工作区的步骤。它们可能修改项目或访问网络,prepare 必须显式传入
|
|
693
816
|
`--acknowledge-hook-side-effects`。
|
|
694
817
|
|
|
818
|
+
每个 hook 都是一个对象,绝不是裸命令列表。
|
|
819
|
+
`command` 是可执行文件/参数数组,不是 shell 字符串
|
|
820
|
+
(`command` is an executable/argument array, not a shell string)。每个 hook 还声明
|
|
821
|
+
`cwd`、`timeoutMs` 和 `envAllowlist`:
|
|
822
|
+
|
|
823
|
+
```yaml
|
|
824
|
+
hooks:
|
|
825
|
+
build:
|
|
826
|
+
command: [node, scripts/build.mjs]
|
|
827
|
+
cwd: .
|
|
828
|
+
timeoutMs: 120000
|
|
829
|
+
envAllowlist: [CI]
|
|
830
|
+
test:
|
|
831
|
+
command: [node, --test, test/]
|
|
832
|
+
cwd: .
|
|
833
|
+
timeoutMs: 300000
|
|
834
|
+
envAllowlist: []
|
|
835
|
+
```
|
|
836
|
+
|
|
837
|
+
hook 同样必须先逐项审阅配置的可执行文件、参数、工作目录和副作用,
|
|
838
|
+
并经 `prepare --acknowledge-hook-side-effects` 明确授权才会运行。
|
|
839
|
+
|
|
695
840
|
`verificationGates` 是更适合发布校准的受控扩展点:
|
|
696
841
|
|
|
697
842
|
```yaml
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
"name": "release-skill",
|
|
3
3
|
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
4
4
|
"owner": {
|
|
5
|
-
"name": "
|
|
6
|
-
"url": "https://github.com/
|
|
5
|
+
"name": "ifoohoo",
|
|
6
|
+
"url": "https://github.com/ifoohoo"
|
|
7
7
|
},
|
|
8
8
|
"plugins": [
|
|
9
9
|
{
|
|
10
10
|
"name": "release-skill",
|
|
11
11
|
"source": "./",
|
|
12
|
-
"version": "0.1.
|
|
12
|
+
"version": "0.1.7",
|
|
13
13
|
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification"
|
|
14
14
|
}
|
|
15
15
|
]
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
5
5
|
"author": {
|
|
6
|
-
"name": "
|
|
6
|
+
"name": "广州市风荷科技有限公司"
|
|
7
7
|
},
|
|
8
8
|
"license": "MIT",
|
|
9
9
|
"skills": "./skills/"
|