release-skill 0.1.1

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 (125) hide show
  1. package/.agents/plugins/marketplace.json +23 -0
  2. package/.claude-plugin/marketplace.json +16 -0
  3. package/.claude-plugin/plugin.json +10 -0
  4. package/.codex-plugin/plugin.json +26 -0
  5. package/CHANGELOG.md +68 -0
  6. package/CODE_OF_CONDUCT.md +76 -0
  7. package/CONTRIBUTING.md +49 -0
  8. package/INSTALL.md +182 -0
  9. package/LICENSE +21 -0
  10. package/NOTICE +25 -0
  11. package/README.md +501 -0
  12. package/README.zh-CN.md +463 -0
  13. package/SECURITY.md +48 -0
  14. package/adapters/claude/.claude-plugin/marketplace.json +16 -0
  15. package/adapters/claude/.claude-plugin/plugin.json +10 -0
  16. package/adapters/claude/skills/release-assess/SKILL.md +52 -0
  17. package/adapters/claude/skills/release-help/SKILL.md +60 -0
  18. package/adapters/claude/skills/release-prepare/SKILL.md +71 -0
  19. package/adapters/claude/skills/release-publish/SKILL.md +55 -0
  20. package/adapters/claude/skills/release-reconcile/SKILL.md +73 -0
  21. package/adapters/claude/skills/release-verify/SKILL.md +70 -0
  22. package/adapters/codex/.codex-plugin/plugin.json +26 -0
  23. package/adapters/codex/skills/release-assess/SKILL.md +52 -0
  24. package/adapters/codex/skills/release-help/SKILL.md +60 -0
  25. package/adapters/codex/skills/release-prepare/SKILL.md +71 -0
  26. package/adapters/codex/skills/release-publish/SKILL.md +55 -0
  27. package/adapters/codex/skills/release-reconcile/SKILL.md +73 -0
  28. package/adapters/codex/skills/release-verify/SKILL.md +70 -0
  29. package/bin/release-skill.mjs +743 -0
  30. package/native/safe-write/binding.gyp +40 -0
  31. package/native/safe-write/prebuilds.json +4 -0
  32. package/native/safe-write/src/safe_write.cc +2023 -0
  33. package/package.json +75 -0
  34. package/references/.render-manifest.json +33 -0
  35. package/references/00-target-state.md +124 -0
  36. package/references/01-state-machine.md +155 -0
  37. package/references/02-project-config.md +217 -0
  38. package/references/03-readme-quality.md +136 -0
  39. package/references/04-supply-chain.md +147 -0
  40. package/references/05-evidence-and-errors.md +164 -0
  41. package/references/06-adapter-contract.md +178 -0
  42. package/schemas/.render-manifest.json +37 -0
  43. package/schemas/approval-record.schema.json +115 -0
  44. package/schemas/artifact-lock.schema.json +111 -0
  45. package/schemas/artifact-plan.schema.json +52 -0
  46. package/schemas/artifact-policy.schema.json +76 -0
  47. package/schemas/evidence-event.schema.json +89 -0
  48. package/schemas/release-plan.schema.json +369 -0
  49. package/schemas/release-project.schema.json +359 -0
  50. package/schemas/release-run.schema.json +195 -0
  51. package/skills/release-assess/SKILL.md +52 -0
  52. package/skills/release-help/SKILL.md +60 -0
  53. package/skills/release-prepare/SKILL.md +71 -0
  54. package/skills/release-publish/SKILL.md +55 -0
  55. package/skills/release-reconcile/SKILL.md +73 -0
  56. package/skills/release-verify/SKILL.md +70 -0
  57. package/skills-src/release-assess/SKILL.md +52 -0
  58. package/skills-src/release-help/SKILL.md +60 -0
  59. package/skills-src/release-prepare/SKILL.md +71 -0
  60. package/skills-src/release-publish/SKILL.md +55 -0
  61. package/skills-src/release-reconcile/SKILL.md +73 -0
  62. package/skills-src/release-verify/SKILL.md +70 -0
  63. package/src/adapters/contract.mjs +214 -0
  64. package/src/adapters/git-github.mjs +214 -0
  65. package/src/adapters/npm.mjs +947 -0
  66. package/src/adapters/plugin-marketplace.mjs +1365 -0
  67. package/src/adapters/push-snapshot.mjs +216 -0
  68. package/src/artifacts/adoption.mjs +743 -0
  69. package/src/artifacts/artifact-plan.mjs +162 -0
  70. package/src/artifacts/entry.mjs +240 -0
  71. package/src/artifacts/git-authority.mjs +637 -0
  72. package/src/artifacts/graph.mjs +189 -0
  73. package/src/artifacts/inspect.mjs +520 -0
  74. package/src/artifacts/inventory.mjs +192 -0
  75. package/src/artifacts/merge/binary.mjs +77 -0
  76. package/src/artifacts/merge/entry-merge.mjs +228 -0
  77. package/src/artifacts/merge/json.mjs +641 -0
  78. package/src/artifacts/merge/markdown.mjs +246 -0
  79. package/src/artifacts/merge/regions.mjs +156 -0
  80. package/src/artifacts/merge/text.mjs +432 -0
  81. package/src/artifacts/merge/tree.mjs +202 -0
  82. package/src/artifacts/merge/yaml.mjs +669 -0
  83. package/src/artifacts/path-key.mjs +94 -0
  84. package/src/artifacts/policy.mjs +319 -0
  85. package/src/artifacts/producer-registry.mjs +439 -0
  86. package/src/artifacts/project-lock.mjs +732 -0
  87. package/src/artifacts/resolution.mjs +658 -0
  88. package/src/artifacts/safe-fs-backend-internal.mjs +680 -0
  89. package/src/artifacts/safe-fs.mjs +72 -0
  90. package/src/artifacts/state.mjs +495 -0
  91. package/src/artifacts/transaction-journal.mjs +983 -0
  92. package/src/artifacts/transaction.mjs +1361 -0
  93. package/src/commands/approve.mjs +280 -0
  94. package/src/commands/artifacts.mjs +627 -0
  95. package/src/commands/assess.mjs +838 -0
  96. package/src/commands/prepare.mjs +1377 -0
  97. package/src/commands/publish.mjs +883 -0
  98. package/src/commands/reconcile.mjs +1255 -0
  99. package/src/commands/verify.mjs +915 -0
  100. package/src/core/approval.mjs +332 -0
  101. package/src/core/baseline.mjs +272 -0
  102. package/src/core/blackbox-hard-gates.mjs +142 -0
  103. package/src/core/config.mjs +448 -0
  104. package/src/core/digest.mjs +90 -0
  105. package/src/core/errors.mjs +113 -0
  106. package/src/core/evidence.mjs +167 -0
  107. package/src/core/hooks.mjs +241 -0
  108. package/src/core/node-version.mjs +64 -0
  109. package/src/core/plan.mjs +735 -0
  110. package/src/core/previous-public-baseline.mjs +204 -0
  111. package/src/core/run.mjs +681 -0
  112. package/src/core/state-machine.mjs +76 -0
  113. package/src/core/version-consistency.mjs +111 -0
  114. package/src/producers/build-adapters.mjs +231 -0
  115. package/src/producers/render-public-assets.mjs +152 -0
  116. package/src/producers/sync-skills.mjs +96 -0
  117. package/src/readme/contract.mjs +297 -0
  118. package/src/readme/examples.mjs +288 -0
  119. package/src/readme/parity.mjs +122 -0
  120. package/src/snapshot/export.mjs +99 -0
  121. package/src/snapshot/frozen.mjs +401 -0
  122. package/src/snapshot/manifest.mjs +207 -0
  123. package/src/snapshot/public-map.mjs +1459 -0
  124. package/src/snapshot/public-path.mjs +110 -0
  125. package/src/snapshot/scan.mjs +419 -0
