@graphrefly/stack 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +214 -0
  3. package/dist/assets/contracts/repository/v1/repository-config.schema.json +23 -0
  4. package/dist/assets/contracts/repository/v1/review.schema.json +182 -0
  5. package/dist/assets/contracts/v1/schemas/artifacts.schema.json +584 -0
  6. package/dist/assets/contracts/v1/schemas/cli-result.schema.json +49 -0
  7. package/dist/assets/contracts/v1/schemas/golden-suite.schema.json +95 -0
  8. package/dist/assets/contracts/v1/schemas/plan-proposal.schema.json +15 -0
  9. package/dist/assets/contracts/v1/schemas/replan-proposal.schema.json +25 -0
  10. package/dist/assets/fixtures/contracts/v1/golden-suite.json +954 -0
  11. package/dist/assets/fixtures/flagship/v1/repository-template.json +48 -0
  12. package/dist/grfs.js +11102 -0
  13. package/dist/review/assets/abnfDiagram-VRR7QNED-5JVeQ-ZW.js +1 -0
  14. package/dist/review/assets/arc-CB8DclF7.js +1 -0
  15. package/dist/review/assets/architecture-TIHT7OUA-Bqe2DsxB.js +1 -0
  16. package/dist/review/assets/architectureDiagram-ZJ3FMSHR-BnEvDO7X.js +36 -0
  17. package/dist/review/assets/array-BifhSqXX.js +1 -0
  18. package/dist/review/assets/blockDiagram-677ZJIJ3-ButhTken.js +132 -0
  19. package/dist/review/assets/c4Diagram-LMCZKHZV-Dv1rgwuU.js +10 -0
  20. package/dist/review/assets/channel-HyWlF92n.js +1 -0
  21. package/dist/review/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  22. package/dist/review/assets/chunk-32BRIVSS-DPG_L6Ow.js +1 -0
  23. package/dist/review/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  24. package/dist/review/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
  25. package/dist/review/assets/chunk-C7G6YPKG-WgqYOC9I.js +1 -0
  26. package/dist/review/assets/chunk-EX3LRPZG-BrpCa9zr.js +231 -0
  27. package/dist/review/assets/chunk-HOUHSVGY-BrlsNa-I.js +1 -0
  28. package/dist/review/assets/chunk-ICXQ74PX-Bmw_N4Lw.js +2 -0
  29. package/dist/review/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  30. package/dist/review/assets/chunk-KEIR6QF5-Dj-OpFgW.js +161 -0
  31. package/dist/review/assets/chunk-MOJQB5TN-BshP08Ez.js +88 -0
  32. package/dist/review/assets/chunk-OGEWGWER-fU6SYJIg.js +1 -0
  33. package/dist/review/assets/chunk-PUDLZKDR-HkwEqIVB.js +156 -0
  34. package/dist/review/assets/chunk-Q4XR5HBZ-BpeC1YXL.js +70 -0
  35. package/dist/review/assets/chunk-RYQCIY6F-0ervO6Fl.js +1 -0
  36. package/dist/review/assets/chunk-V7JOEXUC-CswDacm3.js +206 -0
  37. package/dist/review/assets/chunk-VR4S4FIN-OVY3vSUk.js +1 -0
  38. package/dist/review/assets/chunk-WYO6CB5R-C36byBU-.js +127 -0
  39. package/dist/review/assets/chunk-XXDRQBXY-D6m_P2Gv.js +1 -0
  40. package/dist/review/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  41. package/dist/review/assets/chunk-ZGVPDNZ5-_Ehp2Vnm.js +62 -0
  42. package/dist/review/assets/classDiagram-OUVF2IWQ-U8e_ZvC4.js +1 -0
  43. package/dist/review/assets/classDiagram-v2-EOCWNBFH-U8e_ZvC4.js +1 -0
  44. package/dist/review/assets/cose-bilkent-JH36ORCC-CRp3s0ZJ.js +1 -0
  45. package/dist/review/assets/cynefin-VYW2F7L2-C0b7xdyt.js +1 -0
  46. package/dist/review/assets/cynefinDiagram-TSTJHNR4-CfYu2mB5.js +62 -0
  47. package/dist/review/assets/cytoscape.esm-CQFVGiJu.js +321 -0
  48. package/dist/review/assets/dagre-VKFMJZFB-BvyihZfA.js +4 -0
  49. package/dist/review/assets/dagre-dpRSp0QF.js +1 -0
  50. package/dist/review/assets/defaultLocale-C8Fc0cco.js +1 -0
  51. package/dist/review/assets/diagram-FQU43EPY-DRoOWbTK.js +3 -0
  52. package/dist/review/assets/diagram-G47NLZAW-qFNMv5An.js +24 -0
  53. package/dist/review/assets/diagram-NH7WQ7WH-CsvacND9.js +24 -0
  54. package/dist/review/assets/diagram-OA4YK3LP-qFtWcyNi.js +30 -0
  55. package/dist/review/assets/diagram-WEI45ONY-C5nYGL8t.js +41 -0
  56. package/dist/review/assets/dist-Q9n2Bb2K.js +1 -0
  57. package/dist/review/assets/ebnfDiagram-CCIWWBDH-D_0nhpry.js +1 -0
  58. package/dist/review/assets/erDiagram-Q63AITRT-CIS7hpdK.js +85 -0
  59. package/dist/review/assets/eventmodeling-45OFAUF4-BD32wstC.js +1 -0
  60. package/dist/review/assets/flowDiagram-23GEKE2U-Df5sjnlg.js +1 -0
  61. package/dist/review/assets/ganttDiagram-NO4QXBWP-YVgrRl0A.js +292 -0
  62. package/dist/review/assets/gitGraph-TEB2WS4Q-VVXGfjmO.js +1 -0
  63. package/dist/review/assets/gitGraphDiagram-IHSO6WYX-DU6K2oph.js +106 -0
  64. package/dist/review/assets/graphlib-DS17s2tU.js +1 -0
  65. package/dist/review/assets/index-Bt3i8n39.css +1 -0
  66. package/dist/review/assets/index-CqjR4YYp.js +64 -0
  67. package/dist/review/assets/info-DKCQHKI2-Bzf5qgtg.js +1 -0
  68. package/dist/review/assets/infoDiagram-FWYZ7A6U-CT7TZgi6.js +2 -0
  69. package/dist/review/assets/init-D6jRqBbL.js +1 -0
  70. package/dist/review/assets/ishikawaDiagram-FXEZZL3T-BUpotH7r.js +70 -0
  71. package/dist/review/assets/journeyDiagram-5HDEW3XC-Dfq1Zgbg.js +139 -0
  72. package/dist/review/assets/kanban-definition-HUTT4EX6-e-emfNuh.js +89 -0
  73. package/dist/review/assets/katex-B7rAX3Vi.js +257 -0
  74. package/dist/review/assets/line-fLz2iEv2.js +1 -0
  75. package/dist/review/assets/linear-BPTPEtRN.js +1 -0
  76. package/dist/review/assets/map-BaFkSB1l.js +1 -0
  77. package/dist/review/assets/mermaid-parser.core-BJLV4lM2.js +7 -0
  78. package/dist/review/assets/mindmap-definition-LN4V7U3C-ClSEPrvR.js +96 -0
  79. package/dist/review/assets/ordinal-hYBb2elL.js +1 -0
  80. package/dist/review/assets/packet-7NZHBO7P-DV-IpgNt.js +1 -0
  81. package/dist/review/assets/path-BWPyau1x.js +1 -0
  82. package/dist/review/assets/pegDiagram-2B236MQR-Ck_v89jl.js +1 -0
  83. package/dist/review/assets/pie-RZYD4A2V-B0Ht5h6P.js +1 -0
  84. package/dist/review/assets/pieDiagram-ENE6RG2P-C63dxyZj.js +39 -0
  85. package/dist/review/assets/quadrantDiagram-ABIIQ3AL-STCrBeWw.js +7 -0
  86. package/dist/review/assets/radar-I7S5WNFK-BDk7gJ8s.js +1 -0
  87. package/dist/review/assets/railroad-3IZDKUUU-DFw02UTf.js +1 -0
  88. package/dist/review/assets/railroad-abnf-AHOZXSZD-CHMMM8DG.js +1 -0
  89. package/dist/review/assets/railroad-ebnf-EBAXGLYW-yQjh1dCt.js +1 -0
  90. package/dist/review/assets/railroad-peg-LSFZ7HO6-B9LBaRcJ.js +1 -0
  91. package/dist/review/assets/railroadDiagram-RFXS5EU6-DYI7CPMt.js +1 -0
  92. package/dist/review/assets/requirementDiagram-TGXJPOKE-BMW46SXM.js +84 -0
  93. package/dist/review/assets/rough.esm-CSKSodPl.js +1 -0
  94. package/dist/review/assets/sankeyDiagram-HTMAVEWB-wTvFx0iK.js +40 -0
  95. package/dist/review/assets/sequenceDiagram-DBY2YBRQ-DVtyVuxr.js +162 -0
  96. package/dist/review/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
  97. package/dist/review/assets/src-BMa7vLb8.js +1 -0
  98. package/dist/review/assets/stateDiagram-2N3HPSRC-BM1s-zUo.js +1 -0
  99. package/dist/review/assets/stateDiagram-v2-6OUMAXLB-BEfolAkc.js +1 -0
  100. package/dist/review/assets/swimlanes-5IMT3BWC-Bnu9mzxz.js +2 -0
  101. package/dist/review/assets/swimlanesDiagram-G3AALYLV-DlNNBK53.js +8 -0
  102. package/dist/review/assets/timeline-definition-FHXFAJF6-CwlO71Lp.js +120 -0
  103. package/dist/review/assets/treeView-QDETBFTQ-e6oHg1mF.js +1 -0
  104. package/dist/review/assets/treemap-6X3UGDF4-HYeYMCQq.js +1 -0
  105. package/dist/review/assets/vennDiagram-L72KCM5P-DZxbcc_O.js +34 -0
  106. package/dist/review/assets/wardley-OPB4EBWU-BCMNVDbK.js +1 -0
  107. package/dist/review/assets/wardleyDiagram-EHGQE667-DGQto3hn.js +78 -0
  108. package/dist/review/assets/xychartDiagram-FW5EYKEG-BfD1lSXX.js +7 -0
  109. package/dist/review/index.html +32 -0
  110. package/package.json +64 -0
