You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Engine/Honestidade: "Precisão 100%" coexiste com "Erros 1" — arredondamento mascara erro e rótulo confunde #20
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 cumulativo — setErrors(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 cima — Race.tsx:56-57: Math.round((1 - errors / totalKeystrokes) * 100). Com 1 erro em ~200 teclas: 1 - 1/200 = 0.995 → Math.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:
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.
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 === 0 → 100%.
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).
Resolvido em PR #23 (auto/issue-20-precisao-honesta).
Correção:accuracy só exibe 100% com zero erros; com ≥1 erro usa Math.floor + teto de 99% (nunca contradiz o cartão de erros). Rótulo "Erros" → "Erros (total)" + tooltip explicando que inclui erros já corrigidos.
Gate: typecheck ✅ · build ✅ · validate-metrics 27/27 (3 casos novos) ✅ · validate-persistence 33/33 ✅. Sem toque na latência de input nem em reduced-motion.
Activity
caioross commentedon Jul 11, 2026
Resolvido em PR #23 (auto/issue-20-precisao-honesta).
Correção:
accuracysó exibe 100% com zero erros; com ≥1 erro usaMath.floor+ teto de 99% (nunca contradiz o cartão de erros). Rótulo "Erros" → "Erros (total)" + tooltip explicando que inclui erros já corrigidos.Gate: typecheck ✅ · build ✅ · validate-metrics 27/27 (3 casos novos) ✅ · validate-persistence 33/33 ✅. Sem toque na latência de input nem em reduced-motion.
fix(engine): precisão honesta — nunca 100% com erro cometido (#20) (#23)
refactor(engine): extrai métricas puras de Race.tsx para src/lib/metr…