From 7d2d8ea8b13c21b4516d05ce99f858175948406e Mon Sep 17 00:00:00 2001 From: ciregenz Date: Sun, 7 Jun 2026 15:12:58 -0700 Subject: [PATCH] [eric] browser: pin why send-skill prefix replay stays parked (opener mis-flagged as Send) --- backend/apps/agents/browser/browser_agent.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/backend/apps/agents/browser/browser_agent.py b/backend/apps/agents/browser/browser_agent.py index cbd202af..9a8ee351 100644 --- a/backend/apps/agents/browser/browser_agent.py +++ b/backend/apps/agents/browser/browser_agent.py @@ -43,10 +43,17 @@ from backend.apps.agents.browser.browser_loop import ( ) from backend.apps.agents.browser.browser_validator import adjudicate_stuck -# Parked: 0-for-4 on paying out (unstable recorded names, no settle between -# replayed steps, recorder keeps exploratory detours); flip back on once -# settle-before-step and detour-pruning land. Full replay of safe skills -# stays on; this only gates the send-skill PREFIX path. +# Send-skill PREFIX replay (replay learned steps UP TO the gated Send, never the +# Send). Settle-before-step + detour-pruning landed, but a live proof (r93/r94) +# showed two upstream blockers still keep it 0-for-N, so it stays parked: +# 1. is_send_step flags the composer OPENER ("Message") as irreversible, so a +# clean skill has no safe prefix to replay (unsafe_i=0). Openers are +# reversible; only the Send is not. Fixing this (shared with the send-guard) +# is the real unlock. +# 2. the recorder sometimes captures a brittle long entity-card name that does +# not match at replay time, failing the prefix and quarantining the skill. +# The mechanism itself FIRES and is safe (clean fallback, send still verified); +# flip back on once #1 lands. _PREFIX_REPLAY_ENABLED = False # Single actions the model could have folded into one BrowserBatch turn;