Skip to content

Engine/Honestidade: "Precisão 100%" coexiste com "Erros 1" — arredondamento mascara erro e rótulo confunde #20

Description

@caioross

Sintoma (confirmado por persona em produção)

No painel "// suas estatísticas" durante a corrida, os cartões Precisão e Erros se
contradizem: a persona O Iniciante viu "Precisão 100%" e "Erros 1" ao mesmo tempo
(feedback em Discussion #14). Dois rótulos verdadeiros no cálculo, mas incoerentes aos olhos —
quebra de honestidade de métrica, o oposto da nossa promessa de engine transparente.

Causa-raiz (arquivo:linha)

src/components/Race.tsx

  • errors é um contador vitalício e cumulativosetErrors(e => e + newErrors) em
    Race.tsx:88. Cada tecla errada soma; backspace + correção não subtrai (linha 90-92
    ignora backspace de propósito). Então "Erros" conta erros já corrigidos, não erros vivos.
  • accuracy arredonda para cimaRace.tsx:56-57:
    Math.round((1 - errors / totalKeystrokes) * 100). Com 1 erro em ~200 teclas:
    1 - 1/200 = 0.995Math.round = 100%. Logo "100%" e "Erros 1" coexistem.

Ou seja: dois números certos pela sua própria conta, mas a UI não explica que "Erros" é
erros cometidos no total enquanto "Precisão" é taxa arredondada. O jogador lê como bug.

Correção proposta (honestidade, não maquiagem)

Duas mudanças pequenas e independentes, ambas na engine/label:

  1. Precisão nunca exibe 100% se houve ≥1 erro. Trocar o arredondamento por floor quando
    errors > 0 (ou exibir 1 casa decimal). 100% deve significar zero erros cometidos, ponto.
  2. Deixar o rótulo "Erros" honesto: esclarecer que conta erros cometidos (inclui
    corrigidos), p.ex. rótulo "Erros (total)" ou tooltip "teclas erradas digitadas, mesmo que
    corrigidas". Sem mudar o número — só o significado explícito.

Não mexer no cálculo de WPM nem na área sagrada (latência de input). Mudança é de exibição.

Acceptance criteria (verificáveis)

  • Com errors > 0 e totalKeystrokes alto, o cartão Precisão nunca mostra 100%
    (mostra 99% ou 99.5%). Só errors === 0100%.
  • O rótulo/tooltip de Erros deixa explícito que é contagem de erros cometidos
    (incluindo corrigidos), eliminando a leitura de "bug".
  • node scripts/validate-metrics.mjs verde, com ao menos 1 caso novo: 1 erro em N
    teclas → precisão < 100% e Erros ≥ 1 coerentes.
  • Sem regressão de latência de input (60fps) nem de prefers-reduced-motion.

Dica de abordagem

accuracy em Race.tsx:56-57 é o ponto único de exibição; use Math.floor sob condição
errors > 0. O rótulo está em Race.tsx:152. A skill cr-typing-engine cobre a engine e o
validador. Fecha o loop pré-prometido em Discussion #14 (chapéu de Engine, sexta).

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Prioridade normalarea:engineMotor de digitação, WPM, precisão, anti-cheat

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions