glamsterdam-compat-lab 0.3.2 → 0.3.3

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 (102) hide show
  1. package/CONTRIBUTING.md +2 -2
  2. package/README.md +8 -6
  3. package/ROADMAP.md +1 -1
  4. package/data/client-compat/clients.example.json +287 -2
  5. package/datasets/public-seed/comparisons/bytecode-ens-registry-mainnet-runtime--default-vs-research.json +3 -3
  6. package/datasets/public-seed/comparisons/bytecode-erc4337-entrypoint-v06-mainnet-runtime--default-vs-research.json +167 -0
  7. package/datasets/public-seed/comparisons/bytecode-multicall3-mainnet-runtime--default-vs-research.json +3 -3
  8. package/datasets/public-seed/comparisons/bytecode-safe-proxy-factory-v130-mainnet-runtime--default-vs-research.json +169 -0
  9. package/datasets/public-seed/comparisons/bytecode-storage-heavy--default-vs-research.json +3 -3
  10. package/datasets/public-seed/comparisons/bytecode-uniswap-v2-factory-mainnet-runtime--default-vs-research.json +3 -3
  11. package/datasets/public-seed/comparisons/bytecode-usdc-proxy-mainnet-runtime--default-vs-research.json +3 -3
  12. package/datasets/public-seed/comparisons/bytecode-weth9-mainnet-runtime--default-vs-research.json +3 -3
  13. package/datasets/public-seed/comparisons/traces-besu-debug-structlogs--default-vs-research.json +3 -3
  14. package/datasets/public-seed/comparisons/traces-besu-mainnet-tracoor-debug-structlogs--default-vs-research.json +3 -3
  15. package/datasets/public-seed/comparisons/traces-call-tracer-tree--default-vs-research.json +3 -3
  16. package/datasets/public-seed/comparisons/traces-drpc-call-tracer-real--default-vs-research.json +3 -3
  17. package/datasets/public-seed/comparisons/traces-erigon-action-trace--default-vs-research.json +3 -3
  18. package/datasets/public-seed/comparisons/traces-foundry-json-trace--default-vs-research.json +3 -3
  19. package/datasets/public-seed/comparisons/traces-geth-json-rpc-structlogs--default-vs-research.json +3 -3
  20. package/datasets/public-seed/comparisons/traces-geth-mainnet-tracoor-debug-structlogs--default-vs-research.json +141 -0
  21. package/datasets/public-seed/comparisons/traces-hardhat-debug-trace--default-vs-research.json +3 -3
  22. package/datasets/public-seed/comparisons/traces-nethermind-debug-structlogs--default-vs-research.json +3 -3
  23. package/datasets/public-seed/comparisons/traces-nethermind-mainnet-tracoor-debug-structlogs--default-vs-research.json +3 -3
  24. package/datasets/public-seed/comparisons/traces-reth-mainnet-tracoor-debug-structlogs--default-vs-research.json +141 -0
  25. package/datasets/public-seed/comparisons/traces-storage-heavy-trace--default-vs-research.json +3 -3
  26. package/datasets/public-seed/findings.csv +44 -0
  27. package/datasets/public-seed/manifest.json +190 -2
  28. package/datasets/public-seed/reports/bytecode-ens-registry-mainnet-runtime--default.json +1 -1
  29. package/datasets/public-seed/reports/bytecode-ens-registry-mainnet-runtime--research.json +1 -1
  30. package/datasets/public-seed/reports/bytecode-erc4337-entrypoint-v06-mainnet-runtime--default.json +170 -0
  31. package/datasets/public-seed/reports/bytecode-erc4337-entrypoint-v06-mainnet-runtime--research.json +170 -0
  32. package/datasets/public-seed/reports/bytecode-multicall3-mainnet-runtime--default.json +1 -1
  33. package/datasets/public-seed/reports/bytecode-multicall3-mainnet-runtime--research.json +1 -1
  34. package/datasets/public-seed/reports/bytecode-safe-proxy-factory-v130-mainnet-runtime--default.json +148 -0
  35. package/datasets/public-seed/reports/bytecode-safe-proxy-factory-v130-mainnet-runtime--research.json +171 -0
  36. package/datasets/public-seed/reports/bytecode-storage-heavy--default.json +1 -1
  37. package/datasets/public-seed/reports/bytecode-storage-heavy--research.json +1 -1
  38. package/datasets/public-seed/reports/bytecode-uniswap-v2-factory-mainnet-runtime--default.json +1 -1
  39. package/datasets/public-seed/reports/bytecode-uniswap-v2-factory-mainnet-runtime--research.json +1 -1
  40. package/datasets/public-seed/reports/bytecode-usdc-proxy-mainnet-runtime--default.json +1 -1
  41. package/datasets/public-seed/reports/bytecode-usdc-proxy-mainnet-runtime--research.json +1 -1
  42. package/datasets/public-seed/reports/bytecode-weth9-mainnet-runtime--default.json +1 -1
  43. package/datasets/public-seed/reports/bytecode-weth9-mainnet-runtime--research.json +1 -1
  44. package/datasets/public-seed/reports/indexers-balance-diff-indexer--default.json +1 -1
  45. package/datasets/public-seed/reports/indexers-explorer-replay-indexer--default.json +1 -1
  46. package/datasets/public-seed/reports/indexers-graph-network-subgraph-reduced--default.json +123 -0
  47. package/datasets/public-seed/reports/indexers-subgraph--default.json +1 -1
  48. package/datasets/public-seed/reports/traces-besu-debug-structlogs--default.json +1 -1
  49. package/datasets/public-seed/reports/traces-besu-debug-structlogs--research.json +1 -1
  50. package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--default.json +1 -1
  51. package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--research.json +1 -1
  52. package/datasets/public-seed/reports/traces-call-tracer-tree--default.json +1 -1
  53. package/datasets/public-seed/reports/traces-call-tracer-tree--research.json +1 -1
  54. package/datasets/public-seed/reports/traces-drpc-call-tracer-real--default.json +1 -1
  55. package/datasets/public-seed/reports/traces-drpc-call-tracer-real--research.json +1 -1
  56. package/datasets/public-seed/reports/traces-erigon-action-trace--default.json +1 -1
  57. package/datasets/public-seed/reports/traces-erigon-action-trace--research.json +1 -1
  58. package/datasets/public-seed/reports/traces-foundry-json-trace--default.json +1 -1
  59. package/datasets/public-seed/reports/traces-foundry-json-trace--research.json +1 -1
  60. package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--default.json +1 -1
  61. package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--research.json +1 -1
  62. package/datasets/public-seed/reports/traces-geth-mainnet-tracoor-debug-structlogs--default.json +103 -0
  63. package/datasets/public-seed/reports/traces-geth-mainnet-tracoor-debug-structlogs--research.json +131 -0
  64. package/datasets/public-seed/reports/traces-hardhat-debug-trace--default.json +1 -1
  65. package/datasets/public-seed/reports/traces-hardhat-debug-trace--research.json +1 -1
  66. package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--default.json +1 -1
  67. package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--research.json +1 -1
  68. package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--default.json +1 -1
  69. package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--research.json +1 -1
  70. package/datasets/public-seed/reports/traces-reth-mainnet-tracoor-debug-structlogs--default.json +103 -0
  71. package/datasets/public-seed/reports/traces-reth-mainnet-tracoor-debug-structlogs--research.json +131 -0
  72. package/datasets/public-seed/reports/traces-storage-heavy-trace--default.json +1 -1
  73. package/datasets/public-seed/reports/traces-storage-heavy-trace--research.json +1 -1
  74. package/datasets/public-seed/reports/validator-glamsterdam-devnet-operator-public--default.json +92 -0
  75. package/datasets/public-seed/reports/validator-operator-config--default.json +3 -3
  76. package/datasets/public-seed/reports/validator-operator-config-builder-gap--default.json +1 -1
  77. package/datasets/public-seed/reports/validator-operator-config-complete--default.json +1 -1
  78. package/datasets/public-seed/reports.csv +10 -0
  79. package/datasets/public-seed/summary.csv +37 -31
  80. package/datasets/public-seed/summary.json +57 -33
  81. package/dist/fixtures/provenance.d.ts +3 -0
  82. package/dist/fixtures/provenance.js +1 -0
  83. package/dist/fixtures/provenance.js.map +1 -1
  84. package/dist/reports/reportTypes.d.ts +1 -1
  85. package/dist/reports/reportTypes.js +1 -1
  86. package/dist/scanners/validatorScanner.d.ts +83 -1
  87. package/dist/scanners/validatorScanner.js +39 -3
  88. package/dist/scanners/validatorScanner.js.map +1 -1
  89. package/docs/client-compat.md +103 -0
  90. package/docs/dataset.md +115 -0
  91. package/docs/fixtures.md +10 -4
  92. package/docs/release.md +7 -29
  93. package/examples/baseline-comparison.md +1 -1
  94. package/examples/public-seed-analysis.md +190 -0
  95. package/fixtures/bytecode/erc4337-entrypoint-v06-mainnet-runtime.hex +1 -0
  96. package/fixtures/bytecode/safe-proxy-factory-v130-mainnet-runtime.hex +1 -0
  97. package/fixtures/indexers/graph-network-subgraph-reduced.yaml +66 -0
  98. package/fixtures/provenance.json +267 -1
  99. package/fixtures/traces/geth-mainnet-tracoor-debug-structlogs.json +2285 -0
  100. package/fixtures/traces/reth-mainnet-tracoor-debug-structlogs.json +2285 -0
  101. package/fixtures/validator/glamsterdam-devnet-operator-public.yaml +30 -0
  102. package/package.json +1 -1
