@graphrefly/stack 0.1.2 → 0.1.5

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 (50) hide show
  1. package/dist/assets/contracts/ci/v1/artifacts.schema.json +253 -0
  2. package/dist/assets/contracts/ci/v1/golden-suite.schema.json +17 -0
  3. package/dist/assets/contracts/repository/v1/review.schema.json +44 -1
  4. package/dist/assets/contracts/semantic/v1/artifacts.schema.json +697 -0
  5. package/dist/assets/contracts/semantic/v1/golden-suite.schema.json +119 -0
  6. package/dist/assets/contracts/v1/schemas/cli-result.schema.json +11 -1
  7. package/dist/assets/fixtures/contracts/ci/v1/golden-digests.json +5 -0
  8. package/dist/assets/fixtures/contracts/ci/v1/golden-suite.json +104 -0
  9. package/dist/assets/fixtures/contracts/semantic/v1/golden-digests.json +17 -0
  10. package/dist/assets/fixtures/contracts/semantic/v1/golden-suite.json +715 -0
  11. package/dist/grfs.js +3624 -1568
  12. package/dist/review/assets/{abnfDiagram-VRR7QNED-DxGYeLns.js → abnfDiagram-VRR7QNED-BjBHcddA.js} +1 -1
  13. package/dist/review/assets/{architectureDiagram-ZJ3FMSHR-CoaG1PSB.js → architectureDiagram-ZJ3FMSHR-D2YEagFX.js} +1 -1
  14. package/dist/review/assets/{chunk-EX3LRPZG-C1ZhSVKp.js → chunk-EX3LRPZG-Cqlq9N1k.js} +1 -1
  15. package/dist/review/assets/{chunk-MOJQB5TN-Ct40HB9X.js → chunk-MOJQB5TN-CrJU23I4.js} +1 -1
  16. package/dist/review/assets/{chunk-PUDLZKDR-C2Is490W.js → chunk-PUDLZKDR-D2gPOWiF.js} +1 -1
  17. package/dist/review/assets/{chunk-V7JOEXUC-Z3n_IPe-.js → chunk-V7JOEXUC-zqKE0D3Z.js} +1 -1
  18. package/dist/review/assets/{classDiagram-OUVF2IWQ-BVlewphI.js → classDiagram-OUVF2IWQ-CRJJUaPV.js} +1 -1
  19. package/dist/review/assets/{classDiagram-v2-EOCWNBFH-BVlewphI.js → classDiagram-v2-EOCWNBFH-CRJJUaPV.js} +1 -1
  20. package/dist/review/assets/{cynefinDiagram-TSTJHNR4-Cjm1OFIk.js → cynefinDiagram-TSTJHNR4-BkymIc14.js} +1 -1
  21. package/dist/review/assets/{dagre-VKFMJZFB-EvQo1qj2.js → dagre-VKFMJZFB-e2nCgJcZ.js} +1 -1
  22. package/dist/review/assets/{diagram-G47NLZAW-k0H6Hccx.js → diagram-G47NLZAW-QL9zGpjT.js} +1 -1
  23. package/dist/review/assets/{diagram-NH7WQ7WH-VUneNb0M.js → diagram-NH7WQ7WH-DvCskT8T.js} +1 -1
  24. package/dist/review/assets/{diagram-OA4YK3LP-tUGLM6tT.js → diagram-OA4YK3LP-Cx9kjg5t.js} +1 -1
  25. package/dist/review/assets/{diagram-WEI45ONY-aN8naqL-.js → diagram-WEI45ONY-CfwqC_md.js} +1 -1
  26. package/dist/review/assets/{ebnfDiagram-CCIWWBDH-PjAeMUc1.js → ebnfDiagram-CCIWWBDH-G63kkvbq.js} +1 -1
  27. package/dist/review/assets/{erDiagram-Q63AITRT-CkxN3vs2.js → erDiagram-Q63AITRT-D3GzhK6w.js} +1 -1
  28. package/dist/review/assets/{flowDiagram-23GEKE2U-ChS1-2Qo.js → flowDiagram-23GEKE2U-DqVi9C2r.js} +1 -1
  29. package/dist/review/assets/index-BGz0YQEi.css +1 -0
  30. package/dist/review/assets/{index-CUaeHlgA.js → index-D_ZKYhz7.js} +4 -4
  31. package/dist/review/assets/{infoDiagram-FWYZ7A6U-CcLr4Fgp.js → infoDiagram-FWYZ7A6U-WJv0WBae.js} +1 -1
  32. package/dist/review/assets/{ishikawaDiagram-FXEZZL3T-p7DbRTIs.js → ishikawaDiagram-FXEZZL3T-BnZ5zRCL.js} +1 -1
  33. package/dist/review/assets/{kanban-definition-HUTT4EX6-BgXdqTkK.js → kanban-definition-HUTT4EX6-BDdmEROe.js} +1 -1
  34. package/dist/review/assets/{mindmap-definition-LN4V7U3C-zdfirl2I.js → mindmap-definition-LN4V7U3C-BH2EZxB3.js} +1 -1
  35. package/dist/review/assets/{pegDiagram-2B236MQR-ScPkpaWR.js → pegDiagram-2B236MQR-apJfnuaF.js} +1 -1
  36. package/dist/review/assets/{pieDiagram-ENE6RG2P-BAQHg9fC.js → pieDiagram-ENE6RG2P-DBZNNsNI.js} +1 -1
  37. package/dist/review/assets/{railroadDiagram-RFXS5EU6-DV8AQwDM.js → railroadDiagram-RFXS5EU6-Csr5eB8z.js} +1 -1
  38. package/dist/review/assets/{requirementDiagram-TGXJPOKE-CnPqfxpt.js → requirementDiagram-TGXJPOKE-DOGov392.js} +1 -1
  39. package/dist/review/assets/{sequenceDiagram-DBY2YBRQ-Bl7q6mbL.js → sequenceDiagram-DBY2YBRQ-CGLEdxIQ.js} +1 -1
  40. package/dist/review/assets/{stateDiagram-2N3HPSRC-iIZcI3Ny.js → stateDiagram-2N3HPSRC-DGc_GIR7.js} +1 -1
  41. package/dist/review/assets/{stateDiagram-v2-6OUMAXLB-Ct4036z_.js → stateDiagram-v2-6OUMAXLB-CB--qhqy.js} +1 -1
  42. package/dist/review/assets/{swimlanes-5IMT3BWC-DQR9TtlF.js → swimlanes-5IMT3BWC-DWuBlI_u.js} +1 -1
  43. package/dist/review/assets/{swimlanesDiagram-G3AALYLV-LS62ia1i.js → swimlanesDiagram-G3AALYLV-dXt3qLQg.js} +1 -1
  44. package/dist/review/assets/{timeline-definition-FHXFAJF6-Dm738Pbf.js → timeline-definition-FHXFAJF6-Da2ReugN.js} +1 -1
  45. package/dist/review/assets/{vennDiagram-L72KCM5P-DBxm9_YT.js → vennDiagram-L72KCM5P-CnhNeNSC.js} +1 -1
  46. package/dist/review/assets/{wardleyDiagram-EHGQE667-CKwVekAc.js → wardleyDiagram-EHGQE667-CixYg3yw.js} +1 -1
  47. package/dist/review/assets/{xychartDiagram-FW5EYKEG-TVh8_sN-.js → xychartDiagram-FW5EYKEG-BwY7805o.js} +1 -1
  48. package/dist/review/index.html +2 -2
  49. package/package.json +2 -2
  50. package/dist/review/assets/index-Cfj-JRmr.css +0 -1
