release-skill 0.1.4 → 0.1.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.
Files changed (71) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +2 -2
  4. package/CHANGELOG.md +104 -0
  5. package/INSTALL.md +81 -1
  6. package/INSTALL.zh-CN.md +69 -1
  7. package/README.md +233 -8
  8. package/README.zh-CN.md +188 -8
  9. package/adapters/claude/.claude-plugin/marketplace.json +1 -1
  10. package/adapters/claude/.claude-plugin/plugin.json +1 -1
  11. package/adapters/claude/bin/release-skill.bundle.mjs +14164 -9912
  12. package/adapters/claude/bin/release-skill.mjs +24 -4
  13. package/adapters/claude/native/safe-write/binding.gyp +2 -1
  14. package/adapters/claude/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
  15. package/adapters/claude/native/safe-write/prebuilds.json +1 -1
  16. package/adapters/claude/schemas/.render-manifest.json +10 -10
  17. package/adapters/claude/schemas/release-project.schema.json +141 -0
  18. package/adapters/claude/skills/release-help/SKILL.md +21 -0
  19. package/adapters/claude/skills/release-prepare/SKILL.md +17 -6
  20. package/adapters/claude/skills/release-publish/SKILL.md +3 -1
  21. package/adapters/claude/skills/release-reconcile/SKILL.md +1 -1
  22. package/adapters/codex/.codex-plugin/plugin.json +2 -2
  23. package/adapters/codex/bin/release-skill.bundle.mjs +14164 -9912
  24. package/adapters/codex/bin/release-skill.mjs +24 -4
  25. package/adapters/codex/native/safe-write/binding.gyp +2 -1
  26. package/adapters/codex/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
  27. package/adapters/codex/native/safe-write/prebuilds.json +1 -1
  28. package/adapters/codex/schemas/.render-manifest.json +10 -10
  29. package/adapters/codex/schemas/release-project.schema.json +141 -0
  30. package/adapters/codex/skills/release-help/SKILL.md +21 -0
  31. package/adapters/codex/skills/release-prepare/SKILL.md +17 -6
  32. package/adapters/codex/skills/release-publish/SKILL.md +3 -1
  33. package/adapters/codex/skills/release-reconcile/SKILL.md +1 -1
  34. package/bin/release-skill-cli.mjs +163 -4
  35. package/bin/release-skill.bundle.mjs +14164 -9912
  36. package/bin/release-skill.mjs +24 -4
  37. package/native/safe-write/binding.gyp +2 -1
  38. package/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
  39. package/native/safe-write/prebuilds.json +1 -1
  40. package/package.json +2 -2
  41. package/references/.render-manifest.json +4 -4
  42. package/references/02-project-config.md +24 -0
  43. package/references/05-evidence-and-errors.md +5 -0
  44. package/schemas/.render-manifest.json +10 -10
  45. package/schemas/release-project.schema.json +141 -0
  46. package/scripts/build-bundle.mjs +15 -2
  47. package/skills/release-help/SKILL.md +21 -0
  48. package/skills/release-prepare/SKILL.md +17 -6
  49. package/skills/release-publish/SKILL.md +3 -1
  50. package/skills/release-reconcile/SKILL.md +1 -1
  51. package/skills-src/release-help/SKILL.md +21 -0
  52. package/skills-src/release-prepare/SKILL.md +17 -6
  53. package/skills-src/release-publish/SKILL.md +3 -1
  54. package/skills-src/release-reconcile/SKILL.md +1 -1
  55. package/src/adapters/plugin-marketplace.mjs +70 -3
  56. package/src/artifacts/transaction-journal.mjs +1126 -105
  57. package/src/artifacts/transaction.mjs +313 -130
  58. package/src/commands/docs.mjs +332 -0
  59. package/src/commands/prepare.mjs +324 -17
  60. package/src/commands/reconcile.mjs +4 -1
  61. package/src/commands/verify.mjs +4 -1
  62. package/src/core/errors.mjs +64 -2
  63. package/src/core/plan.mjs +59 -1
  64. package/src/core/redact.mjs +206 -0
  65. package/src/docs/changelog-renderer.mjs +853 -0
  66. package/src/docs/config.mjs +337 -0
  67. package/src/docs/notes-loader.mjs +432 -0
  68. package/src/docs/notes.mjs +553 -0
  69. package/src/docs/readme-renderer.mjs +647 -0
  70. package/src/docs/refresh-planner.mjs +542 -0
  71. package/src/docs/refresh-service.mjs +675 -0
