Commit Graph
464 Commits
Author SHA1 Message Date
ciregenzandClaude Fable 5 102ba3927a arena: v3/v4 ingest rounds + the dedupe bug those rounds exposed in the shipped ranker
v3 (44.8%, beats the browser-use-shaped arm's 36.0% by 8.8 points at 3x the speed):
page-text panel, select options on the row, input twins exempt from dedupe. v4 queued:
DOM-attribute names for nameless icons and deep sibling context, which turn the email
suite's unlabeled trash/star icons into addressable rows.

Product fix landed with tests: interactiveRanking.ts collapsed adjacent same-named
inputs and adjacent nameless icons as twins -- measured on MiniWoB, that single
collapse cost enter-password and the whole email suite. Inputs and nameless rows are
now exempt; named icon+label pairs still collapse. 17/17 tests, tsc clean.

ARENA.md carries the full scoreboard, per-category verdicts, what was ingested from
whom, and the honest gaps (drag and vision-less spatial) neither stack solves.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WsbS5x2rYsMDxP2kW3qqmQ
2026-08-09 16:17:11 -07:00
ciregenz 7a942fa9fa Merge remote-tracking branch 'origin/eric/dev' into eric/browser-merged 2026-08-08 09:22:33 -07:00
ciregenz 256e922886 [eric] canvas: browsers and apps share one 10-renderer ceiling, so the two caps can no longer stack to 14 2026-08-07 20:10:59 -07:00
ciregenz 5b63c98854 [eric] dictation: the cursor wins, so a transcript lands where you clicked, not where you started (reverts ENG-176) 2026-08-07 16:01:05 -07:00
ciregenz 4293904214 [eric] canvas: the stock wash is one flat colour, so a default install has no texture left to tear 2026-08-07 15:41:07 -07:00
ciregenz ec0d706a80 [eric] canvas: cut the evictable full-window texture 98MB to 43MB, so the wash has far less left to drop as a band 2026-08-07 15:23:43 -07:00
ciregenz 8364864f9f [eric] canvas: the wash is a real gradient, not a 119KB image the GPU can drop 2026-08-07 14:41:08 -07:00
ciregenzandClaude Opus 5 0a56eb1a85 [eric] browser: take browser-use's visibility rule, drop our arbitrary size floor
Read browser-use's own DOM code (dom/service.py,
is_element_visible_according_to_all_parents) and it decides visibility on CSS
alone: display, visibility, opacity, plus bounds existence and a viewport
intersection with 1000px of slack. There is NO minimum size gate anywhere.

Ours had `r.width >= 80 && r.height >= 16`, and that floor was the entire reason
ACE / CodeMirror-5 / Monaco composers were unreachable: their real input is a ~1x1
offscreen textarea that paints into a sibling div, so it fails a size test by
construction while being the correct fill target. Measured: w3schools and onlinegdb
scored 0/3 while every contenteditable editor (CodeMirror 6, Quill, TinyMCE,
CKEditor) passed -- the input MECHANISM split the suite, not the site.

This replaces the proxyHost patch from the previous commit, which reached the same
sites by walking up to a composer-sized ancestor. Their rule is simpler, more
general, and needs no ancestor heuristic, so proxyHost is deleted rather than kept
alongside. The floor was also doing less work than it looked: junk is excluded by
requiring a rich role or a nearby submit AND score >= 2, and a honeypot is
display:none / opacity:0, which still fails.

Measured on the merged tree, same lane (OSW_MODEL=opus-4-8-cc):
- anon w3schools 3/3, i.e. ACE still reached with proxyHost gone
- holdout 18/20 = 90%, byte-identical to before: no regression
- other_ms unchanged at 1211ms

deepl regressed to not_measurable in the same sweep and it is NOT this change:
A/B'd by restoring the old floor and re-running, it fails identically. deepl now
redirects to /en/translator/l/en/pt-BR and serves one textbox; the redirect predates
the change in the logs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-07 13:11:37 -07:00
ciregenz 511e2b0029 [eric] dictation: a field that dies mid-decode drops the words instead of typing them into a stranger's box 2026-08-07 06:42:41 -07:00
ciregenz 7a1518df32 [eric] telemetry: memory sensor reports cap crossings and leak-shaped growth, silent on healthy sessions 2026-08-07 00:08:53 -07:00
ciregenz 313e3fd07d [eric] dictation: dev-only seam proves the focus-drift guarantee against the real module 2026-08-06 23:47:36 -07:00
ciregenz 0914b276d7 [eric] dictation: the paste target is snapshotted at press-start, so focus drift during decode cannot steal the transcript (ENG-176) 2026-08-06 23:46:09 -07:00
ciregenz c4ff6dad93 Merge remote-tracking branch 'origin/eric/dev' into eric/browser-merged
# Conflicts:
#	electron/package-lock.json
2026-08-06 23:22:12 -07:00
ciregenzandClaude Opus 5 3c50359146 [eric] browser-v3: fix the instrument first, then the two composer bugs it could finally see
Six of the eleven defects here were in the MEASUREMENT, not the product, and they
were wrong in both directions.

