glamsterdam-compat-lab 0.2.2 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/CONTRIBUTING.md +1 -1
  2. package/README.md +44 -5
  3. package/ROADMAP.md +8 -2
  4. package/data/client-compat/clients.example.json +15 -0
  5. package/datasets/public-seed/README.md +26 -0
  6. package/datasets/public-seed/comparisons/bytecode-storage-heavy--default-vs-research.json +168 -0
  7. package/datasets/public-seed/comparisons/traces-besu-debug-structlogs--default-vs-research.json +91 -0
  8. package/datasets/public-seed/comparisons/traces-besu-mainnet-tracoor-debug-structlogs--default-vs-research.json +140 -0
  9. package/datasets/public-seed/comparisons/traces-call-tracer-tree--default-vs-research.json +121 -0
  10. package/datasets/public-seed/comparisons/traces-drpc-call-tracer-real--default-vs-research.json +123 -0
  11. package/datasets/public-seed/comparisons/traces-erigon-action-trace--default-vs-research.json +121 -0
  12. package/datasets/public-seed/comparisons/traces-foundry-json-trace--default-vs-research.json +124 -0
  13. package/datasets/public-seed/comparisons/traces-geth-json-rpc-structlogs--default-vs-research.json +108 -0
  14. package/datasets/public-seed/comparisons/traces-hardhat-debug-trace--default-vs-research.json +108 -0
  15. package/datasets/public-seed/comparisons/traces-nethermind-debug-structlogs--default-vs-research.json +153 -0
  16. package/datasets/public-seed/comparisons/traces-nethermind-mainnet-tracoor-debug-structlogs--default-vs-research.json +140 -0
  17. package/datasets/public-seed/comparisons/traces-storage-heavy-trace--default-vs-research.json +155 -0
  18. package/datasets/public-seed/manifest.json +552 -0
  19. package/datasets/public-seed/reports/bytecode-storage-heavy--default.json +172 -0
  20. package/datasets/public-seed/reports/bytecode-storage-heavy--research.json +172 -0
  21. package/datasets/public-seed/reports/indexers-balance-diff-indexer--default.json +63 -0
  22. package/datasets/public-seed/reports/indexers-explorer-replay-indexer--default.json +45 -0
  23. package/datasets/public-seed/reports/indexers-subgraph--default.json +123 -0
  24. package/datasets/public-seed/reports/traces-besu-debug-structlogs--default.json +54 -0
  25. package/datasets/public-seed/reports/traces-besu-debug-structlogs--research.json +54 -0
  26. package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--default.json +131 -0
  27. package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--research.json +131 -0
  28. package/datasets/public-seed/reports/traces-call-tracer-tree--default.json +99 -0
  29. package/datasets/public-seed/reports/traces-call-tracer-tree--research.json +99 -0
  30. package/datasets/public-seed/reports/traces-drpc-call-tracer-real--default.json +103 -0
  31. package/datasets/public-seed/reports/traces-drpc-call-tracer-real--research.json +103 -0
  32. package/datasets/public-seed/reports/traces-erigon-action-trace--default.json +99 -0
  33. package/datasets/public-seed/reports/traces-erigon-action-trace--research.json +99 -0
  34. package/datasets/public-seed/reports/traces-foundry-json-trace--default.json +76 -0
  35. package/datasets/public-seed/reports/traces-foundry-json-trace--research.json +104 -0
  36. package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--default.json +78 -0
  37. package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--research.json +78 -0
  38. package/datasets/public-seed/reports/traces-hardhat-debug-trace--default.json +78 -0
  39. package/datasets/public-seed/reports/traces-hardhat-debug-trace--research.json +78 -0
  40. package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--default.json +100 -0
  41. package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--research.json +100 -0
  42. package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--default.json +131 -0
  43. package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--research.json +131 -0
  44. package/datasets/public-seed/reports/traces-storage-heavy-trace--default.json +151 -0
  45. package/datasets/public-seed/reports/traces-storage-heavy-trace--research.json +151 -0
  46. package/datasets/public-seed/reports/validator-operator-config--default.json +154 -0
  47. package/datasets/public-seed/reports/validator-operator-config-builder-gap--default.json +91 -0
  48. package/datasets/public-seed/reports/validator-operator-config-complete--default.json +27 -0
  49. package/dist/cli.js +17 -1
  50. package/dist/cli.js.map +1 -1
  51. package/dist/fixtures/provenance.d.ts +139 -0
  52. package/dist/fixtures/provenance.js +79 -0
  53. package/dist/fixtures/provenance.js.map +1 -0
  54. package/dist/index.d.ts +7 -4
  55. package/dist/index.js +5 -3
  56. package/dist/index.js.map +1 -1
  57. package/dist/reports/compareReports.d.ts +2 -0
  58. package/dist/reports/compareReports.js +201 -0
  59. package/dist/reports/compareReports.js.map +1 -0
  60. package/dist/reports/jsonReporter.d.ts +2 -1
  61. package/dist/reports/jsonReporter.js +4 -1
  62. package/dist/reports/jsonReporter.js.map +1 -1
  63. package/dist/reports/markdownReporter.d.ts +2 -1
  64. package/dist/reports/markdownReporter.js +74 -0
  65. package/dist/reports/markdownReporter.js.map +1 -1
  66. package/dist/reports/reportTypes.d.ts +517 -1
  67. package/dist/reports/reportTypes.js +86 -1
  68. package/dist/reports/reportTypes.js.map +1 -1
  69. package/dist/scanners/validatorScanner.d.ts +1 -1
  70. package/dist/scanners/validatorScanner.js +4 -2
  71. package/dist/scanners/validatorScanner.js.map +1 -1
  72. package/docs/fixtures.md +34 -0
  73. package/docs/release.md +26 -20
  74. package/examples/baseline-comparison.md +76 -0
  75. package/fixtures/indexers/explorer-replay-indexer.json +64 -0
  76. package/fixtures/provenance.json +697 -0
  77. package/fixtures/reports/baseline-default-report.json +68 -0
  78. package/fixtures/reports/candidate-research-report.json +68 -0
  79. package/fixtures/traces/besu-mainnet-tracoor-debug-structlogs.json +4217 -0
  80. package/fixtures/traces/nethermind-mainnet-tracoor-debug-structlogs.json +5419 -0
  81. package/fixtures/validator/operator-config-builder-gap.yaml +22 -0
  82. package/fixtures/validator/operator-config-complete.yaml +28 -0
  83. package/package.json +4 -2