package/README.zh-CN.md CHANGED
@@ -2,15 +2,66 @@
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
+ <!-- release-skill:release-version: 0.1.6 -->
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.6** (2026-07-22)
14
+
15
+ v0.1.6 是一个发布准备版本,收口了 release-docs 自动化闭环。单一结构化发布说明源通过两阶段、摘要绑定的写入协议与 prepare 文档新鲜度门禁,确定性地驱动多语 CHANGELOG 与 README 刷新;同时终态事务收据被有界化,CLI 生命周期、路径安全与错误输出脱敏均得到加固。
16
+
17
+ **新增**
18
+
19
+ - **结构化发布说明驱动的文档刷新(`docs refresh`)**:单一结构化发布说明源
20
+ (`release-notes/0.1.6.yaml`)现在确定性地驱动受管 CHANGELOG 与 README 区域的
21
+ 多语刷新。刷新以两阶段协议运行:只读计划阶段渲染每个候选并冻结一个
22
+ `inputDigest`(绑定规范化说明与说明源字节)以及一个 `refreshDigest`(绑定协议
23
+ 版本、unit、version、配置投影与逐文件新旧摘要),写入阶段则仅在三项授权齐备
24
+ (`--write`、精确匹配的 `--confirm-refresh <refreshDigest>` 与
25
+ `--ack-local-document-write`)时才提交变更目标。写入阶段在独占锁下重新计划;
26
+ 摘要分歧时收敛为 `RELEASE_DOCS_REFRESH_STALE` 且零写入,干净计划则是零写入的
27
+ 空操作。prepare 文档新鲜度门禁使包版本与公开文档之间的版本漂移在发布计划冻结
28
+ 之前失败关闭。
29
+ - **有界化的终态事务收据与恢复安全**:终态(已提交 / 已回滚)事务现在持久化
30
+ 仅含摘要的收据而非完整载荷,单个收据上限 256 KB(`TERMINAL_RECEIPT_SIZE_CAP`),
31
+ 并受 50 条终态记录的保留上限约束(`DEFAULT_TRANSACTION_RETENTION_MAX`)。保留
32
+ 裁剪只移除终态记录,永不裁剪 `RECOVERY_CONFLICT` 记录或任何非终态(与恢复相关)
33
+ 的记录,因此即便达到数量上限也保留恢复证据;保留失败永不中止进行中的提交。
34
+ - **严格的 `docs refresh` 参数验证(失败关闭)**:`docs` 命令在调用刷新服务
35
+ 之前验证每个参数,因此即便没有项目配置或 safe-fs 后端,也能给出精确的稳定参数
36
+ 错误。`--flag=value` 等号形式与空格分隔形式走完全相同的验证;重复参数在任何
37
+ 服务调用、配置读取、加锁或事务之前即以 `DUPLICATE_PARAMETER` 失败关闭;裸位置
38
+ 参数与单短横参数(如 `-w`)被识别为未识别而拒绝。未带 `--write` 的写入授权参数,
39
+ 或授权不全的 `--write`,都以精确原因失败关闭,而非静默继续。
40
+
41
+ **修复**
42
+
43
+ - **bundle 入口生命周期以真实退出码收敛**:自包含 bundle 现在拥有命令生命
44
+ 周期。其入口等待命令完成,并针对成功、业务错误、已处理的异步拒绝与未知命令以
45
+ 真实业务退出码退出,使启动器不再遗留未结算的顶层 await(Node 退出码 13)。当
46
+ bundle 缺失或无法求值时,启动器仅以静态文本失败关闭,绝不插值机器相关路径、
47
+ 用户名或主机布局,因为模块加载失败信息携带绝对路径。
48
+ - **失败关闭的路径规范化与稳定诊断**:artifact 路径规范化要求 POSIX 分隔符,
49
+ 并拒绝 POSIX(`/`)、Windows 盘符与 UNC 拼写的绝对路径,连同穿越、Windows 保留
50
+ 设备名与冒号,以 `PATH_UNSAFE` 失败关闭,而不是把不安全拼写规范化为另一个公开
51
+ 路径。错误输出脱敏现在区分真实文件系统路径与严格的 RFC 6901 JSON Pointer 诊断
52
+ 坐标(如 `/units/0/version`):绝对 POSIX/Windows/UNC 路径收敛为稳定的
53
+ `<redacted-path>` 占位符,而诊断指针按原样保留,使失败可诊断且不泄露主机路径。
54
+ - **self 公开边界脱敏**:集中式脱敏权威(`core/redact.mjs`)现在闭合 self
55
+ 公开边界,使运行时错误输出与 detail 结构绝不携带 release-skill 工作区自身的绝对
56
+ 路径,也不携带 macOS `Users`、Linux home、macOS `private`/`var` 别名、temp 或 CI
57
+ 检出等域。脱敏经由 `ReleaseError` 收口点失败关闭:任何两段及以上、以 `/` 开头且
58
+ 非严格诊断 JSON Pointer 的 token 都被替换为 `<redacted-path>`,因此自我发布绝不
59
+ 向公开输出泄露私有文件系统布局。
60
+ <!-- release-skill:managed:end id=latest-release -->
61
+
12
62
  <!-- release-skill:capability:external-write-boundary -->
