@graphrefly/stack 0.1.1 → 0.1.4

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 (55) hide show
  1. package/README.md +24 -11
  2. package/dist/assets/contracts/ci/v1/artifacts.schema.json +253 -0
  3. package/dist/assets/contracts/ci/v1/golden-suite.schema.json +17 -0
  4. package/dist/assets/contracts/repository/v1/review-bundle.schema.json +49 -0
  5. package/dist/assets/contracts/repository/v1/review-decision-request.schema.json +15 -0
  6. package/dist/assets/contracts/repository/v1/review-decision.schema.json +52 -0
  7. package/dist/assets/contracts/repository/v1/review.schema.json +46 -2
  8. package/dist/assets/contracts/semantic/v1/artifacts.schema.json +697 -0
  9. package/dist/assets/contracts/semantic/v1/golden-suite.schema.json +119 -0
  10. package/dist/assets/contracts/v1/schemas/cli-result.schema.json +11 -1
  11. package/dist/assets/fixtures/contracts/ci/v1/golden-digests.json +5 -0
  12. package/dist/assets/fixtures/contracts/ci/v1/golden-suite.json +104 -0
  13. package/dist/assets/fixtures/contracts/semantic/v1/golden-digests.json +17 -0
  14. package/dist/assets/fixtures/contracts/semantic/v1/golden-suite.json +715 -0
  15. package/dist/grfs.js +3745 -1395
  16. package/dist/review/assets/{abnfDiagram-VRR7QNED-5JVeQ-ZW.js → abnfDiagram-VRR7QNED-BjBHcddA.js} +1 -1
  17. package/dist/review/assets/{architectureDiagram-ZJ3FMSHR-BnEvDO7X.js → architectureDiagram-ZJ3FMSHR-D2YEagFX.js} +1 -1
  18. package/dist/review/assets/{chunk-EX3LRPZG-BrpCa9zr.js → chunk-EX3LRPZG-Cqlq9N1k.js} +1 -1
  19. package/dist/review/assets/{chunk-MOJQB5TN-BshP08Ez.js → chunk-MOJQB5TN-CrJU23I4.js} +1 -1
  20. package/dist/review/assets/{chunk-PUDLZKDR-HkwEqIVB.js → chunk-PUDLZKDR-D2gPOWiF.js} +1 -1
  21. package/dist/review/assets/{chunk-V7JOEXUC-CswDacm3.js → chunk-V7JOEXUC-zqKE0D3Z.js} +1 -1
  22. package/dist/review/assets/{classDiagram-OUVF2IWQ-U8e_ZvC4.js → classDiagram-OUVF2IWQ-CRJJUaPV.js} +1 -1
  23. package/dist/review/assets/{classDiagram-v2-EOCWNBFH-U8e_ZvC4.js → classDiagram-v2-EOCWNBFH-CRJJUaPV.js} +1 -1
  24. package/dist/review/assets/{cynefinDiagram-TSTJHNR4-CfYu2mB5.js → cynefinDiagram-TSTJHNR4-BkymIc14.js} +1 -1
  25. package/dist/review/assets/{dagre-VKFMJZFB-BvyihZfA.js → dagre-VKFMJZFB-e2nCgJcZ.js} +1 -1
  26. package/dist/review/assets/{diagram-G47NLZAW-qFNMv5An.js → diagram-G47NLZAW-QL9zGpjT.js} +1 -1
  27. package/dist/review/assets/{diagram-NH7WQ7WH-CsvacND9.js → diagram-NH7WQ7WH-DvCskT8T.js} +1 -1
  28. package/dist/review/assets/{diagram-OA4YK3LP-qFtWcyNi.js → diagram-OA4YK3LP-Cx9kjg5t.js} +1 -1
  29. package/dist/review/assets/{diagram-WEI45ONY-C5nYGL8t.js → diagram-WEI45ONY-CfwqC_md.js} +1 -1
  30. package/dist/review/assets/{ebnfDiagram-CCIWWBDH-D_0nhpry.js → ebnfDiagram-CCIWWBDH-G63kkvbq.js} +1 -1
  31. package/dist/review/assets/{erDiagram-Q63AITRT-CIS7hpdK.js → erDiagram-Q63AITRT-D3GzhK6w.js} +1 -1
  32. package/dist/review/assets/{flowDiagram-23GEKE2U-Df5sjnlg.js → flowDiagram-23GEKE2U-DqVi9C2r.js} +1 -1
  33. package/dist/review/assets/index-BGz0YQEi.css +1 -0
  34. package/dist/review/assets/index-D_ZKYhz7.js +64 -0
  35. package/dist/review/assets/{infoDiagram-FWYZ7A6U-CT7TZgi6.js → infoDiagram-FWYZ7A6U-WJv0WBae.js} +1 -1
  36. package/dist/review/assets/{ishikawaDiagram-FXEZZL3T-BUpotH7r.js → ishikawaDiagram-FXEZZL3T-BnZ5zRCL.js} +1 -1
  37. package/dist/review/assets/{kanban-definition-HUTT4EX6-e-emfNuh.js → kanban-definition-HUTT4EX6-BDdmEROe.js} +1 -1
  38. package/dist/review/assets/{mindmap-definition-LN4V7U3C-ClSEPrvR.js → mindmap-definition-LN4V7U3C-BH2EZxB3.js} +1 -1
  39. package/dist/review/assets/{pegDiagram-2B236MQR-Ck_v89jl.js → pegDiagram-2B236MQR-apJfnuaF.js} +1 -1
  40. package/dist/review/assets/{pieDiagram-ENE6RG2P-C63dxyZj.js → pieDiagram-ENE6RG2P-DBZNNsNI.js} +1 -1
  41. package/dist/review/assets/{railroadDiagram-RFXS5EU6-DYI7CPMt.js → railroadDiagram-RFXS5EU6-Csr5eB8z.js} +1 -1
  42. package/dist/review/assets/{requirementDiagram-TGXJPOKE-BMW46SXM.js → requirementDiagram-TGXJPOKE-DOGov392.js} +1 -1
  43. package/dist/review/assets/{sequenceDiagram-DBY2YBRQ-DVtyVuxr.js → sequenceDiagram-DBY2YBRQ-CGLEdxIQ.js} +1 -1
  44. package/dist/review/assets/{stateDiagram-2N3HPSRC-BM1s-zUo.js → stateDiagram-2N3HPSRC-DGc_GIR7.js} +1 -1
  45. package/dist/review/assets/{stateDiagram-v2-6OUMAXLB-BEfolAkc.js → stateDiagram-v2-6OUMAXLB-CB--qhqy.js} +1 -1
  46. package/dist/review/assets/{swimlanes-5IMT3BWC-Bnu9mzxz.js → swimlanes-5IMT3BWC-DWuBlI_u.js} +1 -1
  47. package/dist/review/assets/{swimlanesDiagram-G3AALYLV-DlNNBK53.js → swimlanesDiagram-G3AALYLV-dXt3qLQg.js} +1 -1
  48. package/dist/review/assets/{timeline-definition-FHXFAJF6-CwlO71Lp.js → timeline-definition-FHXFAJF6-Da2ReugN.js} +1 -1
  49. package/dist/review/assets/{vennDiagram-L72KCM5P-DZxbcc_O.js → vennDiagram-L72KCM5P-CnhNeNSC.js} +1 -1
  50. package/dist/review/assets/{wardleyDiagram-EHGQE667-DGQto3hn.js → wardleyDiagram-EHGQE667-CixYg3yw.js} +1 -1
  51. package/dist/review/assets/{xychartDiagram-FW5EYKEG-BfD1lSXX.js → xychartDiagram-FW5EYKEG-BwY7805o.js} +1 -1
  52. package/dist/review/index.html +2 -2
  53. package/package.json +2 -2
  54. package/dist/review/assets/index-Bt3i8n39.css +0 -1
  55. package/dist/review/assets/index-CqjR4YYp.js +0 -64
