laya-browser / code /apps /SUITE_C.md
cklxx's picture
v19s: WebChain real-site trajectories, format v5, webgym x7 + DAgger, harness fixes; replaces v17s
454b3e6 verified
|
Raw History Blame Contribute Delete
13 kB

Suite C — held-out, multi-step real-website evaluation

apps/browser_suite_c.py runs the jev-ultrafast agent against 27 live tasks on domains that appear in no training source (finetune/out/train_domains.json, finetune/sites*.txt) and not in suites A/B (checked at start-up, both on the exact host and on the registrable base domain; prints LEAK otherwise). 19 tasks need 4+ actions.

python apps/browser_suite_c.py [name-filter]          REPEATS=3 SUITE_OUT=/tmp/suite_c.json
python apps/suite_c_scripts.py [name-filter]          model-free scripted solutions; REPEATS=3 SHARD=i/n

Validation protocol (no model, no GPU): every task has a scripted solution in apps/suite_c_scripts.py (observe → pick the action by label → act, through jev's Browser). A task is kept only if the script passed its check 3/3 on separate runs and the check failed on the start page (a do-nothing run cannot pass). Checks read the final URL/title/text or the observed form state (checked radios/checkboxes, current <select> value), never the model. Because an observation only covers the viewport, the judge (final_state) scrolls to the top and then screen by screen, merging the actions and visible text of the whole page before the check runs, so a check never depends on where the agent left the scroll position.

Tasks

Steps = number of browser actions of the scripted solution (a scroll counts as one action).

# name site goal scripted steps check verifies
1 met-sunflowers metmuseum.org collection search search "sunflowers", tick "Has image", sort by date oldest first 4: fill, Enter, checkbox, select URL q=sunflowers&showOnly=withImage&sortBy=Date (newest gives DateDesc)
2 nuget-serilog-tool nuget.org search "serilog", package type ".NET tool", sort by downloads 4: fill, Enter, radio, select URL q=serilog, packagetype=dotnettool, sortby=totalDownloads-desc
3 alpine-curl-filter pkgs.alpinelinux.org package name curl, branch v3.20, repo main, arch aarch64 5: fill, 3× select, Enter URL name=curl&branch=v3.20&repo=main&arch=aarch64
4 freesound-rain-cc0 freesound.org search "rain", license CC0 facet, category Soundscapes facet 4: fill, Enter, 2× facet link URL q=rain and f=license:"Creative Commons 0" category:"Soundscapes"
5 ats-shampoo-haircare automationteststore.com search "shampoo", category Hair Care, "search in descriptions", Search, sort price high→low 6: fill, Enter, select, checkbox, button, select URL keyword=shampoo, category_id contains 52, description=1, sort=p.price-DESC
6 bnf-hugo-printed-p2 catalogue.bnf.fr search "victor hugo", facet "Texte imprimé et livre numérique", page 2 4: fill, submit, facet, "Page suivante" URL motRecherche=victor hugo, listeAffinages has FacNatDoc_a, pageEnCours=2
7 vsm-python-installs marketplace.visualstudio.com search "python", Sort By menu → Installs 4: fill, Enter, menu, menuitem URL term=python&sortBy=Installs
8 wp-cache-commercial-redis wordpress.org/plugins search "cache", "Commercial" filter, open Redis Object Cache 4: fill, Enter, filter, link URL /plugins/redis-cache
9 todomvc-active demo.playwright.dev/todomvc add "buy milk" and "walk the dog", show Active 5: fill, Enter, fill, Enter, link URL ends #/active, both todos in text, "2 items left"; localStorage is cleared before each run
10 setlist-radiohead-uk setlist.fm search "radiohead", Artist → Radiohead, Country → United Kingdom 4: fill, Enter, 2× select URL query=radiohead&artist=bd6bd12&country=gb
11 jetbrains-rust-free plugins.jetbrains.com search "rust", "free" filter, open the Rust plugin by JetBrains 4: fill, Enter, button, link URL /plugin/22407-rust
12 luarocks-rapidjson luarocks.org search "json", tick "Include non-root", Search, open rapidjson 5: fill, Enter, checkbox, button, link URL /modules/xpol/rapidjson
13 letcode-dropdowns letcode.in/dropdowns four <select>s: Apple, Batman, Swift, India (the last one is below the fold) 5: 3× select, scroll, select observed current_value of the four selects
14 letcode-radio letcode.in/radio radios Foo + Going, tick "I agree…", untick "Remember me" 4: 2× radio, 2× checkbox observed checked state of the four controls
15 clojars-ring-page3 clojars.org search "ring", go to page 3 (pagination is below the fold) 7: fill, Enter, 4× scroll, link "3" URL q=ring&page=3
16 fred-unemployment-pop fred.stlouisfed.org search "unemployment rate", sort by popularity 4: fill, Enter, sort menu, "Popularity" URL st=unemployment rate and ob=p
17 modrinth-sodium modrinth.com/mods search "sodium", game version 1.21.11, sort by downloads 5: fill, Enter, version button, sort menu, option URL q=sodium&v=1.21.11&s=downloads
18 tvmaze-friends-episodes tvmaze.com search "friends", open show, Episodes tab 4: fill, Enter, link, tab link URL /shows/431/friends/episodes
19 qaclickjet-form rahulshettyacademy.com/dropdownsPractise radio Round Trip, tick Senior Citizen, currency USD, type "India" in the country box 4: radio, checkbox, select, fill observed radio/checkbox/select state and the country field's value
20 cocktail-margarita thecocktaildb.com search "margarita", open Margarita 3 URL /drink/11007
21 mealdb-arrabiata themealdb.com search "arrabiata", open Spicy Arrabiata Penne 3 URL /meal/52771
22 gentoo-openrc-talk wiki.gentoo.org search "OpenRC" (lands on the article), open Discussion 3 URL contains Talk:OpenRC
23 webkit-css-bugs bugs.webkit.org Browse → WebKit product → CSS component 3 URL buglist.cgi?...product=WebKit&component=CSS
24 govdata-wetter-energie govdata.de search "Wetter", category Energie 3 URL q=Wetter&groups=ener
25 fedora-vim-common packages.fedoraproject.org search "vim", open vim-common 3 URL /pkgs/vim/vim-common
26 racket-argo pkgs.racket-lang.org search "json", open argo 3 URL ends /package/argo
27 rdrr-ggplot rdrr.io search "ggplot" 2 URL /search?q=ggplot

Notes on the harder ones:

  • Several targets are only observable after a scroll (Clojars pagination) or inside a menu that must be opened first (VS Marketplace "Sort By", FRED "Sort by Relevance", Modrinth "Sort by"): the agent must open the menu, then pick.
  • letcode-dropdowns / letcode-radio / qaclickjet-form have no URL change at all; they are judged from the observed form state, so they cannot pass by navigating anywhere.
  • todomvc-active depends on persisted state, so the suite (and the script runner) clears the site's localStorage first.

Sites rejected and why

Blocked / bot walls for headless Chromium (Cloudflare "Just a moment", Akamai "Access Denied", 403, captcha): congress.gov, bls.gov, catalog.hathitrust.org, dp.la (CloudFront error), philpapers.org, zbmath.org, tvtropes.org, terraria.wiki.gg, mobygames.com, anaconda.org, hansard.parliament.uk, latlong.net, chessgames.com (403), data.humdata.org (403), pkgs.org ("Human Verification" page after search), imslp.org (its search redirects to Google → captcha), hal.science and openwrt.org ("Oh noes!" error page), search.scielo.org (never finishes "Establishing a secure connection").

In the training data / sites lists (LEAK by domain or base domain), so unusable even though they would be good: data.gov, data.gov.uk, data.europa.eu, data.gouv.fr, open.canada.ca, data.gov.au, openlibrary.org, archive.org, gutenberg.org, musicbrainz.org, discogs.com, boardgamegeek.com, pypi/crates/npm/hex/pub.dev/hackage/metacpan, packages.debian.org, packages.ubuntu.com, aur.archlinux.org, repology.org, addons.mozilla.org, readthedocs.org, bugzilla.mozilla.org, bugs.launchpad.net, bugs.debian.org, bugzilla.kernel.org, gitlab.com, codeberg.org, sourceforge.net, stackoverflow.com, wikidata/wiktionary/wikivoyage/wikiquote/commons, wikihow.com, lichess.org, geonames.org, timeanddate.com, zenodo.org, figshare.com, dataverse.harvard.edu, dblp.org, doaj.org, core.ac.uk, biorxiv.org, inspirehep.net, eric.ed.gov, ncbi/pubmed, worldbank.org, who.int, ec.europa.eu, usa.gov/nist/cdc/fda/epa/nps.gov, ocw.mit.edu, plato.stanford.edu, selenium.dev, w3schools.com, demoqa.com, the-internet.herokuapp.com, saucedemo.com, demoblaze.com, parabank, practice.expandtesting.com, automationexercise.com, opencart demo, nopcommerce demo, orangehrm demo, magento softwaretestingboard, juice-shop, webscraper.io, scrapethissite.com, toscrape.com, scrapingcourse.com (suite B), and all the airline/hotel/travel sites in finetune/sites.txt.

Reachable but rejected for the agent's action space or for flakiness:

  • bugs.kde.org simple search: the Product <select> has ~235 options, so the observation is truncated at 250 actions and the "Words" text field is never offered.
  • gitea.com explore: the custom Sort dropdown's options do not navigate when clicked (URL stays sort=recentupdate).
  • rawg.io: Enter in the search box does not navigate (rawg.io/?); results are only rendered in-page.
  • weather.gov: neither the "Go" nor the "Get Weather" form submits from a synthetic click (no navigation after 1.5 s).
  • data.cityofnewyork.us: the search box is a combobox, so no Enter action is offered, and clicking the search button drops the query when a filter is applied afterwards.
  • uniprot.org: the facet sidebar ("Reviewed") is not rendered in the 1120×780 viewport.
  • bstackdemo.com: vendor checkboxes and "Add to cart" buttons are custom elements that are not observed as actions.
  • cms.demo.katalon.com: search only returns blog posts; the shop's sorting <select> is a selectWoo widget with no observable options.
  • rahulshettyacademy autocomplete: jQuery-UI suggestions have no role=option, so they cannot be clicked (the form task only types into that field and judges its value); its discount checkboxes are mutually exclusive (ticking one clears the others), so the task asks for a single one.
  • testpages.eviltester.com basic form, demo.guru99.com register form: every field is an unlabeled textbox, so the goal cannot name the fields; guru99 also needs a password field, which jev hides.
  • letcode.in/forms: only the Email field remains observable after scrolling (layout overlaps).
  • oxylabs sandbox: the platform sub-category chips ("switch", "wii") are not links.
  • scryfall.com: search box is an unlabeled textbox; sunrise-sunset.org: the Search button does not navigate.
  • pokemondb.net Pokédex filter (Name + Type, client-side): worked 3/4 runs, but on some first loads the whole page is covered by an overlay so no control is observable at all → dropped as flaky.
  • issues.jenkins.io: the "Search for issues" link is only present in a collapsed menu on some loads.
  • ultimateqa.com forms: only name + message + submit (too small); openalex.org (API-only page); melpa/opencollective: no searchable form on the landing page.
  • wikipedia-like wiki farms (miraheze) and mediawiki search are already heavily represented in training; only one MediaWiki task (Gentoo wiki talk page) is kept.

Validation results

Filled in from python apps/suite_c_scripts.py with REPEATS=3 (see the bottom of this file).

Final run of REPEATS=3 python apps/suite_c_scripts.py (2026-09-26, four shards in parallel, final judge code): 27/27 tasks passed 3/3, every start-page check failed (a do-nothing run cannot pass).

task scripted runs steps task scripted runs steps
met-sunflowers 3/3 4 nuget-serilog-tool 3/3 4
alpine-curl-filter 3/3 5 freesound-rain-cc0 3/3 4
ats-shampoo-haircare 3/3 6 bnf-hugo-printed-p2 3/3 4
vsm-python-installs 3/3 4 wp-cache-commercial-redis 3/3 4
todomvc-active 3/3 5 setlist-radiohead-uk 3/3 4
jetbrains-rust-free 3/3 4 luarocks-rapidjson 3/3 5
letcode-dropdowns 3/3 5 letcode-radio 3/3 4
clojars-ring-page3 3/3 7 fred-unemployment-pop 3/3 4
modrinth-sodium 3/3 5 tvmaze-friends-episodes 3/3 4
qaclickjet-form 3/3 4 cocktail-margarita 3/3 3
mealdb-arrabiata 3/3 3 gentoo-openrc-talk 3/3 3
webkit-css-bugs 3/3 3 govdata-wetter-energie 3/3 3
fedora-vim-common 3/3 3 racket-argo 3/3 3
rdrr-ggplot 3/3 2

19 tasks need 4+ actions (the first 19 in TASKS, also reported separately by the suite as "multi-step tasks"). The agent suite itself (apps/browser_suite_c.py) has not been run yet: it needs the laya systemone server (:8791) and sglang (:30000), and the GPU belonged to another session while this suite was built.