package/CONTRIBUTING.md CHANGED
@@ -22,9 +22,9 @@ pnpm test:update
22
22
 
23
23
  Releases are published from semver tags. After CI is green on `main`, create the GitHub release tag, then run the manual `Publish npm` workflow from `main` with the release tag as `release_tag`.
24
24
 
25
- Start with `dry_run=true` for a new, unpublished release version. Real publishes use npm Trusted Publishing for `glamsterdam-compat-lab` with repository `CruzMolina/glamsterdam-compat-lab`, workflow file `npm-publish.yml`, and environment `npm-publish`. Do not configure `NPM_TOKEN` for the normal release path; use a short-lived token only as an emergency fallback, remove the GitHub secret immediately afterward, and revoke the npm token.
25
+ Start with `dry_run=true` for a new, unpublished release version. Real publishes use npm Trusted Publishing for `glamsterdam-compat-lab` with repository `CruzMolina/glamsterdam-compat-lab`, workflow file `npm-publish.yml`, and environment `npm-publish`. Do not configure `NPM_TOKEN`; the release workflow is intentionally tokenless and grants OIDC only to the isolated publish job.
26
26
 
27
- The workflow checks out the requested semver tag, verifies that `package.json` matches the tag, installs dependencies, runs tests, builds, and then runs `npm publish --provenance`.
27
+ The workflow checks out the requested semver tag in a read-only preflight job, verifies that `package.json` matches the tag, installs dependencies, runs tests, builds, packs the npm tarball, and uploads that tarball for the publish job. The publish job downloads the tarball and runs `npm publish --provenance` without dependency install, tests, or build steps.
28
28
 
