ciregenz
|
02fee0983e
|
[eric] browser: evict only AGENT-SPAWNED cards (a wedged USER card must never be deleted out from under the user; unverifiable ownership = no delete, reuse-skip is the remedy); caught in the downstream-risk review, 3 tests
|
2026-07-07 23:04:09 -07:00 |
|
ciregenz
|
aa752303cd
|
[eric] browser: verified-action executor = resolve-late resolver + act/verify/re-aim step loop + BrowserActVerified tool (model emits 2-4 dependent click/fill steps in ONE turn, code resolves each by name against the live page, verifies the specific effect, re-aims once; irreversible targets refused in code, solo-send rule unchanged); 16 unit + 1 loop-interception test
|
2026-07-07 22:42:39 -07:00 |
|
ciregenz
|
1e6dd84495
|
[eric] browser: verified-action executor foundation = generic site-agnostic effect verification (did the action produce the SPECIFIC expected effect: url_changed/appeared/gone/filled/cleared), zero per-site code; wired into the send-script's receipt (proves it on the real flow, behavior-identical to the old inline check via an equivalence test) so it's the executor's verification core, not dead scaffolding
|
2026-07-07 18:00:35 -07:00 |
|
ciregenz
|
c423517a9f
|
[eric] browser: close the evict->remount race (wait for the dead webview's teardown to land before recovery spawns its replacement; live-observed the recovery card still capped once when it mounted next to a still-freeing dead one); failure-path-only wait, invisible next to the 15s cap it prevents
|
2026-07-07 17:56:38 -07:00 |
|
ciregenz
|
3123e9a1b4
|
[eric] browser: evict a dead card's webview BEFORE recovery spawns a fresh one (the recovery-card wedge: two heavy pages starve the renderer event loop; unmounting the wedged one leaves the recovery card the only heavy neighbor); immediate removeBrowserCard (no fade/keep-pill) + layout drop, gated by OSW_DEADCARD_EVICT, 2 tests
|
2026-07-07 17:20:57 -07:00 |
|
ciregenz
|
b60f0b94aa
|
[eric] browser: wrong-target detectability probe = the click hit-test now reports WHAT element was actually under the click point, so a click that lands on the wrong element (occluded/stale/moved, and still changes the page) is finally measurable, the failure a page-change metric can't see
|
2026-07-07 16:47:47 -07:00 |
|
ciregenz
|
2b63953650
|
[eric] browser: click-effect probe wraps ALL clickBackendNode exits (was only on the coordinate branch; real-site clicks exit via the covered-element JS path, so the metric captured ~none)
|
2026-07-07 15:48:37 -07:00 |
|
ciregenz
|
8f2565e027
|
[eric] browser: thread self-heal + click-effect metric into BATCH sub-clicks too (most clicks are batched; gating only top-level click_index measured ~none of them) + scan batch sub-results for the telemetry
|
2026-07-07 15:41:07 -07:00 |
|
ciregenz
|
f54f474de7
|
[eric] browser: click-effect metric (measure before fixing) = fingerprint the page before/after a click to catch the INVISIBLE failure the tool-error counter misses (a click that succeeds but hits the wrong/dead element = nothing changes); flag-gated OSW_CLICK_EFFECT_PROBE, zero cost off, 3 unit tests
|
2026-07-07 15:33:33 -07:00 |
|
ciregenz
|
522b55f2c8
|
[eric] browser: log self-heal click recoveries for the A/B (backend can't see the renderer console.log)
|
2026-07-07 15:07:12 -07:00 |
|
ciregenz
|
5ca7308fa5
|
[eric] browser: self-healing click (Phase 1) = a failed cached-index click auto-escalates to fresh by-name resolution in-code before the model ever sees the error (stale index = ~half of all runs' tool-errors, each costs a ~3s re-strategize turn); error-triggered so no double-act, OSW_SELFHEAL_CLICK=0 kill switch, 5 unit tests
|
2026-07-07 15:05:41 -07:00 |
|
ciregenz
|
6bdd75d978
|
[eric] browser: strip the OSW_SENDSCRIPT_PROBE diagnostic scaffolding (its job is done, it captured the overlay ground truth)
|
2026-07-07 14:05:08 -07:00 |
|
ciregenz
|
2894ec3ca6
|
[eric] browser: send-script polls a short window for the lazy overlay composer before declining (r269: prestage's LAST step was the Message click, overlay renders 1-2s later so one immediate read still missed it)
|
2026-07-07 12:16:34 -07:00 |
|
ciregenz
|
b03cb53795
|
[eric] browser: send-script receipt=False must NOT set send_confirmed (r264 set it unconditionally, so an unverified send let the model FALSELY claim delivery); only a cleared-composer receipt confirms
|
2026-07-07 12:06:48 -07:00 |
|
ciregenz
|
9128fd19fb
|
[eric] browser: send-script takes one fresh interactives read before declining (prestage's staged snapshot is frozen at the Message click; the overlay composer lazy-renders a beat later, r263 declined on exactly that stale-snapshot miss)
|
2026-07-07 11:59:58 -07:00 |
|
ciregenz
|
7fdd18c6e8
|
[eric] browser: send-script sends via click-by-name when Send ranks out of the capped list (ground truth: profile-overlay Send is a real button the model clicks by name, absent from the numbered list); overlay back in surface scope, live-validated receipt-cleared in 1.4s on /in/
|
2026-07-07 11:52:29 -07:00 |
|
ciregenz
|
f3102496b2
|
[eric] browser: send-script surface-gate = fire only on full-page /messaging/ composers, decline the profile overlay (live A/B r246-r251: firing on the overlay ran 4x slower + 1/3 vs 3/3 delivery, net-negative; only /messaging/thread/ has a listable Send)
|
2026-07-07 03:09:54 -07:00 |
|
ciregenz
|
3156738a1f
|
[eric] browser: prestage aux nudge for person-messaging tasks (stage through the profile Message surface, never a feed detour; r245 staged to /feed/)
|
2026-07-07 02:41:27 -07:00 |
|
ciregenz
|
4280f173c5
|
[eric] browser: send-script scans longer for the lazy-enabled Send button after a committed fill (r244 aborted at ~1s, LinkedIn enables Send beats later)
|
2026-07-07 02:34:26 -07:00 |
|
ciregenz
|
91a17548d1
|
[eric] browser: send-script two-wall fix caught live (fired on a read-only probe + never fired on real sends): payload from RAW user prompt not brief-polluted composed task, read-only directives decline in code; 2 red-then-green tests
|
2026-07-07 02:26:24 -07:00 |
|
ciregenz
|
b9cf6b9e3f
|
[eric] browser: send-script decline logging + prestage settle detects overlay opens via interactives diff
|
2026-07-07 02:18:13 -07:00 |
|
ciregenz
|
46c300e4ee
|
[eric] browser: unwedge stuck-loading webviews (executeJavaScript queues until load stops; recaptcha/tracker stragglers held isLoading for minutes = every command timed out); guarded eval stops stragglers only after dom-ready
|
2026-07-07 02:18:13 -07:00 |
|
ciregenz
|
bdb30c26b0
|
[eric] browser: fix quoted_payload apostrophe bug (chen's mispaired with the payload quote, silently broke the canonical send errand) + 6 mechanism tests (opener-hop/fill/verify/send/receipt + all abort branches)
|
2026-07-07 00:22:34 -07:00 |
|
ciregenz
|
427d3bf720
|
[eric] browser: send script may open the composer itself (single exact-named opener click, reversible class; prestage settle races left it on the profile)
|
2026-07-06 23:29:51 -07:00 |
|
ciregenz
|
e5a5a88cc9
|
[eric] browser: send script drops the pre-fill Send-button precondition (LinkedIn lazy-renders Send after text commits, trigger could never fire)
|
2026-07-06 22:41:34 -07:00 |
|
ciregenz
|
14feb03da8
|
[eric] browser: staged-send script (code runs fill/verify/send/verify when prestage leaves a ready composer; OSW_SEND_SCRIPT, default off)
|
2026-07-06 22:27:54 -07:00 |
|
ciregenz
|
53e3a4462a
|
Merge remote-tracking branch 'origin/eric/dev' into eric/browser
# Conflicts:
# backend/apps/agents/providers/registry.py
# backend/tests/test_v2_invariants.py
|
2026-07-06 18:37:26 -07:00 |
|
ciregenz
|
95f1996c19
|
[eric] distill: use the reliable cheap aux tier, not the chat's family (gemini/codex sessions 404'd/401'd the same-family aux)
|
2026-07-06 18:09:34 -07:00 |
|
ciregenz
|
fd21ffb603
|
[eric] agents: consolidate shadowed /compact + /clear routes into one handler each + duplicate-route guard test
|
2026-07-06 16:18:53 -07:00 |
|
ciregenz
|
8e571e1bc7
|
[eric] browser: receipt-done requires two-sided evidence (fill seen committed + composer seen cleared); r228 proved click-name alone can lie
|
2026-07-06 15:31:06 -07:00 |
|
ciregenz
|
9da027a948
|
[eric] context: distill dropped history via aux LLM on rebuild + model-aware compaction threshold
|
2026-07-06 15:25:58 -07:00 |
|
ciregenz
|
ad9bb8439e
|
[eric] browser: cut send-path waits (composer-fill poll 6s->2.4s after 3/3 full-timeout misses; skip the 4s text-confirm on send-class clicks the receipt already proves)
|
2026-07-06 15:22:53 -07:00 |
|
ciregenz
|
243207e9b9
|
[eric] build: per-arch bundled python-env; x64 DMG shipped arm64 python, bricking Intel Macs
|
2026-07-06 14:52:26 -07:00 |
|
ciregenz
|
bba6b74d76
|
[eric] browser: receipt-done (clean send click ends the run in code, no Done turn) + staged-run two-tool script hint
|
2026-07-06 14:45:48 -07:00 |
|
ciregenz
|
1b96bc597c
|
[eric] context: lossless tool-report spill (browser+gws caps point at the full file) + visible recovery pill
|
2026-07-06 14:16:31 -07:00 |
|
ciregenz
|
1cc4dbc5d0
|
[eric] browser: flip speed levers default-ON (hop/prestage/trim/evict, kill switch =0); conftest pins them off for the mocked suite
|
2026-07-06 14:12:34 -07:00 |
|
ciregenz
|
98a5d9c9ba
|
[eric] google-workspace: cap must patch ToolManager.call_tool (FastMCP registers a bound handler at init; attribute rebinding never reached stdio dispatch)
|
2026-07-06 05:18:39 -07:00 |
|
ciregenz
|
c431a0c1b7
|
[eric] browser: prestage v2 honest handoff (settle-verified steps only, partial-stage note never claims DONE; unsettled click sent main loop on 27-turn walkabout)
|
2026-07-06 04:48:14 -07:00 |
|
ciregenz
|
1027e24f7b
|
[eric] google-workspace: cap shim tool-result text under the CLI's MCP-spill threshold (gmail-dump thrash)
|
2026-07-06 04:27:46 -07:00 |
|
ciregenz
|
f787414fc6
|
[eric] agents: context-pressure valve, one fresh-recap retry when the CLI dies mid-compaction-churn
|
2026-07-05 21:40:16 -07:00 |
|
ciregenz
|
b3cb4e98b9
|
[eric] browser: prestage visited-set loop guard (A/B nav flap slipped the consecutive-only check)
|
2026-07-05 20:31:29 -07:00 |
|
ciregenz
|
0ade1c2bcf
|
[eric] browser: prestage provenance note + settle-wait after actions + repeat-step guard (perceive raced the page swap, aux re-clicked 4x)
|
2026-07-05 20:16:07 -07:00 |
|
ciregenz
|
c4d83192c4
|
[eric] browser: OSW_PRESTAGE aux-driven nav pre-stage (nav/click-only, irreversible clicks refused in code) so the big loop wakes staged
|
2026-07-05 20:06:06 -07:00 |
|
ciregenz
|
b2c331ecd2
|
[eric] browser: hop reads raw page text (trafilatura drops bylines) + provenance context so aux2 answers instead of re-litigating rank
|
2026-07-05 18:08:18 -07:00 |
|
ciregenz
|
28cdb361e9
|
[eric] browser: flag-gated speed levers (OSW_FASTREAD_HOP one-link follow, OSW_PRELUDE_TRIM mount-poll + nav-skip, OSW_DEADCARD_EVICT) + de-prefix learn_tasks
|
2026-07-05 17:53:39 -07:00 |
|
ciregenz
|
e46013f234
|
[eric] browser-agent: cap result summary+action-log (CLI hard-rejects >25K-token MCP results)
|
2026-07-05 17:52:53 -07:00 |
|
ciregenz
|
4470d1f971
|
[eric] agents: drop spurious @staticmethod on invoke_agent (every InvokeAgent call 500'd)
|
2026-07-05 17:25:08 -07:00 |
|
ciregenz
|
a0947fe13e
|
[eric] build: VMP_REQUIRE_SIGN=0 override for cred-less local cuts (CI keeps the hard gate)
|
2026-07-05 16:53:00 -07:00 |
|
ciregenz
|
f5a851c5c6
|
[eric] vmp: --no-ask must precede the subcommand (castlabs global flag; broke the release afterPack on both platforms)
v1.5.5
|
2026-07-05 16:43:44 -07:00 |
|
ciregenz
|
a459177d39
|
[eric] lint: drop p_ prefix from healer/pool names the tests access (p-private boundary rule)
|
2026-07-05 16:24:13 -07:00 |
|