Validator and operator reports compare declared client metadata against data/client-compat/clients.example.json or a user-provided matrix passed with scan-validator --client-matrix.
The matrix is intentionally conservative. It records sourced statuses; it does not infer compatibility from a client name, a client family, or participation in older forks.
compatible: the source explicitly says this client version or image is compatible with the tracked Glamsterdam scope.partial: the source shows devnet participation, test support, prerelease support, or incomplete readiness, but not production release compatibility.incompatible: the source explicitly says this client version is incompatible or should not be used for the tracked scope.unknown: no explicit readiness claim is available, or the available source is intentionally inconclusive.
Use unknown when a source does not state Glamsterdam readiness. Do not promote an entry to compatible because a client appears in a devnet, contains related code, or supports a prior fork.
Each client version entry must include a source object:
{
"version": "ethpandaops/geth:bal-devnet-6",
"status": "partial",
"source": {
"type": "public-devnet-spec",
"url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
"retrievedAt": "2026-05-13",
"claim": "The glamsterdam-devnet-2 Kurtosis example lists geth with image ethpandaops/geth:bal-devnet-6 as the execution-layer participant."
},
"notes": "Devnet image only. This is not a production Geth release compatibility claim."
}Supported source types are:
public-devnet-specpublic-interop-recappublic-client-releasepublic-spec-releasesynthetic-exampleoperator-maintained
For public sources, use stable public URLs and record the date you retrieved the source. Add sourceDate when the source has a clear publication or release date. Use public-devnet-spec and public-interop-recap for devnet image provenance, public-client-release for client release-note provenance, and operator-maintained for an operator or client team compatibility statement maintained outside release notes.
public-client-release can support partial only when the release note explicitly mentions Glamsterdam, Amsterdam, Gloas, ePBS, Block Access Lists, or a tracked fork EIP. It can support compatible only when the release note explicitly says the version is compatible or ready for the tracked Glamsterdam/Amsterdam/Gloas scope.
All matrix dates use YYYY-MM-DD.
The matrix can also include devnets entries. These are useful for tracking public devnet context separately from production client release compatibility:
{
"name": "glamsterdam-devnet-2",
"status": "partial",
"source": {
"type": "public-devnet-spec",
"url": "https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2",
"retrievedAt": "2026-05-13",
"claim": "The glamsterdam-devnet-2 spec includes a Kurtosis participants matrix with specific EL and CL devnet images."
},
"participants": [
{
"role": "execution",
"name": "geth",
"image": "ethpandaops/geth:bal-devnet-6",
"status": "partial"
}
]
}Devnet entries should not be treated as production compatibility claims. Use them as provenance for test images, interoperability context, and follow-up review.
Every devnet participant with a concrete execution, consensus, or validator client image should also have a matching client version entry, unless the matrix documents a deliberate exclusion. This keeps operator fixtures from reporting unknown for an image that the same matrix already cites as a sourced public devnet participant.
When a devnet entry lists specVersions, add a source object for each spec version when a public release page or spec document is available.
scan-validator looks for executionClient, consensusClient, and validatorClient metadata in the operator config. It reports:
- missing client names or versions;
- unknown compatibility when a client/version is absent from the matrix;
partial,unknown, orincompatiblematrix statuses as findings;- no client compatibility finding when a sourced matrix entry is
compatible.
The scanner reports the matrix value without trying to override it. Update the matrix from explicit release notes, devnet specs, or operator-maintained source documents when readiness changes.
Run the offline matrix checker after editing data/client-compat/clients.example.json:
pnpm client-matrix:checkThe checker validates schema shape, duplicate client keys, source dates against lastUpdated, devnet participant/client-entry consistency, documented participant exclusions, and conservative status rules. Public devnet, interop, and spec-release sources cannot be used as compatible client claims; keep those entries partial or unknown unless an explicit client release or operator-maintained source supports compatibility. Public client releases also need explicit fork-signal text for partial and explicit compatibility/readiness wording for compatible.
Run the live freshness audit when reviewing whether source records need a new retrieval pass:
pnpm readiness:freshness
pnpm readiness:freshness --as-of 2026-08-15Generated artifacts classify source retrieval age against readiness.lastUpdated: fresh is 0-30 days, watch is 31-90 days, and stale is more than 90 days. The live audit compares the same retrievedAt values against the current date by default. watch and stale are refresh prompts only; they do not mean the client is incompatible.
The public seed dataset also exports matrix visibility into datasets/public-seed/readiness.json, readiness-clients.csv, readiness-devnets.csv, and readiness-sources.csv. The readiness JSON and static browser include source-type counts so maintainers can distinguish devnet image provenance, client release-note provenance, spec provenance, synthetic examples, and operator-maintained claims. These exports are audit aids: they show what the matrix says, how old the sources are, and which devnet participants are mirrored by client-version rows. They do not promote devnet participation to production compatibility.
The current source-review snapshot is dated 2026-05-13. Refresh this table when data/eips/glamsterdam.json, data/client-compat/clients.example.json, or the public readiness sources change.
| URL | Retrieved | Source date | Claim | Conservative note |
|---|---|---|---|---|
https://eips.ethereum.org/EIPS/eip-7773 |
2026-05-13 | 2024-09-26 | Lists scheduled, considered, declined, and proposed Glamsterdam EIPs; activation rows remain unfilled. | Canonical status grouping for the local registry until the meta EIP changes. |
https://ethereum.org/roadmap/glamsterdam/ |
2026-05-13 | 2026-04-13 | Describes Glamsterdam as an upcoming H1 2026 upgrade and points to Forkcast for latest status. | Roadmap context only; use EIP-7773/Forkcast for status grouping. |
https://forkcast.org/upgrade/glamsterdam/ |
2026-05-13 | unknown | Public status surface linked from ethereum.org and EF Checkpoint #9. | Keep as a pointer unless structured status is ingested explicitly. |
https://blog.ethereum.org/2026/04/10/checkpoint-9 |
2026-05-13 | 2026-04-10 | Explains scheduled and considered Glamsterdam feature expectations and devnet sequencing. | Process/status context, not a client compatibility source. |
https://blog.ethereum.org/2026/05/02/soldogn-interop-recap |
2026-05-13 | 2026-05-02 | Reports stable multi-client Glamsterdam devnet progress and nearly all clients on glamsterdam-devnet-2. | Interop progress is not production release compatibility. |
https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2 |
2026-05-13 | unknown | Lists glamsterdam-devnet-2 EIPs, spec versions, and Kurtosis participant images. | Devnet participant images remain partial. |
https://github.com/ethereum/consensus-specs/releases/tag/v1.7.0-alpha.7 |
2026-05-13 | 2026-04-29 | Pre-release with Gloas changes referenced by the devnet spec. | Spec provenance, not a client release. |
https://github.com/ethereum/execution-spec-tests/releases/tag/bal%40v5.6.1 |
2026-05-13 | 2026-04-02 | BAL/state-gas pre-release used by devnet testing. | Spec-test provenance, not a client release. |
https://github.com/ethereum/go-ethereum/releases/tag/v1.17.3 |
2026-05-13 | 2026-05-11 | Describes continued progress on Amsterdam implementation and lists prerequisites for EIP-7928, EIP-8037, EIP-7976, EIP-7981, EIP-7610, and updated state tests. | Recorded as partial; it does not assert complete Glamsterdam production compatibility. |
https://github.com/NethermindEth/nethermind/releases/tag/1.37.2 |
2026-05-13 | 2026-05-05 | Describes healthcheck and archive invalid-block fixes for v1.37.1. | Recorded as unknown; no explicit Glamsterdam/Amsterdam readiness signal found. |
https://github.com/besu-eth/besu/releases/tag/26.5.0 |
2026-05-13 | 2026-05-12 | Lists Block Access List pipeline work, EIP-7928 budget enforcement, Block Access List encoding changes, and EIP-7981 added to Amsterdam. | Recorded as partial; it does not assert complete Glamsterdam production compatibility. |
https://github.com/paradigmxyz/reth/releases/tag/v2.2.0 |
2026-05-13 | 2026-04-30 | Says the release lays groundwork for Amsterdam EIP-7928 Block Access Lists with BAL store, P2P, builder, and execution-path work. | Recorded as partial; groundwork and gated paths are not complete readiness. |
https://github.com/sigp/lighthouse/releases/tag/v8.1.3 |
2026-05-13 | 2026-03-26 | Latest Lighthouse release focuses on security fixes, Gnosis Fulu scheduling, and performance fixes. | Recorded as unknown; the latest release note does not itself state Glamsterdam/Amsterdam/Gloas readiness. |
https://github.com/sigp/lighthouse/releases/tag/v8.1.0 |
2026-05-13 | 2026-02-05 | Lists Gloas gossip, data-column, consensus type, payment-field, and EIP-7732 container/constant work. | Recorded as partial; it does not assert complete Glamsterdam production compatibility. |
https://github.com/ChainSafe/lodestar/releases/tag/v1.42.0 |
2026-05-13 | 2026-04-13 | Says Lodestar is making great strides toward the Gloas hard fork and lists Gloas/ePBS implementation work. | Recorded as partial; it does not assert complete Glamsterdam production compatibility. |
https://github.com/OffchainLabs/prysm/releases/tag/v7.1.3 |
2026-05-13 | 2026-03-18 | Describes extensive Gloas groundwork and lists builder, bid, slashing, API, payload attestation, and timing work. | Recorded as partial; it does not assert complete Glamsterdam production compatibility. |
https://github.com/Consensys/teku/releases/tag/26.4.0 |
2026-05-13 | 2026-03-31 | Adds the PostPtcDuties REST API endpoint for the Gloas API. | Recorded as partial; it does not assert complete Glamsterdam production compatibility. |
https://github.com/status-im/nimbus-eth2/releases/tag/v26.3.1 |
2026-05-13 | 2026-03-28 | Describes Ethereum column-handling performance, validator robustness, Gnosis Fulu scheduling, and fast-confirmation work. | Recorded as unknown; no explicit Glamsterdam/Amsterdam/Gloas readiness signal found. |
https://github.com/grandinetech/grandine/releases/tag/2.0.4 |
2026-05-13 | 2026-03-31 | Lists post-Gloas beacon block API publishing, execution payload bid endpoints, payload attestation ticks, and consensus spec tests v1.7.0-alpha.3. | Recorded as partial; it does not assert complete Glamsterdam production compatibility. |
- Add or update a client version entry in
data/client-compat/clients.example.json. - Include a source URL, retrieval date, and exact claim summary.
- Prefer
partialfor devnet images and prerelease testing. - Prefer
unknownwhen the source does not explicitly state readiness. - Use
matrixEntryExclusion.reasonon a devnet participant only when a concrete image intentionally should not have a matching client version entry. - Regenerate dataset and site artifacts when source records, source dates, client statuses, or devnet participants change.
- Add scanner tests when a new matrix shape or status path is introduced.
- Run:
pnpm client-matrix:check
pnpm dataset:generate
pnpm site:generate
pnpm dataset:check
pnpm site:check
pnpm test
pnpm buildIf generated validator reports change, also run:
pnpm dataset:generate
pnpm test:update