fix(sf): ST_MakeValid genplan geom + backfill 881 invalid polygons (#1156) #1157
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1157
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/genplan-makevalid-1156"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #1156.
Проблема
Бэктест ИРД-слоя (2026-06-07) нашёл 881/6436 (13.7%) полигонов в
ekb_genplan_functional_zoneсST_IsValid=false(self-intersecting rings из геопортального GeoJSON). Битые геометрии могут искажать резолв функц.зоны (#1058) в analyze.Фикс
genplan_zones_sync.py— geom-выражение обёрнуто вST_MakeValid(...)→ новые/обновляемые фичи всегда валидны.data/sql/143_genplan_makevalid_backfill.sql— идемпотентный backfill существующих (UPDATE ... SET geom=ST_MakeValid(geom) WHERE NOT ST_IsValid(geom)), авто-применяется через deploy.yml._UPSERT_SQLсодержитST_MakeValid.Verify после деплоя
Review
code-reviewer: ✅ APPROVE. Note (не блокер): ST_MakeValid на вырожденных входах может вернуть GeometryCollection, но колонка
geometry(Geometry,4326)это принимает и ST_Intersects обрабатывает корректно. Если колонку когда-либо сузят до Polygon — обернуть вST_CollectionExtract(...,3).pytest: 8 passed · ruff: clean · migration 143 не коллидит (max=142).
✅ APPROVE — ST_MakeValid genplan geom + backfill (#1156).
Verified prod (своя проверка, не доверяю встроенному review):
ekb_genplan_functional_zone= 6436 строк, 881 сNOT ST_IsValid— точно как заявлено.143не в_schema_migrations.143_genplan_makevalid_backfill.sql: BEGIN/COMMIT,UPDATE … SET geom=ST_MakeValid(geom) WHERE NOT ST_IsValid(geom)— идемпотентно (повторный прогон → 0 строк). Auto-apply через deploy. Single-statement UPDATE на 881 строк — атомарно, быстро.genplan_zones_sync._UPSERT_SQL: geom обёрнут вST_MakeValid(ST_SetSRID(...))→ новые/обновляемые фичи всегда валидны (fix у источника, не только backfill).geometry(Geometry, 4326)(generic) → принимает любой выход ST_MakeValid (GeometryCollection/MultiPolygon) → caveat из встроенного review неактуален; ST_Intersects обрабатывает. NOT NULL не нарушается (ST_MakeValid → не NULL).Verify после деплоя:
SELECT count(*) FILTER (WHERE NOT ST_IsValid(geom)) FROM ekb_genplan_functional_zone→ ожидается 0.Merging (squash).