13
- > **当前边界:** v0.1.4 是当前发布版本。v0.1.1 已完成 GitHub 与 npm 的
63
+ > **当前边界:** v0.1.6 是当前发布版本(v0.1.5 完成真实生产验证后曾处于这一状态)。
64
+ > v0.1.1 已完成 GitHub 与 npm 的
14
65
  > 真实生产发布,是首次生产验证的历史里程碑,并从冻结 Git ref 完成精确 npm
15
66
  > 安装及 Claude/Codex 消费者安装验证;“当前发布版本”与“首次生产验证里程碑”
16
67
  > 是两个不同的事实,不得混写成同一含义。同一工作流还通过了本地
@@ -22,7 +73,7 @@ release-skill 帮助维护者回答三个问题:准备发布什么、还有哪
22
73
  > 远端唯一性检查在 `publish` 全局预检执行。
23
74
 
24
75
  <!-- release-skill:capability:safe-first-command -->
25
- > **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.1.4 是当前发布版本。**
76
+ > **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.1.6 是当前发布版本。**
26
77
  > npm 安装的 CLI 是受支持的用户入口;源码 checkout 保留为开发/贡献者路径。
27
78
  >
28
79
  > **第一条命令:**
@@ -61,6 +112,10 @@ release-skill 不重新生成、也不回写项目源文件。`prepare` 从当
61
112
 
62
113
  ## 快速开始
63
114
 
115
+ 下文每个只读步骤都把可能很大的报告保存在临时文件中,只展示确定性的
116
+ `compactSummary`(紧凑摘要)审阅视图;紧凑摘要只是审阅辅助,不能替代绑定摘要
117
+ 授权。
118
+
64
119
  ### 安装 / 前置条件
65
120
 
66
121
  - Node.js 22+
@@ -456,8 +511,9 @@ v0.1.1 生产发布验证完成后,npm 安装的 CLI 是受支持的用户入
456
511
  5. **人工审阅:** 检查返回的 `planPath`、`externalActions`、
457
512
  `units[].targetVersion` 和 `planDigest`。每个发布单元的快照位于
458
513
  `<evidenceDir>/snapshots/<unit-id>/`。release-skill 自身只把数据写入
