Skip to content

Infra/UI: harness só-de-dev para verificar telas pós-corrida (Results/pódio) sem jogar #37

Description

@caioross

Problema

As telas de pós-corrida (Results.tsx — pódio, ranking final, contagem de stats) só existem depois de uma corrida multiplayer completa: lobby → countdown → racing → finished. Não há como alcançá-las de forma isolada (dev/headless), então PRs de UI dessas telas shipam sem verificação em browser.

Isso não é hipótese: o Retro W28 (D#15) registrou 3 PRs de UI (#11 pódio solo, #23, #26) mergeadas com o Resolvedor declarando honestamente "a tela fica atrás de corrida concluída, inviável headless" — e propôs esta issue: "harness p/ verificar telas pós-corrida (Resultado/pódio) — vale virar issue area:infra/area:ui quando houver folga."

Impacto direto na fila atual: #22 (share na tela de Resultado) e #25 (/practice) vão mexer exatamente nessas telas e herdar o mesmo ponto cego. Um harness pago uma vez destrava a verificação visual de todas elas.

Objetivo

Um harness só-de-dev que monta as telas de pós-corrida com dados-fixture, alcançável em um clique/URL, sem jogar uma corrida — para que um agente (ou humano) tire screenshot e valide layout/estados antes do merge.

Acceptance criteria (verificáveis)

  • Existe uma rota/entrada apenas em dev (ex.: /_harness ou ?harness=results) que renderiza Results.tsx com props-fixture, sem passar por lobby/countdown/corrida.
  • Cobre os estados do pódio que já quebraram/importam: 1 jogador, 2, <3 (o caso da UI: pódio solo mostra quadrados vazios/quebrados (adaptar Results a < 3 jogadores · §III.7) #11) e ≥3, mais o estado de erro/vazio.
  • Zero pegada em produção: a entrada não aparece no bundle/rota de prod (gate por process.env.NODE_ENV !== 'production' ou equivalente) — comprovar que pnpm build não expõe a rota.
  • Área sagrada intacta: nada no caminho da corrida (Race/textarea/latência de input) muda; o harness é isolado.
  • Um parágrafo no README (seção de dev/testes) explica como abrir o harness e para que serve.
  • pnpm typecheck + pnpm build verdes; fixtures são dados sintéticos (nenhuma chamada a Supabase/Realtime).

Dica de abordagem

  • Menor caminho: extrair as props que Results.tsx já recebe e criar um arquivo de fixtures (results.fixtures.ts) com os N cenários; montar via uma rota App-Router app/(dev)/_harness/page.tsx guardada por NODE_ENV, ou um client component atrás de um query-param que só o dev conhece.
  • Não precisa de Playwright ainda (isso é EngFase C na Parte VII) — este é o enabler barato que já torna as telas alcançáveis; o E2E entra depois reusando os mesmos fixtures.
  • Preferir reuso: se Race/fluxo já expõe um tipo de "resultado final", os fixtures devem satisfazer esse tipo (nada de shape paralelo que possa divergir).

Refs: spec docs/UI-AAA-OVERHAUL.md §III.7 (Results/pódio) e Parte VII (EngFase C = E2E/Playwright, do qual isto é a primeira pedra). Origem: Retro W28 · D#15.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Prioridade normalarea:infraCI/CD, build, tooling, deploy, depsarea:uiInterface, design system, animação, game feel

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions