@open-agent-toolkit/cli 0.2.30 → 0.2.31

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 (72) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/cli-utilities/configuration.md +41 -0
  3. package/assets/docs/contributing/code.md +19 -7
  4. package/assets/docs/contributing/explainer-kit-verification.md +9 -1
  5. package/assets/docs/contributing/skills.md +9 -0
  6. package/assets/docs/workflows/skills/explainer-kit-providers.md +16 -5
  7. package/assets/docs/workflows/skills/explainer-kit.md +98 -38
  8. package/assets/public-package-versions.json +4 -4
  9. package/assets/skills/explainer-kit/SKILL.md +33 -8
  10. package/assets/skills/explainer-kit/briefs/project-recap.md +25 -7
  11. package/assets/skills/explainer-kit/recipes/project-recap.v2.json +72 -0
  12. package/assets/skills/explainer-kit/references/contracts.md +49 -17
  13. package/assets/skills/explainer-kit/references/destination-contract.md +141 -25
  14. package/assets/skills/explainer-kit/references/extension-contract.md +19 -10
  15. package/assets/skills/explainer-kit/references/visual-authoring.md +24 -0
  16. package/assets/skills/explainer-kit/references/visual-review.md +19 -5
  17. package/assets/skills/explainer-kit/schemas/author-request.v3.schema.json +241 -0
  18. package/assets/skills/explainer-kit/schemas/publish-receipt.v2.schema.json +215 -0
  19. package/assets/skills/explainer-kit/schemas/publish-request.v2.schema.json +34 -0
  20. package/assets/skills/explainer-kit/schemas/run-request.schema.json +4 -1
  21. package/assets/skills/explainer-kit/schemas/terminal-evidence.v1.schema.json +81 -0
  22. package/assets/skills/explainer-kit/schemas/visual-review-evidence.v1.schema.json +66 -0
  23. package/assets/skills/explainer-kit/scripts/lib/catalog.mjs +109 -3
  24. package/assets/skills/explainer-kit/scripts/lib/contracts.mjs +550 -17
  25. package/assets/skills/explainer-kit/scripts/lib/durability.mjs +90 -8
  26. package/assets/skills/explainer-kit/scripts/lib/fs-safe.mjs +5 -0
  27. package/assets/skills/explainer-kit/scripts/lib/internal-references.mjs +538 -0
  28. package/assets/skills/explainer-kit/scripts/lib/package-coverage.mjs +129 -11
  29. package/assets/skills/explainer-kit/scripts/lib/publication-policy.mjs +54 -0
  30. package/assets/skills/explainer-kit/scripts/lib/recipes.mjs +2 -1
  31. package/assets/skills/explainer-kit/scripts/lib/records.mjs +139 -22
  32. package/assets/skills/explainer-kit/scripts/lib/s3-roots.mjs +353 -0
  33. package/assets/skills/explainer-kit/scripts/lib/s3-static.mjs +237 -107
  34. package/assets/skills/explainer-kit/scripts/lib/set-plan.mjs +1 -0
  35. package/assets/skills/explainer-kit/scripts/lib/terminal-evidence.mjs +157 -0
  36. package/assets/skills/explainer-kit/scripts/lib/visual-review.mjs +26 -6
  37. package/assets/skills/explainer-kit/scripts/run.mjs +1006 -144
  38. package/assets/skills/oat-explainer-kit/SKILL.md +16 -3
  39. package/assets/skills/oat-explainer-kit/references/config-contract.md +13 -8
  40. package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +50 -6
  41. package/assets/skills/oat-explainer-kit/references/migration.md +2 -1
  42. package/assets/skills/oat-explainer-kit/references/visual-review-callback.md +11 -0
  43. package/assets/skills/oat-explainer-kit/scripts/bind-project-sources.mjs +37 -15
  44. package/assets/skills/oat-explainer-kit/scripts/check-terminal-outcome.mjs +83 -0
  45. package/assets/skills/oat-explainer-kit/scripts/derive-destination.mjs +91 -0
  46. package/assets/skills/oat-explainer-kit/scripts/finalize-tracked-run.mjs +66 -10
  47. package/assets/skills/oat-explainer-kit/scripts/resolve-config.mjs +60 -21
  48. package/assets/skills/oat-explainer-kit/scripts/resolve-paths.mjs +52 -8
  49. package/assets/skills/oat-explainer-kit/scripts/run.mjs +271 -36
  50. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +2 -2
  51. package/assets/skills/oat-project-complete/SKILL.md +19 -3
  52. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +2 -2
  53. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +8 -0
  54. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +2 -2
  55. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +2 -2
  56. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +2 -2
  57. package/dist/commands/config/index.d.ts.map +1 -1
  58. package/dist/commands/config/index.js +18 -0
  59. package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
  60. package/dist/commands/project/archive/archive-utils.js +57 -7
  61. package/dist/commands/project/archive/explainer-terminal-evidence.d.ts +29 -0
  62. package/dist/commands/project/archive/explainer-terminal-evidence.d.ts.map +1 -0
  63. package/dist/commands/project/archive/explainer-terminal-evidence.js +37 -0
  64. package/dist/config/oat-config.d.ts +2 -0
  65. package/dist/config/oat-config.d.ts.map +1 -1
  66. package/dist/config/oat-config.js +4 -0
  67. package/dist/config/resolve.d.ts.map +1 -1
  68. package/dist/config/resolve.js +1 -0
  69. package/package.json +2 -2
  70. /package/assets/skills/explainer-kit/recipes/{project-recap.json → project-recap.v1.json} +0 -0
  71. /package/assets/skills/explainer-kit/schemas/{publish-receipt.schema.json → publish-receipt.v1.schema.json} +0 -0
  72. /package/assets/skills/explainer-kit/schemas/{publish-request.schema.json → publish-request.v1.schema.json} +0 -0
