Histórico de entregas

Acompanhe as mudanças públicas do app, do painel, do laboratório e das integrações YouAutoCar.

Página 12 de 23
1.2.48+170

Viagens presas voltam a sincronizar e o app atualiza a base técnica

Viagens gravadas com uma ordem de serviço que depois foi apagada ficavam presas na fila de sincronização e nunca chegavam ao histórico online. Agora o app solta o vínculo inexistente e envia a viagem normalmente. A base técnica do app (cliente Supabase, mapas, conectividade, navegação e ícones) foi atualizada e validada no tablet de oficina com o simulador OBD.

AndroidWebSupabaseOperacao
Ver detalhes
  • Viagem vinculada a uma O.S. que não existe mais no servidor é sincronizada sem o vínculo, preservando pontos, eventos e métricas.
  • Cliente Supabase 2.17 (inicialização com chave publicável), conectividade 7.3, mapas 8.3, navegação 17.5, seletor de imagens, ícones e utilitários atualizados dentro das versões compatíveis.
  • Tela de Configurações reorganizada internamente por categoria, sem mudança visual, para manter o limite de tamanho de arquivo do projeto.
  • Validado no tablet SM-X236B: login restaurado, veículo ativo, notificações push e conexão OBD com PIDs vivos pelo simulador.
  • Painel web e site com dependências de build e teste atualizadas (Vite 8, Vitest 5, cliente Supabase 2.115, TypeScript 6 no site), sem mudança de comportamento para a oficina.

Fonte: Rodada 654: auditoria completa e fechamento de dívida técnica (DT-DEPS-02, DT-MOB-15, DT-MOB-16)

1.2.47+169

Scanner pela O.S. mantém a sessão da bancada e o Jarvis se ajusta ao tablet

Ao abrir o App OBD pela ordem de serviço, a sessão diagnóstica agora permanece única e vinculada ao veículo e à O.S. mesmo quando o adaptador usa o VIN conhecido da bancada autorizada. A atualização em tempo real entre OBD e Diagnóstico Assistido também fica estável, e a tela crítica do Jarvis se ajusta ao tablet sem cortar avisos ou ações.

AndroidWebSupabaseOperacao
Ver detalhes
  • O link App OBD da O.S. seleciona o veículo correto antes de iniciar o scanner e preserva vehicle_id e service_order_id na sessão.
  • O VIN conhecido da bancada continua local quando o scanner é aberto sozinho, mas pode ser vinculado com segurança quando veículo e O.S. foram informados explicitamente.
  • Novas aberturas pelo ícone ou por links da oficina reutilizam a mesma tarefa do aplicativo, sem acumular cartões duplicados nos recentes do Android.
  • O resumo assistido reutiliza a sessão ativa da mesma O.S. e do mesmo veículo, sem criar uma segunda sessão de snapshot.
  • As abas OBD e Diagnóstico Assistido usam assinaturas independentes e podem permanecer abertas juntas sem conflito no realtime.
  • O Jarvis reduz o avatar conforme a altura real disponível e mantém aviso assistido, resultado e ações visíveis em 1280 x 800.
  • A limpeza de DTC foi confirmada no simulador físico: o código sai sozinho do aplicativo no ciclo automático de consulta, sem reconectar o adaptador.

Fonte: Sprint integrada: superaquecimento do simulador ate a O.S.

1.2.46+168

Rosto do Jarvis volta a se mexer em tablet de oficina: fim do falso "Compatibilidade GPU"

O modo Automático de compatibilidade visual estava rebaixando aparelhos saudáveis para "Compatibilidade GPU" só por causa do formato da tela (larga, em paisagem e de baixa densidade) ou por um pedaço de texto ambíguo no identificador da build. Nesses casos o rosto do Jarvis ficava congelado. Agora o modo Automático só desliga a animação quando existe evidência real de GPU/processador fraco ou Android antigo, e os Ajustes mostram o motivo da escolha.

