diff --git a/docs/jeb-analysis.md b/docs/jeb-analysis.md index 7cf1941642..dec049fe4a 100644 --- a/docs/jeb-analysis.md +++ b/docs/jeb-analysis.md @@ -8,7 +8,16 @@ Start a JEB client that serves MCP and point REA at it: - Default endpoint: `http://127.0.0.1:8425/mcp`. Override with `REA_JEB_MCP_URL` (absolute `http`/`https` URL with literal host `127.0.0.1` or `[::1]`; redirects, remote hosts, credentials, query strings, and fragments are rejected rather than silently dropped). - In the JEB GUI client, start the MCP server from the _File_ menu (or via the VIBRE assistant). -- Headless, use JEB's documented programmatic route (`JebMcpServerInstance` from the JEB API) with the JEB client on your classpath; JEB 5.48's `-c` headless mode does not accept `--mcp` directly. +- Headless, the official Linux CE build `5.48.0.202610071539` supports `-c --mcp`. From the JEB installation directory, select JDK 21 or newer through `JAVA_HOME`, choose your target and bind explicitly to loopback: + + ```sh + "$JAVA_HOME/bin/java" -jar bin/app/jeb.jar -c --mcp --interface=127.0.0.1 \ + --port=8425 --infile=/absolute/path/to/target + ``` + + Complete the vendor's first-use EULA and license-key activation when prompted. The Linux audit used an isolated installation, a 1536 MiB Java heap and one active processor inside a separately bounded process family; JVM heap limits alone do not bound the whole family. + +- JEB's documented programmatic route (`JebMcpServerInstance` from the JEB API) remains an alternative. The earlier licensed 5.48 headless verification used that route because its CLI did not accept `--mcp`. Check your installed build's `-c --help` and live tool catalog; the version number alone does not establish the launcher options or supported operations. For setup registration, set `REA_JEB_MCP_URL` in the REA process environment before running `rea setup`. The approved setup plan preserves the exact selected @@ -31,7 +40,7 @@ or establish one end-to-end deadline across a whole CLI or MCP operation. A request that reaches its budget returns a typed timeout, while caller cancellation remains a cancellation. -Verified against JEB 5.48.0 (Linux x64, licensed build) serving `jeb-mcp-server` 1.3.0 over streamable HTTP. +Earlier verification used JEB 5.48.0 (Linux x64, licensed build) serving `jeb-mcp-server` 1.3.0 over streamable HTTP. The official Linux x64 CE build `5.48.0.202610071539` was also verified through real CLI and production stdio MCP native-code workflows; see the [Linux CE audit](../experiments/analysis-efficiency/jeb-linux-native.md) for measurements and limits. CE verification does not establish licensed/Demo Android decompilation or GUI behavior. ## Operations @@ -42,15 +51,16 @@ Verified against JEB 5.48.0 (Linux x64, licensed build) serving `jeb-mcp-server` | `list_jeb_units` / `list-jeb-units` | Page units by stable path and type (`filter`, `parent-unit-path`, `index`, `count`) | | `decompile_jeb_item` / `decompile-jeb-item` | Decompile one type or method to engine pseudo-code | -All four are read-only with respect to the target file; only `open_jeb_project` changes engine-side project state, and Evidence records the endpoint, the caller-selected parameters, and the engine-reported digests. Mutation workflows the engine also offers (renames, comments, `save_project`, `close_project`) are intentionally not exposed yet. +All four preserve target-file bytes. `open_jeb_project` selects or creates an engine-side project; analysis queries can populate computed analysis within it. Evidence records the endpoint, caller-selected parameters, and available engine-reported digests. Mutation workflows the engine also offers (renames, comments, `save_project`, `close_project`) are intentionally not exposed yet. -**Engine coverage note (verified):** JEB 5.48.0 headless MCP instances do not advertise `open_project` — the target must be selected when the engine client starts (`--infile` on the programmatic launcher, or the GUI's file opening). REA preserves that refusal with the engine's reason instead of failing silently; `open_jeb_project` completes only against engine builds that advertise the tool, such as GUI clients. +**Engine coverage note:** The earlier licensed 5.48.0 headless verification did not advertise `open_project`; it selected the target when the engine client started. For that build, use `--infile` on the programmatic launcher or open the file in the GUI. The audited CE headless catalog also omitted `open_project`; the verified CLI route above selects its input at startup. Use `binary_session` to inspect the current engine's advertised operations. REA preserves an unavailable tool's refusal; `open_jeb_project` requires an engine that advertises `open_project`. The CE audit does not establish GUI project-opening support. ## Semantics - Paths in `open_jeb_project` are resolved by the JEB process, not by REA; REA does not require the artifact to exist locally. - The engine caps `list_units` pages at 100; a full page is reported as `coverage: "partial"` because more units may exist. An empty remainder is `complete` only when fewer units than requested were returned. - When `decompile_jeb_item` omits `unit_path`, the engine implicitly selects the project's first code unit; REA reports `unit_path: null` and a limitation instead of guessing the effective unit. +- `item_address` is a JEB code-item reference, such as a value returned by the engine's `list_code_items`. Preserve that representation and select its code unit explicitly. For the audited CE SQLite unit, the exported method reference was `sqlite3_libversion_number`; using its raw ELF symbol address did not produce a successful decompilation. File offsets, ELF virtual addresses and engine item references have different semantics. REA currently exposes unit listing, while code-item discovery remains an upstream JEB operation. - Engine refusals (`success: false` envelopes) are preserved as unsupported-target errors carrying the engine's own message, for example a nonexistent item address. - Successfully parsed client information is reused for the lifetime of the MCP connection, including when the engine omits its version. Explicit client inspection and availability probes refresh it. - An unreachable endpoint is a provider-availability failure with recovery guidance; REA does not retry or spawn the engine. diff --git a/docs/testing.md b/docs/testing.md index 23194a1af6..1987abe58b 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -746,11 +746,12 @@ See [Android analysis](android-analysis.md) for boundaries and resource budgets. `verify:jeb` requires a caller-started JEB client serving MCP at `REA_JEB_MCP_URL` (default `http://127.0.0.1:8425/mcp`) with a project -already open, and verifies real CLI client inspection, unit listing coverage, +already open, and exercises shared application/provider client inspection, unit listing coverage, and method decompilation. The script records the engine's exact response to -`open_jeb_project`; JEB 5.48.0 headless instances do not advertise that tool. +`open_jeb_project`; the earlier licensed 5.48.0 headless verification did not +advertise that tool. REA does not install or launch JEB; see [JEB analysis](jeb-analysis.md) for -the bring-your-own boundary. Verified against JEB 5.48.0 serving +the bring-your-own boundary. The earlier licensed build was verified against JEB 5.48.0 serving `jeb-mcp-server` 1.3.0 at four scales: a compiled Java class fixture, a locally built signed probe APK with a launcher activity (manifest, v1/v2/v3 certificates, dex bytecode, filtered and paginated listing), the published @@ -761,7 +762,12 @@ decompilation through both CLI and MCP, and the official Flutter Gallery analyzed as native code (75k methods on arm64) and decompiled through both CLI and MCP with explicit unit selection, plus the thin Java wrapper and decoded manifest. The dedicated Dart snapshot processor and `run_script` -remain GUI-only surfaces in JEB 5.48.0 headless. +remained GUI-only surfaces in that headless build. +The separate [Linux CE native audit](../experiments/analysis-efficiency/jeb-linux-native.md) +uses the official CE `5.48.0.202610071539` direct CLI launcher and real +CLI/stdio MCP ELF workflows. That audit does not qualify CE Java/Android +decompilation or GUI project opening, and it does not replace the licensed +verification above. Authenticated IPA and macOS application inventory projection is documented in [Apple application analysis](apple-application-analysis.md). diff --git a/experiments/analysis-efficiency/README.md b/experiments/analysis-efficiency/README.md index d88ca8ae79..6e99dd6400 100644 --- a/experiments/analysis-efficiency/README.md +++ b/experiments/analysis-efficiency/README.md @@ -1,5 +1,10 @@ # Analysis efficiency measurements +For JEB on Linux, see the [CE native audit](jeb-linux-native.md). It qualifies +the direct headless launch route and measures selected function reads through +real CLI and production stdio MCP, preserving timeout attempts and the limits +of wrapper-cache and token claims. + For Apktool locale queries, see the [shared-decode and table-only checkpoint](apktool-string-tables.md). It separates the existing decode reuse from duplicate string delivery, with three real APKs, diff --git a/experiments/analysis-efficiency/jeb-linux-native.json b/experiments/analysis-efficiency/jeb-linux-native.json new file mode 100644 index 0000000000..80b70707b1 --- /dev/null +++ b/experiments/analysis-efficiency/jeb-linux-native.json @@ -0,0 +1,1733 @@ +{ + "issue": "https://github.com/morluto/rea/issues/4996", + "baseline": "7c458f04b9155707c8ba406f8b455b10016f1b99", + "scope": "Selected native method qualification and existing-cost audit. Documentation-only change; no provider/cache/API optimization or before/after speedup claim.", + "host": { + "platform": "Linux", + "kernel": "6.1.0-53-cloud-amd64", + "architecture": "x86_64", + "node": "24.18.0", + "npm": "11.16.0", + "jdk": "Temurin 21.0.12.1" + }, + "engine": { + "distribution": "official Linux x64 JEB CE", + "version": "5.48.0.202610071539", + "mcp_server": "1.3.0", + "source_url": "https://www.pnfsoftware.com/dl?jeb4ce", + "asset_url": "https://jebbuilds2.s3.amazonaws.com/jeb4ce/jeb-ce-5.48.0.202610071539-JEBDecompiler-624458483834837192.zip", + "archive_bytes": 697549250, + "observed_archive_sha256": "709e7fe8e88bb0e9e2bc03b028f8b9fc78cec0289d04abe54fc26cda6369e175", + "download_verification": "Official HTTPS download and ZIP CRC checks; publisher signature not independently verified" + }, + "resource_policy": { + "family_hard_bytes": 8589934592, + "early_stop_bytes": 7516192768, + "cpu_quota_percent": 100, + "affinity_logical_cpus": 1, + "swap_max_bytes": 0, + "host_start_min_bytes": 17179869184, + "host_early_stop_min_bytes": 8589934592, + "jvm_heap_max_mib": 1536, + "jvm_active_processors": 1, + "node_heap_limits_mib": { + "production_mcp": 2048, + "harness_and_cli": 3072 + } + }, + "targets": { + "fixture": { + "kind": "authored C ELF ET_EXEC", + "bytes": 17360, + "sha256": "1a6f55303712e096ff5196c7fd6e8acf75473fbf0f7467d7b315f96f50b3f841", + "oracle": "Authored multiplication/addition and GNU nm; ABI/sign and arbitrary-input equivalence unproved." + }, + "sqlite": { + "kind": "Debian shipped ELF shared library", + "basename": "libsqlite3.so.0.8.6", + "package_version": "3.40.1-2+deb12u2", + "bytes": 1437848, + "sha256": "2e6eef9a727f081f0d453b4e5e6cbd8b9ef8b6f86cbf7681cbad444d3b0b55c8", + "oracle": "GNU nm and objdump: sqlite3_libversion_number returns immediate 3040001. No target executed." + } + }, + "method": "Three alternating fresh-engine sessions per artifact, same unmodified compiled runtime. Fifteen public stdio MCP calls plus one warm CLI parity query, independent file/disassembly checks and owned engine/transport cleanup. OS and vendor file caches unflushed. Private fetch observer covers only the production MCP child, records request names/byte counts without response cloning; its overhead is included. Separate CLI upstream requests were not traced.", + "cost_scope": "Kernel cgroup v2 process-family CPU/peak incl. file cache, JVM, clients, public runtime, CLI parity and native oracle. Admission wait is separate. Outer guard/systemd manager, model usage and context for independent host/native oracles unmeasured. Payload exit counters verified while observer remains alive; vanished final whole-scope counters stay unknown.", + "tokenizer": { + "tokenizer": "tiktoken", + "version": "0.12.0", + "encoding": "cl100k_base", + "scope": "Offline serialization estimates. One full MCP catalog page-array, named arguments and raw replies, each once; replies contain text plus structured copies. Text-only reply tokens are reported separately. The combined estimate adds selected CLI arguments and stdout from parity validation. Actual model usage, prompts, initialization/protocol framing, client filtering/rendering/replay, shell framing, and independent native/host oracle context are unmeasured. These are validation exchanges, not a model investigation comparison." + }, + "summaries": { + "fixture": { + "first_selected_mcp_ms": { + "median": 4133.963765999999, + "min": 3844.5735029999996, + "max": 5036.5129190000025 + }, + "six_warm_mcp_ms": { + "median": 253.19401599999765, + "min": 113.36850599999889, + "max": 842.8930099999998 + }, + "mcp_task_ms": { + "median": 18774.87861, + "min": 17709.53766, + "max": 23798.28777 + }, + "whole_guarded_elapsed_seconds": { + "median": 27.638, + "min": 26.749, + "max": 32.622 + }, + "whole_cpu_seconds": { + "median": 27.290905, + "min": 26.399026, + "max": 32.155006 + }, + "kernel_family_peak_mib": { + "median": 1540.05078125, + "min": 1531.53125, + "max": 1614.921875 + }, + "combined_raw_tokens": { + "median": 814610, + "min": 814606, + "max": 814622 + } + }, + "sqlite": { + "first_selected_mcp_ms": { + "median": 24508.233102000006, + "min": 22822.785593, + "max": 49976.75092 + }, + "six_warm_mcp_ms": { + "median": 189.96645800000988, + "min": 160.91890100000455, + "max": 416.875572999983 + }, + "mcp_task_ms": { + "median": 39532.798419, + "min": 37086.309161, + "max": 71439.818565 + }, + "whole_guarded_elapsed_seconds": { + "median": 48.296, + "min": 45.625, + "max": 82.039 + }, + "whole_cpu_seconds": { + "median": 47.752869, + "min": 45.370029, + "max": 78.876649 + }, + "kernel_family_peak_mib": { + "median": 1799.63671875, + "min": 1714.7109375, + "max": 1865.8203125 + }, + "combined_raw_tokens": { + "median": 815249, + "min": 815245, + "max": 815251 + } + } + }, + "runs": [ + { + "run": "native-probe-final-fixture-1", + "artifact": "fixture", + "revision": "7c458f04b9155707c8ba406f8b455b10016f1b99", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "1a6f55303712e096ff5196c7fd6e8acf75473fbf0f7467d7b315f96f50b3f841", + "item_reference": "rea_probe_value", + "elf_symbol_address": "0x0000000000401126", + "status": "passed", + "calls": [ + { + "name": "inspect_jeb_client", + "phase": "inspect", + "ms": 8109.564714, + "reply_bytes": 1755, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-full", + "ms": 61.12582199999997, + "reply_bytes": 2741, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-0", + "ms": 15.625228000000789, + "reply_bytes": 2151, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-1", + "ms": 15.032687999999325, + "reply_bytes": 2203, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-2", + "ms": 19.482457999998587, + "reply_bytes": 2215, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-3", + "ms": 28.23425700000007, + "reply_bytes": 1925, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-first", + "ms": 4133.963765999999, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-0", + "ms": 14.79469799999788, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-1", + "ms": 13.759468000000197, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-2", + "ms": 83.39495899999747, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-3", + "ms": 43.058624000001146, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-4", + "ms": 51.86701299999913, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-5", + "ms": 46.31925400000182, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-absent", + "ms": 48.526442999998835, + "reply_bytes": 748, + "isError": true + }, + { + "name": "close_binary", + "phase": "close", + "ms": 5.0231789999998, + "reply_bytes": 169, + "isError": false + } + ], + "catalog": { + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61", + "ms": 1256.708189 + }, + "mcp_task_elapsed_ms": 18774.87861, + "cli_warm_parity_ms": 2632.80775, + "observed_mcp_child_upstream_request_counts": { + "initialize": 1, + "notifications/initialized": 1, + "tools/list": 1, + "get_client_information": 1, + "list_units": 5, + "decompile_code_item": 8 + }, + "cost": { + "started": true, + "admission_wait_seconds": 9.561004117131233e-5, + "guarded_elapsed_seconds": 27.638, + "cpu_seconds": 27.290905, + "kernel_family_peak_bytes": 1605926912, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + }, + "tokens": { + "run": "native-probe-final-fixture-1", + "catalog_tokens": 805330, + "named_mcp_arguments_tokens": 423, + "raw_mcp_reply_tokens": 8527, + "mcp_text_reply_tokens": 3963, + "recorded_mcp_calls": 15, + "mcp_raw_total_tokens": 814280, + "cli_selected_arguments_tokens": 33, + "cli_stdout_tokens": 309, + "combined_mcp_cli_raw_total_tokens": 814622 + } + }, + { + "run": "native-probe-final-sqlite-1", + "artifact": "sqlite", + "revision": "7c458f04b9155707c8ba406f8b455b10016f1b99", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "2e6eef9a727f081f0d453b4e5e6cbd8b9ef8b6f86cbf7681cbad444d3b0b55c8", + "item_reference": "sqlite3_libversion_number", + "elf_symbol_address": "0x00000000000a1d50", + "status": "passed", + "calls": [ + { + "name": "inspect_jeb_client", + "phase": "inspect", + "ms": 7601.480018, + "reply_bytes": 1755, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-full", + "ms": 57.56869200000074, + "reply_bytes": 2981, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-0", + "ms": 13.98135799999909, + "reply_bytes": 2231, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-1", + "ms": 14.772978000000876, + "reply_bytes": 2283, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-2", + "ms": 26.885637000001225, + "reply_bytes": 2295, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-3", + "ms": 13.489348000000973, + "reply_bytes": 1925, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-first", + "ms": 22822.785593, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-0", + "ms": 22.668917000002693, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-1", + "ms": 26.674607000000833, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-2", + "ms": 36.77510600000096, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-3", + "ms": 18.099298000001, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-4", + "ms": 36.61042599999928, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-5", + "ms": 20.090546999999788, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-absent", + "ms": 19.651577999997244, + "reply_bytes": 748, + "isError": true + }, + { + "name": "close_binary", + "phase": "close", + "ms": 5.741019000000961, + "reply_bytes": 169, + "isError": false + } + ], + "catalog": { + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61", + "ms": 1420.0038450000002 + }, + "mcp_task_elapsed_ms": 37086.309161, + "cli_warm_parity_ms": 2711.2066950000008, + "observed_mcp_child_upstream_request_counts": { + "initialize": 1, + "notifications/initialized": 1, + "tools/list": 1, + "get_client_information": 1, + "list_units": 5, + "decompile_code_item": 8 + }, + "cost": { + "started": true, + "admission_wait_seconds": 0.00014812999870628119, + "guarded_elapsed_seconds": 45.625, + "cpu_seconds": 45.370029, + "kernel_family_peak_bytes": 1956454400, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + }, + "tokens": { + "run": "native-probe-final-sqlite-1", + "catalog_tokens": 805330, + "named_mcp_arguments_tokens": 541, + "raw_mcp_reply_tokens": 9003, + "mcp_text_reply_tokens": 4201, + "recorded_mcp_calls": 15, + "mcp_raw_total_tokens": 814874, + "cli_selected_arguments_tokens": 48, + "cli_stdout_tokens": 323, + "combined_mcp_cli_raw_total_tokens": 815245 + } + }, + { + "run": "native-probe-final-fixture-2", + "artifact": "fixture", + "revision": "7c458f04b9155707c8ba406f8b455b10016f1b99", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "1a6f55303712e096ff5196c7fd6e8acf75473fbf0f7467d7b315f96f50b3f841", + "item_reference": "rea_probe_value", + "elf_symbol_address": "0x0000000000401126", + "status": "passed", + "calls": [ + { + "name": "inspect_jeb_client", + "phase": "inspect", + "ms": 7399.544512999999, + "reply_bytes": 1755, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-full", + "ms": 62.50220300000001, + "reply_bytes": 2741, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-0", + "ms": 70.29121199999827, + "reply_bytes": 2151, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-1", + "ms": 82.5059999999994, + "reply_bytes": 2203, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-2", + "ms": 46.88480499999969, + "reply_bytes": 2215, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-3", + "ms": 68.1642410000004, + "reply_bytes": 1925, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-first", + "ms": 3844.5735029999996, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-0", + "ms": 17.634157000000414, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-1", + "ms": 18.065937999999733, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-2", + "ms": 15.059488999999303, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-3", + "ms": 34.60065499999837, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-4", + "ms": 13.198249000000942, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-5", + "ms": 14.810018000000127, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-absent", + "ms": 12.884067999999388, + "reply_bytes": 748, + "isError": true + }, + { + "name": "close_binary", + "phase": "close", + "ms": 5.513469000001351, + "reply_bytes": 169, + "isError": false + } + ], + "catalog": { + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61", + "ms": 1366.0889539999998 + }, + "mcp_task_elapsed_ms": 17709.53766, + "cli_warm_parity_ms": 2429.063903000002, + "observed_mcp_child_upstream_request_counts": { + "initialize": 1, + "notifications/initialized": 1, + "tools/list": 1, + "get_client_information": 1, + "list_units": 5, + "decompile_code_item": 8 + }, + "cost": { + "started": true, + "admission_wait_seconds": 0.00010316993575543165, + "guarded_elapsed_seconds": 26.749, + "cpu_seconds": 26.399026, + "kernel_family_peak_bytes": 1693368320, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + }, + "tokens": { + "run": "native-probe-final-fixture-2", + "catalog_tokens": 805330, + "named_mcp_arguments_tokens": 423, + "raw_mcp_reply_tokens": 8511, + "mcp_text_reply_tokens": 3955, + "recorded_mcp_calls": 15, + "mcp_raw_total_tokens": 814264, + "cli_selected_arguments_tokens": 33, + "cli_stdout_tokens": 309, + "combined_mcp_cli_raw_total_tokens": 814606 + } + }, + { + "run": "native-probe-final-sqlite-2", + "artifact": "sqlite", + "revision": "7c458f04b9155707c8ba406f8b455b10016f1b99", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "2e6eef9a727f081f0d453b4e5e6cbd8b9ef8b6f86cbf7681cbad444d3b0b55c8", + "item_reference": "sqlite3_libversion_number", + "elf_symbol_address": "0x00000000000a1d50", + "status": "passed", + "calls": [ + { + "name": "inspect_jeb_client", + "phase": "inspect", + "ms": 7843.767177, + "reply_bytes": 1755, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-full", + "ms": 216.7911949999998, + "reply_bytes": 2981, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-0", + "ms": 36.78909600000043, + "reply_bytes": 2231, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-1", + "ms": 43.545334999998886, + "reply_bytes": 2283, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-2", + "ms": 56.83696400000008, + "reply_bytes": 2295, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-3", + "ms": 46.20435499999985, + "reply_bytes": 1925, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-first", + "ms": 24508.233102000006, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-0", + "ms": 26.335347000000183, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-1", + "ms": 48.91735399999743, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-2", + "ms": 35.31670600000507, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-3", + "ms": 25.987317000006442, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-4", + "ms": 28.297725999997056, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-5", + "ms": 25.112008000003698, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-absent", + "ms": 35.868185999999696, + "reply_bytes": 748, + "isError": true + }, + { + "name": "close_binary", + "phase": "close", + "ms": 5.813940000000002, + "reply_bytes": 169, + "isError": false + } + ], + "catalog": { + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61", + "ms": 1235.7381859999996 + }, + "mcp_task_elapsed_ms": 39532.798419, + "cli_warm_parity_ms": 3028.746809000004, + "observed_mcp_child_upstream_request_counts": { + "initialize": 1, + "notifications/initialized": 1, + "tools/list": 1, + "get_client_information": 1, + "list_units": 5, + "decompile_code_item": 8 + }, + "cost": { + "started": true, + "admission_wait_seconds": 9.904010221362114e-5, + "guarded_elapsed_seconds": 48.296, + "cpu_seconds": 47.752869, + "kernel_family_peak_bytes": 1887055872, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + }, + "tokens": { + "run": "native-probe-final-sqlite-2", + "catalog_tokens": 805330, + "named_mcp_arguments_tokens": 541, + "raw_mcp_reply_tokens": 9009, + "mcp_text_reply_tokens": 4204, + "recorded_mcp_calls": 15, + "mcp_raw_total_tokens": 814880, + "cli_selected_arguments_tokens": 48, + "cli_stdout_tokens": 323, + "combined_mcp_cli_raw_total_tokens": 815251 + } + }, + { + "run": "native-probe-final-fixture-3", + "artifact": "fixture", + "revision": "7c458f04b9155707c8ba406f8b455b10016f1b99", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "1a6f55303712e096ff5196c7fd6e8acf75473fbf0f7467d7b315f96f50b3f841", + "item_reference": "rea_probe_value", + "elf_symbol_address": "0x0000000000401126", + "status": "passed", + "calls": [ + { + "name": "inspect_jeb_client", + "phase": "inspect", + "ms": 8900.984732, + "reply_bytes": 1755, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-full", + "ms": 85.02968099999998, + "reply_bytes": 2741, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-0", + "ms": 16.279207999999926, + "reply_bytes": 2151, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-1", + "ms": 17.554368000000977, + "reply_bytes": 2203, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-2", + "ms": 35.91360600000007, + "reply_bytes": 2215, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-3", + "ms": 20.243078000001333, + "reply_bytes": 1925, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-first", + "ms": 5036.5129190000025, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-0", + "ms": 17.226087999999436, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-1", + "ms": 189.40683999999965, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-2", + "ms": 120.00856700000077, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-3", + "ms": 144.73211399999855, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-4", + "ms": 186.41265100000237, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-5", + "ms": 185.106749999999, + "reply_bytes": 2313, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-absent", + "ms": 116.15546800000084, + "reply_bytes": 748, + "isError": true + }, + { + "name": "close_binary", + "phase": "close", + "ms": 11.46715899999981, + "reply_bytes": 169, + "isError": false + } + ], + "catalog": { + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61", + "ms": 1297.523271 + }, + "mcp_task_elapsed_ms": 23798.28777, + "cli_warm_parity_ms": 5199.320006999998, + "observed_mcp_child_upstream_request_counts": { + "initialize": 1, + "notifications/initialized": 1, + "tools/list": 1, + "get_client_information": 1, + "list_units": 5, + "decompile_code_item": 8 + }, + "cost": { + "started": true, + "admission_wait_seconds": 0.00015164900105446577, + "guarded_elapsed_seconds": 32.622, + "cpu_seconds": 32.155006, + "kernel_family_peak_bytes": 1614860288, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + }, + "tokens": { + "run": "native-probe-final-fixture-3", + "catalog_tokens": 805330, + "named_mcp_arguments_tokens": 423, + "raw_mcp_reply_tokens": 8515, + "mcp_text_reply_tokens": 3957, + "recorded_mcp_calls": 15, + "mcp_raw_total_tokens": 814268, + "cli_selected_arguments_tokens": 33, + "cli_stdout_tokens": 309, + "combined_mcp_cli_raw_total_tokens": 814610 + } + }, + { + "run": "native-probe-final-sqlite-3", + "artifact": "sqlite", + "revision": "7c458f04b9155707c8ba406f8b455b10016f1b99", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "2e6eef9a727f081f0d453b4e5e6cbd8b9ef8b6f86cbf7681cbad444d3b0b55c8", + "item_reference": "sqlite3_libversion_number", + "elf_symbol_address": "0x00000000000a1d50", + "status": "passed", + "calls": [ + { + "name": "inspect_jeb_client", + "phase": "inspect", + "ms": 10294.019382, + "reply_bytes": 1755, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-full", + "ms": 76.81099200000244, + "reply_bytes": 2981, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-0", + "ms": 17.346168000000034, + "reply_bytes": 2231, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-1", + "ms": 17.65707900000052, + "reply_bytes": 2283, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-2", + "ms": 22.286897000001773, + "reply_bytes": 2295, + "isError": false + }, + { + "name": "list_jeb_units", + "phase": "units-page-3", + "ms": 29.58738699999958, + "reply_bytes": 1925, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-first", + "ms": 49976.75092, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-0", + "ms": 63.32133400000748, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-1", + "ms": 79.26228399999673, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-2", + "ms": 73.44557299998996, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-3", + "ms": 63.18755499999679, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-4", + "ms": 60.66309399998863, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-warm-5", + "ms": 76.99573300000338, + "reply_bytes": 2357, + "isError": false + }, + { + "name": "decompile_jeb_item", + "phase": "decompile-absent", + "ms": 90.04574200000206, + "reply_bytes": 748, + "isError": true + }, + { + "name": "close_binary", + "phase": "close", + "ms": 12.593110000001616, + "reply_bytes": 169, + "isError": false + } + ], + "catalog": { + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61", + "ms": 1796.6597380000003 + }, + "mcp_task_elapsed_ms": 71439.818565, + "cli_warm_parity_ms": 5571.252065000008, + "observed_mcp_child_upstream_request_counts": { + "initialize": 1, + "notifications/initialized": 1, + "tools/list": 1, + "get_client_information": 1, + "list_units": 5, + "decompile_code_item": 8 + }, + "cost": { + "started": true, + "admission_wait_seconds": 0.000259050983004272, + "guarded_elapsed_seconds": 82.039, + "cpu_seconds": 78.876649, + "kernel_family_peak_bytes": 1798004736, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + }, + "tokens": { + "run": "native-probe-final-sqlite-3", + "catalog_tokens": 805330, + "named_mcp_arguments_tokens": 541, + "raw_mcp_reply_tokens": 9007, + "mcp_text_reply_tokens": 4203, + "recorded_mcp_calls": 15, + "mcp_raw_total_tokens": 814878, + "cli_selected_arguments_tokens": 48, + "cli_stdout_tokens": 323, + "combined_mcp_cli_raw_total_tokens": 815249 + } + } + ], + "attempts": [ + { + "attempt": "prepare.log", + "classification": "Pre-start refusal; host available memory below 16GiB; no scope/payload/build/download.", + "cost": { + "started": false, + "reason": "Refusing experiment: less than 16 GiB available" + } + }, + { + "attempt": "prepare-2.log", + "classification": "Completed preparation/build and official CE download/extraction; not a selected-read sample.", + "cost": { + "started": true, + "admission_wait_seconds": 0, + "guarded_elapsed_seconds": 80.969, + "cpu_seconds": 19.719875, + "kernel_family_peak_bytes": 2030854144, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "inspect-engine.log", + "classification": "Diagnostic CLI help exited 255 while advertising --mcp; not a provider success/failure sample.", + "cost": { + "started": true, + "admission_wait_seconds": 0, + "guarded_elapsed_seconds": 3.073, + "cpu_seconds": 2.530312, + "kernel_family_peak_bytes": 135294976, + "payload_exit_code": 255, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "native-probe-1.log", + "classification": "Pre-start refusal; no fixture compilation, engine launch or CLI.", + "cost": { + "started": false, + "reason": "Refusing experiment: less than 16 GiB available" + } + }, + { + "attempt": "native-probe-1-attempt-2.log", + "classification": "Incomplete first-use attempt: EULA prompt reached stdin EOF; engine exited 0, harness correctly failed.", + "cost": { + "started": true, + "admission_wait_seconds": 0, + "guarded_elapsed_seconds": 4.75, + "cpu_seconds": 3.166959, + "kernel_family_peak_bytes": 199675904, + "payload_exit_code": 1, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "native-probe-2.log", + "classification": "Incomplete first-use attempt: EULA accepted, official CE key still required; engine exited 0, harness correctly failed.", + "cost": { + "started": true, + "admission_wait_seconds": 0, + "guarded_elapsed_seconds": 3.272, + "cpu_seconds": 2.74772, + "kernel_family_peak_bytes": 137990144, + "payload_exit_code": 1, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "native-probe-3.log", + "classification": "Successful first-use activation and CLI inspection/unit pilot; no function-read benchmark.", + "cost": { + "started": true, + "admission_wait_seconds": 0, + "guarded_elapsed_seconds": 15.789, + "cpu_seconds": 13.839694, + "kernel_family_peak_bytes": 713482240, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "native-probe-4.log", + "classification": "Successful CLI native function pilot with a numeric reference on the authored ET_EXEC fixture.", + "cost": { + "started": true, + "admission_wait_seconds": 0, + "guarded_elapsed_seconds": 21.344, + "cpu_seconds": 20.406362, + "kernel_family_peak_bytes": 813383680, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "native-probe-5.log", + "classification": "Successful MCP/CLI pilot at an explicit 30s budget; excluded from the default-budget final cohort.", + "cost": { + "started": true, + "admission_wait_seconds": 0, + "guarded_elapsed_seconds": 26.965, + "cpu_seconds": 26.408966, + "kernel_family_peak_bytes": 1609953280, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "native-probe-sqlite-1.log", + "classification": "Incomplete 30s-budget task using an unqualified raw ELF address selector: typed provider_timeout; no semantic conclusion.", + "cost": { + "started": true, + "admission_wait_seconds": 0, + "guarded_elapsed_seconds": 57.282, + "cpu_seconds": 56.834631, + "kernel_family_peak_bytes": 1525100544, + "payload_exit_code": 1, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "native-probe-sqlite-2.log", + "classification": "Pre-start refusal; the default-budget payload did not start.", + "cost": { + "started": false, + "reason": "Refusing experiment: less than 16 GiB available" + } + }, + { + "attempt": "native-probe-sqlite-2-attempt-2.log", + "classification": "Incomplete 60s-budget raw-address attempt: upstream decompilation refusal; preserved, not a completed benchmark.", + "cost": { + "started": true, + "admission_wait_seconds": 0.00013502000365406275, + "guarded_elapsed_seconds": 47.746, + "cpu_seconds": 44.985204, + "kernel_family_peak_bytes": 1927479296, + "payload_exit_code": 1, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "native-probe-sqlite-oracle-1.log", + "classification": "Successful independent native catalog/project inspection; original ELF digest matched; diagnostic, not final cohort.", + "cost": { + "started": true, + "admission_wait_seconds": 0.00010710000060498714, + "guarded_elapsed_seconds": 8.272, + "cpu_seconds": 7.704221, + "kernel_family_peak_bytes": 302960640, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "native-probe-sqlite-oracle-2.log", + "classification": "Successful native description/method-discovery oracle: filtered list returned the exported method name; numeric filters returned no matches.", + "cost": { + "started": true, + "admission_wait_seconds": 0.00011477002408355474, + "guarded_elapsed_seconds": 29.444, + "cpu_seconds": 29.016203, + "kernel_family_peak_bytes": 746885120, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "native-probe-sqlite-3.log", + "classification": "Engine decompilation succeeded with producer method reference; harness rejected the valid C long literal suffix L. Oracle grammar corrected; incomplete workflow retained.", + "cost": { + "started": true, + "admission_wait_seconds": 0.00011185905896127224, + "guarded_elapsed_seconds": 47.434, + "cpu_seconds": 47.135601, + "kernel_family_peak_bytes": 1553219584, + "payload_exit_code": 1, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + }, + { + "attempt": "token-estimate.log", + "classification": "Completed offline tokenizer postprocessing; separate from analysis cohort costs.", + "cost": { + "started": true, + "admission_wait_seconds": 0, + "guarded_elapsed_seconds": 10.35, + "cpu_seconds": 7.789963, + "kernel_family_peak_bytes": 151486464, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "payload_counters_verified": true, + "whole_scope_final_events": null, + "abort": null + } + } + ], + "limitations": [ + "CE native selected-read qualification only; Java/Android/Demo/GUI/Windows/macOS and >100-unit pagination unverified here.", + "Known method reference supplied to each final task. Native code-item discovery exists upstream but is not exposed by the four current REA JEB operations.", + "Provider subject remains explicitly unknown; separate native project digest observation is not substituted for an atomically bound artifact identity.", + "Decompiled text/ABI/full program equivalence not proved; literal/arithmetic oracles and exact transport preservation are narrower.", + "All earlier refusals/failures retained. Larger last-run time/cpu spread remains unexplained; no favorable resampling or stable latency/memory improvement claim.", + "No actual model tokens, full agent investigation or complex-software advantage measured. Existing JEB reconnect/invalidation work is PR #3754; no duplicate implementation." + ], + "validation": { + "completed_final_workflows": 6, + "public_mcp_calls": 90, + "public_cli_parity_queries": 6, + "target_execution": false, + "check_gate_cost": { + "guarded_elapsed_seconds": 21.92, + "cpu_seconds": 18.36747, + "kernel_family_peak_bytes": 557862912, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "whole_scope_final_events": null + }, + "attempts": [ + { + "attempt": "check-docs-1", + "status": "refused before scope/payload; host available below 16GiB" + }, + { + "attempt": "check-docs-2", + "status": "passed after admission wait; unchanged resource bounds" + } + ], + "baseline_code_checks": { + "docs_check": "passed", + "check_fast": "passed; typecheck/lint were cache hits", + "git_diff_check": "passed", + "formatting": "all five changed Markdown/JSON files formatted" + }, + "post_release": { + "base_main_revision": "a25eb5fbb424197cb8e699e15a82a6ff869658aa", + "rea_version": "6.7.0", + "scope": "Two additional correctness controls after rebasing onto the release checkpoint; kept separate from six historical measurement sessions.", + "build_docs_check_fast": "passed; typecheck/lint were uncached", + "build_gate_cost": { + "elapsed_seconds": 362.269, + "cpu_seconds": 354.09255, + "kernel_family_peak_bytes": 4439879680, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "whole_scope_final_events": null + }, + "completed_controls": [ + { + "run": "native-probe-post-release-fixture-1", + "artifact": "fixture", + "status": "passed", + "tested_revision": "837718b1968b5fd90762c4c54895b11e9f5478fd", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "catalog_sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61", + "target_sha256": "1a6f55303712e096ff5196c7fd6e8acf75473fbf0f7467d7b315f96f50b3f841", + "mcp_calls": 15, + "cli_parity_queries": 1, + "cli_mcp_facts_and_evidence_identity_equal": true, + "unit_pagination_equivalent": true, + "target_unchanged": true, + "mcp_child_metadata_calls": 1, + "cost": { + "elapsed_seconds": 42.516, + "cpu_seconds": 41.044738, + "kernel_family_peak_bytes": 1634881536, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "whole_scope_final_events": null + } + }, + { + "run": "native-probe-post-release-sqlite-2", + "artifact": "sqlite", + "status": "passed", + "tested_revision": "837718b1968b5fd90762c4c54895b11e9f5478fd", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "catalog_sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61", + "target_sha256": "2e6eef9a727f081f0d453b4e5e6cbd8b9ef8b6f86cbf7681cbad444d3b0b55c8", + "mcp_calls": 15, + "cli_parity_queries": 1, + "cli_mcp_facts_and_evidence_identity_equal": true, + "unit_pagination_equivalent": true, + "target_unchanged": true, + "mcp_child_metadata_calls": 1, + "cost": { + "elapsed_seconds": 69.93, + "cpu_seconds": 66.596053, + "kernel_family_peak_bytes": 2078978048, + "payload_exit_code": 0, + "payload_cleanup_verified": true, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "whole_scope_final_events": null + } + } + ], + "additional_mcp_calls": 30, + "additional_cli_parity_queries": 2, + "catalog_unchanged_from_baseline": true, + "interrupted_attempt": { + "run": "native-probe-post-release-sqlite-1", + "outcome": "incomplete; host available-memory guard stopped the owned family", + "elapsed_seconds": 28.244, + "sampled_peak_bytes": 695308288, + "cpu_last_observed_seconds": 25.549917, + "host_available_min_bytes": 8535224320, + "abort": "host_available_memory_early_stop", + "payload_exit_code": null, + "payload_exit_counters": null, + "whole_scope_final_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "whole_scope_final_events_verified": true, + "post_stop_target_sha256": "2e6eef9a727f081f0d453b4e5e6cbd8b9ef8b6f86cbf7681cbad444d3b0b55c8" + }, + "retry_admission": "SQLite retry waited for at least24GiB host availability; original guard/cgroup hard8GiB/early7GiB/oneCPU/noSwap thresholds unchanged." + } + }, + "rea_version": "6.6.0" +} diff --git a/experiments/analysis-efficiency/jeb-linux-native.md b/experiments/analysis-efficiency/jeb-linux-native.md new file mode 100644 index 0000000000..1560ccdd8e --- /dev/null +++ b/experiments/analysis-efficiency/jeb-linux-native.md @@ -0,0 +1,238 @@ +# JEB Linux CE native workflow checkpoint + +This checkpoint qualifies Linux CE setup and selected native reads for +[#4996](https://github.com/morluto/rea/issues/4996). It changes documentation; +it does not introduce a provider cache or claim a before/after speedup. +The existing shared CLI/MCP implementation returned consistent facts and +Evidence, with one metadata request per persistent MCP task. Further wrapper +caching is not justified by these measurements. + +## Pinned inputs and scope + +Baseline: REA 6.6.0 at `7c458f04b9155707c8ba406f8b455b10016f1b99`, Node 24.18.0, +npm 11.16.0, Temurin 21.0.12.1, Linux x86-64 +`6.1.0-53-cloud-amd64`. All six final sessions used the same compiled MCP +runtime digest, recorded in the [curated receipt](jeb-linux-native.json). + +The official CE archive was obtained through +: 697,549,250 bytes, observed SHA-256 +`709e7fe8e88bb0e9e2bc03b028f8b9fc78cec0289d04abe54fc26cda6369e175`. +HTTPS download and ZIP CRC checks completed; a publisher signature was not +independently verified. This distribution identifies as +`5.48.0.202610071539`, serving MCP 1.3.0. The installation and first-use +activation remained private; no engine binaries, keys or raw decompilation +are included here. + +| Artifact | Bytes | Independent check | +| -------------------------------------------------------- | --------: | ----------------------------------------------------------------------------- | +| Authored C ELF, ET_EXEC | 17,360 | Source arithmetic and GNU `nm` symbol | +| Debian `libsqlite3.so.0.8.6`, package `3.40.1-2+deb12u2` | 1,437,848 | GNU `nm` and `objdump`: exported version function returns immediate `3040001` | + +Target SHA-256 digests: + +- Fixture: `1a6f55303712e096ff5196c7fd6e8acf75473fbf0f7467d7b315f96f50b3f841`. +- SQLite: `2e6eef9a727f081f0d453b4e5e6cbd8b9ef8b6f86cbf7681cbad444d3b0b55c8`. + +Neither target was executed. The fixture's expected arithmetic was `input * 7 + 13`. +That check does not establish inferred ABI, signedness or equivalence for every +input. SQLite's constant-return oracle is also narrower than complete-program +correctness. + +## Setup and item identity + +The current official CE build successfully accepted `-c --mcp`, using +`--interface=127.0.0.1`, a dedicated port and `--infile` for the selected ELF. +This agrees with the [current upstream MCP manual](https://www.pnfsoftware.com/jeb/manual/mcp/). +The earlier documented licensed-build result used a programmatic launcher; +its CLI behavior should not be generalized to all 5.48 distributions. + +Code-item references also need their owning representation. The CE native +`list_code_items` tool returned `sqlite3_libversion_number` for a filtered +method query. That exact reference succeeded through REA. Earlier raw ELF +address attempts did not complete successfully. A numeric reference did work +for the authored ET_EXEC pilot, so neither observation establishes a universal +numeric-address rule. Preserve the engine's reference and explicit unit path; +keep file offsets and independently obtained ELF addresses separate. + +The native CE catalog advertised 27 tools. REA currently exposes four JEB +operations; native code-item discovery is not among them. The final tasks +therefore start with a known reference. This is a selected-read qualification, +not a complete method-discovery or provider-parity comparison. + +## Completed workflow and accounting + +Three alternating fresh-engine sessions per artifact completed the same task: + +1. Start the private headless engine; prove that its child PID owns the + selected IPv4 or mapped-IPv6 loopback listener before connecting. +2. Connect the production stdio MCP runtime and discover its full catalog. +3. Inspect JEB, list all three units, then concatenate four one-item pages + including the empty remainder and compare with the original listing. +4. Decompile the selected method, check the independent oracle and complete + inline Evidence, then repeat it six times with identical facts and Evidence IDs. +5. Check a missing item returns an error; make one real CLI query and compare + its normalized facts, raw text and Evidence ID with MCP; close the client. +6. Verify target bytes are unchanged and the borrowed engine survived REA + cleanup, then stop the harness-owned engine. + +Each task made 15 public MCP calls and one CLI parity query. Request tracing +observed one upstream catalog walk, one `get_client_information`, five +`list_units` and eight `decompile_code_item` calls. Explicit metadata refresh +and reconnect behavior were not part of this repeat-read measurement. +Tracing covered the production MCP child; the separate CLI query's upstream +requests were not instrumented. +Evidence retained `subject: null` and the artifact-identity limitation; +an independent native project-digest observation was not substituted for +identity atomically bound to each read. + +All heavy work ran serially inside a cgroup v2 family with an 8 GiB hard cap, +7 GiB early stop, one CPU quota and affinity, and zero swap. Startup required +16 GiB host availability; a running task would stop below 8 GiB. The JVM used +`-Xmx1536m -XX:ActiveProcessorCount=1`; the production MCP child used a +2048 MiB Node heap, and the harness/CLI inherited a 3072 MiB Node heap limit. +These are audit settings, not general engine-size recommendations. + +OS and vendor file caches were not flushed. “First” means the first selected +function read in a fresh JVM; “warm” means repeated reads in that same engine. +The private fetch observer recorded request names and byte counts without +cloning response bodies; its overhead is included. + +Whole-task counters include the JVM, MCP client, production runtime, CLI +parity, native oracle and cleanup, including cgroup-charged file cache. +Host-admission wait is recorded separately. Outer guard/systemd-manager costs +were not measured. Payload-exit counters and cleanup were verified while an +observer remained alive; disappeared final whole-scope counters remain unknown. + +## Measured costs + +Medians with observed minimum–maximum across three completed sessions: + +| Cost | Authored ELF | Shipped SQLite | +| ---------------------------------------- | -------------------------: | -------------------------: | +| First selected MCP read | 4.134 s (3.845–5.037) | 24.508 s (22.823–49.977) | +| Six warm MCP reads, total | 253.2 ms (113.4–842.9) | 190.0 ms (160.9–416.9) | +| Whole guarded task elapsed | 27.638 s (26.749–32.622) | 48.296 s (45.625–82.039) | +| Whole family CPU | 27.291 s (26.399–32.155) | 47.753 s (45.370–78.877) | +| Kernel family peak, including file cache | 1540.1 MiB (1531.5–1614.9) | 1799.6 MiB (1714.7–1865.8) | + +The slower third sessions remain in the results. Their extra elapsed and CPU +costs are unexplained; no favorable resampling, stable latency improvement or +memory reduction is claimed. Warm reads are already short relative to first +reads. Adding another live-project cache would introduce identity and +invalidation obligations without a demonstrated bottleneck here. + +All six completed payloads recorded zero memory-limit, task-limit, OOM and +OOM-kill events. This is a payload-exit observation, not a claim that missing +final counters equal zero. + +## Context estimates + +The unchanged production catalog contained 207 tools, 3,158,927 serialized +bytes, SHA-256 +`a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61`. +An offline tiktoken 0.12.0 `cl100k_base` count assigned 805,330 tokens to one +raw catalog page-array in every session. + +| Estimated serialization | Authored ELF median | SQLite median | +| ---------------------------------------------------- | ------------------: | ------------: | +| Catalog + named MCP arguments + raw replies | 814,268 | 814,878 | +| Above, plus selected CLI arguments and parity stdout | 814,610 | 815,249 | +| MCP text reply blocks alone | 3,957 | 4,203 | + +Raw replies contain both text and structured copies. These counts describe +the validation exchange, including its extra pagination, repeated and negative +queries. Actual model usage, prompts, protocol/initialization framing, client +filtering/rendering/replay, shell framing and context for independent oracles +were not measured. No model-token savings or complex-investigation advantage +is established. Catalog delivery is a shared concern; existing +[PR #3026](https://github.com/morluto/rea/pull/3026) already explores family +selection and is outside this checkpoint. + +## Preserved attempts and verification limits + +The JSON receipt retains costs and outcomes for all earlier attempts: + +- Three host-memory refusals happened before scope/payload creation. +- First-use EULA and missing-key attempts exited before analysis. Although + JEB exited zero, the harness correctly reported failure. +- The 30-second raw-address SQLite attempt returned typed `provider_timeout`; + the 60-second raw-address attempt returned an upstream refusal. Neither is a + completed benchmark or proof of a REA defect. +- A producer-reference SQLite read succeeded, but the initial test oracle + rejected its valid C `L` integer suffix. The oracle was corrected before + the final cohort; that incomplete workflow and its cost remain recorded. +- Setup, diagnostic help, successful pilots, native discovery checks and + offline tokenizer work are recorded separately from the final cohort. + +This audit does not qualify CE Java/Android decompilation, GUI project opening, +Windows/macOS, more than 100 units, real caller cancellation, or recovery after +engine restart. Existing reconnect/invalidation work is +[PR #3754](https://github.com/morluto/rea/pull/3754). The selected function and +constant checks do not establish broader software-analysis effectiveness. + +## Release 6.7.0 integration control + +Main advanced to `a25eb5fbb424197cb8e699e15a82a6ff869658aa` during review. +The branch rebased onto that release checkpoint, rebuilt, and passed +`docs:check` plus uncached typecheck/lint. Two additional fresh-engine public +workflows passed against `837718b1968b5fd90762c4c54895b11e9f5478fd`: one +authored ELF and one shipped SQLite, adding 30 MCP calls and two CLI parity +queries. They verify the rebuilt 6.7.0 runtime and remain separate from the +six-session performance cohort above. Their runtime/catalog digests and +process-family costs are recorded in the JSON receipt. + +The first additional SQLite attempt was stopped after 28.244 seconds when +host available memory fell below the unchanged 8 GiB stop threshold. Final +scope limit/OOM counters were observed as zero; payload-exit counters were +unavailable, so that attempt is incomplete. Its sampled peak is not a kernel +peak claim. Target bytes remained unchanged. The successful retry used a +stricter 24 GiB admission wait with the original 8 GiB family cap, 7 GiB early +stop, one CPU and zero swap. No failed attempt was replaced or counted passed. + +## Reproduction entrypoints + +The small source fixture was compiled with `gcc -O1 -g -fno-pie -no-pie`: + +```c +#include +__attribute__((noinline)) int rea_probe_value(int input) { return input * 7 + 13; } +int main(void) { puts("rea_jeb_native_probe"); return rea_probe_value(4) == 41 ? 0 : 1; } +``` + +Its recorded digest pins the tested build; debug/source paths can change a +rebuilt binary's digest. The source expression and independently resolved +symbol remain the fixture oracle. + +From the caller's JEB directory, after completing its official first-use setup +and selecting JDK 21 through `JAVA_HOME`: + +```sh +"$JAVA_HOME/bin/java" -Xmx1536m -XX:ActiveProcessorCount=1 -jar bin/app/jeb.jar -c --mcp \ + --interface=127.0.0.1 --port=18425 \ + --infile=/usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 +``` + +In the pinned REA checkout, with the pinned Node toolchain and built runtime: + +```sh +export REA_JEB_MCP_URL=http://127.0.0.1:18425/mcp +export REA_JEB_MCP_TIMEOUT_MS=60000 +node scripts/rea.mjs inspect-jeb-client --json +node scripts/rea.mjs list-jeb-units --count 100 --json +node scripts/rea.mjs decompile-jeb-item sqlite3_libversion_number method \ + --unit-path libsqlite3.so.0.8.6/libsqlite3.so.0.8.6/x86_64-image --json +nm -D --defined-only /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 +objdump -d --disassemble=sqlite3_libversion_number \ + /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 +``` + +The listed commands reproduce individual reads and the file oracle; the +full measurement also used the MCP sequence and process-family observer +described above. JVM heap flags alone do not impose its family/host guards. +Private raw transcripts and engine documents are excluded from the repository. + +The baseline gate passed `npm run docs:check`, `npm run check:fast` and +`git diff --check`; its typecheck/lint were cache hits. The release integration +gate above also passed with uncached typecheck/lint. The first gate attempt was refused +before scope creation; the admitted gate passed under the unchanged bounds. +The runtime results above were executed against the pinned baseline.