feat(site-finder): PermitsNearbyBlock — разрешения на строительство в §6 (#2367 PR-2, frontend-half) #2403

Merged
bot-backend merged 1 commit from feat/permits-nearby-ui into main 2026-07-04 10:24:49 +00:00
Collaborator

Что

Вторая (видимая) половина #2367: рендер permits_nearby (backend PR #2401, прод-верифицирован — 8 разрешений на реальном участке) в §6 «Риски и дефицит» страницы анализа. Новый PermitsNearbyBlock.tsx, интеграция в Section6Forecast.tsx + AnalysisPageContent.tsx.

Ключевое решение

Блок рендерится независимо от статуса §22-прогнозаpermits_nearby приходит быстро вместе с обычным analyze, а форсайт может считаться 30-180с на холодном участке. Изначальная реализация вкладывала блок внутрь ForecastReady (ждал бы прогноз без причины) — поймано на ревью, вынесено первым элементом во всех трёх ветках (pending/error/ready).

Честность

  • total_count === 0 → блок ВИДЕН с нейтральным текстом «в радиусе 500 м не найдено» (это сигнал, не пустота)
  • Отсутствие поля (старый кэш) → блок молча не рендерится (не выдумывает «0» без основания)
  • items_truncated → честная приписка «показаны ближайшие N из M»

Проверки

  • tsc --noEmit чисто (repo-wide), 43 vitest passed (5 новых), prettier/eslint чисто
  • code-reviewer: APPROVE — отдельно проверил независимость от forecast-статуса ЧТЕНИЕМ кода (не поверил на слово комментариям), honest-zero UX, XSS-safety (JSX text nodes, не dangerouslySetInnerHTML), progressive disclosure по паттерну ResourceReservesCard
  • Сортировка «ближайшие N» — проверено прод-curl'ом ранее: items идут по возрастанию distance_m (0.0→24.8→211.4→...→447.0)

Post-merge

Скриншот живого блока на gendsgn.ru (участок с реальными разрешениями рядом).

Refs #2367

## Что Вторая (видимая) половина #2367: рендер `permits_nearby` (backend PR #2401, прод-верифицирован — 8 разрешений на реальном участке) в §6 «Риски и дефицит» страницы анализа. Новый `PermitsNearbyBlock.tsx`, интеграция в `Section6Forecast.tsx` + `AnalysisPageContent.tsx`. ## Ключевое решение Блок рендерится **независимо от статуса §22-прогноза** — `permits_nearby` приходит быстро вместе с обычным analyze, а форсайт может считаться 30-180с на холодном участке. Изначальная реализация вкладывала блок внутрь `ForecastReady` (ждал бы прогноз без причины) — поймано на ревью, вынесено первым элементом во всех трёх ветках (pending/error/ready). ## Честность - `total_count === 0` → блок ВИДЕН с нейтральным текстом «в радиусе 500 м не найдено» (это сигнал, не пустота) - Отсутствие поля (старый кэш) → блок молча не рендерится (не выдумывает «0» без основания) - `items_truncated` → честная приписка «показаны ближайшие N из M» ## Проверки - tsc --noEmit чисто (repo-wide), 43 vitest passed (5 новых), prettier/eslint чисто - code-reviewer: ✅ APPROVE — отдельно проверил независимость от forecast-статуса ЧТЕНИЕМ кода (не поверил на слово комментариям), honest-zero UX, XSS-safety (JSX text nodes, не dangerouslySetInnerHTML), progressive disclosure по паттерну ResourceReservesCard - Сортировка «ближайшие N» — проверено прод-curl'ом ранее: items идут по возрастанию distance_m (0.0→24.8→211.4→...→447.0) ## Post-merge Скриншот живого блока на gendsgn.ru (участок с реальными разрешениями рядом). Refs #2367
bot-backend added 1 commit 2026-07-04 10:21:35 +00:00
feat(site-finder): PermitsNearbyBlock — разрешения на строительство в §6 (#2367 PR-2, frontend-half)
All checks were successful
CI / changes (pull_request) Successful in 8s
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 1m20s
CI / openapi-codegen-check (pull_request) Successful in 2m13s
b76bb4f7ea
Делает видимым backend-поле permits_nearby (PR #2401, ГИСОГД-66) на
странице анализа участка: §6 «Риски и дефицит», сразу после блока
будущего предложения. Рендерится независимо от статуса §22-прогноза
(permits приходит быстро вместе с analyze, форсайт может считаться
30-180с) — блок первым в дереве §6 во всех трёх ветках pending/error/ready.

Честный ноль (0 найдено — видимый нейтральный текст, не скрытие блока)
отделён от отсутствия поля (старый кэш — блок молча не рендерится, не
выдумывает «0»). items_truncated -> честная приписка «показаны ближайшие
N из M». RS/RV — человеко-читаемые Badge-подписи, progressive disclosure
(8 видимых + <details>) по паттерну ResourceReservesCard.
bot-backend merged commit ab250a132b into main 2026-07-04 10:24:49 +00:00
bot-backend deleted branch feat/permits-nearby-ui 2026-07-04 10:24:49 +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#2403
No description provided.