glamsterdam-compat-lab 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/CONTRIBUTING.md +2 -2
  2. package/README.md +16 -9
  3. package/ROADMAP.md +4 -1
  4. package/data/client-compat/clients.example.json +355 -2
  5. package/data/eips/glamsterdam.json +504 -25
  6. package/datasets/public-seed/README.md +8 -0
  7. package/datasets/public-seed/comparisons/bytecode-ens-registry-mainnet-runtime--default-vs-research.json +3 -3
  8. package/datasets/public-seed/comparisons/bytecode-erc4337-entrypoint-v06-mainnet-runtime--default-vs-research.json +167 -0
  9. package/datasets/public-seed/comparisons/bytecode-multicall3-mainnet-runtime--default-vs-research.json +3 -3
  10. package/datasets/public-seed/comparisons/bytecode-safe-proxy-factory-v130-mainnet-runtime--default-vs-research.json +169 -0
  11. package/datasets/public-seed/comparisons/bytecode-storage-heavy--default-vs-research.json +3 -3
  12. package/datasets/public-seed/comparisons/bytecode-uniswap-v2-factory-mainnet-runtime--default-vs-research.json +3 -3
  13. package/datasets/public-seed/comparisons/bytecode-usdc-proxy-mainnet-runtime--default-vs-research.json +3 -3
  14. package/datasets/public-seed/comparisons/bytecode-weth9-mainnet-runtime--default-vs-research.json +3 -3
  15. package/datasets/public-seed/comparisons/traces-besu-debug-structlogs--default-vs-research.json +3 -3
  16. package/datasets/public-seed/comparisons/traces-besu-mainnet-tracoor-debug-structlogs--default-vs-research.json +3 -3
  17. package/datasets/public-seed/comparisons/traces-call-tracer-tree--default-vs-research.json +3 -3
  18. package/datasets/public-seed/comparisons/traces-drpc-call-tracer-real--default-vs-research.json +3 -3
  19. package/datasets/public-seed/comparisons/traces-erigon-action-trace--default-vs-research.json +3 -3
  20. package/datasets/public-seed/comparisons/traces-foundry-json-trace--default-vs-research.json +3 -3
  21. package/datasets/public-seed/comparisons/traces-geth-json-rpc-structlogs--default-vs-research.json +3 -3
  22. package/datasets/public-seed/comparisons/traces-geth-mainnet-tracoor-debug-structlogs--default-vs-research.json +141 -0
  23. package/datasets/public-seed/comparisons/traces-hardhat-debug-trace--default-vs-research.json +3 -3
  24. package/datasets/public-seed/comparisons/traces-nethermind-debug-structlogs--default-vs-research.json +3 -3
  25. package/datasets/public-seed/comparisons/traces-nethermind-mainnet-tracoor-debug-structlogs--default-vs-research.json +3 -3
  26. package/datasets/public-seed/comparisons/traces-reth-mainnet-tracoor-debug-structlogs--default-vs-research.json +141 -0
  27. package/datasets/public-seed/comparisons/traces-storage-heavy-trace--default-vs-research.json +3 -3
  28. package/datasets/public-seed/findings.csv +44 -0
  29. package/datasets/public-seed/manifest.json +198 -4
  30. package/datasets/public-seed/readiness-clients.csv +20 -0
  31. package/datasets/public-seed/readiness-devnets.csv +9 -0
  32. package/datasets/public-seed/readiness-eips.csv +66 -0
  33. package/datasets/public-seed/readiness-sources.csv +33 -0
  34. package/datasets/public-seed/readiness.json +1437 -0
  35. package/datasets/public-seed/reports/bytecode-ens-registry-mainnet-runtime--default.json +2 -2
  36. package/datasets/public-seed/reports/bytecode-ens-registry-mainnet-runtime--research.json +2 -2
  37. package/datasets/public-seed/reports/bytecode-erc4337-entrypoint-v06-mainnet-runtime--default.json +170 -0
  38. package/datasets/public-seed/reports/bytecode-erc4337-entrypoint-v06-mainnet-runtime--research.json +170 -0
  39. package/datasets/public-seed/reports/bytecode-multicall3-mainnet-runtime--default.json +2 -2
  40. package/datasets/public-seed/reports/bytecode-multicall3-mainnet-runtime--research.json +2 -2
  41. package/datasets/public-seed/reports/bytecode-safe-proxy-factory-v130-mainnet-runtime--default.json +148 -0
  42. package/datasets/public-seed/reports/bytecode-safe-proxy-factory-v130-mainnet-runtime--research.json +171 -0
  43. package/datasets/public-seed/reports/bytecode-storage-heavy--default.json +2 -2
  44. package/datasets/public-seed/reports/bytecode-storage-heavy--research.json +2 -2
  45. package/datasets/public-seed/reports/bytecode-uniswap-v2-factory-mainnet-runtime--default.json +2 -2
  46. package/datasets/public-seed/reports/bytecode-uniswap-v2-factory-mainnet-runtime--research.json +2 -2
  47. package/datasets/public-seed/reports/bytecode-usdc-proxy-mainnet-runtime--default.json +2 -2
  48. package/datasets/public-seed/reports/bytecode-usdc-proxy-mainnet-runtime--research.json +2 -2
  49. package/datasets/public-seed/reports/bytecode-weth9-mainnet-runtime--default.json +2 -2
  50. package/datasets/public-seed/reports/bytecode-weth9-mainnet-runtime--research.json +2 -2
  51. package/datasets/public-seed/reports/indexers-balance-diff-indexer--default.json +2 -2
  52. package/datasets/public-seed/reports/indexers-explorer-replay-indexer--default.json +2 -2
  53. package/datasets/public-seed/reports/indexers-graph-network-subgraph-reduced--default.json +123 -0
  54. package/datasets/public-seed/reports/indexers-subgraph--default.json +2 -2
  55. package/datasets/public-seed/reports/traces-besu-debug-structlogs--default.json +2 -2
  56. package/datasets/public-seed/reports/traces-besu-debug-structlogs--research.json +2 -2
  57. package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--default.json +2 -2
  58. package/datasets/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--research.json +2 -2
  59. package/datasets/public-seed/reports/traces-call-tracer-tree--default.json +2 -2
  60. package/datasets/public-seed/reports/traces-call-tracer-tree--research.json +2 -2
  61. package/datasets/public-seed/reports/traces-drpc-call-tracer-real--default.json +2 -2
  62. package/datasets/public-seed/reports/traces-drpc-call-tracer-real--research.json +2 -2
  63. package/datasets/public-seed/reports/traces-erigon-action-trace--default.json +2 -2
  64. package/datasets/public-seed/reports/traces-erigon-action-trace--research.json +2 -2
  65. package/datasets/public-seed/reports/traces-foundry-json-trace--default.json +2 -2
  66. package/datasets/public-seed/reports/traces-foundry-json-trace--research.json +2 -2
  67. package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--default.json +2 -2
  68. package/datasets/public-seed/reports/traces-geth-json-rpc-structlogs--research.json +2 -2
  69. package/datasets/public-seed/reports/traces-geth-mainnet-tracoor-debug-structlogs--default.json +103 -0
  70. package/datasets/public-seed/reports/traces-geth-mainnet-tracoor-debug-structlogs--research.json +131 -0
  71. package/datasets/public-seed/reports/traces-hardhat-debug-trace--default.json +2 -2
  72. package/datasets/public-seed/reports/traces-hardhat-debug-trace--research.json +2 -2
  73. package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--default.json +2 -2
  74. package/datasets/public-seed/reports/traces-nethermind-debug-structlogs--research.json +2 -2
  75. package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--default.json +2 -2
  76. package/datasets/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--research.json +2 -2
  77. package/datasets/public-seed/reports/traces-reth-mainnet-tracoor-debug-structlogs--default.json +103 -0
  78. package/datasets/public-seed/reports/traces-reth-mainnet-tracoor-debug-structlogs--research.json +131 -0
  79. package/datasets/public-seed/reports/traces-storage-heavy-trace--default.json +2 -2
  80. package/datasets/public-seed/reports/traces-storage-heavy-trace--research.json +2 -2
  81. package/datasets/public-seed/reports/validator-glamsterdam-devnet-operator-public--default.json +92 -0
  82. package/datasets/public-seed/reports/validator-operator-config--default.json +4 -4
  83. package/datasets/public-seed/reports/validator-operator-config-builder-gap--default.json +2 -2
  84. package/datasets/public-seed/reports/validator-operator-config-complete--default.json +2 -2
  85. package/datasets/public-seed/reports.csv +10 -0
  86. package/datasets/public-seed/summary.csv +37 -31
  87. package/datasets/public-seed/summary.json +57 -33
  88. package/dist/cli.js +6 -1
  89. package/dist/cli.js.map +1 -1
  90. package/dist/fixtures/provenance.d.ts +3 -0
  91. package/dist/fixtures/provenance.js +1 -0
  92. package/dist/fixtures/provenance.js.map +1 -1
  93. package/dist/index.d.ts +4 -2
  94. package/dist/index.js +2 -1
  95. package/dist/index.js.map +1 -1
  96. package/dist/registry/clientMatrix.d.ts +334 -0
  97. package/dist/registry/clientMatrix.js +218 -0
  98. package/dist/registry/clientMatrix.js.map +1 -0
  99. package/dist/registry/schemas.d.ts +34 -1
  100. package/dist/registry/schemas.js +17 -1
  101. package/dist/registry/schemas.js.map +1 -1
  102. package/dist/reports/reportTypes.d.ts +1 -1
  103. package/dist/reports/reportTypes.js +1 -1
  104. package/dist/scanners/validatorScanner.d.ts +1 -28
  105. package/dist/scanners/validatorScanner.js +2 -37
  106. package/dist/scanners/validatorScanner.js.map +1 -1
  107. package/docs/client-compat.md +123 -0
  108. package/docs/dataset.md +205 -0
  109. package/docs/fixtures.md +10 -4
  110. package/docs/release.md +11 -29
  111. package/docs/releases/v0.3.4.md +15 -0
  112. package/examples/baseline-comparison.md +1 -1
  113. package/examples/public-seed-analysis.md +192 -0
  114. package/fixtures/bytecode/erc4337-entrypoint-v06-mainnet-runtime.hex +1 -0
  115. package/fixtures/bytecode/safe-proxy-factory-v130-mainnet-runtime.hex +1 -0
  116. package/fixtures/indexers/graph-network-subgraph-reduced.yaml +66 -0
  117. package/fixtures/provenance.json +267 -1
  118. package/fixtures/traces/geth-mainnet-tracoor-debug-structlogs.json +2285 -0
  119. package/fixtures/traces/reth-mainnet-tracoor-debug-structlogs.json +2285 -0
  120. package/fixtures/validator/glamsterdam-devnet-operator-public.yaml +30 -0
  121. package/package.json +6 -1
  122. package/site/public-seed/comparisons/bytecode-ens-registry-mainnet-runtime--default-vs-research.html +496 -0
  123. package/site/public-seed/comparisons/bytecode-erc4337-entrypoint-v06-mainnet-runtime--default-vs-research.html +510 -0
  124. package/site/public-seed/comparisons/bytecode-multicall3-mainnet-runtime--default-vs-research.html +510 -0
  125. package/site/public-seed/comparisons/bytecode-safe-proxy-factory-v130-mainnet-runtime--default-vs-research.html +524 -0
  126. package/site/public-seed/comparisons/bytecode-storage-heavy--default-vs-research.html +510 -0
  127. package/site/public-seed/comparisons/bytecode-uniswap-v2-factory-mainnet-runtime--default-vs-research.html +510 -0
  128. package/site/public-seed/comparisons/bytecode-usdc-proxy-mainnet-runtime--default-vs-research.html +517 -0
  129. package/site/public-seed/comparisons/bytecode-weth9-mainnet-runtime--default-vs-research.html +496 -0
  130. package/site/public-seed/comparisons/traces-besu-debug-structlogs--default-vs-research.html +475 -0
  131. package/site/public-seed/comparisons/traces-besu-mainnet-tracoor-debug-structlogs--default-vs-research.html +496 -0
  132. package/site/public-seed/comparisons/traces-call-tracer-tree--default-vs-research.html +489 -0
  133. package/site/public-seed/comparisons/traces-drpc-call-tracer-real--default-vs-research.html +489 -0
  134. package/site/public-seed/comparisons/traces-erigon-action-trace--default-vs-research.html +489 -0
  135. package/site/public-seed/comparisons/traces-foundry-json-trace--default-vs-research.html +503 -0
  136. package/site/public-seed/comparisons/traces-geth-json-rpc-structlogs--default-vs-research.html +482 -0
  137. package/site/public-seed/comparisons/traces-geth-mainnet-tracoor-debug-structlogs--default-vs-research.html +510 -0
  138. package/site/public-seed/comparisons/traces-hardhat-debug-trace--default-vs-research.html +482 -0
  139. package/site/public-seed/comparisons/traces-nethermind-debug-structlogs--default-vs-research.html +501 -0
  140. package/site/public-seed/comparisons/traces-nethermind-mainnet-tracoor-debug-structlogs--default-vs-research.html +496 -0
  141. package/site/public-seed/comparisons/traces-reth-mainnet-tracoor-debug-structlogs--default-vs-research.html +510 -0
  142. package/site/public-seed/comparisons/traces-storage-heavy-trace--default-vs-research.html +503 -0
  143. package/site/public-seed/findings/bytecode.calldata-copy-exposure.html +683 -0
  144. package/site/public-seed/findings/bytecode.contract-creation-opcodes.html +551 -0
  145. package/site/public-seed/findings/bytecode.contract-size-near-current-limit.html +463 -0
  146. package/site/public-seed/findings/bytecode.log-opcodes-present.html +771 -0
  147. package/site/public-seed/findings/bytecode.manual-review-required.html +771 -0
  148. package/site/public-seed/findings/bytecode.state-account-opcode-exposure.html +727 -0
  149. package/site/public-seed/findings/bytecode.state-account-opcode-presence.html +441 -0
  150. package/site/public-seed/findings/bytecode.storage-heavy-pattern.html +683 -0
  151. package/site/public-seed/findings/indexer.balance-diff-native-transfer-assumption.html +463 -0
  152. package/site/public-seed/findings/indexer.event-only-assumption.html +463 -0
  153. package/site/public-seed/findings/indexer.missing-bal-readiness-metadata.html +485 -0
  154. package/site/public-seed/findings/indexer.missing-fork-compatibility-metadata.html +463 -0
  155. package/site/public-seed/findings/indexer.missing-replay-plan.html +463 -0
  156. package/site/public-seed/findings/indexer.native-eth-transfer-review-missing.html +463 -0
  157. package/site/public-seed/findings/trace.calldata-heavy-execution.html +815 -0
  158. package/site/public-seed/findings/trace.contract-creation-executed.html +639 -0
  159. package/site/public-seed/findings/trace.logs-calls-visible.html +991 -0
  160. package/site/public-seed/findings/trace.partial-evidence.html +771 -0
  161. package/site/public-seed/findings/trace.state-heavy-execution-medium.html +617 -0
  162. package/site/public-seed/findings/validator.builder-enabled-without-endpoint.html +463 -0
  163. package/site/public-seed/findings/validator.consensus-client-status-partial.html +441 -0
  164. package/site/public-seed/findings/validator.execution-client-status-partial.html +441 -0
  165. package/site/public-seed/findings/validator.missing-monitoring-endpoints.html +463 -0
  166. package/site/public-seed/findings/validator.missing-testnet-participation.html +463 -0
  167. package/site/public-seed/findings/validator.missing-validator-client-version.html +441 -0
  168. package/site/public-seed/findings/validator.unknown-consensus-client-compatibility.html +441 -0
  169. package/site/public-seed/findings/validator.unknown-execution-client-compatibility.html +441 -0
  170. package/site/public-seed/index.html +2560 -0
  171. package/site/public-seed/readiness.html +1591 -0
  172. package/site/public-seed/reports/bytecode-ens-registry-mainnet-runtime--default.html +548 -0
  173. package/site/public-seed/reports/bytecode-ens-registry-mainnet-runtime--research.html +548 -0
  174. package/site/public-seed/reports/bytecode-erc4337-entrypoint-v06-mainnet-runtime--default.html +595 -0
  175. package/site/public-seed/reports/bytecode-erc4337-entrypoint-v06-mainnet-runtime--research.html +595 -0
  176. package/site/public-seed/reports/bytecode-multicall3-mainnet-runtime--default.html +517 -0
  177. package/site/public-seed/reports/bytecode-multicall3-mainnet-runtime--research.html +544 -0
  178. package/site/public-seed/reports/bytecode-safe-proxy-factory-v130-mainnet-runtime--default.html +570 -0
  179. package/site/public-seed/reports/bytecode-safe-proxy-factory-v130-mainnet-runtime--research.html +595 -0
  180. package/site/public-seed/reports/bytecode-storage-heavy--default.html +595 -0
  181. package/site/public-seed/reports/bytecode-storage-heavy--research.html +595 -0
  182. package/site/public-seed/reports/bytecode-uniswap-v2-factory-mainnet-runtime--default.html +596 -0
  183. package/site/public-seed/reports/bytecode-uniswap-v2-factory-mainnet-runtime--research.html +596 -0
  184. package/site/public-seed/reports/bytecode-usdc-proxy-mainnet-runtime--default.html +547 -0
  185. package/site/public-seed/reports/bytecode-usdc-proxy-mainnet-runtime--research.html +572 -0
  186. package/site/public-seed/reports/bytecode-weth9-mainnet-runtime--default.html +549 -0
  187. package/site/public-seed/reports/bytecode-weth9-mainnet-runtime--research.html +549 -0
  188. package/site/public-seed/reports/indexers-balance-diff-indexer--default.html +481 -0
  189. package/site/public-seed/reports/indexers-explorer-replay-indexer--default.html +460 -0
  190. package/site/public-seed/reports/indexers-graph-network-subgraph-reduced--default.html +549 -0
  191. package/site/public-seed/reports/indexers-subgraph--default.html +548 -0
  192. package/site/public-seed/reports/traces-besu-debug-structlogs--default.html +469 -0
  193. package/site/public-seed/reports/traces-besu-debug-structlogs--research.html +469 -0
  194. package/site/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--default.html +549 -0
  195. package/site/public-seed/reports/traces-besu-mainnet-tracoor-debug-structlogs--research.html +549 -0
  196. package/site/public-seed/reports/traces-call-tracer-tree--default.html +518 -0
  197. package/site/public-seed/reports/traces-call-tracer-tree--research.html +518 -0
  198. package/site/public-seed/reports/traces-drpc-call-tracer-real--default.html +520 -0
  199. package/site/public-seed/reports/traces-drpc-call-tracer-real--research.html +520 -0
  200. package/site/public-seed/reports/traces-erigon-action-trace--default.html +518 -0
  201. package/site/public-seed/reports/traces-erigon-action-trace--research.html +518 -0
  202. package/site/public-seed/reports/traces-foundry-json-trace--default.html +493 -0
  203. package/site/public-seed/reports/traces-foundry-json-trace--research.html +521 -0
  204. package/site/public-seed/reports/traces-geth-json-rpc-structlogs--default.html +493 -0
  205. package/site/public-seed/reports/traces-geth-json-rpc-structlogs--research.html +493 -0
  206. package/site/public-seed/reports/traces-geth-mainnet-tracoor-debug-structlogs--default.html +521 -0
  207. package/site/public-seed/reports/traces-geth-mainnet-tracoor-debug-structlogs--research.html +549 -0
  208. package/site/public-seed/reports/traces-hardhat-debug-trace--default.html +493 -0
  209. package/site/public-seed/reports/traces-hardhat-debug-trace--research.html +493 -0
  210. package/site/public-seed/reports/traces-nethermind-debug-structlogs--default.html +517 -0
  211. package/site/public-seed/reports/traces-nethermind-debug-structlogs--research.html +517 -0
  212. package/site/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--default.html +549 -0
  213. package/site/public-seed/reports/traces-nethermind-mainnet-tracoor-debug-structlogs--research.html +549 -0
  214. package/site/public-seed/reports/traces-reth-mainnet-tracoor-debug-structlogs--default.html +521 -0
  215. package/site/public-seed/reports/traces-reth-mainnet-tracoor-debug-structlogs--research.html +549 -0
  216. package/site/public-seed/reports/traces-storage-heavy-trace--default.html +570 -0
  217. package/site/public-seed/reports/traces-storage-heavy-trace--research.html +570 -0
  218. package/site/public-seed/reports/validator-glamsterdam-devnet-operator-public--default.html +513 -0
  219. package/site/public-seed/reports/validator-operator-config--default.html +584 -0
  220. package/site/public-seed/reports/validator-operator-config-builder-gap--default.html +509 -0
  221. package/site/public-seed/reports/validator-operator-config-complete--default.html +441 -0
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
@@ -8,7 +8,7 @@ This is community open-source tooling. It is not official Ethereum Foundation to
8
8
 
