fix(concept): step="any" — stepMismatch блокировал submit «Рассчитать концепцию» (#1953) #2103
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#2103
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/concept-land-cost-step-mismatch"
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
P0, пойман скриншот-верификацией §7 с интерактивом. Кнопка «Рассчитать концепцию» не работала на любом участке с кадастровой стоимостью.
Корень: поле «Стоимость участка» имело
step={1_000_000}. Сид изegrn.cadastral_value_rub(напр.74 766.08 ₽, не кратно миллиону) → HTML5stepMismatch→ форма:invalid→ браузер молча блокирует submit (submit-событие даже не выстреливает). Авто-расчёт §7 маскировал баг — он зовёт движок напрямую (handleGenerate), минуя валидацию формы.Фикс:
step="any"на денежном поле вConceptProgramForm(§7) иConceptParamsForm(standalone/concept— тот же латентный баг). Плюсstep="any"наfloor_height(был 0.1) и пятне (был 1) —clampFloatдопускает дробные → тот же класс stepMismatch.Подтверждено на проде (DOM-патч
step="any"→form.checkValidity()=true→requestSubmit()проходит → ТЭП пересчитался: GFA 15 876 → 30 240 м², FAR 0.24 → 0.45 под изменённое пятно). Это же доказывает, что footprint-override из #2102 доходит до ТЭП end-to-end.Test plan
tsc --noEmitclean, prettierЧасть epic #1953.
Поле «Стоимость участка» (ConceptProgramForm §7 + ConceptParamsForm /concept) имело step={1_000_000}. Сид из кадастровой стоимости (напр. 74 766.08 ₽, не кратно шагу) → HTML5 stepMismatch → форма :invalid → браузер МОЛЧА блокирует submit (submit-событие не выстреливает) → кнопка «Рассчитать концепцию» не работает на ЛЮБОМ участке с кадастровой стоимостью. Авто-расчёт §7 маскировал баг — он зовёт движок напрямую, минуя валидацию формы. Тот же латентный stepMismatch на floor_height (step 0.1) и пятне (step 1) — clampFloat допускает дробные → step="any" и там. Подтверждено на проде (DOM-патч step="any" → checkValidity()=true → submit проходит → GFA 15 876→30 240, FAR 0.24→0.45 под изменённое пятно).