459
- `.release-skill/`;获得授权的项目 hook/gate 是无沙箱进程,可能写入其他位置或
460
- 访问网络。
514
+ `.release-skill/`;获得授权的项目 hook/gate 是没有操作系统沙箱的任意项目
515
+ 进程,可能写入其他位置、访问网络,并读取当前账号可访问的凭据、令牌、密钥和
516
+ 环境变量。
461
517
  6. **生产计划冻结:**
462
518
  ```bash
463
519
  PRODUCTION_JSON=$("${CLI[@]}" prepare --root "$PROJECT" --online --production \
@@ -485,7 +541,9 @@ v0.1.1 生产发布验证完成后,npm 安装的 CLI 是受支持的用户入
485
541
  `latestApprovalPath` 指向 `.release-skill/approval-record.json`,它只是可变便利
486
542
  副本,不得传给生产 publish/reconcile。批准 24 小时失效;PARTIAL 恢复可为同一
487
543
  plan 重新批准,同时逐字节保留全部旧批准。后续必须使用返回的 immutable
488
- `approvalPath` 和 `expiresAt`。
544
+ `approvalPath` 和 `expiresAt`。`--actor` 只是未经认证的本地审计标签:
545
+ release-skill 不执行身份认证、不提供数字签名,因此无法证明真人已经批准——
546
+ 它只记录操作者自报的身份。
489
547
  8. **发布(从此开始写远端):**
490
548
  ```bash
