лендинг: этаж перестал теряться на переходе к проверке #3279
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
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#3279
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/mera-keep-floor-in-draft"
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?
Из отчёта тестировщика 30.08.2026, пункт 5 (первая половина). С уточнением: разбор дал не совсем то, что в отчёте.
Что в отчёте и что на самом деле
В отчёте: «форма собирает 6 полей,
/estimateпринимает 4». Схему из четырёх полей тестировщик увидел в ответе 422 — но тот перечисляет только ОБЯЗАТЕЛЬНЫЕ поля.TradeInEstimateInputпринимает иfloor, иtotal_floors, иrepair_stateкак опциональные.Зато под этим нашлось кое-что определённее:
saveDraftего не клал;Довод был неверен: переспросить негде. Обязательное поле работало чистой помехой — человек его заполнял, и оно исчезало.
Правка
Этаж кладётся в черновик по тому же доводу, которым там уже лежит состояние: выбросить уже полученный ответ и спросить его второй раз хуже, чем донести до следующего шага. Бэкенд его принимает, и на цену он влияет (первый и последний этаж).
Неверный комментарий заменён на то, что происходит.
Про тест — отдельно, потому что первый был негодным
Первая версия звала
saveDraft({ floor })напрямую. Она проверяла round-trip хранилища и оставалась зелёной, когда изFreeCheckCardубирали передачу этажа — то есть ровно при возврате чинимого дефекта. Сторож, который не сторожит: тест настоящий, но охраняет не то место.Переписан через саму форму: заполняются все поля, форма отправляется, черновик читается. Снятие проводки даёт
expected undefined to be '7/16'— красное по значению.Плюс три случая на хранилище: старый черновик без поля переживает выкатку, нестроковое значение выпадает не унося остальное.
Чего эта правка НЕ делает
/coverage, а не/estimate— ручка за флагомpublic_estimate_enabledи к UI не подключена. Проба покрытия этаж не использует (CoverageProbeInputо нём не знает), так что на СЕГОДНЯШНИЙ бесплатный ответ правка не влияет: она возвращает данные, которые ждут платного шага.Проверки
vitest127 passed ·tsc --noEmitrc=0 ·eslint --max-warnings 0rc=0.Этаж — обязательное поле карточки: без него форма не отправляется. При этом saveDraft его не клал, а на целевой странице поля этажа нет вовсе. Комментарий объяснял это тем, что «повторно набирать одно короткое поле дешевле, чем хранить лишнее» — довод неверен: переспросить негде, и обязательное поле работало чистой помехой. Схема бэкенда этаж принимает (TradeInEstimateInput.floor), и на цену он влияет (первый и последний этаж). Хранится теперь по тому же доводу, что и состояние: выбросить уже полученный ответ и спросить второй раз хуже, чем донести. Тест — через САМУ ФОРМУ, и это не формальность. Первая попытка защитить правку звала saveDraft({floor}) напрямую: она проверяла round-trip хранилища и оставалась зелёной, когда из FreeCheckCard убирали передачу этажа, то есть ровно при возврате чинимого дефекта. Сторож, который не сторожит. Теперь форма заполняется и отправляется целиком; снятие проводки даёт «expected undefined to be 7/16» — красное по значению. Плюс три случая на само хранилище: старый черновик без поля переживает выкатку, нестроковое значение выпадает не унося остальное.