From e0ef1971db5013aa80e0681bf1a2e57c7d00602b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Kwas=CC=81niewski?= Date: Fri, 9 Oct 2026 09:39:41 +0200 Subject: [PATCH 1/2] ci(mobile): re-record the mobile benchmark, strict replay on Android, drop orphan web entries The 39 mobile recordings dated from Sep 23-24, before the Oct 3 replay policy bump (#732) and the key change in #929, so every CI run missed all of them and called the model. Both platforms are re-recorded on a Mac (iPhone 17 Pro on iOS 26.5, Pixel 7 API 36). The Android agentic job runs with --strict-cache like the web one; iOS stays lenient until the three recordings named in the README replay on a simulator. The web benchmark cache kept 30 entries under the pre-#929 key next to their re-keyed twins; the orphans go. --- .github/workflows/mobile.yml | 12 +- ...32a1f2f868c58c279be36fb916f0f090cb957.json | 259 ++++++++++++++++++ ...ae7b9bcc1067e559fa6b20dc7f93e8fdc6845.json | 63 ----- ...d5d5aa97a785e0568a1d9a54d2308e315537a.json | 52 ---- ...a3f8b75d84ac6e41249974cea59f66d75f3bd.json | 105 +++++++ ...87393ed026c77b2b4bd43a752d948010a023a.json | 84 ++++++ ...12028bc5ba3fa6b7f3d31a238f29b56debe6.json} | 104 ++++--- ...e071dc9aebcbb0ea9c48933e60a0649f6e16.json} | 40 ++- ...90c479fc241215144011d31289afa9f0b262a.json | 80 ------ ...562e5f6353261a6862f3e633e026a794154e5.json | 57 ---- ...050eaf246b7b493d693bb6675c9d58b7dd91d.json | 81 ++++++ ...9012321bdd0b60f045326fc528170b1006797.json | 54 ---- ...36ce53823ae665c1c7b4eef232300ee92ec28.json | 143 ++++++++++ ...c369422326602913c90bcdfa33c3e9a5deb33.json | 101 ------- ...2e7618aafaec97ec4e020944d5ef2a0fb2b2.json} | 40 ++- ...6aada085655ab250e434a614d0a96b1b5a41a.json | 121 ++++++++ ...188cbbfb89c56012342ed59d7a7b4dcbb635f.json | 148 ++++++++++ ...4131bed51f932dfc5411fbb542e3a5d6cf7be.json | 62 ----- ...5e4fd7d597831d893c541e09845ed1e0d2a9.json} | 51 +++- ...2e6217704e0d5fe3574778155e7d750a9948.json} | 38 ++- ...74b52e8bf086122ab6f0154648ec1ffa6990f.json | 78 ------ ...5cc1e425f5f592d9c90fcddb96ab4163ae50.json} | 53 +++- ...0571d68d6802307a44d517f6f6f2fe103517b.json | 66 ----- ...c3dcaf93e0e020ed29026cd9305e9587ed7b5.json | 54 ---- ...6d7f49c27d8b7c9b59f6a470c54f8960a10b1.json | 127 +++++++++ ...6fe7f7428189559e7bde4182f3880ad96cacf.json | 98 +++++++ ...f798eb38509591c16fa8b7e42be604c0a141f.json | 78 ------ ...6ea1ed445e1175357020711139c55c755d169.json | 120 ++++++++ ...5326e142cc809c2fb258e537eab1bb190e56b.json | 92 +++++++ ...2c8725676bf14ec1ef679807a7e7a77f5e526.json | 53 ---- ...3b8fdd9e7d1ffb9752abae35a6464e4002a3.json} | 97 +++++-- ...b45bf720de999852e014e808c8eb717ace167.json | 167 +++++++++++ ...0397dac07e3679d0588a0bba7d574fd04ce9.json} | 121 ++++---- ...9d40de4dcf5f348760d6fdf95528b1b8870c1.json | 73 ----- ...a95a09e4d801ff679df37b16614cc3f67435f.json | 101 +++++++ ...62ae0b989681df802e0bc3d6a547f2e3a6cd3.json | 52 ---- ...a9f2b9910e172a960ce46d9a767f71e7da441.json | 135 --------- ...029524ac4731ab26c41e350d54656b9641aea.json | 39 --- ...d5d6fd3047839e79a2861ae42f7e65aa75085.json | 122 +++++++++ ...f0b6f20389d8df8d5bd23acb5dd8173ac431f.json | 46 ---- ...4986769a88c37424dc22556c2d9d74133309a.json | 81 ------ ...70aa86a01fbb224794ca75972e219b5215e8.json} | 54 +++- ...576d12f268717ddaf2b3b757bc52552aa633.json} | 31 ++- ...85c1605082e05990a15b7ea413123b981f08d.json | 86 ++++++ ...cd92e30ad3577e6f01351a62ef5f797bf177b.json | 58 ---- ...e56e1c371bdc46f9c1398f3fb3bfdd496453.json} | 40 ++- ...b7f9c167b16ed4b3529bcfb41a8ddfc00c882.json | 92 +++++++ ...caece0e932653161ff158cac41a4a816eea39.json | 101 +++++++ ...395a9efd45c3ce815d8fdfc695293c1f94228.json | 74 +++++ ...c826a605c2192f8e2e5d2ceaa563cbde4236.json} | 63 +++-- ...96722580d13ec6b696e6161ff64d113e9be1f.json | 131 +++++++++ ...9f78f209e4bc4be0a4245d067651a80ee4a1.json} | 64 ++--- ...86df9c679a7e4cb8d69ce679bb2632be623f1.json | 103 +++++++ ...83aa3c2137125b25974b9015774f92c9c1343.json | 134 +++++++++ ...8806f7fb143a4d1d14bb7133008cfdeed82c.json} | 55 +++- ...58ab463e1e83078fe3258d5caa8611f434687.json | 50 ---- ...6b5b77d09afb454a39ad8ae1f272500e2599.json} | 27 +- ...c6788283161ad77b1a4de6c0e4463685692d.json} | 32 ++- ...ca28c63045d028f353a812a2e83783a291ce.json} | 39 ++- ...65262b5325a879eb125f235e8d60dadd53027.json | 135 --------- ...1e4c078302faf5793fb0bb45430970301d06d.json | 113 ++++++++ ...e11673498a119cb2ef0da68c08ab6834873ec.json | 81 ++++++ ...4edf04464b063d1ca3645464522d47d79c224.json | 102 +++++++ ...d51a6b9230ece2236b48d11706b6c0b9e99da.json | 42 --- apps/mobile-benchmark/README.md | 29 +- apps/mobile-benchmark/e2e.agent.config.ts | 4 +- ...975978f3ed334fc1721c831c3c80d44ed64f8.json | 48 ---- ...d8ec2c2ab4c75cf4046c37dbc56a91dc60f5a.json | 80 ------ ...2289914330f30853f561320d83bb2e33c89ca.json | 57 ---- ...57c2462db5f3304bd39cf2d3bd6537d599257.json | 105 ------- ...d7a13e83aa083a9fc3e9de0e5a993a87671cb.json | 77 ------ ...40b5ad564ce89c4157e7ae1c57cbab8a46e33.json | 45 --- ...30f48f0ec14961e0db32d7d8a4593d0f7a332.json | 92 ------- ...5f791cd9f8eade74dca317c27c5ae0bff604d.json | 90 ------ ...c056898debbc18c99e387d00326100d93e56a.json | 60 ---- ...dcb1d85c94969e9d844a76404e918a66792f0.json | 70 ----- ...4935159d6d15bb4a6d429a24096c811c98faa.json | 70 ----- ...ecaf3dcf2358bbffc81b506ea772fd3b5ab82.json | 72 ----- ...798e91004c316877af86072a32d3dac8124fb.json | 64 ----- ...4b0241e3936cc99cd9abbdd8fad3354e076ed.json | 58 ---- ...03906789ff147b31282d84b3a252e73dfa5b3.json | 96 ------- ...97f260ca0f2688efd78bf5aa7f89a297ee2ec.json | 79 ------ ...438466afe0917ad3688e5f28357be416115ed.json | 69 ----- ...98e3896b847d0e533d764754c1ce81a648b4b.json | 69 ----- ...0c43cebe359b40233f617dd07ab14a70f6ea8.json | 109 -------- ...f92bc39908b3010f0bf5dfb96509664157f91.json | 89 ------ ...7e6f6d4410bf15e585482dc6d2eebb38bd765.json | 149 ---------- ...0546c295b4dd4b461303b0ae3a85306591336.json | 61 ----- ...d67b37b96d611b2919d758b2640bc7a7cb6f9.json | 51 ---- ...68bc2fbab0b297deebec598d8d06456394613.json | 74 ----- ...dfed5f75a657ed95c7d542a00cdd2e627eb98.json | 98 ------- ...f35759d1dd8bd92dd345d4bad7e2b7f3844b6.json | 66 ----- ...e40a0048f3f10a922221e3a8519d7fc281b5c.json | 125 --------- ...cfab306e08480e8a443b1a7f775d0ae3254dd.json | 66 ----- ...732fccd400ba7ac51c8c94c7648a77d53a0dd.json | 68 ----- ...38a0d4c07fd433f28f771853938e3939de1cc.json | 78 ------ 96 files changed, 3509 insertions(+), 4114 deletions(-) create mode 100644 apps/mobile-benchmark/.e2e/cache/034b8cb386ac765f9954ed6bf1d32a1f2f868c58c279be36fb916f0f090cb957.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/0e691404e147a4cd7dad695ca7bae7b9bcc1067e559fa6b20dc7f93e8fdc6845.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/0f3ec39b5cc0727bcc66803a7f9d5d5aa97a785e0568a1d9a54d2308e315537a.json create mode 100644 apps/mobile-benchmark/.e2e/cache/1d0ec270805299b99155c5403b3a3f8b75d84ac6e41249974cea59f66d75f3bd.json create mode 100644 apps/mobile-benchmark/.e2e/cache/219cb049fa8d19a6149051ef9c587393ed026c77b2b4bd43a752d948010a023a.json rename apps/mobile-benchmark/.e2e/cache/{c971963defc590db3c516e2c9ee77864c3da7f62efd9d6592aa716fd6fcd7dac.json => 21c26ef65b43c8ca1338372eea1412028bc5ba3fa6b7f3d31a238f29b56debe6.json} (59%) rename apps/mobile-benchmark/.e2e/cache/{610353f93fe3c27644c6b4406df2e6261cab8a1b4ecc167aea56f0533e6f3287.json => 286f4c460f10ea043ed72d4b4109e071dc9aebcbb0ea9c48933e60a0649f6e16.json} (57%) delete mode 100644 apps/mobile-benchmark/.e2e/cache/2ad51fd1d737ce5523237eab01e90c479fc241215144011d31289afa9f0b262a.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/2f8ed50d6d4e803376100f66c14562e5f6353261a6862f3e633e026a794154e5.json create mode 100644 apps/mobile-benchmark/.e2e/cache/36d62803cb7ed0d77eb6d752b0d050eaf246b7b493d693bb6675c9d58b7dd91d.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/456399a01e8a1e090bf0b92daba9012321bdd0b60f045326fc528170b1006797.json create mode 100644 apps/mobile-benchmark/.e2e/cache/465441030d9460122dc8198d48d36ce53823ae665c1c7b4eef232300ee92ec28.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/4c5e8daf0536daef065c22b4290c369422326602913c90bcdfa33c3e9a5deb33.json rename apps/mobile-benchmark/.e2e/cache/{84ae4032ac851b0fbf4b19b65314d11364aadebee24bc991d8edd34e98d6eb39.json => 4c9b8d6da6cd0c38a5341e8bd7412e7618aafaec97ec4e020944d5ef2a0fb2b2.json} (54%) create mode 100644 apps/mobile-benchmark/.e2e/cache/4e85a1a62b850f53a939103b6446aada085655ab250e434a614d0a96b1b5a41a.json create mode 100644 apps/mobile-benchmark/.e2e/cache/54cafd3addc2fab4dbdf705595e188cbbfb89c56012342ed59d7a7b4dcbb635f.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/560999ea1f0b4a0b2f79b2be8724131bed51f932dfc5411fbb542e3a5d6cf7be.json rename apps/mobile-benchmark/.e2e/cache/{32e9fb43c21f4e271a19b88c5929b6d24c6b55b72859be767bd6e76c1a899f69.json => 5e4707ace3e9b4c2f3c6369c65e05e4fd7d597831d893c541e09845ed1e0d2a9.json} (57%) rename apps/mobile-benchmark/.e2e/cache/{f3b5611a11c02bc39f86ce6d4dcff4e6abcefe43ce2eb48f3f01b9ca569596cf.json => 5eff18f221aea74f513d1a35e0d22e6217704e0d5fe3574778155e7d750a9948.json} (53%) delete mode 100644 apps/mobile-benchmark/.e2e/cache/5fcf5b6f88c9d7d375b510b07c274b52e8bf086122ab6f0154648ec1ffa6990f.json rename apps/mobile-benchmark/.e2e/cache/{d67251f1e632320bc4cf4132c3e7f44689f143d39875aa942d397b666973174d.json => 688a148d704ae364e07e871685ee5cc1e425f5f592d9c90fcddb96ab4163ae50.json} (59%) delete mode 100644 apps/mobile-benchmark/.e2e/cache/69bff66e920fa63c0bb863197990571d68d6802307a44d517f6f6f2fe103517b.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/6bae7c55e24e22c38b21ab48d83c3dcaf93e0e020ed29026cd9305e9587ed7b5.json create mode 100644 apps/mobile-benchmark/.e2e/cache/6d77b84d705dbf552d862188b0c6d7f49c27d8b7c9b59f6a470c54f8960a10b1.json create mode 100644 apps/mobile-benchmark/.e2e/cache/781e4367b42ad0ada60347c98bf6fe7f7428189559e7bde4182f3880ad96cacf.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/7dcac730693372dc6ecaa5cdc3bf798eb38509591c16fa8b7e42be604c0a141f.json create mode 100644 apps/mobile-benchmark/.e2e/cache/7df0802b8a1fd00e85fc85537606ea1ed445e1175357020711139c55c755d169.json create mode 100644 apps/mobile-benchmark/.e2e/cache/82c7cc7405281990e05ac47cd6a5326e142cc809c2fb258e537eab1bb190e56b.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/8b852d11e8d5b2bf024ce13aa412c8725676bf14ec1ef679807a7e7a77f5e526.json rename apps/mobile-benchmark/.e2e/cache/{d99569e0b0059dbe47597104045e8e92885c553857ec4e6c0218ea6271ba8b36.json => 8c77217a25baacc933adac4c87bd3b8fdd9e7d1ffb9752abae35a6464e4002a3.json} (56%) create mode 100644 apps/mobile-benchmark/.e2e/cache/95280d940d6f212bd91962b84aeb45bf720de999852e014e808c8eb717ace167.json rename apps/mobile-benchmark/.e2e/cache/{67cec32b5f2b9b2df80d39c92b42c11726ec1f10c181523df4b0dfa4d7769c54.json => 96dbe50d1d0e8ea20edae76d25c00397dac07e3679d0588a0bba7d574fd04ce9.json} (61%) delete mode 100644 apps/mobile-benchmark/.e2e/cache/97c265e81517fc24b666e8fe45b9d40de4dcf5f348760d6fdf95528b1b8870c1.json create mode 100644 apps/mobile-benchmark/.e2e/cache/a5de499f27a44803c5735c66c52a95a09e4d801ff679df37b16614cc3f67435f.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/a9edb5ea3fab3f25768a94e11c962ae0b989681df802e0bc3d6a547f2e3a6cd3.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/af0d06bce32029b69410971e786a9f2b9910e172a960ce46d9a767f71e7da441.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/af836a015b0e2835727c1487567029524ac4731ab26c41e350d54656b9641aea.json create mode 100644 apps/mobile-benchmark/.e2e/cache/b0f2667c3389282144384dd4387d5d6fd3047839e79a2861ae42f7e65aa75085.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/b949858068f8bf20c132506913df0b6f20389d8df8d5bd23acb5dd8173ac431f.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/ba44313bb2be29f83c78e8359d44986769a88c37424dc22556c2d9d74133309a.json rename apps/mobile-benchmark/.e2e/cache/{fc56706b3af952c5173b4ca4fb5d84f6cc07779dc92871500c5fc407a8670950.json => bac4ef2c2e541ff451b7cacb5b4470aa86a01fbb224794ca75972e219b5215e8.json} (67%) rename apps/mobile-benchmark/.e2e/cache/{11c3c1a5a4a3edf340c43e45a95fe4b2c36fc989807e28ebd958600e4ed4b1fe.json => be480e468e8e1ce9d711a913a342576d12f268717ddaf2b3b757bc52552aa633.json} (59%) create mode 100644 apps/mobile-benchmark/.e2e/cache/c0d68bc778f40b67bf2783588be85c1605082e05990a15b7ea413123b981f08d.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/c10de289ca5fcd0b25a8687ba60cd92e30ad3577e6f01351a62ef5f797bf177b.json rename apps/mobile-benchmark/.e2e/cache/{ce35940e611918c89d0668c4fd4b14bb5765a06a4df18e0ac3523ca5800398b0.json => c31dbe874e4e3538e48ba58a9bdde56e1c371bdc46f9c1398f3fb3bfdd496453.json} (55%) create mode 100644 apps/mobile-benchmark/.e2e/cache/c63e3ef74a352a6ffee15ef0644b7f9c167b16ed4b3529bcfb41a8ddfc00c882.json create mode 100644 apps/mobile-benchmark/.e2e/cache/c7263c6939a414d58611e39e71acaece0e932653161ff158cac41a4a816eea39.json create mode 100644 apps/mobile-benchmark/.e2e/cache/c88b3e2074686fa95172580baee395a9efd45c3ce815d8fdfc695293c1f94228.json rename apps/mobile-benchmark/.e2e/cache/{d949b5c07b297cd4b2f4cef400177115bdda1a7646a14cee88d7e193cc8568ad.json => cb2bc9d1e809fa5cf3823e7df21dc826a605c2192f8e2e5d2ceaa563cbde4236.json} (64%) create mode 100644 apps/mobile-benchmark/.e2e/cache/ccabb55841076f013cc3014d25e96722580d13ec6b696e6161ff64d113e9be1f.json rename apps/mobile-benchmark/.e2e/cache/{35ea6f3cb5324c8ba2c81599e0816065cc2828d949ae74887def5807fc13283e.json => d0fbdd88e282e0528e734ff6145a9f78f209e4bc4be0a4245d067651a80ee4a1.json} (51%) create mode 100644 apps/mobile-benchmark/.e2e/cache/d823e86a70e480e47e0706526de86df9c679a7e4cb8d69ce679bb2632be623f1.json create mode 100644 apps/mobile-benchmark/.e2e/cache/d8c30c8431ed7a42fcfdbcc80bc83aa3c2137125b25974b9015774f92c9c1343.json rename apps/mobile-benchmark/.e2e/cache/{7dd8541f5b2056caeb45468a0d56bf1555c4472b060e21c613e2440f6f554c99.json => daf3ae5af4da333cba6ca81767518806f7fb143a4d1d14bb7133008cfdeed82c.json} (60%) delete mode 100644 apps/mobile-benchmark/.e2e/cache/de403ea331ae36c5f206b2c2aad58ab463e1e83078fe3258d5caa8611f434687.json rename apps/mobile-benchmark/.e2e/cache/{2716cfbf7f04eb04a00429c19085cca1741915d50118be9c7d890c422d38a9c8.json => ebb768ec01a4afa331fc02bd84636b5b77d09afb454a39ad8ae1f272500e2599.json} (63%) rename apps/mobile-benchmark/.e2e/cache/{5a333e309950f09e9e63e3e459010800532b58e653d88264b5a463cef2f50ef8.json => efb2bb34b10aa7bf6a4684c2b2d8c6788283161ad77b1a4de6c0e4463685692d.json} (61%) rename apps/mobile-benchmark/.e2e/cache/{0fd8c32c56d959c0f82587fac927b110632fb1dfaa337a3cde99273b283e8468.json => f1e5741e33d85e38f0c7c883c04eca28c63045d028f353a812a2e83783a291ce.json} (51%) delete mode 100644 apps/mobile-benchmark/.e2e/cache/f342b204ff8b5d775c00cc160b965262b5325a879eb125f235e8d60dadd53027.json create mode 100644 apps/mobile-benchmark/.e2e/cache/f3878ab8a2c7d2d0773efabcd031e4c078302faf5793fb0bb45430970301d06d.json create mode 100644 apps/mobile-benchmark/.e2e/cache/f50a29e19e742730567db09904ee11673498a119cb2ef0da68c08ab6834873ec.json create mode 100644 apps/mobile-benchmark/.e2e/cache/faa16d90a90a8e9500916153b844edf04464b063d1ca3645464522d47d79c224.json delete mode 100644 apps/mobile-benchmark/.e2e/cache/ff08e4a2495aa10a6b54fb46e98d51a6b9230ece2236b48d11706b6c0b9e99da.json delete mode 100644 apps/web-benchmark/.e2e/cache/0b3eabe7a9e76cdccecf70f530f975978f3ed334fc1721c831c3c80d44ed64f8.json delete mode 100644 apps/web-benchmark/.e2e/cache/0bbd91d38abd392f32bcd96a4bfd8ec2c2ab4c75cf4046c37dbc56a91dc60f5a.json delete mode 100644 apps/web-benchmark/.e2e/cache/275b37b887ea0df13e54568aae02289914330f30853f561320d83bb2e33c89ca.json delete mode 100644 apps/web-benchmark/.e2e/cache/28aa547101e02fd3e5fb93b6bbc57c2462db5f3304bd39cf2d3bd6537d599257.json delete mode 100644 apps/web-benchmark/.e2e/cache/2f9c9204dd978c96aaeebeaf619d7a13e83aa083a9fc3e9de0e5a993a87671cb.json delete mode 100644 apps/web-benchmark/.e2e/cache/399574f1bd1a423fca63737672d40b5ad564ce89c4157e7ae1c57cbab8a46e33.json delete mode 100644 apps/web-benchmark/.e2e/cache/3a4434ed1517738aefeb913141930f48f0ec14961e0db32d7d8a4593d0f7a332.json delete mode 100644 apps/web-benchmark/.e2e/cache/52e387214e9f669aaf00252bcf75f791cd9f8eade74dca317c27c5ae0bff604d.json delete mode 100644 apps/web-benchmark/.e2e/cache/6574d07bc1e3694c6844214c38bc056898debbc18c99e387d00326100d93e56a.json delete mode 100644 apps/web-benchmark/.e2e/cache/65ddc0d14408317020eb9dd1405dcb1d85c94969e9d844a76404e918a66792f0.json delete mode 100644 apps/web-benchmark/.e2e/cache/6e7bb7f6a8af78cc8d266cc835e4935159d6d15bb4a6d429a24096c811c98faa.json delete mode 100644 apps/web-benchmark/.e2e/cache/76d445f32bc45f19f3d3c3d995eecaf3dcf2358bbffc81b506ea772fd3b5ab82.json delete mode 100644 apps/web-benchmark/.e2e/cache/7b82735e522db24584a675b5ee0798e91004c316877af86072a32d3dac8124fb.json delete mode 100644 apps/web-benchmark/.e2e/cache/7bd01bde4c7460a55936b3846874b0241e3936cc99cd9abbdd8fad3354e076ed.json delete mode 100644 apps/web-benchmark/.e2e/cache/7e232b3b530d1656de1f295569303906789ff147b31282d84b3a252e73dfa5b3.json delete mode 100644 apps/web-benchmark/.e2e/cache/82575ab070fc92c1fa2a9be589e97f260ca0f2688efd78bf5aa7f89a297ee2ec.json delete mode 100644 apps/web-benchmark/.e2e/cache/941e99cba65f6027f4d424bcfd2438466afe0917ad3688e5f28357be416115ed.json delete mode 100644 apps/web-benchmark/.e2e/cache/b750f781def99614a9c459dff9a98e3896b847d0e533d764754c1ce81a648b4b.json delete mode 100644 apps/web-benchmark/.e2e/cache/b7c49842b856ad200a8cc89e8940c43cebe359b40233f617dd07ab14a70f6ea8.json delete mode 100644 apps/web-benchmark/.e2e/cache/bd853b0701a46dc06106601d0d3f92bc39908b3010f0bf5dfb96509664157f91.json delete mode 100644 apps/web-benchmark/.e2e/cache/c784073ac220dec545ba09f9ebf7e6f6d4410bf15e585482dc6d2eebb38bd765.json delete mode 100644 apps/web-benchmark/.e2e/cache/cc5c029661738eadc634fea18ac0546c295b4dd4b461303b0ae3a85306591336.json delete mode 100644 apps/web-benchmark/.e2e/cache/d19edc971653ca3f5728f91aeb3d67b37b96d611b2919d758b2640bc7a7cb6f9.json delete mode 100644 apps/web-benchmark/.e2e/cache/d2d98b4ec86756f87f6083f831568bc2fbab0b297deebec598d8d06456394613.json delete mode 100644 apps/web-benchmark/.e2e/cache/d4bcec195be800ccb130aca57cbdfed5f75a657ed95c7d542a00cdd2e627eb98.json delete mode 100644 apps/web-benchmark/.e2e/cache/dc52f9d235b5d85ae85750d60ecf35759d1dd8bd92dd345d4bad7e2b7f3844b6.json delete mode 100644 apps/web-benchmark/.e2e/cache/de029a9125b87c63d6d9c6b38f6e40a0048f3f10a922221e3a8519d7fc281b5c.json delete mode 100644 apps/web-benchmark/.e2e/cache/eb4d7bf4a0721038f4d4084e5f0cfab306e08480e8a443b1a7f775d0ae3254dd.json delete mode 100644 apps/web-benchmark/.e2e/cache/eecb676bea05dee40705566c2d8732fccd400ba7ac51c8c94c7648a77d53a0dd.json delete mode 100644 apps/web-benchmark/.e2e/cache/f271b31e16a807469b6969bbf4e38a0d4c07fd433f28f771853938e3939de1cc.json diff --git a/.github/workflows/mobile.yml b/.github/workflows/mobile.yml index 02056136f..82b60d766 100644 --- a/.github/workflows/mobile.yml +++ b/.github/workflows/mobile.yml @@ -16,9 +16,13 @@ name: mobile # booted device and, when a test fails, runs the failed tests once more with # `--last-failed` before the job goes red (agent-device's runtime has episodes # of its own on a shared machine, #502). The agentic suite replays the -# recordings committed under .e2e/cache, read-only in CI, and calls the model -# for a step with none, so on a pull request it runs for this repository's -# branches only, and not for Dependabot's, whose runs get no secrets either. +# recordings committed under .e2e/cache and calls the model for a step with +# none, so on a pull request it runs for this repository's branches only, +# and not for Dependabot's, whose runs get no secrets either. Android runs +# it with `--strict-cache`, the way benchmark.yml runs the web one: a +# committed recording that no longer replays fails the job as REPLAY_STALE +# instead of spending model calls on every run. iOS replays leniently until +# the three scenarios the README names replay on a simulator. # The merge queue runs with this repository's secrets, so it runs the agentic # suite for every pull request. Both platforms' entries are recorded on a Mac # (an iPhone 17 Pro simulator, a 1080x2400 emulator) and committed with the @@ -303,7 +307,7 @@ jobs: GITHUB_TOKEN: ${{ github.token }} E2E_MOBILE_BENCHMARK_ANDROID_APP: ${{ steps.app.outputs.app-path }} E2E_MOBILE_BENCHMARK_COMMENT: android${{ matrix.suite == 'agentic' && ' agent' || '' }} - E2E_RUN: node node_modules/e2e/dist/cli/bin.js run --target android-emulator ${{ matrix.suite == 'agentic' && '--config e2e.agent.config.ts --output .e2e/agent' || '' }} + E2E_RUN: node node_modules/e2e/dist/cli/bin.js run --target android-emulator ${{ matrix.suite == 'agentic' && '--config e2e.agent.config.ts --output .e2e/agent --strict-cache' || '' }} - name: Failure screens if: ${{ failure() }} working-directory: apps/mobile-benchmark diff --git a/apps/mobile-benchmark/.e2e/cache/034b8cb386ac765f9954ed6bf1d32a1f2f868c58c279be36fb916f0f090cb957.json b/apps/mobile-benchmark/.e2e/cache/034b8cb386ac765f9954ed6bf1d32a1f2f868c58c279be36fb916f0f090cb957.json new file mode 100644 index 000000000..2b7981113 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/034b8cb386ac765f9954ed6bf1d32a1f2f868c58c279be36fb916f0f090cb957.json @@ -0,0 +1,259 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:03:49.368Z", + "payload": { + "actions": [ + { + "name": "tapAt", + "summary": "tap the point (187, 451) on other \"Use tester@tester.army / , Email, Password, SIGN IN" + }, + "fx": 0.4652, + "fy": 0.442 + } + }, + { + "name": "tool", + "summary": "tool type (run-time value)", + "derived": "pixels" + }, + { + "name": "tapAt", + "summary": "tap the point (182, 527) on other \"Use tester@tester.army / , Email, Password, SIGN IN" + }, + "fx": 0.4527, + "fy": 0.5422 + } + }, + { + "name": "tool", + "summary": "tool type (run-time value)", + "derived": "pixels" + }, + { + "name": "tapAt", + "summary": "tap the point (206, 285) on other \"Use tester@tester.army / , Email, Password, SIGN IN" + }, + "fx": 0.5124, + "fy": 0.223 + } + }, + { + "name": "tapAt", + "summary": "tap the point (182, 463) on other \"Use tester@tester.army / , Email, Password, SIGN IN" + }, + "fx": 0.4527, + "fy": 0.4578 + } + }, + { + "name": "tapAt", + "summary": "tap the point (182, 604) on key \"t\"", + "point": { + "x": 182, + "y": 604 + }, + "viewport": { + "width": 402, + "height": 874 + }, + "within": { + "target": { + "role": "key", + "name": "t" + }, + "fx": 0.4915, + "fy": 0.2593 + } + }, + { + "name": "tapAt", + "summary": "tap the point (182, 520) on other \"Use tester@tester.army / , Email, Password, SIGN IN" + }, + "fx": 0.4527, + "fy": 0.533 + } + }, + { + "name": "tapAt", + "summary": "tap the point (182, 452) on other \"Use tester@tester.army / , Email, Password, SIGN IN" + }, + "fx": 0.4527, + "fy": 0.4433 + } + }, + { + "name": "tap", + "summary": "tap key \"delete\"", + "target": { + "role": "key", + "name": "delete", + "testId": "delete", + "selector": "id=delete" + } + }, + { + "name": "tapAt", + "summary": "tap the point (182, 527) on other \"Use tester@tester.army / , Email, Password, SIGN IN" + }, + "fx": 0.4527, + "fy": 0.5422 + } + }, + { + "name": "pressKey", + "summary": "press \"Enter\" on the focused field", + "key": "Enter" + }, + { + "name": "tapAt", + "summary": "tap the point (198, 596) on other \"Use tester@tester.army / , Email, Password, SIGN IN" + }, + "fx": 0.4925, + "fy": 0.6332 + } + }, + { + "name": "tap", + "summary": "tap button \"Not Now\"", + "target": { + "role": "button", + "name": "Not Now" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Flattened%20Login", + "targetId": "ios-simulator", + "instructionDigest": "2ac57f8c28a31069613ffb9bbf8151a42ea8ceb4bb65d0ad6dcd9eea0b8a2755", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Entered the hinted email and password, submitted the login, dismissed the Save Password prompt, and verified the screen says “Logged in successfully.”", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "other", + "name": "Logged in successfully" + } + ], + "goneAnchors": [ + { + "role": "other", + "name": "Use tester@tester.army / , Email, Password, SIGN IN" + } + ], + "endWaitMs": 14199, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/0e691404e147a4cd7dad695ca7bae7b9bcc1067e559fa6b20dc7f93e8fdc6845.json b/apps/mobile-benchmark/.e2e/cache/0e691404e147a4cd7dad695ca7bae7b9bcc1067e559fa6b20dc7f93e8fdc6845.json deleted file mode 100644 index 4bf5cab7f..000000000 --- a/apps/mobile-benchmark/.e2e/cache/0e691404e147a4cd7dad695ca7bae7b9bcc1067e559fa6b20dc7f93e8fdc6845.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T17:09:09.737Z", - "payload": { - "actions": [ - { - "name": "scroll", - "summary": "scroll down on scroll-view \"Read the agreement, tap Accept terms at…\"", - "direction": "down", - "target": { - "role": "scroll-view", - "name": "Read the agreement, tap Accept terms at the bottom, then Continue." - }, - "times": 3, - "spans": 0.8673 - }, - { - "name": "tap", - "summary": "tap other \"Accept terms\"", - "target": { - "role": "other", - "name": "Accept terms", - "testId": "accept-terms", - "selector": "id=accept-terms" - } - }, - { - "name": "tap", - "summary": "tap other \"Continue\"", - "target": { - "role": "other", - "name": "Continue", - "testId": "continue-button", - "selector": "id=continue-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Sticky%20Chrome%20Target", - "targetId": "ios-simulator", - "instructionDigest": "c8995bcdba36d775696cf386be302127a69622849b54e095755e2dc908af89bd" - }, - "summary": "Scrolled to the bottom of the agreement, tapped Accept terms (which changed to “Terms accepted ✓”), then tapped Continue. The screen now displays “Terms accepted.”", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endAnchors": [ - { - "role": "other", - "name": "Terms accepted" - }, - { - "role": "text", - "name": "Terms accepted", - "testId": "success-message" - } - ], - "endWaitMs": 10296 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/0f3ec39b5cc0727bcc66803a7f9d5d5aa97a785e0568a1d9a54d2308e315537a.json b/apps/mobile-benchmark/.e2e/cache/0f3ec39b5cc0727bcc66803a7f9d5d5aa97a785e0568a1d9a54d2308e315537a.json deleted file mode 100644 index cd4f2c8ac..000000000 --- a/apps/mobile-benchmark/.e2e/cache/0f3ec39b5cc0727bcc66803a7f9d5d5aa97a785e0568a1d9a54d2308e315537a.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T17:09:58.757Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap other \"Choose photo\"", - "target": { - "role": "other", - "name": "Choose photo", - "testId": "choose-photo", - "selector": "id=choose-photo" - } - }, - { - "name": "tap", - "summary": "tap image \"Photo, September 22, 18:38\"", - "target": { - "role": "image", - "name": "Photo, September 22, 18:38", - "testId": "PXGGridLayout-Info", - "selector": "id=PXGGridLayout-Info" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Photo%20Picker", - "targetId": "ios-simulator", - "instructionDigest": "d601aab262121b364841d0fcc4785cb58a9ec678addac0d10f4a1683f22638a6" - }, - "summary": "Opened the photo library and selected the most recent photo, dated September 22 at 18:38. The scenario now confirms “Receipt attached: icon.png.” Unexpectedly, the displayed attachment name is icon.png, but the app confirms a receipt was attached.", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endAnchors": [ - { - "role": "other", - "name": "Receipt attached: icon.png" - }, - { - "role": "text", - "name": "Receipt attached: icon.png", - "testId": "success-message" - } - ], - "endWaitMs": 10773 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/1d0ec270805299b99155c5403b3a3f8b75d84ac6e41249974cea59f66d75f3bd.json b/apps/mobile-benchmark/.e2e/cache/1d0ec270805299b99155c5403b3a3f8b75d84ac6e41249974cea59f66d75f3bd.json new file mode 100644 index 000000000..fae09f277 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/1d0ec270805299b99155c5403b3a3f8b75d84ac6e41249974cea59f66d75f3bd.json @@ -0,0 +1,105 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T06:55:16.365Z", + "payload": { + "actions": [ + { + "name": "tool", + "summary": "tool swipe" + }, + { + "name": "tool", + "summary": "tool swipe" + }, + { + "name": "tool", + "summary": "tool swipe" + }, + { + "name": "tool", + "summary": "tool swipe" + }, + { + "name": "back", + "summary": "navigate back" + }, + { + "name": "tool", + "summary": "tool swipe" + }, + { + "name": "back", + "summary": "navigate back" + }, + { + "name": "scroll", + "summary": "scroll up on group \"reward-scroll\" in \"Pull down to refresh and reveal your re…\"", + "direction": "up", + "target": { + "role": "group", + "testId": "reward-scroll", + "selector": "id=reward-scroll", + "within": "Pull down to refresh and reveal your reward" + }, + "spans": 0.8821 + }, + { + "name": "tap", + "summary": "tap group \"Claim reward\"", + "target": { + "role": "group", + "name": "Claim reward", + "testId": "claim-button", + "selector": "id=claim-button" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Async%20States", + "targetId": "android-emulator", + "instructionDigest": "fdc4e142da6e03180c7a75853bbbeb788efe25a58ccefefc640c6041870b36ce", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Waited for the Async States screen to load, scrolled up on the reward area to reveal the claim button, and tapped Claim reward. The screen now confirms “Reward claimed.”", + "startPath": "dev.e2e.benchmark", + "endPath": "dev.e2e.benchmark", + "endAnchors": [ + { + "role": "text", + "name": "Reward claimed", + "testId": "success-message" + }, + { + "role": "group", + "testId": "reward-scroll" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Loading…" + }, + { + "role": "group", + "testId": "initial-loading" + } + ], + "endWaitMs": 16005, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/219cb049fa8d19a6149051ef9c587393ed026c77b2b4bd43a752d948010a023a.json b/apps/mobile-benchmark/.e2e/cache/219cb049fa8d19a6149051ef9c587393ed026c77b2b4bd43a752d948010a023a.json new file mode 100644 index 000000000..f27b34c88 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/219cb049fa8d19a6149051ef9c587393ed026c77b2b4bd43a752d948010a023a.json @@ -0,0 +1,84 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:05:07.898Z", + "payload": { + "actions": [ + { + "name": "tap", + "summary": "tap other \"Choose photo\"", + "target": { + "role": "other", + "name": "Choose photo", + "testId": "choose-photo", + "selector": "id=choose-photo" + } + }, + { + "name": "tap", + "summary": "tap image \"Photo, October 03, 22:50\"", + "target": { + "role": "image", + "name": "Photo, October 03, 22:50", + "testId": "PXGGridLayout-Info", + "selector": "id=PXGGridLayout-Info" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Photo%20Picker", + "targetId": "ios-simulator", + "instructionDigest": "d601aab262121b364841d0fcc4785cb58a9ec678addac0d10f4a1683f22638a6", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Opened the photo library and selected the most recent photo (October 03, 22:50). The screen confirms: “Receipt attached: icon.png”.", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "other", + "name": "Receipt attached: icon.png" + }, + { + "role": "text", + "name": "Receipt attached: icon.png", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Expense report" + }, + { + "role": "text", + "name": "Attach the receipt photo from your photo library to submit this expense." + }, + { + "role": "other", + "name": "Choose photo", + "testId": "choose-photo" + }, + { + "role": "other", + "name": "Expense report" + } + ], + "endWaitMs": 12335, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/c971963defc590db3c516e2c9ee77864c3da7f62efd9d6592aa716fd6fcd7dac.json b/apps/mobile-benchmark/.e2e/cache/21c26ef65b43c8ca1338372eea1412028bc5ba3fa6b7f3d31a238f29b56debe6.json similarity index 59% rename from apps/mobile-benchmark/.e2e/cache/c971963defc590db3c516e2c9ee77864c3da7f62efd9d6592aa716fd6fcd7dac.json rename to apps/mobile-benchmark/.e2e/cache/21c26ef65b43c8ca1338372eea1412028bc5ba3fa6b7f3d31a238f29b56debe6.json index c09859748..eb3c6d45e 100644 --- a/apps/mobile-benchmark/.e2e/cache/c971963defc590db3c516e2c9ee77864c3da7f62efd9d6592aa716fd6fcd7dac.json +++ b/apps/mobile-benchmark/.e2e/cache/21c26ef65b43c8ca1338372eea1412028bc5ba3fa6b7f3d31a238f29b56debe6.json @@ -1,20 +1,8 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T20:46:26.049Z", + "createdAt": "2026-10-09T06:57:23.475Z", "payload": { "actions": [ - { - "name": "tap", - "summary": "tap textbox in \"Create your benchmark account\" (1 of 3)", - "target": { - "role": "textbox", - "within": "Create your benchmark account", - "position": { - "index": 0, - "of": 3 - } - } - }, { "name": "type", "summary": "type \"Ada\" into textbox in \"Create your benchmark account\" (1 of 3)", @@ -28,18 +16,6 @@ }, "value": "Ada" }, - { - "name": "tap", - "summary": "tap textbox in \"Create your benchmark account\" (1 of 2)", - "target": { - "role": "textbox", - "within": "Create your benchmark account", - "position": { - "index": 0, - "of": 2 - } - } - }, { "name": "type", "summary": "type \"Lovelace\" into textbox in \"Create your benchmark account\" (1 of 2)", @@ -53,18 +29,6 @@ }, "value": "Lovelace" }, - { - "name": "tap", - "summary": "tap textbox in \"Create your benchmark account\" (1 of 1)", - "target": { - "role": "textbox", - "within": "Create your benchmark account", - "position": { - "index": 0, - "of": 1 - } - } - }, { "name": "type", "summary": "type \"ada@example.com\" into textbox in \"Create your benchmark account\" (1 of 1)", @@ -78,19 +42,6 @@ }, "value": "ada@example.com" }, - { - "name": "tap", - "summary": "tap textbox in \"Create your benchmark account\" (1 of 1)", - "target": { - "role": "textbox", - "inputPurpose": "password", - "within": "Create your benchmark account", - "position": { - "index": 0, - "of": 1 - } - } - }, { "name": "type", "summary": "type \"Lovelace1815\" into textbox in \"Create your benchmark account\" (1 of 1)", @@ -122,9 +73,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Flattened%20Registration%20Form", "targetId": "android-emulator", - "instructionDigest": "99f3046e1cffa27d71f282e7a46fd975917dcd9e39992518bc6fc19c46f414ac" + "instructionDigest": "99f3046e1cffa27d71f282e7a46fd975917dcd9e39992518bc6fc19c46f414ac", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Filled the registration form with Ada Lovelace, ada@example.com, and the requested password, then submitted it. The screen now displays “Account created.”.", + "summary": "Filled the registration form with Ada Lovelace, ada@example.com, and the requested password, then submitted it. The screen confirms “Account created.”", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -133,6 +87,50 @@ "name": "Account created" } ], - "endWaitMs": 15457 + "goneAnchors": [ + { + "role": "text", + "name": "Create your benchmark account" + }, + { + "role": "text", + "name": "First name" + }, + { + "role": "text", + "name": "Last name" + }, + { + "role": "text", + "name": "Email address" + }, + { + "role": "text", + "name": "Set password" + }, + { + "role": "text", + "name": "Passwords must contain a minimum of 8 characters. By signing up you confirm you have read the benchmark terms. This filler paragraph exists so the form spans roughly two screens and the scroll indicator reports multiple pages, matching the production app this scenario was distilled from." + }, + { + "role": "text", + "name": "CREATE ACCOUNT" + }, + { + "role": "text", + "name": "More filler content below the primary action: support links, privacy policy, and terms and conditions would normally live here. It pads the scroll extent so off-screen estimation has something to measure." + } + ], + "endWaitMs": 14651, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/610353f93fe3c27644c6b4406df2e6261cab8a1b4ecc167aea56f0533e6f3287.json b/apps/mobile-benchmark/.e2e/cache/286f4c460f10ea043ed72d4b4109e071dc9aebcbb0ea9c48933e60a0649f6e16.json similarity index 57% rename from apps/mobile-benchmark/.e2e/cache/610353f93fe3c27644c6b4406df2e6261cab8a1b4ecc167aea56f0533e6f3287.json rename to apps/mobile-benchmark/.e2e/cache/286f4c460f10ea043ed72d4b4109e071dc9aebcbb0ea9c48933e60a0649f6e16.json index 3144cad96..209df1cec 100644 --- a/apps/mobile-benchmark/.e2e/cache/610353f93fe3c27644c6b4406df2e6261cab8a1b4ecc167aea56f0533e6f3287.json +++ b/apps/mobile-benchmark/.e2e/cache/286f4c460f10ea043ed72d4b4109e071dc9aebcbb0ea9c48933e60a0649f6e16.json @@ -1,25 +1,18 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T11:14:47.539Z", + "createdAt": "2026-10-09T06:53:08.882Z", "payload": { "actions": [ { "name": "tapAt", - "summary": "tap the point (634, 1358) on group", + "summary": "tap the point (637, 1389) on group", "point": { - "x": 634, - "y": 1358 + "x": 637, + "y": 1389 }, "viewport": { "width": 1080, "height": 2400 - }, - "within": { - "target": { - "role": "group" - }, - "fx": 0.4966, - "fy": 0.5238 } }, { @@ -44,9 +37,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Broken%20Accessibility", "targetId": "android-emulator", - "instructionDigest": "39a6071dd8e903747ecddcc20ac06b4c62c7e399b90ef1a0c2e79a3bcb5c4e92" + "instructionDigest": "39a6071dd8e903747ecddcc20ac06b4c62c7e399b90ef1a0c2e79a3bcb5c4e92", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Tapped the green circle, entered code 7291, and pressed the arrow. The screen now displays “Access granted.”.", + "summary": "Tapped the green circle, entered code 7291, and pressed the arrow. The screen now displays “Access granted.”", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -55,6 +51,22 @@ "name": "Access granted" } ], - "endWaitMs": 15214 + "goneAnchors": [ + { + "role": "text", + "name": "Tap the green circle to continue" + } + ], + "endWaitMs": 14422, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/2ad51fd1d737ce5523237eab01e90c479fc241215144011d31289afa9f0b262a.json b/apps/mobile-benchmark/.e2e/cache/2ad51fd1d737ce5523237eab01e90c479fc241215144011d31289afa9f0b262a.json deleted file mode 100644 index e8b32ea7a..000000000 --- a/apps/mobile-benchmark/.e2e/cache/2ad51fd1d737ce5523237eab01e90c479fc241215144011d31289afa9f0b262a.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T17:10:18.389Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap other \"Trail Mix, 500 g · $6.99\"", - "target": { - "role": "other", - "name": "Trail Mix, 500 g · $6.99", - "testId": "product-trail-mix-500", - "selector": "id=product-trail-mix-500" - } - }, - { - "name": "tap", - "summary": "tap other \"+\"", - "target": { - "role": "other", - "name": "+", - "testId": "quantity-increase", - "selector": "id=quantity-increase" - } - }, - { - "name": "tap", - "summary": "tap other \"Add to cart\"", - "target": { - "role": "other", - "name": "Add to cart", - "testId": "add-to-cart", - "selector": "id=add-to-cart" - } - }, - { - "name": "tap", - "summary": "tap other \"Cart (2)\"", - "target": { - "role": "other", - "name": "Cart (2)", - "testId": "open-cart", - "selector": "id=open-cart" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Product%20Catalog", - "targetId": "ios-simulator", - "instructionDigest": "df6d87ed0275359863ecaf58d94669a7d2b9881afd75c25cb6af7327bb4e052d" - }, - "summary": "Opened the exact Trail Mix 500 g product, changed quantity to 2, added it to the cart, and opened the cart. The cart shows “2 × Trail Mix 500 g” and confirms “Order ready: 2 × Trail Mix 500 g.”", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endAnchors": [ - { - "role": "text", - "name": "Cart" - }, - { - "role": "text", - "name": "2 × Trail Mix 500 g" - }, - { - "role": "other", - "name": "‹ Back to catalog" - }, - { - "role": "text", - "name": "Order ready: 2 × Trail Mix 500 g", - "testId": "success-message" - } - ], - "endWaitMs": 10318 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/2f8ed50d6d4e803376100f66c14562e5f6353261a6862f3e633e026a794154e5.json b/apps/mobile-benchmark/.e2e/cache/2f8ed50d6d4e803376100f66c14562e5f6353261a6862f3e633e026a794154e5.json deleted file mode 100644 index c6c788687..000000000 --- a/apps/mobile-benchmark/.e2e/cache/2f8ed50d6d4e803376100f66c14562e5f6353261a6862f3e633e026a794154e5.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T17:15:18.568Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap other \"Buy with Apple Pay\"", - "target": { - "role": "other", - "name": "Buy with Apple Pay", - "testId": "apple-pay-button", - "selector": "id=apple-pay-button" - } - }, - { - "name": "tap", - "summary": "tap button \"Pay with Passcode\"", - "target": { - "role": "button", - "name": "Pay with Passcode", - "testId": "footer", - "selector": "id=footer" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Apple%20Pay%20Billing%20Address", - "targetId": "ios-simulator", - "instructionDigest": "bdc2a58d2726e93ed533d5388d2ac639914cbfa62317aebc063aebace72496ff" - }, - "summary": "Started Apple Pay and completed the $8.99 payment. The confirmation screen shows “Payment complete: $8.99” and Billing ZIP: 95014.", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endAnchors": [ - { - "role": "other", - "name": "Payment complete: $8.99" - }, - { - "role": "text", - "name": "Payment complete: $8.99", - "testId": "success-message" - }, - { - "role": "text", - "name": "Billing ZIP: 95014", - "testId": "billing-zip" - } - ], - "endWaitMs": 17480 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/36d62803cb7ed0d77eb6d752b0d050eaf246b7b493d693bb6675c9d58b7dd91d.json b/apps/mobile-benchmark/.e2e/cache/36d62803cb7ed0d77eb6d752b0d050eaf246b7b493d693bb6675c9d58b7dd91d.json new file mode 100644 index 000000000..900537139 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/36d62803cb7ed0d77eb6d752b0d050eaf246b7b493d693bb6675c9d58b7dd91d.json @@ -0,0 +1,81 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T06:57:52.132Z", + "payload": { + "actions": [ + { + "name": "tool", + "summary": "tool type (run-time value)", + "derived": "pixels" + }, + { + "name": "tool", + "summary": "tool type (run-time value)", + "derived": "pixels" + }, + { + "name": "tap", + "summary": "tap group \"SIGN IN\" in \"Use tester@tester.army / " + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Flattened%20Login", + "targetId": "android-emulator", + "instructionDigest": "2ac57f8c28a31069613ffb9bbf8151a42ea8ceb4bb65d0ad6dcd9eea0b8a2755", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Used the screenshot hint to log in with tester@tester.army and password . The screen confirms “Logged in successfully.”", + "startPath": "dev.e2e.benchmark", + "endPath": "dev.e2e.benchmark", + "endAnchors": [ + { + "role": "text", + "name": "Logged in successfully" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Use tester@tester.army / " + }, + { + "role": "text", + "name": "Email" + }, + { + "role": "text", + "name": "Password" + }, + { + "role": "text", + "name": "SIGN IN" + }, + { + "role": "group", + "name": "SIGN IN" + } + ], + "endWaitMs": 14497, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/456399a01e8a1e090bf0b92daba9012321bdd0b60f045326fc528170b1006797.json b/apps/mobile-benchmark/.e2e/cache/456399a01e8a1e090bf0b92daba9012321bdd0b60f045326fc528170b1006797.json deleted file mode 100644 index b3d4af5bd..000000000 --- a/apps/mobile-benchmark/.e2e/cache/456399a01e8a1e090bf0b92daba9012321bdd0b60f045326fc528170b1006797.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-24T07:57:25.541Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap group \"⏷, Actions\" in \"Home\"", - "target": { - "role": "group", - "name": "⏷, Actions", - "testId": "tab-actions", - "selector": "id=tab-actions", - "within": "Home" - } - }, - { - "name": "tap", - "summary": "tap group \"Complete action\" in \"Actions\"", - "target": { - "role": "group", - "name": "Complete action", - "testId": "complete-action-button", - "selector": "id=complete-action-button", - "within": "Actions" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Bottom%20Tabs", - "targetId": "android-emulator", - "instructionDigest": "e537c4fc20970c63b73faeca0620f6f3aa5afdc8ad6e5b0964959e0f5762de45" - }, - "summary": "Opened the Actions tab and tapped Complete action. The screen displays “Action completed.”.", - "startPath": "dev.e2e.benchmark", - "endPath": "dev.e2e.benchmark", - "endAnchors": [ - { - "role": "group", - "name": "Actions" - }, - { - "role": "text", - "name": "Action completed", - "testId": "success-message" - } - ], - "endWaitMs": 14485 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/465441030d9460122dc8198d48d36ce53823ae665c1c7b4eef232300ee92ec28.json b/apps/mobile-benchmark/.e2e/cache/465441030d9460122dc8198d48d36ce53823ae665c1c7b4eef232300ee92ec28.json new file mode 100644 index 000000000..7d96d11b1 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/465441030d9460122dc8198d48d36ce53823ae665c1c7b4eef232300ee92ec28.json @@ -0,0 +1,143 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:21:42.138Z", + "payload": { + "actions": [ + { + "name": "tap", + "summary": "tap button \"Card\"", + "target": { + "role": "button", + "name": "Card", + "testId": "Card", + "selector": "id=Card" + } + }, + { + "name": "type", + "summary": "type \"4242424242424242\" into textbox \"Card number\"", + "target": { + "role": "textbox", + "name": "Card number" + }, + "value": "4242424242424242" + }, + { + "name": "type", + "summary": "type \"123\" into textbox \"CVC\"", + "target": { + "role": "textbox", + "name": "CVC" + }, + "value": "123" + }, + { + "name": "tap", + "summary": "tap button \"Pay 10,99 US$\"", + "target": { + "role": "button", + "name": "Pay 10,99 US$" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Stripe%20PaymentSheet", + "targetId": "ios-simulator", + "instructionDigest": "548f26f27a3de78ff303cdeec5ab1eda061f15f1a1f2eaff404934e13b5e1176", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Completed checkout with Stripe test card 4242 4242 4242 4242, expiry 12/34, CVC 123, and postal code SW1A 1AA. The screen confirms “Stripe test payment completed.”", + "startPath": "dev.e2e.benchmark", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "button", + "name": "Benchmark Examples", + "testId": "BackButton" + }, + { + "role": "text", + "name": "Stripe PaymentSheet" + }, + { + "role": "text", + "name": "Stripe test payment" + }, + { + "role": "text", + "name": "Complete the payment in Stripe’s native PaymentSheet." + }, + { + "role": "text", + "name": "Test card details" + }, + { + "role": "text", + "name": "Card: 4242 4242 4242 4242" + }, + { + "role": "text", + "name": "Expiry: 12/34 · CVC: 123" + }, + { + "role": "text", + "name": "Postal code: SW1A 1AA" + } + ], + "goneAnchors": [ + { + "role": "status", + "name": "In progress", + "value": "1" + }, + { + "role": "text", + "name": "TEST" + }, + { + "role": "button", + "name": "Close", + "testId": "UIButton.Close" + }, + { + "role": "other", + "name": "Vertical scroll bar, 1 page", + "value": "0%" + }, + { + "role": "other", + "name": "Horizontal scroll bar, 1 page", + "value": "0%" + }, + { + "role": "window", + "name": "Vertical scroll bar, 1 page" + }, + { + "role": "other", + "name": "Close" + }, + { + "role": "other", + "name": "TEST" + } + ], + "endWaitMs": 16347, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/4c5e8daf0536daef065c22b4290c369422326602913c90bcdfa33c3e9a5deb33.json b/apps/mobile-benchmark/.e2e/cache/4c5e8daf0536daef065c22b4290c369422326602913c90bcdfa33c3e9a5deb33.json deleted file mode 100644 index d7fb4cb75..000000000 --- a/apps/mobile-benchmark/.e2e/cache/4c5e8daf0536daef065c22b4290c369422326602913c90bcdfa33c3e9a5deb33.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T17:11:02.342Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap radio \"Medium\"", - "target": { - "role": "radio", - "name": "Medium", - "testId": "size-medium", - "selector": "id=size-medium" - } - }, - { - "name": "tap", - "summary": "tap checkbox \"Cheese\"", - "target": { - "role": "checkbox", - "name": "Cheese", - "testId": "topping-cheese", - "selector": "id=topping-cheese" - } - }, - { - "name": "tap", - "summary": "tap checkbox \"Olives\"", - "target": { - "role": "checkbox", - "name": "Olives", - "testId": "topping-olives", - "selector": "id=topping-olives" - } - }, - { - "name": "tap", - "summary": "tap switch \"0\"", - "target": { - "role": "switch", - "name": "0", - "testId": "rush-delivery", - "selector": "id=rush-delivery" - } - }, - { - "name": "tap", - "summary": "tap textbox \"delivery-notes\"", - "target": { - "role": "textbox", - "testId": "delivery-notes", - "selector": "id=delivery-notes" - } - }, - { - "name": "tap", - "summary": "tap button \"return\"", - "target": { - "role": "button", - "name": "return", - "testId": "Return", - "selector": "id=Return" - } - }, - { - "name": "tap", - "summary": "tap other \"Place order\"", - "target": { - "role": "other", - "name": "Place order", - "testId": "place-order", - "selector": "id=place-order" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Choice%20Controls", - "targetId": "ios-simulator", - "instructionDigest": "e45bc3c8dfe206c28355448b56384192428222d9ab9b304cefdfa5b86f6da188" - }, - "summary": "Selected Medium, Cheese, and Olives; enabled rush delivery; focused the notes field and dismissed the keyboard with Return. Placed the order, and the screen confirms: “Order placed: Medium with Cheese, Olives (rush).”.", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endAnchors": [ - { - "role": "other", - "name": "Order placed: Medium with Cheese, Olives (rush)" - }, - { - "role": "text", - "name": "Order placed: Medium with Cheese, Olives (rush)", - "testId": "success-message" - } - ], - "endWaitMs": 10339 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/84ae4032ac851b0fbf4b19b65314d11364aadebee24bc991d8edd34e98d6eb39.json b/apps/mobile-benchmark/.e2e/cache/4c9b8d6da6cd0c38a5341e8bd7412e7618aafaec97ec4e020944d5ef2a0fb2b2.json similarity index 54% rename from apps/mobile-benchmark/.e2e/cache/84ae4032ac851b0fbf4b19b65314d11364aadebee24bc991d8edd34e98d6eb39.json rename to apps/mobile-benchmark/.e2e/cache/4c9b8d6da6cd0c38a5341e8bd7412e7618aafaec97ec4e020944d5ef2a0fb2b2.json index 8f06643e7..bbd380ce9 100644 --- a/apps/mobile-benchmark/.e2e/cache/84ae4032ac851b0fbf4b19b65314d11364aadebee24bc991d8edd34e98d6eb39.json +++ b/apps/mobile-benchmark/.e2e/cache/4c9b8d6da6cd0c38a5341e8bd7412e7618aafaec97ec4e020944d5ef2a0fb2b2.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-23T17:10:40.321Z", + "createdAt": "2026-10-09T07:05:42.732Z", "payload": { "actions": [ { @@ -41,9 +41,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Error%20Recovery", "targetId": "ios-simulator", - "instructionDigest": "e8369dfb1ec63a3fa2636f3e1803fa229587d469fcb7abdafcfbbb046625544c" + "instructionDigest": "e8369dfb1ec63a3fa2636f3e1803fa229587d469fcb7abdafcfbbb046625544c", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Retried the failed draft load, then deleted the Untitled draft and confirmed the deletion. The screen now shows “Draft deleted.”", + "summary": "Retried the failed draft load, which succeeded and displayed the untitled draft. Deleted the draft and confirmed; the screen now shows “Draft deleted.”", "startPath": "dev.e2e.benchmark / Benchmark Examples", "endPath": "dev.e2e.benchmark / Benchmark Examples", "endAnchors": [ @@ -57,6 +60,35 @@ "testId": "success-message" } ], - "endWaitMs": 10891 + "goneAnchors": [ + { + "role": "status", + "name": "In progress", + "value": "1" + }, + { + "role": "text", + "name": "Loading drafts…" + }, + { + "role": "other", + "name": "Loading drafts…" + }, + { + "role": "other", + "name": "In progress" + } + ], + "endWaitMs": 12242, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/4e85a1a62b850f53a939103b6446aada085655ab250e434a614d0a96b1b5a41a.json b/apps/mobile-benchmark/.e2e/cache/4e85a1a62b850f53a939103b6446aada085655ab250e434a614d0a96b1b5a41a.json new file mode 100644 index 000000000..e909286e8 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/4e85a1a62b850f53a939103b6446aada085655ab250e434a614d0a96b1b5a41a.json @@ -0,0 +1,121 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T06:52:29.549Z", + "payload": { + "actions": [ + { + "name": "tap", + "summary": "tap tab \"⏷, Actions\" in \"Home\"", + "target": { + "role": "tab", + "name": "⏷, Actions", + "testId": "tab-actions", + "selector": "id=tab-actions", + "within": "Home" + } + }, + { + "name": "tap", + "summary": "tap group \"Complete action\" in \"Actions\"", + "target": { + "role": "group", + "name": "Complete action", + "testId": "complete-action-button", + "selector": "id=complete-action-button", + "within": "Actions" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Bottom%20Tabs", + "targetId": "android-emulator", + "instructionDigest": "e537c4fc20970c63b73faeca0620f6f3aa5afdc8ad6e5b0964959e0f5762de45", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Opened the Actions tab and pressed “Complete action.” The screen displays “Action completed.”", + "startPath": "dev.e2e.benchmark", + "endPath": "dev.e2e.benchmark", + "endAnchors": [ + { + "role": "heading", + "name": "Actions" + }, + { + "role": "text", + "name": "Action completed", + "testId": "success-message" + }, + { + "role": "text", + "name": "Actions", + "states": [ + "selected" + ] + }, + { + "role": "text", + "name": "⏷", + "states": [ + "selected" + ] + }, + { + "role": "tab", + "name": "⏷, Home", + "testId": "tab-home" + }, + { + "role": "tab", + "name": "⏷, Actions", + "testId": "tab-actions", + "states": [ + "selected" + ] + } + ], + "goneAnchors": [ + { + "role": "heading", + "name": "Home" + }, + { + "role": "text", + "name": "Go to the Actions tab and press the button there." + }, + { + "role": "text", + "name": "Actions" + }, + { + "role": "tab", + "name": "⏷, Home", + "testId": "tab-home", + "states": [ + "selected" + ] + }, + { + "role": "tab", + "name": "⏷, Actions", + "testId": "tab-actions" + } + ], + "endWaitMs": 11752, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/54cafd3addc2fab4dbdf705595e188cbbfb89c56012342ed59d7a7b4dcbb635f.json b/apps/mobile-benchmark/.e2e/cache/54cafd3addc2fab4dbdf705595e188cbbfb89c56012342ed59d7a7b4dcbb635f.json new file mode 100644 index 000000000..2f96b9c6e --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/54cafd3addc2fab4dbdf705595e188cbbfb89c56012342ed59d7a7b4dcbb635f.json @@ -0,0 +1,148 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:04:25.108Z", + "payload": { + "actions": [ + { + "name": "scrollUntil", + "summary": "scroll down on scroll-view \"Read the agreement, tap Accept terms at…\" until \"Accept terms\" shows (1 screen)", + "text": "Accept terms", + "direction": "down", + "target": { + "role": "scroll-view", + "name": "Read the agreement, tap Accept terms at the bottom, then Continue." + }, + "spans": 0.8673 + }, + { + "name": "tap", + "summary": "tap other \"Accept terms\"", + "target": { + "role": "other", + "name": "Accept terms", + "testId": "accept-terms", + "selector": "id=accept-terms" + } + }, + { + "name": "scroll", + "summary": "scroll down on other \"Read the agreement, tap Accept terms at…\" (2 of 2)", + "direction": "down", + "target": { + "role": "other", + "name": "Read the agreement, tap Accept terms at the bottom, then Continue.", + "position": { + "index": 1, + "of": 2 + } + }, + "spans": 0.8673 + }, + { + "name": "scroll", + "summary": "scroll down on other \"Continue\" (2 of 3)", + "direction": "down", + "target": { + "role": "other", + "name": "Continue", + "position": { + "index": 1, + "of": 3 + } + }, + "spans": 0.8673 + }, + { + "name": "tap", + "summary": "tap other \"Accept terms\"", + "target": { + "role": "other", + "name": "Accept terms", + "testId": "accept-terms", + "selector": "id=accept-terms" + } + }, + { + "name": "tap", + "summary": "tap other \"Continue\"", + "target": { + "role": "other", + "name": "Continue", + "testId": "continue-button", + "selector": "id=continue-button" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Sticky%20Chrome%20Target", + "targetId": "ios-simulator", + "instructionDigest": "c8995bcdba36d775696cf386be302127a69622849b54e095755e2dc908af89bd", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Scrolled to the Accept terms button, accepted the terms (the button changed to “Terms accepted ✓”), then tapped Continue. The screen now shows “Terms accepted.”", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "other", + "name": "Terms accepted" + }, + { + "role": "text", + "name": "Terms accepted", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Read the agreement, tap Accept terms at the bottom, then Continue." + }, + { + "role": "text", + "name": "Section 1" + }, + { + "role": "text", + "name": "Deterministic agreement paragraph 1 of 14. Nothing in this section is actionable; it only adds scroll distance between the top of the screen and the accept button." + }, + { + "role": "text", + "name": "Section 2" + }, + { + "role": "text", + "name": "Deterministic agreement paragraph 2 of 14. Nothing in this section is actionable; it only adds scroll distance between the top of the screen and the accept button." + }, + { + "role": "text", + "name": "Section 3" + }, + { + "role": "text", + "name": "Deterministic agreement paragraph 3 of 14. Nothing in this section is actionable; it only adds scroll distance between the top of the screen and the accept button." + }, + { + "role": "text", + "name": "Section 4" + } + ], + "endWaitMs": 13293, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/560999ea1f0b4a0b2f79b2be8724131bed51f932dfc5411fbb542e3a5d6cf7be.json b/apps/mobile-benchmark/.e2e/cache/560999ea1f0b4a0b2f79b2be8724131bed51f932dfc5411fbb542e3a5d6cf7be.json deleted file mode 100644 index b010be88b..000000000 --- a/apps/mobile-benchmark/.e2e/cache/560999ea1f0b4a0b2f79b2be8724131bed51f932dfc5411fbb542e3a5d6cf7be.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T17:02:24.672Z", - "payload": { - "actions": [ - { - "name": "type", - "summary": "type \"Benchmark Target\" into textbox \"search-input\"", - "target": { - "role": "textbox", - "testId": "search-input", - "selector": "id=search-input" - }, - "value": "Benchmark Target" - }, - { - "name": "tap", - "summary": "tap other \"Benchmark Target\"", - "target": { - "role": "other", - "name": "Benchmark Target", - "testId": "result-Benchmark Target", - "selector": "id=\"result-Benchmark Target\"" - } - }, - { - "name": "tap", - "summary": "tap other \"Benchmark Target\"", - "target": { - "role": "other", - "name": "Benchmark Target", - "testId": "result-Benchmark Target", - "selector": "id=\"result-Benchmark Target\"" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Debounced%20Search", - "targetId": "ios-simulator", - "instructionDigest": "c212f90679a61041258d6d57a10468462a17a4c9c398605f324169c734daa7f5" - }, - "summary": "Selected the single “Benchmark Target” result. The screen now displays “Selected Benchmark Target.”", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endAnchors": [ - { - "role": "other", - "name": "Selected Benchmark Target" - }, - { - "role": "text", - "name": "Selected Benchmark Target", - "testId": "success-message" - } - ], - "endWaitMs": 12860 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/32e9fb43c21f4e271a19b88c5929b6d24c6b55b72859be767bd6e76c1a899f69.json b/apps/mobile-benchmark/.e2e/cache/5e4707ace3e9b4c2f3c6369c65e05e4fd7d597831d893c541e09845ed1e0d2a9.json similarity index 57% rename from apps/mobile-benchmark/.e2e/cache/32e9fb43c21f4e271a19b88c5929b6d24c6b55b72859be767bd6e76c1a899f69.json rename to apps/mobile-benchmark/.e2e/cache/5e4707ace3e9b4c2f3c6369c65e05e4fd7d597831d893c541e09845ed1e0d2a9.json index 6d4dec55c..3cced6605 100644 --- a/apps/mobile-benchmark/.e2e/cache/32e9fb43c21f4e271a19b88c5929b6d24c6b55b72859be767bd6e76c1a899f69.json +++ b/apps/mobile-benchmark/.e2e/cache/5e4707ace3e9b4c2f3c6369c65e05e4fd7d597831d893c541e09845ed1e0d2a9.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T07:56:32.389Z", + "createdAt": "2026-10-09T06:51:48.588Z", "payload": { "actions": [ { @@ -10,6 +10,7 @@ "role": "textbox", "name": "Email", "testId": "email-input", + "placeholder": "Email", "selector": "id=email-input", "within": "Use tester@tester.army / " }, @@ -22,6 +23,7 @@ "role": "textbox", "name": "Password", "testId": "password-input", + "placeholder": "Password", "selector": "id=password-input", "inputPurpose": "password", "within": "Use tester@tester.army / " @@ -47,9 +49,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Login%20Form", "targetId": "android-emulator", - "instructionDigest": "faf898a5790a0ed0790b7cf57f66838eaa92ae4cb5975ac34563020bbe5cc9a3" + "instructionDigest": "faf898a5790a0ed0790b7cf57f66838eaa92ae4cb5975ac34563020bbe5cc9a3", + "paramsDigest": "7c4620c298b4003cb825c790cc548f7357fad575798b56d1bf1966e88babd7b9", + "callIndex": 0, + "agent": "default" }, - "summary": "Entered tester@tester.army and the provided benchmark password, then tapped Log in. The screen confirms “Logged in successfully.”.", + "summary": "Logged in with tester@tester.army and the provided password. The screen shows “Logged in successfully” and a Log out control.", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -68,6 +73,44 @@ "testId": "logout-button" } ], - "endWaitMs": 12844 + "goneAnchors": [ + { + "role": "text", + "name": "Use tester@tester.army / " + }, + { + "role": "textbox", + "name": "Email", + "testId": "email-input", + "placeholder": "Email" + }, + { + "role": "textbox", + "name": "Password", + "testId": "password-input", + "placeholder": "Password", + "inputPurpose": "password" + }, + { + "role": "text", + "name": "Log in" + }, + { + "role": "group", + "name": "Log in", + "testId": "login-button" + } + ], + "endWaitMs": 11826, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/f3b5611a11c02bc39f86ce6d4dcff4e6abcefe43ce2eb48f3f01b9ca569596cf.json b/apps/mobile-benchmark/.e2e/cache/5eff18f221aea74f513d1a35e0d22e6217704e0d5fe3574778155e7d750a9948.json similarity index 53% rename from apps/mobile-benchmark/.e2e/cache/f3b5611a11c02bc39f86ce6d4dcff4e6abcefe43ce2eb48f3f01b9ca569596cf.json rename to apps/mobile-benchmark/.e2e/cache/5eff18f221aea74f513d1a35e0d22e6217704e0d5fe3574778155e7d750a9948.json index e412df8f8..bbd84599f 100644 --- a/apps/mobile-benchmark/.e2e/cache/f3b5611a11c02bc39f86ce6d4dcff4e6abcefe43ce2eb48f3f01b9ca569596cf.json +++ b/apps/mobile-benchmark/.e2e/cache/5eff18f221aea74f513d1a35e0d22e6217704e0d5fe3574778155e7d750a9948.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T07:59:18.317Z", + "createdAt": "2026-10-09T06:55:26.759Z", "payload": { "actions": [ { @@ -10,6 +10,7 @@ "role": "textbox", "name": "Search…", "testId": "search-input", + "placeholder": "Search…", "selector": "id=search-input", "within": "Search for and select \"Benchmark Target\"" }, @@ -33,9 +34,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Debounced%20Search", "targetId": "android-emulator", - "instructionDigest": "c212f90679a61041258d6d57a10468462a17a4c9c398605f324169c734daa7f5" + "instructionDigest": "c212f90679a61041258d6d57a10468462a17a4c9c398605f324169c734daa7f5", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Searched for “Benchmark Target,” waited for the result to load, and selected the single matching result. The screen confirms “Selected Benchmark Target.”", + "summary": "Searched for “Benchmark Target,” waited for the result to load, and selected the exact matching result once. The screen confirms “Selected Benchmark Target.”", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -45,6 +49,32 @@ "testId": "success-message" } ], - "endWaitMs": 11782 + "goneAnchors": [ + { + "role": "text", + "name": "Search for and select \"Benchmark Target\"" + }, + { + "role": "textbox", + "name": "Search…", + "testId": "search-input", + "placeholder": "Search…" + }, + { + "role": "group", + "testId": "search-results" + } + ], + "endWaitMs": 11661, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/5fcf5b6f88c9d7d375b510b07c274b52e8bf086122ab6f0154648ec1ffa6990f.json b/apps/mobile-benchmark/.e2e/cache/5fcf5b6f88c9d7d375b510b07c274b52e8bf086122ab6f0154648ec1ffa6990f.json deleted file mode 100644 index 4ff00dbc1..000000000 --- a/apps/mobile-benchmark/.e2e/cache/5fcf5b6f88c9d7d375b510b07c274b52e8bf086122ab6f0154648ec1ffa6990f.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-24T08:00:54.000Z", - "payload": { - "actions": [ - { - "name": "scroll", - "summary": "scroll down on group in \"Navigate up\" (5 of 9)", - "direction": "down", - "target": { - "role": "group", - "within": "Navigate up", - "position": { - "index": 4, - "of": 9 - } - }, - "spans": 1 - }, - { - "name": "scroll", - "summary": "scroll down on group (4 of 16)", - "direction": "down", - "target": { - "role": "group", - "position": { - "index": 3, - "of": 16 - } - }, - "times": 3, - "spans": 1 - }, - { - "name": "tap", - "summary": "tap group \"Accept terms\" in \"Deterministic agreement paragraph 8 of …\"", - "target": { - "role": "group", - "name": "Accept terms", - "testId": "accept-terms", - "selector": "id=accept-terms", - "within": "Deterministic agreement paragraph 8 of 14. Nothing in this section is actionabl…" - } - }, - { - "name": "tap", - "summary": "tap group \"Continue\" in \"Deterministic agreement paragraph 8 of …\"", - "target": { - "role": "group", - "name": "Continue", - "testId": "continue-button", - "selector": "id=continue-button", - "within": "Deterministic agreement paragraph 8 of 14. Nothing in this section is actionabl…" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Sticky%20Chrome%20Target", - "targetId": "android-emulator", - "instructionDigest": "c8995bcdba36d775696cf386be302127a69622849b54e095755e2dc908af89bd" - }, - "summary": "Scrolled to and tapped Accept terms; it changed to “Terms accepted ✓”. Then tapped Continue, and the screen shows “Terms accepted.”", - "startPath": "dev.e2e.benchmark", - "endPath": "dev.e2e.benchmark", - "endAnchors": [ - { - "role": "text", - "name": "Terms accepted", - "testId": "success-message" - } - ], - "endWaitMs": 12558 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/d67251f1e632320bc4cf4132c3e7f44689f143d39875aa942d397b666973174d.json b/apps/mobile-benchmark/.e2e/cache/688a148d704ae364e07e871685ee5cc1e425f5f592d9c90fcddb96ab4163ae50.json similarity index 59% rename from apps/mobile-benchmark/.e2e/cache/d67251f1e632320bc4cf4132c3e7f44689f143d39875aa942d397b666973174d.json rename to apps/mobile-benchmark/.e2e/cache/688a148d704ae364e07e871685ee5cc1e425f5f592d9c90fcddb96ab4163ae50.json index 389d5a06d..60095ca6a 100644 --- a/apps/mobile-benchmark/.e2e/cache/d67251f1e632320bc4cf4132c3e7f44689f143d39875aa942d397b666973174d.json +++ b/apps/mobile-benchmark/.e2e/cache/688a148d704ae364e07e871685ee5cc1e425f5f592d9c90fcddb96ab4163ae50.json @@ -1,24 +1,26 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-23T16:58:11.549Z", + "createdAt": "2026-10-09T06:55:48.722Z", "payload": { "actions": [ { "name": "type", - "summary": "type \"tester@tester.army\" into textbox \"email-input\"", + "summary": "type \"tester@tester.army\" into textbox \"Email\"", "target": { "role": "textbox", "testId": "email-input", + "placeholder": "Email", "selector": "id=email-input" }, "value": "tester@tester.army" }, { "name": "typeSecret", - "summary": "fill secret \"benchmark.password\" into textbox \"password-input\"", + "summary": "fill secret \"benchmark.password\" into textbox \"Password\"", "target": { "role": "textbox", "testId": "password-input", + "placeholder": "Password", "selector": "id=password-input", "inputPurpose": "password" }, @@ -70,9 +72,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Login%20Form", "targetId": "ios-simulator", - "instructionDigest": "faf898a5790a0ed0790b7cf57f66838eaa92ae4cb5975ac34563020bbe5cc9a3" + "instructionDigest": "faf898a5790a0ed0790b7cf57f66838eaa92ae4cb5975ac34563020bbe5cc9a3", + "paramsDigest": "7c4620c298b4003cb825c790cc548f7357fad575798b56d1bf1966e88babd7b9", + "callIndex": 0, + "agent": "default" }, - "summary": "Entered tester@tester.army and the provided password, submitted the login form, dismissed the password-save prompt, and verified the “Logged in successfully” message.", + "summary": "Entered tester@tester.army and the provided password, submitted the login form, dismissed the Save Password prompt, and verified the screen shows “Logged in successfully.”", "startPath": "dev.e2e.benchmark / Benchmark Examples", "endPath": "dev.e2e.benchmark / Benchmark Examples", "endAnchors": [ @@ -91,6 +96,42 @@ "testId": "success-message" } ], - "endWaitMs": 12946 + "goneAnchors": [ + { + "role": "text", + "name": "Use tester@tester.army / " + }, + { + "role": "textbox", + "testId": "email-input", + "placeholder": "Email" + }, + { + "role": "textbox", + "testId": "password-input", + "placeholder": "Password", + "inputPurpose": "password" + }, + { + "role": "other", + "name": "Log in", + "testId": "login-button" + }, + { + "role": "other", + "name": "Use tester@tester.army / " + } + ], + "endWaitMs": 12276, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/69bff66e920fa63c0bb863197990571d68d6802307a44d517f6f6f2fe103517b.json b/apps/mobile-benchmark/.e2e/cache/69bff66e920fa63c0bb863197990571d68d6802307a44d517f6f6f2fe103517b.json deleted file mode 100644 index e92a54a18..000000000 --- a/apps/mobile-benchmark/.e2e/cache/69bff66e920fa63c0bb863197990571d68d6802307a44d517f6f6f2fe103517b.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T17:09:30.511Z", - "payload": { - "actions": [ - { - "name": "type", - "summary": "type \"TA-BENCH-50\" into textbox \"Coupon code\"", - "target": { - "role": "textbox", - "name": "Coupon code" - }, - "value": "TA-BENCH-50" - }, - { - "name": "tap", - "summary": "tap switch \"I accept the terms\"", - "target": { - "role": "switch", - "name": "I accept the terms" - } - }, - { - "name": "tap", - "summary": "tap button \"Apply coupon\"", - "target": { - "role": "button", - "name": "Apply coupon" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20WebView%20Accessibility", - "targetId": "ios-simulator", - "instructionDigest": "60e9576a643a70f4d33968ccc19d845112ca2ed50212584e9e7aadc34707e5c8" - }, - "summary": "Read coupon code TA-BENCH-50, entered it, accepted the terms, and applied it. The web view now displays “Coupon applied.”.", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endAnchors": [ - { - "role": "other", - "name": "Coupon applied" - }, - { - "role": "text", - "name": "Coupon applied", - "testId": "success-message" - }, - { - "role": "other", - "name": "Vertical scroll bar, 2 pages", - "testId": "coupon-webview" - }, - { - "role": "web-view", - "name": "Vertical scroll bar, 2 pages" - } - ], - "endWaitMs": 10394 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/6bae7c55e24e22c38b21ab48d83c3dcaf93e0e020ed29026cd9305e9587ed7b5.json b/apps/mobile-benchmark/.e2e/cache/6bae7c55e24e22c38b21ab48d83c3dcaf93e0e020ed29026cd9305e9587ed7b5.json deleted file mode 100644 index 397172519..000000000 --- a/apps/mobile-benchmark/.e2e/cache/6bae7c55e24e22c38b21ab48d83c3dcaf93e0e020ed29026cd9305e9587ed7b5.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-24T20:47:58.050Z", - "payload": { - "actions": [ - { - "name": "scroll", - "summary": "scroll up on group \"reward-scroll\" in \"Pull down to refresh and reveal your re…\"", - "direction": "up", - "target": { - "role": "group", - "testId": "reward-scroll", - "selector": "id=reward-scroll", - "within": "Pull down to refresh and reveal your reward" - }, - "spans": 0.9125 - }, - { - "name": "tap", - "summary": "tap group \"Claim reward\"", - "target": { - "role": "group", - "name": "Claim reward", - "testId": "claim-button", - "selector": "id=claim-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Async%20States", - "targetId": "android-emulator", - "instructionDigest": "fdc4e142da6e03180c7a75853bbbeb788efe25a58ccefefc640c6041870b36ce" - }, - "summary": "Waited for the Async States screen to load, scrolled the reward area to refresh and reveal the claim button, then tapped Claim reward. The screen now confirms “Reward claimed.”.", - "startPath": "dev.e2e.benchmark", - "endPath": "dev.e2e.benchmark", - "endAnchors": [ - { - "role": "text", - "name": "Reward claimed", - "testId": "success-message" - }, - { - "role": "group", - "testId": "reward-scroll" - } - ], - "endWaitMs": 16103 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/6d77b84d705dbf552d862188b0c6d7f49c27d8b7c9b59f6a470c54f8960a10b1.json b/apps/mobile-benchmark/.e2e/cache/6d77b84d705dbf552d862188b0c6d7f49c27d8b7c9b59f6a470c54f8960a10b1.json new file mode 100644 index 000000000..7afe2a242 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/6d77b84d705dbf552d862188b0c6d7f49c27d8b7c9b59f6a470c54f8960a10b1.json @@ -0,0 +1,127 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T06:57:21.664Z", + "payload": { + "actions": [ + { + "name": "type", + "summary": "type \"tester\" into textbox \"username-input\"", + "target": { + "role": "textbox", + "testId": "username-input", + "selector": "id=username-input" + }, + "value": "tester" + }, + { + "name": "type", + "summary": "type \"1234\" into textbox \"pin-input\"", + "target": { + "role": "textbox", + "testId": "pin-input", + "selector": "id=pin-input", + "inputPurpose": "password" + }, + "value": "1234" + }, + { + "name": "type", + "summary": "type \"This is a test note.\" into textbox \"Vertical scroll bar, 1 page\"", + "target": { + "role": "textbox", + "name": "Vertical scroll bar, 1 page", + "testId": "notes-input", + "selector": "id=notes-input" + }, + "value": "This is a test note." + }, + { + "name": "tap", + "summary": "tap other \"Submit\"", + "target": { + "role": "other", + "name": "Submit", + "testId": "submit-button", + "selector": "id=submit-button" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Text%20Input%20Variations", + "targetId": "ios-simulator", + "instructionDigest": "fbc47cae1853b33f40b2f33da5fd5f41dfc811c660e7aecb291ad1d964757d21", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Entered username \"tester\", PIN 1234, and notes \"This is a test note.\" (20 characters), then submitted. The screen displays \"Form submitted.\"", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "other", + "name": "Form submitted" + }, + { + "role": "scroll-view", + "name": "Form submitted" + }, + { + "role": "text", + "name": "Form submitted", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Username (min 3 chars)" + }, + { + "role": "textbox", + "testId": "username-input" + }, + { + "role": "text", + "name": "PIN (exactly 4 digits, secure)" + }, + { + "role": "textbox", + "testId": "pin-input", + "inputPurpose": "password" + }, + { + "role": "text", + "name": "Notes (multiline, min 10 chars) — 0/10" + }, + { + "role": "other", + "name": "Submit", + "testId": "submit-button" + }, + { + "role": "other", + "name": "Username (min 3 chars)" + }, + { + "role": "scroll-view", + "name": "Username (min 3 chars)" + } + ], + "endWaitMs": 12441, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/781e4367b42ad0ada60347c98bf6fe7f7428189559e7bde4182f3880ad96cacf.json b/apps/mobile-benchmark/.e2e/cache/781e4367b42ad0ada60347c98bf6fe7f7428189559e7bde4182f3880ad96cacf.json new file mode 100644 index 000000000..2671ceb35 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/781e4367b42ad0ada60347c98bf6fe7f7428189559e7bde4182f3880ad96cacf.json @@ -0,0 +1,98 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T06:52:10.161Z", + "payload": { + "actions": [ + { + "name": "scrollUntil", + "summary": "scroll down on group \"benchmark-list\" until \"Item 137\" shows (8 screens)", + "text": "Item 137", + "direction": "down", + "target": { + "role": "group", + "testId": "benchmark-list", + "selector": "id=benchmark-list" + }, + "spans": 0.8821 + }, + { + "name": "tap", + "summary": "tap group \"Item 137\" in \"Item 121\"", + "target": { + "role": "group", + "name": "Item 137", + "testId": "item-137", + "selector": "id=item-137", + "within": "Item 121" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Infinite%20Scroll%20List", + "targetId": "android-emulator", + "instructionDigest": "240960ef8daa93f30d3183a42cf877c23681993025141766e480102a3eca2d75", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Scrolled the paginated list until Item 137 appeared and tapped it. The screen now shows “Found item 137.”", + "startPath": "dev.e2e.benchmark", + "endPath": "dev.e2e.benchmark", + "endAnchors": [ + { + "role": "text", + "name": "Found item 137", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Scroll down and tap Item 137 to complete" + }, + { + "role": "text", + "name": "Item 1" + }, + { + "role": "text", + "name": "Item 2" + }, + { + "role": "text", + "name": "Item 3" + }, + { + "role": "text", + "name": "Item 4" + }, + { + "role": "text", + "name": "Item 5" + }, + { + "role": "text", + "name": "Item 6" + }, + { + "role": "text", + "name": "Item 7" + } + ], + "endWaitMs": 11715, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/7dcac730693372dc6ecaa5cdc3bf798eb38509591c16fa8b7e42be604c0a141f.json b/apps/mobile-benchmark/.e2e/cache/7dcac730693372dc6ecaa5cdc3bf798eb38509591c16fa8b7e42be604c0a141f.json deleted file mode 100644 index c81b42f8e..000000000 --- a/apps/mobile-benchmark/.e2e/cache/7dcac730693372dc6ecaa5cdc3bf798eb38509591c16fa8b7e42be604c0a141f.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T16:59:33.603Z", - "payload": { - "actions": [ - { - "name": "type", - "summary": "type \"tester01\" into textbox \"username-input\"", - "target": { - "role": "textbox", - "testId": "username-input", - "selector": "id=username-input" - }, - "value": "tester01" - }, - { - "name": "type", - "summary": "type \"4826\" into textbox \"pin-input\"", - "target": { - "role": "textbox", - "testId": "pin-input", - "selector": "id=pin-input", - "inputPurpose": "password" - }, - "value": "4826" - }, - { - "name": "type", - "summary": "type \"These are detailed notes.\" into textbox \"Vertical scroll bar, 1 page\"", - "target": { - "role": "textbox", - "name": "Vertical scroll bar, 1 page", - "testId": "notes-input", - "selector": "id=notes-input" - }, - "value": "These are detailed notes." - }, - { - "name": "tap", - "summary": "tap other \"Submit\"", - "target": { - "role": "other", - "name": "Submit", - "testId": "submit-button", - "selector": "id=submit-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Text%20Input%20Variations", - "targetId": "ios-simulator", - "instructionDigest": "fbc47cae1853b33f40b2f33da5fd5f41dfc811c660e7aecb291ad1d964757d21" - }, - "summary": "Entered username tester01, a 4-digit PIN, and 25 characters of notes, then submitted. The screen now shows “Form submitted.”.", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endAnchors": [ - { - "role": "other", - "name": "Form submitted" - }, - { - "role": "scroll-view", - "name": "Form submitted" - }, - { - "role": "text", - "name": "Form submitted", - "testId": "success-message" - } - ], - "endWaitMs": 10558 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/7df0802b8a1fd00e85fc85537606ea1ed445e1175357020711139c55c755d169.json b/apps/mobile-benchmark/.e2e/cache/7df0802b8a1fd00e85fc85537606ea1ed445e1175357020711139c55c755d169.json new file mode 100644 index 000000000..c3470c239 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/7df0802b8a1fd00e85fc85537606ea1ed445e1175357020711139c55c755d169.json @@ -0,0 +1,120 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:20:27.371Z", + "payload": { + "actions": [ + { + "name": "tap", + "summary": "tap textbox \"Search…\"", + "target": { + "role": "textbox", + "testId": "search-input", + "placeholder": "Search…", + "selector": "id=search-input" + } + }, + { + "name": "type", + "summary": "type \"Benchmark Target\" into textbox \"Search…\"", + "target": { + "role": "textbox", + "testId": "search-input", + "placeholder": "Search…", + "selector": "id=search-input" + }, + "value": "Benchmark Target" + }, + { + "name": "tap", + "summary": "tap other \"Benchmark Target\"", + "target": { + "role": "other", + "name": "Benchmark Target", + "testId": "result-Benchmark Target", + "selector": "id=\"result-Benchmark Target\"" + } + }, + { + "name": "tap", + "summary": "tap other \"Benchmark Target\"", + "target": { + "role": "other", + "name": "Benchmark Target", + "testId": "result-Benchmark Target", + "selector": "id=\"result-Benchmark Target\"" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Debounced%20Search", + "targetId": "ios-simulator", + "instructionDigest": "c212f90679a61041258d6d57a10468462a17a4c9c398605f324169c734daa7f5", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Searched for “Benchmark Target,” waited for the exact result to load, and selected it once. The screen confirms “Selected Benchmark Target.”", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "other", + "name": "Selected Benchmark Target" + }, + { + "role": "text", + "name": "Selected Benchmark Target", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Search for and select \"Benchmark Target\"" + }, + { + "role": "textbox", + "testId": "search-input", + "placeholder": "Search…" + }, + { + "role": "other", + "name": "Vertical scroll bar, 1 page", + "value": "0%" + }, + { + "role": "other", + "name": "Horizontal scroll bar, 1 page", + "value": "0%" + }, + { + "role": "other", + "name": "Search for and select \"Benchmark Target\"" + }, + { + "role": "other", + "name": "Vertical scroll bar, 1 page", + "testId": "search-results" + }, + { + "role": "scroll-view", + "name": "Vertical scroll bar, 1 page" + } + ], + "endWaitMs": 12017, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/82c7cc7405281990e05ac47cd6a5326e142cc809c2fb258e537eab1bb190e56b.json b/apps/mobile-benchmark/.e2e/cache/82c7cc7405281990e05ac47cd6a5326e142cc809c2fb258e537eab1bb190e56b.json new file mode 100644 index 000000000..4f76fa982 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/82c7cc7405281990e05ac47cd6a5326e142cc809c2fb258e537eab1bb190e56b.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:07:33.267Z", + "payload": { + "actions": [ + { + "name": "tap", + "summary": "tap other \"Buy with Apple Pay\"", + "target": { + "role": "other", + "name": "Buy with Apple Pay", + "testId": "apple-pay-button", + "selector": "id=apple-pay-button" + } + }, + { + "name": "tap", + "summary": "tap button \"Pay with Passcode\"", + "target": { + "role": "button", + "name": "Pay with Passcode", + "testId": "footer", + "selector": "id=footer" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Apple%20Pay", + "targetId": "ios-simulator", + "instructionDigest": "94f39431cf1ce1c380678b2d8ee27fb1e2a33fe296495a90c007ad4dc3f2ae45", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Started the Apple Pay payment, authorized it with Pay with Passcode in the sheet, and verified the app displays “Payment complete: $8.99.”", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "other", + "name": "Payment complete: $8.99" + }, + { + "role": "text", + "name": "Payment complete: $8.99", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Order summary" + }, + { + "role": "text", + "name": "Trail Mix 500 g — $6.99" + }, + { + "role": "text", + "name": "Rush delivery — $2.00" + }, + { + "role": "text", + "name": "Total — $8.99" + }, + { + "role": "other", + "name": "Buy with Apple Pay", + "testId": "apple-pay-button" + }, + { + "role": "other", + "name": "Order summary" + } + ], + "endWaitMs": 24774, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/8b852d11e8d5b2bf024ce13aa412c8725676bf14ec1ef679807a7e7a77f5e526.json b/apps/mobile-benchmark/.e2e/cache/8b852d11e8d5b2bf024ce13aa412c8725676bf14ec1ef679807a7e7a77f5e526.json deleted file mode 100644 index df18ee7cb..000000000 --- a/apps/mobile-benchmark/.e2e/cache/8b852d11e8d5b2bf024ce13aa412c8725676bf14ec1ef679807a7e7a77f5e526.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T19:16:16.973Z", - "payload": { - "actions": [ - { - "name": "scroll", - "summary": "scroll down on scroll-view \"Scroll down and tap Item 137 to complete\"", - "direction": "down", - "target": { - "role": "scroll-view", - "name": "Scroll down and tap Item 137 to complete" - }, - "times": 10, - "spans": 0.8673 - }, - { - "name": "tap", - "summary": "tap other \"Item 137\"", - "target": { - "role": "other", - "name": "Item 137", - "testId": "item-137", - "selector": "id=item-137" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Infinite%20Scroll%20List", - "targetId": "ios-simulator", - "instructionDigest": "240960ef8daa93f30d3183a42cf877c23681993025141766e480102a3eca2d75" - }, - "summary": "Scrolled until Item 137 was visible and tapped it. The screen now displays “Found item 137.”.", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endAnchors": [ - { - "role": "other", - "name": "Found item 137" - }, - { - "role": "text", - "name": "Found item 137", - "testId": "success-message" - } - ], - "endWaitMs": 12206 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/d99569e0b0059dbe47597104045e8e92885c553857ec4e6c0218ea6271ba8b36.json b/apps/mobile-benchmark/.e2e/cache/8c77217a25baacc933adac4c87bd3b8fdd9e7d1ffb9752abae35a6464e4002a3.json similarity index 56% rename from apps/mobile-benchmark/.e2e/cache/d99569e0b0059dbe47597104045e8e92885c553857ec4e6c0218ea6271ba8b36.json rename to apps/mobile-benchmark/.e2e/cache/8c77217a25baacc933adac4c87bd3b8fdd9e7d1ffb9752abae35a6464e4002a3.json index 30a7abe95..be65cff61 100644 --- a/apps/mobile-benchmark/.e2e/cache/d99569e0b0059dbe47597104045e8e92885c553857ec4e6c0218ea6271ba8b36.json +++ b/apps/mobile-benchmark/.e2e/cache/8c77217a25baacc933adac4c87bd3b8fdd9e7d1ffb9752abae35a6464e4002a3.json @@ -1,49 +1,52 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T08:02:20.103Z", + "createdAt": "2026-10-09T06:59:24.265Z", "payload": { "actions": [ { - "name": "tap", - "summary": "tap radio \"Medium\" in \"Order a Medium pizza with exactly Chees…\"", - "target": { - "role": "radio", - "name": "Medium", - "testId": "size-medium", - "selector": "id=size-medium", - "within": "Order a Medium pizza with exactly Cheese and Olives, enable rush delivery, then…" - } - }, - { - "name": "tap", - "summary": "tap checkbox \"Cheese\" in \"Order a Medium pizza with exactly Chees…\"", + "name": "check", + "summary": "check checkbox \"Cheese\" in \"Order a Medium pizza with exactly Chees…\"", "target": { "role": "checkbox", "name": "Cheese", "testId": "topping-cheese", "selector": "id=topping-cheese", "within": "Order a Medium pizza with exactly Cheese and Olives, enable rush delivery, then…" - } + }, + "checked": true }, { - "name": "tap", - "summary": "tap checkbox \"Olives\" in \"Order a Medium pizza with exactly Chees…\"", + "name": "check", + "summary": "check checkbox \"Olives\" in \"Order a Medium pizza with exactly Chees…\"", "target": { "role": "checkbox", "name": "Olives", "testId": "topping-olives", "selector": "id=topping-olives", "within": "Order a Medium pizza with exactly Cheese and Olives, enable rush delivery, then…" - } + }, + "checked": true }, { - "name": "tap", - "summary": "tap switch \"rush-delivery\" in \"Order a Medium pizza with exactly Chees…\"", + "name": "check", + "summary": "check switch \"rush-delivery\" in \"Order a Medium pizza with exactly Chees…\"", "target": { "role": "switch", "testId": "rush-delivery", "selector": "id=rush-delivery", "within": "Order a Medium pizza with exactly Cheese and Olives, enable rush delivery, then…" + }, + "checked": true + }, + { + "name": "tap", + "summary": "tap radio \"Medium\" in \"Order a Medium pizza with exactly Chees…\"", + "target": { + "role": "radio", + "name": "Medium", + "testId": "size-medium", + "selector": "id=size-medium", + "within": "Order a Medium pizza with exactly Cheese and Olives, enable rush delivery, then…" } }, { @@ -53,6 +56,7 @@ "role": "textbox", "name": "Ring the doorbell twice", "testId": "delivery-notes", + "placeholder": "Ring the doorbell twice", "selector": "id=delivery-notes", "within": "Order a Medium pizza with exactly Cheese and Olives, enable rush delivery, then…" } @@ -80,9 +84,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Choice%20Controls", "targetId": "android-emulator", - "instructionDigest": "e45bc3c8dfe206c28355448b56384192428222d9ab9b304cefdfa5b86f6da188" + "instructionDigest": "e45bc3c8dfe206c28355448b56384192428222d9ab9b304cefdfa5b86f6da188", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Selected Medium, checked only Cheese and Olives, enabled rush delivery, dismissed the keyboard, and placed the order. The confirmation reads: “Order placed: Medium with Cheese, Olives (rush).”.", + "summary": "Selected Medium, enabled Cheese and Olives only, turned on rush delivery, dismissed the keyboard, and placed the order. The screen confirms: “Order placed: Medium with Cheese, Olives (rush).”", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -92,6 +99,50 @@ "testId": "success-message" } ], - "endWaitMs": 11891 + "goneAnchors": [ + { + "role": "text", + "name": "Order a Medium pizza with exactly Cheese and Olives, enable rush delivery, then place the order (dismiss the keyboard first)." + }, + { + "role": "text", + "name": "Size" + }, + { + "role": "text", + "name": "Small" + }, + { + "role": "text", + "name": "Medium" + }, + { + "role": "text", + "name": "Large" + }, + { + "role": "text", + "name": "Toppings" + }, + { + "role": "text", + "name": "Cheese" + }, + { + "role": "text", + "name": "Olives" + } + ], + "endWaitMs": 11772, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/95280d940d6f212bd91962b84aeb45bf720de999852e014e808c8eb717ace167.json b/apps/mobile-benchmark/.e2e/cache/95280d940d6f212bd91962b84aeb45bf720de999852e014e808c8eb717ace167.json new file mode 100644 index 000000000..a39048fdd --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/95280d940d6f212bd91962b84aeb45bf720de999852e014e808c8eb717ace167.json @@ -0,0 +1,167 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:21:05.745Z", + "payload": { + "actions": [ + { + "name": "check", + "summary": "check checkbox \"Cheese\"", + "target": { + "role": "checkbox", + "name": "Cheese", + "testId": "topping-cheese", + "selector": "id=topping-cheese" + }, + "checked": true + }, + { + "name": "check", + "summary": "check checkbox \"Olives\"", + "target": { + "role": "checkbox", + "name": "Olives", + "testId": "topping-olives", + "selector": "id=topping-olives" + }, + "checked": true + }, + { + "name": "check", + "summary": "check switch \"0\"", + "target": { + "role": "switch", + "name": "0", + "testId": "rush-delivery", + "selector": "id=rush-delivery" + }, + "checked": true + }, + { + "name": "tap", + "summary": "tap radio \"Medium\"", + "target": { + "role": "radio", + "name": "Medium", + "testId": "size-medium", + "selector": "id=size-medium" + } + }, + { + "name": "tap", + "summary": "tap textbox \"Ring the doorbell twice\"", + "target": { + "role": "textbox", + "testId": "delivery-notes", + "placeholder": "Ring the doorbell twice", + "selector": "id=delivery-notes" + } + }, + { + "name": "tap", + "summary": "tap checkbox \"✓, Mushrooms\"", + "target": { + "role": "checkbox", + "name": "✓, Mushrooms", + "testId": "topping-mushrooms", + "selector": "id=topping-mushrooms" + } + }, + { + "name": "tap", + "summary": "tap button \"return\"", + "target": { + "role": "button", + "name": "return", + "testId": "Return", + "selector": "id=Return" + } + }, + { + "name": "tap", + "summary": "tap other \"Place order\"", + "target": { + "role": "other", + "name": "Place order", + "testId": "place-order", + "selector": "id=place-order" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Choice%20Controls", + "targetId": "ios-simulator", + "instructionDigest": "e45bc3c8dfe206c28355448b56384192428222d9ab9b304cefdfa5b86f6da188", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Selected Medium, Cheese, and Olives, enabled rush delivery, opened the notes field and dismissed the keyboard, then placed the order. The app confirms: “Order placed: Medium with Cheese, Olives (rush).”", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "other", + "name": "Order placed: Medium with Cheese, Olives (rush)" + }, + { + "role": "text", + "name": "Order placed: Medium with Cheese, Olives (rush)", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Order a Medium pizza with exactly Cheese and Olives, enable rush delivery, then place the order (dismiss the keyboard first)." + }, + { + "role": "text", + "name": "Size" + }, + { + "role": "radio", + "name": "Small", + "testId": "size-small" + }, + { + "role": "radio", + "name": "Medium", + "testId": "size-medium" + }, + { + "role": "radio", + "name": "Large", + "testId": "size-large" + }, + { + "role": "text", + "name": "Toppings" + }, + { + "role": "checkbox", + "name": "Cheese", + "testId": "topping-cheese" + }, + { + "role": "checkbox", + "name": "Olives", + "testId": "topping-olives" + } + ], + "endWaitMs": 12243, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/67cec32b5f2b9b2df80d39c92b42c11726ec1f10c181523df4b0dfa4d7769c54.json b/apps/mobile-benchmark/.e2e/cache/96dbe50d1d0e8ea20edae76d25c00397dac07e3679d0588a0bba7d574fd04ce9.json similarity index 61% rename from apps/mobile-benchmark/.e2e/cache/67cec32b5f2b9b2df80d39c92b42c11726ec1f10c181523df4b0dfa4d7769c54.json rename to apps/mobile-benchmark/.e2e/cache/96dbe50d1d0e8ea20edae76d25c00397dac07e3679d0588a0bba7d574fd04ce9.json index 9ff87143d..4d4a1ea28 100644 --- a/apps/mobile-benchmark/.e2e/cache/67cec32b5f2b9b2df80d39c92b42c11726ec1f10c181523df4b0dfa4d7769c54.json +++ b/apps/mobile-benchmark/.e2e/cache/96dbe50d1d0e8ea20edae76d25c00397dac07e3679d0588a0bba7d574fd04ce9.json @@ -1,33 +1,13 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T20:49:36.026Z", + "createdAt": "2026-10-09T07:01:44.251Z", "payload": { "actions": [ { "name": "tapAt", - "summary": "tap the point (174, 227) on other \"Create your benchmark account, First na…\"", + "summary": "tap the point (194, 225) on other \"Create your benchmark account, First na…\"", "point": { - "x": 174, - "y": 227 - }, - "viewport": { - "width": 402, - "height": 874 - }, - "within": { - "target": { - "role": "other", - "name": "Create your benchmark account, First name, Last name, Email address, Set password, Passwords must contain a minimum of 8 characters. By signing up you confirm you have read the benchmark terms. This filler paragraph exists so the form spans roughly two screens and the scroll indicator reports multi…" - }, - "fx": 0.4328, - "fy": 0.1464 - } - }, - { - "name": "tapAt", - "summary": "tap the point (85, 225) on other \"Create your benchmark account, First na…\"", - "point": { - "x": 85, + "x": 194, "y": 225 }, "viewport": { @@ -39,7 +19,7 @@ "role": "other", "name": "Create your benchmark account, First name, Last name, Email address, Set password, Passwords must contain a minimum of 8 characters. By signing up you confirm you have read the benchmark terms. This filler paragraph exists so the form spans roughly two screens and the scroll indicator reports multi…" }, - "fx": 0.2114, + "fx": 0.4826, "fy": 0.1438 } }, @@ -51,10 +31,10 @@ }, { "name": "tapAt", - "summary": "tap the point (91, 310) on other \"Create your benchmark account, First na…\"", + "summary": "tap the point (194, 311) on other \"Create your benchmark account, First na…\"", "point": { - "x": 91, - "y": 310 + "x": 194, + "y": 311 }, "viewport": { "width": 402, @@ -65,8 +45,8 @@ "role": "other", "name": "Create your benchmark account, First name, Last name, Email address, Set password, Passwords must contain a minimum of 8 characters. By signing up you confirm you have read the benchmark terms. This filler paragraph exists so the form spans roughly two screens and the scroll indicator reports multi…" }, - "fx": 0.2264, - "fy": 0.2559 + "fx": 0.4826, + "fy": 0.2573 } }, { @@ -77,10 +57,10 @@ }, { "name": "tapAt", - "summary": "tap the point (99, 396) on other \"Create your benchmark account, First na…\"", + "summary": "tap the point (194, 395) on other \"Create your benchmark account, First na…\"", "point": { - "x": 99, - "y": 396 + "x": 194, + "y": 395 }, "viewport": { "width": 402, @@ -91,8 +71,8 @@ "role": "other", "name": "Create your benchmark account, First name, Last name, Email address, Set password, Passwords must contain a minimum of 8 characters. By signing up you confirm you have read the benchmark terms. This filler paragraph exists so the form spans roughly two screens and the scroll indicator reports multi…" }, - "fx": 0.2463, - "fy": 0.3694 + "fx": 0.4826, + "fy": 0.3681 } }, { @@ -103,10 +83,10 @@ }, { "name": "tapAt", - "summary": "tap the point (102, 479) on other \"Create your benchmark account, First na…\"", + "summary": "tap the point (194, 478) on other \"Create your benchmark account, First na…\"", "point": { - "x": 102, - "y": 479 + "x": 194, + "y": 478 }, "viewport": { "width": 402, @@ -117,8 +97,8 @@ "role": "other", "name": "Create your benchmark account, First name, Last name, Email address, Set password, Passwords must contain a minimum of 8 characters. By signing up you confirm you have read the benchmark terms. This filler paragraph exists so the form spans roughly two screens and the scroll indicator reports multi…" }, - "fx": 0.2537, - "fy": 0.4789 + "fx": 0.4826, + "fy": 0.4776 } }, { @@ -128,21 +108,15 @@ "replace": false }, { - "name": "tap", - "summary": "tap button \"return\"", - "target": { - "role": "button", - "name": "return", - "testId": "Return", - "selector": "id=Return" - } + "name": "dismissKeyboard", + "summary": "dismiss the keyboard" }, { "name": "tapAt", - "summary": "tap the point (192, 757) on other \"Create your benchmark account, First na…\"", + "summary": "tap the point (205, 758) on other \"Create your benchmark account, First na…\"", "point": { - "x": 192, - "y": 757 + "x": 205, + "y": 758 }, "viewport": { "width": 402, @@ -153,8 +127,8 @@ "role": "other", "name": "Create your benchmark account, First name, Last name, Email address, Set password, Passwords must contain a minimum of 8 characters. By signing up you confirm you have read the benchmark terms. This filler paragraph exists so the form spans roughly two screens and the scroll indicator reports multi…" }, - "fx": 0.4776, - "fy": 0.8456 + "fx": 0.51, + "fy": 0.847 } }, { @@ -173,9 +147,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Flattened%20Registration%20Form", "targetId": "ios-simulator", - "instructionDigest": "99f3046e1cffa27d71f282e7a46fd975917dcd9e39992518bc6fc19c46f414ac" + "instructionDigest": "99f3046e1cffa27d71f282e7a46fd975917dcd9e39992518bc6fc19c46f414ac", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Dismissed the password-save prompt; the registration screen now displays “Account created,” confirming sign-up completed with the requested details.", + "summary": "Filled the registration form with Ada Lovelace, ada@example.com, and the requested password, tapped CREATE ACCOUNT, dismissed the password-save prompt, and verified the screen says “Account created.”", "startPath": "dev.e2e.benchmark / Benchmark Examples", "endPath": "dev.e2e.benchmark / Benchmark Examples", "endAnchors": [ @@ -184,6 +161,40 @@ "name": "Account created" } ], - "endWaitMs": 15304 + "goneAnchors": [ + { + "role": "other", + "name": "Vertical scroll bar, 2 pages", + "value": "0%" + }, + { + "role": "other", + "name": "Horizontal scroll bar, 1 page", + "value": "0%" + }, + { + "role": "other", + "name": "Vertical scroll bar, 2 pages" + }, + { + "role": "other", + "name": "Create your benchmark account, First name, Last name, Email address, Set password, Passwords must contain a minimum of 8 characters. By signing up you confirm you have read the benchmark terms. This filler paragraph exists so the form spans roughly two screens and the scroll indicator reports multi…" + }, + { + "role": "scroll-view", + "name": "Create your benchmark account, First name, Last name, Email address, Set password, Passwords must contain a minimum of 8 characters. By signing up you confirm you have read the benchmark terms. This filler paragraph exists so the form spans roughly two screens and the scroll indicator reports multi…" + } + ], + "endWaitMs": 13685, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/97c265e81517fc24b666e8fe45b9d40de4dcf5f348760d6fdf95528b1b8870c1.json b/apps/mobile-benchmark/.e2e/cache/97c265e81517fc24b666e8fe45b9d40de4dcf5f348760d6fdf95528b1b8870c1.json deleted file mode 100644 index db1986c57..000000000 --- a/apps/mobile-benchmark/.e2e/cache/97c265e81517fc24b666e8fe45b9d40de4dcf5f348760d6fdf95528b1b8870c1.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-24T07:57:38.443Z", - "payload": { - "actions": [ - { - "name": "type", - "summary": "type \"tester\" into textbox \"username-input\" in \"Username (min 3 chars)\"", - "target": { - "role": "textbox", - "testId": "username-input", - "selector": "id=username-input", - "within": "Username (min 3 chars)" - }, - "value": "tester" - }, - { - "name": "type", - "summary": "type \"1234\" into textbox \"pin-input\" in \"Username (min 3 chars)\"", - "target": { - "role": "textbox", - "testId": "pin-input", - "selector": "id=pin-input", - "inputPurpose": "password", - "within": "Username (min 3 chars)" - }, - "value": "1234" - }, - { - "name": "type", - "summary": "type \"These are notes\" into textbox \"notes-input\" in \"Username (min 3 chars)\"", - "target": { - "role": "textbox", - "testId": "notes-input", - "selector": "id=notes-input", - "within": "Username (min 3 chars)" - }, - "value": "These are notes" - }, - { - "name": "tap", - "summary": "tap group \"Submit\" in \"Username (min 3 chars)\"", - "target": { - "role": "group", - "name": "Submit", - "testId": "submit-button", - "selector": "id=submit-button", - "within": "Username (min 3 chars)" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Text%20Input%20Variations", - "targetId": "android-emulator", - "instructionDigest": "fbc47cae1853b33f40b2f33da5fd5f41dfc811c660e7aecb291ad1d964757d21" - }, - "summary": "Filled username \"tester\", PIN with four digits, and notes exceeding ten characters, then submitted. The screen now displays \"Form submitted.\".", - "startPath": "dev.e2e.benchmark", - "endPath": "dev.e2e.benchmark", - "endAnchors": [ - { - "role": "text", - "name": "Form submitted", - "testId": "success-message" - } - ], - "endWaitMs": 11645 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/a5de499f27a44803c5735c66c52a95a09e4d801ff679df37b16614cc3f67435f.json b/apps/mobile-benchmark/.e2e/cache/a5de499f27a44803c5735c66c52a95a09e4d801ff679df37b16614cc3f67435f.json new file mode 100644 index 000000000..b13adab4e --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/a5de499f27a44803c5735c66c52a95a09e4d801ff679df37b16614cc3f67435f.json @@ -0,0 +1,101 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:00:06.193Z", + "payload": { + "actions": [ + { + "name": "tool", + "summary": "tool swipe" + }, + { + "name": "tool", + "summary": "tool swipe" + }, + { + "name": "tap", + "summary": "tap other \"Claim reward\"", + "target": { + "role": "other", + "name": "Claim reward", + "testId": "claim-button", + "selector": "id=claim-button" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Async%20States", + "targetId": "ios-simulator", + "instructionDigest": "fdc4e142da6e03180c7a75853bbbeb788efe25a58ccefefc640c6041870b36ce", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Waited for the reward area to load, pulled down on it to refresh and reveal the claim control, then tapped Claim reward. The screen now shows “Reward claimed.”", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "other", + "name": "Vertical scroll bar, 1 page", + "value": "0%" + }, + { + "role": "other", + "name": "Horizontal scroll bar, 1 page", + "value": "0%" + }, + { + "role": "other", + "name": "Vertical scroll bar, 1 page" + }, + { + "role": "other", + "name": "Reward claimed", + "testId": "reward-scroll" + }, + { + "role": "scroll-view", + "name": "Reward claimed" + }, + { + "role": "text", + "name": "Reward claimed", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "status", + "name": "In progress", + "value": "1" + }, + { + "role": "text", + "name": "Loading…" + }, + { + "role": "other", + "name": "Loading…" + }, + { + "role": "other", + "name": "In progress" + } + ], + "endWaitMs": 17354, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/a9edb5ea3fab3f25768a94e11c962ae0b989681df802e0bc3d6a547f2e3a6cd3.json b/apps/mobile-benchmark/.e2e/cache/a9edb5ea3fab3f25768a94e11c962ae0b989681df802e0bc3d6a547f2e3a6cd3.json deleted file mode 100644 index 860f28be3..000000000 --- a/apps/mobile-benchmark/.e2e/cache/a9edb5ea3fab3f25768a94e11c962ae0b989681df802e0bc3d6a547f2e3a6cd3.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T19:26:00.742Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap other \"Buy with Apple Pay\"", - "target": { - "role": "other", - "name": "Buy with Apple Pay", - "testId": "apple-pay-button", - "selector": "id=apple-pay-button" - } - }, - { - "name": "tap", - "summary": "tap button \"Pay with Passcode\"", - "target": { - "role": "button", - "name": "Pay with Passcode", - "testId": "footer", - "selector": "id=footer" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Apple%20Pay", - "targetId": "ios-simulator", - "instructionDigest": "94f39431cf1ce1c380678b2d8ee27fb1e2a33fe296495a90c007ad4dc3f2ae45" - }, - "summary": "The Apple Pay flow is complete; the current screen confirms “Payment complete: $8.99.”", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Apple Pay", - "endAnchors": [ - { - "role": "navigation", - "testId": "Apple Pay" - }, - { - "role": "text", - "name": "Payment complete: $8.99", - "testId": "success-message" - } - ], - "endWaitMs": 22492 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/af0d06bce32029b69410971e786a9f2b9910e172a960ce46d9a767f71e7da441.json b/apps/mobile-benchmark/.e2e/cache/af0d06bce32029b69410971e786a9f2b9910e172a960ce46d9a767f71e7da441.json deleted file mode 100644 index d215d837f..000000000 --- a/apps/mobile-benchmark/.e2e/cache/af0d06bce32029b69410971e786a9f2b9910e172a960ce46d9a767f71e7da441.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-24T07:56:55.989Z", - "payload": { - "actions": [ - { - "name": "scroll", - "summary": "scroll down on group \"benchmark-list\" in \"Scroll down and tap Item 137 to complete\"", - "direction": "down", - "target": { - "role": "group", - "testId": "benchmark-list", - "selector": "id=benchmark-list", - "within": "Scroll down and tap Item 137 to complete" - }, - "spans": 0.9125 - }, - { - "name": "scroll", - "summary": "scroll down on group \"benchmark-list\" in \"Item 14\"", - "direction": "down", - "target": { - "role": "group", - "testId": "benchmark-list", - "selector": "id=benchmark-list", - "within": "Item 14" - }, - "spans": 0.9125 - }, - { - "name": "scroll", - "summary": "scroll down on group \"benchmark-list\" in \"Item 31\"", - "direction": "down", - "target": { - "role": "group", - "testId": "benchmark-list", - "selector": "id=benchmark-list", - "within": "Item 31" - }, - "spans": 0.9125 - }, - { - "name": "scroll", - "summary": "scroll down on group \"benchmark-list\" in \"Item 44\"", - "direction": "down", - "target": { - "role": "group", - "testId": "benchmark-list", - "selector": "id=benchmark-list", - "within": "Item 44" - }, - "spans": 0.9125 - }, - { - "name": "scroll", - "summary": "scroll down on group \"benchmark-list\" in \"Item 61\"", - "direction": "down", - "target": { - "role": "group", - "testId": "benchmark-list", - "selector": "id=benchmark-list", - "within": "Item 61" - }, - "spans": 0.9125 - }, - { - "name": "scroll", - "summary": "scroll down on group \"benchmark-list\" in \"Item 74\"", - "direction": "down", - "target": { - "role": "group", - "testId": "benchmark-list", - "selector": "id=benchmark-list", - "within": "Item 74" - }, - "spans": 0.9125 - }, - { - "name": "scroll", - "summary": "scroll down on group \"benchmark-list\" in \"Item 91\"", - "direction": "down", - "target": { - "role": "group", - "testId": "benchmark-list", - "selector": "id=benchmark-list", - "within": "Item 91" - }, - "spans": 0.9125 - }, - { - "name": "scroll", - "summary": "scroll down on group \"benchmark-list\" in \"Item 105\"", - "direction": "down", - "target": { - "role": "group", - "testId": "benchmark-list", - "selector": "id=benchmark-list", - "within": "Item 105" - }, - "spans": 0.9125 - }, - { - "name": "tap", - "summary": "tap group \"Item 137\" in \"Item 121\"", - "target": { - "role": "group", - "name": "Item 137", - "testId": "item-137", - "selector": "id=item-137", - "within": "Item 121" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Infinite%20Scroll%20List", - "targetId": "android-emulator", - "instructionDigest": "240960ef8daa93f30d3183a42cf877c23681993025141766e480102a3eca2d75" - }, - "summary": "Scrolled the paginated list until Item 137 appeared and tapped it. The screen now shows “Found item 137.”.", - "startPath": "dev.e2e.benchmark", - "endPath": "dev.e2e.benchmark", - "endAnchors": [ - { - "role": "text", - "name": "Found item 137", - "testId": "success-message" - } - ], - "endWaitMs": 11853 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/af836a015b0e2835727c1487567029524ac4731ab26c41e350d54656b9641aea.json b/apps/mobile-benchmark/.e2e/cache/af836a015b0e2835727c1487567029524ac4731ab26c41e350d54656b9641aea.json deleted file mode 100644 index 6c3820796..000000000 --- a/apps/mobile-benchmark/.e2e/cache/af836a015b0e2835727c1487567029524ac4731ab26c41e350d54656b9641aea.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-24T08:01:18.906Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap group \"Enable microphone\" in \"Voice notes\"", - "target": { - "role": "group", - "name": "Enable microphone", - "testId": "request-permission", - "selector": "id=request-permission", - "within": "Voice notes" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Permission%20Prompt", - "targetId": "android-emulator", - "instructionDigest": "b0942b32f51f5f05d38db2a1978624dad1187acfb8aca674dbbb09cc9c29ac87" - }, - "summary": "Tapped Enable microphone. The app now displays “Microphone enabled,” confirming microphone access was granted.", - "startPath": "dev.e2e.benchmark", - "endPath": "dev.e2e.benchmark", - "endAnchors": [ - { - "role": "text", - "name": "Microphone enabled", - "testId": "success-message" - } - ], - "endWaitMs": 12168 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/b0f2667c3389282144384dd4387d5d6fd3047839e79a2861ae42f7e65aa75085.json b/apps/mobile-benchmark/.e2e/cache/b0f2667c3389282144384dd4387d5d6fd3047839e79a2861ae42f7e65aa75085.json new file mode 100644 index 000000000..89b4e7d00 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/b0f2667c3389282144384dd4387d5d6fd3047839e79a2861ae42f7e65aa75085.json @@ -0,0 +1,122 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T06:52:40.428Z", + "payload": { + "actions": [ + { + "name": "type", + "summary": "type \"testuser\" into textbox \"username-input\" in \"Username (min 3 chars)\"", + "target": { + "role": "textbox", + "testId": "username-input", + "selector": "id=username-input", + "within": "Username (min 3 chars)" + }, + "value": "testuser" + }, + { + "name": "type", + "summary": "type \"4827\" into textbox \"pin-input\" in \"Username (min 3 chars)\"", + "target": { + "role": "textbox", + "testId": "pin-input", + "selector": "id=pin-input", + "inputPurpose": "password", + "within": "Username (min 3 chars)" + }, + "value": "4827" + }, + { + "name": "type", + "summary": "type \"These are at least ten characters.\" into textbox \"notes-input\" in \"Username (min 3 chars)\"", + "target": { + "role": "textbox", + "testId": "notes-input", + "selector": "id=notes-input", + "within": "Username (min 3 chars)" + }, + "value": "These are at least ten characters." + }, + { + "name": "tap", + "summary": "tap group \"Submit\" in \"Username (min 3 chars)\"", + "target": { + "role": "group", + "name": "Submit", + "testId": "submit-button", + "selector": "id=submit-button", + "within": "Username (min 3 chars)" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Text%20Input%20Variations", + "targetId": "android-emulator", + "instructionDigest": "fbc47cae1853b33f40b2f33da5fd5f41dfc811c660e7aecb291ad1d964757d21", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Entered username \"testuser\", a 4-digit PIN, and notes exceeding 10 characters, then submitted. The screen confirms “Form submitted.”", + "startPath": "dev.e2e.benchmark", + "endPath": "dev.e2e.benchmark", + "endAnchors": [ + { + "role": "text", + "name": "Form submitted", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Username (min 3 chars)" + }, + { + "role": "textbox", + "testId": "username-input" + }, + { + "role": "text", + "name": "PIN (exactly 4 digits, secure)" + }, + { + "role": "textbox", + "testId": "pin-input", + "inputPurpose": "password" + }, + { + "role": "text", + "name": "Notes (multiline, min 10 chars) — 0/10" + }, + { + "role": "textbox", + "testId": "notes-input" + }, + { + "role": "text", + "name": "Submit" + }, + { + "role": "group", + "name": "Submit", + "testId": "submit-button" + } + ], + "endWaitMs": 11669, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/b949858068f8bf20c132506913df0b6f20389d8df8d5bd23acb5dd8173ac431f.json b/apps/mobile-benchmark/.e2e/cache/b949858068f8bf20c132506913df0b6f20389d8df8d5bd23acb5dd8173ac431f.json deleted file mode 100644 index 60298c2cc..000000000 --- a/apps/mobile-benchmark/.e2e/cache/b949858068f8bf20c132506913df0b6f20389d8df8d5bd23acb5dd8173ac431f.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-24T11:18:55.032Z", - "payload": { - "actions": [ - { - "name": "tool", - "summary": "tool type (run-time value)", - "derived": "pixels" - }, - { - "name": "tool", - "summary": "tool type (run-time value)", - "derived": "pixels" - }, - { - "name": "tap", - "summary": "tap group \"SIGN IN\" in \"Use tester@tester.army / " - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Flattened%20Login", - "targetId": "android-emulator", - "instructionDigest": "2ac57f8c28a31069613ffb9bbf8151a42ea8ceb4bb65d0ad6dcd9eea0b8a2755" - }, - "summary": "Used the hinted credentials tester@tester.army and . The screen now shows “Logged in successfully.”.", - "startPath": "dev.e2e.benchmark", - "endPath": "dev.e2e.benchmark", - "endAnchors": [ - { - "role": "text", - "name": "Logged in successfully" - } - ], - "endWaitMs": 14919 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/ba44313bb2be29f83c78e8359d44986769a88c37424dc22556c2d9d74133309a.json b/apps/mobile-benchmark/.e2e/cache/ba44313bb2be29f83c78e8359d44986769a88c37424dc22556c2d9d74133309a.json deleted file mode 100644 index 8cbb0afc4..000000000 --- a/apps/mobile-benchmark/.e2e/cache/ba44313bb2be29f83c78e8359d44986769a88c37424dc22556c2d9d74133309a.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T17:01:11.270Z", - "payload": { - "actions": [ - { - "name": "tapAt", - "summary": "tap the point (280, 540) on other \"Benchmark Examples\"", - "point": { - "x": 280, - "y": 540 - }, - "viewport": { - "width": 402, - "height": 874 - }, - "within": { - "target": { - "role": "other", - "name": "Benchmark Examples" - }, - "fx": 0.6965, - "fy": 0.6178 - } - }, - { - "name": "tapAt", - "summary": "tap the point (122, 539) on other \"Benchmark Examples\"", - "point": { - "x": 122, - "y": 539 - }, - "viewport": { - "width": 402, - "height": 874 - }, - "within": { - "target": { - "role": "other", - "name": "Benchmark Examples" - }, - "fx": 0.3035, - "fy": 0.6167 - } - }, - { - "name": "tapAt", - "summary": "tap the point (202, 539) on other \"Benchmark Examples\"", - "point": { - "x": 202, - "y": 539 - }, - "viewport": { - "width": 402, - "height": 874 - }, - "within": { - "target": { - "role": "other", - "name": "Benchmark Examples" - }, - "fx": 0.5025, - "fy": 0.6167 - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Vision%20Only", - "targetId": "ios-simulator", - "instructionDigest": "e950bf904a3587f9a1d42a4dc15c29517000d20a1e31c8bd896e96a9c6ebd6d1" - }, - "summary": "Followed the on-screen sequence by tapping square, circle, then diamond. The screen now displays “Sequence complete.”", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endWaitMs": 12400 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/fc56706b3af952c5173b4ca4fb5d84f6cc07779dc92871500c5fc407a8670950.json b/apps/mobile-benchmark/.e2e/cache/bac4ef2c2e541ff451b7cacb5b4470aa86a01fbb224794ca75972e219b5215e8.json similarity index 67% rename from apps/mobile-benchmark/.e2e/cache/fc56706b3af952c5173b4ca4fb5d84f6cc07779dc92871500c5fc407a8670950.json rename to apps/mobile-benchmark/.e2e/cache/bac4ef2c2e541ff451b7cacb5b4470aa86a01fbb224794ca75972e219b5215e8.json index ab23909e2..486580891 100644 --- a/apps/mobile-benchmark/.e2e/cache/fc56706b3af952c5173b4ca4fb5d84f6cc07779dc92871500c5fc407a8670950.json +++ b/apps/mobile-benchmark/.e2e/cache/bac4ef2c2e541ff451b7cacb5b4470aa86a01fbb224794ca75972e219b5215e8.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T21:02:09.516Z", + "createdAt": "2026-10-09T06:59:56.716Z", "payload": { "actions": [ { @@ -10,6 +10,7 @@ "role": "textbox", "name": "e.g. jane@example.com", "testId": "email-input", + "placeholder": "e.g. jane@example.com", "selector": "id=email-input", "within": "Step 1 of 3" }, @@ -37,6 +38,7 @@ "role": "textbox", "name": "e.g. Jane", "testId": "first-name-input", + "placeholder": "e.g. Jane", "selector": "id=first-name-input", "within": "Step 2 of 3" }, @@ -49,6 +51,7 @@ "role": "textbox", "name": "e.g. Merchant", "testId": "last-name-input", + "placeholder": "e.g. Merchant", "selector": "id=last-name-input", "within": "Step 2 of 3" }, @@ -76,6 +79,7 @@ "role": "textbox", "name": "e.g. 0612435678", "testId": "phone-input", + "placeholder": "e.g. 0612435678", "selector": "id=phone-input", "within": "Step 3 of 3" }, @@ -104,9 +108,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Sequential%20Onboarding", "targetId": "android-emulator", - "instructionDigest": "970c887978c38f936a27d9b90e47b8e93318f07069e136ba3b343e8bfa936525" + "instructionDigest": "970c887978c38f936a27d9b90e47b8e93318f07069e136ba3b343e8bfa936525", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Completed the signup wizard, dismissing the keyboard before each Continue. The confirmation screen shows jane@example.com, Jane Merchant, and 0612435678.", + "summary": "Completed all three signup steps using jane@example.com, Jane Merchant, and 0612435678. Dismissed the keyboard before each Continue; the final screen confirms “Onboarding complete” and echoes all three values.", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -131,6 +138,45 @@ "testId": "echo-phone" } ], - "endWaitMs": 11900 + "goneAnchors": [ + { + "role": "text", + "name": "Step 1 of 3" + }, + { + "role": "text", + "name": "Let's start with your email" + }, + { + "role": "textbox", + "name": "e.g. jane@example.com", + "testId": "email-input", + "placeholder": "e.g. jane@example.com" + }, + { + "role": "text", + "name": "Continue" + }, + { + "role": "group", + "testId": "onboarding-step-email" + }, + { + "role": "group", + "name": "Continue", + "testId": "continue-button" + } + ], + "endWaitMs": 11700, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/11c3c1a5a4a3edf340c43e45a95fe4b2c36fc989807e28ebd958600e4ed4b1fe.json b/apps/mobile-benchmark/.e2e/cache/be480e468e8e1ce9d711a913a342576d12f268717ddaf2b3b757bc52552aa633.json similarity index 59% rename from apps/mobile-benchmark/.e2e/cache/11c3c1a5a4a3edf340c43e45a95fe4b2c36fc989807e28ebd958600e4ed4b1fe.json rename to apps/mobile-benchmark/.e2e/cache/be480e468e8e1ce9d711a913a342576d12f268717ddaf2b3b757bc52552aa633.json index 70757d38c..a164dffb6 100644 --- a/apps/mobile-benchmark/.e2e/cache/11c3c1a5a4a3edf340c43e45a95fe4b2c36fc989807e28ebd958600e4ed4b1fe.json +++ b/apps/mobile-benchmark/.e2e/cache/be480e468e8e1ce9d711a913a342576d12f268717ddaf2b3b757bc52552aa633.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T08:01:49.758Z", + "createdAt": "2026-10-09T06:59:00.440Z", "payload": { "actions": [ { @@ -44,9 +44,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Error%20Recovery", "targetId": "android-emulator", - "instructionDigest": "e8369dfb1ec63a3fa2636f3e1803fa229587d469fcb7abdafcfbbb046625544c" + "instructionDigest": "e8369dfb1ec63a3fa2636f3e1803fa229587d469fcb7abdafcfbbb046625544c", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Retried the failed drafts load; the draft list loaded. Deleted the “Untitled draft — ‘Quarterly numbers…’” draft and confirmed deletion; the screen shows “Draft deleted.”", + "summary": "Retried the failed draft load; the draft list loaded. Deleted the “Untitled draft — ‘Quarterly numbers…’” and confirmed deletion; the screen shows “Draft deleted.”", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -56,6 +59,26 @@ "testId": "success-message" } ], - "endWaitMs": 11840 + "goneAnchors": [ + { + "role": "text", + "name": "Loading drafts…" + }, + { + "role": "group", + "testId": "loading-indicator" + } + ], + "endWaitMs": 11903, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/c0d68bc778f40b67bf2783588be85c1605082e05990a15b7ea413123b981f08d.json b/apps/mobile-benchmark/.e2e/cache/c0d68bc778f40b67bf2783588be85c1605082e05990a15b7ea413123b981f08d.json new file mode 100644 index 000000000..3c0e15cd3 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/c0d68bc778f40b67bf2783588be85c1605082e05990a15b7ea413123b981f08d.json @@ -0,0 +1,86 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T06:54:08.240Z", + "payload": { + "actions": [ + { + "name": "longPress", + "summary": "long-press group \"Hold me\" in \"Step 1 of 3\"", + "target": { + "role": "group", + "name": "Hold me", + "testId": "long-press-target", + "selector": "id=long-press-target", + "within": "Step 1 of 3" + } + }, + { + "name": "tool", + "summary": "tool swipe" + }, + { + "name": "tool", + "summary": "tool swipe" + }, + { + "name": "doubleTap", + "summary": "double-tap group \"Double-tap me\" in \"Step 3 of 3\"", + "target": { + "role": "group", + "name": "Double-tap me", + "testId": "double-tap-target", + "selector": "id=double-tap-target", + "within": "Step 3 of 3" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Gestures", + "targetId": "android-emulator", + "instructionDigest": "548193505ec38bc1149592fdc74a267de461a8b29e29f4e7a168b20807a81a11", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Long-pressed the first target, swiped the card left, and double-tapped the last target. The screen confirms “All gestures completed.”", + "startPath": "dev.e2e.benchmark", + "endPath": "dev.e2e.benchmark", + "endAnchors": [ + { + "role": "text", + "name": "All gestures completed", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Step 1 of 3" + }, + { + "role": "text", + "name": "Hold me" + }, + { + "role": "group", + "name": "Hold me", + "testId": "long-press-target" + } + ], + "endWaitMs": 15925, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/c10de289ca5fcd0b25a8687ba60cd92e30ad3577e6f01351a62ef5f797bf177b.json b/apps/mobile-benchmark/.e2e/cache/c10de289ca5fcd0b25a8687ba60cd92e30ad3577e6f01351a62ef5f797bf177b.json deleted file mode 100644 index d8e7a17ef..000000000 --- a/apps/mobile-benchmark/.e2e/cache/c10de289ca5fcd0b25a8687ba60cd92e30ad3577e6f01351a62ef5f797bf177b.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T16:59:16.892Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap button \"Actions, tab, 3 of 3\"", - "target": { - "role": "button", - "name": "Actions, tab, 3 of 3" - } - }, - { - "name": "tap", - "summary": "tap other \"Complete action\"", - "target": { - "role": "other", - "name": "Complete action", - "testId": "complete-action-button", - "selector": "id=complete-action-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Bottom%20Tabs", - "targetId": "ios-simulator", - "instructionDigest": "e537c4fc20970c63b73faeca0620f6f3aa5afdc8ad6e5b0964959e0f5762de45" - }, - "summary": "Opened the Actions tab and pressed its Complete action control. The screen now displays “Action completed.”", - "startPath": "dev.e2e.benchmark", - "endPath": "dev.e2e.benchmark", - "endAnchors": [ - { - "role": "text", - "name": "Actions" - }, - { - "role": "other", - "name": "Action completed" - }, - { - "role": "other", - "name": "Actions" - }, - { - "role": "text", - "name": "Action completed", - "testId": "success-message" - } - ], - "endWaitMs": 10305 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/ce35940e611918c89d0668c4fd4b14bb5765a06a4df18e0ac3523ca5800398b0.json b/apps/mobile-benchmark/.e2e/cache/c31dbe874e4e3538e48ba58a9bdde56e1c371bdc46f9c1398f3fb3bfdd496453.json similarity index 55% rename from apps/mobile-benchmark/.e2e/cache/ce35940e611918c89d0668c4fd4b14bb5765a06a4df18e0ac3523ca5800398b0.json rename to apps/mobile-benchmark/.e2e/cache/c31dbe874e4e3538e48ba58a9bdde56e1c371bdc46f9c1398f3fb3bfdd496453.json index 3dcdc7e49..dfcba0cfd 100644 --- a/apps/mobile-benchmark/.e2e/cache/ce35940e611918c89d0668c4fd4b14bb5765a06a4df18e0ac3523ca5800398b0.json +++ b/apps/mobile-benchmark/.e2e/cache/c31dbe874e4e3538e48ba58a9bdde56e1c371bdc46f9c1398f3fb3bfdd496453.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T19:32:21.870Z", + "createdAt": "2026-10-09T07:20:08.210Z", "payload": { "actions": [ { @@ -21,10 +21,6 @@ "name": "tool", "summary": "tool swipe" }, - { - "name": "tool", - "summary": "tool swipe" - }, { "name": "doubleTap", "summary": "double-tap other \"Double-tap me\"", @@ -43,9 +39,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Gestures", "targetId": "ios-simulator", - "instructionDigest": "548193505ec38bc1149592fdc74a267de461a8b29e29f4e7a168b20807a81a11" + "instructionDigest": "548193505ec38bc1149592fdc74a267de461a8b29e29f4e7a168b20807a81a11", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Continued from the current screen, swiped the card left, then double-tapped the last target. The screen now displays “All gestures completed.”", + "summary": "Continued from the recorded long-press state, swiped the card left, then double-tapped the last target. The screen now confirms “All gestures completed.”", "startPath": "dev.e2e.benchmark / Benchmark Examples", "endPath": "dev.e2e.benchmark / Benchmark Examples", "endAnchors": [ @@ -59,6 +58,31 @@ "testId": "success-message" } ], - "endWaitMs": 12743 + "goneAnchors": [ + { + "role": "text", + "name": "Step 1 of 3" + }, + { + "role": "other", + "name": "Hold me", + "testId": "long-press-target" + }, + { + "role": "other", + "name": "Step 1 of 3" + } + ], + "endWaitMs": 13624, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/c63e3ef74a352a6ffee15ef0644b7f9c167b16ed4b3529bcfb41a8ddfc00c882.json b/apps/mobile-benchmark/.e2e/cache/c63e3ef74a352a6ffee15ef0644b7f9c167b16ed4b3529bcfb41a8ddfc00c882.json new file mode 100644 index 000000000..e925aa5a6 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/c63e3ef74a352a6ffee15ef0644b7f9c167b16ed4b3529bcfb41a8ddfc00c882.json @@ -0,0 +1,92 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T06:56:44.831Z", + "payload": { + "actions": [ + { + "name": "scrollUntil", + "summary": "scroll down until \"Row 0512\" shows (55 screens)", + "text": "Row 0512", + "direction": "down" + }, + { + "name": "tap", + "summary": "tap group \"Row 0512\" in \"Row 0500\"", + "target": { + "role": "group", + "name": "Row 0512", + "testId": "row-512", + "selector": "id=row-512", + "within": "Row 0500" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Huge%20Virtualized%20List", + "targetId": "android-emulator", + "instructionDigest": "0cbf462391106879e99df44b824d6b362b915d99d44a02d241309ec3d4bf4041", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Scrolled the virtualized list to Row 0512 and tapped it. The screen now shows “Found Row 0512.”", + "startPath": "dev.e2e.benchmark", + "endPath": "dev.e2e.benchmark", + "endAnchors": [ + { + "role": "text", + "name": "Found Row 0512", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "All 600 rows are loaded. Scroll to Row 0512 and tap it." + }, + { + "role": "text", + "name": "Row 0001" + }, + { + "role": "text", + "name": "Row 0002" + }, + { + "role": "text", + "name": "Row 0003" + }, + { + "role": "text", + "name": "Row 0004" + }, + { + "role": "text", + "name": "Row 0005" + }, + { + "role": "text", + "name": "Row 0006" + }, + { + "role": "text", + "name": "Row 0007" + } + ], + "endWaitMs": 11730, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/c7263c6939a414d58611e39e71acaece0e932653161ff158cac41a4a816eea39.json b/apps/mobile-benchmark/.e2e/cache/c7263c6939a414d58611e39e71acaece0e932653161ff158cac41a4a816eea39.json new file mode 100644 index 000000000..066bfc8e1 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/c7263c6939a414d58611e39e71acaece0e932653161ff158cac41a4a816eea39.json @@ -0,0 +1,101 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:07:55.111Z", + "payload": { + "actions": [ + { + "name": "tap", + "summary": "tap other \"Buy with Apple Pay\"", + "target": { + "role": "other", + "name": "Buy with Apple Pay", + "testId": "apple-pay-button", + "selector": "id=apple-pay-button" + } + }, + { + "name": "tap", + "summary": "tap button \"Pay with Passcode\"", + "target": { + "role": "button", + "name": "Pay with Passcode", + "testId": "footer", + "selector": "id=footer" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Apple%20Pay%20Billing%20Address", + "targetId": "ios-simulator", + "instructionDigest": "bdc2a58d2726e93ed533d5388d2ac639914cbfa62317aebc063aebace72496ff", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Started the Apple Pay payment and authorized it with the simulated card. Payment completed for $8.99, and the confirmation shows Billing ZIP: 95014, the requested billing address information.", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "other", + "name": "Payment complete: $8.99" + }, + { + "role": "text", + "name": "Payment complete: $8.99", + "testId": "success-message" + }, + { + "role": "text", + "name": "Billing ZIP: 95014", + "testId": "billing-zip" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Order summary" + }, + { + "role": "text", + "name": "Trail Mix 500 g — $6.99" + }, + { + "role": "text", + "name": "Rush delivery — $2.00" + }, + { + "role": "text", + "name": "Total — $8.99" + }, + { + "role": "text", + "name": "A billing address is required to complete this payment." + }, + { + "role": "other", + "name": "Buy with Apple Pay", + "testId": "apple-pay-button" + }, + { + "role": "other", + "name": "Order summary" + } + ], + "endWaitMs": 17520, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/c88b3e2074686fa95172580baee395a9efd45c3ce815d8fdfc695293c1f94228.json b/apps/mobile-benchmark/.e2e/cache/c88b3e2074686fa95172580baee395a9efd45c3ce815d8fdfc695293c1f94228.json new file mode 100644 index 000000000..37f6a2a8b --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/c88b3e2074686fa95172580baee395a9efd45c3ce815d8fdfc695293c1f94228.json @@ -0,0 +1,74 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:04:52.150Z", + "payload": { + "actions": [ + { + "name": "tap", + "summary": "tap other \"Enable microphone\"", + "target": { + "role": "other", + "name": "Enable microphone", + "testId": "request-permission", + "selector": "id=request-permission" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Permission%20Prompt", + "targetId": "ios-simulator", + "instructionDigest": "b0942b32f51f5f05d38db2a1978624dad1187acfb8aca674dbbb09cc9c29ac87", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Requested microphone access and allowed it in the system dialog. The screen now confirms “Microphone enabled.”", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "other", + "name": "Microphone enabled" + }, + { + "role": "text", + "name": "Microphone enabled", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Voice notes" + }, + { + "role": "text", + "name": "Recording voice notes requires microphone access. Allow the permission when the system asks." + }, + { + "role": "other", + "name": "Enable microphone", + "testId": "request-permission" + }, + { + "role": "other", + "name": "Voice notes" + } + ], + "endWaitMs": 11960, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/d949b5c07b297cd4b2f4cef400177115bdda1a7646a14cee88d7e193cc8568ad.json b/apps/mobile-benchmark/.e2e/cache/cb2bc9d1e809fa5cf3823e7df21dc826a605c2192f8e2e5d2ceaa563cbde4236.json similarity index 64% rename from apps/mobile-benchmark/.e2e/cache/d949b5c07b297cd4b2f4cef400177115bdda1a7646a14cee88d7e193cc8568ad.json rename to apps/mobile-benchmark/.e2e/cache/cb2bc9d1e809fa5cf3823e7df21dc826a605c2192f8e2e5d2ceaa563cbde4236.json index c7bbd14da..d38222976 100644 --- a/apps/mobile-benchmark/.e2e/cache/d949b5c07b297cd4b2f4cef400177115bdda1a7646a14cee88d7e193cc8568ad.json +++ b/apps/mobile-benchmark/.e2e/cache/cb2bc9d1e809fa5cf3823e7df21dc826a605c2192f8e2e5d2ceaa563cbde4236.json @@ -1,14 +1,14 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-23T19:17:41.516Z", + "createdAt": "2026-10-09T06:57:52.604Z", "payload": { "actions": [ { "name": "tapAt", - "summary": "tap the point (239, 515) on other \"Tap the green circle to continue\"", + "summary": "tap the point (237, 512) on other \"Tap the green circle to continue\"", "point": { - "x": 239, - "y": 515 + "x": 237, + "y": 512 }, "viewport": { "width": 402, @@ -19,16 +19,16 @@ "role": "other", "name": "Tap the green circle to continue" }, - "fx": 0.5945, - "fy": 0.5264 + "fx": 0.5896, + "fy": 0.5224 } }, { "name": "tapAt", - "summary": "tap the point (165, 515) on other \"Enter the code 7291 and press the arrow…\"", + "summary": "tap the point (165, 512) on other \"Enter the code 7291 and press the arrow…\"", "point": { "x": 165, - "y": 515 + "y": 512 }, "viewport": { "width": 402, @@ -40,27 +40,7 @@ "name": "Enter the code 7291 and press the arrow, →" }, "fx": 0.4104, - "fy": 0.5264 - } - }, - { - "name": "tapAt", - "summary": "tap the point (165, 514) on other \"Enter the code 7291 and press the arrow…\"", - "point": { - "x": 165, - "y": 514 - }, - "viewport": { - "width": 402, - "height": 874 - }, - "within": { - "target": { - "role": "other", - "name": "Enter the code 7291 and press the arrow, →" - }, - "fx": 0.4104, - "fy": 0.5251 + "fy": 0.5224 } }, { @@ -96,9 +76,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Broken%20Accessibility", "targetId": "ios-simulator", - "instructionDigest": "39a6071dd8e903747ecddcc20ac06b4c62c7e399b90ef1a0c2e79a3bcb5c4e92" + "instructionDigest": "39a6071dd8e903747ecddcc20ac06b4c62c7e399b90ef1a0c2e79a3bcb5c4e92", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Tapped the green circle, entered code 7291, and submitted it. The screen now displays “Access granted.”} Alex", + "summary": "Tapped the green circle, entered code 7291, and pressed the arrow. The screen now displays “Access granted.”", "startPath": "dev.e2e.benchmark / Benchmark Examples", "endPath": "dev.e2e.benchmark / Benchmark Examples", "endAnchors": [ @@ -107,6 +90,22 @@ "name": "Access granted" } ], - "endWaitMs": 13207 + "goneAnchors": [ + { + "role": "other", + "name": "Tap the green circle to continue" + } + ], + "endWaitMs": 13942, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/ccabb55841076f013cc3014d25e96722580d13ec6b696e6161ff64d113e9be1f.json b/apps/mobile-benchmark/.e2e/cache/ccabb55841076f013cc3014d25e96722580d13ec6b696e6161ff64d113e9be1f.json new file mode 100644 index 000000000..6868415f9 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/ccabb55841076f013cc3014d25e96722580d13ec6b696e6161ff64d113e9be1f.json @@ -0,0 +1,131 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:04:43.228Z", + "payload": { + "actions": [ + { + "name": "type", + "summary": "type \"TA-BENCH-50\" into textbox \"Coupon code\"", + "target": { + "role": "textbox", + "name": "Coupon code" + }, + "value": "TA-BENCH-50" + }, + { + "name": "check", + "summary": "check switch \"I accept the terms\"", + "target": { + "role": "switch", + "name": "I accept the terms" + }, + "checked": true + }, + { + "name": "tap", + "summary": "tap button \"Apply coupon\"", + "target": { + "role": "button", + "name": "Apply coupon" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20WebView%20Accessibility", + "targetId": "ios-simulator", + "instructionDigest": "60e9576a643a70f4d33968ccc19d845112ca2ed50212584e9e7aadc34707e5c8", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Read coupon code TA-BENCH-50, entered it, accepted the terms, and applied it. The web view now displays “Coupon applied.”", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "textbox", + "name": "Coupon code", + "value": "TA-BENCH-50" + }, + { + "role": "switch", + "name": "I accept the terms", + "value": "1", + "states": [ + "checked" + ] + }, + { + "role": "other", + "name": "Vertical scroll bar, 2 pages", + "value": "0%" + }, + { + "role": "other", + "name": "Coupon applied" + }, + { + "role": "text", + "name": "Coupon applied", + "testId": "success-message" + }, + { + "role": "other", + "name": "Vertical scroll bar, 2 pages", + "testId": "coupon-webview" + }, + { + "role": "web-view", + "name": "Vertical scroll bar, 2 pages" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Apply the coupon shown inside the web page (accept the terms first)" + }, + { + "role": "textbox", + "name": "Coupon code" + }, + { + "role": "switch", + "name": "I accept the terms", + "value": "0" + }, + { + "role": "other", + "name": "Vertical scroll bar, 1 page", + "value": "0%" + }, + { + "role": "other", + "name": "Apply the coupon shown inside the web page (accept the terms first)" + }, + { + "role": "other", + "name": "Vertical scroll bar, 1 page", + "testId": "coupon-webview" + }, + { + "role": "web-view", + "name": "Vertical scroll bar, 1 page" + } + ], + "endWaitMs": 12286, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/35ea6f3cb5324c8ba2c81599e0816065cc2828d949ae74887def5807fc13283e.json b/apps/mobile-benchmark/.e2e/cache/d0fbdd88e282e0528e734ff6145a9f78f209e4bc4be0a4245d067651a80ee4a1.json similarity index 51% rename from apps/mobile-benchmark/.e2e/cache/35ea6f3cb5324c8ba2c81599e0816065cc2828d949ae74887def5807fc13283e.json rename to apps/mobile-benchmark/.e2e/cache/d0fbdd88e282e0528e734ff6145a9f78f209e4bc4be0a4245d067651a80ee4a1.json index 774a8656a..260affee4 100644 --- a/apps/mobile-benchmark/.e2e/cache/35ea6f3cb5324c8ba2c81599e0816065cc2828d949ae74887def5807fc13283e.json +++ b/apps/mobile-benchmark/.e2e/cache/d0fbdd88e282e0528e734ff6145a9f78f209e4bc4be0a4245d067651a80ee4a1.json @@ -1,63 +1,42 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T11:16:14.394Z", + "createdAt": "2026-10-09T06:53:41.843Z", "payload": { "actions": [ { "name": "tapAt", - "summary": "tap the point (749, 1420) on group", + "summary": "tap the point (749, 1458) on group", "point": { "x": 749, - "y": 1420 + "y": 1458 }, "viewport": { "width": 1080, "height": 2400 - }, - "within": { - "target": { - "role": "group" - }, - "fx": 0.4898, - "fy": 0.483 } }, { "name": "tapAt", - "summary": "tap the point (331, 1420) on group", + "summary": "tap the point (331, 1458) on group", "point": { "x": 331, - "y": 1420 + "y": 1458 }, "viewport": { "width": 1080, "height": 2400 - }, - "within": { - "target": { - "role": "group" - }, - "fx": 0.5034, - "fy": 0.483 } }, { "name": "tapAt", - "summary": "tap the point (540, 1420) on group", + "summary": "tap the point (540, 1458) on group", "point": { "x": 540, - "y": 1420 + "y": 1458 }, "viewport": { "width": 1080, "height": 2400 - }, - "within": { - "target": { - "role": "group" - }, - "fx": 0.4976, - "fy": 0.4879 } } ], @@ -68,9 +47,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Vision%20Only", "targetId": "android-emulator", - "instructionDigest": "e950bf904a3587f9a1d42a4dc15c29517000d20a1e31c8bd896e96a9c6ebd6d1" + "instructionDigest": "e950bf904a3587f9a1d42a4dc15c29517000d20a1e31c8bd896e96a9c6ebd6d1", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Tapped the square, circle, and diamond in the instructed order. The screen now displays “Sequence complete.”.", + "summary": "Tapped the square, circle, and diamond in the instructed order. The screen now displays “Sequence complete.”", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -79,6 +61,26 @@ "name": "Sequence complete" } ], - "endWaitMs": 14510 + "goneAnchors": [ + { + "role": "text", + "name": "Tap: square, then circle, then diamond" + }, + { + "role": "text", + "name": "Progress: 0/3" + } + ], + "endWaitMs": 14472, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/d823e86a70e480e47e0706526de86df9c679a7e4cb8d69ce679bb2632be623f1.json b/apps/mobile-benchmark/.e2e/cache/d823e86a70e480e47e0706526de86df9c679a7e4cb8d69ce679bb2632be623f1.json new file mode 100644 index 000000000..529fa7c82 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/d823e86a70e480e47e0706526de86df9c679a7e4cb8d69ce679bb2632be623f1.json @@ -0,0 +1,103 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T06:58:06.582Z", + "payload": { + "actions": [ + { + "name": "scrollUntil", + "summary": "scroll down until \"Accept terms\" shows (2 screens)", + "text": "Accept terms", + "direction": "down" + }, + { + "name": "tap", + "summary": "tap group \"Accept terms\" in \"Deterministic agreement paragraph 8 of …\"", + "target": { + "role": "group", + "name": "Accept terms", + "testId": "accept-terms", + "selector": "id=accept-terms", + "within": "Deterministic agreement paragraph 8 of 14. Nothing in this section is actionabl…" + } + }, + { + "name": "tap", + "summary": "tap group \"Continue\" in \"Deterministic agreement paragraph 8 of …\"", + "target": { + "role": "group", + "name": "Continue", + "testId": "continue-button", + "selector": "id=continue-button", + "within": "Deterministic agreement paragraph 8 of 14. Nothing in this section is actionabl…" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Sticky%20Chrome%20Target", + "targetId": "android-emulator", + "instructionDigest": "c8995bcdba36d775696cf386be302127a69622849b54e095755e2dc908af89bd", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Scrolled to the Accept terms button and tapped it; it changed to “Terms accepted ✓”. Then tapped Continue in the sticky footer, and the screen displayed “Terms accepted.”", + "startPath": "dev.e2e.benchmark", + "endPath": "dev.e2e.benchmark", + "endAnchors": [ + { + "role": "text", + "name": "Terms accepted", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Read the agreement, tap Accept terms at the bottom, then Continue." + }, + { + "role": "text", + "name": "Section 1" + }, + { + "role": "text", + "name": "Deterministic agreement paragraph 1 of 14. Nothing in this section is actionable; it only adds scroll distance between the top of the screen and the accept button." + }, + { + "role": "text", + "name": "Section 2" + }, + { + "role": "text", + "name": "Deterministic agreement paragraph 2 of 14. Nothing in this section is actionable; it only adds scroll distance between the top of the screen and the accept button." + }, + { + "role": "text", + "name": "Section 3" + }, + { + "role": "text", + "name": "Deterministic agreement paragraph 3 of 14. Nothing in this section is actionable; it only adds scroll distance between the top of the screen and the accept button." + }, + { + "role": "text", + "name": "Section 4" + } + ], + "endWaitMs": 11695, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/d8c30c8431ed7a42fcfdbcc80bc83aa3c2137125b25974b9015774f92c9c1343.json b/apps/mobile-benchmark/.e2e/cache/d8c30c8431ed7a42fcfdbcc80bc83aa3c2137125b25974b9015774f92c9c1343.json new file mode 100644 index 000000000..2ee500720 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/d8c30c8431ed7a42fcfdbcc80bc83aa3c2137125b25974b9015774f92c9c1343.json @@ -0,0 +1,134 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:05:24.200Z", + "payload": { + "actions": [ + { + "name": "tap", + "summary": "tap other \"Trail Mix, 500 g · $6.99\"", + "target": { + "role": "other", + "name": "Trail Mix, 500 g · $6.99", + "testId": "product-trail-mix-500", + "selector": "id=product-trail-mix-500" + } + }, + { + "name": "tap", + "summary": "tap other \"+\"", + "target": { + "role": "other", + "name": "+", + "testId": "quantity-increase", + "selector": "id=quantity-increase" + } + }, + { + "name": "tap", + "summary": "tap other \"Add to cart\"", + "target": { + "role": "other", + "name": "Add to cart", + "testId": "add-to-cart", + "selector": "id=add-to-cart" + } + }, + { + "name": "tap", + "summary": "tap other \"Cart (2)\"", + "target": { + "role": "other", + "name": "Cart (2)", + "testId": "open-cart", + "selector": "id=open-cart" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Product%20Catalog", + "targetId": "ios-simulator", + "instructionDigest": "df6d87ed0275359863ecaf58d94669a7d2b9881afd75c25cb6af7327bb4e052d", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Opened the exact Trail Mix 500 g product, set quantity to 2, added it to the cart, and opened the cart. The cart shows “2 × Trail Mix 500 g” and “Order ready: 2 × Trail Mix 500 g.”", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "text", + "name": "Cart" + }, + { + "role": "text", + "name": "2 × Trail Mix 500 g" + }, + { + "role": "other", + "name": "‹ Back to catalog" + }, + { + "role": "text", + "name": "Order ready: 2 × Trail Mix 500 g", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Add exactly 2 × Trail Mix 500 g to the cart, then review the cart" + }, + { + "role": "other", + "name": "Cart (0)", + "testId": "open-cart" + }, + { + "role": "other", + "name": "Trail Mix, 250 g · $3.99", + "testId": "product-trail-mix-250" + }, + { + "role": "other", + "name": "Favorite Trail Mix 250 g", + "testId": "favorite-trail-mix-250" + }, + { + "role": "other", + "name": "Trail Mix, 500 g · $6.99", + "testId": "product-trail-mix-500" + }, + { + "role": "other", + "name": "Favorite Trail Mix 500 g", + "testId": "favorite-trail-mix-500" + }, + { + "role": "other", + "name": "Trail Mix, 1 kg · $11.99", + "testId": "product-trail-mix-1000" + }, + { + "role": "other", + "name": "Favorite Trail Mix 1 kg", + "testId": "favorite-trail-mix-1000" + } + ], + "endWaitMs": 12025, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/7dd8541f5b2056caeb45468a0d56bf1555c4472b060e21c613e2440f6f554c99.json b/apps/mobile-benchmark/.e2e/cache/daf3ae5af4da333cba6ca81767518806f7fb143a4d1d14bb7133008cfdeed82c.json similarity index 60% rename from apps/mobile-benchmark/.e2e/cache/7dd8541f5b2056caeb45468a0d56bf1555c4472b060e21c613e2440f6f554c99.json rename to apps/mobile-benchmark/.e2e/cache/daf3ae5af4da333cba6ca81767518806f7fb143a4d1d14bb7133008cfdeed82c.json index c1ea7d8a3..f33bad6af 100644 --- a/apps/mobile-benchmark/.e2e/cache/7dd8541f5b2056caeb45468a0d56bf1555c4472b060e21c613e2440f6f554c99.json +++ b/apps/mobile-benchmark/.e2e/cache/daf3ae5af4da333cba6ca81767518806f7fb143a4d1d14bb7133008cfdeed82c.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T08:01:33.909Z", + "createdAt": "2026-10-09T06:58:46.708Z", "payload": { "actions": [ { @@ -55,9 +55,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Product%20Catalog", "targetId": "android-emulator", - "instructionDigest": "df6d87ed0275359863ecaf58d94669a7d2b9881afd75c25cb6af7327bb4e052d" + "instructionDigest": "df6d87ed0275359863ecaf58d94669a7d2b9881afd75c25cb6af7327bb4e052d", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Opened Trail Mix 500 g, set quantity to 2, added it to the cart, and opened the cart. The cart shows “2 × Trail Mix 500 g” and confirms “Order ready: 2 × Trail Mix 500 g.”", + "summary": "Opened the exact Trail Mix 500 g product, set quantity to 2, added it to the cart, and opened the cart. The cart confirms “2 × Trail Mix 500 g” and “Order ready: 2 × Trail Mix 500 g.”", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -84,6 +87,50 @@ "testId": "back-to-list" } ], - "endWaitMs": 11966 + "goneAnchors": [ + { + "role": "text", + "name": "Add exactly 2 × Trail Mix 500 g to the cart, then review the cart" + }, + { + "role": "text", + "name": "Cart (0)" + }, + { + "role": "text", + "name": "Trail Mix" + }, + { + "role": "text", + "name": "250 g · $3.99" + }, + { + "role": "text", + "name": "♡" + }, + { + "role": "text", + "name": "500 g · $6.99" + }, + { + "role": "text", + "name": "1 kg · $11.99" + }, + { + "role": "text", + "name": "Granola" + } + ], + "endWaitMs": 11905, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/de403ea331ae36c5f206b2c2aad58ab463e1e83078fe3258d5caa8611f434687.json b/apps/mobile-benchmark/.e2e/cache/de403ea331ae36c5f206b2c2aad58ab463e1e83078fe3258d5caa8611f434687.json deleted file mode 100644 index e31023a23..000000000 --- a/apps/mobile-benchmark/.e2e/cache/de403ea331ae36c5f206b2c2aad58ab463e1e83078fe3258d5caa8611f434687.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-24T23:04:51.910Z", - "payload": { - "actions": [ - { - "name": "scrollUntil", - "summary": "scroll down until \"Row 0512\" shows (55 screens)", - "text": "Row 0512", - "direction": "down" - }, - { - "name": "tap", - "summary": "tap group \"Row 0512\" in \"Row 0500\"", - "target": { - "role": "group", - "name": "Row 0512", - "testId": "row-512", - "selector": "id=row-512", - "within": "Row 0500" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Huge%20Virtualized%20List", - "targetId": "android-emulator", - "instructionDigest": "0cbf462391106879e99df44b824d6b362b915d99d44a02d241309ec3d4bf4041" - }, - "summary": "The current screen displays “Found Row 0512,” confirming the requested row tap took effect.", - "startPath": "dev.e2e.benchmark", - "endPath": "dev.e2e.benchmark", - "endAnchors": [ - { - "role": "text", - "name": "Found Row 0512", - "testId": "success-message" - }, - { - "role": "group", - "name": "T-Mobile, no signal.", - "testId": "com.android.systemui:id/mobile_combo" - } - ], - "endWaitMs": 26713 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/2716cfbf7f04eb04a00429c19085cca1741915d50118be9c7d890c422d38a9c8.json b/apps/mobile-benchmark/.e2e/cache/ebb768ec01a4afa331fc02bd84636b5b77d09afb454a39ad8ae1f272500e2599.json similarity index 63% rename from apps/mobile-benchmark/.e2e/cache/2716cfbf7f04eb04a00429c19085cca1741915d50118be9c7d890c422d38a9c8.json rename to apps/mobile-benchmark/.e2e/cache/ebb768ec01a4afa331fc02bd84636b5b77d09afb454a39ad8ae1f272500e2599.json index afa5531c2..b47a800eb 100644 --- a/apps/mobile-benchmark/.e2e/cache/2716cfbf7f04eb04a00429c19085cca1741915d50118be9c7d890c422d38a9c8.json +++ b/apps/mobile-benchmark/.e2e/cache/ebb768ec01a4afa331fc02bd84636b5b77d09afb454a39ad8ae1f272500e2599.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-23T16:59:05.322Z", + "createdAt": "2026-10-09T06:56:48.585Z", "payload": { "actions": [ { @@ -39,9 +39,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Modal%20Flow", "targetId": "ios-simulator", - "instructionDigest": "32bf25d16daf4e21f574c8c4919b38c59ac735da3fa3c55d0ddb4093a2abd239" + "instructionDigest": "32bf25d16daf4e21f574c8c4919b38c59ac735da3fa3c55d0ddb4093a2abd239", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Opened the modal, tapped Continue, and confirmed the native alert. The screen now shows “Flow completed.”.", + "summary": "Opened the modal, tapped Continue, and confirmed the native alert. The screen now shows “Flow completed.”", "startPath": "dev.e2e.benchmark / Benchmark Examples", "endPath": "dev.e2e.benchmark / Benchmark Examples", "endAnchors": [ @@ -55,6 +58,22 @@ "testId": "success-message" } ], - "endWaitMs": 11595 + "goneAnchors": [ + { + "role": "other", + "name": "Open modal" + } + ], + "endWaitMs": 12280, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/5a333e309950f09e9e63e3e459010800532b58e653d88264b5a463cef2f50ef8.json b/apps/mobile-benchmark/.e2e/cache/efb2bb34b10aa7bf6a4684c2b2d8c6788283161ad77b1a4de6c0e4463685692d.json similarity index 61% rename from apps/mobile-benchmark/.e2e/cache/5a333e309950f09e9e63e3e459010800532b58e653d88264b5a463cef2f50ef8.json rename to apps/mobile-benchmark/.e2e/cache/efb2bb34b10aa7bf6a4684c2b2d8c6788283161ad77b1a4de6c0e4463685692d.json index 775639308..f8192abcd 100644 --- a/apps/mobile-benchmark/.e2e/cache/5a333e309950f09e9e63e3e459010800532b58e653d88264b5a463cef2f50ef8.json +++ b/apps/mobile-benchmark/.e2e/cache/efb2bb34b10aa7bf6a4684c2b2d8c6788283161ad77b1a4de6c0e4463685692d.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T07:57:07.100Z", + "createdAt": "2026-10-09T06:52:20.287Z", "payload": { "actions": [ { @@ -43,9 +43,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Modal%20Flow", "targetId": "android-emulator", - "instructionDigest": "32bf25d16daf4e21f574c8c4919b38c59ac735da3fa3c55d0ddb4093a2abd239" + "instructionDigest": "32bf25d16daf4e21f574c8c4919b38c59ac735da3fa3c55d0ddb4093a2abd239", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Opened the modal, tapped Continue, and confirmed the native alert. The modal closed and the screen now shows “Flow completed.”.", + "summary": "Opened the modal, tapped Continue, and confirmed the native alert. The screen now shows “Flow completed.”", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -55,6 +58,27 @@ "testId": "success-message" } ], - "endWaitMs": 11600 + "goneAnchors": [ + { + "role": "text", + "name": "Open modal" + }, + { + "role": "group", + "name": "Open modal", + "testId": "open-modal-button" + } + ], + "endWaitMs": 11801, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/0fd8c32c56d959c0f82587fac927b110632fb1dfaa337a3cde99273b283e8468.json b/apps/mobile-benchmark/.e2e/cache/f1e5741e33d85e38f0c7c883c04eca28c63045d028f353a812a2e83783a291ce.json similarity index 51% rename from apps/mobile-benchmark/.e2e/cache/0fd8c32c56d959c0f82587fac927b110632fb1dfaa337a3cde99273b283e8468.json rename to apps/mobile-benchmark/.e2e/cache/f1e5741e33d85e38f0c7c883c04eca28c63045d028f353a812a2e83783a291ce.json index 7ddecd1e8..8901a2bc5 100644 --- a/apps/mobile-benchmark/.e2e/cache/0fd8c32c56d959c0f82587fac927b110632fb1dfaa337a3cde99273b283e8468.json +++ b/apps/mobile-benchmark/.e2e/cache/f1e5741e33d85e38f0c7c883c04eca28c63045d028f353a812a2e83783a291ce.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-09-24T08:01:11.455Z", + "createdAt": "2026-10-09T06:58:23.025Z", "payload": { "actions": [ { @@ -10,9 +10,10 @@ }, { "name": "tap", - "summary": "tap checkbox \"terms\"", + "summary": "tap checkbox \"I accept the terms\"", "target": { "role": "checkbox", + "name": "I accept the terms", "testId": "terms", "selector": "id=terms" } @@ -36,9 +37,12 @@ "recordedFor": { "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20WebView%20Accessibility", "targetId": "android-emulator", - "instructionDigest": "60e9576a643a70f4d33968ccc19d845112ca2ed50212584e9e7aadc34707e5c8" + "instructionDigest": "60e9576a643a70f4d33968ccc19d845112ca2ed50212584e9e7aadc34707e5c8", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" }, - "summary": "Read coupon code TA-BENCH-50, entered it, accepted the terms, and applied it. The web view now shows “Coupon applied.”", + "summary": "Read coupon code TA-BENCH-50, entered it, accepted the terms, and applied it. The web view displays “Coupon applied.”", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -50,9 +54,32 @@ { "role": "textbox", "name": "TA-BENCH-50", - "testId": "coupon-input" + "testId": "coupon-input", + "placeholder": "Coupon code", + "value": "TA-BENCH-50" } ], - "endWaitMs": 13341 + "goneAnchors": [ + { + "role": "text", + "name": "Apply the coupon shown inside the web page (accept the terms first)" + }, + { + "role": "textbox", + "testId": "coupon-input", + "placeholder": "Coupon code" + } + ], + "endWaitMs": 13288, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } } } diff --git a/apps/mobile-benchmark/.e2e/cache/f342b204ff8b5d775c00cc160b965262b5325a879eb125f235e8d60dadd53027.json b/apps/mobile-benchmark/.e2e/cache/f342b204ff8b5d775c00cc160b965262b5325a879eb125f235e8d60dadd53027.json deleted file mode 100644 index 87c5d5ac9..000000000 --- a/apps/mobile-benchmark/.e2e/cache/f342b204ff8b5d775c00cc160b965262b5325a879eb125f235e8d60dadd53027.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T19:20:47.249Z", - "payload": { - "actions": [ - { - "name": "tapAt", - "summary": "tap the point (187, 452) on other \"Use tester@tester.army / , Email, Password, SIGN IN" - }, - "fx": 0.4652, - "fy": 0.4433 - } - }, - { - "name": "tapAt", - "summary": "tap the point (131, 453) on other \"Use tester@tester.army / , Email, Password, SIGN IN" - }, - "fx": 0.3259, - "fy": 0.4446 - } - }, - { - "name": "tool", - "summary": "tool type (run-time value)", - "derived": "pixels" - }, - { - "name": "tapAt", - "summary": "tap the point (133, 530) on other \"Use tester@tester.army / , Email, Password, SIGN IN" - }, - "fx": 0.3308, - "fy": 0.5462 - } - }, - { - "name": "tool", - "summary": "tool type (run-time value)", - "derived": "pixels" - }, - { - "name": "tap", - "summary": "tap button \"return\"", - "target": { - "role": "button", - "name": "return", - "testId": "Return", - "selector": "id=Return" - } - }, - { - "name": "tapAt", - "summary": "tap the point (202, 596) on other \"Use tester@tester.army / , Email, Password, SIGN IN" - }, - "fx": 0.5025, - "fy": 0.6332 - } - }, - { - "name": "tap", - "summary": "tap button \"Not Now\"", - "target": { - "role": "button", - "name": "Not Now" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Flattened%20Login", - "targetId": "ios-simulator", - "instructionDigest": "2ac57f8c28a31069613ffb9bbf8151a42ea8ceb4bb65d0ad6dcd9eea0b8a2755" - }, - "summary": "Entered the hinted email and password, submitted the form, and dismissed the password-save prompt. The screen now displays “Logged in successfully.”", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endAnchors": [ - { - "role": "other", - "name": "Logged in successfully" - } - ], - "endWaitMs": 13078 - } -} diff --git a/apps/mobile-benchmark/.e2e/cache/f3878ab8a2c7d2d0773efabcd031e4c078302faf5793fb0bb45430970301d06d.json b/apps/mobile-benchmark/.e2e/cache/f3878ab8a2c7d2d0773efabcd031e4c078302faf5793fb0bb45430970301d06d.json new file mode 100644 index 000000000..017902969 --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/f3878ab8a2c7d2d0773efabcd031e4c078302faf5793fb0bb45430970301d06d.json @@ -0,0 +1,113 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T06:57:00.223Z", + "payload": { + "actions": [ + { + "name": "tap", + "summary": "tap button \"Actions, tab, 3 of 3\"", + "target": { + "role": "button", + "name": "Actions, tab, 3 of 3", + "testId": "tab-actions", + "selector": "id=tab-actions" + } + }, + { + "name": "tap", + "summary": "tap other \"Complete action\"", + "target": { + "role": "other", + "name": "Complete action", + "testId": "complete-action-button", + "selector": "id=complete-action-button" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Bottom%20Tabs", + "targetId": "ios-simulator", + "instructionDigest": "e537c4fc20970c63b73faeca0620f6f3aa5afdc8ad6e5b0964959e0f5762de45", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Opened the Actions tab and pressed the Complete action button. The screen now displays “Action completed.”", + "startPath": "dev.e2e.benchmark", + "endPath": "dev.e2e.benchmark", + "endAnchors": [ + { + "role": "text", + "name": "Actions" + }, + { + "role": "button", + "name": "Home, tab, 1 of 3", + "testId": "tab-home" + }, + { + "role": "button", + "name": "Actions, tab, 3 of 3", + "testId": "tab-actions", + "states": [ + "selected" + ] + }, + { + "role": "other", + "name": "Action completed" + }, + { + "role": "other", + "name": "Actions" + }, + { + "role": "text", + "name": "Action completed", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Home" + }, + { + "role": "text", + "name": "Go to the Actions tab and press the button there." + }, + { + "role": "button", + "name": "Home, tab, 1 of 3", + "testId": "tab-home", + "states": [ + "selected" + ] + }, + { + "role": "button", + "name": "Actions, tab, 3 of 3", + "testId": "tab-actions" + }, + { + "role": "other", + "name": "Home" + } + ], + "endWaitMs": 11845, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/f50a29e19e742730567db09904ee11673498a119cb2ef0da68c08ab6834873ec.json b/apps/mobile-benchmark/.e2e/cache/f50a29e19e742730567db09904ee11673498a119cb2ef0da68c08ab6834873ec.json new file mode 100644 index 000000000..89afc76da --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/f50a29e19e742730567db09904ee11673498a119cb2ef0da68c08ab6834873ec.json @@ -0,0 +1,81 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T07:00:28.966Z", + "payload": { + "actions": [ + { + "name": "tap", + "summary": "tap group \"Enable microphone\" in \"Voice notes\"", + "target": { + "role": "group", + "name": "Enable microphone", + "testId": "request-permission", + "selector": "id=request-permission", + "within": "Voice notes" + } + }, + { + "name": "tap", + "summary": "tap button \"While using the app\"", + "target": { + "role": "button", + "name": "While using the app", + "testId": "com.android.permissioncontroller:id/permission_allow_foreground_only_button", + "selector": "id=com.android.permissioncontroller:id/permission_allow_foreground_only_button" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Permission%20Prompt", + "targetId": "android-emulator", + "instructionDigest": "b0942b32f51f5f05d38db2a1978624dad1187acfb8aca674dbbb09cc9c29ac87", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Requested microphone access and allowed it using “While using the app” in the system dialog. The app now displays “Microphone enabled.”", + "startPath": "dev.e2e.benchmark", + "endPath": "dev.e2e.benchmark", + "endAnchors": [ + { + "role": "text", + "name": "Microphone enabled", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Voice notes" + }, + { + "role": "text", + "name": "Recording voice notes requires microphone access. Allow the permission when the system asks." + }, + { + "role": "text", + "name": "Enable microphone" + }, + { + "role": "group", + "name": "Enable microphone", + "testId": "request-permission" + } + ], + "endWaitMs": 11500, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "android", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "e18e9835187bab993e11f2dd7ff5624429bc26890c846accacf0057b525e92a0", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/faa16d90a90a8e9500916153b844edf04464b063d1ca3645464522d47d79c224.json b/apps/mobile-benchmark/.e2e/cache/faa16d90a90a8e9500916153b844edf04464b063d1ca3645464522d47d79c224.json new file mode 100644 index 000000000..5fb7c99bf --- /dev/null +++ b/apps/mobile-benchmark/.e2e/cache/faa16d90a90a8e9500916153b844edf04464b063d1ca3645464522d47d79c224.json @@ -0,0 +1,102 @@ +{ + "schemaVersion": "trace-1", + "createdAt": "2026-10-09T06:56:34.302Z", + "payload": { + "actions": [ + { + "name": "scrollUntil", + "summary": "scroll down until \"Item 137\" shows (10 screens)", + "text": "Item 137", + "direction": "down" + }, + { + "name": "tap", + "summary": "tap other \"Item 137\"", + "target": { + "role": "other", + "name": "Item 137", + "testId": "item-137", + "selector": "id=item-137" + } + } + ], + "executor": { + "name": "e2e-default-agent", + "version": "2" + }, + "recordedFor": { + "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Infinite%20Scroll%20List", + "targetId": "ios-simulator", + "instructionDigest": "240960ef8daa93f30d3183a42cf877c23681993025141766e480102a3eca2d75", + "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "callIndex": 0, + "agent": "default" + }, + "summary": "Scrolled the paginated list until Item 137 appeared and tapped it. The screen now shows “Found item 137.”", + "startPath": "dev.e2e.benchmark / Benchmark Examples", + "endPath": "dev.e2e.benchmark / Benchmark Examples", + "endAnchors": [ + { + "role": "other", + "name": "Found item 137" + }, + { + "role": "text", + "name": "Found item 137", + "testId": "success-message" + } + ], + "goneAnchors": [ + { + "role": "text", + "name": "Scroll down and tap Item 137 to complete" + }, + { + "role": "other", + "name": "Item 2", + "testId": "item-2" + }, + { + "role": "other", + "name": "Item 3", + "testId": "item-3" + }, + { + "role": "other", + "name": "Item 4", + "testId": "item-4" + }, + { + "role": "other", + "name": "Item 5", + "testId": "item-5" + }, + { + "role": "other", + "name": "Item 6", + "testId": "item-6" + }, + { + "role": "other", + "name": "Item 7", + "testId": "item-7" + }, + { + "role": "other", + "name": "Item 8", + "testId": "item-8" + } + ], + "endWaitMs": 11718, + "keyedBy": { + "cacheSchema": "trace-1", + "policyVersion": "conservative/6", + "project": "5db668e539f1f8a455eaa798ab239f0cfdc68c99776863db1ddd6f27a9fba643", + "platform": "ios", + "engineName": "mobile", + "engineSpiVersion": 1, + "appIdentity": "873e96a3c0364ffd8e603a0fb9ccef7bb32dd2c64eb8bddaa76d36fdfbf446ae", + "agentContextDigest": "9851c2b004c95e29037ba508c9a81e7efff8fcaa01e5491077154e702520281a" + } + } +} diff --git a/apps/mobile-benchmark/.e2e/cache/ff08e4a2495aa10a6b54fb46e98d51a6b9230ece2236b48d11706b6c0b9e99da.json b/apps/mobile-benchmark/.e2e/cache/ff08e4a2495aa10a6b54fb46e98d51a6b9230ece2236b48d11706b6c0b9e99da.json deleted file mode 100644 index 5c05349c3..000000000 --- a/apps/mobile-benchmark/.e2e/cache/ff08e4a2495aa10a6b54fb46e98d51a6b9230ece2236b48d11706b6c0b9e99da.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-09-23T17:09:42.520Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap other \"Enable microphone\"", - "target": { - "role": "other", - "name": "Enable microphone", - "testId": "request-permission", - "selector": "id=request-permission" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20Permission%20Prompt", - "targetId": "ios-simulator", - "instructionDigest": "b0942b32f51f5f05d38db2a1978624dad1187acfb8aca674dbbb09cc9c29ac87" - }, - "summary": "Tapped Enable microphone. The screen now shows “Microphone enabled,” confirming microphone access was granted.", - "startPath": "dev.e2e.benchmark / Benchmark Examples", - "endPath": "dev.e2e.benchmark / Benchmark Examples", - "endAnchors": [ - { - "role": "other", - "name": "Microphone enabled" - }, - { - "role": "text", - "name": "Microphone enabled", - "testId": "success-message" - } - ], - "endWaitMs": 10322 - } -} diff --git a/apps/mobile-benchmark/README.md b/apps/mobile-benchmark/README.md index 71b6be6cb..81d7e1175 100644 --- a/apps/mobile-benchmark/README.md +++ b/apps/mobile-benchmark/README.md @@ -43,11 +43,30 @@ The deterministic suite runs in CI on every pull request (`.github/workflows/mob an iOS simulator on a macOS runner and an Android emulator on Linux, with the Expo build cached per native fingerprint and its JS bundle repacked on a hit. The agentic suite runs there too, for this repository's branches. It replays -the recordings committed under `.e2e/cache/` where they exist and calls the -model for a step with none: the iOS entries are recorded on a Mac with -`test:agent` (below) and committed in the same pull request as the scenario -change; nobody has recorded on an Android emulator yet, so that side spends -model calls until an emulator recording is committed. +the recordings committed under `.e2e/cache/` and calls the model for a step +with none. Both platforms' entries are recorded on a Mac with `test:agent` +(below), an iPhone 17 Pro simulator on the pinned iOS runtime and a Pixel 7 +API 36 emulator, and committed in the same pull request as the scenario +change. Android runs with `--strict-cache`, so a recording that no longer +replays fails its step as `REPLAY_STALE` instead of handing it to the model. +iOS replays leniently: three recordings hand off on every run, three more +on the CI simulator only, and strict mode waits on them. + +- Debounced Search: the replay looks before the debounced results render, + and relocation settles on the search field's wrapper, which reads + "Benchmark Target" too, instead of waiting for the result row. +- Choice Controls: the keyboard the notes field raises covers the Mushrooms + checkbox, which iOS then drops from the tree. +- Stripe PaymentSheet: the card form's fields are not in the tree after the + Card tab is tapped on the sheet. +- Login Form (CI only): the CI simulator reads the screen's route as its + title, `Login Form`, where a Mac reads the back button's `Benchmark + Examples`, so the recorded start route does not match. +- Photo Picker (CI only): the recorded tap names the photo by the time it + was seeded, `Photo, October 03, 22:50`, which is another time on another + simulator. +- Permission Prompt (CI only): every recorded action replays, but the + recorded end state, `Microphone enabled`, does not show. Each job posts its first pass to the pull request as one comment (`e2e ios: 44 passed`, `e2e android agent: ...`) through `@e2e-dev/github`, like the web benchmark's two. The second pass over failed tests posts nothing, so a green diff --git a/apps/mobile-benchmark/e2e.agent.config.ts b/apps/mobile-benchmark/e2e.agent.config.ts index dd4f2e4d1..8eb474d1b 100644 --- a/apps/mobile-benchmark/e2e.agent.config.ts +++ b/apps/mobile-benchmark/e2e.agent.config.ts @@ -7,7 +7,9 @@ import base, { android, ios } from './e2e.config.ts'; * Agentic suite against the same app and account as the deterministic one. * It runs in CI for this repository's branches (`mobile.yml`), replaying the * recordings committed under `.e2e/cache/` and calling the model for a step - * with none. To record by hand, on a booted simulator or emulator: + * with none; Android runs with `--strict-cache`, so a recording that no + * longer replays fails its step. To record by hand, on a booted simulator or + * emulator: * * AI_GATEWAY_API_KEY=... pnpm --filter @e2e-dev/mobile-benchmark test:agent * diff --git a/apps/web-benchmark/.e2e/cache/0b3eabe7a9e76cdccecf70f530f975978f3ed334fc1721c831c3c80d44ed64f8.json b/apps/web-benchmark/.e2e/cache/0b3eabe7a9e76cdccecf70f530f975978f3ed334fc1721c831c3c80d44ed64f8.json deleted file mode 100644 index faa229aa3..000000000 --- a/apps/web-benchmark/.e2e/cache/0b3eabe7a9e76cdccecf70f530f975978f3ed334fc1721c831c3c80d44ed64f8.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:07:29.988Z", - "payload": { - "actions": [ - { - "name": "scrollTo", - "summary": "scroll button \"Accept terms\" into view", - "target": { - "role": "button", - "name": "Accept terms", - "testId": "accept-button" - } - }, - { - "name": "tap", - "summary": "tap button \"Accept terms\"", - "target": { - "role": "button", - "name": "Accept terms", - "testId": "accept-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20sticky-chrome", - "targetId": "web", - "instructionDigest": "507883318a8655d47afe9f680ee91cde1ae64055fbef530129cc289101a30c23", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Scrolled until the Accept terms button was clear of the sticky footer, clicked it, and verified the “Terms accepted” confirmation.", - "startPath": "/e/sticky-chrome", - "endPath": "/e/sticky-chrome", - "endAnchors": [ - { - "text": "Terms accepted", - "testId": "success-message" - } - ], - "endWaitMs": 12139 - } -} diff --git a/apps/web-benchmark/.e2e/cache/0bbd91d38abd392f32bcd96a4bfd8ec2c2ab4c75cf4046c37dbc56a91dc60f5a.json b/apps/web-benchmark/.e2e/cache/0bbd91d38abd392f32bcd96a4bfd8ec2c2ab4c75cf4046c37dbc56a91dc60f5a.json deleted file mode 100644 index f0450052a..000000000 --- a/apps/web-benchmark/.e2e/cache/0bbd91d38abd392f32bcd96a4bfd8ec2c2ab4c75cf4046c37dbc56a91dc60f5a.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:04:43.106Z", - "payload": { - "actions": [ - { - "name": "check", - "summary": "check checkbox \"Agree to terms\" in \"Toggles\"", - "target": { - "role": "checkbox", - "name": "Agree to terms", - "within": "Toggles" - }, - "checked": true - }, - { - "name": "check", - "summary": "check radio \"Medium\" in \"Size\"", - "target": { - "role": "radio", - "name": "Medium", - "within": "Size" - }, - "checked": true - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/control-inventory.e2e.ts::control%20inventory::check%20sets%20the%20checkbox%20and%20the%20radio", - "targetId": "web", - "instructionDigest": "31e69bd3b8b58acb08fa60eaea2976e3271b633b840b8ffca9440e21488961fc", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Agreed to the terms and selected Medium. The toggles state confirms “terms agreed, size Medium.”", - "startPath": "/e/control-inventory", - "endPath": "/e/control-inventory", - "endAnchors": [ - { - "role": "status", - "name": "Toggles state", - "text": "terms agreed, size Medium" - }, - { - "role": "checkbox", - "name": "Agree to terms", - "states": [ - "checked" - ] - }, - { - "role": "radio", - "name": "Medium", - "states": [ - "checked" - ] - } - ], - "goneAnchors": [ - { - "role": "status", - "name": "Toggles state", - "text": "terms not agreed, size unset" - }, - { - "role": "checkbox", - "name": "Agree to terms" - }, - { - "role": "radio", - "name": "Medium" - } - ], - "endWaitMs": 11523 - } -} diff --git a/apps/web-benchmark/.e2e/cache/275b37b887ea0df13e54568aae02289914330f30853f561320d83bb2e33c89ca.json b/apps/web-benchmark/.e2e/cache/275b37b887ea0df13e54568aae02289914330f30853f561320d83bb2e33c89ca.json deleted file mode 100644 index ee855fffd..000000000 --- a/apps/web-benchmark/.e2e/cache/275b37b887ea0df13e54568aae02289914330f30853f561320d83bb2e33c89ca.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:07:57.508Z", - "payload": { - "actions": [ - { - "name": "drag", - "summary": "drag node \"Banana\" to node \"dropzone\"", - "target": { - "text": "Banana", - "testId": "drag-banana" - }, - "destination": { - "testId": "dropzone" - } - }, - { - "name": "drag", - "summary": "drag node \"Cherry\" to node \"dropzone\"", - "target": { - "text": "Cherry", - "testId": "drag-cherry" - }, - "destination": { - "testId": "dropzone" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20drag-and-drop", - "targetId": "web", - "instructionDigest": "24ea40459eba1c0e7841d174c9d6b29255cc71346083add2a38c39491aff758c", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Dragged Banana into the dropzone, then Cherry, and left Apple alone. The page shows “Items dropped in the right order.”", - "startPath": "/e/drag-and-drop", - "endPath": "/e/drag-and-drop", - "endAnchors": [ - { - "text": "Items dropped in the right order", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "Drop items here" - } - ], - "endWaitMs": 12260 - } -} diff --git a/apps/web-benchmark/.e2e/cache/28aa547101e02fd3e5fb93b6bbc57c2462db5f3304bd39cf2d3bd6537d599257.json b/apps/web-benchmark/.e2e/cache/28aa547101e02fd3e5fb93b6bbc57c2462db5f3304bd39cf2d3bd6537d599257.json deleted file mode 100644 index cc8937382..000000000 --- a/apps/web-benchmark/.e2e/cache/28aa547101e02fd3e5fb93b6bbc57c2462db5f3304bd39cf2d3bd6537d599257.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:09:22.414Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap button \"gift_card_amount_option_undefined\"", - "target": { - "role": "button", - "name": "gift_card_amount_option_undefined", - "text": "$25", - "testId": "amount-25" - } - }, - { - "name": "type", - "summary": "type \"friend@example.com\" into textbox \"{{recipient_email_label}}\"", - "target": { - "role": "textbox", - "name": "{{recipient_email_label}}", - "testId": "recipient-input", - "placeholder": "friend@example.com" - }, - "value": "friend@example.com" - }, - { - "name": "tap", - "summary": "tap button \"btn_purchase_label\"", - "target": { - "role": "button", - "name": "btn_purchase_label", - "text": "Buy gift card", - "testId": "buy-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20gift-card-purchase", - "targetId": "web", - "instructionDigest": "58b82e08250d41e942c183d1c49b7e031fb5754f62c785c3f064c404c6b44851", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Selected a $25 gift card, entered friend@example.com, and completed the purchase. The page confirms the gift card was sent to friend@example.com and that the $25.00 gift card is on its way.", - "startPath": "/e/gift-card-purchase", - "endPath": "/e/gift-card-purchase", - "endAnchors": [ - { - "text": "Gift card sent to friend@example.com", - "testId": "success-message" - }, - { - "text": "A $25.00 gift card is on its way." - } - ], - "goneAnchors": [ - { - "text": "Send a digital gift card. Delivered by email within minutes." - }, - { - "role": "button", - "name": "gift_card_amount_option_undefined", - "text": "$10", - "testId": "amount-10" - }, - { - "role": "button", - "name": "gift_card_amount_option_undefined", - "text": "$25", - "testId": "amount-25" - }, - { - "role": "button", - "name": "gift_card_amount_option_undefined", - "text": "$50", - "testId": "amount-50" - }, - { - "role": "textbox", - "name": "{{recipient_email_label}}", - "testId": "recipient-input", - "placeholder": "friend@example.com" - }, - { - "text": "Total" - }, - { - "text": "Total: $NaN" - }, - { - "role": "button", - "name": "btn_purchase_label", - "text": "Buy gift card", - "testId": "buy-button" - } - ], - "endWaitMs": 12114 - } -} diff --git a/apps/web-benchmark/.e2e/cache/2f9c9204dd978c96aaeebeaf619d7a13e83aa083a9fc3e9de0e5a993a87671cb.json b/apps/web-benchmark/.e2e/cache/2f9c9204dd978c96aaeebeaf619d7a13e83aa083a9fc3e9de0e5a993a87671cb.json deleted file mode 100644 index 7d836407b..000000000 --- a/apps/web-benchmark/.e2e/cache/2f9c9204dd978c96aaeebeaf619d7a13e83aa083a9fc3e9de0e5a993a87671cb.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:05:02.558Z", - "payload": { - "actions": [ - { - "name": "secondaryTap", - "summary": "secondary-tap listitem \"report.pdf\" in \"Files\"", - "target": { - "role": "listitem", - "name": "report.pdf", - "within": "Files" - } - }, - { - "name": "secondaryTap", - "summary": "secondary-tap node \"report.pdf\"", - "target": { - "text": "report.pdf" - } - }, - { - "name": "tap", - "summary": "tap menuitem \"Rename\" in \"report.pdf\"", - "target": { - "role": "menuitem", - "name": "Rename", - "within": "report.pdf" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/control-inventory.e2e.ts::control%20inventory::a%20right-click%20opens%20the%20file%20menu%20and%20Rename%20renames%20the%20file", - "targetId": "web", - "instructionDigest": "cb3da13c69639f87ac80d3bd6fa2b908c9df0bbbda211433bdc779611d4909fe", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Right-clicked report.pdf to open its context menu, selected Rename, and verified the file is now listed as summary.pdf.", - "startPath": "/e/control-inventory", - "endPath": "/e/control-inventory", - "endAnchors": [ - { - "role": "status", - "name": "File state", - "text": "report.pdf renamed to summary.pdf" - }, - { - "text": "summary.pdf" - }, - { - "role": "listitem", - "name": "summary.pdf" - } - ], - "goneAnchors": [ - { - "role": "status", - "name": "File state", - "text": "no menu open" - }, - { - "text": "report.pdf" - }, - { - "role": "listitem", - "name": "report.pdf" - } - ], - "endWaitMs": 12071 - } -} diff --git a/apps/web-benchmark/.e2e/cache/399574f1bd1a423fca63737672d40b5ad564ce89c4157e7ae1c57cbab8a46e33.json b/apps/web-benchmark/.e2e/cache/399574f1bd1a423fca63737672d40b5ad564ce89c4157e7ae1c57cbab8a46e33.json deleted file mode 100644 index 2eee2501b..000000000 --- a/apps/web-benchmark/.e2e/cache/399574f1bd1a423fca63737672d40b5ad564ce89c4157e7ae1c57cbab8a46e33.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:05:20.178Z", - "payload": { - "actions": [ - { - "name": "scrollTo", - "summary": "scroll node \"Footnote\" into view", - "target": { - "text": "Footnote" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/control-inventory.e2e.ts::control%20inventory::scroll_to%20brings%20the%20footnote%20into%20view", - "targetId": "web", - "instructionDigest": "60d7d1c1109f3844ed7b5cd3f6f351e1b297af10aa7e4371ed45de087cce0df3", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Scrolled the page until the Footnote paragraph was in view; the Footnote state now shows “in view”.", - "startPath": "/e/control-inventory", - "endPath": "/e/control-inventory", - "endAnchors": [ - { - "role": "status", - "name": "Footnote state", - "text": "in view" - } - ], - "goneAnchors": [ - { - "role": "status", - "name": "Footnote state", - "text": "out of view" - } - ], - "endWaitMs": 11780 - } -} diff --git a/apps/web-benchmark/.e2e/cache/3a4434ed1517738aefeb913141930f48f0ec14961e0db32d7d8a4593d0f7a332.json b/apps/web-benchmark/.e2e/cache/3a4434ed1517738aefeb913141930f48f0ec14961e0db32d7d8a4593d0f7a332.json deleted file mode 100644 index 6c123f5a6..000000000 --- a/apps/web-benchmark/.e2e/cache/3a4434ed1517738aefeb913141930f48f0ec14961e0db32d7d8a4593d0f7a332.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:08:24.316Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap button \"Tap me\"", - "target": { - "role": "button", - "name": "Tap me", - "testId": "target-button" - } - }, - { - "name": "tap", - "summary": "tap button \"Tap me\"", - "target": { - "role": "button", - "name": "Tap me", - "testId": "target-button" - } - }, - { - "name": "tap", - "summary": "tap button \"Tap me\"", - "target": { - "role": "button", - "name": "Tap me", - "testId": "target-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20stale-dom", - "targetId": "web", - "instructionDigest": "c7958b2326b3f2b42541d8b8261d04bb3d18d3fbbf439d754e64d72856a74ba4", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Clicked Tap me three times despite the list rebuilding; the page now shows Progress: 3 / 3 and “Target clicked 3 times.”", - "startPath": "/e/stale-dom", - "endPath": "/e/stale-dom", - "endAnchors": [ - { - "text": "Progress: 3 / 3", - "testId": "progress" - }, - { - "text": "Target clicked 3 times", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "Progress: 0 / 3", - "testId": "progress" - }, - { - "text": "Slot 1" - }, - { - "role": "button", - "name": "Decoy", - "testId": "decoy-button" - }, - { - "text": "Slot 2" - }, - { - "text": "Slot 3" - }, - { - "role": "button", - "name": "Tap me", - "testId": "target-button" - }, - { - "text": "Slot 4" - }, - { - "text": "Slot 5" - } - ], - "endWaitMs": 12151 - } -} diff --git a/apps/web-benchmark/.e2e/cache/52e387214e9f669aaf00252bcf75f791cd9f8eade74dca317c27c5ae0bff604d.json b/apps/web-benchmark/.e2e/cache/52e387214e9f669aaf00252bcf75f791cd9f8eade74dca317c27c5ae0bff604d.json deleted file mode 100644 index c1a125e8c..000000000 --- a/apps/web-benchmark/.e2e/cache/52e387214e9f669aaf00252bcf75f791cd9f8eade74dca317c27c5ae0bff604d.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:04:45.863Z", - "payload": { - "actions": [ - { - "name": "type", - "summary": "type \"tester@tester.army\" into textbox \"Email\"", - "target": { - "role": "textbox", - "name": "Email", - "testId": "email-input", - "placeholder": "Email" - }, - "value": "tester@tester.army" - }, - { - "name": "typeSecret", - "summary": "fill secret \"benchmark.password\" into textbox \"Password\"", - "target": { - "role": "textbox", - "name": "Password", - "testId": "password-input", - "placeholder": "Password", - "inputPurpose": "password" - }, - "secret": "benchmark.password" - }, - { - "name": "tap", - "summary": "tap button \"Log in\"", - "target": { - "role": "button", - "name": "Log in", - "testId": "login-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/login-form.e2e.ts::act%20signs%20in%20with%20the%20benchmark%20account", - "targetId": "web", - "instructionDigest": "c26456300e1d572e5598b0d8d2584171681d80d8a20bef86bdda6e9d2c7f976e", - "paramsDigest": "10cf8df51d5b30096b97501956aa95d056885035f7bc67d093d076b7c4caecf0", - "callIndex": 0, - "agent": "default" - }, - "summary": "Logged in with the provided credentials. The page displays “Logged in successfully” and a Log out button.", - "startPath": "/e/login-form", - "endPath": "/e/login-form", - "endAnchors": [ - { - "text": "Logged in successfully", - "testId": "success-message" - }, - { - "role": "button", - "name": "Log out", - "testId": "logout-button" - } - ], - "goneAnchors": [ - { - "text": "Use tester@tester.army / " - }, - { - "role": "textbox", - "name": "Email", - "testId": "email-input", - "placeholder": "Email" - }, - { - "role": "textbox", - "name": "Password", - "testId": "password-input", - "placeholder": "Password", - "inputPurpose": "password" - }, - { - "role": "button", - "name": "Log in", - "testId": "login-button" - } - ], - "endWaitMs": 12323 - } -} diff --git a/apps/web-benchmark/.e2e/cache/6574d07bc1e3694c6844214c38bc056898debbc18c99e387d00326100d93e56a.json b/apps/web-benchmark/.e2e/cache/6574d07bc1e3694c6844214c38bc056898debbc18c99e387d00326100d93e56a.json deleted file mode 100644 index 61d7bcbbe..000000000 --- a/apps/web-benchmark/.e2e/cache/6574d07bc1e3694c6844214c38bc056898debbc18c99e387d00326100d93e56a.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:04:44.780Z", - "payload": { - "actions": [ - { - "name": "tool", - "summary": "tool type (run-time value)", - "derived": "minted-token" - }, - { - "name": "tap", - "summary": "tap button \"Submit\"", - "target": { - "role": "button", - "name": "Submit" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20shadow-dom-form", - "targetId": "web", - "instructionDigest": "c6884af43cef64f928cde4eaa3be0cbc128893f01611d32236baf514a915c0a6", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Entered SHADOW-42 and submitted the nested-shadow-root form. The page shows “Access granted.”", - "startPath": "/e/shadow-dom-form", - "endPath": "/e/shadow-dom-form", - "endAnchors": [ - { - "text": "Access granted", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "The form below lives inside a closed shadow root. Enter SHADOW-42 and press Submit." - }, - { - "text": "Access code hint: SHADOW-42" - }, - { - "role": "textbox", - "name": "Access code", - "placeholder": "Access code" - }, - { - "role": "button", - "name": "Submit" - } - ], - "endWaitMs": 11657 - } -} diff --git a/apps/web-benchmark/.e2e/cache/65ddc0d14408317020eb9dd1405dcb1d85c94969e9d844a76404e918a66792f0.json b/apps/web-benchmark/.e2e/cache/65ddc0d14408317020eb9dd1405dcb1d85c94969e9d844a76404e918a66792f0.json deleted file mode 100644 index a39616aa5..000000000 --- a/apps/web-benchmark/.e2e/cache/65ddc0d14408317020eb9dd1405dcb1d85c94969e9d844a76404e918a66792f0.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:04:46.283Z", - "payload": { - "actions": [ - { - "name": "check", - "summary": "check radio \"Express\" in \"Delivery\"", - "target": { - "role": "radio", - "name": "Express", - "within": "Delivery" - }, - "checked": true - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/control-inventory.e2e.ts::control%20inventory::check%20picks%20a%20radio%20the%20pick%20replaces%20with%20its%20summary", - "targetId": "web", - "instructionDigest": "df853ab2fc826564b99c9b044a65fd7ee21cdc2b487273cebcd32bcbe3607c66", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Selected Express delivery. The delivery state now shows “Express,” and the page confirms “Express delivery selected.”", - "startPath": "/e/control-inventory", - "endPath": "/e/control-inventory", - "endAnchors": [ - { - "role": "status", - "name": "Delivery state", - "text": "Express" - }, - { - "text": "Express delivery selected" - }, - { - "role": "button", - "name": "Change delivery" - } - ], - "goneAnchors": [ - { - "role": "status", - "name": "Delivery state", - "text": "unset" - }, - { - "role": "radio", - "name": "Standard" - }, - { - "role": "radio", - "name": "Express" - }, - { - "role": "group", - "name": "Delivery" - }, - { - "text": "Standard" - } - ], - "endWaitMs": 11561 - } -} diff --git a/apps/web-benchmark/.e2e/cache/6e7bb7f6a8af78cc8d266cc835e4935159d6d15bb4a6d429a24096c811c98faa.json b/apps/web-benchmark/.e2e/cache/6e7bb7f6a8af78cc8d266cc835e4935159d6d15bb4a6d429a24096c811c98faa.json deleted file mode 100644 index 3ff0a4f0e..000000000 --- a/apps/web-benchmark/.e2e/cache/6e7bb7f6a8af78cc8d266cc835e4935159d6d15bb4a6d429a24096c811c98faa.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:05:07.249Z", - "payload": { - "actions": [ - { - "name": "scrollUntil", - "summary": "scroll down on node \"feed\" until \"Golden Ticket\" shows (20 screens)", - "text": "Golden Ticket", - "direction": "down", - "target": { - "testId": "feed" - }, - "spans": 0.3083 - }, - { - "name": "tap", - "summary": "tap button \"Claim\"", - "target": { - "role": "button", - "name": "Claim", - "testId": "claim-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20infinite-scroll", - "targetId": "web", - "instructionDigest": "5693e0682199f2201375a207ac10bd69b22c26925bbf8fd87e06a9f6d1abeca9", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Scrolled the feed until the Golden Ticket appeared and clicked Claim. The page confirms “Golden Ticket claimed.”", - "startPath": "/e/infinite-scroll", - "endPath": "/e/infinite-scroll", - "endAnchors": [ - { - "text": "Golden Ticket claimed", - "testId": "success-message" - }, - { - "text": "Item 41" - }, - { - "text": "Feed entry 41 of 200" - }, - { - "text": "Item 42" - }, - { - "text": "Feed entry 42 of 200" - }, - { - "text": "Item 43" - }, - { - "text": "Feed entry 43 of 200" - }, - { - "text": "Item 44" - } - ], - "endWaitMs": 11949 - } -} diff --git a/apps/web-benchmark/.e2e/cache/76d445f32bc45f19f3d3c3d995eecaf3dcf2358bbffc81b506ea772fd3b5ab82.json b/apps/web-benchmark/.e2e/cache/76d445f32bc45f19f3d3c3d995eecaf3dcf2358bbffc81b506ea772fd3b5ab82.json deleted file mode 100644 index 9d55b29bb..000000000 --- a/apps/web-benchmark/.e2e/cache/76d445f32bc45f19f3d3c3d995eecaf3dcf2358bbffc81b506ea772fd3b5ab82.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:04:44.636Z", - "payload": { - "actions": [ - { - "name": "type", - "summary": "type \"{{param:/label}}\" into textbox \"Label (e.g. Cabin)\"", - "target": { - "role": "textbox", - "name": "Label (e.g. Cabin)", - "testId": "label-input", - "placeholder": "Label (e.g. Cabin)" - }, - "value": "{{param:/label}}" - }, - { - "name": "type", - "summary": "type \"7 Pine Way, Bend\" into textbox \"Street address\"", - "target": { - "role": "textbox", - "name": "Street address", - "testId": "line-input", - "placeholder": "Street address" - }, - "value": "7 Pine Way, Bend" - }, - { - "name": "tap", - "summary": "tap button \"Add address\"", - "target": { - "role": "button", - "name": "Add address", - "testId": "add-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/unique-cache.e2e.ts::act%20adds%20an%20address%20with%20a%20run-unique%20label", - "targetId": "web", - "instructionDigest": "7e6f99066c5bc180c1e5188150277917670b918eb0a9646ac967ef798648b455", - "paramsDigest": "49ed432ec36207f5728e4da6da98006ed0d126739d72fdcdb919e032bfd6a511", - "callIndex": 0, - "agent": "default" - }, - "summary": "Added address labeled “Cabin muwoxo66” with line “7 Pine Way, Bend.” The saved-address list now shows the new entry and an “Address saved” confirmation.", - "startPath": "/e/saved-addresses", - "endPath": "/e/saved-addresses", - "endAnchors": [ - { - "text": "Address saved", - "testId": "toast" - }, - { - "text": "{{param:/label}}" - }, - { - "role": "listitem", - "name": "{{param:/label}} 7 Pine Way, Bend Delete", - "testId": "address-custom-2" - }, - { - "text": "7 Pine Way, Bend" - } - ], - "endWaitMs": 11690 - } -} diff --git a/apps/web-benchmark/.e2e/cache/7b82735e522db24584a675b5ee0798e91004c316877af86072a32d3dac8124fb.json b/apps/web-benchmark/.e2e/cache/7b82735e522db24584a675b5ee0798e91004c316877af86072a32d3dac8124fb.json deleted file mode 100644 index a9735198c..000000000 --- a/apps/web-benchmark/.e2e/cache/7b82735e522db24584a675b5ee0798e91004c316877af86072a32d3dac8124fb.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:09:11.004Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap button \"Buy now\" in \"Wireless Headphones\"", - "target": { - "role": "button", - "name": "Buy now", - "testId": "buy-headphones", - "within": "Wireless Headphones" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20promo-storefront", - "targetId": "web", - "instructionDigest": "1bf3aabb828b9b084d447df3a78d1fa700b5b28b8d5847dcc5ffcb9b0ce3bd45", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Bought the Wireless Headphones. The page now shows “Order confirmed.”", - "startPath": "/e/promo-storefront", - "endPath": "/e/promo-storefront", - "endAnchors": [ - { - "text": "Order confirmed", - "testId": "success-message" - }, - { - "text": "Jonas" - }, - { - "text": "Amelia" - }, - { - "role": "listitem", - "name": "Wireless Headphones $80.00 $40.00 50% OFF Order confirmed", - "testId": "deal-headphones" - }, - { - "text": "★★★★★ Great bass and the battery lasts all week." - }, - { - "text": "★★★★ Comfortable fit, pairing was instant." - } - ], - "goneAnchors": [ - { - "role": "listitem", - "name": "Wireless Headphones $80.00 $40.00 50% OFF Buy now", - "testId": "deal-headphones" - } - ], - "endWaitMs": 11717 - } -} diff --git a/apps/web-benchmark/.e2e/cache/7bd01bde4c7460a55936b3846874b0241e3936cc99cd9abbdd8fad3354e076ed.json b/apps/web-benchmark/.e2e/cache/7bd01bde4c7460a55936b3846874b0241e3936cc99cd9abbdd8fad3354e076ed.json deleted file mode 100644 index a16ef1c0d..000000000 --- a/apps/web-benchmark/.e2e/cache/7bd01bde4c7460a55936b3846874b0241e3936cc99cd9abbdd8fad3354e076ed.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:07:40.386Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap button \"Send code\"", - "target": { - "role": "button", - "name": "Send code", - "testId": "send-code-button" - } - }, - { - "name": "tool", - "summary": "tool type (run-time value)", - "derived": "minted-token" - }, - { - "name": "tap", - "summary": "tap button \"Verify\"", - "target": { - "role": "button", - "name": "Verify", - "testId": "verify-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20async-states", - "targetId": "web", - "instructionDigest": "3d8730745312e1ce478b253dcad7910775eb76246846228b0ca02a78e514aa88", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Waited for the scenario to load, clicked Send code, read code 4407 from the toast, entered it, and submitted once Verify enabled. The page shows “Code verified successfully.”", - "startPath": "/e/async-states", - "endPath": "/e/async-states", - "endAnchors": [ - { - "text": "Code verified successfully", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "testId": "initial-loading" - } - ], - "endWaitMs": 11612 - } -} diff --git a/apps/web-benchmark/.e2e/cache/7e232b3b530d1656de1f295569303906789ff147b31282d84b3a252e73dfa5b3.json b/apps/web-benchmark/.e2e/cache/7e232b3b530d1656de1f295569303906789ff147b31282d84b3a252e73dfa5b3.json deleted file mode 100644 index 59d1cdda8..000000000 --- a/apps/web-benchmark/.e2e/cache/7e232b3b530d1656de1f295569303906789ff147b31282d84b3a252e73dfa5b3.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:07:16.901Z", - "payload": { - "actions": [ - { - "name": "scrollUntil", - "summary": "scroll down on node \"table-viewport\" until \"Golden Row\" shows (431 screens)", - "text": "Golden Row", - "direction": "down", - "target": { - "testId": "table-viewport" - }, - "spans": 0.3083 - }, - { - "name": "tap", - "summary": "tap button \"Claim\"", - "target": { - "role": "button", - "name": "Claim", - "testId": "claim-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20virtualized-table", - "targetId": "web", - "instructionDigest": "3e0bdeec3c893eadd972848c89ef841ec7722fd896ed12998ef945cf20af30ec", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Scrolled the virtualized table to row 4322 and clicked Claim. The page displays “Golden Row claimed.”", - "startPath": "/e/virtualized-table", - "endPath": "/e/virtualized-table", - "endAnchors": [ - { - "text": "Golden Row claimed", - "testId": "success-message" - }, - { - "text": "Row 4306" - }, - { - "text": "Row 4307" - }, - { - "text": "Row 4308" - }, - { - "text": "Row 4309" - }, - { - "text": "Row 4310" - }, - { - "text": "Row 4311" - }, - { - "text": "Row 4312" - } - ], - "goneAnchors": [ - { - "text": "Row 1" - }, - { - "text": "Row 2" - }, - { - "text": "Row 3" - }, - { - "text": "Row 4" - }, - { - "text": "Row 5" - }, - { - "text": "Row 6" - }, - { - "text": "Row 7" - }, - { - "text": "Row 8" - } - ], - "endWaitMs": 11965 - } -} diff --git a/apps/web-benchmark/.e2e/cache/82575ab070fc92c1fa2a9be589e97f260ca0f2688efd78bf5aa7f89a297ee2ec.json b/apps/web-benchmark/.e2e/cache/82575ab070fc92c1fa2a9be589e97f260ca0f2688efd78bf5aa7f89a297ee2ec.json deleted file mode 100644 index bfec7e7e2..000000000 --- a/apps/web-benchmark/.e2e/cache/82575ab070fc92c1fa2a9be589e97f260ca0f2688efd78bf5aa7f89a297ee2ec.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:04:51.825Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap button \"Cancel order\"", - "target": { - "role": "button", - "name": "Cancel order", - "text": "Pay now" - } - }, - { - "name": "tool", - "summary": "tool type (run-time value)", - "derived": "minted-token" - }, - { - "name": "tap", - "summary": "tap button \"Discard draft\"", - "target": { - "role": "button", - "name": "Discard draft", - "text": "Submit payment" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20lying-labels", - "targetId": "web", - "instructionDigest": "75cac33ad209d332c191820f8b966e11e3b86f06d25432d913adf93fe369052d", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Followed the visible instructions, entered 42.50 in the field visibly labeled Amount, left Reference empty, and clicked the button visibly labeled Submit payment. The page now shows “Payment sent.”", - "startPath": "/e/lying-labels", - "endPath": "/e/lying-labels", - "endAnchors": [ - { - "text": "Payment sent", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "Click the button that visibly says Pay now." - }, - { - "text": "Do not press this button" - }, - { - "text": "Pay now safely" - }, - { - "role": "button", - "name": "Confirm payment", - "text": "Contact support" - }, - { - "role": "button", - "name": "Cancel order", - "text": "Pay now" - }, - { - "role": "button", - "name": "Pay now", - "text": "Cancel order" - } - ], - "endWaitMs": 11534 - } -} diff --git a/apps/web-benchmark/.e2e/cache/941e99cba65f6027f4d424bcfd2438466afe0917ad3688e5f28357be416115ed.json b/apps/web-benchmark/.e2e/cache/941e99cba65f6027f4d424bcfd2438466afe0917ad3688e5f28357be416115ed.json deleted file mode 100644 index fb5aea8e2..000000000 --- a/apps/web-benchmark/.e2e/cache/941e99cba65f6027f4d424bcfd2438466afe0917ad3688e5f28357be416115ed.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:07:51.943Z", - "payload": { - "actions": [ - { - "name": "hover", - "summary": "hover over node \"Account\"", - "target": { - "text": "Account", - "testId": "menu-account" - } - }, - { - "name": "hover", - "summary": "hover over node \"Billing ›\"", - "target": { - "text": "Billing ›" - } - }, - { - "name": "tap", - "summary": "tap node \"Redeem voucher\"", - "target": { - "text": "Redeem voucher" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20hover-menu", - "targetId": "web", - "instructionDigest": "4d2bd092cafaf0bdc40c9442fb592d58283fd7a946e7efb98e1142cffe3c07a3", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Hovered over Account, then Billing, and selected Redeem voucher. The page displays “Voucher redeemed.”", - "startPath": "/e/hover-menu", - "endPath": "/e/hover-menu", - "endAnchors": [ - { - "text": "Voucher redeemed", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "Using hover only, find Redeem voucher under Account." - }, - { - "text": "Products", - "testId": "menu-products" - }, - { - "text": "Settings", - "testId": "menu-settings" - }, - { - "text": "Account", - "testId": "menu-account" - } - ], - "endWaitMs": 11507 - } -} diff --git a/apps/web-benchmark/.e2e/cache/b750f781def99614a9c459dff9a98e3896b847d0e533d764754c1ce81a648b4b.json b/apps/web-benchmark/.e2e/cache/b750f781def99614a9c459dff9a98e3896b847d0e533d764754c1ce81a648b4b.json deleted file mode 100644 index c9166500d..000000000 --- a/apps/web-benchmark/.e2e/cache/b750f781def99614a9c459dff9a98e3896b847d0e533d764754c1ce81a648b4b.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:05:11.898Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap button \"Attachments\" in \"Files\"", - "target": { - "role": "button", - "name": "Attachments", - "within": "Files" - } - }, - { - "name": "upload", - "summary": "upload \"fixtures/attachment.txt\", \"fixtures/second.txt\" to button \"Attachments\" in \"Files\"", - "target": { - "role": "button", - "name": "Attachments", - "within": "Files" - }, - "paths": [ - "fixtures/attachment.txt", - "fixtures/second.txt" - ] - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/control-inventory.e2e.ts::control%20inventory::upload%20attaches%20the%20named%20project%20files", - "targetId": "web", - "instructionDigest": "6eb8c4cb34d6623811808727d85db0d55946be5724f0cdc01b3c633db3d6f44d", - "paramsDigest": "38fc51716f1b76431a49c2fd70d8a6d11405fa9b9451a1d96cb9e357e70321ce", - "callIndex": 0, - "agent": "default" - }, - "summary": "Attached both fixtures to the Attachments input. The screen confirms “attachment.txt, second.txt” and shows 2 files.", - "startPath": "/e/control-inventory", - "endPath": "/e/control-inventory", - "endAnchors": [ - { - "role": "status", - "name": "Attachments state", - "text": "attachment.txt, second.txt" - }, - { - "role": "button", - "name": "Attachments", - "value": "C:\\fakepath\\attachment.txt" - } - ], - "goneAnchors": [ - { - "role": "status", - "name": "Attachments state", - "text": "none" - }, - { - "role": "button", - "name": "Attachments" - } - ], - "endWaitMs": 12005 - } -} diff --git a/apps/web-benchmark/.e2e/cache/b7c49842b856ad200a8cc89e8940c43cebe359b40233f617dd07ab14a70f6ea8.json b/apps/web-benchmark/.e2e/cache/b7c49842b856ad200a8cc89e8940c43cebe359b40233f617dd07ab14a70f6ea8.json deleted file mode 100644 index e6db7ca0c..000000000 --- a/apps/web-benchmark/.e2e/cache/b7c49842b856ad200a8cc89e8940c43cebe359b40233f617dd07ab14a70f6ea8.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:25:01.187Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap button \"More actions for Launch Approval Draft\" in \"Launch Approval Draft\"", - "target": { - "role": "button", - "name": "More actions for Launch Approval Draft", - "text": "⋯", - "within": "Launch Approval Draft" - } - }, - { - "name": "tap", - "summary": "tap menuitem \"Delete\" in \"Launch Approval Draft\"", - "target": { - "role": "menuitem", - "name": "Delete", - "within": "Launch Approval Draft" - } - }, - { - "name": "tap", - "summary": "tap button \"Remove\" in \"Remove Playbook\"", - "target": { - "role": "button", - "name": "Remove", - "within": "Remove Playbook" - } - }, - { - "name": "type", - "summary": "type \"Launch Approval Draft\" into searchbox \"Search playbooks\"", - "target": { - "role": "searchbox", - "name": "Search playbooks", - "placeholder": "Search" - }, - "value": "Launch Approval Draft" - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20playbook-cleanup", - "targetId": "web", - "instructionDigest": "423676dde62142adee61619b5958db96013371bf84519c7e0441aaa32d6f9fce", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Deleted the playbook \"Launch Approval Draft\" and confirmed removal. Searching for its exact name now shows: No playbooks match \"Launch Approval Draft\".", - "startPath": "/e/playbook-cleanup", - "endPath": "/e/playbook-cleanup", - "endAnchors": [ - { - "role": "searchbox", - "name": "Search playbooks", - "placeholder": "Search", - "value": "Launch Approval Draft" - }, - { - "text": "No playbooks match \"Launch Approval Draft\".", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "role": "searchbox", - "name": "Search playbooks", - "placeholder": "Search" - }, - { - "role": "heading", - "name": "NDA Review" - }, - { - "text": "8 rules" - }, - { - "role": "button", - "name": "More actions for NDA Review", - "text": "⋯" - }, - { - "role": "heading", - "name": "Launch Approval Draft" - }, - { - "text": "4 rules" - }, - { - "role": "button", - "name": "More actions for Launch Approval Draft", - "text": "⋯" - }, - { - "role": "heading", - "name": "Vendor Onboarding" - } - ], - "endWaitMs": 11813 - } -} diff --git a/apps/web-benchmark/.e2e/cache/bd853b0701a46dc06106601d0d3f92bc39908b3010f0bf5dfb96509664157f91.json b/apps/web-benchmark/.e2e/cache/bd853b0701a46dc06106601d0d3f92bc39908b3010f0bf5dfb96509664157f91.json deleted file mode 100644 index 9df2cf3d6..000000000 --- a/apps/web-benchmark/.e2e/cache/bd853b0701a46dc06106601d0d3f92bc39908b3010f0bf5dfb96509664157f91.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:08:17.558Z", - "payload": { - "actions": [ - { - "name": "secondaryTap", - "summary": "secondary-tap node \"report.pdf\"", - "target": { - "text": "report.pdf" - } - }, - { - "name": "tap", - "summary": "tap button \"More actions for report.pdf\"", - "target": { - "role": "button", - "name": "More actions for report.pdf", - "text": "⋯" - } - }, - { - "name": "tap", - "summary": "tap button \"Rename\"", - "target": { - "role": "button", - "name": "Rename" - } - }, - { - "name": "type", - "summary": "type \"summary.pdf\" into textbox \"New file name\"", - "target": { - "role": "textbox", - "name": "New file name" - }, - "value": "summary.pdf" - }, - { - "name": "tap", - "summary": "tap button \"Save\"", - "target": { - "role": "button", - "name": "Save" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20context-menu-trap", - "targetId": "web", - "instructionDigest": "63530e281eafd2d07743a56500bfed3eae14e1ab7a4c0ad00e838e8b51912917", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Renamed report.pdf to summary.pdf. The file list now shows summary.pdf and a success message confirms “File renamed to summary.pdf.”", - "startPath": "/e/context-menu-trap", - "endPath": "/e/context-menu-trap", - "endAnchors": [ - { - "text": "summary.pdf" - }, - { - "role": "button", - "name": "More actions for summary.pdf", - "text": "⋯" - }, - { - "text": "File renamed to summary.pdf", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "report.pdf" - }, - { - "role": "button", - "name": "More actions for report.pdf", - "text": "⋯" - } - ], - "endWaitMs": 11952 - } -} diff --git a/apps/web-benchmark/.e2e/cache/c784073ac220dec545ba09f9ebf7e6f6d4410bf15e585482dc6d2eebb38bd765.json b/apps/web-benchmark/.e2e/cache/c784073ac220dec545ba09f9ebf7e6f6d4410bf15e585482dc6d2eebb38bd765.json deleted file mode 100644 index 6ea16dac5..000000000 --- a/apps/web-benchmark/.e2e/cache/c784073ac220dec545ba09f9ebf7e6f6d4410bf15e585482dc6d2eebb38bd765.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:31:35.957Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap textbox \"editor\"", - "target": { - "role": "textbox", - "testId": "editor" - } - }, - { - "name": "type", - "summary": "type \"release approved\" into textbox \"editor\"", - "target": { - "role": "textbox", - "testId": "editor" - }, - "value": "release approved" - }, - { - "name": "press", - "summary": "press \"Control+Shift+ArrowLeft\" on textbox \"release approved\"", - "target": { - "role": "textbox", - "text": "release approved", - "testId": "editor" - }, - "key": "Control+Shift+ArrowLeft" - }, - { - "name": "press", - "summary": "press \"ArrowRight\" on textbox \"release approved\"", - "target": { - "role": "textbox", - "text": "release approved", - "testId": "editor" - }, - "key": "ArrowRight" - }, - { - "name": "press", - "summary": "press \"Shift+ArrowLeft\" on textbox \"release approved\"", - "target": { - "role": "textbox", - "text": "release approved", - "testId": "editor" - }, - "key": "Shift+ArrowLeft" - }, - { - "name": "pressKey", - "summary": "press \"Shift+ArrowLeft\" on the focused field", - "key": "Shift+ArrowLeft" - }, - { - "name": "pressKey", - "summary": "press \"Shift+ArrowLeft\" on the focused field", - "key": "Shift+ArrowLeft" - }, - { - "name": "pressKey", - "summary": "press \"Shift+ArrowLeft\" on the focused field", - "key": "Shift+ArrowLeft" - }, - { - "name": "pressKey", - "summary": "press \"Shift+ArrowLeft\" on the focused field", - "key": "Shift+ArrowLeft" - }, - { - "name": "pressKey", - "summary": "press \"Shift+ArrowLeft\" on the focused field", - "key": "Shift+ArrowLeft" - }, - { - "name": "pressKey", - "summary": "press \"Shift+ArrowLeft\" on the focused field", - "key": "Shift+ArrowLeft" - }, - { - "name": "pressKey", - "summary": "press \"Shift+ArrowLeft\" on the focused field", - "key": "Shift+ArrowLeft" - }, - { - "name": "tap", - "summary": "tap button \"B\"", - "target": { - "role": "button", - "name": "B", - "testId": "bold-button" - } - }, - { - "name": "tap", - "summary": "tap button \"Check document\"", - "target": { - "role": "button", - "name": "Check document", - "testId": "check-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20rich-text-editor", - "targetId": "web", - "instructionDigest": "e37ad9ac878deebe5c840d23fded9589f67228d8229a059b855347ab5e49ab96", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Typed “release approved,” selected exactly “approved” and applied bold, then checked the document. The page displays “Document approved.”", - "startPath": "/e/rich-text-editor", - "endPath": "/e/rich-text-editor", - "endAnchors": [ - { - "text": "Document approved", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "Type \"release approved\" in the editor and make the word approved bold, then check the document." - }, - { - "role": "button", - "name": "B", - "testId": "bold-button" - }, - { - "role": "textbox", - "testId": "editor" - }, - { - "role": "button", - "name": "Check document", - "testId": "check-button" - } - ], - "endWaitMs": 11667 - } -} diff --git a/apps/web-benchmark/.e2e/cache/cc5c029661738eadc634fea18ac0546c295b4dd4b461303b0ae3a85306591336.json b/apps/web-benchmark/.e2e/cache/cc5c029661738eadc634fea18ac0546c295b4dd4b461303b0ae3a85306591336.json deleted file mode 100644 index 6193240ea..000000000 --- a/apps/web-benchmark/.e2e/cache/cc5c029661738eadc634fea18ac0546c295b4dd4b461303b0ae3a85306591336.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:07:46.298Z", - "payload": { - "actions": [ - { - "name": "type", - "summary": "type \"trail mix\" into combobox \"Search snacks\"", - "target": { - "role": "combobox", - "name": "Search snacks", - "testId": "search-input", - "placeholder": "Search snacks" - }, - "value": "trail mix" - }, - { - "name": "tap", - "summary": "tap option \"Trail Mix 500 g\"", - "target": { - "role": "option", - "name": "Trail Mix 500 g", - "testId": "option-trail-mix-500-g" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20debounced-search", - "targetId": "web", - "instructionDigest": "e5044d8a420a21763ff0ba6ba21266a9cf45e9607dd3496c435089c8d757d4e8", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Searched for “trail mix” and selected exactly “Trail Mix 500 g.” The page confirms it was added to the cart.", - "startPath": "/e/debounced-search", - "endPath": "/e/debounced-search", - "endAnchors": [ - { - "text": "Added Trail Mix 500 g to the cart", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "Search for trail mix and pick exactly Trail Mix 500 g." - }, - { - "role": "combobox", - "name": "Search snacks", - "testId": "search-input", - "placeholder": "Search snacks" - } - ], - "endWaitMs": 11663 - } -} diff --git a/apps/web-benchmark/.e2e/cache/d19edc971653ca3f5728f91aeb3d67b37b96d611b2919d758b2640bc7a7cb6f9.json b/apps/web-benchmark/.e2e/cache/d19edc971653ca3f5728f91aeb3d67b37b96d611b2919d758b2640bc7a7cb6f9.json deleted file mode 100644 index 0c4b59a70..000000000 --- a/apps/web-benchmark/.e2e/cache/d19edc971653ca3f5728f91aeb3d67b37b96d611b2919d758b2640bc7a7cb6f9.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:05:16.616Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap button \"Open details\" in \"Navigation\"", - "target": { - "role": "button", - "name": "Open details", - "within": "Navigation" - } - }, - { - "name": "back", - "summary": "navigate back" - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/control-inventory.e2e.ts::control%20inventory::back%20returns%20from%20the%20details%20view%20to%20the%20inventory", - "targetId": "web", - "instructionDigest": "b654f62f1b06969b737e6bc5900524da39b012965a0d82aef45fce7af099ba6c", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Opened the details view, then used browser history to return to the inventory. The inventory is visible again and Navigation state reads “back on the inventory.”", - "startPath": "/e/control-inventory", - "endPath": "/e/control-inventory", - "endAnchors": [ - { - "role": "status", - "name": "Navigation state", - "text": "back on the inventory" - } - ], - "goneAnchors": [ - { - "role": "status", - "name": "Navigation state", - "text": "not opened" - } - ], - "endWaitMs": 11842 - } -} diff --git a/apps/web-benchmark/.e2e/cache/d2d98b4ec86756f87f6083f831568bc2fbab0b297deebec598d8d06456394613.json b/apps/web-benchmark/.e2e/cache/d2d98b4ec86756f87f6083f831568bc2fbab0b297deebec598d8d06456394613.json deleted file mode 100644 index 12d8de369..000000000 --- a/apps/web-benchmark/.e2e/cache/d2d98b4ec86756f87f6083f831568bc2fbab0b297deebec598d8d06456394613.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:04:56.166Z", - "payload": { - "actions": [ - { - "name": "tool", - "summary": "tool type (run-time value)", - "derived": "whole-node" - }, - { - "name": "tap", - "summary": "tap button \"Apply\"", - "target": { - "role": "button", - "name": "Apply" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20iframe-form", - "targetId": "web", - "instructionDigest": "5ea16155d5cd3ee4fc67e7511534964bca91116fa0412e4523428844f9f85c15", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Read coupon SAVE-1234 from the first frame, entered it in the checkout frame, and applied it. The page shows “Coupon applied.”", - "startPath": "/e/iframe-form", - "endPath": "/e/iframe-form", - "endAnchors": [ - { - "text": "Coupon applied", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "Read the coupon code from the first frame and apply it in the second." - }, - { - "text": "SAVE-1234" - }, - { - "text": "Apply your coupon at checkout" - }, - { - "role": "textbox", - "name": "Coupon code", - "placeholder": "Coupon code" - }, - { - "role": "button", - "name": "Apply" - }, - { - "role": "iframe", - "name": "coupon-frame" - }, - { - "text": "Your coupon code:" - }, - { - "role": "iframe", - "name": "checkout-frame" - } - ], - "endWaitMs": 11600 - } -} diff --git a/apps/web-benchmark/.e2e/cache/d4bcec195be800ccb130aca57cbdfed5f75a657ed95c7d542a00cdd2e627eb98.json b/apps/web-benchmark/.e2e/cache/d4bcec195be800ccb130aca57cbdfed5f75a657ed95c7d542a00cdd2e627eb98.json deleted file mode 100644 index c5dae7506..000000000 --- a/apps/web-benchmark/.e2e/cache/d4bcec195be800ccb130aca57cbdfed5f75a657ed95c7d542a00cdd2e627eb98.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:08:42.763Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap textbox \"Select date\"", - "target": { - "role": "textbox", - "name": "Select date", - "testId": "date-input", - "placeholder": "Select date" - } - }, - { - "name": "tap", - "summary": "tap button \"›\"", - "target": { - "role": "button", - "name": "›", - "testId": "next-month-button" - } - }, - { - "name": "tap", - "summary": "tap button \"›\"", - "target": { - "role": "button", - "name": "›", - "testId": "next-month-button" - } - }, - { - "name": "tap", - "summary": "tap button \"›\"", - "target": { - "role": "button", - "name": "›", - "testId": "next-month-button" - } - }, - { - "name": "tap", - "summary": "tap button \"17\"", - "target": { - "role": "button", - "name": "17", - "testId": "day-button-17" - } - }, - { - "name": "tap", - "summary": "tap button \"Confirm booking\"", - "target": { - "role": "button", - "name": "Confirm booking", - "testId": "confirm-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20date-picker", - "targetId": "web", - "instructionDigest": "dcf88f9a5a9a284823967721c9316e3541f960b36032c247343f678217019dde", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Navigated the calendar from June to September 2026, selected September 17, 2026, and confirmed the appointment. The page displays “Appointment booked for September 17, 2026.”", - "startPath": "/e/date-picker", - "endPath": "/e/date-picker", - "endAnchors": [ - { - "text": "Appointment booked for September 17, 2026", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "role": "textbox", - "name": "Select date", - "testId": "date-input", - "placeholder": "Select date" - }, - { - "role": "button", - "name": "Confirm booking", - "testId": "confirm-button" - } - ], - "endWaitMs": 11634 - } -} diff --git a/apps/web-benchmark/.e2e/cache/dc52f9d235b5d85ae85750d60ecf35759d1dd8bd92dd345d4bad7e2b7f3844b6.json b/apps/web-benchmark/.e2e/cache/dc52f9d235b5d85ae85750d60ecf35759d1dd8bd92dd345d4bad7e2b7f3844b6.json deleted file mode 100644 index 3fdd55771..000000000 --- a/apps/web-benchmark/.e2e/cache/dc52f9d235b5d85ae85750d60ecf35759d1dd8bd92dd345d4bad7e2b7f3844b6.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:08:03.895Z", - "payload": { - "actions": [ - { - "name": "drag", - "summary": "drag node \"Fix payment bug\" to node \"column-done\"", - "target": { - "text": "Fix payment bug", - "testId": "card-fix-payment-bug" - }, - "destination": { - "testId": "column-done" - } - }, - { - "name": "drag", - "summary": "drag node \"Refactor onboarding\" to node \"column-in-progress\"", - "target": { - "text": "Refactor onboarding", - "testId": "card-refactor-onboarding" - }, - "destination": { - "testId": "column-in-progress" - } - }, - { - "name": "tap", - "summary": "tap button \"Submit board\"", - "target": { - "role": "button", - "name": "Submit board", - "testId": "submit-board" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20kanban-board", - "targetId": "web", - "instructionDigest": "79f28df979547ae9abe14bba1c341873d1aa9d74dccc07d1e76bf46c279b8cb5", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Moved Fix payment bug to Done and Refactor onboarding to In Progress, then submitted the board. The page confirmed: “Board matches the goal.”", - "startPath": "/e/kanban-board", - "endPath": "/e/kanban-board", - "endAnchors": [ - { - "text": "Board matches the goal", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "Empty" - } - ], - "endWaitMs": 11834 - } -} diff --git a/apps/web-benchmark/.e2e/cache/de029a9125b87c63d6d9c6b38f6e40a0048f3f10a922221e3a8519d7fc281b5c.json b/apps/web-benchmark/.e2e/cache/de029a9125b87c63d6d9c6b38f6e40a0048f3f10a922221e3a8519d7fc281b5c.json deleted file mode 100644 index cd5339202..000000000 --- a/apps/web-benchmark/.e2e/cache/de029a9125b87c63d6d9c6b38f6e40a0048f3f10a922221e3a8519d7fc281b5c.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:08:30.816Z", - "payload": { - "actions": [ - { - "name": "type", - "summary": "type \"4\" into textbox \"otp-input-0\"", - "target": { - "role": "textbox", - "testId": "otp-input-0", - "inputPurpose": "one-time-code" - }, - "value": "4" - }, - { - "name": "type", - "summary": "type \"9\" into textbox \"otp-input-1\"", - "target": { - "role": "textbox", - "testId": "otp-input-1", - "inputPurpose": "one-time-code" - }, - "value": "9" - }, - { - "name": "type", - "summary": "type \"3\" into textbox \"otp-input-2\"", - "target": { - "role": "textbox", - "testId": "otp-input-2", - "inputPurpose": "one-time-code" - }, - "value": "3" - }, - { - "name": "type", - "summary": "type \"0\" into textbox \"otp-input-3\"", - "target": { - "role": "textbox", - "testId": "otp-input-3", - "inputPurpose": "one-time-code" - }, - "value": "0" - }, - { - "name": "type", - "summary": "type \"2\" into textbox \"otp-input-4\"", - "target": { - "role": "textbox", - "testId": "otp-input-4", - "inputPurpose": "one-time-code" - }, - "value": "2" - }, - { - "name": "type", - "summary": "type \"7\" into textbox \"otp-input-5\"", - "target": { - "role": "textbox", - "testId": "otp-input-5", - "inputPurpose": "one-time-code" - }, - "value": "7" - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20otp-auto-advance", - "targetId": "web", - "instructionDigest": "c878aa968fdbc93d377500f8aecb2f3b0ab701c37b7f9757f8d993f0fc87e109", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Entered the displayed code 493027 into the six segmented inputs. The page now shows “Code verified.”", - "startPath": "/e/otp-auto-advance", - "endPath": "/e/otp-auto-advance", - "endAnchors": [ - { - "text": "Code verified", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "Enter code 493027." - }, - { - "role": "textbox", - "testId": "otp-input-0", - "inputPurpose": "one-time-code" - }, - { - "role": "textbox", - "testId": "otp-input-1", - "inputPurpose": "one-time-code" - }, - { - "role": "textbox", - "testId": "otp-input-2", - "inputPurpose": "one-time-code" - }, - { - "role": "textbox", - "testId": "otp-input-3", - "inputPurpose": "one-time-code" - }, - { - "role": "textbox", - "testId": "otp-input-4", - "inputPurpose": "one-time-code" - }, - { - "role": "textbox", - "testId": "otp-input-5", - "inputPurpose": "one-time-code" - } - ], - "endWaitMs": 13146 - } -} diff --git a/apps/web-benchmark/.e2e/cache/eb4d7bf4a0721038f4d4084e5f0cfab306e08480e8a443b1a7f775d0ae3254dd.json b/apps/web-benchmark/.e2e/cache/eb4d7bf4a0721038f4d4084e5f0cfab306e08480e8a443b1a7f775d0ae3254dd.json deleted file mode 100644 index bca7d9260..000000000 --- a/apps/web-benchmark/.e2e/cache/eb4d7bf4a0721038f4d4084e5f0cfab306e08480e8a443b1a7f775d0ae3254dd.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:04:51.226Z", - "payload": { - "actions": [ - { - "name": "longPress", - "summary": "long-press button \"Hold me\" in \"Gestures\"", - "target": { - "role": "button", - "name": "Hold me", - "within": "Gestures" - } - }, - { - "name": "doubleTap", - "summary": "double-tap button \"Double-click me\" in \"Gestures\"", - "target": { - "role": "button", - "name": "Double-click me", - "within": "Gestures" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/control-inventory.e2e.ts::control%20inventory::a%20long%20press%20and%20a%20double%20click%20are%20chosen%20over%20a%20plain%20tap", - "targetId": "web", - "instructionDigest": "9fe8b7fcfeb1bd36e8d003d5c7e5feb16042211ec61970b63314a6c7bac345b0", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Long-pressed Hold me; Hold state reads “long-pressed.” Double-clicked Double-click me; Double-click state reads “double-clicked”.", - "startPath": "/e/control-inventory", - "endPath": "/e/control-inventory", - "endAnchors": [ - { - "role": "status", - "name": "Hold state", - "text": "long-pressed" - }, - { - "role": "status", - "name": "Double-click state", - "text": "double-clicked" - } - ], - "goneAnchors": [ - { - "role": "status", - "name": "Hold state", - "text": "none" - }, - { - "role": "status", - "name": "Double-click state", - "text": "none" - } - ], - "endWaitMs": 11589 - } -} diff --git a/apps/web-benchmark/.e2e/cache/eecb676bea05dee40705566c2d8732fccd400ba7ac51c8c94c7648a77d53a0dd.json b/apps/web-benchmark/.e2e/cache/eecb676bea05dee40705566c2d8732fccd400ba7ac51c8c94c7648a77d53a0dd.json deleted file mode 100644 index 971d6d199..000000000 --- a/apps/web-benchmark/.e2e/cache/eecb676bea05dee40705566c2d8732fccd400ba7ac51c8c94c7648a77d53a0dd.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:09:25.644Z", - "payload": { - "actions": [ - { - "name": "type", - "summary": "type \"mug\" into textbox \"Filter products\"", - "target": { - "role": "textbox", - "name": "Filter products", - "testId": "filter-input", - "placeholder": "Filter products" - }, - "value": "mug" - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20filters%20the%20list%20and%20the%20URL%20carries%20the%20filter", - "targetId": "web", - "instructionDigest": "c54ac6f470b19c027dd580aa19d24ab48c4f0612b3930178028f20eb76cdd216", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Entered “mug” in the product filter. The list is filtered to Titanium Mug, and the page URL now includes ?q=mug.", - "startPath": "/e/filter-deep-link", - "endPath": "/e/filter-deep-link?q=mug", - "endAnchors": [ - { - "role": "textbox", - "name": "Filter products", - "testId": "filter-input", - "placeholder": "Filter products", - "value": "mug" - } - ], - "goneAnchors": [ - { - "role": "textbox", - "name": "Filter products", - "testId": "filter-input", - "placeholder": "Filter products" - }, - { - "role": "listitem", - "name": "Trail Backpack" - }, - { - "role": "listitem", - "name": "Steel Water Bottle" - }, - { - "role": "listitem", - "name": "Merino Hiking Socks" - }, - { - "role": "listitem", - "name": "Camp Lantern" - } - ], - "endWaitMs": 11735 - } -} diff --git a/apps/web-benchmark/.e2e/cache/f271b31e16a807469b6969bbf4e38a0d4c07fd433f28f771853938e3939de1cc.json b/apps/web-benchmark/.e2e/cache/f271b31e16a807469b6969bbf4e38a0d4c07fd433f28f771853938e3939de1cc.json deleted file mode 100644 index 10448fb72..000000000 --- a/apps/web-benchmark/.e2e/cache/f271b31e16a807469b6969bbf4e38a0d4c07fd433f28f771853938e3939de1cc.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "schemaVersion": "trace-1", - "createdAt": "2026-10-06T13:07:22.689Z", - "payload": { - "actions": [ - { - "name": "tap", - "summary": "tap button \"Accept cookies\"", - "target": { - "role": "button", - "name": "Accept cookies", - "testId": "accept-cookies-button" - } - }, - { - "name": "tap", - "summary": "tap button \"× close overlay\"", - "target": { - "role": "button", - "name": "× close overlay" - } - }, - { - "name": "tap", - "summary": "tap button \"Continue\"", - "target": { - "role": "button", - "name": "Continue", - "testId": "continue-button" - } - } - ], - "executor": { - "name": "e2e-default-agent", - "version": "2" - }, - "recordedFor": { - "testId": "tests-agent/scenarios.e2e.ts::act%20completes%20overlay-trap", - "targetId": "web", - "instructionDigest": "6705af9140f936652f275b785be7e42b157ba15b3fa16eefba2c51d6f3fdcd1b", - "paramsDigest": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "callIndex": 0, - "agent": "default" - }, - "summary": "Dismissed the cookie banner, closed the overlay, and pressed Continue. The page now shows “You made it past the overlay.”", - "startPath": "/e/overlay-trap", - "endPath": "/e/overlay-trap", - "endAnchors": [ - { - "text": "You made it past the overlay", - "testId": "success-message" - } - ], - "goneAnchors": [ - { - "text": "Accept cookies, close whatever is blocking clicks, then press Continue." - }, - { - "text": "Blocked clicks: 0", - "testId": "blocked-count" - }, - { - "role": "button", - "name": "Continue", - "testId": "continue-button" - }, - { - "text": "We use cookies to run this benchmark." - }, - { - "role": "button", - "name": "Accept cookies", - "testId": "accept-cookies-button" - } - ], - "endWaitMs": 11431 - } -} From b1f9eea941824c498211617fc4cfaba9beb0f34a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Kwas=CC=81niewski?= Date: Fri, 9 Oct 2026 10:26:39 +0200 Subject: [PATCH 2/2] fix(cache): a row of a windowed list is not keyed by its list's first rendered row The container key of a row inside an unnamed list was the list's first leaf text, which on Android is whichever row the window rendered first: the Huge Virtualized List tap replayed as 'Row 0512 in Row 0500' and handed off whenever the window started at 0501, once locally and once in CI. A container whose first text sits in a twin of the row the node came up through is a list, and keys nothing by that text; its own label still keys it. The four Android entries that carried such a key are re-recorded. --- .changeset/windowed-list-row-key.md | 5 ++++ ...6fe7f7428189559e7bde4182f3880ad96cacf.json | 11 ++++---- ...b7f9c167b16ed4b3529bcfb41a8ddfc00c882.json | 13 ++++----- ...86df9c679a7e4cb8d69ce679bb2632be623f1.json | 11 ++++---- ...18806f7fb143a4d1d14bb7133008cfdeed82c.json | 16 +++++------ packages/e2e/src/agent/actions.ts | 25 ++++++++++++++++- .../e2e/tests/unit/relocate-within.test.ts | 28 +++++++++++++++++++ 7 files changed, 80 insertions(+), 29 deletions(-) create mode 100644 .changeset/windowed-list-row-key.md diff --git a/.changeset/windowed-list-row-key.md b/.changeset/windowed-list-row-key.md new file mode 100644 index 000000000..ebd6e20c7 --- /dev/null +++ b/.changeset/windowed-list-row-key.md @@ -0,0 +1,5 @@ +--- +'e2e': patch +--- + +A recorded tap on a row of a windowed list no longer depends on which row the list rendered first. The container key of a row was its list's first text, a scroll position on Android (`Row 0512 in Row 0500`), so the replay found the row and still handed off whenever the window started one row later. diff --git a/apps/mobile-benchmark/.e2e/cache/781e4367b42ad0ada60347c98bf6fe7f7428189559e7bde4182f3880ad96cacf.json b/apps/mobile-benchmark/.e2e/cache/781e4367b42ad0ada60347c98bf6fe7f7428189559e7bde4182f3880ad96cacf.json index 2671ceb35..08d2f049e 100644 --- a/apps/mobile-benchmark/.e2e/cache/781e4367b42ad0ada60347c98bf6fe7f7428189559e7bde4182f3880ad96cacf.json +++ b/apps/mobile-benchmark/.e2e/cache/781e4367b42ad0ada60347c98bf6fe7f7428189559e7bde4182f3880ad96cacf.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-10-09T06:52:10.161Z", + "createdAt": "2026-10-09T08:18:53.783Z", "payload": { "actions": [ { @@ -17,13 +17,12 @@ }, { "name": "tap", - "summary": "tap group \"Item 137\" in \"Item 121\"", + "summary": "tap group \"Item 137\"", "target": { "role": "group", "name": "Item 137", "testId": "item-137", - "selector": "id=item-137", - "within": "Item 121" + "selector": "id=item-137" } } ], @@ -39,7 +38,7 @@ "callIndex": 0, "agent": "default" }, - "summary": "Scrolled the paginated list until Item 137 appeared and tapped it. The screen now shows “Found item 137.”", + "summary": "Scrolled the paginated list until Item 137 appeared and tapped it. The screen confirms success with “Found item 137.”", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -83,7 +82,7 @@ "name": "Item 7" } ], - "endWaitMs": 11715, + "endWaitMs": 11523, "keyedBy": { "cacheSchema": "trace-1", "policyVersion": "conservative/6", diff --git a/apps/mobile-benchmark/.e2e/cache/c63e3ef74a352a6ffee15ef0644b7f9c167b16ed4b3529bcfb41a8ddfc00c882.json b/apps/mobile-benchmark/.e2e/cache/c63e3ef74a352a6ffee15ef0644b7f9c167b16ed4b3529bcfb41a8ddfc00c882.json index e925aa5a6..602b64af8 100644 --- a/apps/mobile-benchmark/.e2e/cache/c63e3ef74a352a6ffee15ef0644b7f9c167b16ed4b3529bcfb41a8ddfc00c882.json +++ b/apps/mobile-benchmark/.e2e/cache/c63e3ef74a352a6ffee15ef0644b7f9c167b16ed4b3529bcfb41a8ddfc00c882.json @@ -1,23 +1,22 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-10-09T06:56:44.831Z", + "createdAt": "2026-10-09T08:20:10.538Z", "payload": { "actions": [ { "name": "scrollUntil", - "summary": "scroll down until \"Row 0512\" shows (55 screens)", + "summary": "scroll down until \"Row 0512\" shows (50 screens)", "text": "Row 0512", "direction": "down" }, { "name": "tap", - "summary": "tap group \"Row 0512\" in \"Row 0500\"", + "summary": "tap group \"Row 0512\"", "target": { "role": "group", "name": "Row 0512", "testId": "row-512", - "selector": "id=row-512", - "within": "Row 0500" + "selector": "id=row-512" } } ], @@ -33,7 +32,7 @@ "callIndex": 0, "agent": "default" }, - "summary": "Scrolled the virtualized list to Row 0512 and tapped it. The screen now shows “Found Row 0512.”", + "summary": "Scrolled the virtualized list to Row 0512 and tapped it. The screen confirms success with “Found Row 0512.”", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -77,7 +76,7 @@ "name": "Row 0007" } ], - "endWaitMs": 11730, + "endWaitMs": 11555, "keyedBy": { "cacheSchema": "trace-1", "policyVersion": "conservative/6", diff --git a/apps/mobile-benchmark/.e2e/cache/d823e86a70e480e47e0706526de86df9c679a7e4cb8d69ce679bb2632be623f1.json b/apps/mobile-benchmark/.e2e/cache/d823e86a70e480e47e0706526de86df9c679a7e4cb8d69ce679bb2632be623f1.json index 529fa7c82..76b6fc5d1 100644 --- a/apps/mobile-benchmark/.e2e/cache/d823e86a70e480e47e0706526de86df9c679a7e4cb8d69ce679bb2632be623f1.json +++ b/apps/mobile-benchmark/.e2e/cache/d823e86a70e480e47e0706526de86df9c679a7e4cb8d69ce679bb2632be623f1.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-10-09T06:58:06.582Z", + "createdAt": "2026-10-09T08:20:26.465Z", "payload": { "actions": [ { @@ -22,13 +22,12 @@ }, { "name": "tap", - "summary": "tap group \"Continue\" in \"Deterministic agreement paragraph 8 of …\"", + "summary": "tap group \"Continue\"", "target": { "role": "group", "name": "Continue", "testId": "continue-button", - "selector": "id=continue-button", - "within": "Deterministic agreement paragraph 8 of 14. Nothing in this section is actionabl…" + "selector": "id=continue-button" } } ], @@ -44,7 +43,7 @@ "callIndex": 0, "agent": "default" }, - "summary": "Scrolled to the Accept terms button and tapped it; it changed to “Terms accepted ✓”. Then tapped Continue in the sticky footer, and the screen displayed “Terms accepted.”", + "summary": "Scrolled to and tapped Accept terms, which changed to “Terms accepted ✓”. Tapped Continue; the screen now shows the “Terms accepted” success message.", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -88,7 +87,7 @@ "name": "Section 4" } ], - "endWaitMs": 11695, + "endWaitMs": 11974, "keyedBy": { "cacheSchema": "trace-1", "policyVersion": "conservative/6", diff --git a/apps/mobile-benchmark/.e2e/cache/daf3ae5af4da333cba6ca81767518806f7fb143a4d1d14bb7133008cfdeed82c.json b/apps/mobile-benchmark/.e2e/cache/daf3ae5af4da333cba6ca81767518806f7fb143a4d1d14bb7133008cfdeed82c.json index f33bad6af..346a52314 100644 --- a/apps/mobile-benchmark/.e2e/cache/daf3ae5af4da333cba6ca81767518806f7fb143a4d1d14bb7133008cfdeed82c.json +++ b/apps/mobile-benchmark/.e2e/cache/daf3ae5af4da333cba6ca81767518806f7fb143a4d1d14bb7133008cfdeed82c.json @@ -1,6 +1,6 @@ { "schemaVersion": "trace-1", - "createdAt": "2026-10-09T06:58:46.708Z", + "createdAt": "2026-10-09T08:20:40.923Z", "payload": { "actions": [ { @@ -16,24 +16,22 @@ }, { "name": "tap", - "summary": "tap group \"+\" in \"‹ Back to catalog\"", + "summary": "tap group \"+\"", "target": { "role": "group", "name": "+", "testId": "quantity-increase", - "selector": "id=quantity-increase", - "within": "‹ Back to catalog" + "selector": "id=quantity-increase" } }, { "name": "tap", - "summary": "tap group \"Add to cart\" in \"‹ Back to catalog\"", + "summary": "tap group \"Add to cart\"", "target": { "role": "group", "name": "Add to cart", "testId": "add-to-cart", - "selector": "id=add-to-cart", - "within": "‹ Back to catalog" + "selector": "id=add-to-cart" } }, { @@ -60,7 +58,7 @@ "callIndex": 0, "agent": "default" }, - "summary": "Opened the exact Trail Mix 500 g product, set quantity to 2, added it to the cart, and opened the cart. The cart confirms “2 × Trail Mix 500 g” and “Order ready: 2 × Trail Mix 500 g.”", + "summary": "Opened the specific Trail Mix 500 g product, increased quantity to 2, added it to the cart, and opened the cart. The cart shows “2 × Trail Mix 500 g” and “Order ready: 2 × Trail Mix 500 g”.", "startPath": "dev.e2e.benchmark", "endPath": "dev.e2e.benchmark", "endAnchors": [ @@ -121,7 +119,7 @@ "name": "Granola" } ], - "endWaitMs": 11905, + "endWaitMs": 11915, "keyedBy": { "cacheSchema": "trace-1", "policyVersion": "conservative/6", diff --git a/packages/e2e/src/agent/actions.ts b/packages/e2e/src/agent/actions.ts index 71861baf1..3cdc1f2af 100644 --- a/packages/e2e/src/agent/actions.ts +++ b/packages/e2e/src/agent/actions.ts @@ -97,6 +97,11 @@ const MAX_WITHIN_CHARS = 80; * one. A row whose only text is its own (`
  • Alpha
  • `) * is keyed by it. Only the nearest container counts: the list around a row * with no text names every row alike, so its key would tell no twin apart. + * A container whose first text belongs to a twin of the row the node came + * up through is such a list, and keys nothing by that text: a windowed list + * renders whichever rows are near the viewport, so its first row is a scroll + * position, not a place, and the same row would read as `Row 0512 in Row + * 0500` one time and `in Row 0501` the next. Its own label still keys it. */ export function containerKey( id: string, @@ -105,19 +110,37 @@ export function containerKey( ): string | undefined { const node = nodes.get(id); const own = node === undefined ? '' : squash(node.name ?? node.text ?? ''); + let came = id; let cursor = parents.get(id); while (cursor !== undefined) { const container = nodes.get(cursor); if (container !== undefined && CONTAINER_ROLES.has(container.role ?? '')) { - const key = firstLeafText(container) ?? ownLabel(container); + const key = (namedAfterTwinOf(container, nodes.get(came)) ? undefined : firstLeafText(container)) ?? ownLabel(container); const clean = key === undefined ? '' : bound(collapseText(key), MAX_WITHIN_CHARS); return clean === '' || squash(clean) === own ? undefined : clean; } + came = cursor; cursor = parents.get(cursor); } return undefined; } +/** + * Whether `container`'s first text sits in a child that is a container of + * the same role as `branch`, the child the keyed node came up through, and + * not `branch` itself: the container is then a list of such rows, named + * after whichever one comes first. + */ +function namedAfterTwinOf(container: RedactedNode, branch: RedactedNode | undefined): boolean { + if (branch === undefined || !CONTAINER_ROLES.has(branch.role ?? '')) return false; + for (const child of container.children ?? []) { + const own = (child.children?.length ?? 0) === 0 ? (child.text ?? child.name ?? '').trim() : ''; + if (own === '' && firstLeafText(child) === undefined) continue; + return child.ref.id !== branch.ref.id && child.role === branch.role; + } + return false; +} + /** Parent id of every non-root node, derived from the tree the node map indexes. */ export function parentsOf(nodes: ReadonlyMap): ReadonlyMap { const parents = new Map(); diff --git a/packages/e2e/tests/unit/relocate-within.test.ts b/packages/e2e/tests/unit/relocate-within.test.ts index 224428248..8fe14ac19 100644 --- a/packages/e2e/tests/unit/relocate-within.test.ts +++ b/packages/e2e/tests/unit/relocate-within.test.ts @@ -74,6 +74,34 @@ describe('container keys', () => { expect(relocateDescriptor({ role: 'button', within: within!, position: position! }, live.nodes)).toEqual({ kind: 'found', id: 'b-Alpha' }); }); + it('does not key a row of a windowed list by whichever twin row is rendered first', () => { + // An Android FlatList: an unnamed group of group rows, the rendered window moving with the scroll. + const list = (first: number) => { + const nodes = new Map(); + const parents = new Map(); + const rows: SemanticNode[] = []; + for (let n = first; n < first + 12; n += 1) { + const label = `Row ${String(n).padStart(4, '0')}`; + const text: SemanticNode = { ref: { id: `t-${String(n)}`, revision: 'r' }, role: 'text', text: label }; + const row: SemanticNode = { ref: { id: `row-${String(n)}`, revision: 'r' }, role: 'group', name: label, testId: `row-${String(n)}`, children: [text] }; + nodes.set(text.ref.id, redacted(text)); + nodes.set(row.ref.id, redacted(row)); + parents.set(text.ref.id, row.ref.id); + parents.set(row.ref.id, 'list'); + rows.push(row); + } + nodes.set('list', redacted({ ref: { id: 'list', revision: 'r' }, role: 'group', children: rows })); + return { nodes, parents }; + }; + const recorded = list(500); + expect(containerKey('row-512', recorded.nodes, recorded.parents)).toBeUndefined(); + expect(containerKey('t-512', recorded.nodes, recorded.parents)).toBeUndefined(); + // A control inside a row is still keyed by its row. + expect(containerKey('d1', table().nodes, table().parents)).toBe('Budget draft'); + const live = list(501); + expect(relocateDescriptor({ role: 'group', name: 'Row 0512', testId: 'row-512' }, live.nodes)).toEqual({ kind: 'found', id: 'row-512' }); + }); + it('keys a control by its nearest container only, so rows with no text of their own share no outer label', () => { const nodes = new Map(); const parents = new Map();