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)
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.
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:uiquando 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)
/_harnessou?harness=results) que renderizaResults.tsxcom props-fixture, sem passar por lobby/countdown/corrida.process.env.NODE_ENV !== 'production'ou equivalente) — comprovar quepnpm buildnão expõe a rota.Race/textarea/latência de input) muda; o harness é isolado.README(seção de dev/testes) explica como abrir o harness e para que serve.pnpm typecheck+pnpm buildverdes; fixtures são dados sintéticos (nenhuma chamada a Supabase/Realtime).Dica de abordagem
Results.tsxjá recebe e criar um arquivo de fixtures (results.fixtures.ts) com os N cenários; montar via uma rota App-Routerapp/(dev)/_harness/page.tsxguardada porNODE_ENV, ou um client component atrás de um query-param que só o dev conhece.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.