AndroidOperacao
Ver detalhes
  • Tablet de oficina em paisagem com GPU capaz (Adreno, Mali-G, Xclipse, Immortalis) fica em "Multimídia" e mantém o rosto vivo animado, em vez de cair em "Compatibilidade GPU".
  • Sem informação de GPU, uma tela larga de baixa densidade para em "Multimídia" (efeitos reduzidos, animação leve) e nunca mais em "Compatibilidade GPU".
  • Centrais e multimídias com evidência real (PowerVR Rogue/SGX, Vivante, Mali-400/450, Rockchip, Allwinner, Unisoc/Spreadtrum) e aparelhos com Android 9 ou anterior continuam em "Compatibilidade GPU", mesmo que a GPU pareça capaz.
  • A identificação passa a olhar só os campos que descrevem o aparelho e usa padrões com fronteira de palavra: identificadores de build como "RKQ1.200826.002" não são mais confundidos com placas Rockchip.
  • Ajustes > Aparência mostra o motivo da decisão automática (por exemplo "Perfil ativo: Multimidia (tela ampla em paisagem)"); nos modos escolhidos à mão o texto continua sem motivo.
  • Os modos manuais Normal, Multimídia e Compatibilidade GPU e a proteção automática por memória continuam iguais.

Fonte: Rodada 653: autodeteccao visual segura (DT-MOB-13)

1.2.45+167

Jarvis ganha um rosto vivo: 12 expressões, piscadas, olhar e reações ao toque

Quarta e última fase da evolução do Jarvis. O robô ilustrado continua o mesmo, mas a viseira passa a ser desenhada em vetor por cima da imagem: olhos com pálpebras e pupila, sobrancelhas, boca com abertura, bochechas, suor e emotes. Doze expressões seguem o estado do carro (bravo no crítico, preocupado no aviso, focado na varredura, riso em giro alto, orgulhoso em velocidade, curioso no aquecimento, sonolento parado), com piscadas, olhar, respiração, pequenos gestos ociosos e reações a eventos como conectar, DTC novo, temperatura alta e música. Tocar no rosto faz o Jarvis reagir e soltar uma tirada.

AndroidWebSupabaseOperacao
Ver detalhes
  • Perfil "Rosto flutuante" vira "Rosto vivo" (24 quadros por segundo; 12 com efeitos reduzidos) e "Rosto compacto" usa a mesma viseira estática; em central com GPU fraca o rosto não anima, mas mantém a expressão do momento.
  • Reações ao toque: um toque cutuca (surpresa), três toques rápidos fazem cócegas (riso) e segurar rende piscadela com corações; bloqueado em alertas e desligável no novo ajuste "Reações ao toque" (Ajustes e painel web).
  • Expressões trocam com histerese (alerta entra na hora, sai depois de 1,5 s) e sem saltos; falar mexe a boca por cima da expressão base.
  • Sem blur, saveLayer ou clip; gradientes só com efeitos avançados; teto de 45 operações por quadro verificado em teste. Cinco imagens do pacote antigo de sprites saem do app.
  • Migration libera a chave das reações ao toque no perfil online (search_path fixo); teste de banco atualizado.

Fonte: Rodada 653: evolução Jarvis Fase 4 (DT-JARVIS-04)

1.2.44+166

Jarvis comenta a viagem, abre o Jarvis Vivo com um cumprimento e resume o trajeto

Terceira fase da evolução do Jarvis. Quando tudo está calmo, ele faz comentários ocasionais sobre a viagem (marcos de tempo, ritmo econômico, rodovia longa, trânsito, música e horário), nunca em cima de um alerta. Ao abrir o Jarvis Vivo ele cumprimenta, e ao desconectar de propósito depois de mais de 10 minutos ele resume o trajeto. Tudo com controle nos Ajustes e sincronizado com o painel web.

AndroidWebSupabaseOperacao
Ver detalhes
  • Novos ajustes "Comentários ocasionais" (ligado por padrão) e "Frequência dos comentários" (Normal 6–10 min, Raro 12–20 min), nos Ajustes do app e no painel web; obedecem o modo de voz Desligado e Somente crítico.
  • Portas duras antes de qualquer comentário: sessão pronta há 3 min, humor fora de alerta/varredura/fala, 60 s de silêncio após alerta, 2 min após qualquer fala, teto por sessão (8 normal / 4 raro) e nada em aceleração, carga alta, subida ou partida a frio.
  • Cumprimento ao abrir o Jarvis Vivo (no máximo a cada 5 min), resumo de viagem na desconexão manual (> 10 min, com o contexto dominante do trajeto) e frases de reação ao toque prontas para o rosto da próxima fase.
  • Comentário que cai no mesmo lote de um alerta é descartado; a seção Voz do Jarvis passa a mostrar o tom antes da velocidade.
  • Migration libera as duas chaves no perfil online (search_path fixo); teste de banco atualizado.
  • Comentários ocasionais não reabrem o Jarvis Vivo por cima de outra tela; só alertas e falas de evento continuam abrindo a tela automaticamente (build +165 substituído pelo +166 nas faixas Internal e Alpha).

