Releases: patrick095/ApexLap-Coach
Releases · patrick095/ApexLap-Coach
Release list
ApexLap Coach v0.6.2
[0.6.2] — 2026-06-03
Correções
- Delta ao vivo (#1/#2): cálculo corrigido para
lapElapsedTime − referenceLapTime × lapPctem vez de comparar com o tempo total da referência - Tag "Calibrando" (#3):
classifyPilotSkill()agora chamado após cada volta válida; badge atualiza corretamente para o nível classificado - Mapa da referência (#4): sanity check de GPS relaxada (threshold 2°→5°); traçado real da pista exibido para referências Garage61
- Nível iniciante (#5):
calibrateFeedback()integrado ao fluxo; nível do piloto aplicado ao limite e tom do feedback - Referência visível (#6): badge fixo com tempo da referência ativa exibido durante toda a sessão de coaching
- Volta inválida e setores (#7): chips de setor e painel de detalhe ocultados quando volta comprometida (
lapCompromised = true) - Saída do pit (#8): primeira volta da sessão detectada como out-lap mesmo sem samples com
inPit = true - Feedback com setor ruim (#9):
close_to_referenceverifica delta de crescimento de todas as fases, não apenastimeLosstotal
ApexLap Coach v0.6.1
[0.6.1] - 2026-05-29
Fixed
- BUG-01 — Primeira volta da sessão não gera mais feedbacks de voz incorretos. O coach pula o processamento da volta 1 após ser iniciado, evitando comparações com referências desalinhadas.
- BUG-01b —
currentLapTraceé limpo ao completar uma volta, eliminando dados residuais nos timings em tempo real. - BUG-02 — Voz que travava silenciosamente agora tem timeout de 15s por reprodução. Após 3 falhas consecutivas, um banner de aviso aparece na tela de coaching.
- BUG-03 — SDK do iRacing conecta automaticamente ao abrir o app; botão "Abrir iRacing" removido da idle screen.
- BUG-04 — Saída de pista, reboque e colisão detectados em tempo real no loop de telemetria. Feedbacks de técnica são suprimidos pelo resto da volta comprometida. Saídas brevíssimas (< 2 samples) ignoradas para evitar falsos positivos em kerbs. Anúncio tardio no fim da volta suprimido se já anunciado em tempo real.
Added
- Menu Electron > Configurações com atalho
⌘,/Ctrl+,. - Menu Electron > Abrir iRacing para abertura manual.
VoiceErrorBanner— banner não-obstrutivo com aviso de falha de áudio.CoachingDataGrid— grid de 4 colunas (Volta, Delta, Melhor, Setor) inspirado no SimHub Lovely Dashboard.- Auto-navegação de setor acompanhando posição do piloto; clique manual suspende por 5s.
- Indicador "INVÁLIDA" em laranja na célula DELTA quando a volta está comprometida em tempo real.
- Componentes
ProjectIconeSettingsIcon(SVG inline) substituindo "A" e "S". - Tela de loading com ícone do projeto + spinner animado.
- Layout vertical na coaching screen (painel acima do mapa).
Changed
- Removido badge "Sessão iRacing conectada" da topbar.
session-bodyusaflex-direction: column.
ApexLap Coach v0.6.0
[0.6.0] - 2026-05-28
Added (F1.1 — Novos Erros de Técnica)
brake_too_early— detecta frenagem ≥ 15m antes da referência com pressão similar (≤ 115% da referência). Distinto deoverbrake_overslowpelo timing, não pela intensidade.wheelspin_at_exit— detecta throttle excessivo com esterco > 25% do maxSteering no pickup, resultando em perda de delta na saída apesar do acelerador aberto.high_steering_at_throttle— detecta esterco elevado (|steering| > 0.28, diferença > 0.12 vs ref) no momento do pickup de throttle. Sinal confirmatório de early apex sem posição GPS.inconsistent_braking_point— detecta variância do ponto de frenagem ≥ 15m (desvio padrão) entre as últimas 3+ voltas limpas. RequerlapBrakeHistorynoAnalyzeInput.steering_correction_at_exit— detecta ≥ 2 reversões de esterco com amplitude > 15% na fase de saída durante aceleração. Suprimido quando carry-over explica a curva.LapBrakeHistory— novo tipo exportado pordriving-technique-analyzer.tspara acumular histórico de pontos de frenagem por curva entre voltas.- Regras completas de cada novo erro em
docs/business-rules.md(seção "Erros de Técnica — 0.6.0"). - 13 novos testes em
driving-technique-errors-0.6.0.test.tscobrindo caso positivo, falso positivo e edge cases de cada erro.
Added (F1.2 — Filtro de Ruído de Telemetria)
telemetry-noise-filter.ts— novo módulo com dois mecanismos de filtragem de telemetria raw do iRacing:- Detector de spike: descarta amostras isoladas que desviam > 40% de ambos os vizinhos em throttle, freio ou esterco. Registra no debug log com
[noise-filter]. - Smoothing adaptativo por canal: média móvel centrada com janelas calibradas — throttle (3 amostras), freio (3 amostras), esterco (5 amostras). Canais de posição e velocidade não são alterados.
- Detector de spike: descarta amostras isoladas que desviam > 40% de ambos os vizinhos em throttle, freio ou esterco. Registra no debug log com
TECHNIQUE_THRESHOLDS.MIN_CONFIDENCE_TO_SPEAK: 0.55— threshold separado deMIN_CONFIDENCE_TO_BLOCK_POINT_FEEDBACK(0.70). Issues com confiança < 0.55 são suprimidos com debug log[noise-filter]em vez de gerar voz.- 6 novos testes em
telemetry-noise-filter.test.ts: spike no throttle, spike no freio, ramp normal inalterada, smoothing de esterco, canais de velocidade/posição preservados, retorno inalterado com < 3 pontos.
Changed
LiveLapBuffer.flush()aplicaapplyTelemetryNoiseFilterapósintegratePosition, garantindo que apenas telemetria raw do iRacing seja filtrada (referências importadas não são afetadas).analyzeDrivingTechniqueIssuesagora usaMIN_CONFIDENCE_TO_SPEAK(0.55) como threshold mínimo para atribuirdrivingTechniqueIssue, com log de debug quando suprimido.
Added (F1.2.4 / F1.3 / F1.4 — Coach Intelligence restante)
- F1.2.4 — Supressão por setor comprometido: issues com confiança < 0.75 são suprimidos quando
carryOverFromCornerIdestá presente (COMPROMISED_SECTOR_MIN_CONFIDENCE: 0.75). Issues de carry-over de segunda ordem (N-2 → N-1 → N) exigem confiança ≥ 0.82 (SECOND_ORDER_CARRYOVER_MIN_CONFIDENCE). - F1.3.1 — Contexto multi-volta: novo tipo
LapCornerHistory(Map cornerId →CornerLapMetrics) emAnalyzeInput. Detectores dethrottle_feathering,throttle_partial_too_long,throttle_late_bellyeexcessive_coast_transitioncalibram seus thresholds contra o baseline histórico do piloto quando disponível. - F1.3.2 — consistencyScore: campo
consistencyScore?: number(0–1) adicionado aDrivingTechniqueAnalysis. Calculado como z-score normalizado comparando o lap atual com o histórico de coast, partial throttle e lift count do piloto. - F1.3.3 — Carry-over de segunda ordem: o loop principal detecta quando o corner anterior no
enriched[]também tinhacarryOverFromCornerId, requerendo limiar mais alto (0.82) para acusar a curva atual. - F1.3.4 — Peso dinâmico por tipo de curva:
chooseBestCandidateaplica multiplicadores de confiança para seleção (sem alterar o valor reportado) — hairpin (+15% em brake/coast issues), fast sweeper (+15% em trail braking), chicane (+10% em steering correction/early turn-in). - F1.4.1 — Causa raiz: frases para os 5 novos erros de F1.1 adicionadas em todos os 4 locais (pt-BR, en-US, es-ES, fr-FR). Todas focam no QUE fazer, não no sintoma.
- F1.4.2 — Gradação por severidade:
issueToMessageKeyagora retorna_light(severity=low) ou_severe(severity=high) em vez de sempre a chave base. 28 novas chaves de voz por locale (14 erros × 2 variantes). Chaves de repetição continuam usando a chave base para lookup. - F1.4.3 — Feedback positivo por evolução: campo
evolutionFeedbackKey?: stringadicionado aCornerComparisonResult. Populado comtechnique_evolution_positivequandopreviousLapIssuesindica que o piloto corrigiu um issue da volta anterior na mesma curva. Frases adicionadas nos 4 locais. driving-technique-f1-remaining.test.ts— 16 novos testes cobrindo F1.2.4, F1.3.1-4, F1.4.2-3.
Added (F2 — Pilot Ranking — completo)
PilotSkillClassifier— novo módulosystem/src/domain/pilot/pilot-skill-classifier.tsque calculaskillProfilecomlevel(beginner|intermediate|advanced),confidence(0–1) eprofileMetrics. Classificação por votação majoritária de 4 métricas:brakeConsistencyIndex,throttleCommitRate,trailBrakingAdoptionRate,errorRepeatRate. Confidence proporcional ao número de voltas (≥ 0.6 com 5+ voltas, satura em 1.0 com 10).PilotSkillRepository— persistência do perfil em SQLite viapilot_skill_profile(chave compostatrack_key + car_id).INSERT OR REPLACE— perfil não reseta ao fechar o app.FeedbackCalibrator—calibrateFeedback()retornamaxIssuesPerCorner,confidenceMinThreshold,includeAdviceetoneKeypor nível. Fallback paraintermediatequando confidence < 0.3.- Badge de nível na UI — componente
PilotLevelBadgeemCoachSessionScreen.tsxexibindo Iniciante/Intermediário/Avançado com cores#FF8C00/#00D46A/#E8002D. Animaçãobadge-flashao mudar de nível. - Barra de progresso de nível —
LevelProgressBarmostra % de métricas já no nível seguinte (4 métricas: throttleCommitRate, trailBrakingAdoptionRate, brakeConsistencyIndex, errorRepeatRate). Barra 3px vermelha abaixo do badge. - Resumo de sessão —
SessionSummaryPanelaparece ao parar o coach; exibe os 3 pontos fortes (verde ✓) e 3 pontos a melhorar (amarelo ⚠) baseados nas métricas doskillProfile. - Override manual de nível — campo
pilotLevelOverrideemCoachConfig; select "Nível do piloto" nas configurações com opções Automático / Iniciante / Intermediário / Avançado.calibrateFeedback()usa o override com prioridade máxima.
Added (F4 — Voice & Localization — completo)
- Frases adicionadas e TTS gerado em pt-BR, en-US, es-ES, fr-FR para todas as chaves novas:
technique_brake_too_early/_light/_severetechnique_wheelspin_at_exit/_light/_severetechnique_high_steering_at_throttle/_light/_severetechnique_inconsistent_braking_point/_light/_severetechnique_steering_correction_at_exit/_light/_severetechnique_evolution_positivetechnique_repeat_brake_too_early,_wheelspin_at_exit,_inconsistent_braking_point- Variantes
_lighte_severede todas as técnicas anteriores (feathering, partial, snap_brake, overbrake, early_turn_in, not_using_exit, excessive_coast)
- 148 arquivos .mp3 gerados via
npm run generate:tts(OpenAIgpt-4o-mini-tts, vozonyx). Cobertura 100% — nenhuma chave sem áudio em nenhum locale. - Frases de resumo de sessão — 5
summary_strength_*, 5summary_weakness_*, 3summary_level_*em todos os 4 locales. 72 novos.mp3gerados. - Frases de conselho para modo iniciante — 5
advice_*(brake_too_early, wheelspin_exit, throttle_feathering, inconsistent_braking, trail_braking) em todos os 4 locales.
Added (F5 — QA)
system/tests/pilot-skill-classifier.test.ts— 8 testes: beginner, advanced, dados insuficientes (< 5 voltas), intermediate, votação majoritária, cálculo de confidence exato (5 voltas → 0.60, 10 voltas → 1.0).system/tests/pilot-feedback-calibrator.test.ts— 9 testes: calibração por nível, fallback de confidence < 0.3, limítrofes 0.29/0.30/0.31.- Documentação atualizada:
docs/business-rules.md(thresholds e confidence doPilotSkillClassifier);docs/developer-guide.md(contrato e uso do módulo);docs/qa-criteria.md(critérios dos 5 novos erros + PilotSkillClassifier + calibração por nível);docs/user-guide.md(seção "Classificação de Piloto" para pilotos). - 184 testes passando, 0 falhas. Typecheck limpo.
Changed (F3 — UI/UX Redesign)
- Renderer redesenhado para tema escuro oficial v0.6.0 com tokens CSS de produto (
#0A0A0A, surfaces escuras, vermelho ApexLap, branco para texto, verde para ganho e laranja para alerta). - Tela desconectada agora usa splash central com marca ApexLap, glow vermelho, CTA "Abrir iRacing" em destaque e versão discreta no rodapé.
- Tela ativa do coach recebeu header refinado, badge de perfil, referência em monoespaçado, rail de setores com chips escuros/condicionais, mapa com traçado escuro, linha branca e marcador vermelho com glow.
- Feedback de voz ativo passou a mostrar waveform vermelho durante reprodução.
- Histórico de voltas recebeu visual escuro, deltas destacados, grid de curvas e gráfico compacto de progresso da sessão.
- Configurações foram reorganizadas em seções, com toggles customizados, seletor de idioma com ícones de bandeira em CSS e prévia visual de perfil do piloto.
- Modal de referências recebeu cards com thumb de pista, indicador de fonte Catálogo/Minha, estado de download e busca textual em tempo real.
ApexLap Coach v0.5.1
[0.5.1] - 2026-05-28
Fixed
IRacingTelemetryServiceparou de lerLat/Lon/Latitude/Longitude(variáveis ausentes na maioria das pistas do iRacing) e passou a capturarVelocityX/VelocityY(world-space m/s), que são sempre disponíveis.LiveLapBufferagora integraVelocityX/Ypor integração trapezoidal com cap de dt (MAX_INTEGRATION_DT_S = 0.15 s) para derivartrackPositionX/Yem metros com origem no primeiro ponto da volta — eliminando o problema de posição sempreundefinednas sessões ao vivo.tdf-reference-reader.tsadicionouconvertGpsToMeters(): converte as coordenadas GPS (graus) do arquivo TDF de referência para metros via projeção equiretangular, tornando a referência compatível em escala com a integração de velocidade do live.- Adicionado
business-rules-compliance.test.tscom 11 novos testes cobrindoearly_turn_in_bad_entry,not_using_exit_track,blocksPointFeedback, outlap, volta comprometida e volta boa — gaps identificados pela QA.
ApexLap Coach v0.4.2
[0.4.2] - 2026-05-26
Fixed
- Auto-updater buscava
latest.ymlna raiz do bucket em vez deupdates/latest.yml:publishUrlno workflow passou a incluir oupdatePrefix(/file/updates), eremoteUpdateBaseUrl()no app agora concatenaupdatePrefixaoupdateBaseUrlexplícito antes de chamarautoUpdater.setFeedURL.
ApexLap Coach v0.4.1
[0.4.1] - 2026-05-26
Added
- Cloudflare Worker (
devops/r2-signing-worker/worker.js) com dois endpoints:/sign?path=(autenticado via CF-Access, retorna JSON com URL assinada para arquivos.apexc/.json) e/file/<path>(sem auth, retorna redirect 302 para arquivos de update.exe/.yml/.blockmap). Bucket R2 permanece privado; nenhuma URL pública é exposta. - Campo
prefixemApexcRemoteConfigeremote.json: prefixo de caminho dentro do bucket aplicado antes de chamar o Worker, permitindo usar um único bucket para referências e updates com subdiretórios distintos. - Método público
fetchRemoteIndex()emApexcRemoteCachepara buscar oindex.jsonremoto via Worker sem expor ofetchIndexprivado. remote.json.exampleversionado emsystem/assets/reference-laps/documentando a estrutura esperada do arquivo de configuração remota.
Changed
reference:list-remote(IPC) reescrito para usarApexcRemoteCacheem vez de fetch direto combaseUrl: agora funciona comsigningWorkerUrlsem precisar de URL pública.- GitHub Actions (
release.yml): step "Configure R2 runtime feeds" simplificado — removeAPEXC_REMOTE_BASE_URLeUPDATE_REMOTE_BASE_URL; usa apenasSIGNING_WORKER_URL,SIGNING_WORKER_PREFIX,CF_ACCESS_CLIENT_IDeCF_ACCESS_CLIENT_SECRET. OupdateBaseUrlé derivado automaticamente como{SIGNING_WORKER_URL}/file. remote.jsonadicionado ao.gitignore(contém credenciais).
Fixed
- Dois testes em
corner-analysis-0.4.0.test.tsque falhavam por condições de borda no detector de curvas e no comparador de trail brake: gap entre zonas ajustado para respeitar o limiar de merge (0.01) vs complexo (0.02); cenário detrail_brake_neededredesenhado para evitar quecoast_excessive_exitoubrake_release_fastmascarassem o sinal correto.
ApexLap Coach v0.4.0
[0.4.0] - 2026-05-26
Added
- Análise de perda de tempo por fase de curva (entrada, meio, saída, pós-saída) via cálculo de slope do TDiff, identificando a fase dominante de perda em cada curva.
- Classificação de curvas Tipo A (segue reta longa) e Tipo B (chicane/sequência), com peso de prioridade de saída (
exitPriority) aplicado ao score de aceleração e saída no comparador. - Agrupamento automático de curvas em complexos (
complexId) quando o gap entre elas for menor que 2% da volta; apenas o grupo com maior perda de tempo fala por complexo. - Detecção de carry-over: quando a saída ruim de uma curva compromete a entrada da seguinte, o resultado recebe
carryOverFromCornerIde a dica pré-curva aponta para a curva anterior. - Detecção de
trail_brake_absent: diferencia o caso em que a referência usa trail brake e o piloto não usa (trail_brake_absent) do caso em que ambos usam, mas o piloto precisa melhorar (trail_brake_needed). - Score de qualidade de trail braking (
trailBrakingQuality:excellent/good/partial/absent) calculado por sobreposição de freio+volante, suavidade de release e comprimento da zona de coast. - Índice de subesterço/sobreesterço por curva (
understeerIndex) calculado via yaw rate teórico × medido. - Fase dominante de perda (
dominantLossPhase) exportada no resultado de cada curva. - Seleção automática da referência mais rápida ao conectar ao iRacing: compara a melhor volta do piloto salva localmente com a referência do catálogo e ativa a mais rápida no modo
auto. - Novas frases de voz em pt-BR, en-US, es-ES e fr-FR:
trail_brake_absent,trail_brake_absent_light,coast_excessive_long,carry_over_note,understeer_exit,oversteer_exit,pre_trail_brake,pre_coast_less,pre_carry_over_focus_previous. - Dica pré-curva
pre_carry_over_focus_previousquando a curva atual tem carry-over detectado da anterior. - Dica pré-curva
pre_trail_brakepara casos detrail_brake_absentetrail_brake_needed.
Changed
compareLapByCornersmigrado demappara loop imperativo para suportar carry-over entre curvas consecutivas.rankLossScoresaplica multiplicadorexitPrioritynos scores de aceleração e saída de curvas Tipo A.issueWeightincluiutrail_brake_absentcom prioridade 71 (igual aotrail_brake_needed).- Dica pré-curva para
trail_brake_neededetrail_brake_excessiveagora retornapre_trail_brakeem vez depre_brake_later.
ApexLap Coach v0.3.2
[0.3.2] - 2026-05-26
Changed
visual-track-layouts.jsonfoi movido paraassets/reference-laps/visual-track-layouts.json, fora da pastaapexc, para não ser apagado nem publicado junto com as referências geradas.generate-upload:apexceupload:apexcagora respeitam filtros de carros e pistas grátis e permitem concorrência maior no upload.- O manifest local de geração ApexC passou a ser gravado incrementalmente em
build-manifest.local.jsonle compactado embuild-manifest.local.jsonao finalizar. upload:apexcganhou filtro--referencespara reenviar referências específicas porbasePath.- Adicionado
rebuild:apexc-indexpara reconstruirindex.jsonlocal a partir debuild-manifest.local.json. - Tela do coach ficou mais compacta: a lateral ao vivo mostra setores com referência/atual/delta e curvas somente como indicadores coloridos.
- Histórico de voltas passou a usar seletor de volta e exibir detalhes completos de setores e curvas, incluindo tooltip com a mensagem de feedback da curva.
Fixed
- Corrigido o consumo crescente de memória na geração ApexC, substituindo workers por arquivo por um pool persistente de workers.
- Corrigido o
--forceda geração ApexC para limpar apenas artefatos gerados, sem apagar templates visuais. - Corrigida a geração ApexC para exigir o template visual e evitar fallback silencioso para detecção antiga de curvas.
- Corrigido o upload para não enviar manifests locais de build ao R2.
- Corrigido upload R2 para evitar streams não retryable em
PutObject, reduzindo falhassocket hang up. - Corrigido cálculo de tempo em
lapPct=1quando a telemetria não possui sample exatamente no fim da volta, evitando último setor sem tempo de referência e deltas deslocados. - Corrigido carregamento de referências ApexC para preservar
timeedistancereais do traçado completo, evitando comparar curvas contra uma referência reconstruída com velocidade média constante. - Corrigido leitor de TDF binário do Garage61 para reconstruir o tempo por integração de velocidade, em vez de assumir tempo linear por percentual da volta.
- Referências locais criadas pelo piloto agora reaproveitam os templates visuais padronizados de curvas e setores quando não há uma referência ApexC do mesmo carro.
- Histórico da sessão agora mantém voltas inválidas, exceto a volta inicial de saída dos boxes.
ApexLap Coach v0.3.1
[0.3.1] - 2026-05-26
Changed
- Referências remotas baixadas (catálogo) agora são efêmeras: apagadas ao abrir o app, ao fechar, ao desconectar do iRacing e ao fechar o ReferenceViewer quando não há sessão ativa.
- Ao fechar o ReferenceViewer com uma sessão do iRacing conectada, as referências remotas são mantidas até o fim da sessão.
- Referências criadas a partir de voltas válidas do próprio piloto (top-10 por combinação pista/carro) continuam persistentes e só são removidas por reset explícito nas configurações.
- Na abertura do app, referências remotas de sessões anteriores encerradas de forma abrupta são apagadas automaticamente.
- Label de fonte no ReferenceViewer renomeado de "Catálogo" para "App"; badge de referências do piloto alterado para ★.
Fixed
- Referências baixadas do catálogo apareciam incorretamente com badge "minha" no ReferenceViewer: o renderer não filtrava o
sourceretornado porlistAvailableReferences(), forçando todos os itens comolocal. Agora apenas entradas comsource === "local"vão para a lista de voltas do piloto.
ApexLap Coach v0.3.0
[0.3.0] - 2026-05-25
Added
- Módulo
telemetry-event-analyzer.tspara extração de eventos granulares por canal: throttle, freio, coast, volante e marcha, com limites por fase da curva. - Fases
ENTRY,MID,EXITePOST_EXITcom janelas calculadas pela geometria da curva (computePhaseBoundaries). - Ledger de delta por fase (
PhaseDeltaLedger) comentryDeltaGrowth,midDeltaGrowth,exitDeltaGrowth,postExitDeltaGrowthetotalCornerDeltaGrowth;postExitDeltaGrowthcaptura perdas que continuam após o fim da curva. - Detecção de auto-blip: pico curto de throttle durante redução de marcha em zona de frenagem é classificado e ignorado na análise de throttle.
- Detecção de throttle parcial sustentado (
partialDurationSeconds,partialDeltaGrowth) — separa "50% constante" de "100% por metade do trecho, 0% no restante". - Novas causas de
mainIssue:throttle_partial_exit,throttle_hesitation,throttle_early_with_steering,coast_excessive_entry,coast_excessive_exit,trail_brake_excessive,entry_too_aggressive,steering_scrub,gear_too_high,gear_too_low. - Pesos de fase no scoring:
ENTRY=0.90,MID=1.00,EXIT=1.35,POST_EXIT=1.50. - Supressão de steering: não ganha quando throttle parcial, coast ou freio explicam melhor a perda no exit; só pontua quando
yawEfficiencyou scrub confirmam understeer real. throttle_committedcomo nova causa de ganho, ativada quando o piloto acelerou mais decisivamente na saída.- Novas frases de voz em pt-BR, en-US, es-ES e fr-FR para todas as novas causas.
- Testes
telemetry-causality.test.tsethrottle-events.test.tscobrindo throttle parcial, auto-blip, coast por fase, ledger de delta e análise causal. - Debug log aprimorado: exibe
postΔ,partialDiffe causas secundárias em modo desenvolvedor.
Changed
lap-comparator.tsrefatorado para usartelemetry-event-analyzer.ts; scoring agora baseado em eventos + delta de fase em vez de médias simples.throttleSeverityincluipartialDurationDiffcom peso dobrado quandoexitDeltaGrowth > 0.06s.steeringSeverityreduzida a 20% quando outras causas explicam o exit; requer confirmação de yaw/lateral efficiency.coastIssuediferenciacoast_excessive_entrydecoast_excessive_exitconforme a fase onde ocorre.gearIssueretornagear_too_highougear_too_lowem vez de sempregear_wrong.corner-feedback.service.tsmapeado para todas as novas causas.issueWeightemelectron-main.tsatualizado com prioridades para as novas causas.