@@ -0,0 +1,697 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "urn:graphrefly-stack:schema:semantic-artifacts:v1",
4
+ "title": "GraphReFly Stack repository semantic lifecycle artifacts v1",
5
+ "definitions": {
6
+ "Hash": {
7
+ "type": "object",
8
+ "additionalProperties": false,
9
+ "required": ["algorithm", "value"],
10
+ "properties": {
11
+ "algorithm": { "const": "sha256" },
12
+ "value": { "type": "string", "pattern": "^[0-9a-f]{64}$" }
13
+ }
14
+ },
15
+ "GitOid": {
16
+ "type": "object",
17
+ "additionalProperties": false,
18
+ "required": ["algorithm", "value"],
19
+ "properties": {
20
+ "algorithm": { "enum": ["sha1", "sha256"] },
21
+ "value": { "type": "string", "pattern": "^(?:[0-9a-f]{40}|[0-9a-f]{64})$" }
22
+ }
23
+ },
24
+ "RepoPath": {
25
+ "type": "string",
26
+ "minLength": 1,
27
+ "maxLength": 512,
28
+ "pattern": "^(?!/)(?!\\.?\\.?$)(?!\\./)(?!.*//)(?!.*(?:^|/)\\.\\.?(?:/|$))(?!.*\\\\)(?!.*\\/$).+$"
29
+ },
30
+ "Identifier": {
31
+ "type": "string",
32
+ "minLength": 1,
33
+ "maxLength": 64,
34
+ "pattern": "^[A-Za-z][A-Za-z0-9._-]*$"
35
+ },
36
+ "WorkUnitId": {
37
+ "type": "string",
38
+ "minLength": 1,
39
+ "maxLength": 64,
40
+ "pattern": "^[A-Z][A-Z0-9_-]*$"
41
+ },
42
+ "BlueprintNodeId": {
43
+ "type": "string",
44
+ "minLength": 1,
45
+ "maxLength": 256,
46
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]*$"
47
+ },
48
+ "BlueprintSelector": {
49
+ "oneOf": [
50
+ {
51
+ "type": "object",
52
+ "additionalProperties": false,
53
+ "required": ["kind", "nodeId"],
54
+ "properties": {
55
+ "kind": { "const": "node" },
56
+ "nodeId": { "$ref": "#/definitions/BlueprintNodeId" }
57
+ }
58
+ },
59
+ {
60
+ "type": "object",
61
+ "additionalProperties": false,
62
+ "required": ["kind", "fromNodeId", "toNodeId"],
63
+ "properties": {
64
+ "kind": { "const": "edge" },
65
+ "fromNodeId": { "$ref": "#/definitions/BlueprintNodeId" },
66
+ "toNodeId": { "$ref": "#/definitions/BlueprintNodeId" }
67
+ }
68
+ },
69
+ {
70
+ "type": "object",
71
+ "additionalProperties": false,
72
+ "required": ["kind", "mountPath"],
73
+ "properties": {
74
+ "kind": { "const": "subgraph" },
75
+ "mountPath": {
76
+ "type": "array",
77
+ "items": { "$ref": "#/definitions/Identifier" },
78
+ "minItems": 1
79
+ }
80
+ }
81
+ }
82
+ ]
83
+ },
84
+ "BlueprintPredicate": {
85
+ "oneOf": [
86
+ {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "required": ["operator", "selector"],
90
+ "properties": {
91
+ "operator": { "enum": ["present", "absent"] },
92
+ "selector": { "$ref": "#/definitions/BlueprintSelector" }
93
+ }
94
+ },
95
+ {
96
+ "type": "object",
97
+ "additionalProperties": false,
98
+ "required": ["operator", "selector", "key", "value"],
99
+ "properties": {
100
+ "operator": { "const": "metadata-equals" },
101
+ "selector": { "$ref": "#/definitions/BlueprintSelector" },
102
+ "key": { "$ref": "#/definitions/Identifier" },
103
+ "value": { "type": ["string", "number", "boolean", "null"] }
104
+ }
105
+ },
106
+ {
107
+ "type": "object",
108
+ "additionalProperties": false,
109
+ "required": ["operator", "fromNodeId", "toNodeId"],
110
+ "properties": {
111
+ "operator": { "const": "depends-on" },
112
+ "fromNodeId": { "$ref": "#/definitions/BlueprintNodeId" },
113
+ "toNodeId": { "$ref": "#/definitions/BlueprintNodeId" }
114
+ }
115
+ }
116
+ ]
117
+ },
118
+ "ClaimDraft": {
119
+ "type": "object",
120
+ "additionalProperties": false,
121
+ "required": ["id", "predicate", "rationale"],
122
+ "properties": {
123
+ "id": { "$ref": "#/definitions/Identifier" },
124
+ "predicate": { "$ref": "#/definitions/BlueprintPredicate" },
125
+ "rationale": { "type": "string", "minLength": 1, "maxLength": 1024 }
126
+ }
127
+ },
128
+ "PolicyCheck": {
129
+ "type": "object",
130
+ "additionalProperties": false,
131
+ "required": ["id", "argv", "timeoutMs", "network", "shell"],
132
+ "properties": {
133
+ "id": { "$ref": "#/definitions/Identifier" },
134
+ "argv": {
135
+ "type": "array",
136
+ "items": { "type": "string", "minLength": 1, "maxLength": 512 },
137
+ "minItems": 1,
138
+ "maxItems": 32
139
+ },
140
+ "timeoutMs": { "type": "integer", "minimum": 100, "maximum": 900000 },
141
+ "network": { "const": false },
142
+ "shell": { "const": false }
143
+ }
144
+ },
145
+ "RepositoryPolicy": {
146
+ "type": "object",
147
+ "additionalProperties": false,
148
+ "required": [
149
+ "schema",
150
+ "policyId",
151
+ "revision",
152
+ "allowedSourceRoots",
153
+ "allowedCapabilities",
154
+ "checks"
155
+ ],
156
+ "properties": {
157
+ "schema": { "const": "graphrefly.stack.semantic-policy.v1" },
158
+ "policyId": { "$ref": "#/definitions/Identifier" },
159
+ "revision": { "$ref": "#/definitions/Identifier" },
160
+ "allowedSourceRoots": {
161
+ "type": "array",
162
+ "items": { "$ref": "#/definitions/RepoPath" },
163
+ "minItems": 1,
164
+ "uniqueItems": true
165
+ },
166
+ "allowedCapabilities": {
167
+ "type": "array",
168
+ "items": { "$ref": "#/definitions/Identifier" },
169
+ "uniqueItems": true
170
+ },
171
+ "checks": {
172
+ "type": "array",
173
+ "items": { "$ref": "#/definitions/PolicyCheck" },
174
+ "minItems": 1
175
+ }
176
+ }
177
+ },
178
+ "SemanticWorkUnit": {
179
+ "type": "object",
180
+ "additionalProperties": false,
181
+ "required": [
182
+ "id",
183
+ "title",
184
+ "intent",
185
+ "dependencies",
186
+ "allowedSourceScopes",
187
+ "capabilities",
188
+ "claims",
189
+ "requiredChecks"
190
+ ],
191
+ "properties": {
192
+ "id": { "$ref": "#/definitions/WorkUnitId" },
193
+ "title": { "type": "string", "minLength": 1, "maxLength": 256 },
194
+ "intent": { "type": "string", "minLength": 1, "maxLength": 2048 },
195
+ "dependencies": {
196
+ "type": "array",
197
+ "items": { "$ref": "#/definitions/WorkUnitId" },
198
+ "uniqueItems": true
199
+ },
200
+ "allowedSourceScopes": {
201
+ "type": "array",
202
+ "items": { "$ref": "#/definitions/RepoPath" },
203
+ "minItems": 1,
204
+ "uniqueItems": true
205
+ },
206
+ "capabilities": {
207
+ "type": "array",
208
+ "items": { "$ref": "#/definitions/Identifier" },
209
+ "uniqueItems": true
210
+ },
211
+ "claims": {
212
+ "type": "array",
213
+ "items": { "$ref": "#/definitions/ClaimDraft" },
214
+ "minItems": 1
215
+ },
216
+ "requiredChecks": {
217
+ "type": "array",
218
+ "items": { "$ref": "#/definitions/Identifier" },
219
+ "minItems": 1,
220
+ "uniqueItems": true
221
+ }
222
+ }
223
+ },
224
+ "SemanticPlanProposal": {
225
+ "type": "object",
226
+ "additionalProperties": false,
227
+ "required": ["schema", "planId", "proposalSource", "workUnits"],
228
+ "properties": {
229
+ "schema": { "const": "graphrefly.stack.semantic-plan-proposal.v1" },
230
+ "planId": { "$ref": "#/definitions/Identifier" },
231
+ "proposalSource": { "enum": ["codex", "human"] },
232
+ "workUnits": {
233
+ "type": "array",
234
+ "items": { "$ref": "#/definitions/SemanticWorkUnit" },
235
+ "minItems": 1
236
+ }
237
+ }
238
+ },
239
+ "AcceptedChangePlan": {
240
+ "type": "object",
241
+ "additionalProperties": false,
242
+ "required": [
243
+ "schema",
244
+ "planId",
245
+ "taskDigest",
246
+ "taskSummary",
247
+ "baseCommit",
248
+ "baseBlueprintHash",
249
+ "policy",
250
+ "proposalSource",
251
+ "acceptedBy",
252
+ "workUnits"
253
+ ],
254
+ "properties": {
255
+ "schema": { "const": "graphrefly.stack.semantic-plan.v1" },
256
+ "planId": { "$ref": "#/definitions/Identifier" },
257
+ "taskDigest": { "$ref": "#/definitions/Hash" },
258
+ "taskSummary": { "type": "string", "minLength": 1, "maxLength": 2048 },
259
+ "baseCommit": { "$ref": "#/definitions/GitOid" },
260
+ "baseBlueprintHash": { "$ref": "#/definitions/Hash" },
261
+ "policy": {
262
+ "type": "object",
263
+ "additionalProperties": false,
264
+ "required": ["policyId", "revision", "digest"],
265
+ "properties": {
266
+ "policyId": { "$ref": "#/definitions/Identifier" },
267
+ "revision": { "$ref": "#/definitions/Identifier" },
268
+ "digest": { "$ref": "#/definitions/Hash" }
269
+ }
270
+ },
271
+ "proposalSource": { "enum": ["fixture", "codex", "human"] },
272
+ "acceptedBy": {
273
+ "type": "object",
274
+ "additionalProperties": false,
275
+ "required": ["label", "identityVerified"],
276
+ "properties": {
277
+ "label": { "type": "string", "minLength": 1, "maxLength": 128 },
278
+ "identityVerified": { "const": false }
279
+ }
280
+ },
281
+ "workUnits": {
282
+ "type": "array",
283
+ "items": { "$ref": "#/definitions/SemanticWorkUnit" },
284
+ "minItems": 1
285
+ }
286
+ }
287
+ },
288
+ "CommitWorkUnitBinding": {
289
+ "type": "object",
290
+ "additionalProperties": false,
291
+ "required": [
292
+ "schema",
293
+ "planId",
294
+ "workUnitId",
295
+ "commit",
296
+ "parentCommit",
297
+ "trailer",
298
+ "stablePatchId",
299
+ "diffDigest",
300
+ "changedPaths"
301
+ ],
302
+ "properties": {
303
+ "schema": { "const": "graphrefly.stack.semantic-binding.v1" },
304
+ "planId": { "$ref": "#/definitions/Identifier" },
305
+ "workUnitId": { "$ref": "#/definitions/WorkUnitId" },
306
+ "commit": { "$ref": "#/definitions/GitOid" },
307
+ "parentCommit": { "$ref": "#/definitions/GitOid" },
308
+ "trailer": {
309
+ "type": "object",
310
+ "additionalProperties": false,
311
+ "required": ["name", "value", "occurrences"],
312
+ "properties": {
313
+ "name": { "const": "GraphReFly-Work-Unit" },
314
+ "value": { "$ref": "#/definitions/WorkUnitId" },
315
+ "occurrences": { "const": 1 }
316
+ }
317
+ },
318
+ "stablePatchId": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
319
+ "diffDigest": { "$ref": "#/definitions/Hash" },
320
+ "changedPaths": {
321
+ "type": "array",
322
+ "items": { "$ref": "#/definitions/RepoPath" },
323
+ "minItems": 1,
324
+ "uniqueItems": true
325
+ }
326
+ }
327
+ },
328
+ "ModelContextManifest": {
329
+ "type": "object",
330
+ "additionalProperties": false,
331
+ "required": [
332
+ "schema",
333
+ "purpose",
334
+ "taskDigest",
335
+ "policyDigest",
336
+ "policyFields",
337
+ "blueprintFields",
338
+ "sourcePaths",
339
+ "omittedClasses",
340
+ "authorization"
341
+ ],
342
+ "properties": {
343
+ "schema": { "const": "graphrefly.stack.semantic-model-context.v1" },
344
+ "purpose": { "enum": ["plan", "selective-replan"] },
345
+ "taskDigest": { "$ref": "#/definitions/Hash" },
346
+ "policyDigest": { "$ref": "#/definitions/Hash" },
347
+ "policyFields": {
348
+ "type": "array",
349
+ "items": {
350
+ "enum": [
351
+ "policyId",
352
+ "revision",
353
+ "allowedSourceRoots",
354
+ "allowedCapabilities",
355
+ "checkIds"
356
+ ]
357
+ },
358
+ "uniqueItems": true
359
+ },
360
+ "blueprintFields": {
361
+ "type": "array",
362
+ "items": {
363
+ "enum": [
364
+ "version",
365
+ "topology.nodes",
366
+ "topology.edges",
367
+ "topology.subgraphs",
368
+ "topology.metadata",
369
+ "hash"
370
+ ]
371
+ },
372
+ "uniqueItems": true
373
+ },
374
+ "sourcePaths": {
375
+ "type": "array",
376
+ "items": { "$ref": "#/definitions/RepoPath" },
377
+ "uniqueItems": true
378
+ },
379
+ "omittedClasses": {
380
+ "type": "array",
381
+ "items": {
382
+ "enum": [
383
+ "credentials",
384
+ "environment",
385
+ "unlisted-source",
386
+ "execution-details",
387
+ "raw-provider-output"
388
+ ]
389
+ },
390
+ "minItems": 5,
391
+ "maxItems": 5,
392
+ "uniqueItems": true
393
+ },
394
+ "authorization": {
395
+ "type": "object",
396
+ "additionalProperties": false,
397
+ "required": ["mode", "identityVerified"],
398
+ "properties": {
399
+ "mode": { "const": "explicit-cli" },
400
+ "identityVerified": { "const": false }
401
+ }
402
+ }
403
+ }
404
+ },
405
+ "CheckResult": {
406
+ "type": "object",
407
+ "additionalProperties": false,
408
+ "required": [
409
+ "schema",
410
+ "checkId",
411
+ "commandDigest",
412
+ "exitCode",
413
+ "stdoutDigest",
414
+ "stderrDigest"
415
+ ],
416
+ "properties": {
417
+ "schema": { "const": "graphrefly.stack.semantic-check-result.v1" },
418
+ "checkId": { "$ref": "#/definitions/Identifier" },
419
+ "commandDigest": { "$ref": "#/definitions/Hash" },
420
+ "exitCode": { "type": "integer", "minimum": 0, "maximum": 255 },
421
+ "stdoutDigest": { "$ref": "#/definitions/Hash" },
422
+ "stderrDigest": { "$ref": "#/definitions/Hash" }
423
+ }
424
+ },
425
+ "SemanticChangeRecord": {
426
+ "type": "object",
427
+ "additionalProperties": false,
428
+ "required": [
429
+ "schema",
430
+ "recordId",
431
+ "planId",
432
+ "workUnitId",
433
+ "bindingDigest",
434
+ "semanticParentRecordId",
435
+ "policyDigest",
436
+ "blueprintHash",
437
+ "sourceScopeDigest",
438
+ "claimWitnesses",
439
+ "requiredChecks",
440
+ "rebindFrom"
441
+ ],
442
+ "properties": {
443
+ "schema": { "const": "graphrefly.stack.semantic-record.v1" },
444
+ "recordId": { "$ref": "#/definitions/Identifier" },
445
+ "planId": { "$ref": "#/definitions/Identifier" },
446
+ "workUnitId": { "$ref": "#/definitions/WorkUnitId" },
447
+ "bindingDigest": { "$ref": "#/definitions/Hash" },
448
+ "semanticParentRecordId": { "type": ["string", "null"], "maxLength": 64 },
449
+ "policyDigest": { "$ref": "#/definitions/Hash" },
450
+ "blueprintHash": { "$ref": "#/definitions/Hash" },
451
+ "sourceScopeDigest": { "$ref": "#/definitions/Hash" },
452
+ "claimWitnesses": {
453
+ "type": "array",
454
+ "items": {
455
+ "type": "object",
456
+ "additionalProperties": false,
457
+ "required": ["claimId", "predicateDigest", "status"],
458
+ "properties": {
459
+ "claimId": { "$ref": "#/definitions/Identifier" },
460
+ "predicateDigest": { "$ref": "#/definitions/Hash" },
461
+ "status": { "const": "satisfied" }
462
+ }
463
+ },
464
+ "minItems": 1
465
+ },
466
+ "requiredChecks": {
467
+ "type": "array",
468
+ "items": { "$ref": "#/definitions/Identifier" },
469
+ "minItems": 1,
470
+ "uniqueItems": true
471
+ },
472
+ "rebindFrom": { "type": ["string", "null"], "maxLength": 64 }
473
+ }
474
+ },
475
+ "ReasonCode": {
476
+ "enum": [
477
+ "SCHEMA_INVALID",
478
+ "PLAN_NOT_ACCEPTED",
479
+ "POLICY_MISMATCH",
480
+ "WORK_UNIT_TRAILER_MISSING",
481
+ "WORK_UNIT_TRAILER_DUPLICATE",
482
+ "WORK_UNIT_UNKNOWN",
483
+ "COMMIT_BINDING_MISMATCH",
484
+ "PATCH_ID_AMBIGUOUS",
485
+ "SOURCE_SCOPE_VIOLATION",
486
+ "SEMANTIC_PARENT_STALE",
487
+ "DEPENDENCY_INVALID",
488
+ "PREDICATE_SELECTOR_AMBIGUOUS",
489
+ "PREDICATE_UNSUPPORTED",
490
+ "BLUEPRINT_PREDICATE_UNSATISFIED",
491
+ "BLUEPRINT_WITNESS_STALE",
492
+ "POLICY_REVISION_STALE",
493
+ "REQUIRED_CHECK_UNDECLARED",
494
+ "REQUIRED_CHECK_MISSING",
495
+ "REQUIRED_CHECK_FAILED",
496
+ "MODEL_CONTEXT_UNAUTHORIZED",
497
+ "ARTIFACT_HASH_MISMATCH"
498
+ ]
499
+ },
500
+ "GateUnitResult": {
501
+ "type": "object",
502
+ "additionalProperties": false,
503
+ "required": ["workUnitId", "verdict", "reasonCodes", "invalidDependencies", "recordId"],
504
+ "properties": {
505
+ "workUnitId": { "$ref": "#/definitions/WorkUnitId" },
506
+ "verdict": { "enum": ["valid", "invalid"] },
507
+ "reasonCodes": {
508
+ "type": "array",
509
+ "items": { "$ref": "#/definitions/ReasonCode" },
510
+ "uniqueItems": true
511
+ },
512
+ "invalidDependencies": {
513
+ "type": "array",
514
+ "items": { "$ref": "#/definitions/WorkUnitId" },
515
+ "uniqueItems": true
516
+ },
517
+ "recordId": { "type": ["string", "null"], "maxLength": 64 }
518
+ }
519
+ },
520
+ "GateInput": {
521
+ "type": "object",
522
+ "additionalProperties": false,
523
+ "required": [
524
+ "schema",
525
+ "policy",
526
+ "plan",
527
+ "bindings",
528
+ "records",
529
+ "currentBlueprintHash",
530
+ "checks"
531
+ ],
532
+ "properties": {
533
+ "schema": { "const": "graphrefly.stack.semantic-gate-input.v1" },
534
+ "policy": { "$ref": "#/definitions/RepositoryPolicy" },
535
+ "plan": { "$ref": "#/definitions/AcceptedChangePlan" },
536
+ "bindings": {
537
+ "type": "array",
538
+ "items": { "$ref": "#/definitions/CommitWorkUnitBinding" },
539
+ "minItems": 1
540
+ },
541
+ "records": { "type": "array", "items": { "$ref": "#/definitions/SemanticChangeRecord" } },
542
+ "currentBlueprintHash": { "$ref": "#/definitions/Hash" },
543
+ "checks": { "type": "array", "items": { "$ref": "#/definitions/CheckResult" } }
544
+ }
545
+ },
546
+ "GateResult": {
547
+ "type": "object",
548
+ "additionalProperties": false,
549
+ "required": ["schema", "gateVersion", "inputDigest", "verdict", "units", "checkIds"],
550
+ "properties": {
551
+ "schema": { "const": "graphrefly.stack.semantic-gate-result.v1" },
552
+ "gateVersion": { "const": "v1" },
553
+ "inputDigest": { "$ref": "#/definitions/Hash" },
554
+ "verdict": { "enum": ["pass", "blocked", "error"] },
555
+ "units": {
556
+ "type": "array",
557
+ "items": { "$ref": "#/definitions/GateUnitResult" },
558
+ "minItems": 1
559
+ },
560
+ "checkIds": {
561
+ "type": "array",
562
+ "items": { "$ref": "#/definitions/Identifier" },
563
+ "uniqueItems": true
564
+ }
565
+ }
566
+ },
567
+ "SemanticExportManifest": {
568
+ "type": "object",
569
+ "additionalProperties": false,
570
+ "required": ["schema", "planId", "head", "inputDigest", "redaction", "artifacts"],
571
+ "properties": {
572
+ "schema": { "const": "graphrefly.stack.semantic-export-manifest.v1" },
573
+ "planId": { "$ref": "#/definitions/Identifier" },
574
+ "head": { "$ref": "#/definitions/GitOid" },
575
+ "inputDigest": { "$ref": "#/definitions/Hash" },
576
+ "redaction": {
577
+ "type": "object",
578
+ "additionalProperties": false,
579
+ "required": ["excludes"],
580
+ "properties": {
581
+ "excludes": {
582
+ "type": "array",
583
+ "items": {
584
+ "enum": [
585
+ "source-content",
586
+ "raw-blueprint",
587
+ "check-output",
588
+ "credentials",
589
+ "environment",
590
+ "model-response"
591
+ ]
592
+ },
593
+ "minItems": 6,
594
+ "maxItems": 6,
595
+ "uniqueItems": true
596
+ }
597
+ }
598
+ },
599
+ "artifacts": {
600
+ "type": "array",
601
+ "minItems": 7,
602
+ "maxItems": 7,
603
+ "items": {
604
+ "type": "object",
605
+ "additionalProperties": false,
606
+ "required": ["path", "hash"],
607
+ "properties": {
608
+ "path": {
609
+ "enum": [
610
+ "policy.json",
611
+ "plan.json",
612
+ "bindings.json",
613
+ "records.json",
614
+ "checks.json",
615
+ "gate-input.json",
616
+ "gate-result.json"
617
+ ]
618
+ },
619
+ "hash": { "$ref": "#/definitions/Hash" }
620
+ }
621
+ }
622
+ }
623
+ }
624
+ },
625
+ "SemanticPortableBundle": {
626
+ "type": "object",
627
+ "additionalProperties": false,
628
+ "required": ["schema", "manifest", "artifacts"],
629
+ "properties": {
630
+ "schema": { "const": "graphrefly.stack.semantic-portable-bundle.v1" },
631
+ "manifest": { "$ref": "#/definitions/SemanticExportManifest" },
632
+ "artifacts": {
633
+ "type": "object",
634
+ "additionalProperties": false,
635
+ "required": [
636
+ "policy.json",
637
+ "plan.json",
638
+ "bindings.json",
639
+ "records.json",
640
+ "checks.json",
641
+ "gate-input.json",
642
+ "gate-result.json"
643
+ ],
644
+ "properties": {
645
+ "policy.json": { "$ref": "#/definitions/RepositoryPolicy" },
646
+ "plan.json": { "$ref": "#/definitions/AcceptedChangePlan" },
647
+ "bindings.json": {
648
+ "type": "array",
649
+ "items": { "$ref": "#/definitions/CommitWorkUnitBinding" }
650
+ },
651
+ "records.json": {
652
+ "type": "array",
653
+ "items": { "$ref": "#/definitions/SemanticChangeRecord" }
654
+ },
655
+ "checks.json": {
656
+ "type": "array",
657
+ "items": { "$ref": "#/definitions/CheckResult" }
658
+ },
659
+ "gate-input.json": { "$ref": "#/definitions/GateInput" },
660
+ "gate-result.json": { "$ref": "#/definitions/GateResult" }
661
+ }
662
+ }
663
+ }
664
+ },
665
+ "SelectiveReplan": {
666
+ "type": "object",
667
+ "additionalProperties": false,
668
+ "required": [
669
+ "schema",
670
+ "sourcePlanId",
671
+ "replacementPlanId",
672
+ "preservedUnits",
673
+ "invalidUnits",
674
+ "contextManifestDigest",
675
+ "proposalSource"
676
+ ],
677
+ "properties": {
678
+ "schema": { "const": "graphrefly.stack.semantic-selective-replan.v1" },
679
+ "sourcePlanId": { "$ref": "#/definitions/Identifier" },
680
+ "replacementPlanId": { "$ref": "#/definitions/Identifier" },
681
+ "preservedUnits": {
682
+ "type": "array",
683
+ "items": { "$ref": "#/definitions/WorkUnitId" },
684
+ "uniqueItems": true
685
+ },
686
+ "invalidUnits": {
687
+ "type": "array",
688
+ "items": { "$ref": "#/definitions/WorkUnitId" },
689
+ "minItems": 1,
690
+ "uniqueItems": true
691
+ },
692
+ "contextManifestDigest": { "$ref": "#/definitions/Hash" },
693
+ "proposalSource": { "enum": ["fixture", "codex", "human"] }
694
+ }
695
+ }
696
+ }
697
+ }