491
549
  PUBLISH_JSON=$("${CLI[@]}" publish --root "$PROJECT" \
@@ -516,6 +574,94 @@ GitHub Release → Claude/Codex 插件市场(marketplace)安装”执行并
516
574
  默认分支名为 `release/<tag>`,可由每个 unit 的 `production.branchTemplate` 配置;
517
575
  同名远端对象存在时停止,交由人工判断。
518
576
 
577
+ ### 发布文档刷新(可选)
578
+
579
+ 发布单元可以声明 `releaseDocuments`,用一份结构化双语说明源确定性刷新 README
580
+ 受管区域和 CHANGELOG 当前版本条目。核心 CLI 完全离线运行:不联网、不调用大模型、
581
+ 不自动翻译;只改写声明过的受管区域、唯一版本标记的机器值和 CHANGELOG 当前版本
582
+ 受管条目,区域外字节逐字保留。`prepare` 只检查新鲜度,不写工作树。
583
+
584
+ ```yaml
585
+ # .release-skill/project.yaml(发布单元片段)
586
+ releaseUnits:
587
+ - id: my-project
588
+ source: .
589
+ releaseDocuments:
590
+ notesSource: release-notes/{version}.yaml
591
+ locales: [en, zh-CN]
592
+ changelogs:
593
+ - path: CHANGELOG.md
594
+ locale: en
595
+ readmes:
596
+ - path: README.md
597
+ locale: en
598
+ regions: [latest-release]
599
+ versionMarkers:
600
+ - id: current-version
601
+ pattern: '<!-- release-skill:version -->v{version}<!-- /release-skill:version -->'
602
+ - path: README.zh-CN.md
603
+ locale: zh-CN
604
+ regions: [latest-release]
605
+ ```
606
+
607
+ `notesSource` 和所有目标路径均相对发布单元根。`versionMarkers[].pattern` 必须与
608
+ README 现有唯一版本标记精确匹配,`{version}` 代表机器版本值;刷新只替换该值
609
+ (零次或多次匹配失败关闭)。
610
+
611
+ ```yaml
612
+ # release-notes/0.1.6.yaml(结构化说明源)
613
+ version: 0.1.6
614
+ date: 2026-07-21
615
+ locales:
616
+ en:
617
+ summary: Deterministic multilingual release-document refresh.
618
+ changes:
619
+ added:
620
+ - Refresh managed README regions and changelogs from one source.
621
+ upgradeNotes: Review and commit refreshed documents before prepare.
622
+ zh-CN:
623
+ summary: 从同一说明源确定性刷新多语种发布文档。
624
+ changes:
625
+ added:
626
+ - 自动刷新 README 受管区域和 CHANGELOG。
627
+ upgradeNotes: prepare 前审阅并提交刷新结果。
628
+ ```
629
+
630
+ `version` 必须与解析出的单元版本精确一致;每个配置语种恰好出现一次,`summary`
631
+ 与变更项非空,且 `security`、`breaking`、`added`、`changed`、`deprecated`、
632
+ `removed`、`fixed` 中至少一个类别含条目。YAML alias、重复键、未知字段和语种回退
633
+ 均失败关闭。
634
+
635
+ 1. **只读演练:**
636
+ ```bash
637
+ "${CLI[@]}" docs refresh --root "$PROJECT" --unit my-project --json
638
+ ```
639
+ 输出 `status`(`changes` 或 `clean`)、逐文件相对 `path`、`locale`、`kind`、
640
+ 新旧摘要、单元 `version`、`locales`、`inputDigest` 和 `refreshDigest`。
641
+ `refreshDigest` 绑定协议版本、发布单元、规范说明对象、配置投影和按路径排序的
642
+ 逐文件新旧摘要,不绑定时间、绝对路径或展示文本;`nextCommand.argv` 给出精确
643
+ 写入命令。
644
+ 2. **摘要确认的本地写入(仅在用户明确授权“本地发布文档写入”后执行):**
645
+ ```bash
646
+ "${CLI[@]}" docs refresh --root "$PROJECT" --unit my-project \
647
+ --write --confirm-refresh <refreshDigest> \
648
+ --ack-local-document-write --json
649
+ ```
650
+ 三项绑定缺一不可;摘要不匹配以 `RELEASE_DOCS_REFRESH_STALE` 失败关闭且零写入。
651
+ 候选无变化时演练返回 `clean`,写入同样零写入。全部目标作为一个事务提交;
652
+ 写入成功后立即复演,必须返回 `clean`。
653
+
654
+ 该授权只覆盖声明的本地发布文档目标,不是 hook、Git 提交、push、publish 或安装的
655
+ 授权:维护者必须审阅刷新结果并提交,然后重新 `prepare`——新字节会改变快照、
656
+ workspace digest 和 plan digest,旧批准不能授权刷新后的计划。
657
+
658
+ 配置了 `releaseDocuments` 的文档发生漂移时,`prepare` 在 hook、基线、快照、
659
+ 远端检查和计划冻结前以 `RELEASE_DOCS_STALE` 失败关闭。恢复路径:运行演练,审阅
660
+ 展示的文件/语种/版本/摘要,授权并执行本地写入,审阅提交后重新 `prepare`。
661
+ `RELEASE_DOCS_INVALID`(配置或说明数据非法)、`RELEASE_DOCS_TRANSLATION_MISSING`
662
+ (配置语种缺失)和 `RELEASE_DOCS_CONFLICT`(非受管同版本内容或标记损坏)都需要
663
+ 先修复源或目标,不得扩大写入范围解决。
664
+
519
665
  ### 父工作空间 + npm 子单元 + 插件子单元
520
666
 
521
667
  当 monorepo 从不同目录同时产出 npm 包和 Claude/Codex 插件时,应定义独立的
@@ -524,6 +670,10 @@ GitHub Release → Claude/Codex 插件市场(marketplace)安装”执行并
524
670
 
525
671
  本例中的 `project` 是父工作空间的编排容器,本身不是公开发布单元;如果工作空间
526
672
  根目录也要发布独立仓库或 package,应再增加一个 `source: .` 的 release unit。
673
+ `version.source` 相对于该发布单元的 `source` 目录解析
674
+ (`version.source` is resolved relative to that release unit's `source` directory):
675
+ `source: packages/app` 的单元应直接写 `package.json`,而不是
676
+ `packages/app/package.json`。
527
677
 
528
678
  ```yaml
529
679
  apiVersion: release-skill/v1
@@ -537,7 +687,7 @@ releaseUnits:
537
687
  source: packages/app
538
688
  publicRepo: owner/my-app
539
689
  version:
540
- source: packages/app/package.json
690
+ source: package.json
541
691
  tagTemplate: my-app-v{version}
542
692
  distributions:
543
693
  - type: npm
@@ -573,7 +723,7 @@ releaseUnits:
573
723
  source: packages/plugin
574
724
  publicRepo: owner/my-plugin
575
725
  version:
576
- source: packages/plugin/package.json
726
+ source: package.json
577
727
  tagTemplate: my-plugin-v{version}
578
728
  distributions:
579
729
  # 只有当单元确实发布插件时才声明插件消费者。
@@ -582,10 +732,12 @@ releaseUnits:
582
732
  plugin: my-plugin
583
733
  marketplace: my-plugin
584
734
  entrySkill: my-plugin-help
735
+ timeoutMs: 300000 # 可选;范围 30000–900000;默认 300000
585
736
  - type: codex-plugin
586
737
  plugin: my-plugin
587
738
  marketplace: my-plugin
588
739
  entrySkill: my-plugin-help
740
+ timeoutMs: 300000 # 可选;范围 30000–900000;默认 300000
589
741
  publicFiles:
590
742
  - from: packages/plugin/.claude-plugin/plugin.json
591
743
  to: .claude-plugin/plugin.json
@@ -631,6 +783,12 @@ releaseUnits:
631
783
  入口 Skill 和全部 required public files。CLI 冒烟(`smokeBin`)对插件单元
632
784
  是可选项,仅当发布包同时暴露 CLI 二进制时才适用。
633
785
 
786
+ 插件分发可声明 `timeoutMs`(范围 30,000–900,000 毫秒;默认 300,000 毫秒),
787
+ 用于设置 marketplace add、plugin install 和 plugin list 三条命令的子进程超时。
788
+ 真实网络下这些命令可能需要 40–105 秒;默认 300 秒超时避免误报 `PARTIAL`。
789
+ 解析后的值冻结到计划中,与其他动作参数一起接受批准。无 `timeoutMs` 的旧计划
790
+ 在执行时默认回退到 300,000 毫秒以保证向后兼容。
791
+
634
792
  ### PARTIAL 恢复与 reconcile
635
793
 
636
794
  当 `publish` 在部分检查点成功但在其他检查点失败时,运行进入 `PARTIAL`
@@ -684,6 +842,28 @@ reconcile 成功只返回 `PUBLISHED`,不会返回 `VERIFIED`;只有全新
684
842
  父工作区的步骤。它们可能修改项目或访问网络,prepare 必须显式传入
685
843
  `--acknowledge-hook-side-effects`。
686
844
 
845
+ 每个 hook 都是一个对象,绝不是裸命令列表。
846
+ `command` 是可执行文件/参数数组,不是 shell 字符串
847
+ (`command` is an executable/argument array, not a shell string)。每个 hook 还声明
848
+ `cwd`、`timeoutMs` 和 `envAllowlist`:
849
+
850
+ ```yaml
851
+ hooks:
852
+ build:
853
+ command: [node, scripts/build.mjs]
854
+ cwd: .
855
+ timeoutMs: 120000
856
+ envAllowlist: [CI]
857
+ test:
858
+ command: [node, --test, test/]
859
+ cwd: .
860
+ timeoutMs: 300000
861
+ envAllowlist: []
862
+ ```
863
+
864
+ hook 同样必须先逐项审阅配置的可执行文件、参数、工作目录和副作用,
865
+ 并经 `prepare --acknowledge-hook-side-effects` 明确授权才会运行。
866
+
687
867
  `verificationGates` 是更适合发布校准的受控扩展点:
688
868
 
689
869
  ```yaml
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "name": "release-skill",
11
11
  "source": "./",
12
- "version": "0.1.4",
12
+ "version": "0.1.6",
13
13
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification"
14
14
  }
15
15
  ]
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-skill",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
5
5
  "author": {
6
6
  "name": "release-skill contributors"