feat(section7): editable section footprint + корпус plural/program hint (#1953) #2102

Merged
bot-backend merged 2 commits from feat/section7-editable-footprint into main 2026-06-30 09:48:12 +00:00
Collaborator

Summary

PR-B — follow-up к #2101 (unify-concept). Закрывает оставшийся пункт round-3 «не могу вписать пятно» + 2 косметики, пойманные скриншот-верификацией §7 на проде.

Изменения

  1. Редактируемое пятно секции (additive, backward-compat):
    • BuildingProgramItem получает footprint_w_m / footprint_d_m (float | None, ge=4 le=120, default None → каталог). place_program использует ручные габариты когда заданы оба, иначе каталожные.
    • api-types.ts регенерирован под новую схему (codegen-check пройдёт).
    • ConceptProgramForm: «Пятно секции» — два инпута (ширина × глубина), пусто → возврат к каталогу; Σ пятно и ориентир КСИТ считаются от эффективного габарита. building_program несёт пятно (Section7Concept).
  2. Грамматика «корпус» (1 корпус / 2–4 корпуса / 5+ корпусов) в headline / подписи карты / partial-fit — было захардкожено «корпусов» (видно на проде как «3 корпусов»).
  3. Program-хинт: вариант «Ваша программа» получает свой подзаголовок вместо STRATEGY_HINTS[balanced] («Компромисс между ТЭП и качеством среды»).

Test plan

  • backend ruff check/format clean; pytest test_placement.py — 9 passed (вкл. 2 новых: footprint-override + partial-footprint fallback)
  • frontend tsc --noEmit clean, next lint clean, prettier
  • OpenAPI codegen воспроизведён локально (app.openapi() → openapi-typescript → project-local prettier) — api-types.ts в синхроне
  • code-reviewer APPROVE (override→ТЭП/GeoJSON через площадь полигона; контракт-sync; plural verified; no shared-component regression)
  • post-deploy: §7 → сменить пятно → ТЭП/КСИТ обновились; headline «3 корпуса» (грамматика); program-хинт
  • screenshot-verify на проде

Часть epic #1953.

## Summary PR-B — follow-up к [#2101](https://git.gendsgn.ru/lekss361/gendesign/pulls/2101) (unify-concept). Закрывает оставшийся пункт round-3 «не могу вписать **пятно**» + 2 косметики, пойманные скриншот-верификацией §7 на проде. ### Изменения 1. **Редактируемое пятно секции** (additive, backward-compat): - `BuildingProgramItem` получает `footprint_w_m` / `footprint_d_m` (`float | None`, `ge=4 le=120`, default `None` → каталог). `place_program` использует ручные габариты когда заданы **оба**, иначе каталожные. - `api-types.ts` регенерирован под новую схему (codegen-check пройдёт). - `ConceptProgramForm`: «Пятно секции» — два инпута (ширина × глубина), пусто → возврат к каталогу; Σ пятно и ориентир КСИТ считаются от эффективного габарита. `building_program` несёт пятно (Section7Concept). 2. **Грамматика «корпус»** (1 корпус / 2–4 корпуса / 5+ корпусов) в headline / подписи карты / partial-fit — было захардкожено «корпусов» (видно на проде как «3 корпусов»). 3. **Program-хинт**: вариант «Ваша программа» получает свой подзаголовок вместо `STRATEGY_HINTS[balanced]` («Компромисс между ТЭП и качеством среды»). ### Test plan - [x] backend `ruff check`/`format` clean; `pytest test_placement.py` — 9 passed (вкл. 2 новых: footprint-override + partial-footprint fallback) - [x] frontend `tsc --noEmit` clean, `next lint` clean, prettier - [x] OpenAPI codegen воспроизведён локально (app.openapi() → openapi-typescript → project-local prettier) — `api-types.ts` в синхроне - [x] code-reviewer ✅ APPROVE (override→ТЭП/GeoJSON через площадь полигона; контракт-sync; plural verified; no shared-component regression) - [ ] post-deploy: §7 → сменить пятно → ТЭП/КСИТ обновились; headline «3 корпуса» (грамматика); program-хинт - [ ] screenshot-verify на проде Часть epic #1953.
bot-backend added 1 commit 2026-06-30 08:59:44 +00:00
feat(section7): editable section footprint + корпус plural/program hint (#1953)
Some checks failed
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (pull_request) Successful in 1m12s
CI / openapi-codegen-check (pull_request) Successful in 2m4s
CI / backend-tests (pull_request) Failing after 14m21s
83a063f0ee
PR-B (follow-up к unify-concept). Закрывает «вписать пятно» из round-3:
- BuildingProgramItem получает опциональные footprint_w_m/footprint_d_m
  (float|None, ge=4 le=120, default None → каталог; ADDITIVE, byte-for-byte
  backward-compat). place_program кладёт ручное пятно когда заданы ОБА габарита,
  иначе каталожное. api-types.ts регенерирован под новую схему.
- ConceptProgramForm: пятно секции теперь редактируемое (ширина × глубина);
  пусто → возврат к каталогу; Σ пятно и ориентир КСИТ считаются от эффективного
  габарита. building_program несёт footprint в Section7Concept.
- ConceptVariantsResult: грамматика «корпус» (1 корпус / 2–4 корпуса / 5+
  корпусов) в headline / подписи карты / partial-fit; program-вариант получает
  свой хинт вместо STRATEGY_HINTS[balanced].
- Тесты place_program: footprint-override и partial-footprint fallback.
Light1YT added 1 commit 2026-06-30 09:33:22 +00:00
test(quarter-dump): un-rot freshness date-bomb (hardcoded 2026-01-01 → now−1d)
All checks were successful
CI / changes (pull_request) Successful in 7s
CI / frontend-tests (pull_request) Successful in 1m5s
CI / openapi-codegen-check (pull_request) Successful in 1m59s
CI / backend-tests (pull_request) Successful in 14m18s
0413d59b89
test_nspd_path_used_when_zouit_count_nonzero хардкодил dump fetched_at =
datetime(2026, 1, 1) как «свежий». С 2026-06-30 разница превысила
_DUMP_MAX_AGE_DAYS=180 → код уходил в stale-ветку (_trigger_harvest →
_empty_unavailable) → nspd_zouit_overlaps=[] → assert 0 == 1. Не регрессия
этой ветки: PR #2101 был frontend-only (backend-tests не гонял полный suite),
PR-B — первый backend-PR после пересечения порога, поэтому date-bomb всплыл
здесь. Свежесть теперь относительна now (now − 1 день) — устойчиво к дате прогона.
bot-backend merged commit 975c400536 into main 2026-06-30 09:48:12 +00:00
bot-backend deleted branch feat/section7-editable-footprint 2026-06-30 09:48:13 +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#2102
No description provided.