c30b3c714e
fix(ci): drop --frozen in tradein test job (uv.lock is gitignored) ( #678 )
...
Deploy Trade-In / build-backend (push) Successful in 40s
Deploy Trade-In / changes (push) Successful in 4s
Deploy Trade-In / test (push) Successful in 23s
Deploy Trade-In / build-frontend (push) Successful in 24s
Deploy Trade-In / deploy (push) Successful in 34s
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-05-29 21:23:56 +00:00
03a3296332
feat(tradein): same-building anchor estimator (#651/#652 v2) behind flag ( #677 )
...
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / test (push) Failing after 5s
Deploy Trade-In / build-backend (push) Has been skipped
Deploy Trade-In / deploy (push) Has been skipped
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-05-29 21:01:21 +00:00
22f1a9c1fc
fix(ci): install uv via official installer in tradein test job (PEP 668) ( #676 )
...
Deploy Trade-In / changes (push) Successful in 4s
Deploy Trade-In / test (push) Failing after 6s
Deploy Trade-In / build-backend (push) Has been skipped
Deploy Trade-In / build-frontend (push) Successful in 23s
Deploy Trade-In / deploy (push) Has been skipped
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-05-29 20:45:12 +00:00
be63b249b5
chore(tradein): close pre-commit ruff gap + add CI pytest gate ( #666 ) ( #675 )
...
Deploy Trade-In / changes (push) Successful in 4s
Deploy Trade-In / test (push) Failing after 4s
Deploy Trade-In / build-backend (push) Has been skipped
Deploy Trade-In / build-frontend (push) Successful in 25s
Deploy Trade-In / deploy (push) Has been skipped
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-05-29 19:18:48 +00:00
96f02d37f3
feat(tradein): blend Avito IMV anchor into estimate + ДКП corridor advisory ( #651 , #652 ) ( #674 )
...
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-backend (push) Successful in 46s
Deploy Trade-In / build-frontend (push) Successful in 1m38s
Deploy Trade-In / deploy (push) Successful in 36s
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-05-29 17:42:06 +00:00
29679a9545
fix(tradein): time-budget estimate enrichment + observable errors to stop opaque 502 ( #654 ) ( #673 )
...
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 41s
Deploy Trade-In / deploy (push) Successful in 34s
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-05-29 17:22:02 +00:00
3b29936245
feat(tradein): white-label branded page for client «Практика» ( #657 ) ( #672 )
...
Deploy Trade-In / changes (push) Successful in 4s
Deploy Trade-In / build-backend (push) Successful in 47s
Deploy Trade-In / build-frontend (push) Successful in 3m2s
Deploy Trade-In / deploy (push) Successful in 37s
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-05-29 16:09:23 +00:00
ed4c8b3f02
feat(tradein): configurable estimate quota + new exhausted-quota copy ( #658 ) ( #671 )
...
Deploy Trade-In / changes (push) Successful in 4s
Deploy Trade-In / build-backend (push) Successful in 46s
Deploy Trade-In / build-frontend (push) Successful in 1m38s
Deploy Trade-In / deploy (push) Has been cancelled
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-05-29 16:07:02 +00:00
47fdd6e4df
fix(tradein): scope GET /history to caller, close cross-pilot data leak ( #656 ) ( #670 )
...
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 42s
Deploy Trade-In / deploy (push) Successful in 59s
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-05-29 15:59:03 +00:00
6ddc9bc661
fix(tradein): bypass rate-limit for authenticated pilots + configurable limit ( #655 ) ( #669 )
...
Deploy Trade-In / changes (push) Successful in 9s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 43s
Deploy Trade-In / deploy (push) Successful in 33s
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-05-29 15:56:30 +00:00
aa8ca9bcfc
feat(backend): add /api/v1/ping liveness endpoint ( #634 )
...
Deploy / changes (push) Successful in 6s
Deploy / build-frontend (push) Has been skipped
Deploy / build-backend (push) Successful in 1m28s
Deploy / build-worker (push) Successful in 3m2s
Deploy / deploy (push) Successful in 1m11s
Co-authored-by: bot-backend <bot-backend@gendsgn.local>
Co-committed-by: bot-backend <bot-backend@gendsgn.local>
2026-05-29 15:53:29 +00:00
6508023c29
Merge pull request 'chore(claude): self-extending tripwire extension + pause-bots guard' ( #668 ) from chore/bot-safety-followups into main
...
Reviewed-on: #668
2026-05-29 14:38:33 +00:00
lekss361
5673dd6298
chore(claude): extend self-extending tripwire + pause-bots guard for stale-claims
...
Two safety follow-ups к autonomous-pipeline (flagged в multiagent-аудите):
- Self-extending guard расширен: reviewer-bot NEVER merge'ит PR, меняющий
_autonomous_pickup.md (claim/kill-switch/merge-FSM contract) или любой
work-as-*.md (persona activation) — раньше защищались только git-pr.md
Auto-merge policy + CLAUDE.md + auto-code-reviewer.md. Закрывает дыру, где
bot мог изменить claim/kill-switch logic без human. Правки в git-pr.md,
auto-code-reviewer.md, work-as-reviewer.md.
- cleanup-stale-claims.sh: pause-bots early-exit. Без него cron освобождал
wip-claim worker'а, приостановленного mid-work (он держит claim до un-pause
per _autonomous_pickup.md), теряя его работу.
2026-05-29 17:36:20 +03:00
870f062587
feat(tradein): expected-sold price in estimate PDF ( #648 S5b — final) ( #665 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 43s
Deploy Trade-In / deploy (push) Successful in 35s
2026-05-29 14:09:46 +00:00
7d749f4080
feat(tradein): dual-display asking vs expected-sold in HeroSummary ( #648 S5a) ( #664 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-backend (push) Has been skipped
Deploy Trade-In / build-frontend (push) Successful in 1m47s
Deploy Trade-In / deploy (push) Successful in 36s
2026-05-29 14:00:49 +00:00
a060651328
feat(tradein): daily asking→sold ratio refresh ( #648 S4) ( #663 )
Deploy Trade-In / build-backend (push) Successful in 45s
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / deploy (push) Successful in 35s
2026-05-29 13:49:36 +00:00
a481a52aa8
Merge pull request 'chore(claude): harden autonomous multi-agent prompts (Path B)' ( #662 ) from chore/autonomous-prompts-pathb into main
...
Reviewed-on: #662
2026-05-29 13:41:37 +00:00
lekss361
f36da624fe
chore(claude): harden autonomous multi-agent prompts (Path B)
...
Fix structural causes of autonomous-window underperformance vs single-window
orchestration — persona prompts were thin pointers that deferred conventions
to unread files and dead-ended every imperfect PR into human review.
- Inline-load conventions: каждый work-тик MANDATORY-читает полный
backend/frontend-engineer.md + rules (был optional pointer, который cost-rule
отучал читать). Cost-saving "не строй контекст" сужен до idle-тиков явно.
- Auto-fix loop: reviewer FIX -> status/needs-fix (assignee остаётся worker),
worker сам подхватывает свой PR и пушит fixup в ту же ветку. blocked+needs-human
зарезервирован под BLOCK (security/data-loss) или 3x fix-fail (+ fix-attempt cap).
QA feature_regression -> needs-fix аналогично. FSM-таблица обновлена.
- Fat issue template: auto-analyst делает mandatory code archeology (Grep/Read)
и пишет Files/сигнатуры/Acceptance/Risk (формат tech-analyst) — issue это
единственный канал к worker'у.
- Model resolution doc: model: frontmatter мёртв в standalone /loop-окне
(модель = модель окна); reviewer-окно запускать в Opus 4.8 осознанно.
- Drift fix: stale-claim cleanup помечен implemented (cron stale-claims.yml в
проде, #610-612); отмечен gap pause-bots vs cleanup.
Новый label status/needs-fix создать в Forgejo до первого запуска auto-fix loop.
2026-05-29 16:38:23 +03:00
35bd0238ef
feat(tradein): estimator additive expected_sold price ( #648 S3) ( #661 )
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 42s
Deploy Trade-In / deploy (push) Successful in 34s
2026-05-29 13:37:33 +00:00
c7b9565cd6
feat(tradein): asking_to_sold_ratios table + derivation ( #648 S2) ( #660 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 24s
Deploy Trade-In / deploy (push) Successful in 34s
2026-05-29 13:18:28 +00:00
d021fc9231
feat(backtest): per-rooms asking→sold correction block ( #648 S1) ( #650 )
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 43s
Deploy Trade-In / deploy (push) Successful in 34s
2026-05-29 13:11:55 +00:00
228d12eab1
feat(backtest): read-only estimator-vs-ДКП accuracy harness ( #648 ) ( #649 )
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 41s
Deploy Trade-In / deploy (push) Successful in 33s
2026-05-29 12:54:00 +00:00
e925a0ba6a
feat(tradein): per-source listing price history — schema + daily snapshot ( #570 ) ( #646 )
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 45s
Deploy Trade-In / deploy (push) Successful in 35s
2026-05-29 12:18:04 +00:00
9380b76cf9
fix(glitchtip): healthcheck via python3 /_health/ — image has no wget ( #644 ) ( #645 )
Deploy / changes (push) Successful in 6s
Deploy / build-worker (push) Successful in 30s
Deploy / build-backend (push) Successful in 30s
Deploy / build-frontend (push) Successful in 31s
Deploy / deploy (push) Successful in 1m0s
2026-05-29 12:04:05 +00:00
af6278eaee
feat(tradein): enrich GlitchTip SDK init — integrations + PII scrub ( #396 ) ( #643 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 46s
Deploy Trade-In / deploy (push) Successful in 33s
2026-05-29 09:23:17 +00:00
7ec19b3536
feat(scheduler): dormant Yandex Realty city-sweep ( #561 ) ( #642 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 43s
Deploy Trade-In / deploy (push) Successful in 33s
2026-05-29 08:50:10 +00:00
097c69e6d7
chore(tradein): drop uvicorn --reload in prod (WatchFiles overhead) ( #641 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-backend (push) Successful in 49s
Deploy Trade-In / build-frontend (push) Successful in 56s
Deploy Trade-In / deploy (push) Successful in 34s
2026-05-29 08:32:34 +00:00
e4b5f14939
test(tradein): estimator pure-helper unit tests + fix None crash in _filter_outliers ( #580 ) ( #640 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 48s
Deploy Trade-In / deploy (push) Successful in 33s
2026-05-29 08:24:18 +00:00
b6cddcd9a8
fix(tradein): plain natural-key dedup_hash for rosreestr deals ( #576 ) ( #638 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Successful in 25s
Deploy Trade-In / build-backend (push) Successful in 45s
Deploy Trade-In / deploy (push) Successful in 37s
2026-05-29 06:56:35 +00:00
40002cfcd2
fix(deploy-tradein): track SQL migrations with _schema_migrations + baseline ( #637 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-backend (push) Successful in 26s
Deploy Trade-In / build-frontend (push) Successful in 31s
Deploy Trade-In / deploy (push) Successful in 44s
2026-05-29 06:34:01 +00:00
bd3e5c8216
feat(tradein): аккаунт praktika + лимит 15 оценок/мес, чистка PRINZIP в UI ( #635 )
Deploy / changes (push) Successful in 5s
Deploy Trade-In / changes (push) Successful in 7s
Deploy / build-backend (push) Successful in 29s
Deploy / build-frontend (push) Successful in 28s
Deploy / build-worker (push) Successful in 29s
Deploy Trade-In / build-backend (push) Successful in 46s
Deploy / deploy (push) Successful in 58s
Deploy Trade-In / build-frontend (push) Successful in 1m40s
Deploy Trade-In / deploy (push) Successful in 39s
2026-05-28 22:04:58 +00:00
312df8536a
feat(tradein): infer repair_state from listing description text ( #622 ) ( #632 )
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / deploy (push) Successful in 38s
Deploy Trade-In / build-backend (push) Successful in 48s
2026-05-28 15:37:34 +00:00
6cb3d7515c
fix(tradein): per-bucket velocity formula + realistic срок продажи ( #574 ) ( #631 )
Deploy / build-backend (push) Successful in 1m25s
Deploy / build-worker (push) Successful in 2m57s
Deploy / deploy (push) Successful in 1m10s
Deploy / changes (push) Successful in 5s
Deploy / build-frontend (push) Has been skipped
2026-05-28 15:35:16 +00:00
e72cf87e35
feat(tradein): автоматизация cian-backfill + rosreestr-import через scheduler ( #560 #563 ) ( #630 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy / build-frontend (push) Has been skipped
Deploy / build-backend (push) Successful in 29s
Deploy / build-worker (push) Successful in 30s
Deploy Trade-In / build-backend (push) Successful in 47s
Deploy Trade-In / deploy (push) Successful in 43s
Deploy / deploy (push) Successful in 58s
2026-05-28 15:31:24 +00:00
d842811390
refactor(tradein): normalize repair_state raw→enum at ingest ( #621 ) ( #629 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 49s
Deploy Trade-In / deploy (push) Successful in 36s
2026-05-28 15:18:11 +00:00
4e4762f234
fix(tradein): backfill kn obj_class (parser + 3-pass) ( #572 ) ( #628 )
Deploy / changes (push) Successful in 6s
Deploy / build-frontend (push) Has been skipped
Deploy / build-backend (push) Successful in 1m27s
Deploy / build-worker (push) Successful in 3m9s
Deploy / deploy (push) Successful in 1m9s
2026-05-28 15:04:32 +00:00
1731704ddc
feat(tradein): houses.cian_zhk_url column + backfill ( #568 ) ( #627 )
Deploy Trade-In / changes (push) Successful in 6s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 51s
Deploy Trade-In / deploy (push) Successful in 36s
2026-05-28 13:57:43 +00:00
609ac8ea9d
fix(tradein): backfill kn price_per_m2 via sale_graph + peer median ( #573 ) ( #625 )
Deploy / changes (push) Successful in 6s
Deploy / build-frontend (push) Has been skipped
Deploy / build-backend (push) Successful in 1m43s
Deploy / build-worker (push) Successful in 2m41s
Deploy / deploy (push) Successful in 1m11s
2026-05-28 13:50:45 +00:00
07106d744a
chore(mv): regression test + sql rule for weighted AVG ( #295 ) ( #626 )
Deploy / changes (push) Successful in 5s
Deploy / build-frontend (push) Has been skipped
Deploy / build-worker (push) Successful in 33s
Deploy / build-backend (push) Successful in 37s
Deploy / deploy (push) Has been cancelled
2026-05-28 13:49:54 +00:00
ec26e5813f
fix(tradein): implement listings_snapshots + offer_price_history writers ( #567 ) ( #624 )
Deploy Trade-In / deploy (push) Successful in 43s
Deploy Trade-In / build-backend (push) Successful in 1m2s
Deploy / changes (push) Waiting to run
Deploy / build-backend (push) Blocked by required conditions
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy / build-worker (push) Blocked by required conditions
Deploy / build-frontend (push) Blocked by required conditions
Deploy / deploy (push) Blocked by required conditions
2026-05-28 13:49:52 +00:00
6553e5830f
fix(tradein-imv): harden Avito IMV anti-bot path ( #565 ) ( #620 )
Deploy Trade-In / deploy (push) Successful in 36s
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 42s
2026-05-28 11:29:11 +00:00
81bf7e6def
fix(tradein-imv): harden Avito IMV anti-bot path + offline contract tests ( #565 )
...
Add warm-up GET /evaluation/realty + production browser header set (Sec-Fetch,
X-Requested-With, 25s timeout) mirroring avito.py, чтобы защитить 3-step IMV flow
от server-IP анти-бот 403. Refactor step B/C парсинга в pure helpers
(_parse_geo_position/_parse_price/_parse_placement_history/_parse_suggestions)
+ fixture-driven offline тесты из живых JSON-captures.
Честный диагноз: контракт (geoFieldsHash, price-блок, categoryId=24) НЕ менялся —
проверено живым capture'ом с этой машины (A→B→C, recommended 7.39M). Реальная
причина #565 — скорее анти-бот по PROD-IP, не код → если #565 останется после
deploy, настоящий фикс = ротация egress IP воркера (devops, отдельно).
code-reviewer: ✅ APPROVE no critical — warm-up non-fatal, injected-session path
unchanged, refactor preserves shapes, graceful-None сохранён, fixtures без PII.
Tests: 12 new (27 total). Ruff clean.
Closes #565
2026-05-28 16:29:05 +05:00
3dfa179d47
feat(tradein): калибровка repair-коэффициентов base 1.0 ( #7 ) ( #619 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 44s
Deploy Trade-In / deploy (push) Successful in 35s
2026-05-28 11:15:59 +00:00
33ee00c065
feat(tradein): калибровка repair-коэффициентов с base 1.0 ( #7 )
...
_REPAIR_COEF → tunable market-эвристика: needs_repair=0.94, standard=1.00
(baseline no-op; было 0.98 — срезало 2% с каждой standard-оценки), good=1.05,
excellent=1.10. Деривация из данных отклонена: listings.repair_state покрытие
~2%, сырые un-normalized значения, медианы confounded площадью (issue #7 ).
+ regression-тест (читает _REPAIR_COEF динамически — переживёт рекалибровку):
ratio excellent/needs_repair, standard/None no-op, наличие/отсутствие note.
Поправлен mislabeled comment над _IMV_HOUSE_TYPE_MAP. _IMV_REPAIR_MAP не тронут.
code-reviewer: ✅ APPROVE no critical/minor. Tests: 5 new + 7 cian-integration.
Ruff clean.
Closes #7
2026-05-28 16:15:54 +05:00
1058dc2430
fix(tradein): decode Avito houses URL-encoded __preloadedState__ ( #566 ) ( #618 )
Deploy Trade-In / build-backend (push) Successful in 44s
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / deploy (push) Successful in 35s
2026-05-28 10:58:54 +00:00
a3f45a6722
fix(tradein): decode Avito houses URL-encoded __preloadedState__ ( #566 )
...
Avito switched the houses-catalog state blob from JSON.parse("<js-escaped>")
to a URL-encoded string literal, wrapped the 10 widgets in
placeholders[0].widgets, и re-nested developmentData под props.housePage.
JS-unescape path silently failed → houses rows перестали наполняться
(starve'ит #6 same-building + #569 deal centroids).
Extract decode в pure _extract_preloaded_state (urllib.parse.unquote,
JSON.parse fallback для старой формы), add _flatten_widgets, и сделать
_parse_house_page tolerant к обеим developmentData/ratingPreview формам.
Real-HTML fixture (Yumasheva-6 EKB) + 4 regression-теста.
code-reviewer: ✅ APPROVE no critical (regex anchoring verified, decode
safe — no eval/unicode_escape, backward-compat реальный, delisted-house
envelope degrade'ит gracefully, fixture без PII/secrets). Tests: 22 passed.
Closes #566
2026-05-28 15:58:19 +05:00
7c715c9249
feat(tradein): бейдж точности адреса qc_geo на карточке (accuracy #1 ) ( #617 )
Deploy Trade-In / build-frontend (push) Successful in 1m42s
Deploy Trade-In / deploy (push) Successful in 36s
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-backend (push) Successful in 47s
2026-05-28 10:37:54 +00:00
492dd0aba6
feat(tradein): бейдж точности адреса (qc_geo) на карточке оценки (accuracy #1 )
...
Честность к пользователю: показываем насколько точно определён адрес —
«до дома» / «до улицы» / «приблизительно» — рядом с confidence.
- schemas/trade_in.py: address_precision: Literal["house","street","approximate"]|None
- estimator.py: _qc_geo_to_precision (qc_geo 0→house, 1→street, ≥2→approximate,
None→None), set в основном return + _empty_estimate
- api/v1/trade_in.py: get_estimate + estimate_pdf теперь rehydrate'ят DaData-поля
(canonical_address, house_cadnum, house_fias_id, address_precision, metro_nearest)
из row — раньше на ?id= reopen / в PDF вся Q1-обогащёнка пропадала (поймал
code-reviewer). Колонки уже persisted, фикс read-path.
- frontend: AddressPrecision type + precision-badge в HeroSummary (.card-meta),
токены --success/--accent-2/--bg-card-alt, без новых токенов.
Канон: tech-analyst (план) → backend-engineer + frontend-engineer → code-reviewer
(✅ APPROVE, поймал reopen-path gap) → fold-in fix. Tests: 7 passed, tsc clean, ruff clean.
match_house_readonly wiring отложен (fast-follow).
2026-05-28 15:37:33 +05:00
e716252081
feat(tradein): приоритизировать DaData house-backfill на дома с листингами ( #2 ) ( #616 )
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 46s
Deploy Trade-In / deploy (push) Successful in 36s
2026-05-28 10:17:06 +00:00
47ba362303
feat(tradein): приоритизировать DaData house-backfill на дома с листингами (accuracy #2 )
...
ORDER BY has_active_listings DESC, id во всех priority-бакетах + новый
--priority listings (focused sweep: NULL cadnum + есть active listing).
Дневной 100/day budget сначала закрывает дома, которые реально появляются
в оценках → estimator #6 cadastr_exact same-building матчинг загорается на
real estimate targets за дни, а не недели.
Correlated EXISTS бьёт по partial-индексу listings_house_id_fk_idx.
Write-path / EKB-guard / SAVEPOINT / qc_geo rules не тронуты.
code-reviewer: ✅ APPROVE no critical. Tests: 40 passed. Ruff clean.
2026-05-28 15:17:01 +05:00