29
29
  See `docs/release.md` for the full release checklist and npm troubleshooting notes.
30
30
 
package/README.md CHANGED
@@ -36,14 +36,14 @@ pnpm glamsterdam scan-bytecode fixtures/bytecode/storage-heavy.hex
36
36
  Install the published CLI from npm:
37
37
 
38
38
  ```sh
39
- npm install -g glamsterdam-compat-lab@0.3.2
39
+ npm install -g glamsterdam-compat-lab@0.3.3
40
40
  glamsterdam eips
41
41
  ```
42
42
 
43
- The v0.3.2 GitHub release tarball remains available as a reproducible release artifact:
43
+ The v0.3.3 GitHub release tarball remains available as a reproducible release artifact:
44
44
 
45
45
  ```sh
46
- npm install -g https://github.com/CruzMolina/glamsterdam-compat-lab/releases/download/v0.3.2/glamsterdam-compat-lab-0.3.2.tgz
46
+ npm install -g https://github.com/CruzMolina/glamsterdam-compat-lab/releases/download/v0.3.3/glamsterdam-compat-lab-0.3.3.tgz
47
47
  ```
48
48
 
49
49
  See [docs/release.md](docs/release.md) for maintainer release checks and npm publishing notes.
@@ -74,6 +74,8 @@ Each scanner accepts `--registry <path>` and `--thresholds <path>` so EIP metada
74
74
 
75
75
  Fixture provenance lives in [fixtures/provenance.json](fixtures/provenance.json). The first deterministic dataset seed lives in [datasets/public-seed](datasets/public-seed) and includes generated JSON reports, default-vs-research threshold comparisons for bytecode and trace fixtures, a `summary.json` file with aggregate counts, and CSV exports (`reports.csv`, `findings.csv`, `summary.csv`) for spreadsheet and warehouse import.
76
76
 
77
+ See [docs/dataset.md](docs/dataset.md) for the dataset file contract and [examples/public-seed-analysis.md](examples/public-seed-analysis.md) for lightweight analysis snippets.
78
+
77
79
  Regenerate it with:
78
80
 
79
81
  ```sh
@@ -121,7 +123,7 @@ Use `--trace-out <path>` to save the fetched JSON-RPC trace response while also
121
123
 
122
124
  `scan-indexer` parses JSON and YAML, including `subgraph.yaml`-style configs. It flags event-only indexing assumptions, missing fork/EIP compatibility metadata, missing replay or testnet plans, missing BAL review metadata, and native ETH transfer log readiness as heuristic findings.
123
125
 
124
- `scan-validator` parses JSON and YAML operator configs. It checks for execution, consensus, validator, builder/API, monitoring, and testnet/devnet metadata. It compares client names and versions against `data/client-compat/clients.example.json` or a user-provided matrix, but it does not guess compatibility.
126
+ `scan-validator` parses JSON and YAML operator configs. It checks for execution, consensus, validator, builder/API, monitoring, and testnet/devnet metadata. It compares client names and versions against `data/client-compat/clients.example.json` or a user-provided matrix, but it does not guess compatibility. See [docs/client-compat.md](docs/client-compat.md) for the sourced matrix format.
125
127
 
126
128
  `compare-reports` accepts two saved JSON compatibility reports and emits deterministic JSON or Markdown deltas. It compares findings by stable finding ID, reports findings added, removed, changed, and unchanged, and highlights severity and confidence changes. It does not invent exact gas deltas; those must come from explicit input data or future client outputs.
127
129
 
@@ -131,7 +133,7 @@ Each scanner returns a `CompatibilityReport`:
131
133
 
132
134
  ```json
