Skip to content

feat(app-shell): Экран смерти в два шага - #254

Draft
Kennix88 wants to merge 5 commits into
devfrom
task/T-0045
Draft

Kennix88 wants to merge 5 commits into
devfrom
task/T-0045

Conversation

@Kennix88

@Kennix88 Kennix88 commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Задача: tasks/T-0045-death-two-steps.md

Что сделано

  • Событие continue_offered (ad, stars, vip, elapsedSec): сначала словарь сервера, список клиента и docs/22 §3.3, потом код. Шлётся один раз на показ шага 1.
  • screens/run/death-rules.ts — deathStep, levelBar, bestWeapon.
  • screens/run/SecondChance.tsx — visibleWays (логика видимости способов перенесена без изменений; у VIP ad ложно, как у «только VIP»), хук useSecondChanceStages, вариант prominent (подложка в тоне здоровья, рамка hp/45, заголовок 17 px).
  • screens/run/death-parts.tsx — ChanceStep, ResultsHero, RewardCard (полоса уровня scaleX), LevelUpCard, RunStats, RunDetails.
  • screens/run/DeathOverlay.tsx — два шага; новый проп onDecline; нет способов при downed — один раз зовёт onDecline(), итоги сразу; кнопки в портрете — подвал, в ландшафте — правая колонка; прокручивается только содержимое.
  • RunDouble.tsx — только вид: отметка ×2 акцентом. RunScreen.tsx — onDecline={declineContinue}.
  • state/meta.ts — deathDetailsOpen (старый снимок без поля — свёрнуто) и rememberDeathDetails.
  • gallery.tsx — onDecline в обоих образцах и третий образец — шаг 1.
  • Тексты: добавлены run.death.downed|decline|home|runLevel|bestWeapon|more|less, run.reward.levelLabel|toNext|maxLevel|unlockedNext. Удалены: run.death.menu, run.death.wave, run.death.level, run.reward.unlocked — поиск по packages/, apps/, docs/, scripts/ других потребителей не нашёл.
  • docs/22 §3.3 и docs/27 (каталог экранов, раскладка в ландшафте).

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

  • Пока второй шанс можно взять — короткое окно с ним одним и «Закончить забег»; после отказа — итоги.
  • Итоги: время героем, плашки, награда с полосой уровня, новый уровень с открытым, три цифры, урон по оружиям под «Подробнее» с запоминанием.
  • Правила второго шанса и удвоения не изменились (существующие тесты зелёные без правок).
  • continue_offered в словаре и шлётся один раз на показ шага 1.
  • Гейт: тесты, lint, tsc, docs:check зелёные, pnpm budget превышен — см. «Вопросы», п. 1.

Проверка

  • pnpm test — 2987 прошли, 284 пропущены (интеграционные без Postgres/Redis); pnpm lint, pnpm docs:check, pnpm task check, tsc -b, tsc -p tsconfig.tests.json — без ошибок; scripts/test/event-dictionary.test.ts (три списка событий) зелёный.
  • Сборка напрямую vite build --mode telegram (из-за Node 22.22.0 при engines ≥ 22.22.3 pnpm -r не стартует) и node scripts/bundle-budget.mjs — см. ниже.
  • Смотрел оба шага в Chromium на 320×640, 390×844, 740×360 и 844×390, 1440×900, в том числе VIP, награду «считаем», рекорд с новым уровнем и раскрытое «Подробнее». «Ещё раз» без прокрутки в ландшафте при свёрнутом «Подробнее»; в портрете шапка окна и кнопки остаются на месте. Снимки не прикладываю — тимлиды снимают при приёмке.

Метка: release: minor.

Вопросы

  1. Бюджет бандла (блокирует зелёный CI). После переноса: «Экраны по требованию» 140,0 КБ при пороге 138,8 (на dev — 138,2, то есть +1,8 КБ), «Интерфейс забега» 12,7 КБ при пороге 12,7 (превышен на сотые: +0,1 КБ — RunScreen, state/run из-за deathDetailsOpen). Первая загрузка не выросла (150,7 при 151,1). Основной вклад — чанк DeathOverlay (+1,6 КБ gzip): шаг 1, полоса уровня, плашка уровня, три цифры и «Подробнее» — это сами новые элементы из спецификации, убирать из них нечего. scripts/bundle-budget.mjs вне зон задачи, а «Порог поднимают только тимлиды, и только если спецификация это разрешает» (tasks/README.md), спецификация не разрешает — поэтому порог не менял. Прошу решить: поднять пороги (≈ до 140,2 КБ и 12,8 КБ) с записью в docs/27 §3.4 или вернуть спецификацию с разрешением на соседнее сокращение. Учтите, что T-0044 (#253) тоже упирается в тот же порог экранов (138,8 из 138,8), так что вместе они его превысят ещё сильнее.
  2. Кнопка ролика в «Втором шансе». Спецификация (шаг 6, prominent): «кнопки высотой 48 px, ролик — главная (glow)». Кнопку ролика рисует AdContinue.tsx, он вне зон и использует variant="secondary"; высота 48 px у неё и так. Поэтому в prominent изменены подложка, рамка и размер заголовка, а главной кнопкой ролик не сделан. Нужно добавить AdContinue.tsx в зоны (проп вроде primary) или оставить так.
  3. Когда писать continue_offered. Шаг 3.4 просит слать событие «при монтировании — один раз», и флаги берутся из visibleWays в этот момент. Стадии ролика и звёзд на монтировании ещё idle/checking, то есть vip в момент показа неизвестен (становится известен после ответа сервера) и в событии почти всегда будет false, а ad и stars — true. Если нужна точность по VIP, событие стоит слать после того, как стадии определились. Сделал, как в спецификации.
  4. Мелочь. Тест visibleWays для «оба способа недоступны» ожидает { ad: false, stars: true, vip: false }: логика видимости перенесена без изменений, а у неё при недоступных обоих блок звёзд остаётся и сам объясняет причину. Этого случая в спецификации нет, зафиксировал текущее поведение.

Для игроков

  • новое: Экран смерти: сначала второй шанс, потом итоги — время, рекорд и награда крупно, подробности по кнопке.

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

📋 СВОДКА: В DEV ВЛИТ PR #254 — ЭКРАН СМЕРТИ В ДВА ШАГА

Экран смерти стал короче: сначала второй шанс, если его можно взять, потом итоги. Время, рекорд и награда — крупно, урон по оружиям — по кнопке «Подробнее».

💀 Что изменилось

• второй шанс — отдельным окном, решение явное: взять или «Закончить забег»
• в итогах — полоса уровня после забега и плашка нового уровня с открытым оружием
• новое событие continue_offered: теперь видно, какая доля игроков берёт второй шанс

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

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

🤖 Generated with Claude Code

https://claude.ai/code/session_01GZNK6tcaX74uMbFCJFpNPL

Знаменатель для continue_used: без него не посчитать конверсию второго
шанса среди тех, кому его предложили.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZNK6tcaX74uMbFCJFpNPL
Сначала второй шанс — коротким окном с одним решением, потом итоги: время
героем, награда с полосой уровня, плашка нового уровня с открытым, три
цифры и «Подробнее» с уроном по оружиям (раскрытие помнится). Правила
второго шанса и удвоения не меняются, меняется место и вид блоков.

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