Fonte: Rodada 653: evolução Jarvis Fase 3 (DT-JARVIS-03)

1.2.43+164

Jarvis ganha personalidade e dezenas de frases novas

Segunda fase da evolução do Jarvis. Um ajuste de personalidade (Sério, Leve ou Brincalhão, sincronizado com o painel web) muda o tom das falas de conexão, varredura, resultado sem falhas, perda do adaptador e temperatura do motor, com memória para não repetir a mesma frase em seguida. Alertas críticos continuam sempre sérios.

AndroidWebSupabaseOperacao
Ver detalhes
  • Personalidade do Jarvis nos Ajustes e no painel web (padrão Leve); bancos de frases com tom mínimo por linha e memória anti-repetição, persistida para as falas que acontecem uma vez por viagem.
  • Novas frases: conexão pronta (10), início e reuso de conexão, adaptador perdido (8), varredura iniciada (7), sem falhas (7), temperatura de trabalho (+6) e motor frio (+3); aberturas leves e brincalhonas.
  • Estilo dos avisos de velocidade ganha a opção "Seguir personalidade" (novo padrão); escolhas explícitas continuam valendo.
  • Migration libera a chave de personalidade no perfil online, com search_path fixo; teste de banco atualizado.

Fonte: Rodada 653: evolução Jarvis Fase 2 (DT-JARVIS-02)

1.2.42+163

Jarvis ganha emoção na voz, ajuste de tom e prévia por voz

Primeira fase da evolução do Jarvis. A voz passa a variar com a emoção da fala: alertas críticos mais graves e rápidos, boas notícias mais animadas, comentários calmos mais lentos. Um novo ajuste de tom da voz é sincronizado com o painel web, e o seletor de voz permite ouvir cada voz antes de escolher. O sincronismo das configurações online também foi corrigido em quatro pontos.

AndroidWebSupabaseOperacao
Ver detalhes
  • Cada fala do Jarvis é entregue com tom e velocidade ajustados pela emoção (crítico, preocupado, feliz, brincalhão, sonolento) sobre a base escolhida pelo usuário.
  • Ajuste "Tom da voz" (0,7 a 1,4) no app e no painel web, sincronizado por veículo; migration libera a chave no perfil online.
  • Seletor de voz com prévia por voz, indicação offline/online e qualidade; cancelar restaura a voz anterior.
  • Botões de prévia Feliz, Preocupado, Crítico e Sonolento nos Ajustes.
  • Sincronismo: o painel web passa a conhecer pronúncia técnica e modo (antes apagava as duas chaves ao salvar); "Resetar" no app agora chega ao perfil online; velocidade de leitura inteira vinda do JSON deixa de ser ignorada; distância, mãos, ícones orbitais e logo ganham controle no web; teste de banco cobre a allowlist.

Fonte: Rodada 653: evolução Jarvis Fase 1 (DT-JARVIS-01)

1.2.41+162

Jarvis avisa quando perde o adaptador e reconecta sozinho

Na tela ao vivo, uma queda do adaptador deixava o app desconectado até um toque manual, e o Jarvis ficava em silêncio, às vezes com cara de aceleração por causa de dados antigos. Agora ele avisa, tenta reconectar com intervalos crescentes e assume o rosto offline enquanto não há telemetria.

Android
Ver detalhes
  • Reconexão automática em primeiro plano após queda inesperada: 3, 6, 12, 24, 48 e 48 segundos, respeitando a opção Conexão Automática e o intervalo de 2 minutos após desligamento manual.
  • Novas falas do Jarvis: "Perdi o adaptador OBD, vou tentar reconectar sozinho" e, se esgotar, "toque em conectar que eu tento de novo".
  • Humor offline passa na frente do contexto de condução antigo; a conexão restabelecida continua sendo anunciada.
  • Testes novos para a política de reconexão, as falas e a prioridade do humor.

Fonte: Rodada 653: conferência do sistema em 2026-09-06 (queda do V-LINK após reset do simulador)

1.2.40+161

Sessão do scanner deixa de reiniciar a cada 2 segundos na bancada

Com o simulador OBD (VIN de bancada), o painel ao vivo re-preparava a sessão do scanner a cada leitura porque a sessão de bancada nunca recebe identificador. Cada reinício zerava alertas, motor de anomalias e a narração do Jarvis. Foram 635 reinícios em 30 minutos no tablet de QA.