@@ -0,0 +1,715 @@
1
+ {
2
+ "schema": "graphrefly.stack.semantic-golden-suite.v1",
3
+ "policy": {
4
+ "schema": "graphrefly.stack.semantic-policy.v1",
5
+ "policyId": "default-policy",
6
+ "revision": "rev-2",
7
+ "allowedSourceRoots": ["src", "tests"],
8
+ "allowedCapabilities": ["session-read", "session-write", "http-adapter"],
9
+ "checks": [
10
+ {
11
+ "id": "typecheck",
12
+ "argv": ["pnpm", "exec", "tsc", "--noEmit"],
13
+ "timeoutMs": 120000,
14
+ "network": false,
15
+ "shell": false
16
+ },
17
+ {
18
+ "id": "test",
19
+ "argv": ["pnpm", "test"],
20
+ "timeoutMs": 300000,
21
+ "network": false,
22
+ "shell": false
23
+ }
24
+ ]
25
+ },
26
+ "plan": {
27
+ "schema": "graphrefly.stack.semantic-plan.v1",
28
+ "planId": "refresh-token-plan",
29
+ "taskDigest": {
30
+ "algorithm": "sha256",
31
+ "value": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
32
+ },
33
+ "taskSummary": "Rotate refresh tokens through the repository session architecture.",
34
+ "baseCommit": {
35
+ "algorithm": "sha1",
36
+ "value": "1111111111111111111111111111111111111111"
37
+ },
38
+ "baseBlueprintHash": {
39
+ "algorithm": "sha256",
40
+ "value": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
41
+ },
42
+ "policy": {
43
+ "policyId": "default-policy",
44
+ "revision": "rev-2",
45
+ "digest": {
46
+ "algorithm": "sha256",
47
+ "value": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
48
+ }
49
+ },
50
+ "proposalSource": "codex",
51
+ "acceptedBy": {
52
+ "label": "local-reviewer",
53
+ "identityVerified": false
54
+ },
55
+ "workUnits": [
56
+ {
57
+ "id": "CONTRACTS",
58
+ "title": "Define token contracts",
59
+ "intent": "Add stable refresh-token contracts without changing session mutation.",
60
+ "dependencies": [],
61
+ "allowedSourceScopes": ["src/contracts", "tests/contracts"],
62
+ "capabilities": ["session-read"],
63
+ "claims": [
64
+ {
65
+ "id": "session-present",
66
+ "predicate": {
67
+ "operator": "present",
68
+ "selector": { "kind": "node", "nodeId": "session" }
69
+ },
70
+ "rationale": "The contract attaches to the stable session capability."
71
+ }
72
+ ],
73
+ "requiredChecks": ["typecheck"]
74
+ },
75
+ {
76
+ "id": "RUNTIME",
77
+ "title": "Implement rotation",
78
+ "intent": "Route refresh-token mutation through the current session broker.",
79
+ "dependencies": ["CONTRACTS"],
80
+ "allowedSourceScopes": ["src/runtime", "tests/runtime"],
81
+ "capabilities": ["session-write"],
82
+ "claims": [
83
+ {
84
+ "id": "runtime-uses-broker",
85
+ "predicate": {
86
+ "operator": "depends-on",
87
+ "fromNodeId": "rotation",
88
+ "toNodeId": "broker"
89
+ },
90
+ "rationale": "All session mutation must flow through the broker."
91
+ }
92
+ ],
93
+ "requiredChecks": ["typecheck", "test"]
94
+ },
95
+ {
96
+ "id": "HTTP",
97
+ "title": "Expose the adapter",
98
+ "intent": "Expose the verified runtime through the HTTP adapter.",
99
+ "dependencies": ["RUNTIME"],
100
+ "allowedSourceScopes": ["src/http", "tests/http"],
101
+ "capabilities": ["http-adapter"],
102
+ "claims": [
103
+ {
104
+ "id": "adapter-edge",
105
+ "predicate": {
106
+ "operator": "present",
107
+ "selector": {
108
+ "kind": "edge",
109
+ "fromNodeId": "http",
110
+ "toNodeId": "rotation"
111
+ }
112
+ },
113
+ "rationale": "The adapter must resolve through the rotation runtime."
114
+ }
115
+ ],
116
+ "requiredChecks": ["typecheck", "test"]
117
+ }
118
+ ]
119
+ },
120
+ "bindings": [
121
+ {
122
+ "schema": "graphrefly.stack.semantic-binding.v1",
123
+ "planId": "refresh-token-plan",
124
+ "workUnitId": "CONTRACTS",
125
+ "commit": { "algorithm": "sha1", "value": "2222222222222222222222222222222222222222" },
126
+ "parentCommit": { "algorithm": "sha1", "value": "1111111111111111111111111111111111111111" },
127
+ "trailer": { "name": "GraphReFly-Work-Unit", "value": "CONTRACTS", "occurrences": 1 },
128
+ "stablePatchId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
129
+ "diffDigest": {
130
+ "algorithm": "sha256",
131
+ "value": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
132
+ },
133
+ "changedPaths": ["src/contracts/token.ts", "tests/contracts/token.test.ts"]
134
+ },
135
+ {
136
+ "schema": "graphrefly.stack.semantic-binding.v1",
137
+ "planId": "refresh-token-plan",
138
+ "workUnitId": "RUNTIME",
139
+ "commit": { "algorithm": "sha1", "value": "3333333333333333333333333333333333333333" },
140
+ "parentCommit": { "algorithm": "sha1", "value": "2222222222222222222222222222222222222222" },
141
+ "trailer": { "name": "GraphReFly-Work-Unit", "value": "RUNTIME", "occurrences": 1 },
142
+ "stablePatchId": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
143
+ "diffDigest": {
144
+ "algorithm": "sha256",
145
+ "value": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
146
+ },
147
+ "changedPaths": ["src/runtime/rotation.ts", "tests/runtime/rotation.test.ts"]
148
+ },
149
+ {
150
+ "schema": "graphrefly.stack.semantic-binding.v1",
151
+ "planId": "refresh-token-plan",
152
+ "workUnitId": "HTTP",
153
+ "commit": { "algorithm": "sha1", "value": "4444444444444444444444444444444444444444" },
154
+ "parentCommit": { "algorithm": "sha1", "value": "3333333333333333333333333333333333333333" },
155
+ "trailer": { "name": "GraphReFly-Work-Unit", "value": "HTTP", "occurrences": 1 },
156
+ "stablePatchId": "cccccccccccccccccccccccccccccccccccccccc",
157
+ "diffDigest": {
158
+ "algorithm": "sha256",
159
+ "value": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
160
+ },
161
+ "changedPaths": ["src/http/token.ts", "tests/http/token.test.ts"]
162
+ }
163
+ ],
164
+ "records": [
165
+ {
166
+ "schema": "graphrefly.stack.semantic-record.v1",
167
+ "recordId": "record-contracts-v1",
168
+ "planId": "refresh-token-plan",
169
+ "workUnitId": "CONTRACTS",
170
+ "bindingDigest": {
171
+ "algorithm": "sha256",
172
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
173
+ },
174
+ "semanticParentRecordId": null,
175
+ "policyDigest": {
176
+ "algorithm": "sha256",
177
+ "value": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
178
+ },
179
+ "blueprintHash": {
180
+ "algorithm": "sha256",
181
+ "value": "1212121212121212121212121212121212121212121212121212121212121212"
182
+ },
183
+ "sourceScopeDigest": {
184
+ "algorithm": "sha256",
185
+ "value": "1313131313131313131313131313131313131313131313131313131313131313"
186
+ },
187
+ "claimWitnesses": [
188
+ {
189
+ "claimId": "session-present",
190
+ "predicateDigest": {
191
+ "algorithm": "sha256",
192
+ "value": "1414141414141414141414141414141414141414141414141414141414141414"
193
+ },
194
+ "status": "satisfied"
195
+ }
196
+ ],
197
+ "requiredChecks": ["typecheck"],
198
+ "rebindFrom": null
199
+ },
200
+ {
201
+ "schema": "graphrefly.stack.semantic-record.v1",
202
+ "recordId": "record-runtime-v1",
203
+ "planId": "refresh-token-plan",
204
+ "workUnitId": "RUNTIME",
205
+ "bindingDigest": {
206
+ "algorithm": "sha256",
207
+ "value": "1515151515151515151515151515151515151515151515151515151515151515"
208
+ },
209
+ "semanticParentRecordId": "record-contracts-v1",
210
+ "policyDigest": {
211
+ "algorithm": "sha256",
212
+ "value": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
213
+ },
214
+ "blueprintHash": {
215
+ "algorithm": "sha256",
216
+ "value": "1616161616161616161616161616161616161616161616161616161616161616"
217
+ },
218
+ "sourceScopeDigest": {
219
+ "algorithm": "sha256",
220
+ "value": "1717171717171717171717171717171717171717171717171717171717171717"
221
+ },
222
+ "claimWitnesses": [
223
+ {
224
+ "claimId": "runtime-uses-broker",
225
+ "predicateDigest": {
226
+ "algorithm": "sha256",
227
+ "value": "1818181818181818181818181818181818181818181818181818181818181818"
228
+ },
229
+ "status": "satisfied"
230
+ }
231
+ ],
232
+ "requiredChecks": ["typecheck", "test"],
233
+ "rebindFrom": null
234
+ },
235
+ {
236
+ "schema": "graphrefly.stack.semantic-record.v1",
237
+ "recordId": "record-http-v1",
238
+ "planId": "refresh-token-plan",
239
+ "workUnitId": "HTTP",
240
+ "bindingDigest": {
241
+ "algorithm": "sha256",
242
+ "value": "1919191919191919191919191919191919191919191919191919191919191919"
243
+ },
244
+ "semanticParentRecordId": "record-runtime-v1",
245
+ "policyDigest": {
246
+ "algorithm": "sha256",
247
+ "value": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
248
+ },
249
+ "blueprintHash": {
250
+ "algorithm": "sha256",
251
+ "value": "2020202020202020202020202020202020202020202020202020202020202020"
252
+ },
253
+ "sourceScopeDigest": {
254
+ "algorithm": "sha256",
255
+ "value": "2121212121212121212121212121212121212121212121212121212121212121"
256
+ },
257
+ "claimWitnesses": [
258
+ {
259
+ "claimId": "adapter-edge",
260
+ "predicateDigest": {
261
+ "algorithm": "sha256",
262
+ "value": "2222222222222222222222222222222222222222222222222222222222222222"
263
+ },
264
+ "status": "satisfied"
265
+ }
266
+ ],
267
+ "requiredChecks": ["typecheck", "test"],
268
+ "rebindFrom": null
269
+ }
270
+ ],
271
+ "checks": [
272
+ {
273
+ "schema": "graphrefly.stack.semantic-check-result.v1",
274
+ "checkId": "typecheck",
275
+ "commandDigest": {
276
+ "algorithm": "sha256",
277
+ "value": "2323232323232323232323232323232323232323232323232323232323232323"
278
+ },
279
+ "exitCode": 0,
280
+ "stdoutDigest": {
281
+ "algorithm": "sha256",
282
+ "value": "2424242424242424242424242424242424242424242424242424242424242424"
283
+ },
284
+ "stderrDigest": {
285
+ "algorithm": "sha256",
286
+ "value": "2525252525252525252525252525252525252525252525252525252525252525"
287
+ }
288
+ },
289
+ {
290
+ "schema": "graphrefly.stack.semantic-check-result.v1",
291
+ "checkId": "test",
292
+ "commandDigest": {
293
+ "algorithm": "sha256",
294
+ "value": "2626262626262626262626262626262626262626262626262626262626262626"
295
+ },
296
+ "exitCode": 0,
297
+ "stdoutDigest": {
298
+ "algorithm": "sha256",
299
+ "value": "2727272727272727272727272727272727272727272727272727272727272727"
300
+ },
301
+ "stderrDigest": {
302
+ "algorithm": "sha256",
303
+ "value": "2828282828282828282828282828282828282828282828282828282828282828"
304
+ }
305
+ }
306
+ ],
307
+ "modelContext": {
308
+ "schema": "graphrefly.stack.semantic-model-context.v1",
309
+ "purpose": "plan",
310
+ "taskDigest": {
311
+ "algorithm": "sha256",
312
+ "value": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
313
+ },
314
+ "policyDigest": {
315
+ "algorithm": "sha256",
316
+ "value": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
317
+ },
318
+ "policyFields": [
319
+ "policyId",
320
+ "revision",
321
+ "allowedSourceRoots",
322
+ "allowedCapabilities",
323
+ "checkIds"
324
+ ],
325
+ "blueprintFields": ["version", "topology.nodes", "topology.edges", "hash"],
326
+ "sourcePaths": ["src/contracts/token.ts"],
327
+ "omittedClasses": [
328
+ "credentials",
329
+ "environment",
330
+ "unlisted-source",
331
+ "execution-details",
332
+ "raw-provider-output"
333
+ ],
334
+ "authorization": { "mode": "explicit-cli", "identityVerified": false }
335
+ },
336
+ "cases": [
337
+ {
338
+ "caseId": "normal-valid",
339
+ "category": "valid",
340
+ "states": {
341
+ "binding": "valid",
342
+ "predicate": "satisfied",
343
+ "scope": "valid",
344
+ "check": "passed",
345
+ "policy": "fresh",
346
+ "artifact": "valid",
347
+ "context": "not-used"
348
+ },
349
+ "expectedGate": {
350
+ "schema": "graphrefly.stack.semantic-gate-result.v1",
351
+ "gateVersion": "v1",
352
+ "inputDigest": {
353
+ "algorithm": "sha256",
354
+ "value": "3030303030303030303030303030303030303030303030303030303030303030"
355
+ },
356
+ "verdict": "pass",
357
+ "units": [
358
+ {
359
+ "workUnitId": "CONTRACTS",
360
+ "verdict": "valid",
361
+ "reasonCodes": [],
362
+ "invalidDependencies": [],
363
+ "recordId": "record-contracts-v1"
364
+ },
365
+ {
366
+ "workUnitId": "RUNTIME",
367
+ "verdict": "valid",
368
+ "reasonCodes": [],
369
+ "invalidDependencies": [],
370
+ "recordId": "record-runtime-v1"
371
+ },
372
+ {
373
+ "workUnitId": "HTTP",
374
+ "verdict": "valid",
375
+ "reasonCodes": [],
376
+ "invalidDependencies": [],
377
+ "recordId": "record-http-v1"
378
+ }
379
+ ],
380
+ "checkIds": ["typecheck", "test"]
381
+ },
382
+ "expectedError": null,
383
+ "selectiveReplan": null,
384
+ "rebindRecord": null
385
+ },
386
+ {
387
+ "caseId": "architecture-stale-selective",
388
+ "category": "blocked",
389
+ "states": {
390
+ "binding": "valid",
391
+ "predicate": "architecture-stale",
392
+ "scope": "valid",
393
+ "check": "passed",
394
+ "policy": "fresh",
395
+ "artifact": "valid",
396
+ "context": "not-used"
397
+ },
398
+ "expectedGate": {
399
+ "schema": "graphrefly.stack.semantic-gate-result.v1",
400
+ "gateVersion": "v1",
401
+ "inputDigest": {
402
+ "algorithm": "sha256",
403
+ "value": "3131313131313131313131313131313131313131313131313131313131313131"
404
+ },
405
+ "verdict": "blocked",
406
+ "units": [
407
+ {
408
+ "workUnitId": "CONTRACTS",
409
+ "verdict": "valid",
410
+ "reasonCodes": [],
411
+ "invalidDependencies": [],
412
+ "recordId": "record-contracts-v1"
413
+ },
414
+ {
415
+ "workUnitId": "RUNTIME",
416
+ "verdict": "invalid",
417
+ "reasonCodes": ["BLUEPRINT_PREDICATE_UNSATISFIED", "BLUEPRINT_WITNESS_STALE"],
418
+ "invalidDependencies": [],
419
+ "recordId": null
420
+ },
421
+ {
422
+ "workUnitId": "HTTP",
423
+ "verdict": "invalid",
424
+ "reasonCodes": ["DEPENDENCY_INVALID"],
425
+ "invalidDependencies": ["RUNTIME"],
426
+ "recordId": null
427
+ }
428
+ ],
429
+ "checkIds": ["typecheck", "test"]
430
+ },
431
+ "expectedError": null,
432
+ "selectiveReplan": {
433
+ "schema": "graphrefly.stack.semantic-selective-replan.v1",
434
+ "sourcePlanId": "refresh-token-plan",
435
+ "replacementPlanId": "refresh-token-plan-rev-2",
436
+ "preservedUnits": ["CONTRACTS"],
437
+ "invalidUnits": ["RUNTIME", "HTTP"],
438
+ "contextManifestDigest": {
439
+ "algorithm": "sha256",
440
+ "value": "3232323232323232323232323232323232323232323232323232323232323232"
441
+ },
442
+ "proposalSource": "codex"
443
+ },
444
+ "rebindRecord": null
445
+ },
446
+ {
447
+ "caseId": "unrelated-immutable-rebind",
448
+ "category": "valid",
449
+ "states": {
450
+ "binding": "valid",
451
+ "predicate": "satisfied",
452
+ "scope": "valid",
453
+ "check": "passed",
454
+ "policy": "fresh",
455
+ "artifact": "valid",
456
+ "context": "not-used"
457
+ },
458
+ "expectedGate": {
459
+ "schema": "graphrefly.stack.semantic-gate-result.v1",
460
+ "gateVersion": "v1",
461
+ "inputDigest": {
462
+ "algorithm": "sha256",
463
+ "value": "3333333333333333333333333333333333333333333333333333333333333333"
464
+ },
465
+ "verdict": "pass",
466
+ "units": [
467
+ {
468
+ "workUnitId": "CONTRACTS",
469
+ "verdict": "valid",
470
+ "reasonCodes": [],
471
+ "invalidDependencies": [],
472
+ "recordId": "record-contracts-v2"
473
+ },
474
+ {
475
+ "workUnitId": "RUNTIME",
476
+ "verdict": "valid",
477
+ "reasonCodes": [],
478
+ "invalidDependencies": [],
479
+ "recordId": "record-runtime-v1"
480
+ },
481
+ {
482
+ "workUnitId": "HTTP",
483
+ "verdict": "valid",
484
+ "reasonCodes": [],
485
+ "invalidDependencies": [],
486
+ "recordId": "record-http-v1"
487
+ }
488
+ ],
489
+ "checkIds": ["typecheck", "test"]
490
+ },
491
+ "expectedError": null,
492
+ "selectiveReplan": null,
493
+ "rebindRecord": {
494
+ "schema": "graphrefly.stack.semantic-record.v1",
495
+ "recordId": "record-contracts-v2",
496
+ "planId": "refresh-token-plan",
497
+ "workUnitId": "CONTRACTS",
498
+ "bindingDigest": {
499
+ "algorithm": "sha256",
500
+ "value": "3434343434343434343434343434343434343434343434343434343434343434"
501
+ },
502
+ "semanticParentRecordId": null,
503
+ "policyDigest": {
504
+ "algorithm": "sha256",
505
+ "value": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
506
+ },
507
+ "blueprintHash": {
508
+ "algorithm": "sha256",
509
+ "value": "1212121212121212121212121212121212121212121212121212121212121212"
510
+ },
511
+ "sourceScopeDigest": {
512
+ "algorithm": "sha256",
513
+ "value": "1313131313131313131313131313131313131313131313131313131313131313"
514
+ },
515
+ "claimWitnesses": [
516
+ {
517
+ "claimId": "session-present",
518
+ "predicateDigest": {
519
+ "algorithm": "sha256",
520
+ "value": "1414141414141414141414141414141414141414141414141414141414141414"
521
+ },
522
+ "status": "satisfied"
523
+ }
524
+ ],
525
+ "requiredChecks": ["typecheck"],
526
+ "rebindFrom": "record-contracts-v1"
527
+ }
528
+ },
529
+ {
530
+ "caseId": "missing-trailer",
531
+ "category": "error",
532
+ "states": {
533
+ "binding": "missing-trailer",
534
+ "predicate": "satisfied",
535
+ "scope": "valid",
536
+ "check": "passed",
537
+ "policy": "fresh",
538
+ "artifact": "valid",
539
+ "context": "not-used"
540
+ },
541
+ "expectedGate": null,
542
+ "expectedError": "WORK_UNIT_TRAILER_MISSING",
543
+ "selectiveReplan": null,
544
+ "rebindRecord": null
545
+ },
546
+ {
547
+ "caseId": "duplicate-trailer",
548
+ "category": "error",
549
+ "states": {
550
+ "binding": "duplicate-trailer",
551
+ "predicate": "satisfied",
552
+ "scope": "valid",
553
+ "check": "passed",
554
+ "policy": "fresh",
555
+ "artifact": "valid",
556
+ "context": "not-used"
557
+ },
558
+ "expectedGate": null,
559
+ "expectedError": "WORK_UNIT_TRAILER_DUPLICATE",
560
+ "selectiveReplan": null,
561
+ "rebindRecord": null
562
+ },
563
+ {
564
+ "caseId": "ambiguous-predicate",
565
+ "category": "error",
566
+ "states": {
567
+ "binding": "valid",
568
+ "predicate": "ambiguous",
569
+ "scope": "valid",
570
+ "check": "passed",
571
+ "policy": "fresh",
572
+ "artifact": "valid",
573
+ "context": "authorized"
574
+ },
575
+ "expectedGate": null,
576
+ "expectedError": "PREDICATE_SELECTOR_AMBIGUOUS",
577
+ "selectiveReplan": null,
578
+ "rebindRecord": null
579
+ },
580
+ {
581
+ "caseId": "unsupported-predicate",
582
+ "category": "error",
583
+ "states": {
584
+ "binding": "valid",
585
+ "predicate": "unsupported",
586
+ "scope": "valid",
587
+ "check": "passed",
588
+ "policy": "fresh",
589
+ "artifact": "valid",
590
+ "context": "authorized"
591
+ },
592
+ "expectedGate": null,
593
+ "expectedError": "PREDICATE_UNSUPPORTED",
594
+ "selectiveReplan": null,
595
+ "rebindRecord": null
596
+ },
597
+ {
598
+ "caseId": "widened-scope",
599
+ "category": "error",
600
+ "states": {
601
+ "binding": "valid",
602
+ "predicate": "satisfied",
603
+ "scope": "widened",
604
+ "check": "passed",
605
+ "policy": "fresh",
606
+ "artifact": "valid",
607
+ "context": "authorized"
608
+ },
609
+ "expectedGate": null,
610
+ "expectedError": "SOURCE_SCOPE_VIOLATION",
611
+ "selectiveReplan": null,
612
+ "rebindRecord": null
613
+ },
614
+ {
615
+ "caseId": "undeclared-check",
616
+ "category": "error",
617
+ "states": {
618
+ "binding": "valid",
619
+ "predicate": "satisfied",
620
+ "scope": "valid",
621
+ "check": "undeclared",
622
+ "policy": "fresh",
623
+ "artifact": "valid",
624
+ "context": "authorized"
625
+ },
626
+ "expectedGate": null,
627
+ "expectedError": "REQUIRED_CHECK_UNDECLARED",
628
+ "selectiveReplan": null,
629
+ "rebindRecord": null
630
+ },
631
+ {
632
+ "caseId": "policy-freshness",
633
+ "category": "blocked",
634
+ "states": {
635
+ "binding": "valid",
636
+ "predicate": "satisfied",
637
+ "scope": "valid",
638
+ "check": "passed",
639
+ "policy": "stale",
640
+ "artifact": "valid",
641
+ "context": "not-used"
642
+ },
643
+ "expectedGate": {
644
+ "schema": "graphrefly.stack.semantic-gate-result.v1",
645
+ "gateVersion": "v1",
646
+ "inputDigest": {
647
+ "algorithm": "sha256",
648
+ "value": "3535353535353535353535353535353535353535353535353535353535353535"
649
+ },
650
+ "verdict": "blocked",
651
+ "units": [
652
+ {
653
+ "workUnitId": "CONTRACTS",
654
+ "verdict": "valid",
655
+ "reasonCodes": [],
656
+ "invalidDependencies": [],
657
+ "recordId": "record-contracts-v1"
658
+ },
659
+ {
660
+ "workUnitId": "RUNTIME",
661
+ "verdict": "invalid",
662
+ "reasonCodes": ["POLICY_REVISION_STALE"],
663
+ "invalidDependencies": [],
664
+ "recordId": null
665
+ },
666
+ {
667
+ "workUnitId": "HTTP",
668
+ "verdict": "invalid",
669
+ "reasonCodes": ["DEPENDENCY_INVALID"],
670
+ "invalidDependencies": ["RUNTIME"],
671
+ "recordId": null
672
+ }
673
+ ],
674
+ "checkIds": ["typecheck", "test"]
675
+ },
676
+ "expectedError": null,
677
+ "selectiveReplan": null,
678
+ "rebindRecord": null
679
+ },
680
+ {
681
+ "caseId": "artifact-tamper",
682
+ "category": "error",
683
+ "states": {
684
+ "binding": "valid",
685
+ "predicate": "satisfied",
686
+ "scope": "valid",
687
+ "check": "passed",
688
+ "policy": "fresh",
689
+ "artifact": "tampered",
690
+ "context": "not-used"
691
+ },
692
+ "expectedGate": null,
693
+ "expectedError": "ARTIFACT_HASH_MISMATCH",
694
+ "selectiveReplan": null,
695
+ "rebindRecord": null
696
+ },
697
+ {
698
+ "caseId": "unauthorized-live-context",
699
+ "category": "error",
700
+ "states": {
701
+ "binding": "valid",
702
+ "predicate": "satisfied",
703
+ "scope": "valid",
704
+ "check": "passed",
705
+ "policy": "fresh",
706
+ "artifact": "valid",
707
+ "context": "unauthorized"
708
+ },
709
+ "expectedGate": null,
710
+ "expectedError": "MODEL_CONTEXT_UNAUTHORIZED",
711
+ "selectiveReplan": null,
712
+ "rebindRecord": null
713
+ }
714
+ ]
715
+ }