feat(best-layouts): атрибуция velocity по ядру комплекса (#2177 шаг 2b) #2239

Merged
bot-backend merged 2 commits from feat/velocity-core-attribution-2177 into main 2026-07-02 22:41:26 +00:00
Collaborator

Summary

  • Живой кейс после apply шага 2: mapping «7 Ключей» указывает на obj_id 1-й очереди, в радиусе участка Anton — 2-я очередь → 162 корпус-месяца свежих сделок не входили ни в покрытие, ни в агрегаты §4.2 (UNIQUE-констрейнт mapping = одна строка на комплекс).
  • Фикс: группы радиуса матчатся на objective project_name по нормализованному ядру имени (ровно 1 кандидат, dev-confirm при обоюдном dev-сигнале); velocity SQL — UNION(mapping-путь, core-путь) project_name'ов (set-семантика — сделки проекта ровно один раз, ревью-verified), LEFT JOIN+COALESCE для core-бакетов без mapping-obj_id; coverage — группа покрыта по obj_id ИЛИ по сматченному имени; groups_matched_by_core в data_quality.
  • Перф-гейт ревью закрыт: developers-запрос был глобальным агрегатом (seq scan 1.9M строк, ~3.8 с/вызов) — теперь два прохода матча и запрос scoped по кандидатам (0-3 имени): 99 мс (EXPLAIN). Плюс db.rollback() в fallback-except (без него aborted-транзакция валила бы velocity-запрос и fallback не срабатывал).
  • api-types regen (groups_matched_by_core).

Test plan

  • 108 layout-тестов + 17 backfill (SQL-dispatch мок, прежняя семантика сохранена ревью-verified), ruff clean, tsc clean
  • code-reviewer ⚠️→resolved (двойной счёт исключён UNION-set; перф scoped; rollback)
  • post-merge: best-layouts на 66:41:0204016:10 — покрытие ≥«3 из 6», groups_matched_by_core ≥1, сделки «7 Ключей» в top_layouts

Refs #2177

## Summary - Живой кейс после apply шага 2: mapping «7 Ключей» указывает на obj_id 1-й очереди, в радиусе участка Anton — 2-я очередь → 162 корпус-месяца свежих сделок не входили ни в покрытие, ни в агрегаты §4.2 (UNIQUE-констрейнт mapping = одна строка на комплекс). - Фикс: группы радиуса матчатся на objective project_name по **нормализованному ядру имени** (ровно 1 кандидат, dev-confirm при обоюдном dev-сигнале); velocity SQL — `UNION(mapping-путь, core-путь)` project_name'ов (set-семантика — сделки проекта ровно один раз, ревью-verified), LEFT JOIN+COALESCE для core-бакетов без mapping-obj_id; coverage — группа покрыта по obj_id ИЛИ по сматченному имени; `groups_matched_by_core` в data_quality. - Перф-гейт ревью закрыт: developers-запрос был глобальным агрегатом (seq scan 1.9M строк, **~3.8 с/вызов**) — теперь два прохода матча и запрос scoped по кандидатам (0-3 имени): **99 мс** (EXPLAIN). Плюс `db.rollback()` в fallback-except (без него aborted-транзакция валила бы velocity-запрос и fallback не срабатывал). - api-types regen (groups_matched_by_core). ## Test plan - [x] 108 layout-тестов + 17 backfill (SQL-dispatch мок, прежняя семантика сохранена ревью-verified), ruff clean, tsc clean - [x] code-reviewer ⚠️→resolved (двойной счёт исключён UNION-set; перф scoped; rollback) - [ ] post-merge: best-layouts на 66:41:0204016:10 — покрытие ≥«3 из 6», groups_matched_by_core ≥1, сделки «7 Ключей» в top_layouts Refs #2177
bot-backend added 2 commits 2026-07-02 22:26:34 +00:00
chore(frontend): regen api-types.ts — groups_matched_by_core (#2177 2b)
All checks were successful
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 1m57s
CI / backend-tests (pull_request) Successful in 14m16s
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 6s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 1m4s
94bde145f4
bot-backend merged commit fc55c2c0b7 into main 2026-07-02 22:41:26 +00:00
bot-backend deleted branch feat/velocity-core-attribution-2177 2026-07-02 22:41:26 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
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#2239
No description provided.