Android
Ver detalhes
  • Sessão desvinculada (bancada ou VIN divergente) com o mesmo VIN ao vivo é mantida em vez de re-preparada.
  • Sessão vinculada a veículo que ainda não persistiu continua sendo re-garantida.
  • Três casos de teste novos no guard do painel.

Fonte: Rodada 653: falha encontrada na conferência do sistema em 2026-09-06 após o simulador voltar

Projeto iOS inativo removido do app

O app é Android. A pasta iOS era um esqueleto gerado automaticamente, sem permissões, sem dependências nativas e sem build possível. Foi removida para que ninguém a confunda com um app publicável. Se um dia o app for para iPhone, o projeto será recriado do zero com as permissões de Bluetooth corretas.

AndroidOperacao
Ver detalhes
  • Pasta apps/mobile/ios removida (39 arquivos de esqueleto).
  • Sem efeito para usuários Android; build, testes e publicação seguem iguais.

Fonte: Rodada 653: YC-130 / DT-MOB-07 decidido pelo Owner em 2026-09-05

Senha do Wi-Fi do YouAutoTester passa a ser única por aparelho

O testador de bancada subia um ponto de acesso com a mesma senha em todos os aparelhos, gravada no código. Agora cada aparelho tem nome e senha próprios, derivados do chip e de um segredo que fica fora do repositório. A auditoria de segredos do repositório também foi concluída: nenhum segredo privado entrou no histórico.

Operacao
Ver detalhes
  • AP do YouAutoTester: nome YouAutoTester-XXXX e senha derivada por aparelho, visível só no monitor serial; build falha sem o salt local.
  • 287 alertas silenciados do gitleaks auditados um a um: catálogo de PIDs, logcats do tablet e chaves de referência, sem credenciais; substituídos por três allowlists documentadas.
  • Arquivos .env que entraram no histórico continham só a chave anônima pública do Supabase; rotação de segredos históricos não é necessária.

Fonte: Rodada 653: YC-120, YC-121, DT-REPO-02, DT-FW-01

Índices para as ligações do copiloto na ordem de serviço

O advisor de desempenho do Supabase apontou três chaves estrangeiras do copiloto na tabela de ordens de serviço sem índice. Os índices foram criados; nenhuma mudança visível para quem usa o sistema.

SupabaseOperacao
Ver detalhes
  • Índices em copilot_snapshot_id, copilot_variant_id e copilot_version_id de service_orders.
  • Advisor de desempenho sem chaves estrangeiras sem índice.

Fonte: Rodada 653: advisor unindexed_foreign_keys em 2026-09-05

Funções de borda do repositório e da produção passam a ser o mesmo conjunto

Três funções que existiam só no repositório e nunca foram publicadas foram arquivadas, e três funções que estavam publicadas a partir de cópias de trabalho foram republicadas a partir do ramo principal. Não há mudança de comportamento para quem usa o sistema.

SupabaseOperacao
Ver detalhes
  • Arquivadas em evidências: copilot-drift-category-breakdown, expire-dispatch e metrics-dashboard (sem chamadores, sem cron).
  • Republicadas a partir do ramo principal: ml-vehicle-search, whatsapp-background-worker e whatsapp-meta-webhook.
  • Manifesto de funções e allowlist de configuração atualizados; gate de configuração verde.

Fonte: Rodada 653: YC-112 fechado

Cabeçalhos de segurança passam a ser entregues pelo servidor do painel em produção

A verificação em produção mostrou que o painel não enviava nenhum cabeçalho de segurança: a configuração existia só no nginx, que não participa da entrega no ChatGPT Sites. O servidor do painel agora envia HSTS, CSP básica, CSP completa em modo relatório e política de permissões em todas as respostas.

WebOperacao
Ver detalhes
  • HSTS de um ano, CSP básica (sem embutir o painel em outros sites, sem plugins), Permissions-Policy, Referrer-Policy e nosniff em todas as respostas.
  • CSP completa continua em modo relatório até uma janela sem violações no console; só então passa a bloquear.
  • Quatro testes automatizados garantem os cabeçalhos no fallback do painel, nos assets e no healthz.

Fonte: Rodada 653: DT-WEB-06 (curl em app.youautocar.com.br sem cabeçalhos em 2026-09-05 00:25)

Biblioteca de ícones do painel atualizada para a versão 1

O painel passa a usar a versão 1 da biblioteca de ícones. O único ícone removido pela biblioteca (logo do YouTube) foi trocado por um ícone neutro de vídeo no painel de diagnóstico assistido.