@@ -0,0 +1,241 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "explainer-kit.author-request/v3",
4
+ "title": "AuthorRequestV3",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion",
9
+ "artifactId",
10
+ "artifactType",
11
+ "authoring",
12
+ "brief",
13
+ "visualAuthoringGuidance",
14
+ "factBase",
15
+ "theme",
16
+ "setContext",
17
+ "plannedArtifact",
18
+ "artifactLinks"
19
+ ],
20
+ "properties": {
21
+ "schemaVersion": { "const": "explainer-kit.author-request/v3" },
22
+ "artifactId": { "type": "string", "minLength": 1 },
23
+ "artifactType": {
24
+ "enum": ["hub", "diagram", "explainer", "deck", "catalog"]
25
+ },
26
+ "authoring": { "enum": ["markdown", "html"] },
27
+ "brief": { "type": "string", "minLength": 1 },
28
+ "visualAuthoringGuidance": { "type": "string", "minLength": 1 },
29
+ "factBase": { "$ref": "explainer-kit.fact-base/v1" },
30
+ "shell": { "type": "string", "minLength": 1 },
31
+ "theme": { "$ref": "explainer-kit.theme/v1" },
32
+ "setContext": { "$ref": "explainer-kit.set-plan/v1" },
33
+ "plannedArtifact": { "$ref": "#/$defs/plannedArtifact" },
34
+ "artifactLinks": {
35
+ "type": "array",
36
+ "items": { "$ref": "#/$defs/artifactLink" },
37
+ "minItems": 1,
38
+ "uniqueItems": true
39
+ },
40
+ "graphSemantics": {
41
+ "type": "array",
42
+ "items": { "$ref": "#/$defs/graphSemantics" },
43
+ "minItems": 1
44
+ },
45
+ "floor": {
46
+ "type": "object",
47
+ "additionalProperties": false,
48
+ "required": ["requiredNarrative"],
49
+ "properties": {
50
+ "requiredNarrative": {
51
+ "type": "array",
52
+ "items": { "type": "string", "minLength": 1 },
53
+ "minItems": 1,
54
+ "uniqueItems": true
55
+ }
56
+ }
57
+ }
58
+ },
59
+ "$defs": {
60
+ "artifactLink": {
61
+ "type": "object",
62
+ "additionalProperties": false,
63
+ "required": ["artifactId", "artifactType", "sitePath", "href"],
64
+ "properties": {
65
+ "artifactId": {
66
+ "type": "string",
67
+ "pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$"
68
+ },
69
+ "artifactType": {
70
+ "enum": ["hub", "diagram", "explainer", "deck", "catalog"]
71
+ },
72
+ "sitePath": {
73
+ "type": "string",
74
+ "pattern": "^site/[a-z0-9._-]+(?:/[a-z0-9._-]+)*/index\\.html$"
75
+ },
76
+ "href": {
77
+ "type": "string",
78
+ "pattern": "^(?:index\\.html|(?:\\.\\./)*[a-z0-9._-]+(?:/[a-z0-9._-]+)*/index\\.html)$"
79
+ }
80
+ }
81
+ },
82
+ "graphSemantics": {
83
+ "type": "object",
84
+ "additionalProperties": false,
85
+ "required": ["direction", "nodes", "edges", "topology"],
86
+ "properties": {
87
+ "direction": { "enum": ["TD", "LR"] },
88
+ "nodes": {
89
+ "type": "array",
90
+ "items": {
91
+ "type": "object",
92
+ "additionalProperties": false,
93
+ "required": ["id", "label", "shape", "explicit"],
94
+ "properties": {
95
+ "id": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" },
96
+ "label": { "type": "string", "minLength": 1 },
97
+ "shape": { "enum": ["rectangle", "rounded", "diamond"] },
98
+ "explicit": { "type": "boolean" }
99
+ }
100
+ },
101
+ "minItems": 1,
102
+ "uniqueItems": true
103
+ },
104
+ "edges": {
105
+ "type": "array",
106
+ "items": {
107
+ "type": "object",
108
+ "additionalProperties": false,
109
+ "required": ["from", "to", "kind", "label"],
110
+ "properties": {
111
+ "from": {
112
+ "type": "string",
113
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
114
+ },
115
+ "to": { "type": "string", "pattern": "^[A-Za-z][A-Za-z0-9_-]*$" },
116
+ "kind": { "enum": ["arrow", "line"] },
117
+ "label": { "type": "string" }
118
+ }
119
+ },
120
+ "minItems": 1
121
+ },
122
+ "topology": {
123
+ "type": "object",
124
+ "additionalProperties": false,
125
+ "required": [
126
+ "kind",
127
+ "features",
128
+ "branchNodes",
129
+ "fanInNodes",
130
+ "cycle",
131
+ "order"
132
+ ],
133
+ "properties": {
134
+ "kind": { "const": "non-linear" },
135
+ "features": {
136
+ "type": "array",
137
+ "items": {
138
+ "enum": [
139
+ "branch",
140
+ "fan-in",
141
+ "cycle",
142
+ "disconnected",
143
+ "non-linear"
144
+ ]
145
+ },
146
+ "minItems": 1,
147
+ "uniqueItems": true
148
+ },
149
+ "branchNodes": {
150
+ "type": "array",
151
+ "items": {
152
+ "type": "string",
153
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
154
+ },
155
+ "uniqueItems": true
156
+ },
157
+ "fanInNodes": {
158
+ "type": "array",
159
+ "items": {
160
+ "type": "string",
161
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
162
+ },
163
+ "uniqueItems": true
164
+ },
165
+ "cycle": { "type": "boolean" },
166
+ "order": {
167
+ "type": "array",
168
+ "items": {
169
+ "type": "string",
170
+ "pattern": "^[A-Za-z][A-Za-z0-9_-]*$"
171
+ },
172
+ "maxItems": 0
173
+ }
174
+ }
175
+ }
176
+ }
177
+ },
178
+ "plannedArtifact": {
179
+ "type": "object",
180
+ "additionalProperties": false,
181
+ "required": [
182
+ "artifactId",
183
+ "artifactType",
184
+ "profileId",
185
+ "required",
186
+ "sourceIds",
187
+ "draft",
188
+ "visualIntent"
189
+ ],
190
+ "properties": {
191
+ "artifactId": {
192
+ "type": "string",
193
+ "pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$"
194
+ },
195
+ "artifactType": {
196
+ "enum": ["hub", "diagram", "explainer", "deck", "catalog"]
197
+ },
198
+ "profileId": {
199
+ "type": "string",
200
+ "pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$"
201
+ },
202
+ "required": { "type": "boolean" },
203
+ "sourceIds": {
204
+ "type": "array",
205
+ "items": {
206
+ "type": "string",
207
+ "pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$"
208
+ },
209
+ "minItems": 1,
210
+ "uniqueItems": true
211
+ },
212
+ "draft": { "type": "string", "minLength": 1 },
213
+ "visualIntent": { "type": "string", "minLength": 1 },
214
+ "justification": {
215
+ "type": "object",
216
+ "additionalProperties": false,
217
+ "required": ["kind", "sourceIds", "rationale"],
218
+ "properties": {
219
+ "kind": {
220
+ "enum": [
221
+ "status-change",
222
+ "rollout-complexity",
223
+ "source-backed-detail"
224
+ ]
225
+ },
226
+ "sourceIds": {
227
+ "type": "array",
228
+ "items": {
229
+ "type": "string",
230
+ "pattern": "^[a-z0-9]+(?:[._-][a-z0-9]+)*$"
231
+ },
232
+ "minItems": 1,
233
+ "uniqueItems": true
234
+ },
235
+ "rationale": { "type": "string", "minLength": 1 }
236
+ }
237
+ }
238
+ }
239
+ }
240
+ }
241
+ }
@@ -0,0 +1,215 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "explainer-kit.publish-receipt/v2",
4
+ "title": "PublishReceiptV2",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion",
9
+ "provider",
10
+ "publishedAt",
11
+ "publicAccess",
12
+ "roots",
13
+ "sentinel",
14
+ "artifacts"
15
+ ],
16
+ "properties": {
17
+ "schemaVersion": {
18
+ "const": "explainer-kit.publish-receipt/v2"
19
+ },
20
+ "provider": {
21
+ "const": "s3-static"
22
+ },
23
+ "publishedAt": {
24
+ "type": "string",
25
+ "format": "date-time"
26
+ },
27
+ "publicAccess": {
28
+ "enum": ["public", "protected"]
29
+ },
30
+ "roots": {
31
+ "type": "object",
32
+ "additionalProperties": false,
33
+ "required": ["s3Uri", "publicBaseUrl"],
34
+ "properties": {
35
+ "s3Uri": {
36
+ "type": "string",
37
+ "pattern": "^s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9](?:/[^\\s/?#\\\\]+(?:/[^\\s/?#\\\\]+)*)?$"
38
+ },
39
+ "publicBaseUrl": {
40
+ "type": "string",
41
+ "pattern": "^https://[^\\s/?#@]+(?::[0-9]+)?(?:/[^\\s/?#\\\\]+(?:/[^\\s/?#\\\\]+)*)?$"
42
+ }
43
+ }
44
+ },
45
+ "sentinel": {
46
+ "type": "object",
47
+ "additionalProperties": false,
48
+ "required": [
49
+ "relativePath",
50
+ "objectVerification",
51
+ "publicVerification",
52
+ "deleted"
53
+ ],
54
+ "properties": {
55
+ "relativePath": {
56
+ "$ref": "#/$defs/safeRelativePath"
57
+ },
58
+ "objectVerification": {
59
+ "$ref": "#/$defs/objectVerification"
60
+ },
61
+ "publicVerification": {
62
+ "$ref": "#/$defs/publicVerification"
63
+ },
64
+ "deleted": {
65
+ "type": "boolean"
66
+ }
67
+ }
68
+ },
69
+ "artifacts": {
70
+ "type": "array",
71
+ "items": {
72
+ "$ref": "#/$defs/artifact"
73
+ },
74
+ "uniqueItems": true
75
+ },
76
+ "publicRootPolicy": {
77
+ "description": "Present only when EXPLAINER_KIT_ALLOW_PRIVATE_PUBLIC_ROOT was set and the public root was in fact a non-public address, so a publication made with the anti-SSRF control disabled is distinguishable in durable evidence.",
78
+ "enum": ["private-allowed"]
79
+ }
80
+ },
81
+ "$defs": {
82
+ "hash": {
83
+ "type": "string",
84
+ "pattern": "^sha256:[a-f0-9]{64}$"
85
+ },
86
+ "safeRelativePath": {
87
+ "type": "string",
88
+ "minLength": 1,
89
+ "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+$"
90
+ },
91
+ "source": {
92
+ "oneOf": [
93
+ {
94
+ "type": "object",
95
+ "additionalProperties": false,
96
+ "required": ["kind", "artifactId"],
97
+ "properties": {
98
+ "kind": {
99
+ "const": "manifest"
100
+ },
101
+ "artifactId": {
102
+ "type": "string",
103
+ "minLength": 1
104
+ }
105
+ }
106
+ },
107
+ {
108
+ "type": "object",
109
+ "additionalProperties": false,
110
+ "required": ["kind", "name"],
111
+ "properties": {
112
+ "kind": {
113
+ "const": "auxiliary"
114
+ },
115
+ "name": {
116
+ "type": "string",
117
+ "minLength": 1
118
+ }
119
+ }
120
+ }
121
+ ]
122
+ },
123
+ "objectVerification": {
124
+ "type": "object",
125
+ "additionalProperties": false,
126
+ "required": ["status", "method", "hash"],
127
+ "properties": {
128
+ "status": {
129
+ "const": "verified"
130
+ },
131
+ "method": {
132
+ "enum": ["service-checksum", "authenticated-download"]
133
+ },
134
+ "hash": {
135
+ "$ref": "#/$defs/hash"
136
+ }
137
+ }
138
+ },
139
+ "publicVerification": {
140
+ "oneOf": [
141
+ {
142
+ "type": "object",
143
+ "additionalProperties": false,
144
+ "required": ["status", "httpStatus", "hash"],
145
+ "properties": {
146
+ "status": {
147
+ "const": "verified"
148
+ },
149
+ "httpStatus": {
150
+ "type": "integer",
151
+ "minimum": 200,
152
+ "maximum": 299
153
+ },
154
+ "hash": {
155
+ "$ref": "#/$defs/hash"
156
+ }
157
+ }
158
+ },
159
+ {
160
+ "type": "object",
161
+ "additionalProperties": false,
162
+ "required": ["status"],
163
+ "properties": {
164
+ "status": {
165
+ "const": "skipped-protected"
166
+ }
167
+ }
168
+ }
169
+ ]
170
+ },
171
+ "artifact": {
172
+ "type": "object",
173
+ "additionalProperties": false,
174
+ "required": [
175
+ "source",
176
+ "relativePath",
177
+ "hash",
178
+ "s3Uri",
179
+ "publicUrl",
180
+ "contentType",
181
+ "objectVerification",
182
+ "publicVerification"
183
+ ],
184
+ "properties": {
185
+ "source": {
186
+ "$ref": "#/$defs/source"
187
+ },
188
+ "relativePath": {
189
+ "$ref": "#/$defs/safeRelativePath"
190
+ },
191
+ "hash": {
192
+ "$ref": "#/$defs/hash"
193
+ },
194
+ "s3Uri": {
195
+ "type": "string",
196
+ "pattern": "^s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]/[^\\s?#\\\\]+$"
197
+ },
198
+ "publicUrl": {
199
+ "type": "string",
200
+ "pattern": "^https://[^\\s/?#@]+(?::[0-9]+)?/[^\\s?#\\\\]+$"
201
+ },
202
+ "contentType": {
203
+ "type": "string",
204
+ "minLength": 1
205
+ },
206
+ "objectVerification": {
207
+ "$ref": "#/$defs/objectVerification"
208
+ },
209
+ "publicVerification": {
210
+ "$ref": "#/$defs/publicVerification"
211
+ }
212
+ }
213
+ }
214
+ }
215
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "explainer-kit.publish-request/v2",
4
+ "title": "S3StaticPublishRequestV2",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion",
9
+ "provider",
10
+ "s3Uri",
11
+ "publicBaseUrl",
12
+ "awsRegion",
13
+ "publicAccess",
14
+ "siteRoot",
15
+ "manifestPath"
16
+ ],
17
+ "properties": {
18
+ "schemaVersion": { "const": "explainer-kit.publish-request/v2" },
19
+ "provider": { "const": "s3-static" },
20
+ "s3Uri": {
21
+ "type": "string",
22
+ "pattern": "^s3://[a-z0-9][a-z0-9.-]{1,61}[a-z0-9](?:/[^\\s/?#\\\\]+(?:/[^\\s/?#\\\\]+)*)?/?$"
23
+ },
24
+ "publicBaseUrl": {
25
+ "type": "string",
26
+ "pattern": "^https://[^\\s/?#@]+(?::[0-9]+)?(?:/[^\\s/?#\\\\]+(?:/[^\\s/?#\\\\]+)*)?/?$"
27
+ },
28
+ "awsRegion": { "type": "string", "minLength": 1 },
29
+ "awsProfile": { "type": "string", "minLength": 1 },
30
+ "publicAccess": { "enum": ["public", "protected"] },
31
+ "siteRoot": { "type": "string", "minLength": 1 },
32
+ "manifestPath": { "type": "string", "minLength": 1 }
33
+ }
34
+ }
@@ -46,7 +46,10 @@
46
46
  "enum": ["none", "commit", "publish"]