Harness, all of which silently produced wrong numbers:
- coverage.py preflight refused every sweep on a box holding exactly one backend:
  stack.sh's supervisor is a `bash -c` quoting the whole uvicorn line, so it carries
  both "-m uvicorn backend.main" AND the venv python path. Discriminate on POSITION.
- stack.sh status reported 2 backends over 1 and 0 webpack over a live dev server
  (webpack retitles its process). A status check whose job is preventing a second
  stack, failing in the direction that lets one land.
- c7_run.sh/c8_run.sh slice r6_be.log while stack.sh names logs by TAG: a stack under
  any other tag hands every trial an empty slice and the sweep reports a confident
  0/108. Now refuses loudly; it caught this exact mistake on first use.
- "Browser command timed out" was bucketed infra. It is ONE command blowing its own
  budget, not a dead webview: all 4 such rows were BrowserFindComposer at exactly its
  30s cap, every run completed after, zero card-gone markers in the whole log. Filed
  as infra it read as 11.8% flake AND lifted holdout reach 70% -> 84%.
- api_retry / rate_limit_error now grade as infra. A provider 429 storm turned clean
  15-21s exclusions into 188s product_no_composer rows.
- bench.py prints reach BOTH ways when a row is UNVERIFIED. An exclusion resting on
  the agent's own word quietly flatters the score, and coverage.py's own instruction
  to confirm it by hand goes unread (I quoted a 100% that excluded onlinegdb).

Timing was measuring 0.2% of the run: prestage completes BEFORE metrics_started_at,
so other_ms was 25ms of a 12700ms median while prestage (4146ms, ~61%) sat in no
bucket at all. prestage_ms/task_ms are now recorded; total_ms is deliberately NOT
redefined, which would invalidate every before/after already taken against it.

Product:
- find_composer rejected ACE/CodeMirror-5/Monaco composers. Their input is a ~1x1
  offscreen textarea that paints into a sibling div, so it can never pass a size
  gate. Accept it when a VISIBLE ancestor is composer-sized; honeypots stay out
  because the input itself must not be display:none/visibility:hidden/opacity:0.
  anon reach 80% -> 100%, holdout 89% -> 90%, p95 38.6s -> 9.7s.
- the composer poll slept a blind 0+1.2+1.4 = 2.6s whenever prestage staged nothing,
  which is nearly every run, and it was the whole of other_ms's suspicious constancy
  (2610-2613ms regardless of tools_ms). Stop when two reads are identical, the rule
  the opener poll 40 lines below already applies. other_ms -53.7%, tools_ms flat.
- prestage no longer navigates to the page it is already on, nor sleeps 0.35s before
  its first settle probe.
- is_replay_boundary reasoned from the NAME alone, so x.com's composer textbox named
  "Post text" was ruled an irreversible send and truncated its replay to a bare
  navigate. Excluded by ROLE; first_unsafe_step now passes role through at all.