@@ -0,0 +1,552 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "name": "public-seed",
4
+ "lastUpdated": "2026-05-11",
5
+ "description": "Deterministic seed dataset generated from safe-to-publish fixture inputs and threshold-profile comparisons.",
6
+ "toolVersion": "0.3.1",
7
+ "sourceManifest": "fixtures/provenance.json",
8
+ "thresholdProfiles": [
9
+ {
10
+ "name": "default",
11
+ "path": "data/detectors/thresholds.json"
12
+ },
13
+ {
14
+ "name": "research",
15
+ "path": "data/detectors/thresholds.research.json"
16
+ }
17
+ ],
18
+ "reports": [
19
+ {
20
+ "sourceFixture": "fixtures/bytecode/storage-heavy.hex",
21
+ "fixtureKind": "bytecode",
22
+ "thresholdProfile": "default",
23
+ "report": "reports/bytecode-storage-heavy--default.json",
24
+ "risk": "medium",
25
+ "findingCount": 6,
26
+ "findingIds": [
27
+ "bytecode.state-account-opcode-exposure",
28
+ "bytecode.calldata-copy-exposure",
29
+ "bytecode.contract-creation-opcodes",
30
+ "bytecode.storage-heavy-pattern",
31
+ "bytecode.log-opcodes-present",
32
+ "bytecode.manual-review-required"
33
+ ]
34
+ },
35
+ {
36
+ "sourceFixture": "fixtures/bytecode/storage-heavy.hex",
37
+ "fixtureKind": "bytecode",
38
+ "thresholdProfile": "research",
39
+ "report": "reports/bytecode-storage-heavy--research.json",
40
+ "risk": "medium",
41
+ "findingCount": 6,
42
+ "findingIds": [
43
+ "bytecode.state-account-opcode-exposure",
44
+ "bytecode.calldata-copy-exposure",
45
+ "bytecode.contract-creation-opcodes",
46
+ "bytecode.storage-heavy-pattern",
47
+ "bytecode.log-opcodes-present",
48
+ "bytecode.manual-review-required"
49
+ ]
50
+ },
51
+ {
52
+ "sourceFixture": "fixtures/indexers/balance-diff-indexer.json",
53
+ "fixtureKind": "indexer",
54
+ "thresholdProfile": "default",
55
+ "report": "reports/indexers-balance-diff-indexer--default.json",
56
+ "risk": "medium",
57
+ "findingCount": 2,
58
+ "findingIds": [
59
+ "indexer.balance-diff-native-transfer-assumption",
60
+ "indexer.missing-bal-readiness-metadata"
61
+ ]
62
+ },
63
+ {
64
+ "sourceFixture": "fixtures/indexers/explorer-replay-indexer.json",
65
+ "fixtureKind": "indexer",
66
+ "thresholdProfile": "default",
67
+ "report": "reports/indexers-explorer-replay-indexer--default.json",
68
+ "risk": "medium",
69
+ "findingCount": 1,
70
+ "findingIds": [
71
+ "indexer.balance-diff-native-transfer-assumption"
72
+ ]
73
+ },
74
+ {
75
+ "sourceFixture": "fixtures/indexers/subgraph.yaml",
76
+ "fixtureKind": "indexer",
77
+ "thresholdProfile": "default",
78
+ "report": "reports/indexers-subgraph--default.json",
79
+ "risk": "medium",
80
+ "findingCount": 5,
81
+ "findingIds": [
82
+ "indexer.event-only-assumption",
83
+ "indexer.native-eth-transfer-review-missing",
84
+ "indexer.missing-bal-readiness-metadata",
85
+ "indexer.missing-fork-compatibility-metadata",
86
+ "indexer.missing-replay-plan"
87
+ ]
88
+ },
89
+ {
90
+ "sourceFixture": "fixtures/traces/besu-debug-structlogs.json",
91
+ "fixtureKind": "trace",
92
+ "thresholdProfile": "default",
93
+ "report": "reports/traces-besu-debug-structlogs--default.json",
94
+ "risk": "low",
95
+ "findingCount": 1,
96
+ "findingIds": [
97
+ "trace.logs-calls-visible"
98
+ ]
99
+ },
100
+ {
101
+ "sourceFixture": "fixtures/traces/besu-debug-structlogs.json",
102
+ "fixtureKind": "trace",
103
+ "thresholdProfile": "research",
104
+ "report": "reports/traces-besu-debug-structlogs--research.json",
105
+ "risk": "low",
106
+ "findingCount": 1,
107
+ "findingIds": [
108
+ "trace.logs-calls-visible"
109
+ ]
110
+ },
111
+ {
112
+ "sourceFixture": "fixtures/traces/besu-mainnet-tracoor-debug-structlogs.json",
113
+ "fixtureKind": "trace",
114
+ "thresholdProfile": "default",
115
+ "report": "reports/traces-besu-mainnet-tracoor-debug-structlogs--default.json",
116
+ "risk": "medium",
117
+ "findingCount": 4,
118
+ "findingIds": [
119
+ "trace.state-heavy-execution-medium",
120
+ "trace.calldata-heavy-execution",
121
+ "trace.logs-calls-visible",
122
+ "trace.partial-evidence"
123
+ ]
124
+ },
125
+ {
126
+ "sourceFixture": "fixtures/traces/besu-mainnet-tracoor-debug-structlogs.json",
127
+ "fixtureKind": "trace",
128
+ "thresholdProfile": "research",
129
+ "report": "reports/traces-besu-mainnet-tracoor-debug-structlogs--research.json",
130
+ "risk": "medium",
131
+ "findingCount": 4,
132
+ "findingIds": [
133
+ "trace.state-heavy-execution-medium",
134
+ "trace.calldata-heavy-execution",
135
+ "trace.logs-calls-visible",
136
+ "trace.partial-evidence"
137
+ ]
138
+ },
139
+ {
140
+ "sourceFixture": "fixtures/traces/call-tracer-tree.json",
141
+ "fixtureKind": "trace",
142
+ "thresholdProfile": "default",
143
+ "report": "reports/traces-call-tracer-tree--default.json",
144
+ "risk": "medium",
145
+ "findingCount": 3,
146
+ "findingIds": [
147
+ "trace.contract-creation-executed",
148
+ "trace.logs-calls-visible",
149
+ "trace.partial-evidence"
150
+ ]
151
+ },
152
+ {
153
+ "sourceFixture": "fixtures/traces/call-tracer-tree.json",
154
+ "fixtureKind": "trace",
155
+ "thresholdProfile": "research",
156
+ "report": "reports/traces-call-tracer-tree--research.json",
157
+ "risk": "medium",
158
+ "findingCount": 3,
159
+ "findingIds": [
160
+ "trace.contract-creation-executed",
161
+ "trace.logs-calls-visible",
162
+ "trace.partial-evidence"
163
+ ]
164
+ },
165
+ {
166
+ "sourceFixture": "fixtures/traces/drpc-call-tracer-real.json",
167
+ "fixtureKind": "trace",
168
+ "thresholdProfile": "default",
169
+ "report": "reports/traces-drpc-call-tracer-real--default.json",
170
+ "risk": "medium",
171
+ "findingCount": 3,
172
+ "findingIds": [
173
+ "trace.calldata-heavy-execution",
174
+ "trace.logs-calls-visible",
175
+ "trace.partial-evidence"
176
+ ]
177
+ },
178
+ {
179
+ "sourceFixture": "fixtures/traces/drpc-call-tracer-real.json",
180
+ "fixtureKind": "trace",
181
+ "thresholdProfile": "research",
182
+ "report": "reports/traces-drpc-call-tracer-real--research.json",
183
+ "risk": "medium",
184
+ "findingCount": 3,
185
+ "findingIds": [
186
+ "trace.calldata-heavy-execution",
187
+ "trace.logs-calls-visible",
188
+ "trace.partial-evidence"
189
+ ]
190
+ },
191
+ {
192
+ "sourceFixture": "fixtures/traces/erigon-action-trace.json",
193
+ "fixtureKind": "trace",
194
+ "thresholdProfile": "default",
195
+ "report": "reports/traces-erigon-action-trace--default.json",
196
+ "risk": "medium",
197
+ "findingCount": 3,
198
+ "findingIds": [
199
+ "trace.contract-creation-executed",
200
+ "trace.logs-calls-visible",
201
+ "trace.partial-evidence"
202
+ ]
203
+ },
204
+ {
205
+ "sourceFixture": "fixtures/traces/erigon-action-trace.json",
206
+ "fixtureKind": "trace",
207
+ "thresholdProfile": "research",
208
+ "report": "reports/traces-erigon-action-trace--research.json",
209
+ "risk": "medium",
210
+ "findingCount": 3,
211
+ "findingIds": [
212
+ "trace.contract-creation-executed",
213
+ "trace.logs-calls-visible",
214
+ "trace.partial-evidence"
215
+ ]
216
+ },
217
+ {
218
+ "sourceFixture": "fixtures/traces/foundry-json-trace.json",
219
+ "fixtureKind": "trace",
220
+ "thresholdProfile": "default",
221
+ "report": "reports/traces-foundry-json-trace--default.json",
222
+ "risk": "medium",
223
+ "findingCount": 2,
224
+ "findingIds": [
225
+ "trace.contract-creation-executed",
226
+ "trace.logs-calls-visible"
227
+ ]
228
+ },
229
+ {
230
+ "sourceFixture": "fixtures/traces/foundry-json-trace.json",
231
+ "fixtureKind": "trace",
232
+ "thresholdProfile": "research",
233
+ "report": "reports/traces-foundry-json-trace--research.json",
234
+ "risk": "medium",
235
+ "findingCount": 3,
236
+ "findingIds": [
237
+ "trace.state-heavy-execution-medium",
238
+ "trace.contract-creation-executed",
239
+ "trace.logs-calls-visible"
240
+ ]
241
+ },
242
+ {
243
+ "sourceFixture": "fixtures/traces/geth-json-rpc-structlogs.json",
244
+ "fixtureKind": "trace",
245
+ "thresholdProfile": "default",
246
+ "report": "reports/traces-geth-json-rpc-structlogs--default.json",
247
+ "risk": "low",
248
+ "findingCount": 2,
249
+ "findingIds": [
250
+ "trace.calldata-heavy-execution",
251
+ "trace.logs-calls-visible"
252
+ ]
253
+ },
254
+ {
255
+ "sourceFixture": "fixtures/traces/geth-json-rpc-structlogs.json",
256
+ "fixtureKind": "trace",
257
+ "thresholdProfile": "research",
258
+ "report": "reports/traces-geth-json-rpc-structlogs--research.json",
259
+ "risk": "low",
260
+ "findingCount": 2,
261
+ "findingIds": [
262
+ "trace.calldata-heavy-execution",
263
+ "trace.logs-calls-visible"
264
+ ]
265
+ },
266
+ {
267
+ "sourceFixture": "fixtures/traces/hardhat-debug-trace.json",
268
+ "fixtureKind": "trace",
269
+ "thresholdProfile": "default",
270
+ "report": "reports/traces-hardhat-debug-trace--default.json",
271
+ "risk": "medium",
272
+ "findingCount": 2,
273
+ "findingIds": [
274
+ "trace.calldata-heavy-execution",
275
+ "trace.logs-calls-visible"
276
+ ]
277
+ },
278
+ {
279
+ "sourceFixture": "fixtures/traces/hardhat-debug-trace.json",
280
+ "fixtureKind": "trace",
281
+ "thresholdProfile": "research",
282
+ "report": "reports/traces-hardhat-debug-trace--research.json",
283
+ "risk": "medium",
284
+ "findingCount": 2,
285
+ "findingIds": [
286
+ "trace.calldata-heavy-execution",
287
+ "trace.logs-calls-visible"
288
+ ]
289
+ },
290
+ {
291
+ "sourceFixture": "fixtures/traces/nethermind-debug-structlogs.json",
292
+ "fixtureKind": "trace",
293
+ "thresholdProfile": "default",
294
+ "report": "reports/traces-nethermind-debug-structlogs--default.json",
295
+ "risk": "medium",
296
+ "findingCount": 3,
297
+ "findingIds": [
298
+ "trace.calldata-heavy-execution",
299
+ "trace.contract-creation-executed",
300
+ "trace.logs-calls-visible"
301
+ ]
302
+ },
303
+ {
304
+ "sourceFixture": "fixtures/traces/nethermind-debug-structlogs.json",
305
+ "fixtureKind": "trace",
306
+ "thresholdProfile": "research",
307
+ "report": "reports/traces-nethermind-debug-structlogs--research.json",
308
+ "risk": "medium",
309
+ "findingCount": 3,
310
+ "findingIds": [
311
+ "trace.calldata-heavy-execution",
312
+ "trace.contract-creation-executed",
313
+ "trace.logs-calls-visible"
314
+ ]
315
+ },
316
+ {
317
+ "sourceFixture": "fixtures/traces/nethermind-mainnet-tracoor-debug-structlogs.json",
318
+ "fixtureKind": "trace",
319
+ "thresholdProfile": "default",
320
+ "report": "reports/traces-nethermind-mainnet-tracoor-debug-structlogs--default.json",
321
+ "risk": "medium",
322
+ "findingCount": 4,
323
+ "findingIds": [
324
+ "trace.state-heavy-execution-medium",
325
+ "trace.calldata-heavy-execution",
326
+ "trace.logs-calls-visible",
327
+ "trace.partial-evidence"
328
+ ]
329
+ },
330
+ {
331
+ "sourceFixture": "fixtures/traces/nethermind-mainnet-tracoor-debug-structlogs.json",
332
+ "fixtureKind": "trace",
333
+ "thresholdProfile": "research",
334
+ "report": "reports/traces-nethermind-mainnet-tracoor-debug-structlogs--research.json",
335
+ "risk": "medium",
336
+ "findingCount": 4,
337
+ "findingIds": [
338
+ "trace.state-heavy-execution-medium",
339
+ "trace.calldata-heavy-execution",
340
+ "trace.logs-calls-visible",
341
+ "trace.partial-evidence"
342
+ ]
343
+ },
344
+ {
345
+ "sourceFixture": "fixtures/traces/storage-heavy-trace.json",
346
+ "fixtureKind": "trace",
347
+ "thresholdProfile": "default",
348
+ "report": "reports/traces-storage-heavy-trace--default.json",
349
+ "risk": "medium",
350
+ "findingCount": 5,
351
+ "findingIds": [
352
+ "trace.state-heavy-execution-medium",
353
+ "trace.calldata-heavy-execution",
354
+ "trace.contract-creation-executed",
355
+ "trace.logs-calls-visible",
356
+ "trace.partial-evidence"
357
+ ]
358
+ },
359
+ {
360
+ "sourceFixture": "fixtures/traces/storage-heavy-trace.json",
361
+ "fixtureKind": "trace",
362
+ "thresholdProfile": "research",
363
+ "report": "reports/traces-storage-heavy-trace--research.json",
364
+ "risk": "medium",
365
+ "findingCount": 5,
366
+ "findingIds": [
367
+ "trace.state-heavy-execution-medium",
368
+ "trace.calldata-heavy-execution",
369
+ "trace.contract-creation-executed",
370
+ "trace.logs-calls-visible",
371
+ "trace.partial-evidence"
372
+ ]
373
+ },
374
+ {
375
+ "sourceFixture": "fixtures/validator/operator-config-builder-gap.yaml",
376
+ "fixtureKind": "validator",
377
+ "thresholdProfile": "default",
378
+ "report": "reports/validator-operator-config-builder-gap--default.json",
379
+ "risk": "medium",
380
+ "findingCount": 3,
381
+ "findingIds": [
382
+ "validator.builder-enabled-without-endpoint",
383
+ "validator.missing-monitoring-endpoints",
384
+ "validator.missing-testnet-participation"
385
+ ]
386
+ },
387
+ {
388
+ "sourceFixture": "fixtures/validator/operator-config-complete.yaml",
389
+ "fixtureKind": "validator",
390
+ "thresholdProfile": "default",
391
+ "report": "reports/validator-operator-config-complete--default.json",
392
+ "risk": "low",
393
+ "findingCount": 0,
394
+ "findingIds": []
395
+ },
396
+ {
397
+ "sourceFixture": "fixtures/validator/operator-config.yaml",
398
+ "fixtureKind": "validator",
399
+ "thresholdProfile": "default",
400
+ "report": "reports/validator-operator-config--default.json",
401
+ "risk": "medium",
402
+ "findingCount": 6,
403
+ "findingIds": [
404
+ "validator.unknown-execution-client-compatibility",
405
+ "validator.unknown-consensus-client-compatibility",
406
+ "validator.missing-validator-client-version",
407
+ "validator.builder-enabled-without-endpoint",
408
+ "validator.missing-monitoring-endpoints",
409
+ "validator.missing-testnet-participation"
410
+ ]
411
+ }
412
+ ],
413
+ "comparisons": [
414
+ {
415
+ "sourceFixture": "fixtures/bytecode/storage-heavy.hex",
416
+ "baselineReport": "reports/bytecode-storage-heavy--default.json",
417
+ "candidateReport": "reports/bytecode-storage-heavy--research.json",
418
+ "comparison": "comparisons/bytecode-storage-heavy--default-vs-research.json",
419
+ "riskChange": "medium->medium (unchanged)",
420
+ "addedCount": 0,
421
+ "removedCount": 0,
422
+ "changedCount": 0,
423
+ "unchangedCount": 6
424
+ },
425
+ {
426
+ "sourceFixture": "fixtures/traces/besu-debug-structlogs.json",
427
+ "baselineReport": "reports/traces-besu-debug-structlogs--default.json",
428
+ "candidateReport": "reports/traces-besu-debug-structlogs--research.json",
429
+ "comparison": "comparisons/traces-besu-debug-structlogs--default-vs-research.json",
430
+ "riskChange": "low->low (unchanged)",
431
+ "addedCount": 0,
432
+ "removedCount": 0,
433
+ "changedCount": 0,
434
+ "unchangedCount": 1
435
+ },
436
+ {
437
+ "sourceFixture": "fixtures/traces/besu-mainnet-tracoor-debug-structlogs.json",
438
+ "baselineReport": "reports/traces-besu-mainnet-tracoor-debug-structlogs--default.json",
439
+ "candidateReport": "reports/traces-besu-mainnet-tracoor-debug-structlogs--research.json",
440
+ "comparison": "comparisons/traces-besu-mainnet-tracoor-debug-structlogs--default-vs-research.json",
441
+ "riskChange": "medium->medium (unchanged)",
442
+ "addedCount": 0,
443
+ "removedCount": 0,
444
+ "changedCount": 0,
445
+ "unchangedCount": 4
446
+ },
447
+ {
448
+ "sourceFixture": "fixtures/traces/call-tracer-tree.json",
449
+ "baselineReport": "reports/traces-call-tracer-tree--default.json",
450
+ "candidateReport": "reports/traces-call-tracer-tree--research.json",
451
+ "comparison": "comparisons/traces-call-tracer-tree--default-vs-research.json",
452
+ "riskChange": "medium->medium (unchanged)",
453
+ "addedCount": 0,
454
+ "removedCount": 0,
455
+ "changedCount": 0,
456
+ "unchangedCount": 3
457
+ },
458
+ {
459
+ "sourceFixture": "fixtures/traces/drpc-call-tracer-real.json",
460
+ "baselineReport": "reports/traces-drpc-call-tracer-real--default.json",
461
+ "candidateReport": "reports/traces-drpc-call-tracer-real--research.json",
462
+ "comparison": "comparisons/traces-drpc-call-tracer-real--default-vs-research.json",
463
+ "riskChange": "medium->medium (unchanged)",
464
+ "addedCount": 0,
465
+ "removedCount": 0,
466
+ "changedCount": 0,
467
+ "unchangedCount": 3
468
+ },
469
+ {
470
+ "sourceFixture": "fixtures/traces/erigon-action-trace.json",
471
+ "baselineReport": "reports/traces-erigon-action-trace--default.json",
472
+ "candidateReport": "reports/traces-erigon-action-trace--research.json",
473
+ "comparison": "comparisons/traces-erigon-action-trace--default-vs-research.json",
474
+ "riskChange": "medium->medium (unchanged)",
475
+ "addedCount": 0,
476
+ "removedCount": 0,
477
+ "changedCount": 0,
478
+ "unchangedCount": 3
479
+ },
480
+ {
481
+ "sourceFixture": "fixtures/traces/foundry-json-trace.json",
482
+ "baselineReport": "reports/traces-foundry-json-trace--default.json",
483
+ "candidateReport": "reports/traces-foundry-json-trace--research.json",
484
+ "comparison": "comparisons/traces-foundry-json-trace--default-vs-research.json",
485
+ "riskChange": "medium->medium (unchanged)",
486
+ "addedCount": 1,
487
+ "removedCount": 0,
488
+ "changedCount": 0,
489
+ "unchangedCount": 2
490
+ },
491
+ {
492
+ "sourceFixture": "fixtures/traces/geth-json-rpc-structlogs.json",
493
+ "baselineReport": "reports/traces-geth-json-rpc-structlogs--default.json",
494
+ "candidateReport": "reports/traces-geth-json-rpc-structlogs--research.json",
495
+ "comparison": "comparisons/traces-geth-json-rpc-structlogs--default-vs-research.json",
496
+ "riskChange": "low->low (unchanged)",
497
+ "addedCount": 0,
498
+ "removedCount": 0,
499
+ "changedCount": 0,
500
+ "unchangedCount": 2
501
+ },
502
+ {
503
+ "sourceFixture": "fixtures/traces/hardhat-debug-trace.json",
504
+ "baselineReport": "reports/traces-hardhat-debug-trace--default.json",
505
+ "candidateReport": "reports/traces-hardhat-debug-trace--research.json",
506
+ "comparison": "comparisons/traces-hardhat-debug-trace--default-vs-research.json",
507
+ "riskChange": "medium->medium (unchanged)",
508
+ "addedCount": 0,
509
+ "removedCount": 0,
510
+ "changedCount": 0,
511
+ "unchangedCount": 2
512
+ },
513
+ {
514
+ "sourceFixture": "fixtures/traces/nethermind-debug-structlogs.json",
515
+ "baselineReport": "reports/traces-nethermind-debug-structlogs--default.json",
516
+ "candidateReport": "reports/traces-nethermind-debug-structlogs--research.json",
517
+ "comparison": "comparisons/traces-nethermind-debug-structlogs--default-vs-research.json",
518
+ "riskChange": "medium->medium (unchanged)",
519
+ "addedCount": 0,
520
+ "removedCount": 0,
521
+ "changedCount": 1,
522
+ "unchangedCount": 2
523
+ },
524
+ {
525
+ "sourceFixture": "fixtures/traces/nethermind-mainnet-tracoor-debug-structlogs.json",
526
+ "baselineReport": "reports/traces-nethermind-mainnet-tracoor-debug-structlogs--default.json",
527
+ "candidateReport": "reports/traces-nethermind-mainnet-tracoor-debug-structlogs--research.json",
528
+ "comparison": "comparisons/traces-nethermind-mainnet-tracoor-debug-structlogs--default-vs-research.json",
529
+ "riskChange": "medium->medium (unchanged)",
530
+ "addedCount": 0,
531
+ "removedCount": 0,
532
+ "changedCount": 0,
533
+ "unchangedCount": 4
534
+ },
535
+ {
536
+ "sourceFixture": "fixtures/traces/storage-heavy-trace.json",
537
+ "baselineReport": "reports/traces-storage-heavy-trace--default.json",
538
+ "candidateReport": "reports/traces-storage-heavy-trace--research.json",
539
+ "comparison": "comparisons/traces-storage-heavy-trace--default-vs-research.json",
540
+ "riskChange": "medium->medium (unchanged)",
541
+ "addedCount": 0,
542
+ "removedCount": 0,
543
+ "changedCount": 0,
544
+ "unchangedCount": 5
545
+ }
546
+ ],
547
+ "limitations": [
548
+ "This seed dataset is fixture-based and intentionally small; it is not an aggregate measurement of public-chain Glamsterdam readiness.",
549
+ "Synthetic fixtures provide parser and detector coverage but do not prove real client behavior.",
550
+ "Threshold-profile comparisons are structural report differences, not final fork gas deltas."
551
+ ]
552
+ }