@@ -0,0 +1,369 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://release-skill.dev/schemas/release-plan/v1",
4
+ "title": "Release Plan",
5
+ "description": "Schema for frozen release plan produced by the prepare phase",
6
+ "type": "object",
7
+ "required": ["planVersion", "status", "baseline", "units", "externalActions"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "planVersion": {
11
+ "type": "integer",
12
+ "const": 1
13
+ },
14
+ "status": {
15
+ "type": "string",
16
+ "enum": [
17
+ "DISCOVERED",
18
+ "ASSESSED",
19
+ "PREPARED",
20
+ "APPROVED",
21
+ "PUBLISHING",
22
+ "PUBLISHED",
23
+ "VERIFIED",
24
+ "NEEDS_INPUT",
25
+ "BLOCKED",
26
+ "PARTIAL"
27
+ ]
28
+ },
29
+ "production": {
30
+ "type": "object",
31
+ "required": ["mode", "assetRoot"],
32
+ "additionalProperties": false,
33
+ "properties": {
34
+ "mode": { "const": "github-npm-v1" },
35
+ "assetRoot": { "type": "string", "minLength": 1 }
36
+ }
37
+ },
38
+ "baseline": {
39
+ "type": "object",
40
+ "required": ["gitTreeHash"],
41
+ "additionalProperties": false,
42
+ "properties": {
43
+ "gitTreeHash": {
44
+ "type": "string",
45
+ "minLength": 1
46
+ },
47
+ "workspaceDigest": {
48
+ "type": "string",
49
+ "minLength": 1,
50
+ "description": "Deterministic digest of workspace file state at plan freeze time"
51
+ },
52
+ "workspaceDigestAlgorithm": {
53
+ "type": "string",
54
+ "const": "git-workspace-v2",
55
+ "description": "Versioned algorithm authority for workspaceDigest"
56
+ },
57
+ "headCommit": {
58
+ "type": "string"
59
+ },
60
+ "dirtyFiles": {
61
+ "type": "array",
62
+ "items": { "type": "string" }
63
+ },
64
+ "capturedAt": {
65
+ "type": "string",
66
+ "format": "date-time"
67
+ }
68
+ }
69
+ },
70
+ "units": {
71
+ "type": "array",
72
+ "minItems": 1,
73
+ "items": {
74
+ "type": "object",
75
+ "required": ["id", "targetVersion", "previousPublicBaseline"],
76
+ "additionalProperties": false,
77
+ "properties": {
78
+ "id": {
79
+ "type": "string",
80
+ "minLength": 1,
81
+ "pattern": "^(?!\\.{1,2}$)[A-Za-z0-9][A-Za-z0-9._-]*$"
82
+ },
83
+ "targetVersion": {
84
+ "type": "string",
85
+ "minLength": 1
86
+ },
87
+ "source": {
88
+ "type": "string"
89
+ },
90
+ "publicRepo": {
91
+ "type": "string"
92
+ },
93
+ "tagTemplate": {
94
+ "type": "string"
95
+ },
96
+ "snapshotDigest": {
97
+ "type": "string",
98
+ "description": "SHA-256 digest of the snapshot content"
99
+ },
100
+ "productionConfig": {
101
+ "type": "object",
102
+ "additionalProperties": false,
103
+ "properties": {
104
+ "githubHost": { "type": "string" },
105
+ "branchTemplate": { "type": "string" },
106
+ "releaseTitleTemplate": { "type": "string" },
107
+ "releaseNotes": { "type": "string" }
108
+ }
109
+ },
110
+ "frozenSnapshot": {
111
+ "type": "object",
112
+ "required": ["path", "manifestDigest", "gitObjectDir", "branch", "commit", "tree"],
113
+ "additionalProperties": false,
114
+ "properties": {
115
+ "path": { "type": "string", "minLength": 1 },
116
+ "manifestDigest": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
117
+ "gitObjectDir": { "type": "string", "minLength": 1 },
118
+ "branch": { "type": "string", "minLength": 1 },
119
+ "commit": { "type": "string", "pattern": "^[a-f0-9]{40,64}$" },
120
+ "tree": { "type": "string", "pattern": "^[a-f0-9]{40,64}$" },
121
+ "npm": {
122
+ "anyOf": [
123
+ { "type": "null" },
124
+ {
125
+ "type": "object",
126
+ "required": ["tarballPath", "tarballSha256", "integrity", "size"],
127
+ "additionalProperties": false,
128
+ "properties": {
129
+ "tarballPath": { "type": "string", "minLength": 1 },
130
+ "tarballSha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
131
+ "integrity": { "type": "string", "minLength": 1 },
132
+ "size": { "type": "integer", "minimum": 1 }
133
+ }
134
+ }
135
+ ]
136
+ }
137
+ }
138
+ },
139
+ "distributions": {
140
+ "type": "array",
141
+ "items": {
142
+ "type": "object",
143
+ "required": ["type"],
144
+ "additionalProperties": false,
145
+ "properties": {
146
+ "type": {
147
+ "type": "string",
148
+ "enum": ["npm", "claude-plugin", "codex-plugin"]
149
+ },
150
+ "package": {
151
+ "type": "string",
152
+ "maxLength": 214,
153
+ "pattern": "^(?:@[a-z0-9][a-z0-9._-]*/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)$"
154
+ },
155
+ "access": {
156
+ "type": "string",
157
+ "enum": ["public", "restricted"]
158
+ },
159
+ "provenance": {
160
+ "type": "boolean"
161
+ },
162
+ "tag": {
163
+ "type": "string",
164
+ "minLength": 1
165
+ },
166
+ "registry": {
167
+ "type": "string",
168
+ "minLength": 1,
169
+ "pattern": "^https://[^\\s]+$",
170
+ "description": "Normalized HTTPS URL of the npm registry"
171
+ },
172
+ "publisher": {
173
+ "type": "string",
174
+ "minLength": 1,
175
+ "pattern": "^[a-z0-9][a-z0-9._-]*$",
176
+ "description": "Expected npm whoami username for this registry"
177
+ },
178
+ "plugin": {
179
+ "type": "string",
180
+ "minLength": 1,
181
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
182
+ },
183
+ "marketplace": {
184
+ "type": "string",
185
+ "minLength": 1,
186
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
187
+ },
188
+ "entrySkill": {
189
+ "type": "string",
190
+ "minLength": 1,
191
+ "pattern": "^[a-z0-9][a-z0-9-]*$"
192
+ },
193
+ "smokeBin": {
194
+ "type": "string",
195
+ "minLength": 1
196
+ },
197
+ "smokeArgs": {
198
+ "type": "array",
199
+ "items": { "type": "string" }
200
+ },
201
+ "smokeExpectedJson": {
202
+ "type": "object"
203
+ }
204
+ },
205
+ "allOf": [
206
+ {
207
+ "if": {
208
+ "properties": { "type": { "const": "npm" } }
209
+ },
210
+ "then": { "required": ["package", "registry", "publisher"] }
211
+ },
212
+ {
213
+ "if": {
214
+ "properties": { "type": { "enum": ["claude-plugin", "codex-plugin"] } }
215
+ },
216
+ "then": { "required": ["plugin", "marketplace", "entrySkill"] }
217
+ },
218
+ {
219
+ "if": {
220
+ "required": ["smokeExpectedJson"],
221
+ "properties": { "smokeBin": { "minLength": 1 } }
222
+ },
223
+ "then": { "required": ["smokeBin"] }
224
+ },
225
+ {
226
+ "if": {
227
+ "required": ["smokeArgs"],
228
+ "properties": { "smokeBin": { "minLength": 1 } }
229
+ },
230
+ "then": { "required": ["smokeBin"] }
231
+ }
232
+ ]
233
+ }
234
+ },
235
+ "previousPublicBaseline": {
236
+ "type": "object",
237
+ "required": ["mode", "status"],
238
+ "additionalProperties": false,
239
+ "properties": {
240
+ "mode": { "type": "string", "enum": ["none", "bound"] },
241
+ "githubHost": { "type": "string" },
242
+ "repo": { "type": "string" },
243
+ "ref": { "type": "string" },
244
+ "commit": { "type": "string" },
245
+ "tree": { "type": "string" },
246
+ "manifestDigest": { "type": "string" },
247
+ "observedCommit": { "type": "string" },
248
+ "observedAt": { "type": "string", "format": "date-time" },
249
+ "status": { "type": "string", "enum": ["consistent", "drifted", "unknown", "unobserved-offline", "blocking"] }
250
+ },
251
+ "if": { "properties": { "mode": { "const": "bound" } } },
252
+ "then": { "required": ["repo", "ref", "commit"] },
253
+ "else": {
254
+ "allOf": [
255
+ { "not": { "required": ["repo"] } },
256
+ { "not": { "required": ["githubHost"] } },
257
+ { "not": { "required": ["ref"] } },
258
+ { "not": { "required": ["commit"] } },
259
+ { "not": { "required": ["tree"] } },
260
+ { "not": { "required": ["manifestDigest"] } },
261
+ { "not": { "required": ["observedCommit"] } },
262
+ { "not": { "required": ["observedAt"] } }
263
+ ]
264
+ }
265
+ }
266
+ }
267
+ }
268
+ },
269
+ "configDigest": {
270
+ "type": "string",
271
+ "minLength": 1,
272
+ "description": "Digest of the project configuration at plan freeze time"
273
+ },
274
+ "externalActions": {
275
+ "type": "array",
276
+ "minItems": 1,
277
+ "items": {
278
+ "type": "object",
279
+ "required": ["id", "type", "adapter"],
280
+ "additionalProperties": false,
281
+ "properties": {
282
+ "id": {
283
+ "type": "string",
284
+ "minLength": 1
285
+ },
286
+ "type": {
287
+ "type": "string",
288
+ "enum": [
289
+ "push-commit",
290
+ "push-snapshot",
291
+ "create-tag",
292
+ "npm-publish",
293
+ "github-release",
294
+ "claude-marketplace-install",
295
+ "codex-marketplace-install"
296
+ ]
297
+ },
298
+ "adapter": {
299
+ "type": "string",
300
+ "minLength": 1
301
+ },
302
+ "unitId": {
303
+ "type": "string"
304
+ },
305
+ "parameters": {
306
+ "type": "object"
307
+ },
308
+ "expected": {
309
+ "type": "object",
310
+ "description": "Expected observation state for verification"
311
+ },
312
+ "status": {
313
+ "type": "string",
314
+ "enum": ["PENDING", "SUCCEEDED", "FAILED", "SKIPPED"],
315
+ "description": "Action execution status"
316
+ }
317
+ }
318
+ }
319
+ },
320
+ "createdAt": {
321
+ "type": "string",
322
+ "format": "date-time"
323
+ },
324
+ "publishedAt": {
325
+ "type": "string",
326
+ "format": "date-time",
327
+ "description": "ISO 8601 timestamp when the plan was published"
328
+ },
329
+ "reconciledAt": {
330
+ "type": "string",
331
+ "format": "date-time",
332
+ "description": "ISO 8601 timestamp when the plan was last reconciled"
333
+ },
334
+ "snapshotDigest": {
335
+ "type": "string",
336
+ "description": "Overall snapshot digest across all units"
337
+ },
338
+ "digest": {
339
+ "type": "string",
340
+ "minLength": 1
341
+ },
342
+ "waivers": {
343
+ "type": "array",
344
+ "items": {
345
+ "type": "object",
346
+ "required": ["rule", "reason", "responsible", "expiresAt"],
347
+ "additionalProperties": false,
348
+ "properties": {
349
+ "rule": {
350
+ "type": "string",
351
+ "minLength": 1
352
+ },
353
+ "reason": {
354
+ "type": "string",
355
+ "minLength": 1
356
+ },
357
+ "responsible": {
358
+ "type": "string",
359
+ "minLength": 1
360
+ },
361
+ "expiresAt": {
362
+ "type": "string",
363
+ "format": "date-time"
364
+ }
365
+ }
366
+ }
367
+ }
368
+ }
369
+ }