fix(client): мобильный адаптив 390px — Create page открывает редактор; ревизия хвоста #291 (#325) #334

Merged
vvzvlad merged 1 commits from fix/325-mobile-390 into develop 2026-07-04 17:45:36 +03:00
Collaborator

Summary

Хвост #291 (мобильный адаптив 390px). При ревизии оказалось, что 3 из 5 пунктов уже закрыты в develop (апстрим + смерженный #292); один — реальный баг, починен здесь; один — мелкая полировка, вынесен на визуальное решение человека.

По пунктам

  • #1 таблица /settings/members за краем — УЖЕ пофикшено (без изменений). workspace-members-table.tsx:57 и workspace-invites-table.tsx уже оборачивают таблицу в <Table.ScrollContainer minWidth={600}>; #292 к тому же сворачивает навбар <992px именно чтобы таблица не клипалась. Колонки достижимы горизонтальным скроллом.
  • #2 строка табов клипается — УЖЕ пофикшено (без изменений). home-tabs.tsx:22 и space-home-tabs.tsx уже дают Tabs.List со flexWrap:"nowrap"; overflowX:"auto" — табы скроллятся, а не режутся.
  • #3 таймстампы за краем — УЖЕ пофикшено (без изменений). recent-changes.tsx:41 уже в <Table.ScrollContainer minWidth={500}>; home.module.css убирает боковые паддинги на телефоне.
  • #5 после Create page на мобайле редактор не открывался — РЕАЛЬНЫЙ БАГ, ПОЧИНЕН. Создание страницы триггерится из off-canvas drawer (сайдбар «+», «add subpage»); handleCreate навигировал на новую страницу, но не закрывал drawer — он оставался поверх редактора. Добавил setMobileSidebar(false) после navigate, зеркалит закрытие drawer при тапе по строке дерева. No-op на десктопе.
  • #4 drawer без backdrop — оставлено как полировка (без изменений). #292 делает сайдбар AppShell.Navbar, который OVERLAY-ит контент (не сдвигает/не клипает) — это уже «правильный оверлей». Не хватает только затемняющего backdrop, но Mantine AppShell его намеренно не даёт, и в клиенте НЕТ существующего паттерна overlay/backdrop под этот кейс. Добавление кастомного <Overlay> требует z-index-координации с fixed-навбаром, которую без визуальной проверки на 390px не подтвердить. Вынес как мелкий human-visual polish (кандидат оставить #325 открытым под этот пункт или отдельным follow-up).

How verified

  • tsc --noEmit — чисто.
  • client vitest run — 96 файлов, 887 passed | 1 expected-fail, 0 failures (148 tree-тестов зелёные).
  • Пункты #1/#2/#3 — подтверждены чтением кода (фиксы присутствуют).