133
135
  {
134
- "toolVersion": "0.3.2",
136
+ "toolVersion": "0.3.3",
135
137
  "fork": "glamsterdam",
136
138
  "target": {
137
139
  "kind": "bytecode",
@@ -219,7 +221,7 @@ Release publishing notes live in [docs/release.md](docs/release.md).
219
221
 
220
222
  ## Roadmap
221
223
 
222
- See [ROADMAP.md](ROADMAP.md) for planned phases. Phase 0 is released as `v0.1.0`; `v0.2.0` starts Phase 1 with RPC transaction trace ingestion and broader trace fixture coverage; `v0.3.0` adds baseline comparison reports; `v0.3.1` expands public-safe fixture and dataset coverage; `v0.3.2` adds packaged CSV dataset exports.
224
+ See [ROADMAP.md](ROADMAP.md) for planned phases. Phase 0 is released as `v0.1.0`; `v0.2.0` starts Phase 1 with RPC transaction trace ingestion and broader trace fixture coverage; `v0.3.0` adds baseline comparison reports; `v0.3.1` expands public-safe fixture and dataset coverage; `v0.3.2` adds packaged CSV dataset exports; `v0.3.3` adds additional public Geth and Reth trace fixture coverage.
223
225
 
224
226
  ## Disclaimer
225
227
 
package/ROADMAP.md CHANGED
@@ -52,7 +52,7 @@ Goal: compare compatibility reports across profiles and, later, across current-c
52
52
 
53
53
  ## Phase 2: Public Dataset
54
54
 
55
- Status: seeded after `v0.3.0`; expanded with public-safe trace, indexer, and validator fixture coverage in `v0.3.1`; packaged CSV exports added in `v0.3.2`.
55
+ Status: seeded after `v0.3.0`; expanded with public-safe trace, indexer, and validator fixture coverage in `v0.3.1`; packaged CSV exports added in `v0.3.2`; additional public Geth and Reth trace fixtures added in `v0.3.3`.
56
56
 
57
57
  Goal: publish reproducible compatibility research.
58
58
 
@@ -1,8 +1,38 @@
1
1
  {
2
2
  "fork": "glamsterdam",
3
- "lastUpdated": "2026-05-08",
3
+ "lastUpdated": "2026-05-12",
4
4
  "sources": [
5
- "Replace with client release notes, devnet pages, or operator-maintained compatibility sources."
5
+ {
6
+ "type": "public-interop-recap",
7
+ "url": "https://blog.ethereum.org/2026/05/02/soldogn-interop-recap",
8
+ "sourceDate": "2026-05-02",
9
+ "retrievedAt": "2026-05-12",
10
+ "claim": "The Ethereum Foundation Soldogn recap says the week ended with a stable multi-client Glamsterdam devnet running the latest ePBS, repricing, and block access list specs, and that nearly all clients were running together on glamsterdam-devnet-2 with the external builders pipeline tested end-to-end.",
11
+ "notes": "This source supports devnet/interoperability context, not production release compatibility."
12
+ },
13
+ {
14
+ "type": "public-devnet-spec",
15
+ "url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
16
+ "retrievedAt": "2026-05-12",
17
+ "claim": "The EthPandaOps glamsterdam-devnet-2 spec lists a Kurtosis participants matrix with geth as the execution client image and prysm, lodestar, lighthouse, teku, nimbus, and grandine as consensus client images.",
18
+ "notes": "This source supports devnet participant examples. It does not claim mainnet-ready client releases."
19
+ },
20
+ {
21
+ "type": "public-spec-release",
22
+ "url": "https://github.com/ethereum/consensus-specs/releases/tag/v1.7.0-alpha.7",
23
+ "sourceDate": "2026-04-29",
24
+ "retrievedAt": "2026-05-12",
25
+ "claim": "The consensus-specs v1.7.0-alpha.7 release is a pre-release containing Gloas changes used by the glamsterdam-devnet-2 spec.",
26
+ "notes": "Spec release metadata is useful provenance for devnet test entries, but is not a client release."
27
+ },
28
+ {
29
+ "type": "public-spec-release",
30
+ "url": "https://github.com/ethereum/execution-spec-tests/releases/tag/bal%40v5.6.1",
31
+ "sourceDate": "2026-04-02",
32
+ "retrievedAt": "2026-05-12",
33
+ "claim": "The execution-spec-tests bal@v5.6.1 pre-release is labeled for bal-devnet-3 v7 and includes BAL/state-gas test updates referenced by the glamsterdam-devnet-2 spec.",
34
+ "notes": "Spec-test release metadata is useful provenance for devnet test entries, but is not a client release."
35
+ }
6
36
  ],
7
37
  "clients": [
8
38
  {
@@ -12,12 +42,46 @@
12
42
  {
13
43
  "version": "0.0.0-example",
14
44
  "status": "unknown",
45
+ "source": {
46
+ "type": "synthetic-example",
47
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
48
+ "retrievedAt": "2026-05-12",
49
+ "claim": "Synthetic unknown status used to exercise matrix behavior when no sourced compatibility statement exists."
50
+ },
15
51
  "notes": "Placeholder only. Replace with a sourced compatibility statement before relying on this matrix."
16
52
  },
17
53
  {
18
54
  "version": "1.0.0-compatible",
19
55
  "status": "compatible",
56
+ "source": {
57
+ "type": "synthetic-example",
58
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
59
+ "retrievedAt": "2026-05-12",
60
+ "claim": "Synthetic compatible status used by safe fixture variants to exercise clean scanner paths."
61
+ },
20
62
  "notes": "Synthetic compatible status used by safe fixture variants; do not treat as a real client release."
63
+ },
64
+ {
65
+ "version": "1.1.0-partial",
66
+ "status": "partial",
67
+ "source": {
68
+ "type": "synthetic-example",
69
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
70
+ "retrievedAt": "2026-05-12",
71
+ "claim": "Synthetic partial status used to exercise scanner behavior for incomplete readiness."
72
+ },
73
+ "notes": "Synthetic partial status for tests and examples only."
74
+ },
75
+ {
76
+ "version": "2.0.0-incompatible",
77
+ "status": "incompatible",
78
+ "source": {
79
+ "type": "synthetic-example",
80
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
81
+ "retrievedAt": "2026-05-12",
82
+ "claim": "Synthetic incompatible status used to exercise scanner behavior for blocking readiness findings."
83
+ },
84
+ "notes": "Synthetic incompatible status for tests and examples only."
21
85
  }
22
86
  ]
23
87
  },
@@ -28,12 +92,46 @@
28
92
  {
29
93
  "version": "0.0.0-example",
30
94
  "status": "unknown",
95
+ "source": {
96
+ "type": "synthetic-example",
97
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
98
+ "retrievedAt": "2026-05-12",
99
+ "claim": "Synthetic unknown status used to exercise matrix behavior when no sourced compatibility statement exists."
100
+ },
31
101
  "notes": "Placeholder only. Replace with a sourced compatibility statement before relying on this matrix."
32
102
  },
33
103
  {
34
104
  "version": "1.0.0-compatible",
35
105
  "status": "compatible",
106
+ "source": {
107
+ "type": "synthetic-example",
108
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
109
+ "retrievedAt": "2026-05-12",
110
+ "claim": "Synthetic compatible status used by safe fixture variants to exercise clean scanner paths."
111
+ },
36
112
  "notes": "Synthetic compatible status used by safe fixture variants; do not treat as a real client release."
113
+ },
114
+ {
115
+ "version": "1.1.0-partial",
116
+ "status": "partial",
117
+ "source": {
118
+ "type": "synthetic-example",
119
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
120
+ "retrievedAt": "2026-05-12",
121
+ "claim": "Synthetic partial status used to exercise scanner behavior for incomplete readiness."
122
+ },
123
+ "notes": "Synthetic partial status for tests and examples only."
124
+ },
125
+ {
126
+ "version": "2.0.0-incompatible",
127
+ "status": "incompatible",
128
+ "source": {
129
+ "type": "synthetic-example",
130
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
131
+ "retrievedAt": "2026-05-12",
132
+ "claim": "Synthetic incompatible status used to exercise scanner behavior for blocking readiness findings."
133
+ },
134
+ "notes": "Synthetic incompatible status for tests and examples only."
37
135
  }
38
136
  ]
39
137
  },
@@ -44,14 +142,201 @@
44
142
  {
45
143
  "version": "0.0.0-example",
46
144
  "status": "unknown",
145
+ "source": {
146
+ "type": "synthetic-example",
147
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
148
+ "retrievedAt": "2026-05-12",
149
+ "claim": "Synthetic unknown status used to exercise matrix behavior when no sourced compatibility statement exists."
150
+ },
47
151
  "notes": "Placeholder only. Replace with a sourced compatibility statement before relying on this matrix."
48
152
  },
49
153
  {
50
154
  "version": "1.0.0-compatible",
51
155
  "status": "compatible",
156
+ "source": {
157
+ "type": "synthetic-example",
158
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
159
+ "retrievedAt": "2026-05-12",
160
+ "claim": "Synthetic compatible status used by safe fixture variants to exercise clean scanner paths."
161
+ },
52
162
  "notes": "Synthetic compatible status used by safe fixture variants; do not treat as a real client release."
163
+ },
164
+ {
165
+ "version": "1.1.0-partial",
166
+ "status": "partial",
167
+ "source": {
168
+ "type": "synthetic-example",
169
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
170
+ "retrievedAt": "2026-05-12",
171
+ "claim": "Synthetic partial status used to exercise scanner behavior for incomplete readiness."
172
+ },
173
+ "notes": "Synthetic partial status for tests and examples only."
174
+ },
175
+ {
176
+ "version": "2.0.0-incompatible",
177
+ "status": "incompatible",
178
+ "source": {
179
+ "type": "synthetic-example",
180
+ "url": "https://github.com/CruzMolina/glamsterdam-compat-lab/blob/main/data/client-compat/clients.example.json",
181
+ "retrievedAt": "2026-05-12",
182
+ "claim": "Synthetic incompatible status used to exercise scanner behavior for blocking readiness findings."
183
+ },
184
+ "notes": "Synthetic incompatible status for tests and examples only."
185
+ }
186
+ ]
187
+ },
188
+ {
189
+ "name": "geth",
190
+ "role": "execution",
191
+ "versions": [
192
+ {
193
+ "version": "ethpandaops/geth:bal-devnet-6",
194
+ "status": "partial",
195
+ "source": {
196
+ "type": "public-devnet-spec",
197
+ "url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
198
+ "retrievedAt": "2026-05-12",
199
+ "claim": "The glamsterdam-devnet-2 Kurtosis example lists geth with image ethpandaops/geth:bal-devnet-6 as the execution-layer participant."
200
+ },
201
+ "notes": "Devnet image only. This is not a production Geth release compatibility claim."
202
+ }
203
+ ]
204
+ },
205
+ {
206
+ "name": "lighthouse",
207
+ "role": "consensus",
208
+ "versions": [
209
+ {
210
+ "version": "ethpandaops/lighthouse:glamsterdam-devnet-3",
211
+ "status": "partial",
212
+ "source": {
213
+ "type": "public-devnet-spec",
214
+ "url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
215
+ "retrievedAt": "2026-05-12",
216
+ "claim": "The glamsterdam-devnet-2 Kurtosis example lists lighthouse with image ethpandaops/lighthouse:glamsterdam-devnet-3 as a consensus-layer participant."
217
+ },
218
+ "notes": "Devnet image only. This is not a production Lighthouse release compatibility claim."
219
+ }
220
+ ]
221
+ },
222
+ {
223
+ "name": "teku",
224
+ "role": "consensus",
225
+ "versions": [
226
+ {
227
+ "version": "ethpandaops/teku:glamsterdam-devnet-2",
228
+ "status": "partial",
229
+ "source": {
230
+ "type": "public-devnet-spec",
231
+ "url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
232
+ "retrievedAt": "2026-05-12",
233
+ "claim": "The glamsterdam-devnet-2 Kurtosis example lists teku with image ethpandaops/teku:glamsterdam-devnet-2 as a consensus-layer participant."
234
+ },
235
+ "notes": "Devnet image only. This is not a production Teku release compatibility claim."
53
236
  }
54
237
  ]
55
238
  }
