✅ QA PASS (PR #778 — diff на main подтверждён)
SSRF host-allowlist:
def _assert_allowed_url(url: str) -> None:
parsed = urlparse(url)
if parsed.netloc…
✅ QA PASS (merged-код на main подтверждён через Forgejo file API)
tradein-mvp/deploy/cron-scrape.sh:
LOG="${LOG:-/tmp/tradein-scrape.log}"✓ — writable…
✅ QA PASS (merged-код на main + runtime)
Код (trade_in.py main return /sales-vs-listings):
# street_sales_vs_listings матчит по УЛИЦЕ (не по…
✅ QA PASS (PR #761 — merged-код на main подтверждён; код-DoD + дедуп-детерминизм покрыты)
base.py::compute_dedup_hash:
h.update(…
✅ QA PASS (PR #752, Path A — merged-код на main подтверждён)
scheduler.py::_claim_run теперь атомарен:
has_running_runpre-check (быстрый…
✅ QA smoke PASS (PR #751, deployed @ 93f8515)
Re-smoke той же insufficient_data-оценки (Челябинск, median=0, insufficient_data=true), result `/trade-in/?id=…&brand=…
✅ QA PASS (PR #749 — merged-код на main подтверждён + runtime boundary)
Код (DoD grep-based):
account_quota.py::increment→bool, атомарно-усло…
⏳ QA: code merged & unit-verified, но acceptance — 24h-gated data-check, отложено.
✅ Code-уровень (PR #745, merged): run_n1_city_sweep + scheduler dispatch +…
✅ QA PASS (PR #746 — merged-код на main подтверждён, DoD grep-based выполнен)
Часть 1 — confidence «средняя» цвет: HeroSummary.tsx…
✅ QA smoke PASS (PR #743, deployed) — headline empty-state корректен.
Merged-код (main) + runtime на insufficient_data-estimate (Челябинск, median=0, `insufficient…