The browser check of a multi-player app takes 40–80 min: drive the state with a script and check what people see #127
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Split off from #121 (finding 7 of the scratch-run analysis,
docs/design/measurements/2026-10-02-scratch-run-efficiency.md).agent.test.browsertook 38 min in run 37 and 80 min over two attempts in run 36 on scratch, a five-player card game.agent.reconcile-tasksran a browser check too, the jobagent.test.browserdoes next.Ideas:
Needs a design, and maybe a hook in the project (a seeded short game) that the brief can point at.
Shipped and live on production (
9ae119c, deployed 2026-10-03). The effect on time is not known until a scratch run with a UI change measures it. Against the three ideas:1. Check what a person sees at states that are cheap to reach — shipped. The browser check's prompt now asks the agent to decide, for each behaviour, whether its state is already there when the page loads, a short click path away, or many actions away, and to reach the last one itself by the first of these the project allows: a documented seed or fixture command, the project's own test client or helpers (it names
AGENTS.md, the README, the package scripts, the scripts directory and the project's tests as where to look), or a script of its own over the API or websocket the page uses that plays every person but the onebrowserholds (kept under$TMPDIR, so not committed). For that one person it may givebrowserone short driver for one tab, run once; a driver in each of several tabs, or one that waits on another tab, is ruled out, and so is changing the app to make a state easier to reach.browseris told it has about 40 turns and that a check may need about 25 actions (both read from the subagent's definition); it looks at the state it is given, reportsUNCLEARnaming the state to script when the steps are longer, and does not write loops across tabs. Abrowserthat reports it reached its maximum steps is not resumed to carry on the same flow (run 39 did that seven times); the agent starts a shorter check from a scripted state, or reports the checkunclear. Each check'snotesays whether its state was loaded, clicked or scripted.2. Hand the subagent the app facts — shipped. Every brief carries what the agent already knows: the page's URL with its path or query (a room code, a seat), the controls and text that matter, what passing shows, what not to touch; the subagent is told to work from the brief and read the source only for what it leaves out. Tabs: one per person, closed when done with, and each brief starts by closing the tabs an earlier task left, because the browser outlives a
task(run 41's second call found four stale ones); a seat that looks taken is probably an earlier tab of the check (run 36's ghost seat).3. Keep browser checks out of reconcile — shipped. Reconcile's prompt and both unit lanes' are told not to check the UI in a browser and not to start
browserwhen the run has it; withbrowserswitched off in settings they do not mention it. The shared delegation guidance, where an apply step that changed the UI may take a look, is not changed on this point.The project hook. This repository documents its own in
AGENTS.md:window.braid, and the fixture backend (ui/dev/fakeosfd.py) with a named run for each state andPOST /_fake/...endpoints that move a state (a test keeps the names true). For scratch, the hook would be its own test client (test_full_game.py,play_pinned_hand) or a seeded short game, which the prompt tells the agent to look for first and to prefer to a script of its own.Checked: tests for the prompt (the game case, the short path, hooks, drivers, too-long checks, not resuming, what a brief carries, tabs, the note) and for the subagent's text; the fast and full lanes; the prompt read for a five-player game whose delta spec describes the end-of-game screen, which leads to a script that plays the other seats and at most one short driver, not five tabs; and on production in the container, the
browsersubagent's rendered text is the new one whilereader,exploreandtesthash identically to before. To measure in the next scratch run with a UI change: the step's duration against 38 and 80 minutes, the number ofbrowsercalls, and whether a script played the other seats.Change record:
openspec/changes/archive/2026-10-03-browser-check-drives-state.