release-skill 0.9.16 → 0.9.17

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 (164) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +2 -2
  4. package/.kimi-plugin/plugin.json +1 -1
  5. package/.qoder-plugin/plugin.json +10 -0
  6. package/CHANGELOG.md +30 -0
  7. package/INSTALL.md +57 -9
  8. package/INSTALL.zh-CN.md +44 -7
  9. package/README.md +75 -31
  10. package/README.zh-CN.md +60 -29
  11. package/adapters/claude/.claude-plugin/plugin.json +1 -1
  12. package/adapters/claude/bin/release-skill.bundle.mjs +1443 -672
  13. package/adapters/claude/schemas/release-plan.schema.json +1 -1
  14. package/adapters/claude/schemas/release-project.schema.json +1 -1
  15. package/adapters/claude/skills/release-finish/SKILL.md +14 -13
  16. package/adapters/claude/skills/release-help/SKILL.md +3 -3
  17. package/adapters/claude/skills/release-verify/SKILL.md +2 -2
  18. package/adapters/codex/.codex-plugin/plugin.json +2 -2
  19. package/adapters/codex/bin/release-skill.bundle.mjs +1443 -672
  20. package/adapters/codex/schemas/release-plan.schema.json +1 -1
  21. package/adapters/codex/schemas/release-project.schema.json +1 -1
  22. package/adapters/codex/skills/release-finish/SKILL.md +14 -13
  23. package/adapters/codex/skills/release-help/SKILL.md +3 -3
  24. package/adapters/codex/skills/release-verify/SKILL.md +2 -2
  25. package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
  26. package/adapters/kimi/bin/release-skill.bundle.mjs +1443 -672
  27. package/adapters/kimi/schemas/release-plan.schema.json +1 -1
  28. package/adapters/kimi/schemas/release-project.schema.json +1 -1
  29. package/adapters/kimi/skills/release-finish/SKILL.md +14 -13
  30. package/adapters/kimi/skills/release-help/SKILL.md +3 -3
  31. package/adapters/kimi/skills/release-verify/SKILL.md +2 -2
  32. package/adapters/qoder/.qoder-plugin/plugin.json +10 -0
  33. package/adapters/qoder/bin/consumer-contract-vectors.json +110 -0
  34. package/adapters/qoder/bin/error-codes.json +161 -0
  35. package/adapters/qoder/bin/foundation-legal/skill-family-contracts/LICENSE +202 -0
  36. package/adapters/qoder/bin/foundation-legal/skill-family-contracts/NOTICE +10 -0
  37. package/adapters/qoder/bin/foundation-legal/skill-family-engineering-kit/LICENSE +202 -0
  38. package/adapters/qoder/bin/foundation-legal/skill-family-engineering-kit/NOTICE +10 -0
  39. package/adapters/qoder/bin/foundation-legal/skill-family-engineering-kit/THIRD_PARTY_NOTICES +142 -0
  40. package/adapters/qoder/bin/foundation-legal/skill-family-harness-node/LICENSE +202 -0
  41. package/adapters/qoder/bin/foundation-legal/skill-family-harness-node/NOTICE +10 -0
  42. package/adapters/qoder/bin/foundation-legal/skill-family-harness-node/native-NOTICE +2 -0
  43. package/adapters/qoder/bin/foundation-resource-binding.json +1 -0
  44. package/adapters/qoder/bin/kernel-protocol.json +60 -0
  45. package/adapters/qoder/bin/license-texts/Apache-2.0.txt +201 -0
  46. package/adapters/qoder/bin/license-texts/MIT.txt +21 -0
  47. package/adapters/qoder/bin/prebuild-manifest.json +79 -0
  48. package/adapters/qoder/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  49. package/adapters/qoder/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  50. package/adapters/qoder/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  51. package/adapters/qoder/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  52. package/adapters/qoder/bin/registry.json +347 -0
  53. package/adapters/qoder/bin/release-skill-local-finish.mjs +4 -0
  54. package/adapters/qoder/bin/release-skill.bundle.mjs +149446 -0
  55. package/adapters/qoder/bin/release-skill.mjs +54 -0
  56. package/adapters/qoder/bin/rules.json +104 -0
  57. package/adapters/qoder/bin/schemas/consumer-contract-vector.schema.json +149 -0
  58. package/adapters/qoder/data/hosts/claude/host-descriptor.json +45 -0
  59. package/adapters/qoder/data/hosts/codebuddy/host-descriptor.json +26 -0
  60. package/adapters/qoder/data/hosts/codex/host-descriptor.json +45 -0
  61. package/adapters/qoder/data/hosts/deepseek-harness/host-descriptor.json +23 -0
  62. package/adapters/qoder/data/hosts/kimi-code/host-descriptor.json +36 -0
  63. package/adapters/qoder/data/hosts/qoder/host-descriptor.json +26 -0
  64. package/adapters/qoder/data/hosts/registry.json +13 -0
  65. package/adapters/qoder/data/hosts/workbuddy/host-descriptor.json +34 -0
  66. package/adapters/qoder/data/licensing/registry.json +211 -0
  67. package/adapters/qoder/data/licensing/schema.json +207 -0
  68. package/adapters/qoder/native/safe-write/binding.gyp +41 -0
  69. package/adapters/qoder/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
  70. package/adapters/qoder/native/safe-write/prebuilds.json +24 -0
  71. package/adapters/qoder/native/safe-write/src/safe_write.cc +2032 -0
  72. package/adapters/qoder/schemas/.render-manifest.json +41 -0
  73. package/adapters/qoder/schemas/approval-record.schema.json +115 -0
  74. package/adapters/qoder/schemas/artifact-lock.schema.json +111 -0
  75. package/adapters/qoder/schemas/artifact-plan.schema.json +52 -0
  76. package/adapters/qoder/schemas/artifact-policy.schema.json +76 -0
  77. package/adapters/qoder/schemas/evidence-event-v2.schema.json +164 -0
  78. package/adapters/qoder/schemas/evidence-event.schema.json +89 -0
  79. package/adapters/qoder/schemas/postpublish-approval-record.schema.json +47 -0
  80. package/adapters/qoder/schemas/release-plan.schema.json +1996 -0
  81. package/adapters/qoder/schemas/release-project.schema.json +1613 -0
  82. package/adapters/qoder/schemas/release-run.schema.json +777 -0
  83. package/adapters/qoder/skills/release-assess/SKILL.md +60 -0
  84. package/adapters/qoder/skills/release-config/SKILL.md +150 -0
  85. package/adapters/qoder/skills/release-docs/SKILL.md +119 -0
  86. package/adapters/qoder/skills/release-finish/SKILL.md +141 -0
  87. package/adapters/qoder/skills/release-help/SKILL.md +153 -0
  88. package/adapters/qoder/skills/release-marketplace/SKILL.md +156 -0
  89. package/adapters/qoder/skills/release-prepare/SKILL.md +135 -0
  90. package/adapters/qoder/skills/release-publish/SKILL.md +91 -0
  91. package/adapters/qoder/skills/release-reconcile/SKILL.md +80 -0
  92. package/adapters/qoder/skills/release-setup/SKILL.md +131 -0
  93. package/adapters/qoder/skills/release-verify/SKILL.md +109 -0
  94. package/adapters/qoder/src/schemas/adapter-build-manifest.schema.json +41 -0
  95. package/adapters/qoder/src/schemas/adapter-peer-verification-request.schema.json +54 -0
  96. package/adapters/qoder/src/schemas/adapter-peer-verification-result.schema.json +54 -0
  97. package/adapters/qoder/src/schemas/adapter-source.schema.json +47 -0
  98. package/adapters/qoder/src/schemas/audit-baseline-pin.schema.json +163 -0
  99. package/adapters/qoder/src/schemas/declared-read-surface-result.schema.json +61 -0
  100. package/adapters/qoder/src/schemas/engineering-baseline.schema.json +77 -0
  101. package/adapters/qoder/src/schemas/executable-identity-observation.schema.json +162 -0
  102. package/adapters/qoder/src/schemas/filesystem-root-binding.schema.json +14 -0
  103. package/adapters/qoder/src/schemas/filesystem-tree-observation.schema.json +71 -0
  104. package/adapters/qoder/src/schemas/fixed-set-publication-manifest.schema.json +108 -0
  105. package/adapters/qoder/src/schemas/fixed-set-publication-receipt.schema.json +148 -0
  106. package/adapters/qoder/src/schemas/host-capability-fact.schema.json +31 -0
  107. package/adapters/qoder/src/schemas/host-descriptor.schema.json +137 -0
  108. package/adapters/qoder/src/schemas/host-operation-plan.schema.json +57 -0
  109. package/adapters/qoder/src/schemas/host-operation-receipt.schema.json +81 -0
  110. package/adapters/qoder/src/schemas/host-probe-result.schema.json +30 -0
  111. package/adapters/qoder/src/schemas/host-registry.schema.json +18 -0
  112. package/adapters/qoder/src/schemas/host-verification-request.schema.json +67 -0
  113. package/adapters/qoder/src/schemas/host-verification-result.schema.json +149 -0
  114. package/adapters/qoder/src/schemas/managed-file-lock.schema.json +77 -0
  115. package/adapters/qoder/src/schemas/migration-manifest.schema.json +412 -0
  116. package/adapters/qoder/src/schemas/observation-scope.schema.json +91 -0
  117. package/adapters/qoder/src/schemas/operation-request.schema.json +58 -0
  118. package/adapters/qoder/src/schemas/operation-result.schema.json +130 -0
  119. package/adapters/qoder/src/schemas/platform-difference-registry.schema.json +110 -0
  120. package/adapters/qoder/src/schemas/plugin-verification-request.schema.json +499 -0
  121. package/adapters/qoder/src/schemas/plugin-verification-result.schema.json +1217 -0
  122. package/adapters/qoder/src/schemas/profile-adoption-declaration.schema.json +111 -0
  123. package/adapters/qoder/src/schemas/profile-descriptor.schema.json +99 -0
  124. package/adapters/qoder/src/schemas/project-manifest.schema.json +67 -0
  125. package/adapters/qoder/src/schemas/project-profile.schema.json +25 -0
  126. package/adapters/qoder/src/schemas/public-boundary-declaration.schema.json +73 -0
  127. package/adapters/qoder/src/schemas/report-binding.schema.json +42 -0
  128. package/adapters/qoder/src/schemas/report-model.schema.json +308 -0
  129. package/adapters/qoder/src/schemas/skill-family-directory-verification-request.schema.json +100 -0
  130. package/adapters/qoder/src/schemas/skill-family-directory-verification-result.schema.json +193 -0
  131. package/adapters/qoder/src/schemas/source-authority-receipt.schema.json +31 -0
  132. package/adapters/qoder/src/schemas/state-event-envelope.schema.json +38 -0
  133. package/adapters/qoder/src/schemas/state-snapshot-metadata.schema.json +25 -0
  134. package/adapters/qoder/src/schemas/structured-scan-policy.schema.json +97 -0
  135. package/adapters/qoder/src/schemas/surface-scan-policy.schema.json +42 -0
  136. package/adapters/qoder/src/schemas/timeout-policy.schema.json +24 -0
  137. package/adapters/qoder/src/schemas/token-estimate-record.schema.json +75 -0
  138. package/adapters/qoder/src/schemas/token-estimate-result.schema.json +43 -0
  139. package/adapters/qoder/src/schemas/watchdog-termination-envelope.schema.json +156 -0
  140. package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
  141. package/adapters/workbuddy/bin/release-skill.bundle.mjs +1443 -672
  142. package/adapters/workbuddy/schemas/release-plan.schema.json +1 -1
  143. package/adapters/workbuddy/schemas/release-project.schema.json +1 -1
  144. package/adapters/workbuddy/skills/release-finish/SKILL.md +14 -13
  145. package/adapters/workbuddy/skills/release-help/SKILL.md +3 -3
  146. package/adapters/workbuddy/skills/release-verify/SKILL.md +2 -2
  147. package/bin/release-skill-cli.mjs +124 -6
  148. package/bin/release-skill.bundle.mjs +1443 -672
  149. package/package.json +4 -2
  150. package/platform-manifest.json +70 -4
  151. package/references/02-project-config.md +9 -2
  152. package/schemas/release-plan.schema.json +1 -1
  153. package/schemas/release-project.schema.json +1 -1
  154. package/skills/release-finish/SKILL.md +14 -13
  155. package/skills/release-help/SKILL.md +3 -3
  156. package/skills/release-verify/SKILL.md +2 -2
  157. package/skills-src/release-finish/SKILL.md +14 -13
  158. package/skills-src/release-help/SKILL.md +3 -3
  159. package/skills-src/release-verify/SKILL.md +2 -2
  160. package/src/commands/post-release-local.mjs +360 -51
  161. package/src/commands/verify-records.mjs +467 -0
  162. package/src/core/postpublish.mjs +1 -1
  163. package/src/core/run.mjs +1 -1
  164. package/src/producers/build-adapters.mjs +36 -13
