# 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 ``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 `` 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.