feat(ptica): live 3D massing in Инсоляция card + honest Recommended Product verdict #1860

Merged
bot-backend merged 1 commit from fix/ptica-3d-preview-product-verdict into main 2026-06-20 22:11:21 +00:00
Collaborator

Per user feedback («крути 3д модель, а не превью» / «почему недоступен прогноз» / «чтобы всё кликалось»). Verified on a live local render of the real parcel.

  • Инсоляция card: the abstract SVG cube is replaced by a live auto-rotating 3D massing (preview mode on MassingScene — viewport-only, hands-off autorotate, pointer-events:none), built from real parcel area + НСПД max_far. «Открыть 3D» still opens the full interactive drawer. WebGL canvas confirmed rendering (390×296, not fallback).
  • Recommended Product: «сигнал недоступен» was misleading — the forecast IS available, it says avoid all formats (затоварка). Now shows the real advisory verdict: «Избегать» badge + reason «Затоварка рынка · индекс дефицита −1,00» (from mix.deficit_index) + product_tz.gate_caveat. Meaningful mixes still render quartirography bars (no fabrication). «Подробнее» → product drawer.
  • Clickability sweep: no dead controls — cockpit already cleanly wired (documented in PR).
  • Dropped dead iso-cube CSS; added .massingPreviewViewport + verdict styles (tokens, dark-scoped).

Gates: tsc 0 · lint clean · build OK. Reviewed APPROVE (no blockers).

🤖 Generated with Claude Code

Per user feedback («крути 3д модель, а не превью» / «почему недоступен прогноз» / «чтобы всё кликалось»). Verified on a live local render of the real parcel. - **Инсоляция card**: the abstract SVG cube is replaced by a **live auto-rotating 3D massing** (preview mode on MassingScene — viewport-only, hands-off autorotate, `pointer-events:none`), built from real parcel area + НСПД `max_far`. «Открыть 3D» still opens the full interactive drawer. WebGL canvas confirmed rendering (390×296, not fallback). - **Recommended Product**: «сигнал недоступен» was misleading — the forecast IS available, it says **avoid all formats** (затоварка). Now shows the real advisory verdict: **«Избегать»** badge + reason «Затоварка рынка · индекс дефицита −1,00» (from `mix.deficit_index`) + `product_tz.gate_caveat`. Meaningful mixes still render quartirography bars (no fabrication). «Подробнее» → product drawer. - **Clickability sweep**: no dead controls — cockpit already cleanly wired (documented in PR). - Dropped dead iso-cube CSS; added `.massingPreviewViewport` + verdict styles (tokens, dark-scoped). Gates: tsc 0 · lint clean · build OK. Reviewed ✅ APPROVE (no blockers). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
bot-backend added 1 commit 2026-06-20 22:11:19 +00:00
feat(ptica): live 3D massing in Инсоляция card + honest Recommended Product verdict
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 57s
CI / openapi-codegen-check (pull_request) Successful in 1m59s
8c43410ad2
- MassingScene: preview prop — viewport-only, hands-off autorotate (OrbitControls
  input disabled, autoRotate on), canvas pointer-events:none; teardown preserved.
- InsolationCard: replaces the abstract SVG cube with a live autorotating massing
  built from real parcel area + НСПД max_far (farIsReal). «Открыть 3D» still opens
  the full interactive drawer.
- RecommendedProductCard: degenerate mix no longer shows «сигнал недоступен» —
  it shows the real advisory verdict «Избегать» + reason (затоварка · индекс
  дефицита из mix.deficit_index) + product_tz.gate_caveat. Meaningful mixes still
  render quartirography bars. «Подробнее» → product drawer (full reasons).
- drop dead iso-cube CSS (pticaIsoSpin/.isoBoxPreview/.isoPreview*); add
  .massingPreviewViewport + verdict styles (tokens, dark-scoped).
- forecast type: product_tz.gate_caveat.

Clickability sweep: no dead controls found; cockpit already cleanly wired.
bot-backend merged commit ff77987260 into main 2026-06-20 22:11:21 +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#1860
No description provided.