Skip to content

feat(app-shell): Окно «Перед забегом» одним листом - #253

Draft
Kennix88 wants to merge 4 commits into
devfrom
task/T-0044
Draft

Kennix88 wants to merge 4 commits into
devfrom
task/T-0044

Conversation

@Kennix88

@Kennix88 Kennix88 commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Задача: tasks/T-0044-pre-run-sheet.md

Что сделано

  • screens/pre-run-rules.ts — чистые правила: preRunModes, boostTileState (логика перенесена из BoostPicker без изменений), boostCost, boostToDescribe.
  • screens/pick-tile.tsx — общая плитка выбора (оружие и бусты): две строки, выбранная — кольцо акцента, свечение и галочка, закрытая — opacity-55, приглушённая — opacity-40.
  • screens/boost-picker.tsx — плитки 3 в ряд, счётчик «N из M», описание последнего тронутого (onTouch); пропы heading и error убраны.
  • screens/pre-run.tsx — PreRunSheet: Modal placement="bottom", вкладки режимов (только открытые), сложность, оружие плитками с описанием, бусты, одна кнопка «В бой» с суммой «спишется …». Перенесены useRunLevel, карточка «Настроить режим разработчика» с DevSheetLazy и buyBoosts с теми же ошибками. Пока идёт покупка, лист не закрывается.
  • home.tsx — «Играть» и «Новый забег» открывают лист (PreRunSheetLazy, чанк подтягивается в простое); ModeScreen удалён.
  • Удалены screens/weapon-select.tsx и screens/boosts.tsx; из ScreenId, App.tsx и lazy-screens.tsx убраны mode, weapon, boosts, добавлен loaders.prerun. Назад из забега — на главную (["lobby", "run"]).
  • Тексты: добавлены prerun.mode.dev, prerun.mode.stress, prerun.stress.open, prerun.cost, weapon.select.locked.short, prerun.boosts.count, prerun.boosts.hint. Удалены: mode.title, mode.endless.description, mode.campaign, mode.campaign.description, mode.dev.badge, mode.dev.description, mode.stress.badge, weapon.select.next, weapon.select.hint, weapon.select.start, boosts.hint, boosts.skip — каждый после поиска по packages/ и apps/ без остальных потребителей.
  • Аналитика: в удалённых экранах не было вызовов track(...), переносить нечего; screen_viewed по-прежнему пишет навигация (теперь без mode/weapon/boosts).
  • docs/27-design-system-and-app-shell.md — каталог экранов (одна строка «Перед забегом», правки «Забег разработчика» и «Стресс-тест») и абзац в §3.4.

Критерии приёмки

  • «Играть» → лист «Перед забегом» → «В бой»: два касания до боя.
  • Сложность, оружие плитками с описанием выбранного и бусты плитками с описанием тронутого — в одном листе. Правила бустов прежние.
  • Сумма к списанию — в кнопке «В бой»; неудачная покупка оставляет лист открытым с причиной.
  • Вкладки режимов — только у тех, кому открыты; стресс-тест и забег разработчика работают как раньше.
  • Экранов «Режим», отдельных «Перед забегом» и «Бусты на забег» нет; назад из забега — на главную.
  • Лист — своим чанком. pnpm budget: первая загрузка 149,7 КБ вместо 150,7 (меньше), экраны по требованию 138,8 КБ из 138,8 вместо 138,2 (+0,6 КБ, запас исчерпан, порог не менялся — файл не в зонах задачи). Следующему экрану, скорее всего, понадобится решение тимлидов о пороге.
  • Гейт и pnpm docs:check зелёные.

Проверка

  • Тесты: pre-run-rules.test.ts (новый), navigation.test.ts (экраны mode/weapon заменены на settings/stress); pnpm test — 2989 прошли, 284 пропущены (интеграционные без Postgres/Redis). Существующие boosts-texts.test.ts и run-boosts.test.ts зелёные без правок.
  • pnpm lint, pnpm docs:check, pnpm task check, tsc -b, tsc -p tsconfig.tests.json — без ошибок.
  • pnpm build и pnpm budget: из-за версии Node 22.22.0 при engines ≥ 22.22.3 pnpm -r не стартует, поэтому собрал напрямую vite build --mode telegram в apps/web-telegram и запустил node scripts/bundle-budget.mjs — «Всё в бюджете». Подтвердит CI.
  • Снимал лист вручную в Chromium (dev-сервер, ответы API подменены) на 320×640, 390×844, 768×1024 и 1440×900, в том числе с вкладками режимов, тремя выбранными бустами и без сети. Плитки не переполняются на 320 px (там скрывается замок у закрытого оружия, сжимается значок), шапка и «В бой» не уезжают при прокрутке содержимого. Снимки в PR не прикладываю — тимлиды снимают при приёмке, как у T-0012.

Метка: release: minor.

Вопросы

Ничего не блокирует, но решения за тимлидами:

  1. Ключи без потребителей. mode.dev («Забег разработчика») и weapon.select.locked («Откроется на {level} уровне») после переноса нигде не используются, но их нет в списке на удаление в шаге 8 («Ключи, которые перестали использоваться, удалить. … mode.title, …»). Оставил оба. Удалить или использовать — например, weapon.select.locked как aria-label закрытой плитки?
  2. Прокрутка листа. Спецификация (сценарий 6, «шапка и подвал Modal не уезжают») требует неподвижных шапки и кнопки, а у Modal подвал лежит внутри прокручиваемого блока. Modal вне зон, поэтому содержимое листа обёрнуто в свой блок с ограничением высоты max-h-[max(10rem,calc(100dvh-20rem-…))] и прокруткой — подвал Modal остаётся под ним, а лист не заезжает под шапку приложения. Константа 20rem подобрана на глаз по высоте шапки Modal, подвала и нижней панели; если появится токен высоты шапки приложения, лучше брать его.

Для игроков

  • новое: Сложность, оружие и бусты — в одном окне: «Играть» и сразу «В бой».

Сводка для команды

📋 СВОДКА: В DEV ВЛИТ PR #253 — «ПЕРЕД ЗАБЕГОМ» ОДНИМ ЛИСТОМ

До боя теперь два касания вместо четырёх: «Играть» открывает лист со сложностью, оружием и бустами, дальше — «В бой».

⚔️ Что изменилось

• экрана выбора режима нет; забег разработчика и стресс-тест — вкладками в листе, только тем, кому открыты
• оружие и бусты — плитками с описанием выбранного; сумма к списанию — прямо в кнопке «В бой»
• назад из забега — сразу на главную

❓ Нужно от команды

• @участник1 — сыграть пару забегов с бустами и без, сказать, удобно ли

🤖 Generated with Claude Code

https://claude.ai/code/session_01GZNK6tcaX74uMbFCJFpNPL

«Играть» открывает лист поверх главной: сложность, оружие плитками и
бусты в одном окне, «В бой» — второе касание. Экранов «Режим», выбора
оружия и «Бусты на забег» больше нет; забег разработчика и стресс-тест —
вкладками листа, только тем, кому открыты. Назад из забега — на главную.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZNK6tcaX74uMbFCJFpNPL
Плитки на всю ширину ячейки и без переполнения на 320 px; прокручивается
только содержимое листа, шапка и «В бой» остаются на месте. Каталог
экранов и раздел о чанках в docs/27 обновлены под Р88.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZNK6tcaX74uMbFCJFpNPL
@github-actions github-actions Bot added the release: minor Новая возможность, новый контент label Oct 10, 2026
@github-actions

Copy link
Copy Markdown

Автоматически поставлена метка release: minor по типу заголовка (feat). Подтвердите или замените на более старшую — ниже минимума проверка не пропустит.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release: minor Новая возможность, новый контент

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants