release-skill 0.8.0 → 0.9.0

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 (144) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codebuddy-plugin/plugin.json +1 -1
  4. package/.codex-plugin/plugin.json +2 -2
  5. package/.kimi-plugin/plugin.json +1 -1
  6. package/CHANGELOG.md +65 -7
  7. package/INSTALL.md +14 -2
  8. package/INSTALL.zh-CN.md +12 -2
  9. package/README.md +51 -31
  10. package/README.zh-CN.md +33 -20
  11. package/adapters/claude/.claude-plugin/marketplace.json +1 -1
  12. package/adapters/claude/.claude-plugin/plugin.json +1 -1
  13. package/adapters/claude/bin/error-codes.json +1 -1
  14. package/adapters/claude/bin/foundation-resource-binding.json +1 -1
  15. package/adapters/claude/bin/prebuild-manifest.json +8 -4
  16. package/adapters/claude/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  17. package/adapters/claude/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  18. package/adapters/claude/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  19. package/adapters/claude/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  20. package/adapters/claude/bin/registry.json +22 -1
  21. package/adapters/claude/bin/release-skill-local-finish.mjs +4 -0
  22. package/adapters/claude/bin/release-skill.bundle.mjs +7152 -4231
  23. package/adapters/claude/bin/rules.json +1 -1
  24. package/adapters/claude/schemas/release-plan.schema.json +43 -5
  25. package/adapters/claude/schemas/release-run.schema.json +35 -1
  26. package/adapters/claude/skills/release-finish/SKILL.md +65 -0
  27. package/adapters/claude/skills/release-verify/SKILL.md +6 -1
  28. package/adapters/claude/src/schemas/filesystem-tree-observation.schema.json +55 -0
  29. package/adapters/claude/src/schemas/host-verification-result.schema.json +2 -2
  30. package/adapters/claude/src/schemas/plugin-verification-request.schema.json +374 -0
  31. package/adapters/claude/src/schemas/plugin-verification-result.schema.json +799 -0
  32. package/adapters/claude/src/schemas/watchdog-termination-envelope.schema.json +16 -0
  33. package/adapters/codex/.codex-plugin/plugin.json +2 -2
  34. package/adapters/codex/bin/error-codes.json +1 -1
  35. package/adapters/codex/bin/foundation-resource-binding.json +1 -1
  36. package/adapters/codex/bin/prebuild-manifest.json +8 -4
  37. package/adapters/codex/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  38. package/adapters/codex/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  39. package/adapters/codex/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  40. package/adapters/codex/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  41. package/adapters/codex/bin/registry.json +22 -1
  42. package/adapters/codex/bin/release-skill-local-finish.mjs +4 -0
  43. package/adapters/codex/bin/release-skill.bundle.mjs +7152 -4231
  44. package/adapters/codex/bin/rules.json +1 -1
  45. package/adapters/codex/schemas/release-plan.schema.json +43 -5
  46. package/adapters/codex/schemas/release-run.schema.json +35 -1
  47. package/adapters/codex/skills/release-finish/SKILL.md +72 -0
  48. package/adapters/codex/skills/release-verify/SKILL.md +6 -1
  49. package/adapters/codex/src/schemas/filesystem-tree-observation.schema.json +55 -0
  50. package/adapters/codex/src/schemas/host-verification-result.schema.json +2 -2
  51. package/adapters/codex/src/schemas/plugin-verification-request.schema.json +374 -0
  52. package/adapters/codex/src/schemas/plugin-verification-result.schema.json +799 -0
  53. package/adapters/codex/src/schemas/watchdog-termination-envelope.schema.json +16 -0
  54. package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
  55. package/adapters/kimi/bin/error-codes.json +1 -1
  56. package/adapters/kimi/bin/foundation-resource-binding.json +1 -1
  57. package/adapters/kimi/bin/prebuild-manifest.json +8 -4
  58. package/adapters/kimi/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  59. package/adapters/kimi/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  60. package/adapters/kimi/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  61. package/adapters/kimi/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  62. package/adapters/kimi/bin/registry.json +22 -1
  63. package/adapters/kimi/bin/release-skill-local-finish.mjs +4 -0
  64. package/adapters/kimi/bin/release-skill.bundle.mjs +7152 -4231
  65. package/adapters/kimi/bin/rules.json +1 -1
  66. package/adapters/kimi/schemas/release-plan.schema.json +43 -5
  67. package/adapters/kimi/schemas/release-run.schema.json +35 -1
  68. package/adapters/kimi/skills/release-finish/SKILL.md +72 -0
  69. package/adapters/kimi/skills/release-verify/SKILL.md +6 -1
  70. package/adapters/kimi/src/schemas/filesystem-tree-observation.schema.json +55 -0
  71. package/adapters/kimi/src/schemas/host-verification-result.schema.json +2 -2
  72. package/adapters/kimi/src/schemas/plugin-verification-request.schema.json +374 -0
  73. package/adapters/kimi/src/schemas/plugin-verification-result.schema.json +799 -0
  74. package/adapters/kimi/src/schemas/watchdog-termination-envelope.schema.json +16 -0
  75. package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
  76. package/adapters/workbuddy/bin/error-codes.json +1 -1
  77. package/adapters/workbuddy/bin/foundation-resource-binding.json +1 -1
  78. package/adapters/workbuddy/bin/prebuild-manifest.json +8 -4
  79. package/adapters/workbuddy/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  80. package/adapters/workbuddy/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  81. package/adapters/workbuddy/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  82. package/adapters/workbuddy/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  83. package/adapters/workbuddy/bin/registry.json +22 -1
  84. package/adapters/workbuddy/bin/release-skill-local-finish.mjs +4 -0
  85. package/adapters/workbuddy/bin/release-skill.bundle.mjs +7152 -4231
  86. package/adapters/workbuddy/bin/rules.json +1 -1
  87. package/adapters/workbuddy/schemas/release-plan.schema.json +43 -5
  88. package/adapters/workbuddy/schemas/release-run.schema.json +35 -1
  89. package/adapters/workbuddy/skills/release-finish/SKILL.md +65 -0
  90. package/adapters/workbuddy/skills/release-verify/SKILL.md +6 -1
  91. package/adapters/workbuddy/src/schemas/filesystem-tree-observation.schema.json +55 -0
  92. package/adapters/workbuddy/src/schemas/host-verification-result.schema.json +2 -2
  93. package/adapters/workbuddy/src/schemas/plugin-verification-request.schema.json +374 -0
  94. package/adapters/workbuddy/src/schemas/plugin-verification-result.schema.json +799 -0
  95. package/adapters/workbuddy/src/schemas/watchdog-termination-envelope.schema.json +16 -0
  96. package/bin/error-codes.json +1 -1
  97. package/bin/foundation-resource-binding.json +1 -1
  98. package/bin/prebuild-manifest.json +8 -4
  99. package/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
  100. package/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
  101. package/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
  102. package/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
  103. package/bin/registry.json +22 -1
  104. package/bin/release-skill-cli.mjs +126 -1
  105. package/bin/release-skill-local-finish.mjs +4 -0
  106. package/bin/release-skill.bundle.mjs +7152 -4231
  107. package/bin/rules.json +1 -1
  108. package/package.json +4 -4
  109. package/platform-manifest.json +30 -4
  110. package/schemas/release-plan.schema.json +43 -5
  111. package/schemas/release-run.schema.json +35 -1
  112. package/skills/release-finish/SKILL.md +65 -0
  113. package/skills/release-verify/SKILL.md +6 -1
  114. package/skills-src/release-finish/SKILL.md +65 -0
  115. package/skills-src/release-verify/SKILL.md +6 -1
  116. package/src/commands/approve.mjs +14 -2
  117. package/src/commands/distribute.mjs +562 -321
  118. package/src/commands/post-release-local.mjs +611 -0
  119. package/src/commands/postverify.mjs +262 -155
  120. package/src/commands/prepare.mjs +83 -57
  121. package/src/commands/publish.mjs +11 -10
  122. package/src/commands/reconcile.mjs +11 -10
  123. package/src/commands/setup.mjs +26 -13
  124. package/src/commands/ship.mjs +45 -12
  125. package/src/commands/verify.mjs +81 -18
  126. package/src/core/adoption-assessment.mjs +0 -3
  127. package/src/core/approval.mjs +11 -8
  128. package/src/core/foundation-plugin-verification.mjs +247 -0
  129. package/src/core/hooks.mjs +0 -16
  130. package/src/core/plan.mjs +19 -11
  131. package/src/core/postpublish-approval.mjs +12 -2
  132. package/src/core/postpublish-bundle.mjs +51 -13
  133. package/src/core/postpublish.mjs +146 -6
  134. package/src/core/preset-executor.mjs +53 -0
  135. package/src/core/proposal-inbox.mjs +91 -27
  136. package/src/core/recovery.mjs +27 -12
  137. package/src/core/skill-resource-closure.mjs +8 -4
  138. package/src/producers/build-adapters.mjs +10 -1
  139. package/src/producers/foundation-resource-projection.mjs +3 -3
  140. package/src/schemas/filesystem-tree-observation.schema.json +55 -0
  141. package/src/schemas/host-verification-result.schema.json +2 -2
  142. package/src/schemas/plugin-verification-request.schema.json +374 -0
  143. package/src/schemas/plugin-verification-result.schema.json +799 -0
  144. package/src/schemas/watchdog-termination-envelope.schema.json +16 -0
@@ -0,0 +1,799 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://contracts.skill-family.example/v1/plugin-verification-result.json",
4
+ "title": "Plugin verification result",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion",
9
+ "kind",
10
+ "operation",
11
+ "status",
12
+ "requestDigest",
13
+ "goal",
14
+ "source",
15
+ "host",
16
+ "facts",
17
+ "reason",
18
+ "requiredActions"
19
+ ],
20
+ "properties": {
21
+ "schemaVersion": {
22
+ "const": 1
23
+ },
24
+ "kind": {
25
+ "const": "skill-family.plugin-verification-result"
26
+ },
27
+ "operation": {
28
+ "const": "plugin-verification"
29
+ },
30
+ "status": {
31
+ "enum": [
32
+ "observed",
33
+ "rejected",
34
+ "failed",
35
+ "indeterminate"
36
+ ]
37
+ },
38
+ "requestDigest": {
39
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-request.json#/$defs/sha256"
40
+ },
41
+ "goal": {
42
+ "$ref": "https://contracts.skill-family.example/v1/plugin-verification-request.json#/properties/goal"
43
+ },
44
+ "source": {
45
+ "$ref": "https://contracts.skill-family.example/v1/plugin-verification-request.json#/properties/source"
46
+ },
47
+ "host": {
48
+ "$ref": "https://contracts.skill-family.example/v1/plugin-verification-request.json#/properties/host"
49
+ },
50
+ "facts": {
51
+ "type": "object",
52
+ "additionalProperties": false,
53
+ "required": [
54
+ "input",
55
+ "install",
56
+ "discovery",
57
+ "invocation"
58
+ ],
59
+ "properties": {
60
+ "input": {
61
+ "type": "object",
62
+ "additionalProperties": false,
63
+ "required": [
64
+ "sourceClosureDigest",
65
+ "membersDigest",
66
+ "runtimeIdentities",
67
+ "probe"
68
+ ],
69
+ "properties": {
70
+ "sourceClosureDigest": {
71
+ "type": [
72
+ "string",
73
+ "null"
74
+ ],
75
+ "pattern": "^[0-9a-f]{64}$"
76
+ },
77
+ "membersDigest": {
78
+ "type": [
79
+ "string",
80
+ "null"
81
+ ],
82
+ "pattern": "^[0-9a-f]{64}$"
83
+ },
84
+ "runtimeIdentities": {
85
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-result.json#/properties/runtimeIdentities"
86
+ },
87
+ "probe": {
88
+ "oneOf": [
89
+ {
90
+ "$ref": "#/$defs/commandObservation"
91
+ },
92
+ {
93
+ "type": "null"
94
+ }
95
+ ]
96
+ }
97
+ }
98
+ },
99
+ "install": {
100
+ "type": [
101
+ "object",
102
+ "null"
103
+ ],
104
+ "additionalProperties": false,
105
+ "required": [
106
+ "installedClosureDigest",
107
+ "payloadMatches",
108
+ "observationDigest",
109
+ "sourceMode",
110
+ "commands",
111
+ "retained"
112
+ ],
113
+ "properties": {
114
+ "installedClosureDigest": {
115
+ "type": [
116
+ "string",
117
+ "null"
118
+ ],
119
+ "pattern": "^[0-9a-f]{64}$"
120
+ },
121
+ "payloadMatches": {
122
+ "type": [
123
+ "boolean",
124
+ "null"
125
+ ]
126
+ },
127
+ "observationDigest": {
128
+ "type": [
129
+ "string",
130
+ "null"
131
+ ],
132
+ "pattern": "^[0-9a-f]{64}$"
133
+ },
134
+ "sourceMode": {
135
+ "$ref": "https://contracts.skill-family.example/v1/plugin-verification-request.json#/properties/source/properties/type"
136
+ },
137
+ "commands": {
138
+ "type": "array",
139
+ "maxItems": 3,
140
+ "items": {
141
+ "$ref": "#/$defs/commandObservation"
142
+ }
143
+ },
144
+ "retained": {
145
+ "const": true
146
+ }
147
+ }
148
+ },
149
+ "discovery": {
150
+ "type": "object",
151
+ "additionalProperties": false,
152
+ "required": [
153
+ "status",
154
+ "basis",
155
+ "pluginId"
156
+ ],
157
+ "properties": {
158
+ "status": {
159
+ "enum": [
160
+ "observed",
161
+ "absent",
162
+ "unknown",
163
+ "not-performed"
164
+ ]
165
+ },
166
+ "basis": {
167
+ "enum": [
168
+ "native-plugin-list",
169
+ "native-init-event",
170
+ "none"
171
+ ]
172
+ },
173
+ "pluginId": {
174
+ "type": [
175
+ "string",
176
+ "null"
177
+ ],
178
+ "minLength": 1,
179
+ "maxLength": 512
180
+ }
181
+ },
182
+ "allOf": [
183
+ {
184
+ "if": {
185
+ "properties": {
186
+ "status": {
187
+ "enum": [
188
+ "unknown",
189
+ "not-performed"
190
+ ]
191
+ }
192
+ },
193
+ "required": [
194
+ "status"
195
+ ]
196
+ },
197
+ "then": {
198
+ "properties": {
199
+ "basis": {
200
+ "const": "none"
201
+ },
202
+ "pluginId": {
203
+ "const": null
204
+ }
205
+ }
206
+ }
207
+ },
208
+ {
209
+ "if": {
210
+ "properties": {
211
+ "status": {
212
+ "const": "observed"
213
+ }
214
+ },
215
+ "required": [
216
+ "status"
217
+ ]
218
+ },
219
+ "then": {
220
+ "properties": {
221
+ "basis": {
222
+ "enum": [
223
+ "native-plugin-list",
224
+ "native-init-event"
225
+ ]
226
+ },
227
+ "pluginId": {
228
+ "type": "string",
229
+ "minLength": 1,
230
+ "maxLength": 512
231
+ }
232
+ }
233
+ }
234
+ },
235
+ {
236
+ "if": {
237
+ "properties": {
238
+ "status": {
239
+ "const": "absent"
240
+ }
241
+ },
242
+ "required": [
243
+ "status"
244
+ ]
245
+ },
246
+ "then": {
247
+ "properties": {
248
+ "basis": {
249
+ "enum": [
250
+ "native-plugin-list",
251
+ "native-init-event"
252
+ ]
253
+ }
254
+ }
255
+ }
256
+ }
257
+ ]
258
+ },
259
+ "invocation": {
260
+ "type": [
261
+ "object",
262
+ "null"
263
+ ],
264
+ "additionalProperties": false,
265
+ "required": [
266
+ "execution",
267
+ "streams",
268
+ "snapshots",
269
+ "snapshotsMatch"
270
+ ],
271
+ "properties": {
272
+ "execution": {
273
+ "$ref": "#/$defs/execution"
274
+ },
275
+ "streams": {
276
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-result.json#/properties/streams"
277
+ },
278
+ "snapshots": {
279
+ "type": [
280
+ "object",
281
+ "null"
282
+ ],
283
+ "additionalProperties": false,
284
+ "required": [
285
+ "installedPlugin",
286
+ "fixture",
287
+ "protectedWorkspace"
288
+ ],
289
+ "properties": {
290
+ "installedPlugin": {
291
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-result.json#/$defs/snapshot"
292
+ },
293
+ "fixture": {
294
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-result.json#/$defs/snapshot"
295
+ },
296
+ "protectedWorkspace": {
297
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-result.json#/$defs/snapshot"
298
+ }
299
+ }
300
+ },
301
+ "snapshotsMatch": {
302
+ "type": [
303
+ "boolean",
304
+ "null"
305
+ ]
306
+ }
307
+ }
308
+ }
309
+ }
310
+ },
311
+ "reason": {
312
+ "enum": [
313
+ null,
314
+ "preflight-rejected",
315
+ "executable-observation-mismatch",
316
+ "execution-failed",
317
+ "snapshot-mismatch",
318
+ "private-evidence-publication-failed",
319
+ "boundary-state-indeterminate",
320
+ "source-invalid",
321
+ "members-drift",
322
+ "tree-violation",
323
+ "channel-source-invalid",
324
+ "restriction-unsupported",
325
+ "install-write-failed",
326
+ "payload-mismatch"
327
+ ]
328
+ },
329
+ "requiredActions": {
330
+ "type": "array",
331
+ "uniqueItems": true,
332
+ "items": {
333
+ "enum": [
334
+ "manual-temporary-root-inspection-required"
335
+ ]
336
+ }
337
+ }
338
+ },
339
+ "allOf": [
340
+ {
341
+ "if": {
342
+ "properties": {
343
+ "status": {
344
+ "const": "observed"
345
+ }
346
+ },
347
+ "required": [
348
+ "status"
349
+ ],
350
+ "type": "object"
351
+ },
352
+ "then": {
353
+ "properties": {
354
+ "reason": {
355
+ "const": null
356
+ },
357
+ "requiredActions": {
358
+ "type": "array",
359
+ "maxItems": 0
360
+ },
361
+ "facts": {
362
+ "properties": {
363
+ "install": {
364
+ "type": "object",
365
+ "properties": {
366
+ "installedClosureDigest": {
367
+ "type": "string"
368
+ },
369
+ "observationDigest": {
370
+ "type": "string"
371
+ }
372
+ }
373
+ },
374
+ "input": {
375
+ "properties": {
376
+ "sourceClosureDigest": {
377
+ "type": "string"
378
+ },
379
+ "membersDigest": {
380
+ "type": "string"
381
+ }
382
+ },
383
+ "type": "object"
384
+ }
385
+ },
386
+ "type": "object"
387
+ }
388
+ },
389
+ "type": "object",
390
+ "allOf": [
391
+ {
392
+ "if": {
393
+ "type": "object",
394
+ "properties": {
395
+ "goal": {
396
+ "const": "install-only"
397
+ }
398
+ },
399
+ "required": [
400
+ "goal"
401
+ ]
402
+ },
403
+ "then": {
404
+ "type": "object",
405
+ "properties": {
406
+ "facts": {
407
+ "type": "object",
408
+ "properties": {
409
+ "invocation": {
410
+ "const": null
411
+ }
412
+ }
413
+ }
414
+ }
415
+ }
416
+ },
417
+ {
418
+ "if": {
419
+ "type": "object",
420
+ "properties": {
421
+ "goal": {
422
+ "const": "install-and-invoke"
423
+ }
424
+ },
425
+ "required": [
426
+ "goal"
427
+ ]
428
+ },
429
+ "then": {
430
+ "type": "object",
431
+ "properties": {
432
+ "facts": {
433
+ "type": "object",
434
+ "properties": {
435
+ "install": {
436
+ "type": "object",
437
+ "properties": {
438
+ "payloadMatches": {
439
+ "const": true
440
+ }
441
+ }
442
+ },
443
+ "invocation": {
444
+ "type": "object",
445
+ "properties": {
446
+ "execution": {
447
+ "type": "object",
448
+ "properties": {
449
+ "spawned": {
450
+ "const": true
451
+ },
452
+ "exitStatus": {
453
+ "const": 0
454
+ },
455
+ "processStatus": {
456
+ "const": "EXITED"
457
+ },
458
+ "terminationReason": {
459
+ "const": null
460
+ },
461
+ "watchdogReason": {
462
+ "const": null
463
+ },
464
+ "runnerModelOverrideAbsent": {
465
+ "const": true
466
+ }
467
+ }
468
+ },
469
+ "streams": {
470
+ "type": "object"
471
+ },
472
+ "snapshots": {
473
+ "type": "object"
474
+ },
475
+ "snapshotsMatch": {
476
+ "const": true
477
+ }
478
+ }
479
+ }
480
+ }
481
+ }
482
+ }
483
+ }
484
+ }
485
+ ]
486
+ }
487
+ },
488
+ {
489
+ "if": {
490
+ "properties": {
491
+ "status": {
492
+ "const": "rejected"
493
+ }
494
+ },
495
+ "required": [
496
+ "status"
497
+ ],
498
+ "type": "object"
499
+ },
500
+ "then": {
501
+ "properties": {
502
+ "reason": {
503
+ "enum": [
504
+ "preflight-rejected",
505
+ "source-invalid",
506
+ "members-drift",
507
+ "tree-violation",
508
+ "channel-source-invalid",
509
+ "restriction-unsupported",
510
+ "executable-observation-mismatch"
511
+ ]
512
+ },
513
+ "requiredActions": {
514
+ "type": "array",
515
+ "maxItems": 0
516
+ },
517
+ "facts": {
518
+ "properties": {
519
+ "install": {
520
+ "const": null
521
+ },
522
+ "invocation": {
523
+ "const": null
524
+ }
525
+ },
526
+ "type": "object"
527
+ }
528
+ },
529
+ "type": "object"
530
+ }
531
+ },
532
+ {
533
+ "if": {
534
+ "properties": {
535
+ "status": {
536
+ "const": "failed"
537
+ }
538
+ },
539
+ "required": [
540
+ "status"
541
+ ],
542
+ "type": "object"
543
+ },
544
+ "then": {
545
+ "properties": {
546
+ "reason": {
547
+ "enum": [
548
+ "install-write-failed",
549
+ "tree-violation",
550
+ "channel-source-invalid",
551
+ "execution-failed",
552
+ "snapshot-mismatch",
553
+ "private-evidence-publication-failed",
554
+ "executable-observation-mismatch",
555
+ "payload-mismatch"
556
+ ]
557
+ },
558
+ "requiredActions": {
559
+ "type": "array",
560
+ "maxItems": 0
561
+ }
562
+ },
563
+ "anyOf": [
564
+ {
565
+ "properties": {
566
+ "facts": {
567
+ "properties": {
568
+ "install": {
569
+ "type": "object"
570
+ }
571
+ },
572
+ "required": [
573
+ "install"
574
+ ],
575
+ "type": "object"
576
+ }
577
+ },
578
+ "required": [
579
+ "facts"
580
+ ],
581
+ "type": "object"
582
+ },
583
+ {
584
+ "properties": {
585
+ "facts": {
586
+ "properties": {
587
+ "invocation": {
588
+ "type": "object"
589
+ }
590
+ },
591
+ "required": [
592
+ "invocation"
593
+ ],
594
+ "type": "object"
595
+ }
596
+ },
597
+ "required": [
598
+ "facts"
599
+ ],
600
+ "type": "object"
601
+ }
602
+ ],
603
+ "type": "object"
604
+ }
605
+ },
606
+ {
607
+ "if": {
608
+ "properties": {
609
+ "status": {
610
+ "const": "indeterminate"
611
+ }
612
+ },
613
+ "required": [
614
+ "status"
615
+ ],
616
+ "type": "object"
617
+ },
618
+ "then": {
619
+ "properties": {
620
+ "reason": {
621
+ "const": "boundary-state-indeterminate"
622
+ },
623
+ "requiredActions": {
624
+ "type": "array",
625
+ "const": [
626
+ "manual-temporary-root-inspection-required"
627
+ ]
628
+ }
629
+ },
630
+ "type": "object"
631
+ }
632
+ },
633
+ {
634
+ "if": {
635
+ "properties": {
636
+ "reason": {
637
+ "const": "payload-mismatch"
638
+ }
639
+ },
640
+ "required": [
641
+ "reason"
642
+ ],
643
+ "type": "object"
644
+ },
645
+ "then": {
646
+ "properties": {
647
+ "facts": {
648
+ "properties": {
649
+ "invocation": {
650
+ "const": null
651
+ }
652
+ },
653
+ "type": "object"
654
+ }
655
+ },
656
+ "type": "object"
657
+ }
658
+ }
659
+ ],
660
+ "$defs": {
661
+ "commandObservation": {
662
+ "type": "object",
663
+ "additionalProperties": false,
664
+ "required": [
665
+ "step",
666
+ "execution",
667
+ "streams",
668
+ "outputByteLimits",
669
+ "outputLimitExceeded"
670
+ ],
671
+ "properties": {
672
+ "step": {
673
+ "enum": [
674
+ "version-probe",
675
+ "marketplace-add",
676
+ "plugin-install",
677
+ "plugin-list"
678
+ ]
679
+ },
680
+ "execution": {
681
+ "$ref": "#/$defs/execution"
682
+ },
683
+ "streams": {
684
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-result.json#/properties/streams"
685
+ },
686
+ "outputByteLimits": {
687
+ "anyOf": [
688
+ {
689
+ "$ref": "https://contracts.skill-family.example/v1/watchdog-termination-envelope.json#/$defs/outputByteLimits"
690
+ },
691
+ {
692
+ "type": "null"
693
+ }
694
+ ]
695
+ },
696
+ "outputLimitExceeded": {
697
+ "enum": [
698
+ "stdout",
699
+ "stderr",
700
+ null
701
+ ]
702
+ }
703
+ },
704
+ "allOf": [
705
+ {
706
+ "if": {
707
+ "properties": {
708
+ "step": {
709
+ "const": "version-probe"
710
+ }
711
+ }
712
+ },
713
+ "then": {
714
+ "properties": {
715
+ "outputByteLimits": {
716
+ "const": null
717
+ },
718
+ "outputLimitExceeded": {
719
+ "const": null
720
+ }
721
+ }
722
+ }
723
+ },
724
+ {
725
+ "if": {
726
+ "properties": {
727
+ "outputByteLimits": {
728
+ "const": null
729
+ }
730
+ }
731
+ },
732
+ "then": {
733
+ "properties": {
734
+ "outputLimitExceeded": {
735
+ "const": null
736
+ }
737
+ }
738
+ }
739
+ }
740
+ ]
741
+ },
742
+ "execution": {
743
+ "type": "object",
744
+ "additionalProperties": false,
745
+ "required": [
746
+ "spawned",
747
+ "exitStatus",
748
+ "processStatus",
749
+ "terminationReason",
750
+ "watchdogReason",
751
+ "runnerModelOverrideAbsent"
752
+ ],
753
+ "properties": {
754
+ "spawned": {
755
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-result.json#/properties/execution/properties/spawned"
756
+ },
757
+ "exitStatus": {
758
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-result.json#/properties/execution/properties/exitStatus"
759
+ },
760
+ "processStatus": {
761
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-result.json#/properties/execution/properties/processStatus"
762
+ },
763
+ "terminationReason": {
764
+ "$ref": "https://contracts.skill-family.example/v1/watchdog-termination-envelope.json#/properties/terminationReason"
765
+ },
766
+ "watchdogReason": {
767
+ "$ref": "https://contracts.skill-family.example/v1/watchdog-termination-envelope.json#/properties/watchdogReason"
768
+ },
769
+ "runnerModelOverrideAbsent": {
770
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-result.json#/properties/execution/properties/runnerModelOverrideAbsent"
771
+ }
772
+ }
773
+ },
774
+ "installObservation": {
775
+ "type": "object",
776
+ "additionalProperties": false,
777
+ "required": [
778
+ "requestDigest",
779
+ "installedRoot",
780
+ "observation"
781
+ ],
782
+ "properties": {
783
+ "requestDigest": {
784
+ "$ref": "https://contracts.skill-family.example/v1/host-verification-request.json#/$defs/sha256"
785
+ },
786
+ "installedRoot": {
787
+ "type": "string",
788
+ "pattern": "^/(?:[^/\\\\\\u0000]+(?:/[^/\\\\\\u0000]+)*)?$",
789
+ "not": {
790
+ "pattern": "(?:^|/)\\.{1,2}(?:/|$)"
791
+ }
792
+ },
793
+ "observation": {
794
+ "$ref": "https://contracts.skill-family.example/v1/filesystem-tree-observation.json"
795
+ }
796
+ }
797
+ }
798
+ }
799
+ }