engineering-behavior-observatory 0.2.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 (178) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +151 -0
  3. package/contracts/codex-app-server-0.150.1/manifest.json +25 -0
  4. package/contracts/codex-app-server-0.150.1/schema/InitializeParams.json +84 -0
  5. package/contracts/codex-app-server-0.150.1/schema/JSONRPCMessage.json +137 -0
  6. package/contracts/codex-app-server-0.150.1/schema/v2/ThreadReadParams.json +17 -0
  7. package/contracts/codex-app-server-0.150.1/schema/v2/ThreadTokenUsageUpdatedNotification.json +82 -0
  8. package/contracts/codex-app-server-0.150.1/schema/v2/TurnInterruptParams.json +17 -0
  9. package/contracts/codex-app-server-0.150.1/types/AskForApproval.ts +5 -0
  10. package/contracts/codex-app-server-0.150.1/types/ClientNotification.ts +5 -0
  11. package/contracts/codex-app-server-0.150.1/types/SandboxMode.ts +5 -0
  12. package/contracts/codex-app-server-0.150.1/types/ThreadReadParams.ts +9 -0
  13. package/contracts/codex-app-server-0.150.1/types/TokenUsageBreakdown.ts +5 -0
  14. package/contracts/codex-app-server-0.150.1/types/TurnInterruptParams.ts +5 -0
  15. package/contracts/codex-app-server-0.153.4/manifest.json +27 -0
  16. package/contracts/codex-app-server-0.153.4/schema/JSONRPCMessage.json +137 -0
  17. package/contracts/codex-app-server-0.153.4/schema/v1/InitializeParams.json +84 -0
  18. package/contracts/codex-app-server-0.153.4/schema/v2/ThreadReadParams.json +17 -0
  19. package/contracts/codex-app-server-0.153.4/schema/v2/ThreadStartParams.json +515 -0
  20. package/contracts/codex-app-server-0.153.4/schema/v2/ThreadTokenUsageUpdatedNotification.json +82 -0
  21. package/contracts/codex-app-server-0.153.4/schema/v2/TurnInterruptParams.json +17 -0
  22. package/contracts/codex-app-server-0.153.4/schema/v2/TurnStartParams.json +921 -0
  23. package/contracts/codex-app-server-0.153.4/types/AskForApproval.ts +5 -0
  24. package/contracts/codex-app-server-0.153.4/types/ClientNotification.ts +5 -0
  25. package/contracts/codex-app-server-0.153.4/types/SandboxMode.ts +5 -0
  26. package/contracts/codex-app-server-0.153.4/types/ThreadReadParams.ts +12 -0
  27. package/contracts/codex-app-server-0.153.4/types/TokenUsageBreakdown.ts +5 -0
  28. package/contracts/codex-app-server-0.153.4/types/TurnInterruptParams.ts +5 -0
  29. package/contracts/openhands-agent-server-v1.44.1.json +65 -0
  30. package/contracts/openhands-agent-server-v1.46.0.json +46 -0
  31. package/dist/contracts/codex-app-server-0.153.4/types/AskForApproval.d.ts +9 -0
  32. package/dist/contracts/codex-app-server-0.153.4/types/AskForApproval.js +2 -0
  33. package/dist/contracts/codex-app-server-0.153.4/types/ClientNotification.d.ts +3 -0
  34. package/dist/contracts/codex-app-server-0.153.4/types/ClientNotification.js +2 -0
  35. package/dist/contracts/codex-app-server-0.153.4/types/SandboxMode.d.ts +1 -0
  36. package/dist/contracts/codex-app-server-0.153.4/types/SandboxMode.js +2 -0
  37. package/dist/contracts/codex-app-server-0.153.4/types/ThreadReadParams.d.ts +10 -0
  38. package/dist/contracts/codex-app-server-0.153.4/types/ThreadReadParams.js +2 -0
  39. package/dist/contracts/codex-app-server-0.153.4/types/TokenUsageBreakdown.d.ts +8 -0
  40. package/dist/contracts/codex-app-server-0.153.4/types/TokenUsageBreakdown.js +2 -0
  41. package/dist/contracts/codex-app-server-0.153.4/types/TurnInterruptParams.d.ts +4 -0
  42. package/dist/contracts/codex-app-server-0.153.4/types/TurnInterruptParams.js +2 -0
  43. package/dist/src/agent-sdk-normalizer.d.ts +22 -0
  44. package/dist/src/agent-sdk-normalizer.js +995 -0
  45. package/dist/src/agent-sdk-run.d.ts +31 -0
  46. package/dist/src/agent-sdk-run.js +242 -0
  47. package/dist/src/agent-sdk-runner.d.ts +96 -0
  48. package/dist/src/agent-sdk-runner.js +407 -0
  49. package/dist/src/agent-sdk.d.ts +294 -0
  50. package/dist/src/agent-sdk.js +644 -0
  51. package/dist/src/aggregation.d.ts +183 -0
  52. package/dist/src/aggregation.js +513 -0
  53. package/dist/src/artifacts.d.ts +36 -0
  54. package/dist/src/artifacts.js +1372 -0
  55. package/dist/src/atlas-grafana.d.ts +377 -0
  56. package/dist/src/atlas-grafana.js +47 -0
  57. package/dist/src/atlas-html.d.ts +2 -0
  58. package/dist/src/atlas-html.js +34 -0
  59. package/dist/src/atlas.d.ts +130 -0
  60. package/dist/src/atlas.js +235 -0
  61. package/dist/src/behavior-assertions.d.ts +95 -0
  62. package/dist/src/behavior-assertions.js +154 -0
  63. package/dist/src/cli.d.ts +5 -0
  64. package/dist/src/cli.js +957 -0
  65. package/dist/src/codex-judge.d.ts +44 -0
  66. package/dist/src/codex-judge.js +214 -0
  67. package/dist/src/codex-run.d.ts +114 -0
  68. package/dist/src/codex-run.js +519 -0
  69. package/dist/src/codex.d.ts +187 -0
  70. package/dist/src/codex.js +1028 -0
  71. package/dist/src/contracts.d.ts +155 -0
  72. package/dist/src/contracts.js +866 -0
  73. package/dist/src/corpus.d.ts +67 -0
  74. package/dist/src/corpus.js +540 -0
  75. package/dist/src/cursor-sdk-runner.d.ts +81 -0
  76. package/dist/src/cursor-sdk-runner.js +362 -0
  77. package/dist/src/cursor-sdk.d.ts +81 -0
  78. package/dist/src/cursor-sdk.js +1078 -0
  79. package/dist/src/deepseek-adapter.d.ts +152 -0
  80. package/dist/src/deepseek-adapter.js +777 -0
  81. package/dist/src/exports.d.ts +69 -0
  82. package/dist/src/exports.js +966 -0
  83. package/dist/src/human-calibration.d.ts +167 -0
  84. package/dist/src/human-calibration.js +618 -0
  85. package/dist/src/index.d.ts +71 -0
  86. package/dist/src/index.js +38 -0
  87. package/dist/src/lifecycle.d.ts +196 -0
  88. package/dist/src/lifecycle.js +1889 -0
  89. package/dist/src/normalization-integrity.d.ts +128 -0
  90. package/dist/src/normalization-integrity.js +429 -0
  91. package/dist/src/openhands-run.d.ts +36 -0
  92. package/dist/src/openhands-run.js +415 -0
  93. package/dist/src/openhands.d.ts +130 -0
  94. package/dist/src/openhands.js +859 -0
  95. package/dist/src/pi.d.ts +203 -0
  96. package/dist/src/pi.js +1345 -0
  97. package/dist/src/process-protocol.d.ts +245 -0
  98. package/dist/src/process-protocol.js +1261 -0
  99. package/dist/src/retained-evidence.d.ts +12 -0
  100. package/dist/src/retained-evidence.js +201 -0
  101. package/dist/src/run-bundles.d.ts +193 -0
  102. package/dist/src/run-bundles.js +993 -0
  103. package/dist/src/scheduler.d.ts +109 -0
  104. package/dist/src/scheduler.js +1080 -0
  105. package/dist/src/semantic-judge.d.ts +194 -0
  106. package/dist/src/semantic-judge.js +875 -0
  107. package/dist/src/structural-observations.d.ts +124 -0
  108. package/dist/src/structural-observations.js +671 -0
  109. package/dist/src/task-packets.d.ts +115 -0
  110. package/dist/src/task-packets.js +683 -0
  111. package/dist/src/uniform-events.d.ts +120 -0
  112. package/dist/src/uniform-events.js +158 -0
  113. package/dist/src/verifiers.d.ts +116 -0
  114. package/dist/src/verifiers.js +819 -0
  115. package/dist/src/workspaces.d.ts +56 -0
  116. package/dist/src/workspaces.js +1314 -0
  117. package/docs/README.md +60 -0
  118. package/docs/development/README.md +71 -0
  119. package/docs/development/documentation-sync.md +58 -0
  120. package/docs/development/extension-contracts.md +307 -0
  121. package/docs/evaluation/README.md +48 -0
  122. package/docs/evaluation/aggregation.md +112 -0
  123. package/docs/evaluation/behavior-assertions.md +45 -0
  124. package/docs/evaluation/human-calibration.md +170 -0
  125. package/docs/evaluation/normalization-integrity.md +80 -0
  126. package/docs/evaluation/semantic-judge.md +188 -0
  127. package/docs/evaluation/structural-observations.md +84 -0
  128. package/docs/evaluation/uniform-events.md +131 -0
  129. package/docs/guides/atlas.md +144 -0
  130. package/docs/guides/evidence-and-sharing.md +100 -0
  131. package/docs/guides/operator-guide.md +424 -0
  132. package/docs/guides/quickstart.md +152 -0
  133. package/docs/guides/telemetry.md +66 -0
  134. package/docs/harnesses/README.md +31 -0
  135. package/docs/harnesses/claude-agent-sdk.md +61 -0
  136. package/docs/harnesses/codex-harness.md +174 -0
  137. package/docs/harnesses/cursor-sdk.md +149 -0
  138. package/docs/harnesses/deepseek-harness.md +134 -0
  139. package/docs/harnesses/openhands-agent-server.md +153 -0
  140. package/docs/harnesses/pi-sdk.md +66 -0
  141. package/docs/reference/README.md +19 -0
  142. package/docs/reference/agent-sdk-operational-runner.md +118 -0
  143. package/docs/reference/cli.md +114 -0
  144. package/docs/reference/contracts.md +222 -0
  145. package/docs/reference/run-bundle-contract.md +354 -0
  146. package/docs/reference/run-lifecycle.md +54 -0
  147. package/examples/cursor-sdk/README.md +11 -0
  148. package/examples/cursor-sdk/capture-profile.json +1 -0
  149. package/examples/cursor-sdk/harness.json +1 -0
  150. package/examples/cursor-sdk/model.json +1 -0
  151. package/examples/cursor-sdk/native-limits.json +1 -0
  152. package/examples/cursor-sdk/native-tool-policy.json +1 -0
  153. package/ontology/behavior-categories.v1.json +46 -0
  154. package/package.json +66 -0
  155. package/release/0.1.0/KNOWN_LIMITATIONS.md +35 -0
  156. package/release/0.1.0/README.md +46 -0
  157. package/release/0.1.0/reproducibility.json +61 -0
  158. package/release/0.2.0/KNOWN_LIMITATIONS.md +40 -0
  159. package/release/0.2.0/README.md +42 -0
  160. package/release/0.2.0/reproducibility.json +73 -0
  161. package/release/0.2.1/KNOWN_LIMITATIONS.md +18 -0
  162. package/release/0.2.1/README.md +63 -0
  163. package/release/0.2.1/reproducibility.json +73 -0
  164. package/release/README.md +13 -0
  165. package/schemas/aggregation.v1.json +293 -0
  166. package/schemas/behavior-assertions.v1.json +220 -0
  167. package/schemas/deepseek-runtime-composition.v1.schema.json +122 -0
  168. package/schemas/experiment.v1.schema.json +188 -0
  169. package/schemas/human-calibration.v1.json +336 -0
  170. package/schemas/normalization-integrity.v1.json +302 -0
  171. package/schemas/run-bundles/v1.json +1040 -0
  172. package/schemas/run-queue.v1.schema.json +206 -0
  173. package/schemas/semantic-judge.v1.json +380 -0
  174. package/schemas/structural-observations.v1.json +131 -0
  175. package/schemas/task-packet-freeze.v1.schema.json +106 -0
  176. package/schemas/task-packet.v1.schema.json +234 -0
  177. package/schemas/uniform-events/v1.json +289 -0
  178. package/scripts/atlas-grafana.sh +18 -0