47
47
  },
48
48
  "publish": {
49
- "$ref": "explainer-kit.publish-request/v1"
49
+ "oneOf": [
50
+ { "$ref": "explainer-kit.publish-request/v1" },
51
+ { "$ref": "explainer-kit.publish-request/v2" }
52
+ ]
50
53
  }
51
54
  }
52
55
  },
@@ -0,0 +1,81 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "explainer-kit.terminal-evidence/v1",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": [
7
+ "schemaVersion",
8
+ "runId",
9
+ "outcome",
10
+ "reasons",
11
+ "evidenceDisposition"
12
+ ],
13
+ "properties": {
14
+ "schemaVersion": {
15
+ "const": "explainer-kit.terminal-evidence/v1"
16
+ },
17
+ "runId": { "type": "string", "minLength": 1, "maxLength": 2000 },
18
+ "outcome": {
19
+ "enum": ["built-needs-review", "failed"]
20
+ },
21
+ "manifestHash": { "$ref": "#/$defs/hash" },
22
+ "reasons": {
23
+ "type": "array",
24
+ "minItems": 1,
25
+ "maxItems": 50,
26
+ "items": { "$ref": "#/$defs/reason" }
27
+ },
28
+ "evidenceDisposition": {
29
+ "enum": ["retained", "partial", "unavailable", "superseded"]
30
+ },
31
+ "supersededBy": { "$ref": "#/$defs/supersededBy" }
32
+ },
33
+ "$defs": {
34
+ "hash": {
35
+ "type": "string",
36
+ "pattern": "^sha256:[a-f0-9]{64}$"
37
+ },
38
+ "reason": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "required": ["stage", "kind", "count"],
42
+ "properties": {
43
+ "stage": {
44
+ "enum": [
45
+ "planning",
46
+ "authoring",
47
+ "rendering",
48
+ "link-validation",
49
+ "browser-review",
50
+ "visual-review",
51
+ "durability",
52
+ "finalization"
53
+ ]
54
+ },
55
+ "kind": {
56
+ "enum": [
57
+ "finding",
58
+ "provider-failure",
59
+ "pipeline-failure",
60
+ "superseded"
61
+ ]
62
+ },
63
+ "artifactId": {
64
+ "type": "string",
65
+ "minLength": 1,
66
+ "maxLength": 2000
67
+ },
68
+ "count": { "type": "integer", "minimum": 1, "maximum": 50 }
69
+ }
70
+ },
71
+ "supersededBy": {
72
+ "type": "object",
73
+ "additionalProperties": false,
74
+ "required": ["runId", "manifestHash"],
75
+ "properties": {
76
+ "runId": { "type": "string", "minLength": 1, "maxLength": 2000 },
77
+ "manifestHash": { "$ref": "#/$defs/hash" }
78
+ }
79
+ }
80
+ }
81
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "explainer-kit.visual-review-evidence/v1",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": [
7
+ "schemaVersion",
8
+ "requestHash",
9
+ "attempt",
10
+ "disposition",
11
+ "reasons"
12
+ ],
13
+ "properties": {
14
+ "schemaVersion": {
15
+ "const": "explainer-kit.visual-review-evidence/v1"
16
+ },
17
+ "requestHash": { "$ref": "#/$defs/hash" },
18
+ "attempt": { "enum": [1, 2] },
19
+ "disposition": { "enum": ["pass", "correct", "failed"] },
20
+ "reasons": {
21
+ "type": "array",
22
+ "minItems": 0,
23
+ "maxItems": 50,
24
+ "items": { "$ref": "#/$defs/reason" }
25
+ }
26
+ },
27
+ "$defs": {
28
+ "hash": {
29
+ "type": "string",
30
+ "pattern": "^sha256:[a-f0-9]{64}$"
31
+ },
32
+ "reason": {
33
+ "type": "object",
34
+ "additionalProperties": false,
35
+ "required": ["stage", "kind", "count"],
36
+ "properties": {
37
+ "stage": {
38
+ "enum": [
39
+ "planning",
40
+ "authoring",
41
+ "rendering",
42
+ "link-validation",
43
+ "browser-review",
44
+ "visual-review",
45
+ "durability",
46
+ "finalization"
47
+ ]
48
+ },
49
+ "kind": {
50
+ "enum": [
51
+ "finding",
52
+ "provider-failure",
53
+ "pipeline-failure",
54
+ "superseded"
55
+ ]
56
+ },
57
+ "artifactId": {
58
+ "type": "string",
59
+ "minLength": 1,
60
+ "maxLength": 2000
61
+ },
62
+ "count": { "type": "integer", "minimum": 1, "maximum": 50 }
63
+ }
64
+ }
65
+ }
66
+ }