208 lines
13 KiB
Markdown
208 lines
13 KiB
Markdown
# EVM interface delivery and migration checkpoint
|
||||
|
|
|
|||
|
|
Continues [#2016](https://github.com/morluto/rea/issues/2016) after the static
|
|||
|
|
descriptor merged in [#2261](https://github.com/morluto/rea/pull/2261). Opt-in
|
|||
|
|
`inspect_evm_interface` MCP `detail: "summary"` returns every inferred interface
|
|||
|
|
candidate without bytecode hex or duplicate stdout. Complete Evidence remains
|
|||
|
|
retained under its original identity. Delivery bytes fall; the measured model
|
|||
|
|
cohort does **not** establish a stable token or task-time improvement.
|
|||
|
|
|
|||
|
|
## Frozen scope
|
|||
|
|
|
|||
|
|
Control production is `ad08510a113d7a9b8d92fb1e385757880e469869`; candidate
|
|||
|
|
production is `32c7548b9ae5c8cda348653d177b1747127c74ba`. Their compiled file-table
|
|||
|
|
SHA-256 values are respectively
|
|||
|
|
`f68e85030cb05082520ea9f0d7650298ae316ce7bba59a8942e0cc1318ae9850` and
|
|||
|
|
`978b3a014e3b2a1e1c6620364dcd793fa7cb40f19892d44cfb0312739a8c14a3`.
|
|||
|
|
The SDK driver SHA-256 is
|
|||
|
|
`a95d8d8e9f72c0b2b885c61907ed13054ebf7d1642f6f13b0126163840b1221a`.
|
|||
|
|
Driver commit `03bff83e70e09a917341c1fe3ebffbfdc67785c5` fixes only reading the
|
|||
|
|
public `get_evidence_bundle.result.records` envelope; production is unchanged.
|
|||
|
|
Both runtimes use Node 24.18.0, matching locked dependencies, SDK client/server
|
|||
|
|
2.3.1 and unchanged bundled EVMole 0.9.3.
|
|||
|
|
|
|||
|
|
Inputs are the digest-pinned WETH historical hex carrier and Uniswap v3-core
|
|||
|
|
1.0.1 Factory/Pool compiler runtime templates in [corpus.json](corpus.json).
|
|||
|
|
Original carrier and decoded-byte identities remain distinct. Templates are
|
|||
|
|
not authenticated deployed instances; constructor-dependent values and absent
|
|||
|
|
immutable-reference metadata stay unknown. No chain, target execution or
|
|||
|
|
signature lookup is introduced.
|
|||
|
|
|
|||
|
|
## Public SDK pairs
|
|||
|
|
|
|||
|
|
Two pairs per artifact run serially: complete control then selected candidate,
|
|||
|
|
followed by candidate then control. Each starts a fresh MCP process, discovers
|
|||
|
|
the catalog and validates the actual named advertised schema. Host caches are
|
|||
|
|
not independently controlled. All six fact/settings comparisons pass. Both
|
|||
|
|
answer projections omit unrequested hex; original complete replies remain intact.
|
|||
|
|
|
|||
|
|
| Input | Complete / summary result bytes | Reduction | Control seconds, 1 / 2 | Candidate seconds, 1 / 2 |
|
|||
|
|
| ------- | ------------------------------: | --------: | ---------------------: | -----------------------: |
|
|||
|
|
| Factory | 110,424 / 14,442 | 86.92% | 3.670 / 3.766 | 3.664 / 3.867 |
|
|||
|
|
| Pool | 110,998 / 19,922 | 82.05% | 4.110 / 3.740 | 3.977 / 3.870 |
|
|||
|
|
| WETH | 26,760 / 15,378 | 42.53% | 3.671 / 3.710 | 3.930 / 3.673 |
|
|||
|
|
|
|||
|
|
These measurements support smaller delivery, not faster interpretation. Analysis
|
|||
|
|
still runs and the full parent still incurs producer/retention costs. Catalog
|
|||
|
|
count and order stay at 184 tools. The complete catalog grows from 2,422,229 to
|
|||
|
|
2,429,938 compact JSON bytes (+7,709); all name/description/input definitions
|
|||
|
|
grow from 512,655 to 514,074 bytes. The EVM input definition grows from 1,443 to
|
|||
|
|
2,029 bytes. Only `inspect_analysis_view` and `inspect_evm_interface` definitions
|
|||
|
|
change. These discovery costs are visible and are not converted into token counts.
|
|||
|
|
|
|||
|
|
Nine separate measurements verify new-server complete defaults, old-server
|
|||
|
|
summary fallback and retained reads for all three inputs. The four-call retained
|
|||
|
|
proofs retrieve the complete canonical parent plus pages and cost 160,110,
|
|||
|
|
177,106 and 79,160 bytes for Factory, Pool and WETH respectively. They are
|
|||
|
|
verification workflows, not examples of one-call delivery savings.
|
|||
|
|
|
|||
|
|
## Real Codex pairs and answer qualification
|
|||
|
|
|
|||
|
|
Twelve serial Codex CLI 0.161.0 trials use the existing identical questions for
|
|||
|
|
each pair, the same artifact path, one enabled EVM tool, temporary MCP profiles
|
|||
|
|
and requested `gpt-5.6-terra` high. The requested alias is not proof of the
|
|||
|
|
resolved model identity. Trials include schema discovery, reasoning, one actual
|
|||
|
|
successful EVM call and final answer. No call fails or retries. Profiles are
|
|||
|
|
removed and input bytes remain unchanged. This fixed one-tool profile does not
|
|||
|
|
test selection from the full catalog.
|
|||
|
|
|
|||
|
|
| Input / repetition | Uncached input, control → candidate | Seconds, control → candidate | Candidate delivery |
|
|||
|
|
| ------------------ | ----------------------------------: | ---------------------------: | ------------------ |
|
|||
|
|
| Factory / 1 | 22,901 → 25,668 | 52.485 → 48.768 | summary |
|
|||
|
|
| Factory / 2 | 37,181 → 15,270 | 53.404 → 45.345 | summary |
|
|||
|
|
| Pool / 1 | 36,652 → 26,657 | 57.764 → 66.642 | summary |
|
|||
|
|
| Pool / 2 | 28,305 → 36,259 | 62.068 → 71.756 | complete |
|
|||
|
|
| WETH / 1 | 21,128 → 25,187 | 44.869 → 46.809 | summary |
|
|||
|
|
| WETH / 2 | 17,417 → 17,529 | 30.364 → 39.943 | summary |
|
|||
|
|
|
|||
|
|
Keep all trials, including the candidate that explicitly chose complete delivery.
|
|||
|
|
Five of six candidates select summary, but uncached input improves in only two
|
|||
|
|
pairs and time improves in only two. Aggregate control → candidate observations
|
|||
|
|
are 362,496 → 357,770 total input; 198,912 → 211,200 cached input;
|
|||
|
|
163,584 → 146,570 uncached input; 8,953 → 10,397 output; and
|
|||
|
|
300.954 → 319.263 seconds. Cache state and model/service variation are not
|
|||
|
|
separated; the aggregate does not establish a repeatable saving for an individual
|
|||
|
|
question or a qualified performance recommendation.
|
|||
|
|
|
|||
|
|
Every answer passes exact core-field checks: both identities/byte counts, every
|
|||
|
|
function selector/offset/dispatch/argument/mutability including null, inference,
|
|||
|
|
unknown completeness/kind/hardfork/authenticity, and absent runtime execution.
|
|||
|
|
All reported IDs occur in actual responses. However, the existing grader requires
|
|||
|
|
the final limitation list to equal the producer list verbatim and in order.
|
|||
|
|
Only three trials pass that additional check; nine fail. The questions request
|
|||
|
|
preserving limitations but do not explicitly request a verbatim ordered list.
|
|||
|
|
Four failures contain all original strings with extra correct scope statements
|
|||
|
|
or different ordering. The other five paraphrase or omit source caveats, including
|
|||
|
|
worker or upstream-metadata limitations. Do not silently waive those omissions
|
|||
|
|
or turn these into twelve fully acceptable answers. The strict reports and
|
|||
|
|
original transcripts remain intact; core-field success is a narrower result.
|
|||
|
|
|
|||
|
|
Model scope sampled peaks range from 562.5 to 710.5 MiB, with last-observed CPU
|
|||
|
|
5.945–6.878 seconds. CPU includes the local process family, not remote model
|
|||
|
|
computation. All heavy jobs use one CPU, a 4 GiB hard limit, 3 GiB early-stop,
|
|||
|
|
no swap and 192 tasks. No scope abort occurs in this cohort. Final cgroup
|
|||
|
|
counters are unavailable after teardown: final OOM/task/limit-event assertions
|
|||
|
|
remain **unverified**. Last-observed counters are not substituted for final ones.
|
|||
|
|
Consequently neither strict answer acceptance nor resource-qualified performance
|
|||
|
|
success is claimed for the whole cohort.
|
|||
|
|
|
|||
|
|
## Existing-user compatibility
|
|||
|
|
|
|||
|
|
Omitted and explicit-complete MCP requests, the existing CLI and provider inputs
|
|||
|
|
preserve their full behavior. `detail` is removed before the unchanged provider
|
|||
|
|
input; original full Evidence parameters, raw result and identity are retained.
|
|||
|
|
Summary receives its own identity linked to that parent. All candidate facts,
|
|||
|
|
original report limitations, stderr/truncation and explicit unknowns stay inline.
|
|||
|
|
Complete-within-view candidate coverage is not global discovery completeness.
|
|||
|
|
Function pages retain original order; text pages use UTF-16 code units, with
|
|||
|
|
hex characters distinguished from decoded-byte function offsets.
|
|||
|
|
|
|||
|
|
Actual new default replies for all three artifacts validate against the frozen
|
|||
|
|
old advertised input/output schemas, and structured/text payloads agree. Older
|
|||
|
|
servers reject neither request nor unsupported fields because the experimental
|
|||
|
|
client discovers support before selecting summary and otherwise calls complete.
|
|||
|
|
This is an explicit client fallback, not universal server forward compatibility.
|
|||
|
|
|
|||
|
|
Three authentic old-runtime records and old-created canonical bundles pass new
|
|||
|
|
MCP import, retained summary, CLI inline summary and export. Original records,
|
|||
|
|
IDs and bundle source bytes stay deeply equal. The reproducible verifier below
|
|||
|
|
also checks function/hex pages with the analysis limiter explicitly unavailable,
|
|||
|
|
so retained reads cannot silently start successful producer analysis. This
|
|||
|
|
proves the pinned old/new Linux workflows, not every historical client release.
|
|||
|
|
|
|||
|
|
The initial retained experiment failed because its driver read the bundle's
|
|||
|
|
wrong envelope. Correcting that consumer produced passing retained proofs; the
|
|||
|
|
failed receipt stays archived and is not recorded as a REA defect. Separately,
|
|||
|
|
one static-check attempt hit the unchanged 3 GiB early-stop. The bounded retry
|
|||
|
|
passes with Node heap 512 MiB/native checker memory controls; its roughly 3 GiB
|
|||
|
|
peak and soft-limit events are excluded from efficiency comparisons.
|
|||
|
|
|
|||
|
|
## Reproduction and checks
|
|||
|
|
|
|||
|
|
Use [the shared instructions](README.md), explicit frozen revisions/runtimes and
|
|||
|
|
fresh private output directories. Run `measure.mjs` for `weth.hex`,
|
|||
|
|
`uniswap-v3.factory.hex` and `uniswap-v3.pool.hex`, with `--schemas selected` and
|
|||
|
|
paired `--delivery complete` / `summary`; run `compare.mjs` on equivalent pairs.
|
|||
|
|
Add `--verify-retained` only for the separate four-call proof. Use the unchanged
|
|||
|
|
[WETH](questions/evm.txt) or [template](questions/evm-uniswap.txt) question and the
|
|||
|
|
same one-tool profile for `agent-trial.py`, preserving all usage and grader results.
|
|||
|
|
|
|||
|
|
Export complete Evidence with the old runtime's public ledger workflow, then run:
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
node experiments/analysis-efficiency/verify-evm-retention.mjs \
|
|||
|
|
--runtime-root ABS_FROZEN_NEW_RUNTIME --revision NEW_SHA \
|
|||
|
|
--bundle ABS_OLD_BUNDLE_JSON --output NEW_PRIVATE_ABS_DIR
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
The script acquires no dependencies and preserves the old bundle. Revision is
|
|||
|
|
caller-supplied; retain the frozen file-table receipt alongside it. Raw JSON,
|
|||
|
|
transcripts, profiles, bytecode, compiler inputs and generated artifacts stay
|
|||
|
|
outside Git. This checkpoint adds source verification and curated observations.
|
|||
|
|
|
|||
|
|
The production change passes 64 focused EVM/WASM/generic-view/domain/service
|
|||
|
|
checks and full static/docs gates. Recording provider seams establish exact
|
|||
|
|
schemas, old defaults, inference/null preservation, historical identity failures,
|
|||
|
|
peer availability, cancellation and cleanup retry; they are not real-provider
|
|||
|
|
claims. Real-provider and shared-domain checks are recorded separately.
|
|||
|
|
|
|||
|
|
The same frozen candidate also passes six actual public MCP artifact workflows:
|
|||
|
|
SQLite WASM with WABT summary, ShareX managed metadata, Obsidian inventory,
|
|||
|
|
NewPipe with JADX, an OpenWrt region inspection, and jq entry analysis with
|
|||
|
|
Ghidra. These are shared-contract regressions; they do not establish AST analysis
|
|||
|
|
of all Obsidian code, full firmware reconstruction, browser coverage, or new token
|
|||
|
|
savings in those domains. Native Windows PE and DOS coverage remains at the
|
|||
|
|
[earlier native checkpoint](native-entry-views.md), not a new Ghidra/Windows claim.
|
|||
|
|
The source retention verifier passes for all three authentic old EVM bundles,
|
|||
|
|
including exact summaries, function/hex pages, CLI inline views and unchanged
|
|||
|
|
exported originals with the limiter explicitly unavailable.
|
|||
|
|
|
|||
|
|
The frozen candidate passes all 59 existing real EVM CLI/MCP verifier cases with
|
|||
|
|
caller-supplied solc 0.8.30 and strace 6.1, including malformed/unsupported
|
|||
|
|
carriers, unavailable limiter and capacity failures. Its scope takes 96.076
|
|||
|
|
seconds with 1,345,052,672 sampled peak bytes and 95.130 last-observed CPU seconds.
|
|||
|
|
This is regression evidence, not an interpreter speedup comparison; final
|
|||
|
|
resource counters remain unverified. Fresh fast static and generated-document
|
|||
|
|
checks also pass after adding the migration verifier and this report.
|
|||
|
|
|
|||
|
|
## Latest-main integration
|
|||
|
|
|
|||
|
|
The branch rebases without conflict onto main
|
|||
|
|
`0043d9b134c0a353e8bf85c0bde4492275f1f720`. Production integration commit
|
|||
|
|
`3766749316c345ccb594b1b748747b1af9582b34` preserves the same EVM projection,
|
|||
|
|
provider and delivery semantics; intervening main adds unrelated capabilities.
|
|||
|
|
The above performance cohort stays pinned to its original frozen runtimes and
|
|||
|
|
is not relabeled as a measurement of the larger integrated catalog.
|
|||
|
|
|
|||
|
|
At `cda794fb9d4a5ca2bd661853a899d579fb8a47b2`, all 30 affected EVM/WASM/generic-view
|
|||
|
|
MCP tests pass again, as do full `npm run check` and `npm run docs:check`. A fresh
|
|||
|
|
real Factory SDK selected-summary/retained-parent/page workflow and the original
|
|||
|
|
Pool bundle's SDK/CLI migration verifier also pass against the rebuilt integrated
|
|||
|
|
runtime. The latter still has an explicitly unavailable analysis limiter.
|
|||
|
|
|
|||
|
|
The initial integrated static-check scope stops at 3,221,446,656 sampled bytes,
|
|||
|
|
just above the unchanged 3 GiB early-stop. Running the same typecheck through
|
|||
|
|
its single Turbo task with less launcher overhead passes at 3,219,353,600 sampled
|
|||
|
|
bytes; the subsequent full gate uses that valid cached typecheck and passes.
|
|||
|
|
No memory threshold or check requirement is relaxed. Preserve both receipts;
|
|||
|
|
these near-limit validation jobs are excluded from efficiency conclusions.
|