239
+ ],
240
+ "devnets": [
241
+ {
242
+ "name": "glamsterdam-devnet-2",
243
+ "status": "partial",
244
+ "source": {
245
+ "type": "public-devnet-spec",
246
+ "url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
247
+ "retrievedAt": "2026-05-12",
248
+ "claim": "The glamsterdam-devnet-2 spec targets launch on 2026-04-30 and includes a Kurtosis participants matrix with specific EL and CL devnet images."
249
+ },
250
+ "participants": [
251
+ {
252
+ "role": "execution",
253
+ "name": "geth",
254
+ "image": "ethpandaops/geth:bal-devnet-6",
255
+ "status": "partial",
256
+ "notes": "Listed as the execution-layer participant image in the public devnet spec."
257
+ },
258
+ {
259
+ "role": "consensus",
260
+ "name": "prysm",
261
+ "image": "ethpandaops/prysm-beacon-chain:glamsterdam-devnet-3-minimal",
262
+ "status": "partial",
263
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
264
+ },
265
+ {
266
+ "role": "consensus",
267
+ "name": "lodestar",
268
+ "image": "ethpandaops/lodestar:glamsterdam-devnet-2",
269
+ "status": "partial",
270
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
271
+ },
272
+ {
273
+ "role": "consensus",
274
+ "name": "lighthouse",
275
+ "image": "ethpandaops/lighthouse:glamsterdam-devnet-3",
276
+ "status": "partial",
277
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
278
+ },
279
+ {
280
+ "role": "consensus",
281
+ "name": "teku",
282
+ "image": "ethpandaops/teku:glamsterdam-devnet-2",
283
+ "status": "partial",
284
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
285
+ },
286
+ {
287
+ "role": "consensus",
288
+ "name": "nimbus",
289
+ "image": "ethpandaops/nimbus-eth2:glamsterdam-devnet-2-minimal",
290
+ "status": "partial",
291
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
292
+ },
293
+ {
294
+ "role": "consensus",
295
+ "name": "grandine",
296
+ "image": "ethpandaops/grandine:glamsterdam-devnet-2-minimal",
297
+ "status": "partial",
298
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
299
+ }
300
+ ],
301
+ "specVersions": [
302
+ {
303
+ "name": "consensus-specs",
304
+ "version": "v1.7.0-alpha.7",
305
+ "source": {
306
+ "type": "public-spec-release",
307
+ "url": "https://github.com/ethereum/consensus-specs/releases/tag/v1.7.0-alpha.7",
308
+ "sourceDate": "2026-04-29",
309
+ "retrievedAt": "2026-05-12",
310
+ "claim": "The consensus-specs v1.7.0-alpha.7 release is a pre-release containing Gloas changes used by the glamsterdam-devnet-2 spec."
311
+ }
312
+ },
313
+ {
314
+ "name": "execution-spec-tests",
315
+ "version": "bal@v5.6.1",
316
+ "source": {
317
+ "type": "public-spec-release",
318
+ "url": "https://github.com/ethereum/execution-spec-tests/releases/tag/bal%40v5.6.1",
319
+ "sourceDate": "2026-04-02",
320
+ "retrievedAt": "2026-05-12",
321
+ "claim": "The execution-spec-tests bal@v5.6.1 pre-release is labeled for bal-devnet-3 v7 and includes BAL/state-gas test updates referenced by the glamsterdam-devnet-2 spec."
322
+ }
323
+ }
324
+ ],
325
+ "notes": "Devnet participation is tracked as partial readiness. Production release compatibility must come from client release notes or other explicit public statements."
326
+ },
327
+ {
328
+ "name": "soldogn-interop",
329
+ "status": "stable-multi-client-devnet-reported",
330
+ "source": {
331
+ "type": "public-interop-recap",
332
+ "url": "https://blog.ethereum.org/2026/05/02/soldogn-interop-recap",
333
+ "sourceDate": "2026-05-02",
334
+ "retrievedAt": "2026-05-12",
335
+ "claim": "The Ethereum Foundation Soldogn recap reports a stable multi-client Glamsterdam devnet running the latest ePBS, repricing, and block access list specs, with nearly all clients running together on glamsterdam-devnet-2 by Friday."
336
+ },
337
+ "participants": [],
338
+ "specVersions": [],
339
+ "notes": "Interop recap is useful context for the matrix, but this entry intentionally avoids per-client production compatibility claims."
340
+ }
56
341
  ]
