|
All checks were successful
CI / changes (push) Successful in 7s
CI / frontend-tests (push) Has been skipped
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (push) Successful in 6m24s
Deploy / changes (push) Successful in 6s
Deploy / build-backend (push) Successful in 1m46s
Deploy / build-worker (push) Successful in 2m55s
CI / backend-tests (pull_request) Successful in 6m20s
Deploy / build-frontend (push) Has been skipped
Deploy / deploy (push) Successful in 1m10s
PR #1195 ввёл CTE alias `overlaps` (PG keyword для time-period operator) → каждый POST /analyze падал с syntax error ~10ч до hotfix PR #1197. Mock-БД в tests/api/v1/test_*.py не поймала: MagicMock на db.execute() не парсит SQL. Расширяет существующий phantom-column gate (tests/integration/) на _neighbors_summary и parcel_ird_overlaps SQL: 1. _NEIGHBORS_SUMMARY_SQL вынесен из inline-text в module-level constant в parcels.py (паттерн как в best_layouts/ird_overlay_lookup/krt_lookup). Заодно сконвертирован на canonical CAST(:wkt AS text) — backend.md rule. 2. EXPLAIN-тесты через phantom_check_session (SSH-туннель к prod-PG) — skip без TEST_DATABASE_URL, run в спец CI job. 3. Compile-time guards (всегда работают, без БД): - CTE-alias не должен быть PG-keyword (overlaps/user/current_date/select/where) - SQL не должен содержать :bind::type (psycopg v3 antipattern) Поймал бы: - #1195 (CTE alias overlaps) — оба EXPLAIN-тест + compile-time keyword guard - ❌:type recurring class — compile-time parametrized guard - Phantom column / typo PostGIS function — EXPLAIN parses + plans Refactor backward-compatible: _neighbors_summary использует ту же константу, behavior идентичен. 26 unit-тестов parcels analyze продолжают зелёные. Refs #1198 |
||
|---|---|---|
| .. | ||
| api | ||
| core | ||
| models | ||
| observability | ||
| schemas | ||
| scrapers | ||
| services | ||
| templates | ||
| workers | ||
| __init__.py | ||
| main.py | ||