diff --git a/backend/apps/agents/browser/browser_skills.py b/backend/apps/agents/browser/browser_skills.py index c4058b0c..06e86328 100644 --- a/backend/apps/agents/browser/browser_skills.py +++ b/backend/apps/agents/browser/browser_skills.py @@ -160,7 +160,10 @@ def normalize_task(task: str) -> str: # value is filled from the LIVE task at replay (so the value is never stored on # disk, a redaction win, and the skill generalizes). Quoting is the explicit, # high-precision signal that this token is a parameter; we never guess. -_QUOTE_RE = re.compile(r'["“”‘’\']([^"“”‘’\']{1,200})["“”‘’\']') +# Lookarounds keep word-internal apostrophes (chen's, don't) from opening a +# span; without them every possessive made each task wording a unique sig and +# silently disabled skill matching for those tasks. +_QUOTE_RE = re.compile(r'(?