@@ -0,0 +1,1040 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:ebo:schema:run-bundle:v1",
4
+ "title": "EBO run-bundle v1",
5
+ "$ref": "#/$defs/runManifest",
6
+ "$defs": {
7
+ "identifier": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "maxLength": 256
11
+ },
12
+ "digest": {
13
+ "type": "string",
14
+ "pattern": "^sha256:[a-f0-9]{64}$"
15
+ },
16
+ "relativePath": {
17
+ "type": "string",
18
+ "maxLength": 1024,
19
+ "pattern": "^(?!(?:[^/]+/){64})(?!.*(?:^|/)[^/]{256})(?!.*(?:^|/)(?:[Cc][Oo][Nn]|[Pp][Rr][Nn]|[Aa][Uu][Xx]|[Nn][Uu][Ll]|[Cc][Oo][Mm][1-9]|[Ll][Pp][Tt][1-9])(?:\\.|/|$))(?:[A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9._-]*[A-Za-z0-9_-])(?:/(?:[A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9._-]*[A-Za-z0-9_-]))*$"
20
+ },
21
+ "sharingClass": {
22
+ "enum": ["unknown", "restricted", "internal", "partner", "public"]
23
+ },
24
+ "nativeReference": {
25
+ "type": "object",
26
+ "additionalProperties": false,
27
+ "required": ["type", "id"],
28
+ "properties": {
29
+ "type": { "$ref": "#/$defs/identifier" },
30
+ "id": { "$ref": "#/$defs/identifier" }
31
+ }
32
+ },
33
+ "verifierReference": {
34
+ "type": "object",
35
+ "additionalProperties": false,
36
+ "required": ["locator", "digest"],
37
+ "properties": {
38
+ "locator": { "$ref": "#/$defs/relativePath" },
39
+ "digest": { "$ref": "#/$defs/digest" },
40
+ "format": { "enum": ["commonjs", "module"] }
41
+ }
42
+ },
43
+ "diagnosticSourceBinding": {
44
+ "type": "object",
45
+ "additionalProperties": false,
46
+ "required": ["verifierId", "stream", "locator", "digest", "sizeBytes", "truncated"],
47
+ "properties": {
48
+ "verifierId": { "$ref": "#/$defs/identifier" },
49
+ "stream": { "enum": ["stdout", "stderr"] },
50
+ "locator": { "$ref": "#/$defs/relativePath" },
51
+ "digest": { "$ref": "#/$defs/digest" },
52
+ "sizeBytes": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
53
+ "truncated": { "type": "boolean" }
54
+ }
55
+ },
56
+ "evidenceDescriptor": {
57
+ "type": "object",
58
+ "additionalProperties": false,
59
+ "required": [
60
+ "id",
61
+ "source",
62
+ "kind",
63
+ "authority",
64
+ "mediaType",
65
+ "digest",
66
+ "sizeBytes",
67
+ "sharingClass",
68
+ "relativePath"
69
+ ],
70
+ "properties": {
71
+ "id": { "$ref": "#/$defs/identifier" },
72
+ "source": { "$ref": "#/$defs/identifier" },
73
+ "kind": {
74
+ "enum": [
75
+ "session",
76
+ "hook",
77
+ "telemetry",
78
+ "workspace",
79
+ "verifier",
80
+ "diagnostic",
81
+ "capture-report",
82
+ "export-manifest"
83
+ ]
84
+ },
85
+ "authority": {
86
+ "enum": ["semantic", "timing-resource", "outcome", "capture", "export"]
87
+ },
88
+ "mediaType": { "type": "string", "minLength": 1 },
89
+ "digest": { "$ref": "#/$defs/digest" },
90
+ "sizeBytes": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
91
+ "sharingClass": { "$ref": "#/$defs/sharingClass" },
92
+ "relativePath": { "$ref": "#/$defs/relativePath" },
93
+ "fingerprint": { "$ref": "#/$defs/digest" },
94
+ "nativeReference": { "$ref": "#/$defs/nativeReference" },
95
+ "diagnosticSource": { "$ref": "#/$defs/diagnosticSourceBinding" },
96
+ "sanitizedFrom": {
97
+ "type": "object",
98
+ "additionalProperties": false,
99
+ "required": ["artifactId", "digest"],
100
+ "properties": {
101
+ "artifactId": { "$ref": "#/$defs/identifier" },
102
+ "digest": { "$ref": "#/$defs/digest" }
103
+ }
104
+ }
105
+ },
106
+ "allOf": [
107
+ {
108
+ "if": {
109
+ "properties": { "sharingClass": { "enum": ["partner", "public"] } },
110
+ "required": ["sharingClass"]
111
+ },
112
+ "then": {
113
+ "required": ["sanitizedFrom"],
114
+ "not": { "required": ["nativeReference"] }
115
+ }
116
+ },
117
+ {
118
+ "if": {
119
+ "properties": { "kind": { "enum": ["session", "hook"] } },
120
+ "required": ["kind"]
121
+ },
122
+ "then": { "properties": { "authority": { "const": "semantic" } } }
123
+ },
124
+ {
125
+ "if": {
126
+ "properties": { "kind": { "const": "telemetry" } },
127
+ "required": ["kind"]
128
+ },
129
+ "then": { "properties": { "authority": { "const": "timing-resource" } } }
130
+ },
131
+ {
132
+ "if": {
133
+ "properties": { "kind": { "enum": ["workspace", "verifier"] } },
134
+ "required": ["kind"]
135
+ },
136
+ "then": { "properties": { "authority": { "const": "outcome" } } }
137
+ },
138
+ {
139
+ "if": {
140
+ "properties": { "kind": { "const": "diagnostic" } },
141
+ "required": ["kind"]
142
+ },
143
+ "then": { "properties": { "authority": { "const": "outcome" } } }
144
+ },
145
+ {
146
+ "if": {
147
+ "properties": { "kind": { "const": "capture-report" } },
148
+ "required": ["kind"]
149
+ },
150
+ "then": { "properties": { "authority": { "const": "capture" } } }
151
+ },
152
+ {
153
+ "if": {
154
+ "properties": { "kind": { "const": "export-manifest" } },
155
+ "required": ["kind"]
156
+ },
157
+ "then": { "properties": { "authority": { "const": "export" } } }
158
+ },
159
+ {
160
+ "if": {
161
+ "properties": { "kind": { "enum": ["verifier", "capture-report", "export-manifest"] } },
162
+ "required": ["kind"]
163
+ },
164
+ "then": { "properties": { "mediaType": { "const": "application/json" } } }
165
+ }
166
+ ]
167
+ },
168
+ "terminal": {
169
+ "type": "object",
170
+ "additionalProperties": false,
171
+ "required": ["state", "failureClass", "stopReason"],
172
+ "properties": {
173
+ "state": { "enum": ["completed", "failed", "stopped", "interrupted"] },
174
+ "failureClass": { "enum": ["none", "infrastructure", "task"] },
175
+ "stopReason": { "enum": ["none", "budget", "policy"] },
176
+ "workspaceArtifactId": { "$ref": "#/$defs/identifier" }
177
+ },
178
+ "allOf": [
179
+ {
180
+ "if": { "properties": { "state": { "const": "completed" } }, "required": ["state"] },
181
+ "then": {
182
+ "required": ["workspaceArtifactId"],
183
+ "properties": {
184
+ "failureClass": { "const": "none" },
185
+ "stopReason": { "const": "none" }
186
+ }
187
+ }
188
+ },
189
+ {
190
+ "if": { "properties": { "state": { "const": "failed" } }, "required": ["state"] },
191
+ "then": {
192
+ "properties": {
193
+ "failureClass": { "enum": ["infrastructure", "task"] },
194
+ "stopReason": { "const": "none" }
195
+ }
196
+ }
197
+ },
198
+ {
199
+ "if": {
200
+ "properties": { "state": { "const": "failed" }, "failureClass": { "const": "task" } },
201
+ "required": ["state", "failureClass"]
202
+ },
203
+ "then": { "required": ["workspaceArtifactId"] }
204
+ },
205
+ {
206
+ "if": { "properties": { "state": { "const": "stopped" } }, "required": ["state"] },
207
+ "then": {
208
+ "properties": {
209
+ "failureClass": { "const": "none" },
210
+ "stopReason": { "enum": ["budget", "policy"] }
211
+ }
212
+ }
213
+ },
214
+ {
215
+ "if": { "properties": { "state": { "const": "interrupted" } }, "required": ["state"] },
216
+ "then": {
217
+ "properties": {
218
+ "failureClass": { "const": "infrastructure" },
219
+ "stopReason": { "const": "none" }
220
+ }
221
+ }
222
+ }
223
+ ]
224
+ },
225
+ "capability": {
226
+ "type": "object",
227
+ "additionalProperties": false,
228
+ "required": ["status"],
229
+ "properties": {
230
+ "status": { "enum": ["available", "missing", "unsupported", "not-checked"] }
231
+ }
232
+ },
233
+ "runManifest": {
234
+ "type": "object",
235
+ "additionalProperties": false,
236
+ "required": [
237
+ "schemaVersion",
238
+ "bundleId",
239
+ "run",
240
+ "attempt",
241
+ "configuration",
242
+ "terminal",
243
+ "evidence"
244
+ ],
245
+ "properties": {
246
+ "schemaVersion": { "const": "run-manifest/v1" },
247
+ "bundleId": { "$ref": "#/$defs/identifier" },
248
+ "run": {
249
+ "type": "object",
250
+ "additionalProperties": false,
251
+ "required": ["id", "task", "fixture", "model", "harness", "runtime"],
252
+ "properties": {
253
+ "id": { "$ref": "#/$defs/identifier" },
254
+ "trial": {
255
+ "type": "object", "additionalProperties": false, "required": ["index"],
256
+ "properties": { "index": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }
257
+ },
258
+ "assessmentMode": { "enum": ["observational", "verified"] },
259
+ "task": {
260
+ "type": "object",
261
+ "additionalProperties": false,
262
+ "required": ["id"],
263
+ "properties": { "id": { "$ref": "#/$defs/identifier" }, "digest": { "$ref": "#/$defs/digest" } }
264
+ },
265
+ "fixture": {
266
+ "type": "object",
267
+ "additionalProperties": false,
268
+ "required": ["id", "digest"],
269
+ "properties": {
270
+ "id": { "$ref": "#/$defs/identifier" },
271
+ "digest": { "$ref": "#/$defs/digest" }
272
+ }
273
+ },
274
+ "model": {
275
+ "type": "object",
276
+ "additionalProperties": false,
277
+ "required": ["provider", "id"],
278
+ "properties": {
279
+ "provider": { "$ref": "#/$defs/identifier" },
280
+ "id": { "$ref": "#/$defs/identifier" },
281
+ "configurationDigest": { "$ref": "#/$defs/digest" }
282
+ }
283
+ },
284
+ "harness": {
285
+ "type": "object",
286
+ "additionalProperties": false,
287
+ "required": ["id", "version"],
288
+ "properties": {
289
+ "id": { "$ref": "#/$defs/identifier" },
290
+ "version": { "$ref": "#/$defs/identifier" },
291
+ "configurationDigest": { "$ref": "#/$defs/digest" }
292
+ }
293
+ },
294
+ "runtime": {
295
+ "type": "array",
296
+ "minItems": 1,
297
+ "uniqueItems": true,
298
+ "items": { "$ref": "#/$defs/runtimeComponent" }
299
+ },
300
+ "verifier": { "$ref": "#/$defs/verifierReference" },
301
+ "native": {
302
+ "type": "object",
303
+ "additionalProperties": false,
304
+ "properties": {
305
+ "sessionId": { "$ref": "#/$defs/identifier" },
306
+ "traceId": { "$ref": "#/$defs/identifier" }
307
+ }
308
+ }
309
+ },
310
+ "allOf": [
311
+ {
312
+ "if": { "properties": { "assessmentMode": { "const": "observational" } }, "required": ["assessmentMode"] },
313
+ "then": { "not": { "required": ["verifier"] } }
314
+ }
315
+ ]
316
+ },
317
+ "attempt": {
318
+ "type": "object",
319
+ "additionalProperties": false,
320
+ "required": ["id", "number"],
321
+ "properties": {
322
+ "id": { "$ref": "#/$defs/identifier" },
323
+ "number": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 },
324
+ "retryOf": { "$ref": "#/$defs/identifier" }
325
+ },
326
+ "allOf": [
327
+ {
328
+ "if": { "required": ["retryOf"] },
329
+ "then": { "properties": { "number": { "minimum": 2 } } }
330
+ },
331
+ {
332
+ "if": { "properties": { "number": { "minimum": 2 } }, "required": ["number"] },
333
+ "then": { "required": ["retryOf"] }
334
+ }
335
+ ]
336
+ },
337
+ "configuration": {
338
+ "type": "object",
339
+ "additionalProperties": false,
340
+ "required": ["digest", "budgetDigest", "toolPolicyDigest"],
341
+ "properties": {
342
+ "digest": { "$ref": "#/$defs/digest" },
343
+ "captureProfileDigest": { "$ref": "#/$defs/digest" },
344
+ "budgetDigest": { "$ref": "#/$defs/digest" },
345
+ "toolPolicyDigest": { "$ref": "#/$defs/digest" }
346
+ }
347
+ },
348
+ "terminal": { "$ref": "#/$defs/terminal" },
349
+ "evidence": {
350
+ "type": "array",
351
+ "minItems": 1,
352
+ "items": { "$ref": "#/$defs/evidenceDescriptor" },
353
+ "contains": {
354
+ "properties": {
355
+ "kind": { "const": "capture-report" },
356
+ "sharingClass": { "not": { "enum": ["partner", "public"] } }
357
+ },
358
+ "required": ["kind", "sharingClass"]
359
+ },
360
+ "minContains": 1,
361
+ "maxContains": 1
362
+ }
363
+ }
364
+ },
365
+ "runtimeComponent": {
366
+ "type": "object",
367
+ "additionalProperties": false,
368
+ "required": ["source", "name", "version"],
369
+ "properties": {
370
+ "source": { "$ref": "#/$defs/identifier" },
371
+ "name": { "$ref": "#/$defs/identifier" },
372
+ "version": { "$ref": "#/$defs/identifier" }
373
+ }
374
+ },
375
+ "diagnosticOrigin": {
376
+ "type": "object",
377
+ "additionalProperties": false,
378
+ "required": ["stream", "locator", "digest", "sizeBytes", "truncated"],
379
+ "properties": {
380
+ "stream": { "enum": ["stdout", "stderr"] },
381
+ "locator": { "$ref": "#/$defs/relativePath" },
382
+ "digest": { "$ref": "#/$defs/digest" },
383
+ "sizeBytes": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
384
+ "truncated": { "type": "boolean" }
385
+ }
386
+ },
387
+ "diagnosticReference": {
388
+ "type": "object",
389
+ "additionalProperties": false,
390
+ "required": ["stream", "locator", "digest", "sizeBytes", "truncated"],
391
+ "properties": {
392
+ "stream": { "enum": ["stdout", "stderr"] },
393
+ "locator": { "$ref": "#/$defs/relativePath" },
394
+ "digest": { "$ref": "#/$defs/digest" },
395
+ "sizeBytes": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
396
+ "truncated": { "type": "boolean" },
397
+ "source": { "$ref": "#/$defs/diagnosticOrigin" }
398
+ }
399
+ },
400
+ "verifierResult": {
401
+ "type": "object",
402
+ "additionalProperties": false,
403
+ "required": ["schemaVersion", "bundleId", "status", "assertions"],
404
+ "properties": {
405
+ "schemaVersion": { "const": "verifier-result/v1" },
406
+ "bundleId": { "$ref": "#/$defs/identifier" },
407
+ "status": { "enum": ["passed", "failed", "error", "not-run"] },
408
+ "durationMs": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
409
+ "error": { "type": "string", "maxLength": 4096, "pattern": ".*\\S.*" },
410
+ "errorRedacted": { "type": "boolean" },
411
+ "verifier": { "$ref": "#/$defs/verifierReference" },
412
+ "exitCode": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 },
413
+ "workspace": {
414
+ "type": "object",
415
+ "additionalProperties": false,
416
+ "required": ["artifactId", "digest"],
417
+ "properties": {
418
+ "artifactId": { "$ref": "#/$defs/identifier" },
419
+ "digest": { "$ref": "#/$defs/digest" },
420
+ "fingerprint": { "$ref": "#/$defs/digest" }
421
+ }
422
+ },
423
+ "assertions": {
424
+ "type": "array",
425
+ "items": {
426
+ "type": "object",
427
+ "additionalProperties": false,
428
+ "required": ["id", "status"],
429
+ "properties": {
430
+ "id": { "$ref": "#/$defs/identifier" },
431
+ "status": { "enum": ["passed", "failed", "not-run"] }
432
+ }
433
+ }
434
+ },
435
+ "diagnostics": {
436
+ "type": "array",
437
+ "maxItems": 2,
438
+ "items": { "$ref": "#/$defs/diagnosticReference" },
439
+ "uniqueItems": true
440
+ }
441
+ },
442
+ "allOf": [
443
+ {
444
+ "if": { "properties": { "status": { "const": "passed" } }, "required": ["status"] },
445
+ "then": {
446
+ "required": ["workspace"],
447
+ "properties": {
448
+ "assertions": {
449
+ "minItems": 1,
450
+ "items": {
451
+ "properties": { "status": { "const": "passed" } },
452
+ "required": ["status"]
453
+ }
454
+ },
455
+ "exitCode": { "const": 0 }
456
+ }
457
+ }
458
+ },
459
+ {
460
+ "if": { "properties": { "status": { "const": "failed" } }, "required": ["status"] },
461
+ "then": {
462
+ "required": ["workspace", "exitCode"],
463
+ "properties": {
464
+ "exitCode": { "not": { "const": 0 } },
465
+ "assertions": {
466
+ "contains": {
467
+ "properties": { "status": { "const": "failed" } },
468
+ "required": ["status"]
469
+ }
470
+ }
471
+ }
472
+ }
473
+ },
474
+ {
475
+ "if": { "properties": { "status": { "const": "not-run" } }, "required": ["status"] },
476
+ "then": {
477
+ "not": { "anyOf": [{ "required": ["durationMs"] }, { "required": ["exitCode"] }, { "required": ["workspace"] }] },
478
+ "properties": {
479
+ "diagnostics": { "maxItems": 0 },
480
+ "assertions": {
481
+ "items": {
482
+ "properties": { "status": { "const": "not-run" } },
483
+ "required": ["status"]
484
+ }
485
+ }
486
+ }
487
+ }
488
+ },
489
+ {
490
+ "if": { "properties": { "status": { "enum": ["passed", "failed"] } }, "required": ["status"] },
491
+ "then": { "not": { "required": ["error"] } }
492
+ },
493
+ {
494
+ "if": { "properties": { "status": { "const": "error" } }, "required": ["status"] },
495
+ "then": { "required": ["error"] }
496
+ },
497
+ {
498
+ "if": { "properties": { "status": { "enum": ["passed", "failed", "not-run"] } }, "required": ["status"] },
499
+ "then": { "not": { "required": ["errorRedacted"] } }
500
+ },
501
+ {
502
+ "if": { "properties": { "errorRedacted": { "const": true } }, "required": ["errorRedacted"] },
503
+ "then": {
504
+ "required": ["error"],
505
+ "properties": { "error": { "const": "[redacted]" } }
506
+ }
507
+ }
508
+ ]
509
+ },
510
+ "captureReport": {
511
+ "type": "object",
512
+ "additionalProperties": false,
513
+ "required": ["schemaVersion", "bundleId", "qualification", "capabilities", "missingEvidence"],
514
+ "properties": {
515
+ "schemaVersion": { "const": "capture-report/v1" },
516
+ "bundleId": { "$ref": "#/$defs/identifier" },
517
+ "assessmentMode": { "enum": ["observational", "verified"] },
518
+ "qualification": { "enum": ["qualified", "incomplete"] },
519
+ "capabilities": {
520
+ "type": "object",
521
+ "additionalProperties": false,
522
+ "required": ["semantic", "timingResource", "outcome"],
523
+ "properties": {
524
+ "semantic": { "$ref": "#/$defs/capability" },
525
+ "timingResource": { "$ref": "#/$defs/capability" },
526
+ "outcome": { "$ref": "#/$defs/capability" }
527
+ }
528
+ },
529
+ "missingEvidence": {
530
+ "type": "array",
531
+ "uniqueItems": true,
532
+ "items": {
533
+ "type": "object",
534
+ "additionalProperties": false,
535
+ "required": ["kind", "reason", "affects"],
536
+ "properties": {
537
+ "kind": { "$ref": "#/$defs/identifier" },
538
+ "reason": {
539
+ "enum": [
540
+ "not-emitted",
541
+ "not-collected",
542
+ "optional-beta-unavailable",
543
+ "process-interrupted",
544
+ "policy-restricted",
545
+ "unsupported",
546
+ "not-checked"
547
+ ]
548
+ },
549
+ "affects": {
550
+ "type": "array",
551
+ "minItems": 1,
552
+ "uniqueItems": true,
553
+ "items": { "enum": ["semantic", "timing-resource", "outcome"] }
554
+ },
555
+ "detail": { "type": "string", "minLength": 1, "maxLength": 4096 }
556
+ },
557
+ "allOf": [
558
+ {
559
+ "if": {
560
+ "properties": { "reason": { "const": "optional-beta-unavailable" } },
561
+ "required": ["reason"]
562
+ },
563
+ "then": {
564
+ "properties": {
565
+ "affects": {
566
+ "minItems": 1,
567
+ "maxItems": 1,
568
+ "contains": { "const": "timing-resource" }
569
+ }
570
+ }
571
+ }
572
+ }
573
+ ]
574
+ }
575
+ },
576
+ "workspaceOutcomeExcludedDirectoryNames": {
577
+ "type": "array",
578
+ "uniqueItems": true,
579
+ "items": {
580
+ "oneOf": [
581
+ { "const": ".git" },
582
+ {
583
+ "type": "string",
584
+ "maxLength": 255,
585
+ "pattern": "^(?!\\.{1,2}$)(?!\\.[Gg][Ii][Tt]$)(?!(?:[Cc][Oo][Nn]|[Pp][Rr][Nn]|[Aa][Uu][Xx]|[Nn][Uu][Ll]|[Cc][Oo][Mm][1-9]|[Ll][Pp][Tt][1-9])(?:\\..*)?$)[A-Za-z0-9._@+()\\[\\]-]+$"
586
+ }
587
+ ]
588
+ }
589
+ },
590
+ "workspaceOutcomeRespectsGitignore": { "type": "boolean" },
591
+ "workspaceOutcomeOmitsEmptyDirectories": { "type": "boolean" },
592
+ "semanticEvidenceKinds": {
593
+ "type": "array",
594
+ "minItems": 1,
595
+ "uniqueItems": true,
596
+ "items": { "enum": ["session", "hook"] },
597
+ "contains": { "const": "session" }
598
+ },
599
+ "relatedSessionIds": {
600
+ "type": "array",
601
+ "uniqueItems": true,
602
+ "items": { "$ref": "#/$defs/identifier" }
603
+ },
604
+ "agentSdk": {
605
+ "type": "object",
606
+ "additionalProperties": false,
607
+ "required": ["capabilities", "effectiveConfiguration", "expectedHooks"],
608
+ "properties": {
609
+ "capabilities": {
610
+ "type": "object",
611
+ "required": ["sdkVersion", "claudeCodeVersion", "hooks", "unsupportedHooks", "hookOccurrenceAuthority"],
612
+ "properties": {
613
+ "sdkVersion": { "$ref": "#/$defs/identifier" },
614
+ "claudeCodeVersion": { "$ref": "#/$defs/identifier" },
615
+ "hooks": { "type": "object" },
616
+ "unsupportedHooks": {
617
+ "type": "array",
618
+ "uniqueItems": true,
619
+ "items": { "$ref": "#/$defs/identifier" }
620
+ },
621
+ "hookOccurrenceAuthority": { "const": "hooks.jsonl" }
622
+ }
623
+ },
624
+ "effectiveConfiguration": { "type": "object" },
625
+ "captureWarnings": {
626
+ "type": "object",
627
+ "additionalProperties": false,
628
+ "required": ["count", "diagnostic", "sizeBytes", "truncated"],
629
+ "properties": {
630
+ "count": { "type": "integer", "minimum": 0 },
631
+ "diagnostic": { "type": "string" },
632
+ "sizeBytes": { "type": "integer", "minimum": 0 },
633
+ "truncated": { "type": "boolean" }
634
+ }
635
+ },
636
+ "expectedHooks": {
637
+ "type": "array",
638
+ "uniqueItems": true,
639
+ "items": { "$ref": "#/$defs/identifier" }
640
+ }
641
+ }
642
+ },
643
+ "structuralQualification": {
644
+ "type": "object",
645
+ "additionalProperties": false,
646
+ "required": ["status", "semanticAnalysisUsable", "dimensions", "reasons"],
647
+ "properties": {
648
+ "status": { "enum": ["qualified", "qualified-with-gaps", "unqualified"] },
649
+ "semanticAnalysisUsable": { "type": "boolean" },
650
+ "dimensions": { "type": "object" },
651
+ "reasons": { "type": "array" }
652
+ }
653
+ }
654
+ },
655
+ "allOf": [
656
+ {
657
+ "if": { "properties": { "qualification": { "const": "qualified" } }, "required": ["qualification"] },
658
+ "then": {
659
+ "properties": {
660
+ "capabilities": {
661
+ "properties": {
662
+ "semantic": { "properties": { "status": { "const": "available" } } },
663
+ "outcome": { "properties": { "status": { "const": "available" } } },
664
+ "timingResource": { "properties": { "status": { "enum": ["available", "unsupported"] } } }
665
+ }
666
+ },
667
+ "missingEvidence": {
668
+ "not": {
669
+ "contains": {
670
+ "properties": {
671
+ "affects": {
672
+ "contains": { "enum": ["semantic", "outcome"] }
673
+ }
674
+ },
675
+ "required": ["affects"]
676
+ }
677
+ }
678
+ }
679
+ }
680
+ }
681
+ },
682
+ {
683
+ "if": { "properties": { "qualification": { "const": "incomplete" } }, "required": ["qualification"] },
684
+ "then": {
685
+ "properties": {
686
+ "missingEvidence": { "minItems": 1 },
687
+ "capabilities": {
688
+ "anyOf": [
689
+ { "properties": { "semantic": { "properties": { "status": { "enum": ["missing", "unsupported", "not-checked"] } } } } },
690
+ { "properties": { "timingResource": { "properties": { "status": { "enum": ["missing", "not-checked"] } } } } },
691
+ { "properties": { "outcome": { "properties": { "status": { "enum": ["missing", "unsupported", "not-checked"] } } } } }
692
+ ]
693
+ }
694
+ }
695
+ }
696
+ },
697
+ {
698
+ "if": { "properties": { "qualification": { "const": "qualified" } }, "required": ["qualification"] },
699
+ "then": {
700
+ "properties": {
701
+ "missingEvidence": {
702
+ "not": {
703
+ "contains": {
704
+ "properties": {
705
+ "reason": {
706
+ "not": { "enum": ["unsupported", "optional-beta-unavailable"] }
707
+ },
708
+ "affects": { "contains": { "const": "timing-resource" } }
709
+ },
710
+ "required": ["reason", "affects"]
711
+ }
712
+ }
713
+ }
714
+ }
715
+ }
716
+ },
717
+ {
718
+ "if": {
719
+ "properties": {
720
+ "capabilities": {
721
+ "properties": {
722
+ "semantic": {
723
+ "properties": {
724
+ "status": { "enum": ["missing", "unsupported", "not-checked"] }
725
+ },
726
+ "required": ["status"]
727
+ }
728
+ },
729
+ "required": ["semantic"]
730
+ }
731
+ },
732
+ "required": ["capabilities"]
733
+ },
734
+ "then": {
735
+ "properties": {
736
+ "missingEvidence": {
737
+ "contains": {
738
+ "properties": {
739
+ "affects": { "contains": { "const": "semantic" } }
740
+ },
741
+ "required": ["affects"]
742
+ }
743
+ }
744
+ }
745
+ }
746
+ },
747
+ {
748
+ "if": {
749
+ "properties": {
750
+ "capabilities": {
751
+ "properties": {
752
+ "timingResource": {
753
+ "properties": {
754
+ "status": { "enum": ["missing", "unsupported", "not-checked"] }
755
+ },
756
+ "required": ["status"]
757
+ }
758
+ },
759
+ "required": ["timingResource"]
760
+ }
761
+ },
762
+ "required": ["capabilities"]
763
+ },
764
+ "then": {
765
+ "properties": {
766
+ "missingEvidence": {
767
+ "contains": {
768
+ "properties": {
769
+ "affects": { "contains": { "const": "timing-resource" } }
770
+ },
771
+ "required": ["affects"]
772
+ }
773
+ }
774
+ }
775
+ }
776
+ },
777
+ {
778
+ "if": {
779
+ "properties": {
780
+ "capabilities": {
781
+ "properties": {
782
+ "outcome": {
783
+ "properties": {
784
+ "status": { "enum": ["missing", "unsupported", "not-checked"] }
785
+ },
786
+ "required": ["status"]
787
+ }
788
+ },
789
+ "required": ["outcome"]
790
+ }
791
+ },
792
+ "required": ["capabilities"]
793
+ },
794
+ "then": {
795
+ "properties": {
796
+ "missingEvidence": {
797
+ "contains": {
798
+ "properties": {
799
+ "affects": { "contains": { "const": "outcome" } }
800
+ },
801
+ "required": ["affects"]
802
+ }
803
+ }
804
+ }
805
+ }
806
+ },
807
+ {
808
+ "if": {
809
+ "properties": {
810
+ "capabilities": {
811
+ "properties": { "semantic": { "properties": { "status": { "const": "unsupported" } } } },
812
+ "required": ["semantic"]
813
+ }
814
+ }
815
+ },
816
+ "then": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/unsupportedSemanticEvidence" } } } }
817
+ },
818
+ {
819
+ "if": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/unsupportedSemanticEvidence" } } } },
820
+ "then": { "properties": { "capabilities": { "properties": { "semantic": { "properties": { "status": { "const": "unsupported" } } } } } } }
821
+ },
822
+ {
823
+ "if": {
824
+ "properties": {
825
+ "capabilities": {
826
+ "properties": { "timingResource": { "properties": { "status": { "const": "unsupported" } } } },
827
+ "required": ["timingResource"]
828
+ }
829
+ }
830
+ },
831
+ "then": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/unsupportedTimingEvidence" } } } }
832
+ },
833
+ {
834
+ "if": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/unsupportedTimingEvidence" } } } },
835
+ "then": { "properties": { "capabilities": { "properties": { "timingResource": { "properties": { "status": { "const": "unsupported" } } } } } } }
836
+ },
837
+ {
838
+ "if": {
839
+ "properties": {
840
+ "capabilities": {
841
+ "properties": { "outcome": { "properties": { "status": { "const": "unsupported" } } } },
842
+ "required": ["outcome"]
843
+ }
844
+ }
845
+ },
846
+ "then": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/unsupportedOutcomeEvidence" } } } }
847
+ },
848
+ {
849
+ "if": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/unsupportedOutcomeEvidence" } } } },
850
+ "then": { "properties": { "capabilities": { "properties": { "outcome": { "properties": { "status": { "const": "unsupported" } } } } } } }
851
+ },
852
+ {
853
+ "if": { "properties": { "capabilities": { "properties": { "semantic": { "properties": { "status": { "const": "not-checked" } } } }, "required": ["semantic"] } } },
854
+ "then": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/notCheckedSemanticEvidence" } } } }
855
+ },
856
+ {
857
+ "if": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/notCheckedSemanticEvidence" } } } },
858
+ "then": { "properties": { "capabilities": { "properties": { "semantic": { "properties": { "status": { "const": "not-checked" } } } } } } }
859
+ },
860
+ {
861
+ "if": { "properties": { "capabilities": { "properties": { "timingResource": { "properties": { "status": { "const": "not-checked" } } } }, "required": ["timingResource"] } } },
862
+ "then": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/notCheckedTimingEvidence" } } } }
863
+ },
864
+ {
865
+ "if": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/notCheckedTimingEvidence" } } } },
866
+ "then": { "properties": { "capabilities": { "properties": { "timingResource": { "properties": { "status": { "const": "not-checked" } } } } } } }
867
+ },
868
+ {
869
+ "if": { "properties": { "capabilities": { "properties": { "outcome": { "properties": { "status": { "const": "not-checked" } } } }, "required": ["outcome"] } } },
870
+ "then": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/notCheckedOutcomeEvidence" } } } }
871
+ },
872
+ {
873
+ "if": { "properties": { "missingEvidence": { "contains": { "$ref": "#/$defs/notCheckedOutcomeEvidence" } } } },
874
+ "then": { "properties": { "capabilities": { "properties": { "outcome": { "properties": { "status": { "const": "not-checked" } } } } } } }
875
+ }
876
+ ]
877
+ },
878
+ "unsupportedSemanticEvidence": {
879
+ "type": "object",
880
+ "required": ["reason", "affects"],
881
+ "properties": {
882
+ "reason": { "const": "unsupported" },
883
+ "affects": { "type": "array", "contains": { "const": "semantic" } }
884
+ }
885
+ },
886
+ "unsupportedTimingEvidence": {
887
+ "type": "object",
888
+ "required": ["reason", "affects"],
889
+ "properties": {
890
+ "reason": { "const": "unsupported" },
891
+ "affects": { "type": "array", "contains": { "const": "timing-resource" } }
892
+ }
893
+ },
894
+ "unsupportedOutcomeEvidence": {
895
+ "type": "object",
896
+ "required": ["reason", "affects"],
897
+ "properties": {
898
+ "reason": { "const": "unsupported" },
899
+ "affects": { "type": "array", "contains": { "const": "outcome" } }
900
+ }
901
+ },
902
+ "notCheckedSemanticEvidence": {
903
+ "type": "object",
904
+ "required": ["reason", "affects"],
905
+ "properties": {
906
+ "reason": { "const": "not-checked" },
907
+ "affects": { "type": "array", "contains": { "const": "semantic" } }
908
+ }
909
+ },
910
+ "notCheckedTimingEvidence": {
911
+ "type": "object",
912
+ "required": ["reason", "affects"],
913
+ "properties": {
914
+ "reason": { "const": "not-checked" },
915
+ "affects": { "type": "array", "contains": { "const": "timing-resource" } }
916
+ }
917
+ },
918
+ "notCheckedOutcomeEvidence": {
919
+ "type": "object",
920
+ "required": ["reason", "affects"],
921
+ "properties": {
922
+ "reason": { "const": "not-checked" },
923
+ "affects": { "type": "array", "contains": { "const": "outcome" } }
924
+ }
925
+ },
926
+ "portableExportArtifact": {
927
+ "type": "object",
928
+ "additionalProperties": false,
929
+ "required": ["id", "sourceArtifactId", "kind", "mediaType", "digest", "sizeBytes", "relativePath", "sourceDigest"],
930
+ "properties": {
931
+ "id": { "$ref": "#/$defs/identifier" },
932
+ "sourceArtifactId": { "$ref": "#/$defs/identifier" },
933
+ "kind": {
934
+ "enum": ["session", "hook", "telemetry", "workspace", "verifier", "diagnostic", "capture-report"]
935
+ },
936
+ "mediaType": { "type": "string", "minLength": 1 },
937
+ "digest": { "$ref": "#/$defs/digest" },
938
+ "sizeBytes": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
939
+ "relativePath": { "$ref": "#/$defs/relativePath" },
940
+ "sourceDigest": { "$ref": "#/$defs/digest" },
941
+ "diagnosticSource": {
942
+ "type": "object",
943
+ "additionalProperties": false,
944
+ "required": ["verifierId", "stream", "locatorDigest", "sizeBytes"],
945
+ "properties": {
946
+ "verifierId": { "$ref": "#/$defs/identifier" },
947
+ "stream": { "enum": ["stdout", "stderr"] },
948
+ "locatorDigest": { "$ref": "#/$defs/digest" },
949
+ "sizeBytes": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
950
+ }
951
+ }
952
+ }
953
+ },
954
+ "exportTransformation": {
955
+ "type": "object",
956
+ "additionalProperties": false,
957
+ "required": ["artifactId", "action", "count"],
958
+ "properties": {
959
+ "artifactId": { "$ref": "#/$defs/identifier" },
960
+ "action": {
961
+ "enum": ["sanitized", "canonicalized", "removed-field", "redacted-secret", "redacted-local-identifier", "rewritten-correlation", "truncated"]
962
+ },
963
+ "count": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 }
964
+ }
965
+ },
966
+ "excludedExportArtifact": {
967
+ "type": "object",
968
+ "additionalProperties": false,
969
+ "required": ["artifactId", "reason"],
970
+ "properties": {
971
+ "artifactId": { "$ref": "#/$defs/identifier" },
972
+ "reason": { "enum": ["source-export-manifest", "unsupported-workspace-snapshot"] }
973
+ }
974
+ },
975
+ "exportCorrelations": {
976
+ "type": "object",
977
+ "additionalProperties": false,
978
+ "required": ["bundleId", "runId", "attemptId"],
979
+ "properties": {
980
+ "bundleId": { "$ref": "#/$defs/identifier" },
981
+ "runId": { "$ref": "#/$defs/identifier" },
982
+ "attemptId": { "$ref": "#/$defs/identifier" },
983
+ "sessionId": { "$ref": "#/$defs/identifier" },
984
+ "traceId": { "$ref": "#/$defs/identifier" }
985
+ }
986
+ },
987
+ "exportManifest": {
988
+ "type": "object",
989
+ "additionalProperties": false,
990
+ "required": ["schemaVersion", "bundleId", "status", "sharingClass", "policyDigest", "artifactIds"],
991
+ "properties": {
992
+ "schemaVersion": { "const": "export-manifest/v1" },
993
+ "bundleId": { "$ref": "#/$defs/identifier" },
994
+ "status": { "enum": ["not-requested", "blocked", "ready", "exported"] },
995
+ "sharingClass": { "$ref": "#/$defs/sharingClass" },
996
+ "assessmentMode": { "enum": ["observational", "verified"] },
997
+ "policyDigest": { "$ref": "#/$defs/digest" },
998
+ "artifactIds": {
999
+ "type": "array",
1000
+ "uniqueItems": true,
1001
+ "items": { "$ref": "#/$defs/identifier" }
1002
+ },
1003
+ "sourceManifestDigest": { "$ref": "#/$defs/digest" },
1004
+ "correlations": { "$ref": "#/$defs/exportCorrelations" },
1005
+ "artifacts": {
1006
+ "type": "array",
1007
+ "minItems": 1,
1008
+ "items": { "$ref": "#/$defs/portableExportArtifact" }
1009
+ },
1010
+ "transformations": {
1011
+ "type": "array",
1012
+ "minItems": 1,
1013
+ "items": { "$ref": "#/$defs/exportTransformation" }
1014
+ },
1015
+ "excludedArtifacts": {
1016
+ "type": "array",
1017
+ "items": { "$ref": "#/$defs/excludedExportArtifact" }
1018
+ }
1019
+ },
1020
+ "allOf": [
1021
+ {
1022
+ "if": { "properties": { "status": { "enum": ["ready", "exported"] } }, "required": ["status"] },
1023
+ "then": {
1024
+ "properties": {
1025
+ "artifactIds": { "minItems": 1 },
1026
+ "sharingClass": { "not": { "const": "unknown" } }
1027
+ }
1028
+ }
1029
+ },
1030
+ {
1031
+ "if": { "required": ["artifacts"] },
1032
+ "then": {
1033
+ "required": ["sourceManifestDigest", "correlations", "transformations", "excludedArtifacts"],
1034
+ "properties": { "status": { "enum": ["ready", "exported"] } }
1035
+ }
1036
+ }
1037
+ ]
1038
+ }
1039
+ }
1040
+ }