9
9
  ## Why this exists
10
10
 
11
- The Ethereum Foundation Ecosystem Support Program has a Glamsterdam-focused wishlist that calls out developer tooling, impact analysis, explorer/indexer support, validator tooling, monitoring tooling, and data-driven research. Glamsterdam planning currently includes scheduled work around Block-Level Access Lists and ePBS, plus considered work around gas repricing, native ETH transfer logs, contract-size changes, state creation costs, calldata costs, and related areas.
11
+ The Ethereum Foundation Ecosystem Support Program has a Glamsterdam-focused wishlist that calls out developer tooling, impact analysis, explorer/indexer support, validator tooling, monitoring tooling, and data-driven research. Glamsterdam planning currently includes scheduled work around Block-Level Access Lists, ePBS, native ETH transfer logs, contract-size changes, calldata floor costs, access-list costs, state-creation gas, and related EVM changes, plus considered and proposed work tracked through the local EIP registry.
12
12
 
13
13
  The final Glamsterdam scope and exact parameters may change. This project keeps assumptions in a versioned EIP registry so detector behavior can be updated without rewriting every scanner.
14
14
 
@@ -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.4
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.4 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.4/glamsterdam-compat-lab-0.3.4.tgz
47
47
  ```
48
48
 
49
49
  See [docs/release.md](docs/release.md) for maintainer release checks and npm publishing notes.
@@ -72,12 +72,19 @@ Each scanner accepts `--registry <path>` and `--thresholds <path>` so EIP metada
72
72
 
73
73
  ## Public dataset seed
74
74
 
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.
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, `readiness.json` sourced from the EIP registry and client matrix, and CSV exports for spreadsheet and warehouse import.
76
76
 
77
- Regenerate it with:
77
+ The static dataset browser lives at [site/public-seed/index.html](site/public-seed/index.html). It is generated entirely from committed dataset files and can be opened directly in a browser for summary charts, report filters, text search, per-report, per-comparison, per-finding, and readiness source detail pages, raw JSON links, and fixture/provenance links. Index filters are reflected in the URL so filtered views can be shared.
78
+
79
+ 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.
80
+
81
+ Regenerate and verify it with:
78
82
 
79
83
  ```sh
