Files
reverse-engineering-anything/docs/specs/2356-wasm-interface-comparison/spec.md
T
morluto cb4e5cfbff feat(analysis): make resource budgets recoverable across CLI and MCP (#9706)
* refactor(analysis): centralize resource budgets and recovery facts

* feat(analysis): expose ASAR and Ghidra runtime admission controls

* feat(artifacts): expose reader admission and preserve limited recognition

* feat(javascript): expose recoverable semantic precision budgets

* feat(web): add recoverable source-map budgets and compact retained views

* feat(web): make historical capture decoding budgets recoverable

* fix(desktop): enforce selected view policies across capture and export

* feat(runtime): make Frida and LLDB retention budgets selectable

* feat(native): expose diagnostic budgets and preserve exhaustion causes

* feat(managed): expose recoverable snapshot and representation budgets

* feat(metadata): make Go and Rust inspection budgets recoverable

* feat(wasm): expose representation and producer admissions

* feat(evm): expose per-call worker resource budgets

* feat(android): make resource and string-pool omissions recoverable

* feat(producers): expose command and recorded-capture budgets

* docs(analysis): record recovery contracts and integrated validation

* fix(docs): link calibration oracle from published verification pages

* fix(docs): restore desktop task anchors and receipt links

* test(analysis): align fixtures with selectable budget contracts

* fix(analysis): remove source-location projector dependency cycle

* test(analysis): refresh budget recovery and verifier regressions

* test(analysis): preserve format and publication recovery expectations

* test(windows): align conformance with owned runtime admission

* fix(desktop): preserve selected alias kinds in exported state

* test(analysis): align provider fixtures with recoverable budgets

* test(desktop): validate emitted alias metadata structurally

* fix(ghidra): classify bounded Windows endpoint refusals

* test(cli): assert selectable artifact admission recovery

* fix(cli): preserve capture provenance in environment builds
2026-11-10 05:11:20 -05:00

3.6 KiB

Core WebAssembly interface comparison (#2356)

Outcome and scope

Compare two exact authenticated inspect_wasm_artifact Evidence inputs, inline or retained session references, under required scope: imports | exports | both. No module acquisition or execution occurs during comparison. This is a derived workflow within existing WABT inspection authority, not a new provider.

Producer-owned typed interface facts are additive and optional in historical inspection Evidence. WABT's validated canonical WAT owns decoding; exact original forms and names remain available. Comparison never reparses retained display text. Function/tag signatures resolve type uses; memory page size defaults to 65536 bytes and explicit custom page sizes are retained; table/memory limits and global types are compared exactly. Unsupported type/proposal forms remain unknown rather than being compared by raw text or inferred compatible. Names are exact decoded UTF-8, without normalization, including empty names, escapes, punctuation and BOM.

Comparison contract

Return both Evidence IDs and original artifact path/digest/length. Group imports by exact module/name and exports by exact name, independently of kind, so a kind change is reported as changed. Unique admitted signatures yield added, removed, changed or unchanged. Duplicate keys retain every original occurrence and yield unknown; no Cartesian pairing or deduplication. Missing historical facets and incomplete inventories prevent absence claims. Unknown signatures do not erase independently observed entries. Ordering is deterministic by direction and names.

Both subject digest/path and inspection parameters must match normalized artifact identity. Authenticate Evidence before projection; summary Evidence must be resolved to its retained complete parent by the caller. Report unknown coverage and explicit limitations. Exact static equality is not runtime compatibility, ABI compatibility, linking success or source identity.

Authority and overlap

Reads supplied Evidence only. MCP records derived Evidence through the existing handler/ledger; CLI accepts portable inline Evidence from an explicit JSON input. No new provider, implicit fetch, target mutation or foreign-code execution. PR #2406 (head 86865035) adds component inspection, preamble routing and embedded core-module inspection. Its component parser is not required or duplicated here; shared contract/CLI registration changes remain additive. Core GC/recursive types are outside admitted signature semantics and keep unknown mappings.

Resource admission

Typed producer rows, names and declaration tokenization are admitted before allocation against the selected max_interface_bytes allowance (default 32 MiB). Inspection and comparison select this allowance independently; comparison cannot restore producer facts omitted under a smaller inspection allowance. Comparison uses linear grouping and cooperative transport yields; it never builds Cartesian duplicate pairings. CLI JSON input retains the shared file admission gate. Token usage and peak process-family memory remain unmeasured.

Verification

Original owned modules assembled using WABT 1.0.42 cover semantically equivalent encodings, changes of kind/signature, names/duplicates, imported index spaces, tables/memory/globals/tags, unknown types and historical incomplete Evidence. Exercise authenticated identity, cancellation, retained lookup, CLI/MCP parity and advertised schemas. Run focused existing WASM/Evidence tests, repository checks and docs validation; independent subagent review before handoff.

Format reference: https://webassembly.github.io/spec/core/binary/modules.html