@@ -0,0 +1,954 @@
1
+ {
2
+ "schema": "urn:graphrefly-stack:schema:golden-suite:v1",
3
+ "task": {
4
+ "schema": "urn:graphrefly-stack:schema:task:v1",
5
+ "taskId": "rotate-refresh-token-on-use",
6
+ "text": "Rotate the refresh token after every successful /session/refresh request; reject replay of the previous token; preserve the token-family ID; return the replacement token; and do not change password-reset behavior."
7
+ },
8
+ "stack": {
9
+ "schema": "urn:graphrefly-stack:schema:git-stack:v1",
10
+ "linearity": "linear",
11
+ "base": { "algorithm": "sha1", "value": "0000000000000000000000000000000000000001" },
12
+ "head": { "algorithm": "sha1", "value": "3333333333333333333333333333333333333333" },
13
+ "commits": [
14
+ {
15
+ "oid": { "algorithm": "sha1", "value": "0000000000000000000000000000000000000001" },
16
+ "parent": null,
17
+ "role": "base",
18
+ "workUnitId": null
19
+ },
20
+ {
21
+ "oid": { "algorithm": "sha1", "value": "1111111111111111111111111111111111111111" },
22
+ "parent": {
23
+ "algorithm": "sha1",
24
+ "value": "0000000000000000000000000000000000000001"
25
+ },
26
+ "role": "work-unit",
27
+ "workUnitId": "U1"
28
+ },
29
+ {
30
+ "oid": { "algorithm": "sha1", "value": "2222222222222222222222222222222222222222" },
31
+ "parent": {
32
+ "algorithm": "sha1",
33
+ "value": "1111111111111111111111111111111111111111"
34
+ },
35
+ "role": "work-unit",
36
+ "workUnitId": "U2"
37
+ },
38
+ {
39
+ "oid": { "algorithm": "sha1", "value": "3333333333333333333333333333333333333333" },
40
+ "parent": {
41
+ "algorithm": "sha1",
42
+ "value": "2222222222222222222222222222222222222222"
43
+ },
44
+ "role": "work-unit",
45
+ "workUnitId": "U3"
46
+ }
47
+ ]
48
+ },
49
+ "provider": {
50
+ "schema": "urn:graphrefly-stack:schema:blueprint-provider-capabilities:v1",
51
+ "providerId": "graphrefly",
52
+ "providerVersion": "0.1.1",
53
+ "blueprintVersion": "graphrefly.blueprint.v1",
54
+ "capabilities": {
55
+ "commitSnapshot": true,
56
+ "canonicalTopologyBytes": true,
57
+ "nodeMetadata": true,
58
+ "subgraphs": true,
59
+ "diagnostics": true,
60
+ "structuralDelta": true,
61
+ "mergeParentSelection": false,
62
+ "claimImpact": false
63
+ }
64
+ },
65
+ "manifest": {
66
+ "schema": "urn:graphrefly-stack:schema:bundle-manifest:v1",
67
+ "runId": "fixture-refresh-token-rotation-v1",
68
+ "recordedAt": "2026-07-16T00:00:00Z",
69
+ "sourceCommit": { "algorithm": "sha1", "value": "1111111111111111111111111111111111111111" },
70
+ "canonicalInputDigest": {
71
+ "algorithm": "sha256",
72
+ "value": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
73
+ },
74
+ "schemaVersion": "v1",
75
+ "promptVersion": "fixture.v1",
76
+ "model": { "source": "fixture", "id": "fixture", "reasoningEffort": "none" },
77
+ "provider": {
78
+ "schema": "urn:graphrefly-stack:schema:blueprint-provider-capabilities:v1",
79
+ "providerId": "graphrefly",
80
+ "providerVersion": "0.1.1",
81
+ "blueprintVersion": "graphrefly.blueprint.v1",
82
+ "capabilities": {
83
+ "commitSnapshot": true,
84
+ "canonicalTopologyBytes": true,
85
+ "nodeMetadata": true,
86
+ "subgraphs": true,
87
+ "diagnostics": true,
88
+ "structuralDelta": true,
89
+ "mergeParentSelection": false,
90
+ "claimImpact": false
91
+ }
92
+ },
93
+ "graphreflyVersion": "0.1.1",
94
+ "policyRevision": "session-writes.v2",
95
+ "artifacts": [
96
+ {
97
+ "path": "task.json",
98
+ "hash": {
99
+ "algorithm": "sha256",
100
+ "value": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
101
+ }
102
+ }
103
+ ]
104
+ },
105
+ "changePlan": {
106
+ "schema": "urn:graphrefly-stack:schema:change-plan:v1",
107
+ "planId": "plan.refresh-token-rotation.v1",
108
+ "taskDigest": {
109
+ "algorithm": "sha256",
110
+ "value": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
111
+ },
112
+ "baseCommit": { "algorithm": "sha1", "value": "1111111111111111111111111111111111111111" },
113
+ "baseBlueprintHash": {
114
+ "algorithm": "sha256",
115
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
116
+ },
117
+ "policyRevision": "session-writes.v1",
118
+ "source": "fixture",
119
+ "workUnits": [
120
+ {
121
+ "id": "U1",
122
+ "title": "Define refresh rotation contracts",
123
+ "intent": "Define token-family and replay-rejection contracts.",
124
+ "dependencies": [],
125
+ "allowedSourceScopes": ["src/session/contracts.ts", "tests/session/contracts.test.ts"],
126
+ "blueprintClaims": [],
127
+ "requiredChecks": ["contracts"]
128
+ },
129
+ {
130
+ "id": "U2",
131
+ "title": "Implement the GraphReFly refresh rotation flow",
132
+ "intent": "Rotate and persist the replacement refresh token.",
133
+ "dependencies": ["U1"],
134
+ "allowedSourceScopes": [
135
+ "src/session/flows/refresh-flow.ts",
136
+ "tests/session/refresh-flow.test.ts"
137
+ ],
138
+ "blueprintClaims": [
139
+ {
140
+ "id": "session-write-path",
141
+ "statement": "The online session mutation may persist directly under session-writes.v1."
142
+ }
143
+ ],
144
+ "requiredChecks": ["refresh-runtime"]
145
+ },
146
+ {
147
+ "id": "U3",
148
+ "title": "Expose the refresh HTTP adapter",
149
+ "intent": "Return the replacement token and reject replay.",
150
+ "dependencies": ["U2"],
151
+ "allowedSourceScopes": ["src/http/refresh-route.ts", "tests/http/refresh-route.test.ts"],
152
+ "blueprintClaims": [
153
+ { "id": "refresh-runtime", "statement": "The adapter depends on an accepted U2 runtime." }
154
+ ],
155
+ "requiredChecks": ["refresh-api"]
156
+ }
157
+ ]
158
+ },
159
+ "snapshots": [
160
+ {
161
+ "schema": "urn:graphrefly-stack:schema:blueprint-snapshot:v1",
162
+ "commit": { "algorithm": "sha1", "value": "3333333333333333333333333333333333333333" },
163
+ "semanticParent": {
164
+ "algorithm": "sha1",
165
+ "value": "2222222222222222222222222222222222222222"
166
+ },
167
+ "provider": {
168
+ "schema": "urn:graphrefly-stack:schema:blueprint-provider-capabilities:v1",
169
+ "providerId": "graphrefly",
170
+ "providerVersion": "0.1.1",
171
+ "blueprintVersion": "graphrefly.blueprint.v1",
172
+ "capabilities": {
173
+ "commitSnapshot": true,
174
+ "canonicalTopologyBytes": true,
175
+ "nodeMetadata": true,
176
+ "subgraphs": true,
177
+ "diagnostics": true,
178
+ "structuralDelta": true,
179
+ "mergeParentSelection": false,
180
+ "claimImpact": false
181
+ }
182
+ },
183
+ "blueprint": {
184
+ "version": "graphrefly.blueprint.v1",
185
+ "provenance": { "fixture": "refresh-token-rotation-v1", "ref": "S3" },
186
+ "topology": {
187
+ "name": "session",
188
+ "nodes": [
189
+ { "id": "password-reset.intent", "factory": "state", "deps": [] },
190
+ {
191
+ "id": "session.persist.password-reset",
192
+ "factory": "effect",
193
+ "deps": ["password-reset.intent"],
194
+ "meta": { "capability": "session-mutation", "mode": "online" }
195
+ },
196
+ { "id": "refresh.request", "factory": "state", "deps": [] },
197
+ { "id": "refresh.validate", "factory": "derived", "deps": ["refresh.request"] },
198
+ { "id": "refresh.rotate", "factory": "derived", "deps": ["refresh.validate"] },
199
+ {
200
+ "id": "session.persist.refresh",
201
+ "factory": "effect",
202
+ "deps": ["refresh.rotate"],
203
+ "meta": { "capability": "session-mutation", "mode": "online" }
204
+ }
205
+ ],
206
+ "edges": [
207
+ { "from": "password-reset.intent", "to": "session.persist.password-reset" },
208
+ { "from": "refresh.request", "to": "refresh.validate" },
209
+ { "from": "refresh.validate", "to": "refresh.rotate" },
210
+ { "from": "refresh.rotate", "to": "session.persist.refresh" }
211
+ ]
212
+ },
213
+ "diagnostics": { "ok": true, "issues": [] },
214
+ "hash": {
215
+ "kind": "topology",
216
+ "algorithm": "sha256",
217
+ "input": "strictCanonicalTopologyBytes",
218
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
219
+ }
220
+ },
221
+ "topologyHash": {
222
+ "algorithm": "sha256",
223
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
224
+ },
225
+ "policyRevision": "session-writes.v1"
226
+ },
227
+ {
228
+ "schema": "urn:graphrefly-stack:schema:blueprint-snapshot:v1",
229
+ "commit": { "algorithm": "sha1", "value": "6666666666666666666666666666666666666666" },
230
+ "semanticParent": {
231
+ "algorithm": "sha1",
232
+ "value": "5555555555555555555555555555555555555555"
233
+ },
234
+ "provider": {
235
+ "schema": "urn:graphrefly-stack:schema:blueprint-provider-capabilities:v1",
236
+ "providerId": "graphrefly",
237
+ "providerVersion": "0.1.1",
238
+ "blueprintVersion": "graphrefly.blueprint.v1",
239
+ "capabilities": {
240
+ "commitSnapshot": true,
241
+ "canonicalTopologyBytes": true,
242
+ "nodeMetadata": true,
243
+ "subgraphs": true,
244
+ "diagnostics": true,
245
+ "structuralDelta": true,
246
+ "mergeParentSelection": false,
247
+ "claimImpact": false
248
+ }
249
+ },
250
+ "blueprint": {
251
+ "version": "graphrefly.blueprint.v1",
252
+ "topology": {
253
+ "name": "session",
254
+ "nodes": [
255
+ { "id": "password-reset.intent", "factory": "state", "deps": [] },
256
+ {
257
+ "id": "session.mutation-broker.password-reset",
258
+ "factory": "sessionMutationBroker",
259
+ "deps": ["password-reset.intent"],
260
+ "meta": { "capability": "session-mutation-broker" }
261
+ },
262
+ {
263
+ "id": "session.persist.password-reset",
264
+ "factory": "effect",
265
+ "deps": ["session.mutation-broker.password-reset"],
266
+ "meta": { "capability": "session-mutation", "mode": "online" }
267
+ },
268
+ { "id": "refresh.request", "factory": "state", "deps": [] },
269
+ { "id": "refresh.validate", "factory": "derived", "deps": ["refresh.request"] },
270
+ { "id": "refresh.rotate", "factory": "derived", "deps": ["refresh.validate"] },
271
+ {
272
+ "id": "session.persist.refresh",
273
+ "factory": "effect",
274
+ "deps": ["refresh.rotate"],
275
+ "meta": { "capability": "session-mutation", "mode": "online" }
276
+ }
277
+ ],
278
+ "edges": [
279
+ { "from": "password-reset.intent", "to": "session.mutation-broker.password-reset" },
280
+ {
281
+ "from": "session.mutation-broker.password-reset",
282
+ "to": "session.persist.password-reset"
283
+ },
284
+ { "from": "refresh.request", "to": "refresh.validate" },
285
+ { "from": "refresh.validate", "to": "refresh.rotate" },
286
+ { "from": "refresh.rotate", "to": "session.persist.refresh" }
287
+ ]
288
+ },
289
+ "diagnostics": { "ok": true, "issues": [] },
290
+ "hash": {
291
+ "kind": "topology",
292
+ "algorithm": "sha256",
293
+ "input": "strictCanonicalTopologyBytes",
294
+ "value": "2222222222222222222222222222222222222222222222222222222222222222"
295
+ }
296
+ },
297
+ "topologyHash": {
298
+ "algorithm": "sha256",
299
+ "value": "2222222222222222222222222222222222222222222222222222222222222222"
300
+ },
301
+ "policyRevision": "session-writes.v2"
302
+ },
303
+ {
304
+ "schema": "urn:graphrefly-stack:schema:blueprint-snapshot:v1",
305
+ "commit": { "algorithm": "sha1", "value": "7777777777777777777777777777777777777777" },
306
+ "semanticParent": {
307
+ "algorithm": "sha1",
308
+ "value": "3333333333333333333333333333333333333333"
309
+ },
310
+ "provider": {
311
+ "schema": "urn:graphrefly-stack:schema:blueprint-provider-capabilities:v1",
312
+ "providerId": "graphrefly",
313
+ "providerVersion": "0.1.1",
314
+ "blueprintVersion": "graphrefly.blueprint.v1",
315
+ "capabilities": {
316
+ "commitSnapshot": true,
317
+ "canonicalTopologyBytes": true,
318
+ "nodeMetadata": true,
319
+ "subgraphs": true,
320
+ "diagnostics": true,
321
+ "structuralDelta": true,
322
+ "mergeParentSelection": false,
323
+ "claimImpact": false
324
+ }
325
+ },
326
+ "blueprint": {
327
+ "version": "graphrefly.blueprint.v1",
328
+ "topology": {
329
+ "name": "session",
330
+ "nodes": [
331
+ { "id": "password-reset.intent", "factory": "state", "deps": [] },
332
+ {
333
+ "id": "session.persist.password-reset",
334
+ "factory": "effect",
335
+ "deps": ["password-reset.intent"]
336
+ },
337
+ { "id": "refresh.request", "factory": "state", "deps": [] },
338
+ { "id": "refresh.validate", "factory": "derived", "deps": ["refresh.request"] },
339
+ { "id": "refresh.rotate", "factory": "derived", "deps": ["refresh.validate"] },
340
+ { "id": "session.persist.refresh", "factory": "effect", "deps": ["refresh.rotate"] },
341
+ { "id": "telemetry.session", "factory": "effect", "deps": ["refresh.rotate"] }
342
+ ],
343
+ "edges": [
344
+ { "from": "password-reset.intent", "to": "session.persist.password-reset" },
345
+ { "from": "refresh.request", "to": "refresh.validate" },
346
+ { "from": "refresh.validate", "to": "refresh.rotate" },
347
+ { "from": "refresh.rotate", "to": "session.persist.refresh" },
348
+ { "from": "refresh.rotate", "to": "telemetry.session" }
349
+ ]
350
+ },
351
+ "diagnostics": { "ok": true, "issues": [] },
352
+ "hash": {
353
+ "kind": "topology",
354
+ "algorithm": "sha256",
355
+ "input": "strictCanonicalTopologyBytes",
356
+ "value": "3333333333333333333333333333333333333333333333333333333333333333"
357
+ }
358
+ },
359
+ "topologyHash": {
360
+ "algorithm": "sha256",
361
+ "value": "3333333333333333333333333333333333333333333333333333333333333333"
362
+ },
363
+ "policyRevision": "session-writes.v1"
364
+ },
365
+ {
366
+ "schema": "urn:graphrefly-stack:schema:blueprint-snapshot:v1",
367
+ "commit": { "algorithm": "sha1", "value": "9999999999999999999999999999999999999999" },
368
+ "semanticParent": {
369
+ "algorithm": "sha1",
370
+ "value": "8888888888888888888888888888888888888888"
371
+ },
372
+ "provider": {
373
+ "schema": "urn:graphrefly-stack:schema:blueprint-provider-capabilities:v1",
374
+ "providerId": "graphrefly",
375
+ "providerVersion": "0.1.1",
376
+ "blueprintVersion": "graphrefly.blueprint.v1",
377
+ "capabilities": {
378
+ "commitSnapshot": true,
379
+ "canonicalTopologyBytes": true,
380
+ "nodeMetadata": true,
381
+ "subgraphs": true,
382
+ "diagnostics": true,
383
+ "structuralDelta": true,
384
+ "mergeParentSelection": false,
385
+ "claimImpact": false
386
+ }
387
+ },
388
+ "blueprint": {
389
+ "version": "graphrefly.blueprint.v1",
390
+ "topology": {
391
+ "name": "session",
392
+ "nodes": [
393
+ { "id": "password-reset.intent", "factory": "state", "deps": [] },
394
+ {
395
+ "id": "session.mutation-broker.password-reset",
396
+ "factory": "sessionMutationBroker",
397
+ "deps": ["password-reset.intent"]
398
+ },
399
+ {
400
+ "id": "session.persist.password-reset",
401
+ "factory": "effect",
402
+ "deps": ["session.mutation-broker.password-reset"]
403
+ },
404
+ { "id": "refresh.request", "factory": "state", "deps": [] },
405
+ { "id": "refresh.validate", "factory": "derived", "deps": ["refresh.request"] },
406
+ { "id": "refresh.rotate", "factory": "derived", "deps": ["refresh.validate"] },
407
+ {
408
+ "id": "session.mutation-broker.refresh",
409
+ "factory": "sessionMutationBroker",
410
+ "deps": ["refresh.rotate"]
411
+ },
412
+ {
413
+ "id": "session.persist.refresh",
414
+ "factory": "effect",
415
+ "deps": ["session.mutation-broker.refresh"]
416
+ }
417
+ ],
418
+ "edges": [
419
+ { "from": "password-reset.intent", "to": "session.mutation-broker.password-reset" },
420
+ {
421
+ "from": "session.mutation-broker.password-reset",
422
+ "to": "session.persist.password-reset"
423
+ },
424
+ { "from": "refresh.request", "to": "refresh.validate" },
425
+ { "from": "refresh.validate", "to": "refresh.rotate" },
426
+ { "from": "refresh.rotate", "to": "session.mutation-broker.refresh" },
427
+ { "from": "session.mutation-broker.refresh", "to": "session.persist.refresh" }
428
+ ]
429
+ },
430
+ "diagnostics": { "ok": true, "issues": [] },
431
+ "hash": {
432
+ "kind": "topology",
433
+ "algorithm": "sha256",
434
+ "input": "strictCanonicalTopologyBytes",
435
+ "value": "4444444444444444444444444444444444444444444444444444444444444444"
436
+ }
437
+ },
438
+ "topologyHash": {
439
+ "algorithm": "sha256",
440
+ "value": "4444444444444444444444444444444444444444444444444444444444444444"
441
+ },
442
+ "policyRevision": "session-writes.v2"
443
+ }
444
+ ],
445
+ "deltas": [
446
+ {
447
+ "schema": "urn:graphrefly-stack:schema:blueprint-delta:v1",
448
+ "from": {
449
+ "algorithm": "sha256",
450
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
451
+ },
452
+ "to": {
453
+ "algorithm": "sha256",
454
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
455
+ },
456
+ "structural": {
457
+ "addedNodes": [],
458
+ "removedNodeIds": [],
459
+ "addedEdges": [],
460
+ "removedEdges": []
461
+ },
462
+ "claimImpacts": [
463
+ { "workUnitId": "U1", "claimId": "contracts", "impact": "none" },
464
+ { "workUnitId": "U2", "claimId": "session-write-path", "impact": "none" },
465
+ { "workUnitId": "U3", "claimId": "refresh-runtime", "impact": "none" }
466
+ ]
467
+ },
468
+ {
469
+ "schema": "urn:graphrefly-stack:schema:blueprint-delta:v1",
470
+ "from": {
471
+ "algorithm": "sha256",
472
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
473
+ },
474
+ "to": {
475
+ "algorithm": "sha256",
476
+ "value": "2222222222222222222222222222222222222222222222222222222222222222"
477
+ },
478
+ "structural": {
479
+ "addedNodes": [
480
+ {
481
+ "id": "session.mutation-broker.password-reset",
482
+ "factory": "sessionMutationBroker",
483
+ "deps": ["password-reset.intent"]
484
+ }
485
+ ],
486
+ "removedNodeIds": [],
487
+ "addedEdges": [
488
+ { "from": "password-reset.intent", "to": "session.mutation-broker.password-reset" },
489
+ {
490
+ "from": "session.mutation-broker.password-reset",
491
+ "to": "session.persist.password-reset"
492
+ }
493
+ ],
494
+ "removedEdges": [
495
+ { "from": "password-reset.intent", "to": "session.persist.password-reset" }
496
+ ]
497
+ },
498
+ "claimImpacts": [
499
+ { "workUnitId": "U1", "claimId": "contracts", "impact": "none" },
500
+ { "workUnitId": "U2", "claimId": "session-write-path", "impact": "affected" },
501
+ { "workUnitId": "U3", "claimId": "refresh-runtime", "impact": "none" }
502
+ ]
503
+ },
504
+ {
505
+ "schema": "urn:graphrefly-stack:schema:blueprint-delta:v1",
506
+ "from": {
507
+ "algorithm": "sha256",
508
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
509
+ },
510
+ "to": {
511
+ "algorithm": "sha256",
512
+ "value": "3333333333333333333333333333333333333333333333333333333333333333"
513
+ },
514
+ "structural": {
515
+ "addedNodes": [
516
+ { "id": "telemetry.session", "factory": "effect", "deps": ["refresh.rotate"] }
517
+ ],
518
+ "removedNodeIds": [],
519
+ "addedEdges": [{ "from": "refresh.rotate", "to": "telemetry.session" }],
520
+ "removedEdges": []
521
+ },
522
+ "claimImpacts": [
523
+ { "workUnitId": "U1", "claimId": "contracts", "impact": "none" },
524
+ { "workUnitId": "U2", "claimId": "session-write-path", "impact": "none" },
525
+ { "workUnitId": "U3", "claimId": "refresh-runtime", "impact": "none" }
526
+ ]
527
+ },
528
+ {
529
+ "schema": "urn:graphrefly-stack:schema:blueprint-delta:v1",
530
+ "from": {
531
+ "algorithm": "sha256",
532
+ "value": "2222222222222222222222222222222222222222222222222222222222222222"
533
+ },
534
+ "to": {
535
+ "algorithm": "sha256",
536
+ "value": "4444444444444444444444444444444444444444444444444444444444444444"
537
+ },
538
+ "structural": {
539
+ "addedNodes": [
540
+ {
541
+ "id": "session.mutation-broker.refresh",
542
+ "factory": "sessionMutationBroker",
543
+ "deps": ["refresh.rotate"]
544
+ }
545
+ ],
546
+ "removedNodeIds": [],
547
+ "addedEdges": [
548
+ { "from": "refresh.rotate", "to": "session.mutation-broker.refresh" },
549
+ { "from": "session.mutation-broker.refresh", "to": "session.persist.refresh" }
550
+ ],
551
+ "removedEdges": [{ "from": "refresh.rotate", "to": "session.persist.refresh" }]
552
+ },
553
+ "claimImpacts": [
554
+ { "workUnitId": "U1", "claimId": "contracts", "impact": "none" },
555
+ { "workUnitId": "U2", "claimId": "session-write-path", "impact": "none" },
556
+ { "workUnitId": "U3", "claimId": "refresh-runtime", "impact": "none" }
557
+ ]
558
+ }
559
+ ],
560
+ "semanticChanges": [
561
+ {
562
+ "schema": "urn:graphrefly-stack:schema:semantic-change-record:v1",
563
+ "recordId": "record.u1.s1",
564
+ "workUnitId": "U1",
565
+ "commit": { "algorithm": "sha1", "value": "1111111111111111111111111111111111111111" },
566
+ "stablePatchId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
567
+ "diffDigest": {
568
+ "algorithm": "sha256",
569
+ "value": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
570
+ },
571
+ "semanticParentRecordId": null,
572
+ "semanticParentCommit": {
573
+ "algorithm": "sha1",
574
+ "value": "0000000000000000000000000000000000000001"
575
+ },
576
+ "allowedSourceScopes": ["src/session/contracts.ts", "tests/session/contracts.test.ts"],
577
+ "sourceScopeDigest": {
578
+ "algorithm": "sha256",
579
+ "value": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
580
+ },
581
+ "blueprintClaims": [],
582
+ "dependencies": [],
583
+ "requiredChecks": ["contracts"],
584
+ "blueprintHash": {
585
+ "algorithm": "sha256",
586
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
587
+ },
588
+ "policyRevision": "session-writes.v1",
589
+ "providerId": "graphrefly",
590
+ "providerVersion": "0.1.1",
591
+ "contractVersion": "v1",
592
+ "rebindFrom": null
593
+ },
594
+ {
595
+ "schema": "urn:graphrefly-stack:schema:semantic-change-record:v1",
596
+ "recordId": "record.u2.s2",
597
+ "workUnitId": "U2",
598
+ "commit": { "algorithm": "sha1", "value": "2222222222222222222222222222222222222222" },
599
+ "stablePatchId": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
600
+ "diffDigest": {
601
+ "algorithm": "sha256",
602
+ "value": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
603
+ },
604
+ "semanticParentRecordId": "record.u1.s1",
605
+ "semanticParentCommit": {
606
+ "algorithm": "sha1",
607
+ "value": "1111111111111111111111111111111111111111"
608
+ },
609
+ "allowedSourceScopes": [
610
+ "src/session/flows/refresh-flow.ts",
611
+ "tests/session/refresh-flow.test.ts"
612
+ ],
613
+ "sourceScopeDigest": {
614
+ "algorithm": "sha256",
615
+ "value": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
616
+ },
617
+ "blueprintClaims": ["session-write-path"],
618
+ "dependencies": ["U1"],
619
+ "requiredChecks": ["refresh-runtime"],
620
+ "blueprintHash": {
621
+ "algorithm": "sha256",
622
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
623
+ },
624
+ "policyRevision": "session-writes.v1",
625
+ "providerId": "graphrefly",
626
+ "providerVersion": "0.1.1",
627
+ "contractVersion": "v1",
628
+ "rebindFrom": null
629
+ },
630
+ {
631
+ "schema": "urn:graphrefly-stack:schema:semantic-change-record:v1",
632
+ "recordId": "record.u3.s3",
633
+ "workUnitId": "U3",
634
+ "commit": { "algorithm": "sha1", "value": "3333333333333333333333333333333333333333" },
635
+ "stablePatchId": "cccccccccccccccccccccccccccccccccccccccc",
636
+ "diffDigest": {
637
+ "algorithm": "sha256",
638
+ "value": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
639
+ },
640
+ "semanticParentRecordId": "record.u2.s2",
641
+ "semanticParentCommit": {
642
+ "algorithm": "sha1",
643
+ "value": "2222222222222222222222222222222222222222"
644
+ },
645
+ "allowedSourceScopes": ["src/http/refresh-route.ts", "tests/http/refresh-route.test.ts"],
646
+ "sourceScopeDigest": {
647
+ "algorithm": "sha256",
648
+ "value": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
649
+ },
650
+ "blueprintClaims": ["refresh-runtime"],
651
+ "dependencies": ["U2"],
652
+ "requiredChecks": ["refresh-api"],
653
+ "blueprintHash": {
654
+ "algorithm": "sha256",
655
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
656
+ },
657
+ "policyRevision": "session-writes.v1",
658
+ "providerId": "graphrefly",
659
+ "providerVersion": "0.1.1",
660
+ "contractVersion": "v1",
661
+ "rebindFrom": null
662
+ }
663
+ ],
664
+ "checks": [
665
+ {
666
+ "schema": "urn:graphrefly-stack:schema:check-result:v1",
667
+ "checkId": "contracts",
668
+ "command": ["pnpm", "test:contracts"],
669
+ "exitCode": 0,
670
+ "stdoutDigest": {
671
+ "algorithm": "sha256",
672
+ "value": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
673
+ },
674
+ "stderrDigest": {
675
+ "algorithm": "sha256",
676
+ "value": "0000000000000000000000000000000000000000000000000000000000000000"
677
+ }
678
+ },
679
+ {
680
+ "schema": "urn:graphrefly-stack:schema:check-result:v1",
681
+ "checkId": "refresh-runtime",
682
+ "command": ["pnpm", "test:refresh-runtime"],
683
+ "exitCode": 0,
684
+ "stdoutDigest": {
685
+ "algorithm": "sha256",
686
+ "value": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
687
+ },
688
+ "stderrDigest": {
689
+ "algorithm": "sha256",
690
+ "value": "0000000000000000000000000000000000000000000000000000000000000000"
691
+ }
692
+ },
693
+ {
694
+ "schema": "urn:graphrefly-stack:schema:check-result:v1",
695
+ "checkId": "refresh-api",
696
+ "command": ["pnpm", "test:refresh-api"],
697
+ "exitCode": 0,
698
+ "stdoutDigest": {
699
+ "algorithm": "sha256",
700
+ "value": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
701
+ },
702
+ "stderrDigest": {
703
+ "algorithm": "sha256",
704
+ "value": "0000000000000000000000000000000000000000000000000000000000000000"
705
+ }
706
+ }
707
+ ],
708
+ "cases": [
709
+ {
710
+ "caseId": "current-valid",
711
+ "baseSnapshotIndex": 0,
712
+ "currentSnapshotIndex": 0,
713
+ "deltaIndex": 0,
714
+ "expectedGate": {
715
+ "schema": "urn:graphrefly-stack:schema:gate-result:v1",
716
+ "gateVersion": "v1",
717
+ "inputDigest": {
718
+ "algorithm": "sha256",
719
+ "value": "1111111111111111111111111111111111111111111111111111111111111111"
720
+ },
721
+ "verdict": "pass",
722
+ "units": [
723
+ { "workUnitId": "U1", "verdict": "valid", "reasonCodes": [], "invalidDependencies": [] },
724
+ { "workUnitId": "U2", "verdict": "valid", "reasonCodes": [], "invalidDependencies": [] },
725
+ { "workUnitId": "U3", "verdict": "valid", "reasonCodes": [], "invalidDependencies": [] }
726
+ ],
727
+ "checkIds": ["contracts", "refresh-runtime", "refresh-api"]
728
+ },
729
+ "selectiveReplan": null,
730
+ "reviewDecision": {
731
+ "schema": "urn:graphrefly-stack:schema:review-decision:v1",
732
+ "decision": "approve",
733
+ "reviewerLabel": "fixture-reviewer",
734
+ "recordIds": ["record.u1.s1", "record.u2.s2", "record.u3.s3"],
735
+ "recordedAt": "2026-07-16T00:00:00Z",
736
+ "identityVerified": false
737
+ }
738
+ },
739
+ {
740
+ "caseId": "clean-rebase-semantic-stale",
741
+ "baseSnapshotIndex": 0,
742
+ "currentSnapshotIndex": 1,
743
+ "deltaIndex": 1,
744
+ "expectedGate": {
745
+ "schema": "urn:graphrefly-stack:schema:gate-result:v1",
746
+ "gateVersion": "v1",
747
+ "inputDigest": {
748
+ "algorithm": "sha256",
749
+ "value": "2222222222222222222222222222222222222222222222222222222222222222"
750
+ },
751
+ "verdict": "blocked",
752
+ "units": [
753
+ { "workUnitId": "U1", "verdict": "valid", "reasonCodes": [], "invalidDependencies": [] },
754
+ {
755
+ "workUnitId": "U2",
756
+ "verdict": "invalid",
757
+ "reasonCodes": ["BLUEPRINT_WITNESS_STALE", "POLICY_SESSION_WRITE_REQUIRES_BROKER"],
758
+ "invalidDependencies": []
759
+ },
760
+ {
761
+ "workUnitId": "U3",
762
+ "verdict": "invalid",
763
+ "reasonCodes": ["DEPENDENCY_INVALID"],
764
+ "invalidDependencies": ["U2"]
765
+ }
766
+ ],
767
+ "checkIds": ["contracts", "refresh-runtime", "refresh-api"]
768
+ },
769
+ "selectiveReplan": null,
770
+ "reviewDecision": {
771
+ "schema": "urn:graphrefly-stack:schema:review-decision:v1",
772
+ "decision": "defer",
773
+ "reviewerLabel": "fixture-reviewer",
774
+ "recordIds": ["record.u1.s1"],
775
+ "recordedAt": "2026-07-16T00:00:00Z",
776
+ "identityVerified": false
777
+ }
778
+ },
779
+ {
780
+ "caseId": "unrelated-change-still-valid",
781
+ "baseSnapshotIndex": 0,
782
+ "currentSnapshotIndex": 2,
783
+ "deltaIndex": 2,
784
+ "expectedGate": {
785
+ "schema": "urn:graphrefly-stack:schema:gate-result:v1",
786
+ "gateVersion": "v1",
787
+ "inputDigest": {
788
+ "algorithm": "sha256",
789
+ "value": "3333333333333333333333333333333333333333333333333333333333333333"
790
+ },
791
+ "verdict": "pass",
792
+ "units": [
793
+ { "workUnitId": "U1", "verdict": "valid", "reasonCodes": [], "invalidDependencies": [] },
794
+ { "workUnitId": "U2", "verdict": "valid", "reasonCodes": [], "invalidDependencies": [] },
795
+ { "workUnitId": "U3", "verdict": "valid", "reasonCodes": [], "invalidDependencies": [] }
796
+ ],
797
+ "checkIds": ["contracts", "refresh-runtime", "refresh-api"]
798
+ },
799
+ "selectiveReplan": null,
800
+ "reviewDecision": {
801
+ "schema": "urn:graphrefly-stack:schema:review-decision:v1",
802
+ "decision": "approve",
803
+ "reviewerLabel": "fixture-reviewer",
804
+ "recordIds": ["record.u1.s1", "record.u2.s2", "record.u3.s3"],
805
+ "recordedAt": "2026-07-16T00:00:00Z",
806
+ "identityVerified": false
807
+ }
808
+ },
809
+ {
810
+ "caseId": "stale-parent",
811
+ "baseSnapshotIndex": 0,
812
+ "currentSnapshotIndex": 0,
813
+ "deltaIndex": 0,
814
+ "expectedGate": {
815
+ "schema": "urn:graphrefly-stack:schema:gate-result:v1",
816
+ "gateVersion": "v1",
817
+ "inputDigest": {
818
+ "algorithm": "sha256",
819
+ "value": "4444444444444444444444444444444444444444444444444444444444444444"
820
+ },
821
+ "verdict": "blocked",
822
+ "units": [
823
+ { "workUnitId": "U1", "verdict": "valid", "reasonCodes": [], "invalidDependencies": [] },
824
+ {
825
+ "workUnitId": "U2",
826
+ "verdict": "invalid",
827
+ "reasonCodes": ["SEMANTIC_PARENT_STALE"],
828
+ "invalidDependencies": []
829
+ },
830
+ {
831
+ "workUnitId": "U3",
832
+ "verdict": "invalid",
833
+ "reasonCodes": ["DEPENDENCY_INVALID"],
834
+ "invalidDependencies": ["U2"]
835
+ }
836
+ ],
837
+ "checkIds": ["contracts", "refresh-runtime", "refresh-api"]
838
+ },
839
+ "selectiveReplan": null,
840
+ "reviewDecision": {
841
+ "schema": "urn:graphrefly-stack:schema:review-decision:v1",
842
+ "decision": "defer",
843
+ "reviewerLabel": "fixture-reviewer",
844
+ "recordIds": ["record.u1.s1"],
845
+ "recordedAt": "2026-07-16T00:00:00Z",
846
+ "identityVerified": false
847
+ }
848
+ },
849
+ {
850
+ "caseId": "forged-or-wrong-scope",
851
+ "baseSnapshotIndex": 0,
852
+ "currentSnapshotIndex": 0,
853
+ "deltaIndex": 0,
854
+ "expectedGate": {
855
+ "schema": "urn:graphrefly-stack:schema:gate-result:v1",
856
+ "gateVersion": "v1",
857
+ "inputDigest": {
858
+ "algorithm": "sha256",
859
+ "value": "5555555555555555555555555555555555555555555555555555555555555555"
860
+ },
861
+ "verdict": "blocked",
862
+ "units": [
863
+ {
864
+ "workUnitId": "U1",
865
+ "verdict": "invalid",
866
+ "reasonCodes": ["COMMIT_BINDING_MISMATCH"],
867
+ "invalidDependencies": []
868
+ },
869
+ {
870
+ "workUnitId": "U2",
871
+ "verdict": "invalid",
872
+ "reasonCodes": ["SOURCE_SCOPE_VIOLATION", "DEPENDENCY_INVALID"],
873
+ "invalidDependencies": ["U1"]
874
+ },
875
+ {
876
+ "workUnitId": "U3",
877
+ "verdict": "invalid",
878
+ "reasonCodes": ["DEPENDENCY_INVALID"],
879
+ "invalidDependencies": ["U2"]
880
+ }
881
+ ],
882
+ "checkIds": ["contracts", "refresh-runtime", "refresh-api"]
883
+ },
884
+ "selectiveReplan": null,
885
+ "reviewDecision": {
886
+ "schema": "urn:graphrefly-stack:schema:review-decision:v1",
887
+ "decision": "reject",
888
+ "reviewerLabel": "fixture-reviewer",
889
+ "recordIds": [],
890
+ "recordedAt": "2026-07-16T00:00:00Z",
891
+ "identityVerified": false
892
+ }
893
+ },
894
+ {
895
+ "caseId": "fresh-selective-replan",
896
+ "baseSnapshotIndex": 1,
897
+ "currentSnapshotIndex": 3,
898
+ "deltaIndex": 3,
899
+ "expectedGate": {
900
+ "schema": "urn:graphrefly-stack:schema:gate-result:v1",
901
+ "gateVersion": "v1",
902
+ "inputDigest": {
903
+ "algorithm": "sha256",
904
+ "value": "6666666666666666666666666666666666666666666666666666666666666666"
905
+ },
906
+ "verdict": "pass",
907
+ "units": [
908
+ { "workUnitId": "U1", "verdict": "valid", "reasonCodes": [], "invalidDependencies": [] },
909
+ { "workUnitId": "U2", "verdict": "valid", "reasonCodes": [], "invalidDependencies": [] },
910
+ { "workUnitId": "U3", "verdict": "valid", "reasonCodes": [], "invalidDependencies": [] }
911
+ ],
912
+ "checkIds": ["contracts", "refresh-runtime", "refresh-api"]
913
+ },
914
+ "selectiveReplan": {
915
+ "schema": "urn:graphrefly-stack:schema:selective-replan:v1",
916
+ "planId": "plan.refresh-token-rotation.v1.replan.1",
917
+ "inputUnits": ["U2", "U3"],
918
+ "preservedUnits": ["U1"],
919
+ "replacements": [
920
+ {
921
+ "workUnitId": "U2",
922
+ "fromCommit": {
923
+ "algorithm": "sha1",
924
+ "value": "5555555555555555555555555555555555555555"
925
+ },
926
+ "toCommit": { "algorithm": "sha1", "value": "8888888888888888888888888888888888888888" }
927
+ },
928
+ {
929
+ "workUnitId": "U3",
930
+ "fromCommit": {
931
+ "algorithm": "sha1",
932
+ "value": "6666666666666666666666666666666666666666"
933
+ },
934
+ "toCommit": { "algorithm": "sha1", "value": "9999999999999999999999999999999999999999" }
935
+ }
936
+ ],
937
+ "finalLineage": [
938
+ { "algorithm": "sha1", "value": "4444444444444444444444444444444444444444" },
939
+ { "algorithm": "sha1", "value": "3333333333333333333333333333333333333333" },
940
+ { "algorithm": "sha1", "value": "8888888888888888888888888888888888888888" },
941
+ { "algorithm": "sha1", "value": "9999999999999999999999999999999999999999" }
942
+ ]
943
+ },
944
+ "reviewDecision": {
945
+ "schema": "urn:graphrefly-stack:schema:review-decision:v1",
946
+ "decision": "approve",
947
+ "reviewerLabel": "fixture-reviewer",
948
+ "recordIds": ["record.u1.s1", "record.u2.s2", "record.u3.s3"],
949
+ "recordedAt": "2026-07-16T00:00:00Z",
950
+ "identityVerified": false
951
+ }
952
+ }
953
+ ]
954
+ }