@@ -0,0 +1,777 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://release-skill.dev/schemas/release-run/v1",
4
+ "title": "Release Run",
5
+ "description": "Schema for a release run record capturing execution checkpoints",
6
+ "type": "object",
7
+ "required": [
8
+ "runId",
9
+ "command",
10
+ "planDigest",
11
+ "planPath",
12
+ "status",
13
+ "checkpoints"
14
+ ],
15
+ "additionalProperties": false,
16
+ "properties": {
17
+ "runId": {
18
+ "type": "string",
19
+ "minLength": 1,
20
+ "description": "Unique identifier for this run (UUID)"
21
+ },
22
+ "runDigest": {
23
+ "type": "string",
24
+ "pattern": "^[a-f0-9]{64}$",
25
+ "description": "SHA-256 digest of the final run state, excluding this field"
26
+ },
27
+ "stateSequence": {
28
+ "type": "integer",
29
+ "minimum": 0,
30
+ "description": "Monotonic sequence of an immutable in-flight run state snapshot"
31
+ },
32
+ "previousStateDigest": {
33
+ "type": "string",
34
+ "pattern": "^[a-f0-9]{64}$",
35
+ "description": "Digest of the immediately preceding stateSequence snapshot"
36
+ },
37
+ "status": {
38
+ "type": "string",
39
+ "enum": [
40
+ "PUBLISHING",
41
+ "PUBLISHED",
42
+ "VERIFIED",
43
+ "PARTIAL",
44
+ "BLOCKED",
45
+ "DISTRIBUTING",
46
+ "DISTRIBUTED",
47
+ "NEEDS_INPUT"
48
+ ],
49
+ "description": "Current status of the run"
50
+ },
51
+ "command": {
52
+ "type": "string",
53
+ "enum": [
54
+ "assess",
55
+ "prepare",
56
+ "publish",
57
+ "reconcile",
58
+ "verify",
59
+ "distribute",
60
+ "postverify"
61
+ ],
62
+ "description": "The command that initiated this run"
63
+ },
64
+ "sourceRunId": {
65
+ "type": "string",
66
+ "minLength": 1,
67
+ "description": "Run ID of the source run (for reconcile runs)"
68
+ },
69
+ "sourceRunDigest": {
70
+ "type": "string",
71
+ "pattern": "^[a-f0-9]{64}$",
72
+ "description": "Digest of the immutable source run consumed by reconcile or verify"
73
+ },
74
+ "sourceRunPath": {
75
+ "type": "string",
76
+ "minLength": 1,
77
+ "description": "Path of the immutable source run authority consumed by reconcile or verify"
78
+ },
79
+ "planDigest": {
80
+ "type": "string",
81
+ "description": "SHA-256 digest of the release plan used"
82
+ },
83
+ "planPath": {
84
+ "type": "string",
85
+ "minLength": 1,
86
+ "description": "Immutable digest-addressed plan authority used by this run"
87
+ },
88
+ "approvalDigest": {
89
+ "type": "string",
90
+ "pattern": "^[a-f0-9]{64}$",
91
+ "description": "Digest of the immutable approval authority consumed by publish/reconcile"
92
+ },
93
+ "approvalPath": {
94
+ "type": "string",
95
+ "minLength": 1,
96
+ "description": "Immutable digest-addressed approval authority consumed by publish/reconcile"
97
+ },
98
+ "startedAt": {
99
+ "type": "string",
100
+ "format": "date-time",
101
+ "description": "ISO 8601 timestamp when the run started"
102
+ },
103
+ "finishedAt": {
104
+ "type": "string",
105
+ "format": "date-time",
106
+ "description": "ISO 8601 timestamp when the run finished"
107
+ },
108
+ "checkpoints": {
109
+ "type": "array",
110
+ "items": {
111
+ "type": "object",
112
+ "required": [
113
+ "actionId",
114
+ "actionType",
115
+ "status"
116
+ ],
117
+ "additionalProperties": false,
118
+ "properties": {
119
+ "actionId": {
120
+ "type": "string",
121
+ "minLength": 1,
122
+ "description": "Identifier of the external action"
123
+ },
124
+ "actionType": {
125
+ "type": "string",
126
+ "enum": [
127
+ "push-commit",
128
+ "push-snapshot",
129
+ "create-tag",
130
+ "npm-publish",
131
+ "github-release",
132
+ "claude-marketplace-install",
133
+ "codex-marketplace-install",
134
+ "kimi-marketplace-install",
135
+ "codebuddy-marketplace-install",
136
+ "set-default-branch",
137
+ "distribute-probe",
138
+ "distribute-mirror",
139
+ "postpublish-hook"
140
+ ],
141
+ "description": "Type of external action"
142
+ },
143
+ "status": {
144
+ "type": "string",
145
+ "enum": [
146
+ "succeeded",
147
+ "failed",
148
+ "skipped",
149
+ "pending",
150
+ "uncertain",
151
+ "deferred",
152
+ "PASSED_AUTOMATIC",
153
+ "PASSED_MANUAL",
154
+ "NOT_REQUIRED_UNCHANGED",
155
+ "NO_CHANGE",
156
+ "AWAITING_APPROVAL"
157
+ ],
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)"
159
+ },
160
+ "preObserve": {
161
+ "type": "string",
162
+ "enum": [
163
+ "CONSISTENT",
164
+ "MISSING",
165
+ "CONFLICTING"
166
+ ],
167
+ "description": "Remote state before execution"
168
+ },
169
+ "postObserve": {
170
+ "type": "string",
171
+ "enum": [
172
+ "CONSISTENT",
173
+ "MISSING",
174
+ "CONFLICTING"
175
+ ],
176
+ "description": "Remote state after execution"
177
+ },
178
+ "startedAt": {
179
+ "type": "string",
180
+ "format": "date-time"
181
+ },
182
+ "finishedAt": {
183
+ "type": "string",
184
+ "format": "date-time"
185
+ },
186
+ "remoteRef": {
187
+ "type": "object",
188
+ "description": "Remote resource identifiers (commit, tag, version, URL)",
189
+ "additionalProperties": false,
190
+ "properties": {
191
+ "commit": {
192
+ "type": "string"
193
+ },
194
+ "tag": {
195
+ "type": "string"
196
+ },
197
+ "version": {
198
+ "type": "string"
199
+ },
200
+ "url": {
201
+ "type": "string"
202
+ },
203
+ "integrity": {
204
+ "type": "string",
205
+ "pattern": "^sha512-[A-Za-z0-9+/]{86}==$",
206
+ "description": "Observed npm dist.integrity when an already-consistent npm publish is skipped"
207
+ }
208
+ }
209
+ },
210
+ "error": {
211
+ "type": "object",
212
+ "description": "Error details when status is failed",
213
+ "additionalProperties": false,
214
+ "properties": {
215
+ "code": {
216
+ "type": "string",
217
+ "enum": [
218
+ "CONFIG_INVALID",
219
+ "BASELINE_CHANGED",
220
+ "DIRTY_SCOPE_CONFLICT",
221
+ "GATE_FAILED",
222
+ "AUTH_MISSING",
223
+ "REMOTE_CONFLICT",
224
+ "REMOTE_UNAVAILABLE",
225
+ "HOOK_TIMEOUT",
226
+ "PARTIAL_RELEASE",
227
+ "POST_PUBLISH_VERIFY_FAILED"
228
+ ]
229
+ },
230
+ "message": {
231
+ "type": "string"
232
+ }
233
+ }
234
+ },
235
+ "reason": {
236
+ "type": "string",
237
+ "description": "Stable reason code for deferred checkpoints (e.g. CONSUMER_VERIFICATION_DEFERRED)"
238
+ },
239
+ "phase": {
240
+ "type": "string",
241
+ "description": "Phase identifier for deferred checkpoints (e.g. post-publish-verification)"
242
+ },
243
+ "remoteUrl": {
244
+ "type": "string",
245
+ "description": "distribute 目标远端 URL"
246
+ },
247
+ "branch": {
248
+ "type": "string",
249
+ "description": "distribute 目标分支"
250
+ },
251
+ "tag": {
252
+ "type": "string",
253
+ "description": "distribute 分发 tag"
254
+ },
255
+ "tagCommit": {
256
+ "type": "string",
257
+ "pattern": "^[a-f0-9]{40}$",
258
+ "description": "冻结的 create-tag 预期 commit"
259
+ },
260
+ "previousHead": {
261
+ "type": "string",
262
+ "pattern": "^[a-f0-9]{40}$",
263
+ "description": "执行前目标分支 tip"
264
+ },
265
+ "pushedCommit": {
266
+ "type": "string",
267
+ "pattern": "^[a-f0-9]{40}$",
268
+ "description": "实际推送的 commit(与 ls-remote 交叉核对)"
269
+ },
270
+ "mode": {
271
+ "type": "string",
272
+ "enum": [
273
+ "pushed",
274
+ "no-change",
275
+ "dry-run"
276
+ ],
277
+ "description": "distribute 执行模式"
278
+ },
279
+ "executor": {
280
+ "type": "string",
281
+ "description": "执行者标识"
282
+ },
283
+ "payloadFileCount": {
284
+ "type": "integer",
285
+ "minimum": 0,
286
+ "description": "写入目标的载荷文件数"
287
+ }
288
+ },
289
+ "allOf": [
290
+ {
291
+ "if": {
292
+ "properties": {
293
+ "remoteRef": {
294
+ "type": "object",
295
+ "required": [
296
+ "integrity"
297
+ ]
298
+ }
299
+ },
300
+ "required": [
301
+ "remoteRef"
302
+ ]
303
+ },
304
+ "then": {
305
+ "properties": {
306
+ "actionType": {
307
+ "const": "npm-publish"
308
+ },
309
+ "status": {
310
+ "const": "skipped"
311
+ },
312
+ "preObserve": {
313
+ "const": "CONSISTENT"
314
+ }
315
+ },
316
+ "required": [
317
+ "actionType",
318
+ "status",
319
+ "preObserve"
320
+ ]
321
+ }
322
+ }
323
+ ]
324
+ }
325
+ },
326
+ "sourceAuthorityReceipts": {
327
+ "type": "array",
328
+ "description": "Source authority content closure receipts: one per publish run proving remote content matches frozen inputs",
329
+ "items": {
330
+ "type": "object",
331
+ "required": [
332
+ "sourceRepository",
333
+ "defaultBranch",
334
+ "inputDigest",
335
+ "algorithmVersion",
336
+ "entryCount",
337
+ "planDigest",
338
+ "verifiedAt",
339
+ "result"
340
+ ],
341
+ "additionalProperties": false,
342
+ "properties": {
343
+ "sourceRepository": {
344
+ "type": "string",
345
+ "minLength": 1
346
+ },
347
+ "defaultBranch": {
348
+ "type": "string",
349
+ "minLength": 1
350
+ },
351
+ "inputDigest": {
352
+ "type": "string",
353
+ "pattern": "^[a-f0-9]{64}$"
354
+ },
355
+ "algorithmVersion": {
356
+ "type": "integer",
357
+ "minimum": 1
358
+ },
359
+ "entryCount": {
360
+ "type": "integer",
361
+ "minimum": 1
362
+ },
363
+ "planDigest": {
364
+ "type": "string",
365
+ "minLength": 1
366
+ },
367
+ "verifiedAt": {
368
+ "type": "string",
369
+ "format": "date-time"
370
+ },
371
+ "result": {
372
+ "type": "string",
373
+ "enum": [
374
+ "CONSISTENT",
375
+ "MISMATCH"
376
+ ]
377
+ },
378
+ "observedCommit": {
379
+ "type": "string",
380
+ "pattern": "^[a-f0-9]{40,64}$"
381
+ },
382
+ "mismatchedPaths": {
383
+ "type": "array",
384
+ "items": {
385
+ "type": "string"
386
+ }
387
+ }
388
+ }
389
+ }
390
+ },
391
+ "consumerVerificationReceipts": {
392
+ "type": "array",
393
+ "description": "消费端验证收据,每个 marketplace action 一条记录",
394
+ "items": {
395
+ "type": "object",
396
+ "required": [
397
+ "actionId",
398
+ "unitId",
399
+ "platform",
400
+ "result",
401
+ "installationContractDigest",
402
+ "algorithmVersion",
403
+ "planDigest",
404
+ "verifiedAt"
405
+ ],
406
+ "additionalProperties": false,
407
+ "properties": {
408
+ "actionId": {
409
+ "type": "string",
410
+ "minLength": 1
411
+ },
412
+ "unitId": {
413
+ "type": "string",
414
+ "minLength": 1
415
+ },
416
+ "platform": {
417
+ "type": "string",
418
+ "minLength": 1
419
+ },
420
+ "result": {
421
+ "type": "string",
422
+ "enum": [
423
+ "PASSED_AUTOMATIC",
424
+ "PASSED_MANUAL",
425
+ "NOT_REQUIRED_UNCHANGED"
426
+ ]
427
+ },
428
+ "installationContractDigest": {
429
+ "type": "string",
430
+ "pattern": "^[a-f0-9]{64}$"
431
+ },
432
+ "algorithmVersion": {
433
+ "type": "integer",
434
+ "minimum": 1
435
+ },
436
+ "planDigest": {
437
+ "type": "string",
438
+ "minLength": 1
439
+ },
440
+ "verifiedAt": {
441
+ "type": "string",
442
+ "format": "date-time"
443
+ }
444
+ }
445
+ }
446
+ },
447
+ "gateResults": {
448
+ "type": "array",
449
+ "description": "Consumer verification gate results bound to this verify run",
450
+ "items": {
451
+ "type": "object",
452
+ "required": [
453
+ "id",
454
+ "phase",
455
+ "unitId",
456
+ "distribution",
457
+ "gateDigest",
458
+ "inputDigest",
459
+ "status",
460
+ "startedAt",
461
+ "finishedAt",
462
+ "exitCode",
463
+ "stdoutBytes",
464
+ "stdoutSha256",
465
+ "stderrBytes",
466
+ "stderrSha256"
467
+ ],
468
+ "additionalProperties": false,
469
+ "properties": {
470
+ "id": {
471
+ "type": "string",
472
+ "pattern": "^[a-z0-9][a-z0-9._-]*$"
473
+ },
474
+ "phase": {
475
+ "const": "consumer-verify"
476
+ },
477
+ "unitId": {
478
+ "type": "string",
479
+ "minLength": 1
480
+ },
481
+ "distribution": {
482
+ "type": "string",
483
+ "enum": [
484
+ "npm",
485
+ "claude-plugin",
486
+ "codex-plugin"
487
+ ]
488
+ },
489
+ "gateDigest": {
490
+ "type": "string",
491
+ "pattern": "^[a-f0-9]{64}$"
492
+ },
493
+ "inputDigest": {
494
+ "type": "string",
495
+ "pattern": "^[a-f0-9]{64}$",
496
+ "description": "SHA-256 digest of the exact installed consumer tree immediately before gate execution"
497
+ },
498
+ "status": {
499
+ "const": "passed"
500
+ },
501
+ "startedAt": {
502
+ "type": "string",
503
+ "format": "date-time"
504
+ },
505
+ "finishedAt": {
506
+ "type": "string",
507
+ "format": "date-time"
508
+ },
509
+ "exitCode": {
510
+ "const": 0
511
+ },
512
+ "stdoutBytes": {
513
+ "type": "integer",
514
+ "minimum": 0
515
+ },
516
+ "stdoutSha256": {
517
+ "type": "string",
518
+ "pattern": "^[a-f0-9]{64}$"
519
+ },
520
+ "stderrBytes": {
521
+ "type": "integer",
522
+ "minimum": 0
523
+ },
524
+ "stderrSha256": {
525
+ "type": "string",
526
+ "pattern": "^[a-f0-9]{64}$"
527
+ }
528
+ }
529
+ }
530
+ },
531
+ "manualFollowUps": {
532
+ "type": "array",
533
+ "description": "Non-blocking marketplace installation and invocation follow-ups for Kimi/CodeBuddy. Under foundationPayloadThenManualFollowUps, the frozen payload was observed first but these real-host tasks remain unverified.",
534
+ "items": {
535
+ "type": "object",
536
+ "required": [
537
+ "actionId",
538
+ "platform",
539
+ "plugin",
540
+ "verifiedBySystem"
541
+ ],
542
+ "additionalProperties": false,
543
+ "properties": {
544
+ "actionId": {
545
+ "type": "string",
546
+ "minLength": 1
547
+ },
548
+ "platform": {
549
+ "type": "string",
550
+ "enum": [
551
+ "kimi",
552
+ "codebuddy"
553
+ ]
554
+ },
555
+ "plugin": {
556
+ "type": "string"
557
+ },
558
+ "version": {
559
+ "type": "string"
560
+ },
561
+ "unitId": {
562
+ "type": "string"
563
+ },
564
+ "verifiedBySystem": {
565
+ "const": false,
566
+ "description": "Always false — these tasks are not verified by the system"
567
+ },
568
+ "reason": {
569
+ "type": "string"
570
+ }
571
+ }
572
+ }
573
+ },
574
+ "foundationPluginVerificationReceipts": {
575
+ "type": "array",
576
+ "description": "Foundation complete-plugin local payload observations bound to verify actions. These receipts do not prove marketplace installation or host invocation.",
577
+ "items": {
578
+ "type": "object",
579
+ "additionalProperties": false,
580
+ "required": [
581
+ "planDigest",
582
+ "actionId",
583
+ "unitId",
584
+ "requestDigest",
585
+ "hostId",
586
+ "goal",
587
+ "sourceType",
588
+ "foundationStatus",
589
+ "payloadMatches",
590
+ "observationDigest",
591
+ "observedAt"
592
+ ],
593
+ "properties": {
594
+ "planDigest": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
595
+ "actionId": { "type": "string", "minLength": 1 },
596
+ "unitId": { "type": "string", "minLength": 1 },
597
+ "requestDigest": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
598
+ "hostId": { "enum": ["kimi-code", "workbuddy"] },
599
+ "goal": { "const": "install-only" },
600
+ "sourceType": { "const": "local-staged" },
601
+ "foundationStatus": { "const": "observed" },
602
+ "payloadMatches": { "const": true },
603
+ "observationDigest": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
604
+ "observedAt": { "type": "string", "format": "date-time" },
605
+ "extraInstalledPaths": {
606
+ "type": "array",
607
+ "minItems": 1,
608
+ "uniqueItems": true,
609
+ "items": {
610
+ "type": "string",
611
+ "pattern": "^(?!/)(?!\\.\\/)(?!.*\\\\)(?!.*:)(?!.*(?:^|/)\\.\\.?(?:/|$))(?!.*\\/\\/)(?!.*\\u0000)(?!.*\\/$).+$"
612
+ }
613
+ },
614
+ "extraInstalledLinks": {
615
+ "type": "array",
616
+ "minItems": 1,
617
+ "uniqueItems": true,
618
+ "items": {
619
+ "type": "object",
620
+ "additionalProperties": false,
621
+ "required": ["path", "targetBase64", "bytes", "statMode"],
622
+ "properties": {
623
+ "path": {
624
+ "type": "string",
625
+ "pattern": "^(?!/)(?!\\.\\/)(?!.*\\\\)(?!.*:)(?!.*(?:^|/)\\.\\.?(?:/|$))(?!.*\\/\\/)(?!.*\\u0000)(?!.*\\/$).+$"
626
+ },
627
+ "targetBase64": {
628
+ "type": "string",
629
+ "minLength": 4,
630
+ "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"
631
+ },
632
+ "bytes": {
633
+ "type": "integer",
634
+ "minimum": 1,
635
+ "maximum": 9007199254740991
636
+ },
637
+ "statMode": {
638
+ "type": "integer",
639
+ "minimum": 0,
640
+ "maximum": 65535
641
+ }
642
+ }
643
+ }
644
+ }
645
+ }
646
+ }
647
+ },
648
+ "skillResourceClosureReceipts": {
649
+ "type": "array",
650
+ "description": "Per-surface skill resource closure verification receipts from verify phase",
651
+ "items": {
652
+ "type": "object",
653
+ "required": [
654
+ "host",
655
+ "distribution",
656
+ "unitId",
657
+ "checkerVersion",
658
+ "inputDigest",
659
+ "surfaceCount",
660
+ "skillCount",
661
+ "referenceCount",
662
+ "sourceOnlyCount",
663
+ "findingCount",
664
+ "receiptDigest",
665
+ "checkedAt",
666
+ "exitCode"
667
+ ],
668
+ "additionalProperties": false,
669
+ "properties": {
670
+ "host": {
671
+ "type": "string",
672
+ "minLength": 1
673
+ },
674
+ "unitId": {
675
+ "type": "string",
676
+ "minLength": 1
677
+ },
678
+ "distribution": {
679
+ "type": "string",
680
+ "enum": [
681
+ "npm",
682
+ "claude-plugin",
683
+ "codex-plugin",
684
+ "kimi-plugin",
685
+ "codebuddy-plugin"
686
+ ]
687
+ },
688
+ "actionId": {
689
+ "type": "string",
690
+ "minLength": 1
691
+ },
692
+ "checkerVersion": {
693
+ "type": "string",
694
+ "minLength": 1
695
+ },
696
+ "inputDigest": {
697
+ "type": "string",
698
+ "pattern": "^[a-f0-9]{64}$"
699
+ },
700
+ "surfaceCount": {
701
+ "type": "integer",
702
+ "minimum": 0
703
+ },
704
+ "skillCount": {
705
+ "type": "integer",
706
+ "minimum": 0
707
+ },
708
+ "referenceCount": {
709
+ "type": "integer",
710
+ "minimum": 0
711
+ },
712
+ "sourceOnlyCount": {
713
+ "type": "integer",
714
+ "minimum": 0
715
+ },
716
+ "findingCount": {
717
+ "const": 0
718
+ },
719
+ "receiptDigest": {
720
+ "type": "string",
721
+ "pattern": "^[a-f0-9]{64}$"
722
+ },
723
+ "checkedAt": {
724
+ "type": "string",
725
+ "format": "date-time"
726
+ },
727
+ "exitCode": {
728
+ "const": 0
729
+ }
730
+ }
731
+ }
732
+ }
733
+ },
734
+ "allOf": [
735
+ {
736
+ "if": {
737
+ "properties": {
738
+ "command": {
739
+ "enum": [
740
+ "reconcile",
741
+ "verify",
742
+ "distribute",
743
+ "postverify"
744
+ ]
745
+ }
746
+ },
747
+ "required": [
748
+ "command"
749
+ ]
750
+ },
751
+ "then": {
752
+ "required": [
753
+ "sourceRunId",
754
+ "sourceRunDigest",
755
+ "sourceRunPath"
756
+ ]
757
+ }
758
+ },
759
+ {
760
+ "if": {
761
+ "properties": {
762
+ "stateSequence": {
763
+ "minimum": 1
764
+ }
765
+ },
766
+ "required": [
767
+ "stateSequence"
768
+ ]
769
+ },
770
+ "then": {
771
+ "required": [
772
+ "previousStateDigest"
773
+ ]
774
+ }
775
+ }
776
+ ]
777
+ }