Measured on this box: reach 100% (83% if onlinegdb's unverified exclusion is bogus),
0 false successes in ~155 runs, prestage tier-0/1 2702ms, other_ms -53.7%, infra
flake 0/158, holdout 18/20. Criteria 2/4/9 need live writes and are untouched.
Full evidence, including what did NOT work, in e2e/browser-v3/RESULTS_2026-08-06.md.

Also drops the tracked electron/node_modules symlink pointing at another machine's
Downloads folder; it is dangling on every other checkout and re-breaks the install on
any stash or checkout.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 23:21:05 -07:00
ciregenz c3635062a1 [eric] telemetry: long-task observer is the primary wedge sensor, Chromium unresponsive stays as a second witness 2026-08-06 23:05:09 -07:00
ciregenz 751747b293 [eric] telemetry: crash recoveries, wedge recoveries, and rage clicks reach analytics (silent-failure family A) 2026-08-06 22:45:32 -07:00
ciregenz d2ff1bdae7 [eric] experimental: quick pill overlay unwired and parked in .claude/slime-parked 2026-08-06 20:50:13 -07:00
ciregenz 62b8167df6 [eric] apps: preview runtime reconnects after a backend bounce, hard reload falls through to start 2026-08-06 20:50:13 -07:00
ciregenz 83c327781a [eric] dictation: cue volume defaults to 0.7, Eric's ear-tuned level 2026-08-06 20:50:13 -07:00
ciregenz 1637085b9f [eric] overlay: Alt+Space summons a nonactivating slime pill over any app, typed text lands in the composer, Settings-gated off 2026-08-06 16:14:44 -07:00
ciregenz 0e43b7c0c9 [eric] workflows: settle seq forces a post-commit occurrences refetch, the optimistic toggle can no longer strand Coming up on pre-commit truth 2026-08-06 14:49:36 -07:00
ciregenz 5221540e17 [eric] canvas: fullscreen glides straight to the zone, shell wash renders identically to the canvas wash (grain seam class dead), grain hook survives two consumers, tool-ui repairs learn agent id aliases and array rows 2026-08-06 12:22:00 -07:00
ciregenz 9bf90cdcab [eric] voice: pill and capsule sit on the Help button line, no-drag island carries the clicks 2026-08-06 11:34:27 -07:00
ciregenz a64fcef234 [eric] memory: one user-curated fact store rides every agent turn, fully visible and editable in Settings 2026-08-06 10:42:54 -07:00
ciregenz cc619725b2 [eric] canvas: focus bumps write a zOrders override map, card dicts keep identity and clicks stop arming layout PUTs 2026-08-06 09:57:40 -07:00
ciregenz 358017096c [eric] voice: capsule and pill drop lower off the top edge, gloop squash gets a touch more theater 2026-08-06 08:57:01 -07:00
ciregenz ef594f737d [eric] voice: survey-grade accuracy layer, Chromium AGC off, suppress-nst+no-context+flash-attn+temp ladder, window energy gate, sub-second zero-pad, stutter and glossary-echo filters 2026-08-06 00:22:32 -07:00
ciregenz 5130309a72 [eric] voice: text-landed chime cut, haptics toggle, full-clip decode wins at stop, beam search 5; dock tile says Browsers 2026-08-06 00:02:52 -07:00
ciregenz 889b8d6738 [eric] voice: AGC reverted (it clipped normal speech into garble), learned-noun bar raised and store versioned 2026-08-05 23:43:22 -07:00
ciregenz e548f8c4d8 [eric] voice: cue sound toggle+volume, per-site disable, learned proper nouns, quiet-speech AGC, favicon target chip, tone-matched polish; dead overlay hook off BrowserCard (ENG-169) 2026-08-05 23:25:44 -07:00
ciregenz 110d5a9b3b [eric] voice+canvas: personal dictionary rides every decode, local dictation history with copy-back, double-click empty canvas fits everything 2026-08-05 22:43:15 -07:00
ciregenz ba8a9c4038 [eric] voice: scratch-that discards the take, multilingual Small with auto language detect joins the catalog 2026-08-05 21:19:00 -07:00
ciregenz d53eb2b6fc [eric] voice: target chip shows where words will land, idle sliver at the top expands on hover as the always-there entry 2026-08-05 21:17:51 -07:00
ciregenz 2dd10e164a [eric] voice: one-time Globe-key conflict tip when macOS still binds fn to the emoji picker 2026-08-05 21:15:55 -07:00
ciregenz 85659c71e7 [eric] voice: text-landed paste cue on successful injection, lock cue when a tap latches hands-free 2026-08-05 21:14:22 -07:00
ciregenz 3045c42a93 [eric] voice: capsule clears the drag strip (no-drag island at top 30) and glides out as cleanly as it drops in 2026-08-05 21:09:19 -07:00
ciregenz 2df30fab3c [eric] voice: the capsule is a gloop from the top edge, transcript hangs as its tail 2026-08-05 20:18:23 -07:00
ciregenz b19e5da78a [eric] voice: capsule shrinks to Wispr scale and the bars get peak-meter attack 2026-08-05 20:02:30 -07:00
ciregenz 5031116362 [eric] voice: Esc cancels a hot recording, Wispr grammar 2026-08-05 19:55:34 -07:00
ciregenz f7afffba1f [eric] voice: start/stop cues are Material's forward/backward-selection-minimal (CC BY 4.0), Eric's pick 2026-08-05 19:54:33 -07:00
ciregenz 1ad97f4dd2 [eric] voice: start/stop cues are soft percussive pops, not sine chimes (ENG-168) 2026-08-05 18:15:09 -07:00
ciregenz d9813de3cd [eric] voice: whisper's non-speech captions no longer inject as dictation (ENG-167) 2026-08-05 18:07:23 -07:00
ciregenz 73f564574f [eric] dictation: with no cursor anywhere the transcript opens the composer typed-in, never dropped 2026-08-05 15:54:23 -07:00
ciregenz 51ee40a918 [eric] canvas: grain rides the wash layer with baked alpha, an evicted tile drops both to tint instead of the grain cutoff seam 2026-08-05 15:26:38 -07:00
ciregenz f60653174f [eric] browser: agent clicks stop hijacking last-interacted targeting (Ctrl+R, zoom, dictation fallback); .swarm app import refreshes the dock 2026-08-05 15:21:03 -07:00
ciregenz 07a05bd4d3 [eric] windows: settings and marketplace default to browser size, chrome-only naming, top separator line gone 2026-08-05 14:20:25 -07:00
ciregenz b0fb13d16b [eric] settings: modal host deleted, every entry point opens the one app window with deep-linked tabs 2026-08-05 12:19:48 -07:00
ciregenz fc00069f12 [eric] settings: reset-to-default compares against the backend's live default prompt, the stale frontend copy is gone 2026-08-05 12:03:30 -07:00
ciregenz 6ca0773883 [eric] marketplace: a real on-canvas app window like Settings (singleton card, glide, minimize rail), dialog host deleted 2026-08-05 12:03:30 -07:00
ciregenz 2bd8e5c691 [eric] settings: notifications tab with real agent/workflow toggles, skills and tools tabs retired to the marketplace 2026-08-05 11:35:29 -07:00