fix(browser): pageError.location needs valid defaults, not just optional chaining (#918 follow-up) #927
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#927
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/918-pageerror-validator-default"
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?
#918 был неполным фиксом
#918 заменил
pageError.location.{url,lineNumber,columnNumber}→ optional chaining (?.), но этого недостаточно. Когдаlocation === undefined,?.urlдаётundefined, а protocol-валидатор playwright 1.60.0 (tString) требует строку:→ снова рвёт protocol-соединение →
Connection closed while reading from the driver→tradein-browser500 + relaunch. #918 просто обменялTypeErrorнаValidationError. Мой run_34 «verify» грепал сигнатуруTypeError/reading urlи пропустилValidationError(отсюда ложное «0 крашей»).Как воспроизвёл (локальный стек, 2026-05-31)
Когда прокси-IP флагается, avito отдаёт anti-bot challenge-страницу, чей JS кидает locationless uncaught error на КАЖДЫЙ fetch →
ValidationErrorcrash-storm → 0 lots на всех анкерах (стабильно, не интермиттентно). Хот-патч бандла дефолтами на лету → краши прекратились.Фикс
Даём валидные дефолты (проходят валидатор), а не просто
?.:url→?? ''lineNumber/columnNumber→?? 0pageError-событие доставляется без краша → browser возвращает HTML challenge-страницы → pipeline видит firewall и штатно ротирует IP (#623) вместо crash-loop. Это и есть устойчивость, нужная для browser-only avito.
Verify-don't-trust
В работающем контейнере (
docker exec -u root): применил тот жеsed,node --check= OK,pageError.location?.url ?? ''sites = 2, bare = 0. После рестарта браузер перестал падать на challenge-страницах.Сборка падает (exit 1), если паттерн не найден (
[ "$N" -ge 2 ]) — сигнал, что bump playwright сломал патч.Refs #883, #901, #915, #916
✅ APPROVE — корректный root-cause фикс, суперседит неполный #918. Мержу.
url ?? '',line/column ?? 0), проходящиеtString-валидатор playwright — vs #918, где bare?.urlоставлялundefined→ValidationError(тот же protocol-краш, просто другой класс). Точный фикс, а не маскировка.location?.urlне матчит литерал-дот паттерн). Build-fail guard[ -ge 2 ]сохранён; автор verify-in-container (node --checkOK, 2 sites).TypeErrorи пропустилValidationError— отсюда был ложный «0 крашей». Теперь browser отдаёт HTML challenge → pipeline штатно ротирует IP вместо crash-storm.Squash-merge + delete branch.