80
84
  pnpm dataset:generate
85
+ pnpm dataset:check
86
+ pnpm site:generate
87
+ pnpm site:check
81
88
  ```
82
89
 
83
90
  ## What the scanners can detect
@@ -121,7 +128,7 @@ Use `--trace-out <path>` to save the fetched JSON-RPC trace response while also
121
128
 
122
129
  `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
130
 
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.
131
+ `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
132
 
126
133
  `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
134
 
@@ -131,7 +138,7 @@ Each scanner returns a `CompatibilityReport`:
131
138
 
132
139
  ```json
133
140
  {
134
- "toolVersion": "0.3.2",
141
+ "toolVersion": "0.3.4",
135
142
  "fork": "glamsterdam",
136
143
  "target": {
137
144
  "kind": "bytecode",
@@ -219,7 +226,7 @@ Release publishing notes live in [docs/release.md](docs/release.md).
219
226
 
220
227
  ## Roadmap
221
228
 
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.
229
+ 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; `v0.3.4` adds the static public-seed browser, detail/finding pages, and sourced readiness visibility exports.
223
230
 
224
231
  ## Disclaimer
225
232
 
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 fixture coverage added in `v0.3.3`; the static public-seed browser, detail/finding pages, and readiness exports are released in `v0.3.4`.
56
56
 
57
57
  Goal: publish reproducible compatibility research.
58
58
 
@@ -66,11 +66,14 @@ Goal: publish reproducible compatibility research.
66
66
 
67
67
  ## Phase 3: Devnet Integration
68
68
 
69
+ Status: started in `v0.3.4` with sourced readiness exports and static readiness pages.
70
+
69
71
  Goal: track moving client and spec readiness without hardcoding guesses.
70
72
 
71
73
  - Ingest public devnet and client compatibility metadata
72
74
  - Track spec/client changes against registry entries
73
75
  - Expand validator/operator compatibility matrix workflows
76
+ - Export source freshness, EIP status groupings, devnet participants, and matrix rows through the public dataset and static site
74
77
 
75
78
  ## Phase 4: Dashboard
76
79
 
@@ -1,8 +1,38 @@
1
1
  {
2
2
  "fork": "glamsterdam",
3
- "lastUpdated": "2026-05-08",
3
+ "lastUpdated": "2026-05-13",
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,269 @@
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": "lodestar",
224
+ "role": "consensus",
225
+ "versions": [
226
+ {
227
+ "version": "ethpandaops/lodestar: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-13",
233
+ "claim": "The glamsterdam-devnet-2 Kurtosis example lists lodestar with image ethpandaops/lodestar:glamsterdam-devnet-2 as a consensus-layer participant."
234
+ },
235
+ "notes": "Devnet image only. This is not a production Lodestar release compatibility claim."
236
+ }
237
+ ]
238
+ },
239
+ {
240
+ "name": "prysm",
241
+ "role": "consensus",
242
+ "versions": [
243
+ {
244
+ "version": "ethpandaops/prysm-beacon-chain:glamsterdam-devnet-3-minimal",
245
+ "status": "partial",
246
+ "source": {
247
+ "type": "public-devnet-spec",
248
+ "url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
249
+ "retrievedAt": "2026-05-13",
250
+ "claim": "The glamsterdam-devnet-2 Kurtosis example lists prysm with image ethpandaops/prysm-beacon-chain:glamsterdam-devnet-3-minimal as a consensus-layer participant."
251
+ },
252
+ "notes": "Devnet image only. This is not a production Prysm release compatibility claim."
253
+ }
254
+ ]
255
+ },
256
+ {
257
+ "name": "teku",
258
+ "role": "consensus",
259
+ "versions": [
260
+ {
261
+ "version": "ethpandaops/teku:glamsterdam-devnet-2",
262
+ "status": "partial",
263
+ "source": {
264
+ "type": "public-devnet-spec",
265
+ "url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
266
+ "retrievedAt": "2026-05-12",
267
+ "claim": "The glamsterdam-devnet-2 Kurtosis example lists teku with image ethpandaops/teku:glamsterdam-devnet-2 as a consensus-layer participant."
268
+ },
269
+ "notes": "Devnet image only. This is not a production Teku release compatibility claim."
270
+ }
271
+ ]
272
+ },
273
+ {
274
+ "name": "nimbus",
275
+ "role": "consensus",
276
+ "versions": [
277
+ {
278
+ "version": "ethpandaops/nimbus-eth2:glamsterdam-devnet-2-minimal",
279
+ "status": "partial",
280
+ "source": {
281
+ "type": "public-devnet-spec",
282
+ "url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
283
+ "retrievedAt": "2026-05-13",
284
+ "claim": "The glamsterdam-devnet-2 Kurtosis example lists nimbus with image ethpandaops/nimbus-eth2:glamsterdam-devnet-2-minimal as a consensus-layer participant."
285
+ },
286
+ "notes": "Devnet image only. This is not a production Nimbus release compatibility claim."
287
+ }
288
+ ]
289
+ },
290
+ {
291
+ "name": "grandine",
292
+ "role": "consensus",
293
+ "versions": [
294
+ {
295
+ "version": "ethpandaops/grandine:glamsterdam-devnet-2-minimal",
296
+ "status": "partial",
297
+ "source": {
298
+ "type": "public-devnet-spec",
299
+ "url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
300
+ "retrievedAt": "2026-05-13",
301
+ "claim": "The glamsterdam-devnet-2 Kurtosis example lists grandine with image ethpandaops/grandine:glamsterdam-devnet-2-minimal as a consensus-layer participant."
302
+ },
303
+ "notes": "Devnet image only. This is not a production Grandine release compatibility claim."
53
304
  }
54
305
  ]
55
306
  }
307
+ ],
308
+ "devnets": [
309
+ {
310
+ "name": "glamsterdam-devnet-2",
311
+ "status": "partial",
312
+ "source": {
313
+ "type": "public-devnet-spec",
314
+ "url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
315
+ "retrievedAt": "2026-05-12",
316
+ "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."
317
+ },
318
+ "participants": [
319
+ {
320
+ "role": "execution",
321
+ "name": "geth",
322
+ "image": "ethpandaops/geth:bal-devnet-6",
323
+ "status": "partial",
324
+ "notes": "Listed as the execution-layer participant image in the public devnet spec."
325
+ },
326
+ {
327
+ "role": "consensus",
328
+ "name": "prysm",
329
+ "image": "ethpandaops/prysm-beacon-chain:glamsterdam-devnet-3-minimal",
330
+ "status": "partial",
331
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
332
+ },
333
+ {
334
+ "role": "consensus",
335
+ "name": "lodestar",
336
+ "image": "ethpandaops/lodestar:glamsterdam-devnet-2",
337
+ "status": "partial",
338
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
339
+ },
340
+ {
341
+ "role": "consensus",
342
+ "name": "lighthouse",
343
+ "image": "ethpandaops/lighthouse:glamsterdam-devnet-3",
344
+ "status": "partial",
345
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
346
+ },
347
+ {
348
+ "role": "consensus",
349
+ "name": "teku",
350
+ "image": "ethpandaops/teku:glamsterdam-devnet-2",
351
+ "status": "partial",
352
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
353
+ },
354
+ {
355
+ "role": "consensus",
356
+ "name": "nimbus",
357
+ "image": "ethpandaops/nimbus-eth2:glamsterdam-devnet-2-minimal",
358
+ "status": "partial",
359
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
360
+ },
361
+ {
362
+ "role": "consensus",
363
+ "name": "grandine",
364
+ "image": "ethpandaops/grandine:glamsterdam-devnet-2-minimal",
365
+ "status": "partial",
366
+ "notes": "Listed as a consensus-layer participant image in the public devnet spec."
367
+ }
368
+ ],
369
+ "specVersions": [
370
+ {
371
+ "name": "consensus-specs",
372
+ "version": "v1.7.0-alpha.7",
373
+ "source": {
374
+ "type": "public-spec-release",
375
+ "url": "https://github.com/ethereum/consensus-specs/releases/tag/v1.7.0-alpha.7",
376
+ "sourceDate": "2026-04-29",
377
+ "retrievedAt": "2026-05-12",
378
+ "claim": "The consensus-specs v1.7.0-alpha.7 release is a pre-release containing Gloas changes used by the glamsterdam-devnet-2 spec."
379
+ }
380
+ },
381
+ {
382
+ "name": "execution-spec-tests",
383
+ "version": "bal@v5.6.1",
384
+ "source": {
385
+ "type": "public-spec-release",
386
+ "url": "https://github.com/ethereum/execution-spec-tests/releases/tag/bal%40v5.6.1",
387
+ "sourceDate": "2026-04-02",
388
+ "retrievedAt": "2026-05-12",
389
+ "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."
390
+ }
391
+ }
392
+ ],
393
+ "notes": "Devnet participation is tracked as partial readiness. Production release compatibility must come from client release notes or other explicit public statements."
394
+ },
395
+ {
396
+ "name": "soldogn-interop",
397
+ "status": "stable-multi-client-devnet-reported",
398
+ "source": {
399
+ "type": "public-interop-recap",
400
+ "url": "https://blog.ethereum.org/2026/05/02/soldogn-interop-recap",
401
+ "sourceDate": "2026-05-02",
402
+ "retrievedAt": "2026-05-12",
403
+ "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."
404
+ },
405
+ "participants": [],
406
+ "specVersions": [],
407
+ "notes": "Interop recap is useful context for the matrix, but this entry intentionally avoids per-client production compatibility claims."
408
+ }
56
409
  ]
57
410
  }