release-skill 0.6.2 → 0.6.3
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 +23 -0
- package/CONTRIBUTING.md +1 -1
- package/INSTALL.md +47 -2
- package/INSTALL.zh-CN.md +29 -2
- package/README.md +126 -9
- package/README.zh-CN.md +108 -9
- 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 +6408 -1654
- package/adapters/claude/schemas/.render-manifest.json +10 -6
- package/adapters/claude/schemas/postpublish-approval-record.schema.json +47 -0
- package/adapters/claude/schemas/release-plan.schema.json +65 -1
- package/adapters/claude/schemas/release-project.schema.json +73 -1
- package/adapters/claude/schemas/release-run.schema.json +11 -6
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/release-skill.bundle.mjs +6408 -1654
- package/adapters/codex/schemas/.render-manifest.json +10 -6
- package/adapters/codex/schemas/postpublish-approval-record.schema.json +47 -0
- package/adapters/codex/schemas/release-plan.schema.json +65 -1
- package/adapters/codex/schemas/release-project.schema.json +73 -1
- package/adapters/codex/schemas/release-run.schema.json +11 -6
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +6408 -1654
- package/adapters/kimi/schemas/.render-manifest.json +10 -6
- package/adapters/kimi/schemas/postpublish-approval-record.schema.json +47 -0
- package/adapters/kimi/schemas/release-plan.schema.json +65 -1
- package/adapters/kimi/schemas/release-project.schema.json +73 -1
- package/adapters/kimi/schemas/release-run.schema.json +11 -6
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +6408 -1654
- package/adapters/workbuddy/schemas/.render-manifest.json +10 -6
- package/adapters/workbuddy/schemas/postpublish-approval-record.schema.json +47 -0
- package/adapters/workbuddy/schemas/release-plan.schema.json +65 -1
- package/adapters/workbuddy/schemas/release-project.schema.json +73 -1
- package/adapters/workbuddy/schemas/release-run.schema.json +11 -6
- package/bin/release-skill-cli.mjs +181 -3
- package/bin/release-skill.bundle.mjs +6408 -1654
- package/package.json +2 -1
- package/platform-manifest.json +4 -4
- package/references/.render-manifest.json +5 -5
- package/references/01-state-machine.md +22 -2
- package/schemas/.render-manifest.json +10 -6
- package/schemas/postpublish-approval-record.schema.json +47 -0
- package/schemas/release-plan.schema.json +65 -1
- package/schemas/release-project.schema.json +73 -1
- package/schemas/release-run.schema.json +11 -6
- package/src/commands/approve.mjs +167 -1
- package/src/commands/distribute.mjs +411 -33
- package/src/commands/postverify.mjs +734 -0
- package/src/commands/prepare.mjs +280 -42
- package/src/commands/setup.mjs +715 -0
- package/src/commands/ship.mjs +152 -5
- package/src/commands/verify.mjs +92 -15
- package/src/core/approval.mjs +93 -68
- package/src/core/bounded-output.mjs +46 -0
- package/src/core/derived-artifact-gates.mjs +258 -0
- package/src/core/docs-refresh-preset.mjs +167 -0
- package/src/core/errors.mjs +4 -0
- package/src/core/hooks.mjs +28 -0
- package/src/core/marketplace-registry-entry.mjs +174 -0
- package/src/core/notify-handoff.mjs +76 -0
- package/src/core/postpublish-approval.mjs +110 -0
- package/src/core/postpublish.mjs +424 -7
- package/src/core/preset-executor.mjs +156 -0
- package/src/core/preset-gitwrite.mjs +463 -0
- package/src/core/presets.mjs +706 -0
- package/src/core/proposal-inbox.mjs +630 -0
- package/src/core/run.mjs +91 -6
|
@@ -21,17 +21,21 @@
|
|
|
21
21
|
"digest": "b7e14522a5aba818cab191545f23d2323be0e4c80566e9d3e4da576103a00490",
|
|
22
22
|
"bytes": 2390
|
|
23
23
|
},
|
|
24
|
+
"postpublish-approval-record.schema.json": {
|
|
25
|
+
"digest": "e365c9e9f5aa189ca6788e68dbedfa718aa120f2c197534417c21e019b9a29a4",
|
|
26
|
+
"bytes": 1744
|
|
27
|
+
},
|
|
24
28
|
"release-plan.schema.json": {
|
|
25
|
-
"digest": "
|
|
26
|
-
"bytes":
|
|
29
|
+
"digest": "517ac9b1d92d2bf348497ee0e79c9e474a4c60e6ed8ba77830948716d143dfa2",
|
|
30
|
+
"bytes": 49369
|
|
27
31
|
},
|
|
28
32
|
"release-project.schema.json": {
|
|
29
|
-
"digest": "
|
|
30
|
-
"bytes":
|
|
33
|
+
"digest": "d38649d1dc9b1dbc643f4e2c98fd18d111090e9ce221c9c61fa50245f6c4c232",
|
|
34
|
+
"bytes": 45715
|
|
31
35
|
},
|
|
32
36
|
"release-run.schema.json": {
|
|
33
|
-
"digest": "
|
|
34
|
-
"bytes":
|
|
37
|
+
"digest": "a605db801d6994d657049431ad453233974bd10610b7b447b196136bb0692866",
|
|
38
|
+
"bytes": 17847
|
|
35
39
|
}
|
|
36
40
|
}
|
|
37
41
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://release-skill.dev/schemas/postpublish-approval-record/v1",
|
|
4
|
+
"title": "PostPublish Hook Approval Record",
|
|
5
|
+
"description": "Schema for checkpoint-level approval of a requiresApproval postPublish hook (v0.6.3 R1, design §2.7 ruling 2). Binds the approval to (planDigest, hookId); the plan-level approval-record schema is untouched. runId is audit-only and never participates in binding or validation semantics.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"planDigest",
|
|
9
|
+
"hookId",
|
|
10
|
+
"actor",
|
|
11
|
+
"approvedAt",
|
|
12
|
+
"expiresAt"
|
|
13
|
+
],
|
|
14
|
+
"additionalProperties": false,
|
|
15
|
+
"properties": {
|
|
16
|
+
"planDigest": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"pattern": "^[a-f0-9]{64}$",
|
|
19
|
+
"description": "SHA-256 digest of the frozen release plan whose postPublish hooks block this approval binds to"
|
|
20
|
+
},
|
|
21
|
+
"hookId": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$",
|
|
24
|
+
"description": "id of the requiresApproval postPublish hook being approved (must be declared in the frozen plan)"
|
|
25
|
+
},
|
|
26
|
+
"actor": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"minLength": 1,
|
|
29
|
+
"description": "Identity of the approver"
|
|
30
|
+
},
|
|
31
|
+
"approvedAt": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"format": "date-time",
|
|
34
|
+
"description": "ISO 8601 timestamp when approval was granted"
|
|
35
|
+
},
|
|
36
|
+
"expiresAt": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"format": "date-time",
|
|
39
|
+
"description": "ISO 8601 timestamp when approval expires (max 24h after approvedAt; 5-minute clock skew tolerated at validation)"
|
|
40
|
+
},
|
|
41
|
+
"runId": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"minLength": 1,
|
|
44
|
+
"description": "Audit-only identifier of the distribute run present when approval was granted; never a binding"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -1307,7 +1307,6 @@
|
|
|
1307
1307
|
"description": "冻结的发布后分发块:声明本身 + tag/tagCommit/unitId/payloadSource 绑定。整体参与 plan digest(planVersion 2 记录层剥离不包含该块),任何配置变更都会改变 planDigest。tagCommit 仅在 prepare 能冻结 create-tag 预期 commit 时存在(production 资产);缺省时 distribute fail-closed。",
|
|
1308
1308
|
"required": [
|
|
1309
1309
|
"materialize",
|
|
1310
|
-
"targets",
|
|
1311
1310
|
"commitIdentity",
|
|
1312
1311
|
"tag",
|
|
1313
1312
|
"unitId",
|
|
@@ -1325,6 +1324,13 @@
|
|
|
1325
1324
|
"$ref": "#/definitions/planPostPublishTarget"
|
|
1326
1325
|
}
|
|
1327
1326
|
},
|
|
1327
|
+
"hooks": {
|
|
1328
|
+
"type": "array",
|
|
1329
|
+
"description": "冻结的发布后钩子声明(v0.6.3 R1);随整块参与 plan digest",
|
|
1330
|
+
"items": {
|
|
1331
|
+
"$ref": "#/definitions/planPostPublishHook"
|
|
1332
|
+
}
|
|
1333
|
+
},
|
|
1328
1334
|
"commitIdentity": {
|
|
1329
1335
|
"type": "object",
|
|
1330
1336
|
"required": [
|
|
@@ -1373,6 +1379,64 @@
|
|
|
1373
1379
|
}
|
|
1374
1380
|
}
|
|
1375
1381
|
},
|
|
1382
|
+
"planPostPublishHook": {
|
|
1383
|
+
"type": "object",
|
|
1384
|
+
"description": "冻结的发布后钩子声明项(v0.6.3 R1):preset 与 command 运行时互斥;phase 缺省 distribute;blocksVerified 缺省 true 且仅 preset 可声明 false",
|
|
1385
|
+
"required": [
|
|
1386
|
+
"id"
|
|
1387
|
+
],
|
|
1388
|
+
"additionalProperties": false,
|
|
1389
|
+
"properties": {
|
|
1390
|
+
"id": {
|
|
1391
|
+
"type": "string",
|
|
1392
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
|
1393
|
+
},
|
|
1394
|
+
"preset": {
|
|
1395
|
+
"type": "string",
|
|
1396
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
|
1397
|
+
},
|
|
1398
|
+
"command": {
|
|
1399
|
+
"type": "array",
|
|
1400
|
+
"minItems": 1,
|
|
1401
|
+
"items": {
|
|
1402
|
+
"type": "string"
|
|
1403
|
+
}
|
|
1404
|
+
},
|
|
1405
|
+
"phase": {
|
|
1406
|
+
"type": "string",
|
|
1407
|
+
"enum": [
|
|
1408
|
+
"distribute",
|
|
1409
|
+
"postVerify"
|
|
1410
|
+
]
|
|
1411
|
+
},
|
|
1412
|
+
"config": {
|
|
1413
|
+
"type": "object"
|
|
1414
|
+
},
|
|
1415
|
+
"cwd": {
|
|
1416
|
+
"type": "string",
|
|
1417
|
+
"pattern": "^(?:\\.$|(?!\\/)(?!\\.\\/)(?!.*\\\\)(?!.*:)(?!\\.\\.(?:\\/|$))(?!.*\\/\\.\\.\\/)(?!.*\\/\\.\\.$)(?!.*\\/\\.\\/)(?!.*\\/\\/)(?!.*\\0)(?!.*\\/\\.$)(?!.*\\/\\/$)(?!.*\\/$).*)$"
|
|
1418
|
+
},
|
|
1419
|
+
"timeoutMs": {
|
|
1420
|
+
"type": "integer",
|
|
1421
|
+
"minimum": 1000,
|
|
1422
|
+
"maximum": 7200000
|
|
1423
|
+
},
|
|
1424
|
+
"envAllowlist": {
|
|
1425
|
+
"type": "array",
|
|
1426
|
+
"items": {
|
|
1427
|
+
"type": "string",
|
|
1428
|
+
"pattern": "^(?!.*(?:TOKEN|SECRET|PASSWORD|PASSPHRASE|API_KEY|CREDENTIAL))[A-Z_][A-Z0-9_]*$"
|
|
1429
|
+
},
|
|
1430
|
+
"uniqueItems": true
|
|
1431
|
+
},
|
|
1432
|
+
"requiresApproval": {
|
|
1433
|
+
"type": "boolean"
|
|
1434
|
+
},
|
|
1435
|
+
"blocksVerified": {
|
|
1436
|
+
"type": "boolean"
|
|
1437
|
+
}
|
|
1438
|
+
}
|
|
1439
|
+
},
|
|
1376
1440
|
"planPostPublishMaterialize": {
|
|
1377
1441
|
"type": "object",
|
|
1378
1442
|
"required": [
|
|
@@ -889,7 +889,6 @@
|
|
|
889
889
|
"description": "发布后分发声明:materialize 钩子从冻结 tag 工作树物化载荷,targets 将载荷镜像或渲染市场索引推送到独立 git 远端。分发在 publish 之后由 distribute 命令执行,时序契约禁止读取工作区状态。",
|
|
890
890
|
"required": [
|
|
891
891
|
"materialize",
|
|
892
|
-
"targets",
|
|
893
892
|
"commitIdentity"
|
|
894
893
|
],
|
|
895
894
|
"additionalProperties": false,
|
|
@@ -904,6 +903,13 @@
|
|
|
904
903
|
"$ref": "#/definitions/postPublishTarget"
|
|
905
904
|
}
|
|
906
905
|
},
|
|
906
|
+
"hooks": {
|
|
907
|
+
"type": "array",
|
|
908
|
+
"description": "发布后钩子声明(v0.6.3 R1):每项为命名 preset(+config)或自定义 command 钩子(executable+参数数组,禁止 shell 字符串)。schema 层只校验形状;preset 与 command 互斥、preset 注册表归属等语义在运行时 fail-closed 校验(POSTPUBLISH_HOOK_INVALID)",
|
|
909
|
+
"items": {
|
|
910
|
+
"$ref": "#/definitions/postPublishHook"
|
|
911
|
+
}
|
|
912
|
+
},
|
|
907
913
|
"commitIdentity": {
|
|
908
914
|
"type": "object",
|
|
909
915
|
"description": "分发仓库提交者身份(bot 身份),通过 git -c user.name/-c user.email 注入,绝不读取或修改全局 git 配置",
|
|
@@ -936,6 +942,72 @@
|
|
|
936
942
|
}
|
|
937
943
|
}
|
|
938
944
|
},
|
|
945
|
+
"postPublishHook": {
|
|
946
|
+
"type": "object",
|
|
947
|
+
"description": "发布后钩子声明项:preset(命名预设 + config)与 command(自定义命令)在运行时互斥校验;phase 缺省为 distribute(VERIFIED 之前执行),postVerify 在 verify 通过后作为独立 run 执行(R3);blocksVerified 缺省 true,仅 preset 可声明 false",
|
|
948
|
+
"required": [
|
|
949
|
+
"id"
|
|
950
|
+
],
|
|
951
|
+
"additionalProperties": false,
|
|
952
|
+
"properties": {
|
|
953
|
+
"id": {
|
|
954
|
+
"type": "string",
|
|
955
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
|
956
|
+
},
|
|
957
|
+
"preset": {
|
|
958
|
+
"type": "string",
|
|
959
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$",
|
|
960
|
+
"description": "预设注册表中的预设名(R2 起);R1 无注册表,任何 preset 引用在运行时 fail-closed"
|
|
961
|
+
},
|
|
962
|
+
"command": {
|
|
963
|
+
"type": "array",
|
|
964
|
+
"minItems": 1,
|
|
965
|
+
"items": {
|
|
966
|
+
"type": "string"
|
|
967
|
+
},
|
|
968
|
+
"description": "executable+参数数组(禁止 shell 字符串);在冻结 tag 工作树中执行"
|
|
969
|
+
},
|
|
970
|
+
"phase": {
|
|
971
|
+
"type": "string",
|
|
972
|
+
"enum": [
|
|
973
|
+
"distribute",
|
|
974
|
+
"postVerify"
|
|
975
|
+
],
|
|
976
|
+
"description": "执行阶段;缺省 distribute"
|
|
977
|
+
},
|
|
978
|
+
"config": {
|
|
979
|
+
"type": "object",
|
|
980
|
+
"description": "preset 钩子的配置对象;语义由预设注册表校验(R2 起)"
|
|
981
|
+
},
|
|
982
|
+
"cwd": {
|
|
983
|
+
"type": "string",
|
|
984
|
+
"pattern": "^(?:\\.$|(?!\\/)(?!\\.\\/)(?!.*\\\\)(?!.*:)(?!\\.\\.(?:\\/|$))(?!.*\\/\\.\\.\\/)(?!.*\\/\\.\\.$)(?!.*\\/\\.\\/)(?!.*\\/\\/)(?!.*\\0)(?!.*\\/\\.$)(?!.*\\/\\/$)(?!.*\\/$).*)$",
|
|
985
|
+
"description": "command 钩子执行目录(相对冻结 tag 工作树);preset 钩子禁止声明(运行时 fail-closed)"
|
|
986
|
+
},
|
|
987
|
+
"timeoutMs": {
|
|
988
|
+
"type": "integer",
|
|
989
|
+
"minimum": 1000,
|
|
990
|
+
"maximum": 7200000
|
|
991
|
+
},
|
|
992
|
+
"envAllowlist": {
|
|
993
|
+
"type": "array",
|
|
994
|
+
"items": {
|
|
995
|
+
"type": "string",
|
|
996
|
+
"pattern": "^(?!.*(?:TOKEN|SECRET|PASSWORD|PASSPHRASE|API_KEY|CREDENTIAL))[A-Z_][A-Z0-9_]*$"
|
|
997
|
+
},
|
|
998
|
+
"uniqueItems": true,
|
|
999
|
+
"description": "允许透传给钩子进程的环境变量白名单;TOKEN/SECRET 等敏感子串在 schema 层即被拒绝"
|
|
1000
|
+
},
|
|
1001
|
+
"requiresApproval": {
|
|
1002
|
+
"type": "boolean",
|
|
1003
|
+
"description": "执行前需要 checkpoint 级批准(绑定 planDigest + hookId);public-write preset 缺省 true"
|
|
1004
|
+
},
|
|
1005
|
+
"blocksVerified": {
|
|
1006
|
+
"type": "boolean",
|
|
1007
|
+
"description": "失败时是否阻断 VERIFIED;缺省 true;仅 preset 可声明 false(运行时 fail-closed 校验)"
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
},
|
|
939
1011
|
"postPublishMaterialize": {
|
|
940
1012
|
"type": "object",
|
|
941
1013
|
"description": "载荷物化钩子:executable+参数数组(禁止 shell 字符串),stdout 中 outputMarker 行之后为载荷目录路径;可选 requireReport 对 stdout 首个 JSON 对象做字段断言",
|
|
@@ -43,7 +43,8 @@
|
|
|
43
43
|
"PARTIAL",
|
|
44
44
|
"BLOCKED",
|
|
45
45
|
"DISTRIBUTING",
|
|
46
|
-
"DISTRIBUTED"
|
|
46
|
+
"DISTRIBUTED",
|
|
47
|
+
"NEEDS_INPUT"
|
|
47
48
|
],
|
|
48
49
|
"description": "Current status of the run"
|
|
49
50
|
},
|
|
@@ -55,7 +56,8 @@
|
|
|
55
56
|
"publish",
|
|
56
57
|
"reconcile",
|
|
57
58
|
"verify",
|
|
58
|
-
"distribute"
|
|
59
|
+
"distribute",
|
|
60
|
+
"postverify"
|
|
59
61
|
],
|
|
60
62
|
"description": "The command that initiated this run"
|
|
61
63
|
},
|
|
@@ -133,7 +135,8 @@
|
|
|
133
135
|
"codebuddy-marketplace-install",
|
|
134
136
|
"set-default-branch",
|
|
135
137
|
"distribute-probe",
|
|
136
|
-
"distribute-mirror"
|
|
138
|
+
"distribute-mirror",
|
|
139
|
+
"postpublish-hook"
|
|
137
140
|
],
|
|
138
141
|
"description": "Type of external action"
|
|
139
142
|
},
|
|
@@ -149,9 +152,10 @@
|
|
|
149
152
|
"PASSED_AUTOMATIC",
|
|
150
153
|
"PASSED_MANUAL",
|
|
151
154
|
"NOT_REQUIRED_UNCHANGED",
|
|
152
|
-
"NO_CHANGE"
|
|
155
|
+
"NO_CHANGE",
|
|
156
|
+
"AWAITING_APPROVAL"
|
|
153
157
|
],
|
|
154
|
-
"description": "Result status of this checkpoint (uncertain = started, result unknown; deferred = marketplace action postponed to verify phase; PASSED_AUTOMATIC/PASSED_MANUAL/NOT_REQUIRED_UNCHANGED 为验证阶段专用状态; NO_CHANGE = distribute 目标暂存差异为空,未产生 commit/tag/push)"
|
|
158
|
+
"description": "Result status of this checkpoint (uncertain = started, result unknown; deferred = marketplace action postponed to verify phase; PASSED_AUTOMATIC/PASSED_MANUAL/NOT_REQUIRED_UNCHANGED 为验证阶段专用状态; NO_CHANGE = distribute 目标暂存差异为空,未产生 commit/tag/push; AWAITING_APPROVAL = requiresApproval postPublish hook 尚无 checkpoint 批准,v0.6.3 R1)"
|
|
155
159
|
},
|
|
156
160
|
"preObserve": {
|
|
157
161
|
"type": "string",
|
|
@@ -621,7 +625,8 @@
|
|
|
621
625
|
"enum": [
|
|
622
626
|
"reconcile",
|
|
623
627
|
"verify",
|
|
624
|
-
"distribute"
|
|
628
|
+
"distribute",
|
|
629
|
+
"postverify"
|
|
625
630
|
]
|
|
626
631
|
}
|
|
627
632
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3",
|
|
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.6.
|
|
22
|
+
"Prepare a release plan for version 0.6.3.",
|
|
23
23
|
"Help me understand the release workflow."
|
|
24
24
|
]
|
|
25
25
|
}
|