Ограничение честно: в репозитории нет visual/screenshot-тулинга (скриншоты #291 были из внешнего fleet-тулинга). Пиксельный рендер #1/#2/#3, остаточный ~4px overflow в #3, решение по backdrop (#4) и визуальное подтверждение, что после фикса #5 drawer действительно закрывается и открывает редактор — требуют человеческого прохода на 390px.

Checklist

  • #325 items 1/2/3 верифицированы как уже закрытые; item 5 починен; item 4 задокументирован как отложенная полировка
  • Десктоп (≥992px) не затронут — фикс no-op на десктопе
  • tsc + client vitest зелёные
  • Визуальный проход на 390px (нужен человек — нет тулинга в репо)

🤖 Generated with Claude Code

## Summary Хвост #291 (мобильный адаптив 390px). При ревизии оказалось, что 3 из 5 пунктов уже закрыты в develop (апстрим + смерженный #292); один — реальный баг, починен здесь; один — мелкая полировка, вынесен на визуальное решение человека. ## По пунктам - **#1 таблица `/settings/members` за краем — УЖЕ пофикшено (без изменений).** `workspace-members-table.tsx:57` и `workspace-invites-table.tsx` уже оборачивают таблицу в `<Table.ScrollContainer minWidth={600}>`; #292 к тому же сворачивает навбар <992px именно чтобы таблица не клипалась. Колонки достижимы горизонтальным скроллом. - **#2 строка табов клипается — УЖЕ пофикшено (без изменений).** `home-tabs.tsx:22` и `space-home-tabs.tsx` уже дают `Tabs.List` со `flexWrap:"nowrap"; overflowX:"auto"` — табы скроллятся, а не режутся. - **#3 таймстампы за краем — УЖЕ пофикшено (без изменений).** `recent-changes.tsx:41` уже в `<Table.ScrollContainer minWidth={500}>`; `home.module.css` убирает боковые паддинги на телефоне. - **#5 после Create page на мобайле редактор не открывался — РЕАЛЬНЫЙ БАГ, ПОЧИНЕН.** Создание страницы триггерится из off-canvas drawer (сайдбар «+», «add subpage»); `handleCreate` навигировал на новую страницу, но не закрывал drawer — он оставался поверх редактора. Добавил `setMobileSidebar(false)` после `navigate`, зеркалит закрытие drawer при тапе по строке дерева. No-op на десктопе. - **#4 drawer без backdrop — оставлено как полировка (без изменений).** #292 делает сайдбар `AppShell.Navbar`, который OVERLAY-ит контент (не сдвигает/не клипает) — это уже «правильный оверлей». Не хватает только затемняющего backdrop, но Mantine `AppShell` его намеренно не даёт, и в клиенте НЕТ существующего паттерна overlay/backdrop под этот кейс. Добавление кастомного `<Overlay>` требует z-index-координации с fixed-навбаром, которую без визуальной проверки на 390px не подтвердить. Вынес как мелкий human-visual polish (кандидат оставить #325 открытым под этот пункт или отдельным follow-up). ## How verified - `tsc --noEmit` — чисто. - client `vitest run` — 96 файлов, **887 passed | 1 expected-fail, 0 failures** (148 tree-тестов зелёные). - Пункты #1/#2/#3 — подтверждены чтением кода (фиксы присутствуют). **Ограничение честно:** в репозитории нет visual/screenshot-тулинга (скриншоты #291 были из внешнего fleet-тулинга). Пиксельный рендер #1/#2/#3, остаточный ~4px overflow в #3, решение по backdrop (#4) и визуальное подтверждение, что после фикса #5 drawer действительно закрывается и открывает редактор — требуют человеческого прохода на 390px. ## Checklist - [x] #325 items 1/2/3 верифицированы как уже закрытые; item 5 починен; item 4 задокументирован как отложенная полировка - [x] Десктоп (≥992px) не затронут — фикс no-op на десктопе - [x] tsc + client vitest зелёные - [ ] Визуальный проход на 390px (нужен человек — нет тулинга в репо) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
agent_coder added 1 commit 2026-07-04 12:07:48 +03:00
On mobile the "create page" action is triggered from inside the off-canvas
sidebar drawer (the space sidebar "+" and temporary-note buttons, and the
tree-row "add subpage"). handleCreate navigated to the new page's editor route
but never closed that drawer, so it stayed open on top of the freshly created
page — the editor was hidden behind the page tree ("as if the page didn't
open", #325 item 5).

Close the mobile sidebar (`setMobileSidebar(false)`) right after navigating,
mirroring the existing drawer-close on a tree-row tap (space-tree-row). Placing
it in handleCreate covers all three create entry points in one spot. It is a
no-op on desktop, where the mobile-sidebar atom is already false and only
governs the sub-992px collapsed state — desktop behavior is unchanged.

Verified: `tsc --noEmit` clean; client vitest 887 passed | 1 expected-fail.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
agent_coder added the review/needs label 2026-07-04 12:08:04 +03:00
Author
Collaborator

Готово к ревью (review/needs). Ревизия хвоста #291 на 390px: пункты 1/2/3 уже закрыты в develop (проверил кодом — Table.ScrollContainer + tabs overflow-x), пункт 5 (Create page не открывал редактор на мобайле) — реальный баг, починен одной строкой (закрываю mobile drawer после navigate, зеркалит клик по строке дерева, no-op на десктопе). Пункт 4 (backdrop у drawer) оставил как мелкую полировку — нет существующего overlay-паттерна в клиенте, требует визуального решения. tsc чисто, client vitest 887 зелёных. ВАЖНО: визуального тулинга (скриншоты 390px) в репо нет — пиксельный проход по #1/#2/#3/#4 и подтверждение #5 нужны глазами человека; отметил это в теле PR чеклистом.

Готово к ревью (review/needs). Ревизия хвоста #291 на 390px: пункты 1/2/3 уже закрыты в develop (проверил кодом — Table.ScrollContainer + tabs overflow-x), пункт 5 (Create page не открывал редактор на мобайле) — реальный баг, починен одной строкой (закрываю mobile drawer после navigate, зеркалит клик по строке дерева, no-op на десктопе). Пункт 4 (backdrop у drawer) оставил как мелкую полировку — нет существующего overlay-паттерна в клиенте, требует визуального решения. tsc чисто, client vitest 887 зелёных. ВАЖНО: визуального тулинга (скриншоты 390px) в репо нет — пиксельный проход по #1/#2/#3/#4 и подтверждение #5 нужны глазами человека; отметил это в теле PR чеклистом.
Collaborator

Ревью — #334 (мобильный адаптив 390px: Create page открывает редактор; ревизия хвоста #291), round 1, head 52beae85, base develop f5d19f97

Вердикт: PASS — чинящее изменение одно и корректное: use-tree-mutation.ts после navigate(pageUrl) в handleCreate закрывает off-canvas drawer (setMobileSidebar(false)), из-за которого на мобайле только что созданная страница оставалась за открытым сайдбаром. Готово к мержу.

Проверено по коду:

  • mobileSidebarAtom реально существует по импортируемому пути (components/layouts/global/hooks/atoms/sidebar-atom.ts, дефолт false); useSetAtom — верный write-only хук; dep-массив useCallback корректно дополнен setMobileSidebar.
  • Зеркалит существующее поведение: space-tree-row.tsx:150 при клике по строке дерева тоже гасит mobileSidebarAtom (тот же атом) — консистентно. No-op на десктопе (атом уже false).

Объективка запущена мной (head 52beae85):

  • client tsc --noEmit0 ошибок (импорт и атом резолвятся).
  • vitest run src/features/page/tree148 passed (7 файлов) — регрессий в дереве нет.

Информационно (НЕ блокирует, не задачи): кодер честно отметил, что визуального/скриншот-тулинга 390px в репо нет — пиксельное подтверждение #1/#2/#3 (уже закрыты в develop), фактическое закрытие drawer после фикса #5 глазами, и решение по #4 (backdrop у drawer, оставлен как полировка) требуют человеческого визуального прохода. Код-часть (#5) корректна и самодостаточна; эти пункты — вне объективной проверки и на усмотрение человека, мерж #5 они не держат.

## Ревью — #334 (мобильный адаптив 390px: Create page открывает редактор; ревизия хвоста #291), round 1, head `52beae85`, base develop `f5d19f97` **Вердикт: PASS** — чинящее изменение одно и корректное: `use-tree-mutation.ts` после `navigate(pageUrl)` в `handleCreate` закрывает off-canvas drawer (`setMobileSidebar(false)`), из-за которого на мобайле только что созданная страница оставалась за открытым сайдбаром. Готово к мержу. **Проверено по коду:** - `mobileSidebarAtom` реально существует по импортируемому пути (`components/layouts/global/hooks/atoms/sidebar-atom.ts`, дефолт `false`); `useSetAtom` — верный write-only хук; dep-массив `useCallback` корректно дополнен `setMobileSidebar`. - Зеркалит существующее поведение: `space-tree-row.tsx:150` при клике по строке дерева тоже гасит `mobileSidebarAtom` (тот же атом) — консистентно. No-op на десктопе (атом уже `false`). **Объективка запущена мной** (head `52beae85`): - client `tsc --noEmit` → **0 ошибок** (импорт и атом резолвятся). - `vitest run src/features/page/tree` → **148 passed** (7 файлов) — регрессий в дереве нет. **Информационно (НЕ блокирует, не задачи):** кодер честно отметил, что визуального/скриншот-тулинга 390px в репо нет — пиксельное подтверждение #1/#2/#3 (уже закрыты в develop), фактическое закрытие drawer после фикса #5 глазами, и решение по #4 (backdrop у drawer, оставлен как полировка) требуют человеческого визуального прохода. Код-часть (#5) корректна и самодостаточна; эти пункты — вне объективной проверки и на усмотрение человека, мерж #5 они не держат. <!-- state:review reviewed_head=52beae85b3b627c4c225d4c3474b6aa17736dbe8 round=1 verdict=pass -->
agent_reviewer added review/approved and removed review/needs labels 2026-07-04 12:40:43 +03:00
vvzvlad merged commit 2bb71c1a45 into develop 2026-07-04 17:45:36 +03:00
Sign in to join this conversation.