feat(sf): включить enable_ird_analyze + latency-hardening (#1102, #1067) #1115

Merged
bot-reviewer merged 1 commit from feat/enable-ird-analyze into main 2026-06-07 10:00:49 +00:00
Owner

Что

Включает feature-flag enable_ird_analyze (ИРД-блок в POST /parcels/{cad}/analyze, #1067 D9b) по дефолту + hardening из pre-enablement чеклиста #1102. Данные на проде уже наполнены (ird_overlays 9630, zone_regulation_cache 33 зоны, planning_projects 1170).

Изменения

  • config.py: enable_ird_analyze: bool = False → True (override ENABLE_IRD_ANALYZE=false остаётся).
  • ird_analyze.py:
    • _GEOPORTAL_TIMEOUT_S = 8 → 4 (короче держим sync-handler; геопортал без SLA).
    • Убран живой вызов functional_zone — слой генплан-функц.зон в геопортале ЕКБ = 0 фич (источник = ФГИС ТП, #1058). Поле остаётся None, helper сохранён для будущего ingest.
    • centroid-guard прокомментирован.
    • → при ON остаётся ≤2 сетевых вызова (krt + zone_regulation cache-first): worst-case ~8s вместо ~24s, типично ~1–2s при тёплом кеше.
  • parcels.py: exc_info=True в catch ИРД-блока (GlitchTip-видимость при ON).

Тесты

Дефолт→True ⇒ 4 endpoint-теста analyze теперь мокают build_ird_analyze_block (в сеть не ходят). test_ird_analyze обновлён под отсутствие functional_zone-вызова. Затронутый pytest зелёный (forecasting 891/891, ird_analyze 4/4, ird_overlay_lookup 5/5, ird_harvest 5/5, analyze endpoint-тесты pass).

После merge (follow-up, не блокер)

  • P95-мониторинг latency /analyze (GlitchTip).
  • qa-smoke: реальный cad ЕКБ → блок ird присутствует, latency в норме.
  • vault known-limitation (geoportal без SLA в hot-пути).

Closes #1102. Часть #1067.

## Что Включает feature-flag `enable_ird_analyze` (ИРД-блок в `POST /parcels/{cad}/analyze`, #1067 D9b) **по дефолту** + hardening из pre-enablement чеклиста #1102. Данные на проде уже наполнены (ird_overlays 9630, zone_regulation_cache 33 зоны, planning_projects 1170). ## Изменения - `config.py`: `enable_ird_analyze: bool = False → True` (override `ENABLE_IRD_ANALYZE=false` остаётся). - `ird_analyze.py`: - `_GEOPORTAL_TIMEOUT_S = 8 → 4` (короче держим sync-handler; геопортал без SLA). - **Убран живой вызов `functional_zone`** — слой генплан-функц.зон в геопортале ЕКБ = 0 фич (источник = ФГИС ТП, #1058). Поле остаётся `None`, helper сохранён для будущего ingest. - centroid-guard прокомментирован. - → при ON остаётся ≤2 сетевых вызова (krt + zone_regulation cache-first): worst-case **~8s** вместо ~24s, типично ~1–2s при тёплом кеше. - `parcels.py`: `exc_info=True` в catch ИРД-блока (GlitchTip-видимость при ON). ## Тесты Дефолт→True ⇒ 4 endpoint-теста analyze теперь мокают `build_ird_analyze_block` (в сеть не ходят). `test_ird_analyze` обновлён под отсутствие functional_zone-вызова. Затронутый pytest зелёный (forecasting 891/891, ird_analyze 4/4, ird_overlay_lookup 5/5, ird_harvest 5/5, analyze endpoint-тесты pass). ## После merge (follow-up, не блокер) - P95-мониторинг latency `/analyze` (GlitchTip). - qa-smoke: реальный cad ЕКБ → блок `ird` присутствует, latency в норме. - vault known-limitation (geoportal без SLA в hot-пути). Closes #1102. Часть #1067.
lekss361 added 1 commit 2026-06-07 09:48:46 +00:00
feat(sf): включить enable_ird_analyze + latency-hardening (#1102, #1067)
All checks were successful
CI / changes (push) Successful in 7s
CI / changes (pull_request) Successful in 6s
CI / backend-tests (push) Successful in 6m23s
CI / backend-tests (pull_request) Successful in 6m20s
7fe39f2e68
lekss361 added the
GG-форсайт
scope/backend
site-finder
labels 2026-06-07 09:49:39 +00:00
bot-reviewer approved these changes 2026-06-07 10:00:44 +00:00
bot-reviewer left a comment
Collaborator

APPROVE — staff+ review.

Verified against live prod: ird_overlays=9630, zone_regulation_cache=33, planning_projects=1170 → flag-flip data-justified.

Two highest-risk items verified in-repo:

  1. Patch target correctparcels.py imports build_ird_analyze_block bare-name (from ...ird_analyze import build_ird_analyze_block); all 4 endpoint-test _PATCHES target app.api.v1.parcels.build_ird_analyze_block → correct namespace, tests won't leak network calls.
  2. Try-wrappedanalyze_parcel calls the block inside if settings.enable_ird_analyze: try/except; geoportal failure cannot surface to caller. exc_info=True is a genuine GlitchTip-visibility improvement.

Latency bound: functional_zone WFS removed → warm-cache path = 2 network calls (krt + zone_index) × 4s timeout; get_or_fetch_zone_regulation confirmed cache-first (DB before urbanCard). Worst-case ~8s, typical sub-second. Graceful degradation: 3 inner except-blocks + 1 outer.

Consistency: functional_zone removal matches #1058 (source = ФГИС ТП, layer empty in EKB geoportal). Config comment updated accurately. test_full_block_assembly correctly asserts functional_zone is None + layer not in client.calls.

🟡 Minor (non-actionable): redundant block["functional_zone"]=None reassignment (cosmetic, commented); unrelated ruff-reformatting in export_parcel_forecast (line-length only). Neither warrants a follow-up.

CI runs API unavailable on this Forgejo instance — relying on mergeable=true + reported-green pytest; post-merge deploy will gate. Merging (squash).

<!-- gendesign-review-bot: sha=7fe39f2 verdict=approve --> ✅ **APPROVE** — staff+ review. **Verified against live prod:** `ird_overlays`=9630, `zone_regulation_cache`=33, `planning_projects`=1170 → flag-flip data-justified. **Two highest-risk items verified in-repo:** 1. **Patch target correct** — `parcels.py` imports `build_ird_analyze_block` bare-name (`from ...ird_analyze import build_ird_analyze_block`); all 4 endpoint-test `_PATCHES` target `app.api.v1.parcels.build_ird_analyze_block` → correct namespace, tests won't leak network calls. 2. **Try-wrapped** — `analyze_parcel` calls the block inside `if settings.enable_ird_analyze: try/except`; geoportal failure cannot surface to caller. `exc_info=True` is a genuine GlitchTip-visibility improvement. **Latency bound:** functional_zone WFS removed → warm-cache path = 2 network calls (krt + zone_index) × 4s timeout; `get_or_fetch_zone_regulation` confirmed cache-first (DB before urbanCard). Worst-case ~8s, typical sub-second. Graceful degradation: 3 inner except-blocks + 1 outer. **Consistency:** functional_zone removal matches #1058 (source = ФГИС ТП, layer empty in EKB geoportal). Config comment updated accurately. `test_full_block_assembly` correctly asserts `functional_zone is None` + layer not in client.calls. 🟡 Minor (non-actionable): redundant `block["functional_zone"]=None` reassignment (cosmetic, commented); unrelated ruff-reformatting in `export_parcel_forecast` (line-length only). Neither warrants a follow-up. CI runs API unavailable on this Forgejo instance — relying on `mergeable=true` + reported-green pytest; post-merge deploy will gate. Merging (squash).
bot-reviewer merged commit 4cc0b6da8c into main 2026-06-07 10:00:49 +00:00
bot-reviewer deleted branch feat/enable-ird-analyze 2026-06-07 10:00:49 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1115
No description provided.