fix(sql): renumber engineering_networks 85→87 + dedup classid + add SRID 4326 #118
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#118
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/sql-engineering-networks-87-renumber"
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?
Summary
Three critical pre-deploy fixes on untracked
data/sql/85_engineering_networks_191fz.sql(per code review audit May 14) — file is renumbered to87_and corrected before its first prod application.85_pzz_zones_ekb.sqlуже занимает 85_ prefix. Alphabetic deploy order применил бы85_engineering_*ДО85_pzz_*. Renumber → 87_ (no dep на 85_pzz, applies after86_v_bucket_success_score.sql).907015504— был дважды:'Опора металлическая (столб)'+'Опора железобетонная (столб)'. ВторойON CONFLICT DO UPDATEмолча перетёр бы первый → NSI код металлической опоры терялся бы навсегда. Fix:907015504← металлическая (lower-numbered per Минстрой NSI),907015507← железобетонная (заполняет gap907015506→907015508). Comment-меткаverify with Минстрой NSI tableоставлена для pre-deploy verification.geom GEOMETRY(no SRID constraint) разрешил бы insert mix MSK-66 (srid=100000) и WGS84 (srid=4326) → silentST_DWithincorruption. Fix:geom GEOMETRY(Geometry, 4326). CapitalGeometryallows mixed Point/LineString/Polygon, SRID 4326 жёстко фиксирует WGS84.Why
Per code review critical #2 (May 14): without these three fixes, applying the migration would silently lose data (dup classid), break spatial queries (mixed SRID), and risk applying out-of-order against
85_pzz_zones_ekb.sql.Pre-deploy checklist
907015507classid assignment against official Минстрой NSI table — если на самом деле907015507имеет другую семантику, переназначить (см.Engineering_Networks_Schema_191FZ_May12.mdв vault для контекста).engineering_networksдолжен делатьST_Transform(geom_msk66_raw, 4326)перед insert. См.backend/app/core/crs.py(untracked сейчас — отдельный PR).psql -f data/sql/87_engineering_networks_191fz.sql— все CREATE/INSERT idempotent (BEGIN/COMMIT, IF NOT EXISTS, ON CONFLICT DO UPDATE).geomсуществует и валиден после SRID constraint (был на line 134, должен пережить ALTER без re-create).Related
Engineering_Networks_Schema_191FZ_May12.md(24 feature layers + 73 справочника + NSI classifier)Bug_NSPD_WMS_NotBulk_2026_May14.md(motivating scrape architecture for engineering networks)Bot review (не аппрув)
SQL код корректен —
BEGIN/COMMIT, idempotent (IF NOT EXISTS,ON CONFLICT DO UPDATE), ENUM создаются черезDO $$ EXCEPTION WHEN duplicate_object. Три заявленных фикса (renumber 85→87, dedup907015504,geom GEOMETRY(Geometry, 4326)) — все по делу.Мерджить пока не могу — один блокер + один минор:
🔴 Блокер:
classid '907015507'для "Опора железобетонная (столб)" провизорныйInline-комментарий прямо говорит:
assigned by review; 907015507 fills gap between 906 and 508; verify with Минстрой NSI table. Pre-deploy checklist пункт «Verify 907015507 classid assignment against official Минстрой NSI table» — unchecked.Это canonical NSI-классификатор, который попадает в reference table через
ON CONFLICT DO UPDATE name=EXCLUDED.name. Если у Минстроя907015507имеет другую семантику, после применения миграции мы навсегда перетрём правильное значение своим guess'ом, и все ETL-loaders начнут писать вengineering_networks.classid='907015507'с неверной маппой на "железобетонная опора".Два варианта для разблока мерджа:
verify with...комментарий, отметить чеклист — re-review и аппрув.907015507(или поставитьclassid_name='Опора железобетонная (столб) [unmapped]'и не вставлять вeng_ref_classidчерезON CONFLICT) + завести follow-up issue. Это позволяет смерджить корректные части PR без риска корраптить NSI lookup.🟡 Минор (раз file ещё не применялся — самое время поправить)
Опечатка в seed строке
907015602:'Фонати электрические (на столбах)'→ должно быть'Фонари'.Прочие пункты pre-deploy checklist
ETL
ST_Transformcheck, staging test apply, GIST validity — это deploy gate, не code review блокеры. Их разумно держать как pre-apply verification, но они не мешают мерджу самой миграции (она idempotent и не выполняется автоматически на CI).Минор (не блокирующий)
Порядок INSERT в seed-блоке classid:
907015504 → 907015507 → 907015505 → 907015506 → 907015508ломает alphabetic readability. Тривиально, но если будете править провизорный 507 — заодно отсортируйте численно.После фикса
907015507(или закомментирования) — пингани (push новый коммит), на следующей итерации перепроверю на новом SHA.Bot re-review (SHA
3835be6)Оба замечания закрыты безупречно:
✅
907015507закомментирован с TODO(NSI-verify) — выбран безопасный вариант 2: classid удалён из seed-блока, вeng_ref_classidне попадёт,ON CONFLICT DO UPDATEне может перетереть правильное значение. TODO-комментарий чётко описывает, почему и когда возвращать строку. Численный порядок сохранён (504→505→506→507(comment)→508).✅
Фонати → Фонари— поправлено на строке907015602.Жду CI — backend + frontend ещё
IN_PROGRESS(запущены 19:45:51Z). Как только зелёные — мерджу squash.(Не пишу маркер аппрува пока CI не подтвердит, чтобы не запутать loop на следующей итерации.)
Bot final review (SHA
3835be6, CI ✅)907015507commented out + TODO,Фонати→Фонари)approve merge