Web
Ver detalhes
  • lucide-react 0.563 para 1.39 (Dependabot #78) com typecheck, lint, testes e build verdes.
  • Selo "Vídeos relacionados" do diagnóstico assistido usa o ícone de monitor com play.

Fonte: Rodada 653: Dependabot #78

1.2.39+160

Eventos de anomalia do scanner registrados na empresa certa

O app enviava o dono do veículo como empresa ao registrar arestas de anomalia. Com o guard de escopo do banco, usuários com mais de uma oficina podiam ter eventos recusados. Agora o app usa a empresa do veículo, depois a empresa ativa, e o dono só como último recurso.

Android
Ver detalhes
  • A consulta do veículo passa a trazer a empresa dele para o motor de anomalias.
  • Ordem de resolução do escopo: empresa do veículo, empresa ativa do usuário, dono do veículo.
  • Teste automatizado cobre as quatro combinações. Publicado em Internal e Alpha; Production só com pedido do Owner.

Fonte: Rodada 653: DT-DB-11 fechado no mobile

Cadastro de contato do CRM volta a funcionar e bibliotecas do painel atualizadas

A atualização de 36 bibliotecas do painel trouxe uma verificação mais rígida das gravações no banco, que revelou três problemas reais: o cadastro de contato do CRM gravava um campo inexistente, a tela de Permissões consultava colunas que não existem e a criação de O.S. aceitava campos ignorados pelo banco.

WebSupabaseOperacao
Ver detalhes
  • O campo WhatsApp do contato de pós-venda passa a existir no banco e o cadastro de contato volta a salvar.
  • A tela de Permissões, que nunca leu nem gravou dados reais e não aparecia no menu, foi removida; as permissões seguem vindo do catálogo de papéis.
  • As gravações de veículos, fornecedores, O.S., guincho, integrações, diretório de clientes, manutenção e evidências passam a usar os tipos gerados do banco, sem campos soltos.
  • 36 bibliotecas do painel atualizadas (supabase-js, Sentry, Radix, react-hook-form, recharts, zod, entre outras) via Dependabot #79.

Fonte: Rodada 653: Dependabot #79 integrado com correções de tipagem (DT-WEB-12)

Banco de dados alinhado entre o ambiente de desenvolvimento e a produção

Uma comparação automática encontrou colunas que existiam só em produção ou só no histórico de migrações, o que fazia o cálculo de preço de guincho falhar em produção. As duas pontas foram alinhadas sem remover nada.

SupabaseWebOperacao
Ver detalhes
  • O preço final do guincho volta a ser calculado: a coluna de preço mínimo passa a existir em produção.
  • Campos de previsão de manutenção por IA e de tenant das leituras OBD entram no histórico de migrações, garantindo que ambientes novos nasçam iguais à produção.
  • Os tipos do painel web foram regenerados a partir do esquema alinhado e um teste de banco protege as colunas-chave.

Fonte: Rodada 653: DT-DB-12 no ledger de dívida técnica

Painel volta a carregar os veículos disponíveis para despacho de guincho

A validação do deploy identificou que a consulta ainda usava o nome local antigo da coluna de tipo do veículo; o painel passa a ler o contrato real do banco e volta a oferecer os veículos cadastrados no despacho de guincho.

WebOperacao
Ver detalhes
  • A consulta de veículos de guincho passa a ler vehicle_type, conforme o contrato remoto em produção.
  • Um teste automatizado protege o nome da coluna usado pela tela de despacho.
  • A correção foi validada com fixture temporária de QA, removida após a prova sem deixar registros residuais.

Fonte: Rodada 653: correção identificada no smoke autenticado do deploy Sites

Análise de telemetria por IA no app volta a funcionar

Entre 02:45 e 16:05 de 2026-09-04 a função telemetry_analyze estava publicada com o código de outra função (a seção no config.toml herdou o entrypoint da vizinha), então a análise de telemetria por IA no app respondia erro; corrigido e republicado a partir do repositório.

SupabaseAndroidOperacao
Ver detalhes
  • config.toml: seção de telemetry_analyze com entrypoint próprio, posicionada depois do bloco completo de analisar-dtc.
  • Deploy verificado: entrypoint e import map apontam para telemetry_analyze (bundle de 13 kB, antes 714 kB).
  • As 21 Edge Functions remotas sem fonte foram apagadas (código arquivado em evidence/edge-archive/2026-09-04).

Fonte: Rodada 653: incidente detectado ao conferir list_edge_functions apos as exclusoes; corrigido em 13 minutos