fix(tradein-browser): in-page fetch retry + settle tuning for /fetch-json (#1917) #1938
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1938
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/1917-fetch-json-network-retry"
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?
Что
Первый XHR после
goto(origin)в/fetch-jsonиногда падал сNetworkError when attempting to fetch resource(сетевой стек/anti-bot страницы ещё не готов). Лечился только внешним retry с полной ре-навигацией (~30-45с/дом вhouse_imv_backfill, #562). Это перф-фикс (корректность уже была).Как (efficient: in-page retry вместо outer re-navigation)
_fetch_json_once:FETCH_JSON_SETTLE_MS(default 1200, было хардкод 500) — меньше first-fails;fetch(): JS-цикл повторяет ТОЛЬКО при сетевом throw (TypeError/NetworkError), НЕ при HTTP-статусе (4xx/5xx — это успешный resp, short-circuit, решает caller). Повтор внутри страницы ≈FETCH_JSON_RETRY_DELAY_MS(800мс) против ~30-45с полной ре-навигации. Последняя ошибка ре-throw'ится → outer crash-retry контракт цел.FETCH_JSON_SETTLE_MS/FETCH_JSON_INPAGE_RETRIES(default 1) /FETCH_JSON_RETRY_DELAY_MS(default 800)./fetch(SERP,BROWSER_WAIT_MS=6000) — НЕ тронут.Безопасность / совместимость
{status, body}явно (server.py:642) → новый внутреннийattemptsНЕ утекает клиентам;browser_fetcher._post_fetch_jsonвалидирует только наличиеstatus/body. Нулевой риск схемы._do_fetch_jsonrelaunch) и 500-путь без регресса (in-page retry вложен в одну_fetch_json_onceпопытку).Проверки
code-reviewer: ✅ APPROVE, 0 critical (retry-семантика network-only / caller-compat / crash-retry / /fetch-isolation — все трассированы корректными).Refs #1917, #562