57
342
  }
@@ -1,9 +1,9 @@
1
1
  {
2
- "toolVersion": "0.3.2",
2
+ "toolVersion": "0.3.3",
3
3
  "fork": "glamsterdam",
4
4
  "comparison": {
5
5
  "baseline": {
6
- "toolVersion": "0.3.2",
6
+ "toolVersion": "0.3.3",
7
7
  "fork": "glamsterdam",
8
8
  "target": {
9
9
  "kind": "bytecode",
@@ -19,7 +19,7 @@
19
19
  }
20
20
  },
21
21
  "candidate": {
22
- "toolVersion": "0.3.2",
22
+ "toolVersion": "0.3.3",
23
23
  "fork": "glamsterdam",
24
24
  "target": {
25
25
  "kind": "bytecode",
@@ -0,0 +1,167 @@
1
+ {
2
+ "toolVersion": "0.3.3",
3
+ "fork": "glamsterdam",
4
+ "comparison": {
5
+ "baseline": {
6
+ "toolVersion": "0.3.3",
7
+ "fork": "glamsterdam",
8
+ "target": {
9
+ "kind": "bytecode",
10
+ "name": "fixtures/bytecode/erc4337-entrypoint-v06-mainnet-runtime.hex"
11
+ },
12
+ "summary": {
13
+ "risk": "medium",
14
+ "findingCount": 6,
15
+ "highCount": 0,
16
+ "mediumCount": 3,
17
+ "lowCount": 2,
18
+ "unknownCount": 1
19
+ }
20
+ },
21
+ "candidate": {
22
+ "toolVersion": "0.3.3",
23
+ "fork": "glamsterdam",
24
+ "target": {
25
+ "kind": "bytecode",
26
+ "name": "fixtures/bytecode/erc4337-entrypoint-v06-mainnet-runtime.hex"
27
+ },
28
+ "summary": {
29
+ "risk": "medium",
30
+ "findingCount": 6,
31
+ "highCount": 0,
32
+ "mediumCount": 3,
33
+ "lowCount": 2,
34
+ "unknownCount": 1
35
+ }
36
+ }
37
+ },
38
+ "summary": {
39
+ "riskChange": {
40
+ "from": "medium",
41
+ "to": "medium",
42
+ "direction": "unchanged"
43
+ },
44
+ "findingCount": {
45
+ "baseline": 6,
46
+ "candidate": 6,
47
+ "delta": 0
48
+ },
49
+ "addedCount": 0,
50
+ "removedCount": 0,
51
+ "changedCount": 0,
52
+ "unchangedCount": 6,
53
+ "severityIncreasedCount": 0,
54
+ "severityDecreasedCount": 0,
55
+ "severityChangedCount": 0,
56
+ "confidenceIncreasedCount": 0,
57
+ "confidenceDecreasedCount": 0,
58
+ "confidenceChangedCount": 0
59
+ },
60
+ "changes": {
61
+ "added": [],
62
+ "removed": [],
63
+ "changed": [],
64
+ "unchanged": [
65
+ {
66
+ "key": "bytecode.calldata-copy-exposure",
67
+ "id": "bytecode.calldata-copy-exposure",
68
+ "title": "Calldata copy opcode is present",
69
+ "severity": "low",
70
+ "confidence": "medium",
71
+ "domain": [
72
+ "contracts",
73
+ "execution"
74
+ ],
75
+ "relatedEips": [
76
+ "GAS-REPRICING",
77
+ "EIP-7976",
78
+ "EIP-7904",
79
+ "EIP-8038"
80
+ ]
81
+ },
82
+ {
83
+ "key": "bytecode.contract-size-near-current-limit",
84
+ "id": "bytecode.contract-size-near-current-limit",
85
+ "title": "Bytecode is near the current deployed contract size limit",
86
+ "severity": "medium",
87
+ "confidence": "high",
88
+ "domain": [
89
+ "contracts",
90
+ "execution"
91
+ ],
92
+ "relatedEips": [
93
+ "EIP-7954"
94
+ ]
95
+ },
96
+ {
97
+ "key": "bytecode.log-opcodes-present",
98
+ "id": "bytecode.log-opcodes-present",
99
+ "title": "Log opcodes are present",
100
+ "severity": "low",
101
+ "confidence": "medium",
102
+ "domain": [
103
+ "contracts",
104
+ "indexer",
105
+ "monitoring"
106
+ ],
107
+ "relatedEips": [
108
+ "EIP-7708"
109
+ ]
110
+ },
111
+ {
112
+ "key": "bytecode.manual-review-required",
113
+ "id": "bytecode.manual-review-required",
114
+ "title": "Manual review is still required for runtime behavior",
115
+ "severity": "unknown",
116
+ "confidence": "low",
117
+ "domain": [
118
+ "contracts",
119
+ "execution"
120
+ ],
121
+ "relatedEips": [
122
+ "GAS-REPRICING"
123
+ ]
124
+ },
125
+ {
126
+ "key": "bytecode.state-account-opcode-exposure",
127
+ "id": "bytecode.state-account-opcode-exposure",
128
+ "title": "State and account access opcodes are prominent in bytecode",
129
+ "severity": "medium",
130
+ "confidence": "medium",
131
+ "domain": [
132
+ "contracts",
133
+ "execution"
134
+ ],
135
+ "relatedEips": [
136
+ "GAS-REPRICING",
137
+ "EIP-7904",
138
+ "EIP-8038",
139
+ "EIP-7976"
140
+ ]
141
+ },
142
+ {
143
+ "key": "bytecode.storage-heavy-pattern",
144
+ "id": "bytecode.storage-heavy-pattern",
145
+ "title": "Storage-related opcodes appear frequently",
146
+ "severity": "medium",
147
+ "confidence": "medium",
148
+ "domain": [
149
+ "contracts",
150
+ "execution"
151
+ ],
152
+ "relatedEips": [
153
+ "GAS-REPRICING",
154
+ "EIP-8038"
155
+ ]
156
+ }
157
+ ]
158
+ },
159
+ "assumptions": [
160
+ "Reports were compared by finding id. Repeated finding ids are disambiguated with deterministic occurrence suffixes.",
161
+ "Severity and confidence changes are structural report changes, not protocol gas estimates."
162
+ ],
163
+ "limitations": [
164
+ "The comparison does not infer exact gas deltas, final Glamsterdam parameters, or current-vs-Glamsterdam client behavior unless those values are already present in the input reports.",
165
+ "Added and removed findings can reflect threshold profile differences, fixture coverage changes, registry updates, or detector changes; review the source reports before treating a diff as a protocol risk change."
166
+ ]
167
+ }
@@ -1,9 +1,9 @@
1
1
  {
2
- "toolVersion": "0.3.2",
2
+ "toolVersion": "0.3.3",
3
3
  "fork": "glamsterdam",
4
4
  "comparison": {
5
5
  "baseline": {
6
- "toolVersion": "0.3.2",
6
+ "toolVersion": "0.3.3",
7
7
  "fork": "glamsterdam",
8
8
  "target": {
9
9
  "kind": "bytecode",
@@ -19,7 +19,7 @@
19
19
  }
20
20
  },
21
21
  "candidate": {
22
- "toolVersion": "0.3.2",
22
+ "toolVersion": "0.3.3",
23
23
  "fork": "glamsterdam",
24
24
  "target": {
25
25
  "kind": "bytecode",