- deploy.yml: добавлен auth/** в path-триггеры. app.core.auth кэширует
roles.yaml на весь lifetime процесса (@lru_cache), а файл монтируется
ТОЛЬКО в backend (не в worker, у него лишь ./data и ./reports) — без
триггера правка ролей вступала бы в силу в случайный момент.
- ci-tradein.yml: добавлен блокирующий шаг `ruff check` — гейт для tradein
backend его не гонял вообще. Заодно почищены 3 срабатывания RUF059
(unused unpacked vars) в test_estimator_pure_units.py:381 по established
convention (`_` уже используется в соседнем тесте того же файла).
- Удалён мёртвый .github/workflows/ci.yml (Forgejo его не исполняет; GitHub
mirror отстал на 500+ коммитов). Закомментированный postgres-services блок
НЕ перенесён — обоснование, ради которого его хотели оставить как заготовку
("тестов против живой БД нет"), уже неверно: tests/sql/ реально гоняются
против Postgres в ci.yml (#2745), и там намеренно НЕ используется `services:`
— раннер поднимает job и service-контейнеры в сети хоста, где порт 5432
занят прод-базой (см. ci.yml:91-100).
- README.md: убрана ложная привязка mypy к живому CI-гейту (только ruff +
pytest + coverage gate ≥65%); убран stale-блок про .github/workflows/ —
каталог после удаления ci.yml пуст.
H1 (деньги, каждая оценка): time-adjust ДКП-коридора брал СберИндекс `residential_real_estate_prices`,
а для обл.66 это 100% «Первичный рынок» (новостройки) → коррекция направленно противоположна
вторичке (первичка Jan→May +0.89% vs вторичка −0.39%). Fix: SBER_COEFF_DASHBOARDS →
(real_estate_deals, dinamika-tsen-obyavlenii) — обе вторичка; + segment-guard в SQL
(`segment ILIKE '%вторичн%'`) как defense-in-depth. Live-verified: остаются только Вторичный-серии.
H2 (честность): `_compute_confidence` ветка «≥4 адреса» не имела потолка разброса → пул с ±45%
IQR + «расширили радиус из-за нехватки данных» уходил как «medium» вопреки объяснению. Fix:
medium требует IQR/median < 0.35; + force-low при fallback-расширении с разбросом > 0.30.
Regression-гейт: перегенерён baseline (dedup OFF, как в гейте) — ровно 1 из 277 фикстур-кейсов
medium→low (высокодисперсный, справедливо): calibration.medium.n 2→1 (mape 14.64→6.99 —
ненадёжный ушёл), low.coverage 81.82→81.88. Δ минимальна и обоснована. 127 тестов зелёные.
Stale-СберИндекс (72д) — НЕ трогаю в коде: time-adjust валидно ре-базит Jan→May; сброс потерял
бы валидную коррекцию. Реальный gap операционный (pull не гонялся с 19.06) — в scheduler/ops.