feat(consume): Consume tests with runloop monad#32
Merged
Conversation
This was referenced Jul 7, 2026
pdobacz
force-pushed
the
execute-with-eestnet
branch
3 times, most recently
from
July 7, 2026 11:13
bf464a1 to
1ab8995
Compare
Co-Authored-By: Claude <claude-opus-4-8> (cherry picked from commit 68a3578)
Co-Authored-By: Claude <claude-opus-4-8[1m]> (cherry picked from commit 84ae0fc)
Cuts per-test runtime ~70x (112s to ~1.6s) with identical post-state. Co-Authored-By: Claude <claude-opus-4-8[1m]> (cherry picked from commit 2561c49)
Names the container and sets PR_SET_PDEATHSIG so a killed docker client no longer leaves the runloop spinning past pytest. Co-Authored-By: Claude <claude-opus-4-8[1m]> (cherry picked from commit 428fc1f)
Co-Authored-By: Claude <claude-opus-4-8[1m]> (cherry picked from commit e62599e)
Stamps monad consensus header fields so filled block hashes + EIP-2935 storage match the runloop; consumer now checks them and the state root. Co-Authored-By: Claude <claude-opus-4-8[1m]> (cherry picked from commit de3b3cb)
(cherry picked from commit 13aad44)
Adds MONAD_NEXT/transition revision schedules and --state-machine monad for MIP-8. Co-Authored-By: Claude <claude-opus-4-8[1m]> (cherry picked from commit c5b6f2e)
Slot/page/dual-db init from the fixture revision schedule. Co-Authored-By: Claude Opus 4.8 (1M context) (cherry picked from commit cad717d)
Co-Authored-By: Claude Opus 4.8 (1M context) (cherry picked from commit 702b90a)
200M default gas limit under --monad-runloop, monad_runloop skip marker, mip4 transition fork-scope fix. Co-Authored-By: Claude Opus 4.8 (1M context) (cherry picked from commit c037989)
Fills with --monad-runloop on eestnet chain through MONAD_NEXT for the eest-runner consumer. Co-Authored-By: Claude Opus 4.8 (1M context) (cherry picked from commit 64b5770)
Removes the pre-monad entry transition; its only consumer (p256verify before-fork test) now resolves to no forks. Co-Authored-By: Claude Opus 4.8 (1M context) (cherry picked from commit 6321736)
Run a fixtures release against a pinned monad stack via consume direct + eest-runner. Co-Authored-By: Claude Opus 4.8 (1M context) (cherry picked from commit c3b7aff)
pdobacz
force-pushed
the
execute-with-eestnet
branch
from
July 15, 2026 12:18
1ab8995 to
01cd8ee
Compare
Add the monad fork's release repo to SUPPORTED_REPOS so monad_runloop@... etc. resolve. Releases live in execution-specs now that EEST mirroring is disabled. Co-Authored-By: Claude <claude-opus-4-8>
Summary now sources effective release/filter and resolved stack SHAs from the steps that ran (push events leave inputs empty); artifact keeps consume.log only. Co-Authored-By: Claude Opus 4.8 (1M context) (cherry picked from commit 5e20ed4)
Co-Authored-By: Claude Opus 4.8 (1M context) (cherry picked from commit 6d1fa4d)
pdobacz
force-pushed
the
execute-with-eestnet
branch
from
July 15, 2026 12:24
01cd8ee to
d415ab4
Compare
Co-Authored-By: Claude <claude-opus-4-8>
pdobacz
marked this pull request as ready for review
July 15, 2026 13:10
Prevents shell/output injection via inputs.release and inputs.filter. Co-Authored-By: Claude <claude-fable-5>
Co-Authored-By: Claude <claude-opus-4-8>
Strip the tests- tag prefix when deriving fixtures_<feature>.tar.gz. Co-Authored-By: Claude <claude-opus-4-8>
Collaborator
Author
|
Tacked on last commit to not point to Will merge once CI clears |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a
consume directtest consumer enabling execution of spec test fixtures against a more production-like environment ofmonadexecution client.Currently there are 3 main use cases for this setup:
Requires https://github.com/monad-exp/monad-eest-rust-harness/pull/1
Greptile Summary
This PR wires a new
MonadFixtureConsumer(consume direct) into the EEST framework so blockchain fixtures can be executed against the production monad runloop via theeest-runnerharness. It also adds a--monad-runloopfiller flag that stamps consensus-derived header fields (prev_randao, gas_limit, extra_data, requests_hash) so filled block hashes and EIP-2935 history storage match what the runloop produces.MonadFixtureConsumer(clis/monad.py): digests fixtures into aneest-runnerinput document, provisions a fresh triedb (slot-encoded, page-encoded, or dual-timeline for transition forks), spawns the harness with container-lifecycle cleanup viaPR_SET_PDEATHSIG+docker kill, and compares every post-state account and the final state root against the fixture.--monad-runloopfiller option: stamps monad-specific header fields during fill and propagates amonad_runloopmarker so tests that rely on a test-controlled gas limit (e.g.test_tx_gas_limit) can skip themselves gracefully.PragueToMONAD_EIGHTAtTime15ktransition fork and narrows themip4test to only the MONAD_NINE transition boundary.Confidence Score: 5/5
Safe to merge; the new consumer, filler option, and workflow are self-contained and don't touch shared production paths.
The core MonadFixtureConsumer logic is carefully scoped: it only activates on MONAD_EIGHT+ fixture networks, cleans up Docker containers on every exit path, and compares results field-by-field. The --monad-runloop flag is opt-in and isolated from existing fill flows. The one non-blocking concern (no per-test harness timeout) is a reliability nit with no correctness impact.
packages/testing/src/execution_testing/client_clis/clis/monad.py — the communicate() call in _run_harness has no per-invocation timeout.
Important Files Changed
Sequence Diagram
%%{init: {'theme': 'neutral'}}%% sequenceDiagram participant pytest participant MonadFixtureConsumer participant monad_mpt participant eest_runner participant Docker pytest->>MonadFixtureConsumer: consume_fixture(fixture_path) MonadFixtureConsumer->>MonadFixtureConsumer: load + validate fixture JSON MonadFixtureConsumer->>MonadFixtureConsumer: skip if any expectException block MonadFixtureConsumer->>monad_mpt: --create (slot/page/dual triedb) alt transition fixture (slot+page) MonadFixtureConsumer->>monad_mpt: --activate-secondary end MonadFixtureConsumer->>MonadFixtureConsumer: write input.json (genesis alloc + blocks) MonadFixtureConsumer->>eest_runner: Popen(--input, --output, --ledger-dir, --db) eest_runner->>Docker: start runloop container (EEST_RUNNER_CONTAINER_NAME) eest_runner->>Docker: propose + finalize blocks via ledger sim Docker-->>eest_runner: execution results eest_runner-->>MonadFixtureConsumer: output.json (post_state, state_root) MonadFixtureConsumer->>MonadFixtureConsumer: compare post_state accounts MonadFixtureConsumer->>MonadFixtureConsumer: compare state_root vs last blockHeader MonadFixtureConsumer-->>pytest: pass / raise Exception(mismatches)%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%% sequenceDiagram participant pytest participant MonadFixtureConsumer participant monad_mpt participant eest_runner participant Docker pytest->>MonadFixtureConsumer: consume_fixture(fixture_path) MonadFixtureConsumer->>MonadFixtureConsumer: load + validate fixture JSON MonadFixtureConsumer->>MonadFixtureConsumer: skip if any expectException block MonadFixtureConsumer->>monad_mpt: --create (slot/page/dual triedb) alt transition fixture (slot+page) MonadFixtureConsumer->>monad_mpt: --activate-secondary end MonadFixtureConsumer->>MonadFixtureConsumer: write input.json (genesis alloc + blocks) MonadFixtureConsumer->>eest_runner: Popen(--input, --output, --ledger-dir, --db) eest_runner->>Docker: start runloop container (EEST_RUNNER_CONTAINER_NAME) eest_runner->>Docker: propose + finalize blocks via ledger sim Docker-->>eest_runner: execution results eest_runner-->>MonadFixtureConsumer: output.json (post_state, state_root) MonadFixtureConsumer->>MonadFixtureConsumer: compare post_state accounts MonadFixtureConsumer->>MonadFixtureConsumer: compare state_root vs last blockHeader MonadFixtureConsumer-->>pytest: pass / raise Exception(mismatches)Reviews (5): Last reviewed commit: "chore(ci): Use monad-eest-rust-harness a..." | Re-trigger Greptile