gendesign/backend/tests/services/forecasting
bot-backend ed7e9f32a1
All checks were successful
CI Trade-In / changes (pull_request) Successful in 10s
CI / changes (pull_request) Successful in 11s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m47s
CI / backend-tests (pull_request) Successful in 16m39s
docs(ptica): фактор уверенности называл не ту величину
Фактор `domrf_coverage` в §15-движке уверенности описан как «покрытие
маппинга domrf↔objective, главный sparse-риск проекта ~2.5%». Продьюсера
для этой величины НЕТ и не было: слот `supply_layers.domrf_coverage`
никто не заполняет — `orchestrator._summarize_supply_layers` это прямо
оговаривает («нет дешёвого продьюсера»).

Значение всегда приходит из второй ветки: `analyze.market_data_coverage_pct`
= competitors_priced / competitors_total, то есть доля БЛИЖНИХ ЖК (3 км)
с ценой из Objective. Замер на проде 13.08 по 2074 анализам: min 0%,
медиана 40%, среднее 31.7%, max 70% — другая величина другого порядка.

Пользователь при этом читал «Известные планировки и площади есть у 40%
будущих проектов». Ни «планировки», ни «будущих» к тому, что измерено,
отношения не имеют.

Правится ТОЛЬКО то, что читает человек: нота фактора и докстроки.
Значение, пороги и ключ `domrf_coverage` не тронуты — ключ читает фронт
(ForecastConfidenceBlock, ConfidencePanel) как стабильный контракт,
и тест это фиксирует.

Отдельно записал в комментарии у порогов: high=0.6 / low=0.2 подбирались
под ожидавшиеся ~2.5%, а реальная медиана 40% — пороги стоит пересмотреть
замером, отдельным заходом.

Чего НЕ сделал и почему: аудит предлагал убрать fallback, чтобы значение
стало None. Проверил — так нельзя: на None фактор вообще не добавляется
в список (guard `if domrf_coverage is not None`), а агрегат weakest-link,
то есть исчезновение фактора МОЖЕТ поднять уверенность. Выбросить реальный
сигнал ради «честного неизвестно» здесь было бы хуже, чем назвать его верно.

Тесты двусторонние: против confidence_engine из main падает ровно новый
test_note_names_what_is_actually_measured.

Хунки форматирования — не мои: pre-commit ruff v0.7.4 против 0.15.12 (#2864).

Refs #2464
2026-08-13 22:44:32 +05:00
..
__init__.py feat(forecasting): monthly macro series + regime classifier (#951b) (#1007) 2026-06-03 05:37:43 +00:00
test_affordability.py fix(week-review): backend-аудит v2 — 82 фиксов (#1660) 2026-06-17 17:13:38 +00:00
test_confidence_engine.py docs(ptica): фактор уверенности называл не ту величину 2026-08-13 22:44:32 +05:00
test_demand_normalization.py feat(forecasting): wire Almon-ADL rate estimator into §9.6 consumers (#978) 2026-06-04 10:33:31 +00:00
test_demand_supply_forecast.py fix(forecast): посегментный+дедуплицированный индекс дефицита (#1959) 2026-06-27 22:50:58 +05:00
test_macro_coefficient.py feat(macro): CBR inflation (ИПЦ YoY) -> macro_indicator + activate §9.5 channel (#946) 2026-06-08 11:41:14 +05:00
test_macro_series.py fix(forecasting): SAVEPOINT-isolate §22 db.execute failures + close RELEASE-trap (#2464) (#2466) 2026-07-08 05:41:35 +00:00
test_normalize.py fix(forecasting): count non-zero observations in normalize guard, not zero-filled buckets (#1638) 2026-06-17 20:39:00 +03:00
test_orchestrator.py fix(forecasting): SAVEPOINT-isolate §22 db.execute failures + close RELEASE-trap (#2464) (#2466) 2026-07-08 05:41:35 +00:00
test_product_scoring.py fix(site_finder): SAVEPOINT-isolate gate-lookup db.execute swallows (#2464 Wave 2) (#2468) 2026-07-08 06:46:03 +00:00
test_rate_sensitivity.py feat(forecasting): §9.6 key-rate sensitivity module (#951d, advisory) (#1009) 2026-06-03 06:06:16 +00:00
test_recommendation.py fix(forecast): посегментный+дедуплицированный индекс дефицита (#1959) 2026-06-27 22:50:58 +05:00
test_regression.py feat(forecasting): wire Almon-ADL rate estimator into §9.6 consumers (#978) 2026-06-04 10:33:31 +00:00
test_report.py feat(forecasting): §13 SiteFinderReport object (#987, 955-A1) (#1019) 2026-06-03 08:33:01 +00:00
test_report_assembler.py fix(objective): physflat-dedup current-state consumers + honest n_sold window (#1964) 2026-06-28 04:27:43 +05:00
test_sales_series.py fix(forecasting): SAVEPOINT-isolate §22 db.execute failures + close RELEASE-trap (#2464) (#2466) 2026-07-08 05:41:35 +00:00
test_scenarios.py fix(forecasting): honest scenarios collapse when β rate-sensitivity gate fails (audit #1871 P1) 2026-06-22 19:06:22 +05:00
test_special_indices.py fix(forecasting): SAVEPOINT-isolate §22 db.execute failures + close RELEASE-trap (#2464) (#2466) 2026-07-08 05:41:35 +00:00
test_what_to_build.py feat(forecasting): what-to-build ranker + MAI proxy (#981, 952-B) (#1013) 2026-06-03 07:07:17 +00:00