diff --git a/docs/apktool-resource-analysis.md b/docs/apktool-resource-analysis.md index 099af9bd2a..86f92420e7 100644 --- a/docs/apktool-resource-analysis.md +++ b/docs/apktool-resource-analysis.md @@ -8,7 +8,7 @@ installs Apktool or a Java runtime. ## Supply tools -Use Apktool 2.7.0 or newer (verified with 2.7.0) and a Java runtime the +Use Apktool 2.7.0 or newer (verified with 2.7.0 and 3.0.3 on Linux) and a Java runtime the launcher can find. Select the launcher through the environment: ```sh @@ -63,6 +63,7 @@ rea inspect-apktool-client rea decode-android-resources /targets/Example.apk rea decode-android-resources /targets/Example.apk --locale de rea decode-android-resources /targets/Example.apk --locales de --locales pt-BR +rea decode-android-resources /targets/Example.apk --locales de --locales pt-BR --string-tables-only rea decode-android-resources /targets/Example.apk --no-strings ``` @@ -74,6 +75,15 @@ from the same single decode pass), and `include_strings` (default true). Regiona select Android's `values-pt-rBR`; Android qualifiers such as `pt-rBR` and `b+zh+Hans+CN` may also be supplied directly. +Set `string_tables_only: true` (CLI `--string-tables-only`) to return string +entries only inside `string_tables`, including when selecting a single table. +The top-level `strings` array is then empty by request; it does not establish +that the primary table is empty. Table status, counts and coverage still describe +the examined source. This avoids repeating primary entries in multi-locale +responses and charges the aggregate output budget for one copy per table. +Omitting the option preserves existing responses. `include_strings: false` +still suppresses all string projection, including in this mode. + ## Interpret the result - **An owned APK snapshot is digested and decoded.** `target.sha256` and @@ -108,7 +118,8 @@ select Android's `values-pt-rBR`; Android qualifiers such as `pt-rBR` and each projected table with its locale, status (`present`, `missing`, `oversized`, `malformed`, or `skipped`), entry counts, and coverage, bounded at an aggregate budget of 10,000 strings and 32 MiB XML. When `locales` - is omitted, legacy single-table payloads are preserved without adding `string_tables`. + is omitted and `string_tables_only` is not true, legacy single-table payloads are preserved + without adding `string_tables`. - **Smali is skipped by design** (`apktool d --no-src`): Java-source recovery belongs to the JADX family. Resource smali edits and rebuild are a follow-up lane with mutation authority. @@ -143,3 +154,11 @@ locales — launcher version, on-disk digest agreement, apktool.yml metadata (1.2.3, SDK 24–34), manifest package agreement, default and `de` string tables projected. Parser goldens in the test suite come from the same decode. See `docs/testing.md` for the lane summary. + +Multi-locale and table-only projection were also verified through real CLI and +stdio MCP workflows on Linux with Apktool 3.0.3/JDK 21 against NewPipe 0.29.1, +ApiDemos 6.0.18 and Appium Settings 8.2.1. Independent XML projection checks, +exact facts/Evidence parity and bounded task costs are recorded in the +[shared-decode and table-only checkpoint](../experiments/analysis-efficiency/apktool-string-tables.md). +This qualifies selected resource facts, not application execution or independent +binary resource-decoder completeness. diff --git a/experiments/analysis-efficiency/README.md b/experiments/analysis-efficiency/README.md index 75da2d5e9b..d88ca8ae79 100644 --- a/experiments/analysis-efficiency/README.md +++ b/experiments/analysis-efficiency/README.md @@ -1,5 +1,10 @@ # Analysis efficiency measurements +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, +CLI/MCP parity, whole-task estimates and negative timing results. + For immutable imported native/JavaScript parents, see the [validation-reuse checkpoint](immutable-parent-validation.md). It measures the owning format change with the existing retained-query driver, including first diff --git a/experiments/analysis-efficiency/apktool-string-tables.json b/experiments/analysis-efficiency/apktool-string-tables.json new file mode 100644 index 0000000000..659fe4c1ef --- /dev/null +++ b/experiments/analysis-efficiency/apktool-string-tables.json @@ -0,0 +1,2675 @@ +{ + "question": "Read metadata, manifest and default/de/pt-BR strings with equal selected facts and coverage", + "metadata": { + "baseline_revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "source_revision": "406af90023a545fb280601bf51f445e122c36378", + "platform": "Linux-6.1.0-53-cloud-amd64-x86_64-with-glibc2.36", + "node_version": "24.18.0", + "npm_version": "11.16.0", + "java_release": { + "IMPLEMENTOR": "\"Eclipse Adoptium\"", + "JAVA_VERSION": "\"21.0.12.1\"", + "OS_ARCH": "\"x86_64\"" + }, + "apktool_version": "3.0.3", + "apktool_jar_sha256": "dbf930b076c6b9be08d57c449cacefc3bdd6b71ebd59b3066fc0e1f5b14f9423", + "resource_limits": { + "hard_bytes": 8589934592, + "early_stop_bytes": 7516192768, + "cpu_quota_percent": 100, + "no_swap": true, + "host_start_min_bytes": 17179869184, + "host_early_stop_below_bytes": 8589934592 + }, + "targets": [ + { + "name": "newpipe", + "path": "/home/yann/yann/rea-android-analysis-audit-20261017/.cache/android-audit/NewPipe_v0.29.1.apk", + "url": "https://github.com/TeamNewPipe/NewPipe/releases/tag/v0.29.1", + "bytes": 11507122, + "sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "tables": [ + { + "locale": null, + "source_path": "res/values/strings.xml", + "source_sha256": "c096747ec8ff9913e96dba09674fd389bf909c0c57a4af92975612aa4670c44b", + "total_count": 1126, + "unparsed_count": 1, + "source_bytes": 90312 + }, + { + "locale": "de", + "source_path": "res/values-de/strings.xml", + "source_sha256": "8ebd8f00aaf4f1129562b5015fb23f972f1952dacc4be032efb82a935b55a5f4", + "total_count": 833, + "unparsed_count": 1, + "source_bytes": 74278 + }, + { + "locale": "pt-BR", + "source_path": "res/values-pt-rBR/strings.xml", + "source_sha256": "d749cab8f24319f182ad4363d04b3f448dbf0b44d257c6511e05fa824e033106", + "total_count": 779, + "unparsed_count": 1, + "source_bytes": 69171 + } + ] + }, + { + "name": "apidemos", + "path": "/home/yann/yann/rea/_reference/apk-integration/ApiDemos-debug.apk", + "url": "https://github.com/appium/android-apidemos/releases/tag/v6.0.18", + "bytes": 6521217, + "sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "tables": [ + { + "locale": null, + "source_path": "res/values/strings.xml", + "source_sha256": "ebe3b0dce781b75dfd0ddfa8be84ea3e9dc504727fef30f9d38b372b6700c3bd", + "total_count": 967, + "unparsed_count": 8, + "source_bytes": 80956 + }, + { + "locale": "de", + "source_path": "res/values-de/strings.xml", + "source_sha256": "f7b0667d617d22b89786e583a32ecbadbac54edcb072a0cb53240ee082b7d37a", + "total_count": 29, + "unparsed_count": 0, + "source_bytes": 2084 + }, + { + "locale": "pt-BR", + "source_path": "res/values-pt-rBR/strings.xml", + "source_sha256": "0428ee6abf688f73f3892cf96cf4afd89fb883958e8ef1f799162dde1b236b06", + "total_count": 29, + "unparsed_count": 0, + "source_bytes": 2093 + } + ] + }, + { + "name": "settings", + "path": "/home/yann/yann/rea-apktool-locale-audit-20261018/.cache/apktool-audit/inputs/settings_apk-debug.apk", + "url": "https://github.com/appium/io.appium.settings/releases/tag/v8.2.1", + "bytes": 3099589, + "sha256": "e4024b3ee348929252bcaf5eb422bcab9e4ace96703499a84f3332281c03375f", + "tables": [ + { + "locale": null, + "source_path": "res/values/strings.xml", + "source_sha256": "b47cde0ca0d25006ff837ba358569d3bc3e6ca6c171d6b8696c49052a8e08ccf", + "total_count": 25, + "unparsed_count": 0, + "source_bytes": 2403 + }, + { + "locale": "de", + "source_path": "res/values-de/strings.xml", + "source_sha256": "79403cfb52831ec846887e358162b5fd4b30ff00ded79041b0e70667009ba219", + "total_count": 19, + "unparsed_count": 0, + "source_bytes": 2272 + }, + { + "locale": "pt-BR", + "source_path": "res/values-pt-rBR/strings.xml", + "source_sha256": "0eebe46474a66b11ac5ebafb495b2f6f78bec0eb9db578c36e53f7499033f77f", + "total_count": 19, + "unparsed_count": 0, + "source_bytes": 2191 + } + ] + } + ] + }, + "comparisons": [ + { + "scenario": "serial_vs_shared_decode", + "target": "newpipe", + "before": { + "decode_call_seconds": { + "median": 23.190186191, + "min": 21.486564406000003, + "max": 24.103169113 + }, + "decode_reply_bytes": { + "median": 616059, + "min": 616059, + "max": 616059 + }, + "elapsed_seconds": { + "median": 35.324, + "min": 34.25, + "max": 39.346 + }, + "cpu_seconds": { + "median": 34.948577, + "min": 33.952221, + "max": 38.904754 + }, + "memory_peak_bytes": { + "median": 1406922752, + "min": 1395650560, + "max": 1407766528 + } + }, + "after": { + "decode_call_seconds": { + "median": 7.401640442, + "min": 7.18266778, + "max": 7.4598848580000015 + }, + "decode_reply_bytes": { + "median": 680188, + "min": 680188, + "max": 680188 + }, + "elapsed_seconds": { + "median": 19.858, + "min": 19.754, + "max": 20.565 + }, + "cpu_seconds": { + "median": 19.649523, + "min": 19.429002, + "max": 20.280849 + }, + "memory_peak_bytes": { + "median": 1373134848, + "min": 1371226112, + "max": 1381527552 + } + }, + "paired_decode_call_speedup": { + "median": 3.228631324919778, + "min": 2.9029462555457655, + "max": 3.231037686480066 + } + }, + { + "scenario": "serial_vs_shared_decode", + "target": "apidemos", + "before": { + "decode_call_seconds": { + "median": 17.427004498000002, + "min": 16.963336330999997, + "max": 17.760932198000003 + }, + "decode_reply_bytes": { + "median": 1065928, + "min": 1065928, + "max": 1065928 + }, + "elapsed_seconds": { + "median": 30.323, + "min": 29.627, + "max": 31.365 + }, + "cpu_seconds": { + "median": 30.052766, + "min": 29.273924, + "max": 30.998473 + }, + "memory_peak_bytes": { + "median": 1244782592, + "min": 1189068800, + "max": 1252012032 + } + }, + "after": { + "decode_call_seconds": { + "median": 6.215236729999999, + "min": 5.75298876, + "max": 6.387084570999999 + }, + "decode_reply_bytes": { + "median": 616841, + "min": 616841, + "max": 616841 + }, + "elapsed_seconds": { + "median": 18.849, + "min": 18.24, + "max": 19.077 + }, + "cpu_seconds": { + "median": 18.633621, + "min": 17.978499, + "max": 18.737238 + }, + "memory_peak_bytes": { + "median": 1261129728, + "min": 1259823104, + "max": 1303887872 + } + }, + "paired_decode_call_speedup": { + "median": 2.8039164484085557, + "min": 2.6558809645359243, + "max": 3.087253067742827 + } + }, + { + "scenario": "batch_vs_table_only", + "target": "newpipe", + "repetitions": [1, 4, 3], + "before": { + "decode_call_seconds": { + "median": 9.175130465, + "min": 7.989895904999999, + "max": 17.440873898 + }, + "decode_reply_bytes": { + "median": 680188, + "min": 680188, + "max": 680188 + }, + "elapsed_seconds": { + "median": 23.946, + "min": 23.532, + "max": 34.463 + }, + "cpu_seconds": { + "median": 23.653592, + "min": 23.240467, + "max": 32.839675 + }, + "memory_peak_bytes": { + "median": 1392005120, + "min": 1390923776, + "max": 1392623616 + } + }, + "after": { + "decode_call_seconds": { + "median": 9.345273816, + "min": 8.246311752, + "max": 9.374546335 + }, + "decode_reply_bytes": { + "median": 506481, + "min": 506481, + "max": 506481 + }, + "elapsed_seconds": { + "median": 24.851, + "min": 21.589, + "max": 42.802 + }, + "cpu_seconds": { + "median": 23.820567, + "min": 21.353743, + "max": 38.72835 + }, + "memory_peak_bytes": { + "median": 1387872256, + "min": 1304596480, + "max": 1407188992 + } + }, + "paired_decode_call_speedup": { + "median": 0.9817936473184233, + "min": 0.9689053901051203, + "max": 1.860449911360964 + } + }, + { + "scenario": "batch_vs_table_only", + "target": "apidemos", + "repetitions": [1, 2, 3], + "before": { + "decode_call_seconds": { + "median": 6.458543932999999, + "min": 6.263906682999999, + "max": 8.026104324 + }, + "decode_reply_bytes": { + "median": 616841, + "min": 616841, + "max": 616841 + }, + "elapsed_seconds": { + "median": 23.276, + "min": 18.554, + "max": 27.069 + }, + "cpu_seconds": { + "median": 22.896864, + "min": 18.32476, + "max": 26.649583 + }, + "memory_peak_bytes": { + "median": 1308372992, + "min": 1307238400, + "max": 1322594304 + } + }, + "after": { + "decode_call_seconds": { + "median": 5.805770256, + "min": 5.792823598999999, + "max": 7.760532664999999 + }, + "decode_reply_bytes": { + "median": 463588, + "min": 463588, + "max": 463588 + }, + "elapsed_seconds": { + "median": 19.792, + "min": 19.253, + "max": 25.956 + }, + "cpu_seconds": { + "median": 19.470166, + "min": 19.010597, + "max": 25.584285 + }, + "memory_peak_bytes": { + "median": 1255157760, + "min": 1254445056, + "max": 1313894400 + } + }, + "paired_decode_call_speedup": { + "median": 1.0813218417493884, + "min": 1.0342208029350524, + "max": 1.1124353269620662 + } + }, + { + "scenario": "batch_vs_table_only", + "target": "settings", + "repetitions": [1, 2, 3], + "before": { + "decode_call_seconds": { + "median": 4.214945764999999, + "min": 3.845576637, + "max": 5.731298383999998 + }, + "decode_reply_bytes": { + "median": 38725, + "min": 38725, + "max": 38725 + }, + "elapsed_seconds": { + "median": 17.655, + "min": 16.547, + "max": 23.386 + }, + "cpu_seconds": { + "median": 17.416428, + "min": 16.27382, + "max": 23.02919 + }, + "memory_peak_bytes": { + "median": 1249439744, + "min": 1200193536, + "max": 1265876992 + } + }, + "after": { + "decode_call_seconds": { + "median": 4.0608364880000005, + "min": 3.8784605229999998, + "max": 4.470199054999999 + }, + "decode_reply_bytes": { + "median": 34199, + "min": 34199, + "max": 34199 + }, + "elapsed_seconds": { + "median": 19.385, + "min": 16.135, + "max": 21.722 + }, + "cpu_seconds": { + "median": 19.044359, + "min": 15.892915, + "max": 21.335532 + }, + "memory_peak_bytes": { + "median": 1176870912, + "min": 1137561600, + "max": 1178484736 + } + }, + "paired_decode_call_speedup": { + "median": 0.9915214075778284, + "min": 0.9428988984921163, + "max": 1.4113590638126667 + } + } + ], + "token_estimates": { + "tokenizer": "tiktoken", + "version": "0.12.0", + "encoding": "cl100k_base", + "scope": "Offline raw JSON transport serialization, one complete catalog page-array plus named calls and replies once. Full replies include content and structured copies; text-only reply count is separate. No actual model usage, prompts, client rendering/filtering/replay, initialization/protocol framing, or continuations measured.", + "runs": [ + { + "run": "newpipe-serial-1", + "catalog_tokens_estimated": 805217, + "named_call_arguments_tokens_estimated": 159, + "reply_tokens_estimated": 145956, + "text_reply_tokens_estimated": 67747, + "total_raw_tokens_estimated": 951332, + "calls": 5 + }, + { + "run": "newpipe-batch-1", + "catalog_tokens_estimated": 805217, + "named_call_arguments_tokens_estimated": 74, + "reply_tokens_estimated": 157039, + "text_reply_tokens_estimated": 73661, + "total_raw_tokens_estimated": 962330, + "calls": 3 + }, + { + "run": "apidemos-serial-1", + "catalog_tokens_estimated": 805217, + "named_call_arguments_tokens_estimated": 129, + "reply_tokens_estimated": 249547, + "text_reply_tokens_estimated": 111982, + "total_raw_tokens_estimated": 1054893, + "calls": 5 + }, + { + "run": "apidemos-batch-1", + "catalog_tokens_estimated": 805217, + "named_call_arguments_tokens_estimated": 64, + "reply_tokens_estimated": 143310, + "text_reply_tokens_estimated": 65693, + "total_raw_tokens_estimated": 948591, + "calls": 3 + }, + { + "run": "projection-newpipe-before-1", + "catalog_tokens_estimated": 805217, + "named_call_arguments_tokens_estimated": 74, + "reply_tokens_estimated": 157039, + "text_reply_tokens_estimated": 73661, + "total_raw_tokens_estimated": 962330, + "calls": 3 + }, + { + "run": "projection-newpipe-after-1", + "catalog_tokens_estimated": 805330, + "named_call_arguments_tokens_estimated": 79, + "reply_tokens_estimated": 118943, + "text_reply_tokens_estimated": 55797, + "total_raw_tokens_estimated": 924352, + "calls": 3 + }, + { + "run": "projection-apidemos-before-1", + "catalog_tokens_estimated": 805217, + "named_call_arguments_tokens_estimated": 64, + "reply_tokens_estimated": 143310, + "text_reply_tokens_estimated": 65693, + "total_raw_tokens_estimated": 948591, + "calls": 3 + }, + { + "run": "projection-apidemos-after-1", + "catalog_tokens_estimated": 805330, + "named_call_arguments_tokens_estimated": 69, + "reply_tokens_estimated": 108294, + "text_reply_tokens_estimated": 49162, + "total_raw_tokens_estimated": 913693, + "calls": 3 + }, + { + "run": "projection-settings-before-1", + "catalog_tokens_estimated": 805217, + "named_call_arguments_tokens_estimated": 77, + "reply_tokens_estimated": 9565, + "text_reply_tokens_estimated": 4387, + "total_raw_tokens_estimated": 814859, + "calls": 3 + }, + { + "run": "projection-settings-after-1", + "catalog_tokens_estimated": 805330, + "named_call_arguments_tokens_estimated": 82, + "reply_tokens_estimated": 8617, + "text_reply_tokens_estimated": 3942, + "total_raw_tokens_estimated": 814029, + "calls": 3 + } + ] + }, + "oracle_checks": [ + { + "target": "newpipe", + "repetition": 1, + "selected_facts_and_subject_equal": true, + "independent_xml_projection": "passed", + "selected_facts_sha256": "1250bc49bf6055e6b52709de5de0a72cfee8da98b815609d20ad675cd6afb97a" + }, + { + "target": "newpipe", + "repetition": 4, + "selected_facts_and_subject_equal": true, + "independent_xml_projection": "passed", + "selected_facts_sha256": "1250bc49bf6055e6b52709de5de0a72cfee8da98b815609d20ad675cd6afb97a" + }, + { + "target": "newpipe", + "repetition": 3, + "selected_facts_and_subject_equal": true, + "independent_xml_projection": "passed", + "selected_facts_sha256": "1250bc49bf6055e6b52709de5de0a72cfee8da98b815609d20ad675cd6afb97a" + }, + { + "target": "apidemos", + "repetition": 1, + "selected_facts_and_subject_equal": true, + "independent_xml_projection": "passed", + "selected_facts_sha256": "c2186396993183f9a663b83ba60b7b4fb34dbd2af8ad2a698235bf1b936c004e" + }, + { + "target": "apidemos", + "repetition": 2, + "selected_facts_and_subject_equal": true, + "independent_xml_projection": "passed", + "selected_facts_sha256": "c2186396993183f9a663b83ba60b7b4fb34dbd2af8ad2a698235bf1b936c004e" + }, + { + "target": "apidemos", + "repetition": 3, + "selected_facts_and_subject_equal": true, + "independent_xml_projection": "passed", + "selected_facts_sha256": "c2186396993183f9a663b83ba60b7b4fb34dbd2af8ad2a698235bf1b936c004e" + }, + { + "target": "settings", + "repetition": 1, + "selected_facts_and_subject_equal": true, + "independent_xml_projection": "passed", + "selected_facts_sha256": "0df96cd0886af2af67b626539ecc47d614dcf2c4e8545ee27263636a56c69540" + }, + { + "target": "settings", + "repetition": 2, + "selected_facts_and_subject_equal": true, + "independent_xml_projection": "passed", + "selected_facts_sha256": "0df96cd0886af2af67b626539ecc47d614dcf2c4e8545ee27263636a56c69540" + }, + { + "target": "settings", + "repetition": 3, + "selected_facts_and_subject_equal": true, + "independent_xml_projection": "passed", + "selected_facts_sha256": "0df96cd0886af2af67b626539ecc47d614dcf2c4e8545ee27263636a56c69540" + } + ], + "runs": [ + { + "tag": "newpipe-serial-1", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 3, + "harness_elapsed_seconds": 32.262244271, + "decode_call_seconds": 21.486564406000003, + "decode_reply_bytes": 616059, + "catalog": { + "ms": 1162.1106850000006, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_a84aef3bfde3cc76e30bc14b5d51acaa13ec2091b2accca81fb8445a87289f73", + "ev_1fcd76fca0852c23770bb9476fc766625f5cdfdc095985bd51c17c0fdf5bff2a", + "ev_6f3db610cfae963bc83a866af1de17d40af6d2d5fab7dfb8f284259af001a582" + ], + "resources": { + "elapsed_seconds": 34.25, + "cpu_seconds": 33.952221, + "memory_peak_bytes": 1395650560, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 57371525120, + "host_available_min_bytes": 55880548352, + "scope": "rea-efficiency-f4c6c23b3a764965ba6d3896eb003f0a.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "newpipe-batch-1", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 18.454182179, + "decode_call_seconds": 7.401640442, + "decode_reply_bytes": 680188, + "catalog": { + "ms": 1355.947474, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_7e66187baed8b8dbc63e4c0da7c9a49fcccf909e897a890ea3af7d9552f948e3" + ], + "resources": { + "elapsed_seconds": 20.565, + "cpu_seconds": 20.280849, + "memory_peak_bytes": 1381527552, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 57235845120, + "host_available_min_bytes": 55328014336, + "scope": "rea-efficiency-22dfbd3e02664e978f044aa016d1a753.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "newpipe-serial-2", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 3, + "harness_elapsed_seconds": 33.344978080000004, + "decode_call_seconds": 23.190186191, + "decode_reply_bytes": 616059, + "catalog": { + "ms": 1156.690857, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_a84aef3bfde3cc76e30bc14b5d51acaa13ec2091b2accca81fb8445a87289f73", + "ev_1fcd76fca0852c23770bb9476fc766625f5cdfdc095985bd51c17c0fdf5bff2a", + "ev_6f3db610cfae963bc83a866af1de17d40af6d2d5fab7dfb8f284259af001a582" + ], + "resources": { + "elapsed_seconds": 35.324, + "cpu_seconds": 34.948577, + "memory_peak_bytes": 1406922752, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 57631526912, + "host_available_min_bytes": 54157639680, + "scope": "rea-efficiency-873d5e2a0b2c4ba9a0a3e3c3e997527e.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "newpipe-batch-2", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 17.924972070000003, + "decode_call_seconds": 7.18266778, + "decode_reply_bytes": 680188, + "catalog": { + "ms": 1202.293467, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_7e66187baed8b8dbc63e4c0da7c9a49fcccf909e897a890ea3af7d9552f948e3" + ], + "resources": { + "elapsed_seconds": 19.858, + "cpu_seconds": 19.649523, + "memory_peak_bytes": 1373134848, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 57526530048, + "host_available_min_bytes": 56269484032, + "scope": "rea-efficiency-8019ea5ea61d4ae6981d4ac6cfe75064.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "newpipe-serial-3", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 3, + "harness_elapsed_seconds": 37.299781370999995, + "decode_call_seconds": 24.103169113, + "decode_reply_bytes": 616059, + "catalog": { + "ms": 1232.969737, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_a84aef3bfde3cc76e30bc14b5d51acaa13ec2091b2accca81fb8445a87289f73", + "ev_1fcd76fca0852c23770bb9476fc766625f5cdfdc095985bd51c17c0fdf5bff2a", + "ev_6f3db610cfae963bc83a866af1de17d40af6d2d5fab7dfb8f284259af001a582" + ], + "resources": { + "elapsed_seconds": 39.346, + "cpu_seconds": 38.904754, + "memory_peak_bytes": 1407766528, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 56909090816, + "host_available_min_bytes": 54717128704, + "scope": "rea-efficiency-3f35abd3f34b4183b22d11b4888e18bd.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "newpipe-batch-3", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 17.814784738, + "decode_call_seconds": 7.4598848580000015, + "decode_reply_bytes": 680188, + "catalog": { + "ms": 1210.7706590000003, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_7e66187baed8b8dbc63e4c0da7c9a49fcccf909e897a890ea3af7d9552f948e3" + ], + "resources": { + "elapsed_seconds": 19.754, + "cpu_seconds": 19.429002, + "memory_peak_bytes": 1371226112, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 56544321536, + "host_available_min_bytes": 56077533184, + "scope": "rea-efficiency-1328a9c5d6cf498c904d74e6f9febe4b.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "apidemos-serial-1", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 3, + "harness_elapsed_seconds": 28.151709822, + "decode_call_seconds": 17.427004498000002, + "decode_reply_bytes": 1065928, + "catalog": { + "ms": 1178.4533959999999, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_d8c342ed39a2c946433ce6046af7420386f764233905e6af99ec79c279cc9ddc", + "ev_9118a4f71b788fa32332eb8ea96baba65f6ecb74727fb753311439612646e18c", + "ev_d7a6abbea0da16d919e8333a24687e111c49d714301eb3390d7d45f2e07034aa" + ], + "resources": { + "elapsed_seconds": 30.323, + "cpu_seconds": 30.052766, + "memory_peak_bytes": 1252012032, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 58079825920, + "host_available_min_bytes": 56247799808, + "scope": "rea-efficiency-94d9872fd75f442b823536c9df305673.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "apidemos-batch-1", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 1, + "harness_elapsed_seconds": 16.383644854000003, + "decode_call_seconds": 6.215236729999999, + "decode_reply_bytes": 616841, + "catalog": { + "ms": 1165.3261769999995, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_9c26c5671561d637fb2b87bc0f8cf561b8394eb40c69a32d3977329454255759" + ], + "resources": { + "elapsed_seconds": 18.24, + "cpu_seconds": 17.978499, + "memory_peak_bytes": 1259823104, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 57144721408, + "host_available_min_bytes": 55262167040, + "scope": "rea-efficiency-5bd003ff4cb444d591dcb61c41531c2b.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "apidemos-serial-2", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 3, + "harness_elapsed_seconds": 29.451358538, + "decode_call_seconds": 17.760932198000003, + "decode_reply_bytes": 1065928, + "catalog": { + "ms": 1304.0827369999997, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_d8c342ed39a2c946433ce6046af7420386f764233905e6af99ec79c279cc9ddc", + "ev_9118a4f71b788fa32332eb8ea96baba65f6ecb74727fb753311439612646e18c", + "ev_d7a6abbea0da16d919e8333a24687e111c49d714301eb3390d7d45f2e07034aa" + ], + "resources": { + "elapsed_seconds": 31.365, + "cpu_seconds": 30.998473, + "memory_peak_bytes": 1244782592, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 56161689600, + "host_available_min_bytes": 54817161216, + "scope": "rea-efficiency-07fc9b79daf548bba13b7f9c06c3169c.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "apidemos-batch-2", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 1, + "harness_elapsed_seconds": 16.987557932, + "decode_call_seconds": 5.75298876, + "decode_reply_bytes": 616841, + "catalog": { + "ms": 1241.402717, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_9c26c5671561d637fb2b87bc0f8cf561b8394eb40c69a32d3977329454255759" + ], + "resources": { + "elapsed_seconds": 19.077, + "cpu_seconds": 18.737238, + "memory_peak_bytes": 1261129728, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 56699691008, + "host_available_min_bytes": 54889050112, + "scope": "rea-efficiency-e0d1ced488c64ed48bf26cbfe9e1ed5c.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "apidemos-serial-3", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 3, + "harness_elapsed_seconds": 27.675745408999997, + "decode_call_seconds": 16.963336330999997, + "decode_reply_bytes": 1065928, + "catalog": { + "ms": 1192.4424679999997, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_d8c342ed39a2c946433ce6046af7420386f764233905e6af99ec79c279cc9ddc", + "ev_9118a4f71b788fa32332eb8ea96baba65f6ecb74727fb753311439612646e18c", + "ev_d7a6abbea0da16d919e8333a24687e111c49d714301eb3390d7d45f2e07034aa" + ], + "resources": { + "elapsed_seconds": 29.627, + "cpu_seconds": 29.273924, + "memory_peak_bytes": 1189068800, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 57904427008, + "host_available_min_bytes": 55728099328, + "scope": "rea-efficiency-4f398a6509df4342959500a2495fc7d2.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "apidemos-batch-3", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 1, + "harness_elapsed_seconds": 16.967522193, + "decode_call_seconds": 6.387084570999999, + "decode_reply_bytes": 616841, + "catalog": { + "ms": 1174.6010390000001, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_9c26c5671561d637fb2b87bc0f8cf561b8394eb40c69a32d3977329454255759" + ], + "resources": { + "elapsed_seconds": 18.849, + "cpu_seconds": 18.633621, + "memory_peak_bytes": 1303887872, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 58116931584, + "host_available_min_bytes": 53444014080, + "scope": "rea-efficiency-dde8313278ee4f0188251cb23d0c8757.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-newpipe-before-1", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 31.823084831999996, + "decode_call_seconds": 17.440873898, + "decode_reply_bytes": 680188, + "catalog": { + "ms": 1610.9936400000006, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_7e66187baed8b8dbc63e4c0da7c9a49fcccf909e897a890ea3af7d9552f948e3" + ], + "resources": { + "elapsed_seconds": 34.463, + "cpu_seconds": 32.839675, + "memory_peak_bytes": 1392005120, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 17282539520, + "host_available_min_bytes": 16157425664, + "scope": "rea-efficiency-16789799241a4e9799eec1666bd797d0.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-newpipe-after-1", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 37.963359747999995, + "decode_call_seconds": 9.374546335, + "decode_reply_bytes": 506481, + "catalog": { + "ms": 3173.6560210000007, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_7739446eb09e2257fb58bdd1a585548035d848f8a696bacb6803cc37a1822f48" + ], + "resources": { + "elapsed_seconds": 42.802, + "cpu_seconds": 38.72835, + "memory_peak_bytes": 1304596480, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 18257166336, + "host_available_min_bytes": 11610263552, + "scope": "rea-efficiency-41250c6474a84ba08eb4b3885164c37b.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-newpipe-before-4", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 21.383472355000002, + "decode_call_seconds": 9.175130465, + "decode_reply_bytes": 680188, + "catalog": { + "ms": 1632.7881619999998, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_7e66187baed8b8dbc63e4c0da7c9a49fcccf909e897a890ea3af7d9552f948e3" + ], + "resources": { + "elapsed_seconds": 23.532, + "cpu_seconds": 23.240467, + "memory_peak_bytes": 1392623616, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 41625026560, + "host_available_min_bytes": 39709315072, + "scope": "rea-efficiency-bbb58d836af84ef986a629ca430f1bee.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-newpipe-after-4", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 22.260435595, + "decode_call_seconds": 9.345273816, + "decode_reply_bytes": 506481, + "catalog": { + "ms": 1294.0758259999993, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_7739446eb09e2257fb58bdd1a585548035d848f8a696bacb6803cc37a1822f48" + ], + "resources": { + "elapsed_seconds": 24.851, + "cpu_seconds": 23.820567, + "memory_peak_bytes": 1407188992, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 46640201728, + "host_available_min_bytes": 40649854976, + "scope": "rea-efficiency-ab3c7d553c644011beaaa45d6afeadc9.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-newpipe-before-3", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 21.774871463, + "decode_call_seconds": 7.989895904999999, + "decode_reply_bytes": 680188, + "catalog": { + "ms": 2004.3642759999998, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_7e66187baed8b8dbc63e4c0da7c9a49fcccf909e897a890ea3af7d9552f948e3" + ], + "resources": { + "elapsed_seconds": 23.946, + "cpu_seconds": 23.653592, + "memory_peak_bytes": 1390923776, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 38760652800, + "host_available_min_bytes": 35454074880, + "scope": "rea-efficiency-ed6510cc91fa4034bc48956f4edd9f46.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-newpipe-after-3", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 19.519575183, + "decode_call_seconds": 8.246311752, + "decode_reply_bytes": 506481, + "catalog": { + "ms": 1380.9581779999999, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_7739446eb09e2257fb58bdd1a585548035d848f8a696bacb6803cc37a1822f48" + ], + "resources": { + "elapsed_seconds": 21.589, + "cpu_seconds": 21.353743, + "memory_peak_bytes": 1387872256, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 39096815616, + "host_available_min_bytes": 39096815616, + "scope": "rea-efficiency-d7ae633560ed46e9b2a176116bb0a497.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-apidemos-before-1", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 1, + "harness_elapsed_seconds": 19.920691234, + "decode_call_seconds": 6.458543932999999, + "decode_reply_bytes": 616841, + "catalog": { + "ms": 1557.7458500000002, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_9c26c5671561d637fb2b87bc0f8cf561b8394eb40c69a32d3977329454255759" + ], + "resources": { + "elapsed_seconds": 23.276, + "cpu_seconds": 22.896864, + "memory_peak_bytes": 1322594304, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 22954307584, + "host_available_min_bytes": 20503412736, + "scope": "rea-efficiency-ccfdd762ab8d4a438f81e0e2a4e9a721.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-apidemos-after-1", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 1, + "harness_elapsed_seconds": 17.191776371, + "decode_call_seconds": 5.805770256, + "decode_reply_bytes": 463588, + "catalog": { + "ms": 1274.6399430000001, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_e7dcabed87fc6a606e51f2f1bd301292c7f855150e7a02ea99e1c8288b00236e" + ], + "resources": { + "elapsed_seconds": 19.253, + "cpu_seconds": 19.010597, + "memory_peak_bytes": 1254445056, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 21915484160, + "host_available_min_bytes": 19359256576, + "scope": "rea-efficiency-30b796629c954404b168bbcdc8c34ddc.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-apidemos-before-2", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 1, + "harness_elapsed_seconds": 16.620243391, + "decode_call_seconds": 6.263906682999999, + "decode_reply_bytes": 616841, + "catalog": { + "ms": 1158.291507, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_9c26c5671561d637fb2b87bc0f8cf561b8394eb40c69a32d3977329454255759" + ], + "resources": { + "elapsed_seconds": 18.554, + "cpu_seconds": 18.32476, + "memory_peak_bytes": 1308372992, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 40753053696, + "host_available_min_bytes": 38247297024, + "scope": "rea-efficiency-3e1e0cbd3ce340b7be41b60434367b42.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-apidemos-after-2", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 1, + "harness_elapsed_seconds": 17.590138826, + "decode_call_seconds": 5.792823598999999, + "decode_reply_bytes": 463588, + "catalog": { + "ms": 1486.903335, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_e7dcabed87fc6a606e51f2f1bd301292c7f855150e7a02ea99e1c8288b00236e" + ], + "resources": { + "elapsed_seconds": 19.792, + "cpu_seconds": 19.470166, + "memory_peak_bytes": 1313894400, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 41597587456, + "host_available_min_bytes": 39055675392, + "scope": "rea-efficiency-656f3353b0d143b697ee82d5e436b01e.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-apidemos-before-3", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 1, + "harness_elapsed_seconds": 24.224610511999998, + "decode_call_seconds": 8.026104324, + "decode_reply_bytes": 616841, + "catalog": { + "ms": 2007.2937889999994, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_9c26c5671561d637fb2b87bc0f8cf561b8394eb40c69a32d3977329454255759" + ], + "resources": { + "elapsed_seconds": 27.069, + "cpu_seconds": 26.649583, + "memory_peak_bytes": 1307238400, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 43740422144, + "host_available_min_bytes": 41269895168, + "scope": "rea-efficiency-709266f9017d4ae8b3dcd7a81d13f228.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-apidemos-after-3", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 1, + "harness_elapsed_seconds": 23.203795331000002, + "decode_call_seconds": 7.760532664999999, + "decode_reply_bytes": 463588, + "catalog": { + "ms": 1630.9598020000003, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_e7dcabed87fc6a606e51f2f1bd301292c7f855150e7a02ea99e1c8288b00236e" + ], + "resources": { + "elapsed_seconds": 25.956, + "cpu_seconds": 25.584285, + "memory_peak_bytes": 1255157760, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 43776098304, + "host_available_min_bytes": 39406845952, + "scope": "rea-efficiency-b53d325179f7418da3caa4c7ce82bf62.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-settings-before-1", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "e4024b3ee348929252bcaf5eb422bcab9e4ace96703499a84f3332281c03375f", + "decode_count": 1, + "harness_elapsed_seconds": 15.527023300999998, + "decode_call_seconds": 4.214945764999999, + "decode_reply_bytes": 38725, + "catalog": { + "ms": 1257.0847129999997, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_335e8f96e0a92e20101ad9180ece07b346c2bda9be5c55a3f4d9a2d4aa2fc062" + ], + "resources": { + "elapsed_seconds": 17.655, + "cpu_seconds": 17.416428, + "memory_peak_bytes": 1249439744, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 21051928576, + "host_available_min_bytes": 17393364992, + "scope": "rea-efficiency-e81742c78e6245ecb4bf9019dbedd23b.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-settings-after-1", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "e4024b3ee348929252bcaf5eb422bcab9e4ace96703499a84f3332281c03375f", + "decode_count": 1, + "harness_elapsed_seconds": 17.46638704, + "decode_call_seconds": 4.470199054999999, + "decode_reply_bytes": 34199, + "catalog": { + "ms": 1438.289382, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_0a7d076a26a4356b56a2ea56da0b105c5819d3959c9113050f28d4acd220276f" + ], + "resources": { + "elapsed_seconds": 19.385, + "cpu_seconds": 19.044359, + "memory_peak_bytes": 1137561600, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 18436014080, + "host_available_min_bytes": 15368880128, + "scope": "rea-efficiency-83252c15e1e54750b78ceb6fa800a906.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-settings-before-2", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "e4024b3ee348929252bcaf5eb422bcab9e4ace96703499a84f3332281c03375f", + "decode_count": 1, + "harness_elapsed_seconds": 14.558633171, + "decode_call_seconds": 3.845576637, + "decode_reply_bytes": 38725, + "catalog": { + "ms": 1206.1259680000003, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_335e8f96e0a92e20101ad9180ece07b346c2bda9be5c55a3f4d9a2d4aa2fc062" + ], + "resources": { + "elapsed_seconds": 16.547, + "cpu_seconds": 16.27382, + "memory_peak_bytes": 1200193536, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 41856458752, + "host_available_min_bytes": 37632962560, + "scope": "rea-efficiency-216683a7f04f41c0ab4f83c5c105d3e4.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-settings-after-2", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "e4024b3ee348929252bcaf5eb422bcab9e4ace96703499a84f3332281c03375f", + "decode_count": 1, + "harness_elapsed_seconds": 14.227195921, + "decode_call_seconds": 3.8784605229999998, + "decode_reply_bytes": 34199, + "catalog": { + "ms": 1192.598167, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_0a7d076a26a4356b56a2ea56da0b105c5819d3959c9113050f28d4acd220276f" + ], + "resources": { + "elapsed_seconds": 16.135, + "cpu_seconds": 15.892915, + "memory_peak_bytes": 1176870912, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 40893882368, + "host_available_min_bytes": 40607342592, + "scope": "rea-efficiency-3f3bba25375c40349385097f84c7f028.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-settings-before-3", + "revision": "8f7d12e30d63f3d3b4cfe2a90336362841438f56", + "runtime_sha256": "e05c70bed21c680445a5c6e314a16cce6f22f3909f93388bf602338062e63d1a", + "target_sha256": "e4024b3ee348929252bcaf5eb422bcab9e4ace96703499a84f3332281c03375f", + "decode_count": 1, + "harness_elapsed_seconds": 20.841195699, + "decode_call_seconds": 5.731298383999998, + "decode_reply_bytes": 38725, + "catalog": { + "ms": 1588.4275120000002, + "tools": 207, + "bytes": 3158370, + "sha256": "dd756e0bfd35097e0c96614cc6f747648a2f2dfa42dfc597668ef6b0b08d1073" + }, + "evidence_ids": [ + "ev_335e8f96e0a92e20101ad9180ece07b346c2bda9be5c55a3f4d9a2d4aa2fc062" + ], + "resources": { + "elapsed_seconds": 23.386, + "cpu_seconds": 23.02919, + "memory_peak_bytes": 1265876992, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 40564142080, + "host_available_min_bytes": 38354026496, + "scope": "rea-efficiency-8110390c939a4826952aedcd2afe99e0.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "projection-settings-after-3", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "e4024b3ee348929252bcaf5eb422bcab9e4ace96703499a84f3332281c03375f", + "decode_count": 1, + "harness_elapsed_seconds": 19.069327022000003, + "decode_call_seconds": 4.0608364880000005, + "decode_reply_bytes": 34199, + "catalog": { + "ms": 1712.0713240000005, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_0a7d076a26a4356b56a2ea56da0b105c5819d3959c9113050f28d4acd220276f" + ], + "resources": { + "elapsed_seconds": 21.722, + "cpu_seconds": 21.335532, + "memory_peak_bytes": 1178484736, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 40232665088, + "host_available_min_bytes": 38174044160, + "scope": "rea-efficiency-37ef8d4e63064770be1b170008c3ac07.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "compatibility-newpipe", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 31.779467265, + "decode_call_seconds": 16.909844631, + "decode_reply_bytes": 680188, + "catalog": { + "ms": 1677.5181929999999, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_7e66187baed8b8dbc63e4c0da7c9a49fcccf909e897a890ea3af7d9552f948e3" + ], + "resources": { + "elapsed_seconds": 34.54, + "cpu_seconds": 33.173543, + "memory_peak_bytes": 1377177600, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 39514972160, + "host_available_min_bytes": 37333192704, + "scope": "rea-efficiency-0eb646969b5340dc9b6b2ecc36615057.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "compatibility-apidemos", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 1, + "harness_elapsed_seconds": 34.944267079, + "decode_call_seconds": 7.5659431720000025, + "decode_reply_bytes": 616841, + "catalog": { + "ms": 4325.878197, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_9c26c5671561d637fb2b87bc0f8cf561b8394eb40c69a32d3977329454255759" + ], + "resources": { + "elapsed_seconds": 39.939, + "cpu_seconds": 36.581254, + "memory_peak_bytes": 1289891840, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 38347739136, + "host_available_min_bytes": 31757864960, + "scope": "rea-efficiency-634d7beae7604c179549c0c08c7ab3ad.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "compatibility-settings", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "e4024b3ee348929252bcaf5eb422bcab9e4ace96703499a84f3332281c03375f", + "decode_count": 1, + "harness_elapsed_seconds": 22.583988864, + "decode_call_seconds": 4.529234622, + "decode_reply_bytes": 38725, + "catalog": { + "ms": 2034.8301760000004, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_335e8f96e0a92e20101ad9180ece07b346c2bda9be5c55a3f4d9a2d4aa2fc062" + ], + "resources": { + "elapsed_seconds": 25.37, + "cpu_seconds": 24.814081, + "memory_peak_bytes": 1121263616, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 39414218752, + "host_available_min_bytes": 36789739520, + "scope": "rea-efficiency-58d1eef12964403eb3453b4af8dd6a8c.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "edge-alias-tables", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 23.139391992, + "decode_call_seconds": 9.368456018000002, + "decode_reply_bytes": 466545, + "catalog": { + "ms": 1517.139561, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_d4bd2b03e88662ab0854a18703ee6032e21cd9e4e1a67d56056aee3294884760" + ], + "resources": { + "elapsed_seconds": 25.563, + "cpu_seconds": 25.207662, + "memory_peak_bytes": 1325109248, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 39154511872, + "host_available_min_bytes": 35729047552, + "scope": "rea-efficiency-107e86c1e3544bad85494d617da80cd4.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "edge-single", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 25.026160424, + "decode_call_seconds": 9.688229486000001, + "decode_reply_bytes": 198475, + "catalog": { + "ms": 1563.8225700000003, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_c5bb47a73759015627198eb79672addc2ce645744b8b29cdc600a5c039b32215" + ], + "resources": { + "elapsed_seconds": 27.658, + "cpu_seconds": 27.126035, + "memory_peak_bytes": 1305952256, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 36821073920, + "host_available_min_bytes": 34098143232, + "scope": "rea-efficiency-30cf4190bc65475abbda2c9d6acbfdf3.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "tag": "edge-no-strings", + "revision": "406af90023a545fb280601bf51f445e122c36378", + "runtime_sha256": "0809b5004f214efa4b79775d5fda796eaecf4ad5756c55ee3b9d7cf82d91b750", + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "harness_elapsed_seconds": 24.565620733000003, + "decode_call_seconds": 9.259350849000002, + "decode_reply_bytes": 55354, + "catalog": { + "ms": 1652.9823479999995, + "tools": 207, + "bytes": 3158927, + "sha256": "a1851aa1bfe3d72d6be6bec130519dbdfc1ee49288320cfac0144ced77755c61" + }, + "evidence_ids": [ + "ev_f9c2788c079495ff1bc3b133c28ae93c88223144f44d3dc9de5ad544f76daefb" + ], + "resources": { + "elapsed_seconds": 27.233, + "cpu_seconds": 26.622714, + "memory_peak_bytes": 1334304768, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 35324268544, + "host_available_min_bytes": 31738200064, + "scope": "rea-efficiency-9ab2e798f3eb4f2f92753ac0c3ed07ff.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + } + ], + "cli": [ + { + "target": "newpipe", + "normalized_result_subject_and_identity_equal": true, + "receipt": { + "tag": "cli-newpipe", + "exit_code": 0, + "elapsed_seconds": 12.7261176770553, + "target_sha256": "18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79", + "decode_count": 1, + "owned_workspaces": ["/tmp/rea-apktool-nifIag"], + "workspace_cleanup_verified": true + }, + "resources": { + "elapsed_seconds": 13.089, + "cpu_seconds": 12.598681, + "memory_peak_bytes": 658407424, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 31780069376, + "host_available_min_bytes": 31138689024, + "scope": "rea-efficiency-5d8bf33a44e7494aab2ea2f41f2ea8f0.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "target": "apidemos", + "normalized_result_subject_and_identity_equal": true, + "receipt": { + "tag": "cli-apidemos", + "exit_code": 0, + "elapsed_seconds": 10.412236508913338, + "target_sha256": "a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686", + "decode_count": 1, + "owned_workspaces": ["/tmp/rea-apktool-ritPTb"], + "workspace_cleanup_verified": true + }, + "resources": { + "elapsed_seconds": 10.75, + "cpu_seconds": 10.425627, + "memory_peak_bytes": 573112320, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 32536313856, + "host_available_min_bytes": 31811485696, + "scope": "rea-efficiency-fec600c5f8b64b74a3ca541425025041.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + }, + { + "target": "settings", + "normalized_result_subject_and_identity_equal": true, + "receipt": { + "tag": "cli-settings", + "exit_code": 0, + "elapsed_seconds": 7.369712594081648, + "target_sha256": "e4024b3ee348929252bcaf5eb422bcab9e4ace96703499a84f3332281c03375f", + "decode_count": 1, + "owned_workspaces": ["/tmp/rea-apktool-f1WotH"], + "workspace_cleanup_verified": true + }, + "resources": { + "elapsed_seconds": 7.722, + "cpu_seconds": 7.375661, + "memory_peak_bytes": 528891904, + "payload_events": { + "memory.events": { + "low": 0, + "high": 0, + "max": 0, + "oom": 0, + "oom_kill": 0, + "oom_group_kill": 0 + }, + "pids.events": { + "max": 0 + } + }, + "final_scope_events": null, + "host_available_start_bytes": 32730345472, + "host_available_min_bytes": 31883067392, + "scope": "rea-efficiency-91c433f939424297a8385d3e436027d7.scope", + "observer_sources": { + "resource-run.py": "d2047721e50dd244900eb514d07025386e60908f77bb546bee5684baa1da2f19", + "resource_payload.py": "6f089e645459eba80c5d73e39c21606c78173a44daf49fabc3b88c4631ce51c6" + } + } + } + ], + "resource_refusals": [ + { + "tag": "projection-newpipe-after-2", + "stage": "before scope/payload creation", + "reason": "host MemAvailable below 16 GiB; no payload or family counters available", + "replacement": "fresh complete NewPipe repetition4 after/before pair; no attempted files overwritten" + } + ], + "other_executed_costs": [ + { + "local_log": "build.log", + "payload_exit_code": 0, + "elapsed_seconds": 88.178, + "cpu_seconds": 86.687245, + "memory_peak_bytes": 3034914816, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "pilot.log", + "payload_exit_code": 0, + "elapsed_seconds": 20.256, + "cpu_seconds": 19.590352, + "memory_peak_bytes": 1458556928, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "oracles-resource.log", + "payload_exit_code": 0, + "elapsed_seconds": 12.201, + "cpu_seconds": 11.976016, + "memory_peak_bytes": 322490368, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "red.log", + "payload_exit_code": 1, + "elapsed_seconds": 7.473, + "cpu_seconds": 6.666587, + "memory_peak_bytes": 507932672, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "validate.log", + "payload_exit_code": 1, + "elapsed_seconds": 189.312, + "cpu_seconds": 186.186094, + "memory_peak_bytes": 4487798784, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "validate-fixed.log", + "payload_exit_code": 0, + "elapsed_seconds": 343.967, + "cpu_seconds": 338.66566, + "memory_peak_bytes": 4311293952, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "source-commit.log", + "payload_exit_code": 0, + "elapsed_seconds": 0.43, + "cpu_seconds": 0.098347, + "memory_peak_bytes": 16736256, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "small-input.log", + "payload_exit_code": 0, + "elapsed_seconds": 10.506, + "cpu_seconds": 5.319085, + "memory_peak_bytes": 286965760, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "prepare-hooks.log", + "payload_exit_code": 0, + "elapsed_seconds": 0.728, + "cpu_seconds": 0.359612, + "memory_peak_bytes": 56467456, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "token-estimate-resource.log", + "payload_exit_code": 0, + "elapsed_seconds": 9.605, + "cpu_seconds": 9.279161, + "memory_peak_bytes": 174465024, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "summary-resource.log", + "payload_exit_code": 0, + "elapsed_seconds": 1.188, + "cpu_seconds": 0.854274, + "memory_peak_bytes": 77717504, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "test-discovery.log", + "payload_exit_code": 0, + "elapsed_seconds": 1.8, + "cpu_seconds": 1.196132, + "memory_peak_bytes": 193396736, + "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 + } + }, + "final_scope_events": null + }, + { + "local_log": "check-final.log", + "payload_exit_code": 0, + "elapsed_seconds": 71.187, + "cpu_seconds": 62.610333, + "memory_peak_bytes": 1272311808, + "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 + } + }, + "final_scope_events": null + } + ], + "verification": { + "source_tests": 94, + "compiled_cli_mcp_tests": 9, + "mcp_completed_tasks": 36, + "real_cli_pairs": 3, + "test_files_discovered_exactly_once": 1579, + "check_fast_and_build": "passed", + "full_check_and_docs": "passed", + "oracle_scope": "Independent Expat interpretation of separate native XML decodes; not independent binary ARSC decoder completeness", + "resource_scope": "Payload-exit cgroup counters while observer remains alive; final disappeared-scope counters are unknown, never zero", + "unmeasured": [ + "actual model usage or investigation quality", + "cold disk caches", + "other APK engines and OS platforms", + "causal explanation for whole-task latency variation" + ] + } +} diff --git a/experiments/analysis-efficiency/apktool-string-tables.md b/experiments/analysis-efficiency/apktool-string-tables.md new file mode 100644 index 0000000000..e81549fdf0 --- /dev/null +++ b/experiments/analysis-efficiency/apktool-string-tables.md @@ -0,0 +1,171 @@ +# Apktool shared decoding and table-only projection + +The measured question is the same in every comparison: inspect an APK's +metadata/manifest and its default, German and Brazilian Portuguese string tables. +One existing batch removes repeated decoding. An optional table-only projection +then removes repeated primary strings without changing the selected facts. + +This is a static resource-query measurement, not an agent evaluation or a claim +about reconstructing an application's behavior. The machine-readable measured +summary is [apktool-string-tables.json](apktool-string-tables.json). + +## Revisions, inputs and execution + +- Baseline: `8f7d12e30d63f3d3b4cfe2a90336362841438f56`, latest main at issue start. +- Projection source: `406af90023a545fb280601bf51f445e122c36378`. +- Existing shared decode: [#4777](https://github.com/morluto/rea/issues/4777), + integrated by [#4804](https://github.com/morluto/rea/pull/4804). +- Projection follow-up: [#4982](https://github.com/morluto/rea/issues/4982). +- Linux x86-64, kernel 6.1.0-53-cloud-amd64, Node 24.18.0, npm 11.16.0, + Temurin 21.0.12.1, Apktool 3.0.3. The selected JAR's closeout digest is + `dbf930b076c6b9be08d57c449cacefc3bdd6b71ebd59b3066fc0e1f5b14f9423`; + decoder contents were not independently hashed for every request. + +- [newpipe](https://github.com/TeamNewPipe/NewPipe/releases/tag/v0.29.1): 11,507,122 bytes; SHA-256 `18447bfb1e06d113edc88df93f471827280de06f6f3d4dc42f56f28b9c1bab79`. Valid projected counts: 1126/833/779; unsupported entries: 1/1/1. +- [apidemos](https://github.com/appium/android-apidemos/releases/tag/v6.0.18): 6,521,217 bytes; SHA-256 `a9eecf37b26cd084855c530db81c2bb1b91f4c1b095a04f47aa7c20e2791f686`. Valid projected counts: 967/29/29; unsupported entries: 8/0/0. +- [settings](https://github.com/appium/io.appium.settings/releases/tag/v8.2.1): 3,099,589 bytes; SHA-256 `e4024b3ee348929252bcaf5eb422bcab9e4ace96703499a84f3332281c03375f`. Valid projected counts: 25/19/19; unsupported entries: 0/0/0. + +The counts are default/de/pt-BR respectively. Source paths, XML digests, exact +caller paths, runtime hashes and per-run identities/costs are in the JSON summary. +The APKs were never installed or executed. Input digests were checked before and +after each completed task; provider-owned workspaces were confirmed absent. + +Each task uses a fresh production stdio MCP runtime, complete paginated tool +discovery, client inspection, resource call(s), `close_binary`, transport close +and owned cleanup. OS file caches were not flushed. Every decode has a fresh JVM, +APK snapshot, framework directory and workspace: these are not warm retained +engine/database queries, nor cold-disk measurements. + +Tasks run serially on one logical CPU, with an 8 GiB family hard limit, 7 GiB +early stop and no swap. Admission requires 16 GiB host availability; running +tasks stop below 8 GiB host availability. CPU and kernel `memory.peak` cover +the complete owned cgroup, including subprocesses, observer and file cache. +Counters are captured at payload exit while the observer is alive; disappeared +final whole-scope counters remain unknown. All completed payload receipts show +successful owned cleanup and zero observed OOM/limit events at that checkpoint. + +## Correctness and owning change + +Separate native decodes were retained for independent Python Expat validation. +It checks direct string entries, source entity spelling, unsupported markup +counts, ordering and emitted prefixes against the XML bytes. Manifest text and +package identity are checked separately. All six serial/batch pairs agree on +selected strings, manifest, metadata and target identity. All nine projection +pairs additionally preserve table counts and coverage; batch/table-only counts +and coverage match the XML oracle. This qualifies REA's projection of these +native outputs, not independent binary ARSC decoder completeness. + +The existing default batch repeats its primary table in top-level `strings` and +`string_tables[0]`. On NewPipe this made the full resource replies larger than +three serial replies despite reducing decode calls: 616,059 → 680,188 bytes. +ApiDemos' larger common manifest produces the opposite tradeoff. The existing +batch remains the compatibility default. + +`string_tables_only: true` (CLI `--string-tables-only`) keeps the complete +requested table facts inline in `string_tables` and leaves `strings` empty by +request. An unrequested field does not establish that a source table is empty. +This also supports one table without `locales`. `include_strings: false` still +suppresses string projection. Omitting the new option preserves old requests: +three real legacy workflows produce identical complete MCP replies, including +Evidence identity, at the new source revision. + +The resource projection owner computes the output choice and charges aggregate +entries for the copies actually emitted. The same 10,000-entry policy can thus +return five distinct 2,000-entry tables rather than consuming capacity on a +duplicate primary copy. Per-table limits, XML budgets, physical alias reuse, +coverage, partial observations and cancellation remain at the existing owner. +CLI and MCP share this implementation; there is no new tool or cross-call cache. + +## Existing shared decode: three serial calls versus one batch + +Three alternating fresh-session pairs per APK, all at the same main revision. +The table reports marginal medians; paired speedups are reported separately. +Elapsed/CPU include discovery, client/Java startup, calls, transcript/hash checks +and cleanup. Native oracle creation, tokenization and verification gates are +separate costs in the JSON, not hidden inside these task timings. + +| Target | Resource calls, s | Whole elapsed, s | Whole CPU, s | Family peak, MiB | +| -------- | ----------------: | ---------------: | ------------: | ---------------: | +| newpipe | 23.19 → 7.40 | 35.32 → 19.86 | 34.95 → 19.65 | 1341.7 → 1309.5 | +| apidemos | 17.43 → 6.22 | 30.32 → 18.85 | 30.05 → 18.63 | 1187.1 → 1202.7 | + +Paired resource-call speedup medians: NewPipe **3.23×** (2.90–3.23), ApiDemos +**2.80×** (2.66–3.09). Instrumentation confirms three versus one actual decoder +invocations. These call timings include protocol/projection costs; they do not +isolate the Java engine phase. NewPipe's whole raw token estimate increases +951,332 → 962,330 with the default batch; ApiDemos decreases +1,054,893 → 948,591. Fewer calls alone do not establish less context. + +## New selector: default batch versus table-only batch + +Three alternating pairs per APK; NewPipe repetitions 1/4/3, others 1/2/3. +Repetition 4 replaces a refused start, described below. Both variants still +perform one decode and return the same required facts. + +| Target | Resource call, s | Whole elapsed, s | Whole CPU, s | Family peak, MiB | +| -------- | ---------------: | ---------------: | ------------: | ---------------: | +| newpipe | 9.18 → 9.35 | 23.95 → 24.85 | 23.65 → 23.82 | 1327.5 → 1323.6 | +| apidemos | 6.46 → 5.81 | 23.28 → 19.79 | 22.90 → 19.47 | 1247.8 → 1197.0 | +| settings | 4.21 → 4.06 | 17.66 → 19.39 | 17.42 → 19.04 | 1191.6 → 1122.4 | + +There is no consistent latency or whole-family memory improvement established +for the selector. NewPipe and Settings have higher whole-task elapsed and CPU +medians. Elapsed ranges overlap: NewPipe 23.53–34.46 → 21.59–42.80 s; +ApiDemos 18.55–27.07 → 19.25–25.96 s; Settings 16.55–23.39 → 16.14–21.72 s. +The cause of this variation was not established; a passing or faster run does +not explain a slower one. The selector's supported benefit is reduced duplicate +delivery, with its full task costs retained here. + +Full resource reply bytes fall 680,188 → 506,481 for NewPipe, +616,841 → 463,588 for ApiDemos and 38,725 → 34,199 for Settings. + +Offline `tiktoken` 0.12.0 / `cl100k_base` estimates count one complete catalog +page-array plus every call name/argument/reply, including inspection and close. +Full replies include both textual and structured copies. Text-only replies are +also counted separately. These are serialization estimates, not actual model +usage; initialization/framing, prompts, client filtering/rendering/replay and +continuations are unmeasured. + +| Target | Text reply tokens | Whole raw transport tokens | Whole estimated reduction | +| -------- | ----------------: | -------------------------: | ------------------------: | +| newpipe | 73,661 → 55,797 | 962,330 → 924,352 | 3.95% | +| apidemos | 65,693 → 49,162 | 948,591 → 913,693 | 3.68% | +| settings | 4,387 → 3,942 | 814,859 → 814,029 | 0.10% | + +Discovery still has 207 tools; only `decode_android_resources` changes. +The added schema costs 557 catalog bytes / 113 estimated catalog tokens +(805,217 → 805,330). Raw discovery dominates this transport estimate; it does +not establish what a client supplies to its model. Smaller replies and these +estimates do not prove an actual agent context or investigation advantage. + +## Verification, attempts and limits + +- 94 source tests: provider/resource projection/service, including alias reads, + aggregate output exhaustion, malformed/physical failures, partial facts, + cancellation and cleanup. The table-only capacity, single-table provider + and CLI cases fail on the old implementation (three selected failures, + 82 unrelated tests skipped). +- Nine compiled CLI/MCP tests: schema conversion/advertisement, option forwarding, + Evidence parameters, legacy locale grammar and existing boolean choices. +- 36 completed real MCP tasks and three real CLI tasks. Nine exact projection + oracle pairs; three legacy full-reply comparisons; alias/missing, single-table + and omitted-string cases pass. CLI normalized data, subjects and Evidence IDs + match MCP exactly on all three APKs. +- `check:fast`, `build:cached` and `verify:test-discovery` passed; the last + discovered all 1,579 test files exactly once. `npm run check` and `npm run docs:check` also passed. +- An authored test group initially exceeded the 150-line lint limit (153). + That gate failed after 189.31 s / 186.19 CPU s, peak 4,487,798,784 bytes; + build/compiled checks did not run in that attempt. The capacity test was moved + out of that group, and the complete corrected gate passed after 343.97 s / + 338.67 CPU s, peak 4,311,293,952 bytes. No rule was disabled. +- `projection-newpipe-after-2` was refused before scope/payload creation because + host availability was below 16 GiB; a following poll showed about 10.5 GiB. + It has no payload timing/counters and is not a completed measurement. The + refusal stays recorded; a fresh whole repetition-4 pair ran after recovery. + No existing receipts were overwritten and resource thresholds were unchanged. + +Raw transcripts, native outputs, intermediate failures and per-request workspace +arguments remain in ignored local audit storage; the committed JSON is a curated +summary. Small Settings resources and negative time results are retained. +Actual models, APK execution, other providers/platforms and general complex +software effectiveness were not verified by this checkpoint. diff --git a/src/apktool/ApktoolProvider.test.ts b/src/apktool/ApktoolProvider.test.ts index 762bf40f08..4d3d968f95 100644 --- a/src/apktool/ApktoolProvider.test.ts +++ b/src/apktool/ApktoolProvider.test.ts @@ -169,6 +169,38 @@ const apkFixture = async ( }; }; +it("returns table-only facts for a single selected primary table", async () => { + const { command, root } = await writeApktoolStub(decodeStub()); + const apk = await apkFixture(root); + const provider = providerOver(command); + onTestFinished(() => provider.close()); + const outcome = await new ApktoolResourceAnalysisService(provider).execute( + "decode_android_resources", + { path: apk.path, string_tables_only: true }, + ); + if (!outcome.ok) throw outcome.error; + expect(outcome.value).toMatchObject({ + parameters: { path: apk.path, string_tables_only: true }, + subject: { digest: { sha256: apk.sha256 } }, + normalized_result: { + strings: [], + string_tables: [ + { + locale: null, + status: "present", + strings: [ + { name: "api_endpoint", value: "https://api.example.com/v1" }, + { name: "app_name", value: "ApktoolProbe" }, + ], + total_count: 2, + unparsed_count: 0, + coverage: "complete", + }, + ], + }, + }); +}); + it.each([ [false, false], [true, false], diff --git a/src/apktool/ApktoolProvider.ts b/src/apktool/ApktoolProvider.ts index 7fe6fe8ca7..1bccd050e8 100644 --- a/src/apktool/ApktoolProvider.ts +++ b/src/apktool/ApktoolProvider.ts @@ -660,7 +660,7 @@ export class ApktoolProvider { : "complete"; completedDecode.strings = [...projectedStrings.strings]; - if (input.locales !== undefined) + if (input.locales !== undefined || input.string_tables_only === true) completedDecode.string_tables = [...projectedStrings.tables]; completedDecode.coverage = coverage; if (!projection.ok) throw projection.error.cause; diff --git a/src/apktool/ApktoolStringTables.test.ts b/src/apktool/ApktoolStringTables.test.ts index 5800585932..c77b0891db 100644 --- a/src/apktool/ApktoolStringTables.test.ts +++ b/src/apktool/ApktoolStringTables.test.ts @@ -18,30 +18,66 @@ const textRead = (text: string) => ({ sourceBytes: Buffer.byteLength(text, "utf8"), }); -describe("physical Apktool string facts", () => { - it("reads one physical table for two caller-selected aliases", async () => { - const paths: string[] = []; - const outcome = await projectApktoolStringTables( - { - async readText(path) { - paths.push(path); - return textRead(xml(1)); - }, +it("charges table-only output without reserving a duplicate primary copy", async () => { + const paths: string[] = []; + const outcome = await projectApktoolStringTables( + { + async readText(path) { + paths.push(path); + return textRead(xml(MAX_STRINGS)); }, - "decoded", - { include_strings: true, locale: "pt-BR", locales: ["pt-rBR"] }, - ); - if (!outcome.ok) throw outcome.error.cause; - const result = outcome.value; - expect(paths).toEqual([ - join("decoded", "res", "values-pt-rBR", "strings.xml"), - ]); - expect(result.tables.map((table) => table.locale)).toEqual([ - "pt-BR", - "pt-rBR", - ]); - expect(result.tables.map((table) => table.total_count)).toEqual([1, 1]); - }); + }, + "decoded", + { + include_strings: true, + locales: ["de", "es", "it", "fr"], + string_tables_only: true, + }, + ); + if (!outcome.ok) throw outcome.error.cause; + expect(paths).toHaveLength(5); + expect(outcome.value.strings).toEqual([]); + expect(outcome.value.tables.map((table) => table.status)).toEqual( + Array.from({ length: 5 }, () => "present"), + ); + expect( + outcome.value.tables.reduce((sum, table) => sum + table.strings.length, 0), + ).toBe(MAX_AGGREGATE_STRINGS); + expect(outcome.value.coverage).toBe("complete"); +}); + +describe("physical Apktool string facts", () => { + it.each([false, true])( + "reads one physical table for two caller-selected aliases (table-only: %s)", + async (tablesOnly) => { + const paths: string[] = []; + const outcome = await projectApktoolStringTables( + { + async readText(path) { + paths.push(path); + return textRead(xml(1)); + }, + }, + "decoded", + { + include_strings: true, + locale: "pt-BR", + locales: ["pt-rBR"], + string_tables_only: tablesOnly, + }, + ); + if (!outcome.ok) throw outcome.error.cause; + const result = outcome.value; + expect(paths).toEqual([ + join("decoded", "res", "values-pt-rBR", "strings.xml"), + ]); + expect(result.tables.map((table) => table.locale)).toEqual([ + "pt-BR", + "pt-rBR", + ]); + expect(result.tables.map((table) => table.total_count)).toEqual([1, 1]); + }, + ); it("counts complete source entries beyond the retained table prefix", async () => { const outcome = await projectApktoolStringTables( @@ -138,50 +174,71 @@ describe("physical Apktool string facts", () => { }); describe("Apktool string projection admission", () => { - it("retains completed tables when cancellation arrives before the next selection", async () => { - const controller = new AbortController(); - const reason = { selected: "caller" }; - const paths: string[] = []; - const result = await projectApktoolStringTables( - { - async readText(path) { - paths.push(path); - controller.abort(reason); - return textRead(xml(1)); + it.each([false, true])( + "retains completed tables when cancellation arrives before the next selection (table-only: %s)", + async (tablesOnly) => { + const controller = new AbortController(); + const reason = { selected: "caller" }; + const paths: string[] = []; + const result = await projectApktoolStringTables( + { + async readText(path) { + paths.push(path); + controller.abort(reason); + return textRead(xml(1)); + }, }, - }, - "decoded", - { include_strings: true, locales: ["de", "fr"] }, - controller.signal, - ); - if (result.ok) throw new Error("Expected cancellation"); - expect(result.error.cause).toBeInstanceOf(AnalysisCancelledError); - expect(result.error.cause).toHaveProperty("cause", reason); - expect(paths).toHaveLength(1); - expect(result.error.partial).toMatchObject({ - coverage: "partial", - tables: [{ locale: null, total_count: 1 }], - }); - expect(result.error.partial.limitations).toContain( - 'String projection stopped at locale "de"; this selection and 1 remaining selections were not projected', - ); - }); + "decoded", + { + include_strings: true, + locales: ["de", "fr"], + string_tables_only: tablesOnly, + }, + controller.signal, + ); + if (result.ok) throw new Error("Expected cancellation"); + expect(result.error.cause).toBeInstanceOf(AnalysisCancelledError); + expect(result.error.cause).toHaveProperty("cause", reason); + expect(paths).toHaveLength(1); + expect(result.error.partial).toMatchObject({ + coverage: "partial", + tables: [{ locale: null, total_count: 1 }], + }); + expect(result.error.partial.strings).toHaveLength(tablesOnly ? 0 : 1); + expect(result.error.partial.limitations).toContain( + 'String projection stopped at locale "de"; this selection and 1 remaining selections were not projected', + ); + }, + ); - it("honors omitted strings without reading any selected table", async () => { - const outcome = await projectApktoolStringTables( - { - async readText() { - throw new Error("Unexpected read"); + it.each([false, true])( + "honors omitted strings without reading any selected table (table-only: %s)", + async (tablesOnly) => { + const outcome = await projectApktoolStringTables( + { + async readText() { + throw new Error("Unexpected read"); + }, }, - }, - "decoded", - { include_strings: false, locale: "de", locales: ["fr"] }, - ); - expect(outcome).toEqual({ - ok: true, - value: { strings: [], tables: [], limitations: [], coverage: "complete" }, - }); - }); + "decoded", + { + include_strings: false, + locale: "de", + locales: ["fr"], + string_tables_only: tablesOnly, + }, + ); + expect(outcome).toEqual({ + ok: true, + value: { + strings: [], + tables: [], + limitations: [], + coverage: "complete", + }, + }); + }, + ); it("preserves the exact physical read failure", async () => { const cause = new Error("Physical read and close failed"); diff --git a/src/apktool/ApktoolStringTables.ts b/src/apktool/ApktoolStringTables.ts index d9c8fb0a28..779277f937 100644 --- a/src/apktool/ApktoolStringTables.ts +++ b/src/apktool/ApktoolStringTables.ts @@ -19,7 +19,7 @@ import type { ApktoolWorkspace } from "./ApktoolWorkspace.js"; const STRINGS_XML_MAX_BYTES = 8 * 1024 * 1024; type Selection = Pick< Extract["input"], - "include_strings" | "locale" | "locales" + "include_strings" | "locale" | "locales" | "string_tables_only" >; type PresentTable = { readonly status: "present"; @@ -152,7 +152,8 @@ export const projectApktoolStringTables = async ( "Aggregate string table projection stopped due to resource limits", ); return { - strings: tables[0]?.strings ?? [], + strings: + input.string_tables_only === true ? [] : (tables[0]?.strings ?? []), tables, limitations: [...limitations], coverage: tables.some((table) => table.coverage === "partial") @@ -223,9 +224,14 @@ export const projectApktoolStringTables = async ( ); continue; } - // Batch output includes the primary strings twice, in the legacy field and - // in string_tables. Charge that representation before selecting entries. - const copies = index === 0 && input.locales !== undefined ? 2 : 1; + // The default batch shape repeats primary entries in strings and tables; + // table-only output charges one copy. Account before selecting entries. + const copies = + index === 0 && + input.locales !== undefined && + input.string_tables_only !== true + ? 2 + : 1; const remaining = Math.max(0, MAX_AGGREGATE_STRINGS - outputEntries); const selected = fact.entries.slice(0, Math.floor(remaining / copies)); outputEntries += selected.length * copies; diff --git a/src/application/apktool/ApktoolResourceAnalysisService.test.ts b/src/application/apktool/ApktoolResourceAnalysisService.test.ts index ab801294af..97088fb671 100644 --- a/src/application/apktool/ApktoolResourceAnalysisService.test.ts +++ b/src/application/apktool/ApktoolResourceAnalysisService.test.ts @@ -32,6 +32,7 @@ const refusedPort: ApktoolResourceAnalysisPort = { it.each([ [{ path: "/targets/app.apk", include_strings: "yes" }], + [{ path: "/targets/app.apk", string_tables_only: "yes" }], [{ path: "/targets/app.apk", locale: "not a locale" }], [{ path: "/targets/app.apk", locales: ["not a locale"] }], [{ path: "/targets/app.apk", locales: [] }], diff --git a/src/cli/apktoolCommands.ts b/src/cli/apktoolCommands.ts index fb7e4c7c52..43b65f552f 100644 --- a/src/cli/apktoolCommands.ts +++ b/src/cli/apktoolCommands.ts @@ -55,6 +55,8 @@ export const registerApktoolCommands = ( // `b+zh+Hans+CN` form at the CLI boundary. options: z.object({ locale: apktoolInputSchemas.decode_android_resources.shape.locale, + "string-tables-only": + apktoolInputSchemas.decode_android_resources.shape.string_tables_only, locales: apktoolInputSchemas.decode_android_resources.shape.locales.describe( "Repeat to project multiple localized string tables, e.g. --locales de --locales pt-BR", @@ -74,6 +76,9 @@ export const registerApktoolCommands = ( execute(CLI_COMMANDS.decodeAndroidResources, "decode_android_resources", { path: args.path, include_strings: options.strings, + ...(options["string-tables-only"] === undefined + ? {} + : { string_tables_only: options["string-tables-only"] }), ...(options.locale === undefined ? {} : { locale: options.locale }), ...(options.locales === undefined ? {} : { locales: options.locales }), }), diff --git a/src/contracts/apktool/apktoolToolContracts.ts b/src/contracts/apktool/apktoolToolContracts.ts index d9dc5c6487..89af3ed92c 100644 --- a/src/contracts/apktool/apktoolToolContracts.ts +++ b/src/contracts/apktool/apktoolToolContracts.ts @@ -39,7 +39,11 @@ export const APKTOOL_TOOL_CONTRACTS = [ }, { title: "Decode multiple locale string tables in one pass", - input: { path: "/targets/Example.apk", locales: ["de", "fr"] }, + input: { + path: "/targets/Example.apk", + locales: ["de", "fr"], + string_tables_only: true, + }, }, ], }, diff --git a/src/domain/apktool/apktoolResourceAnalysis.ts b/src/domain/apktool/apktoolResourceAnalysis.ts index 9387593b8b..39a236c498 100644 --- a/src/domain/apktool/apktoolResourceAnalysis.ts +++ b/src/domain/apktool/apktoolResourceAnalysis.ts @@ -69,6 +69,12 @@ export const apktoolInputSchemas = { .describe( `Project res/values/strings.xml entries (bounded to ${String(MAX_STRINGS)} entries)`, ), + string_tables_only: z + .boolean() + .optional() + .describe( + "Return selected strings only in string_tables, leaving top-level strings empty. Omit to preserve the primary strings field.", + ), locale: androidLocaleQualifierSchema .optional() .describe( @@ -178,15 +184,24 @@ export const apktoolResultSchemas = { package_name: z.string().nullable(), }), manifest: z.string().nullable(), - strings: z.array( - z.strictObject({ - name: z.string().min(1), - value: z.string(), - }), - ), + strings: z + .array( + z.strictObject({ + name: z.string().min(1), + value: z.string(), + }), + ) + .describe( + "Primary string entries; empty when include_strings is false or string_tables_only is true. An unrequested field does not establish an empty table.", + ), locale: z.string().nullable(), locales: z.array(z.string().min(1)), - string_tables: z.array(stringTableSchema).optional(), + string_tables: z + .array(stringTableSchema) + .optional() + .describe( + "Selected table facts, included when locales is supplied or string_tables_only is true", + ), decoded_file_count: z.number().int().nonnegative(), coverage: z.enum(["complete", "partial"]), }), diff --git a/tests/boundary/cli/apktoolLocaleOption.test.ts b/tests/boundary/cli/apktoolLocaleOption.test.ts index 911c46944d..6b10888427 100644 --- a/tests/boundary/cli/apktoolLocaleOption.test.ts +++ b/tests/boundary/cli/apktoolLocaleOption.test.ts @@ -60,6 +60,29 @@ const OWNER_ADMITTED_LOCALES = [ "b+fil+Latn+419+ABCDEFGH", ] as const; +it("forwards the table-only string choice through the CLI", async () => { + const result = await invoke([ + "decode-android-resources", + "/targets/app.apk", + "--string-tables-only", + "--locales", + "de", + "--json", + ]); + expect(result.exitCode, result.stdout).toBe(0); + expect(result.requests).toEqual([ + { + operation: "decode_android_resources", + input: { + path: "/targets/app.apk", + include_strings: true, + locales: ["de"], + string_tables_only: true, + }, + }, + ]); +}); + it("forwards every locale the apktool input owner admits", async () => { for (const locale of OWNER_ADMITTED_LOCALES) { const result = await invoke([ diff --git a/tests/boundary/mcp/apktoolMcp.test.ts b/tests/boundary/mcp/apktoolMcp.test.ts index a261288e95..f3894782a9 100644 --- a/tests/boundary/mcp/apktoolMcp.test.ts +++ b/tests/boundary/mcp/apktoolMcp.test.ts @@ -63,14 +63,17 @@ const results: Readonly> = { it("advertises exact valid Apktool schemas and records inline evidence through MCP", async () => { const requestedLocales: (string | undefined)[] = []; + const tableOnlySelections: (boolean | undefined)[] = []; const provider: ApktoolResourceAnalysisPort = { async inspectAvailability() { return { status: "available", code: null, reason: null, diagnostics: {} }; }, async close() {}, async execute(request) { - if (request.operation === "decode_android_resources") + if (request.operation === "decode_android_resources") { requestedLocales.push(request.input.locale); + tableOnlySelections.push(request.input.string_tables_only); + } return ok(createAnalysisExecution(results[request.operation], identity)); }, }; @@ -138,7 +141,16 @@ it("advertises exact valid Apktool schemas and records inline evidence through M const batched = await client.callTool({ name: "decode_android_resources", - arguments: { path: "/targets/probe.apk", locales: ["de"] }, + arguments: { + path: "/targets/probe.apk", + locales: ["de"], + string_tables_only: true, + }, }); expect(batched.isError).not.toBe(true); + expect(parseEvidence(batched.structuredContent).parameters).toMatchObject({ + locales: ["de"], + string_tables_only: true, + }); + expect(tableOnlySelections).toEqual([undefined, undefined, undefined, true]); });