Histórico de entregas

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

Página 13 de 23

App passa a analisar também o fork do plugin Bluetooth com as mesmas regras

O fork interno do flutter_bluetooth_serial entra no analisador com as 16 regras estritas do app: arquivos renomeados, tipos explícitos no handler de pareamento, sink de escrita implementando a interface do SDK 3 e SDK mínimo atualizado; conexão com o V-LINK validada no tablet.

AndroidOperacao
Ver detalhes
  • 107 correções automáticas no fork, nomes de arquivo em snake_case e diretivas part por URI; nomes de constantes da API pública preservados.
  • Análise do app sem exclusões, 1.151 testes e conexão Bluetooth Classic ao vivo no tablet.
  • Sem mudança visível para o usuário.

Fonte: Rodada 653 (DT-MOB-05): flutter analyze sem exclude, flutter test, APK R8 no SM-X236B

Painel com verificação de tipos completa (zero erros) e correções de bugs escondidos

A verificação de tipos do painel web passou a rodar completa e bloqueante no CI. Ao zerar os 40 erros restantes, quatro problemas reais foram corrigidos: a lista de veículos de guincho não carregava, a checagem de CPF duplicado ao criar cliente não funcionava, o horário das anomalias na sessão do scanner aparecia como data inválida e a aba Viagens do Diagnóstico mostrava um cabeçalho duplicado.

WebOperacao
Ver detalhes
  • Guincho: a lista de veículos de guincho (placa e modelo) volta a carregar na tela de despacho; a consulta pedia uma coluna inexistente e falhava silenciosamente.
  • Clientes: ao cadastrar um cliente com CPF, a checagem de CPF já existente volta a funcionar (o filtro de busca recebia o id da empresa no lugar do tipo de busca).
  • Sessão do scanner: o horário de cada anomalia usa a primeira detecção em vez de exibir 'Invalid Date'.
  • Diagnóstico > Viagens: o cabeçalho 'Histórico de Viagens' não aparece mais duplicado dentro da aba.
  • Interno: typecheck real (tsgo) em zero erros e bloqueante no CI; npm run typecheck passa a usar o tsgo.

Fonte: Rodada 654 (DT-WEB-11 final): typecheck tsgo 40 -> 0 erros, CI bloqueante

Painel termina a divisão dos arquivos gigantes: nenhum acima de 800 linhas

Histórico, detalhe da sessão do scanner, serviços de guincho, cotação, upload e diagnóstico, busca de clientes, telemetria ao vivo, pagamentos, lembretes, clientes, colaboradores, evidências e catálogo de peças foram divididos em módulos menores sem mudar comportamento.

WebOperacao
Ver detalhes
  • 15 arquivos divididos (1.040 -> 581 linhas no Histórico, 1.009 -> 704 no serviço de guincho...), tipos e funções públicas reexportados dos caminhos originais.
  • ESLint zero avisos e 591 testes verdes; 40 erros de tipo restantes concentrados nos serviços de guincho e diagnóstico, em correção.
  • Sem mudança visível para clientes e oficinas.

Fonte: Rodada 653 (DT-WEB-01 parte 2): branch worktree-agent (15 commits) mesclada; 0 arquivos nao gerados > 800 linhas

1.2.38+159

APP 1.2.38: código reorganizado, logs sem dados pessoais e fila de anomalias mais resiliente

Versão de manutenção: 18 arquivos gigantes divididos em módulos, 16 regras estritas de código, todos os registros de log passando pelo redator de dados pessoais, avatares do Jarvis sem desfoque em GPU limitada e fila de anomalias que descarta eventos rejeitados por escopo em vez de travar.

AndroidOperacao
Ver detalhes
  • Nenhuma mudança de uso: telas, Jarvis Vivo, temperatura em tela cheia e card Rail seguem iguais à 1.2.37.
  • Validado no tablet SM-X236B com V-LINK e simulador (ECU conectada, sem erros de Flutter no log) antes de publicar em Internal e Alpha.
  • Production continua na 1.2.36+156 até pedido do Owner.

Fonte: Rodada 653 (DT-MOB-01/02/03/08/10, DT-DB-11): flutter analyze limpo, 1.151 testes, fastlane deploy_both

Painel corrige 997 erros de tipo e três falhas reais de execução expostas pela verificação

Com a verificação de tipos rodando de verdade, o cliente de consultas do painel passou a ser tipado pelo esquema do banco (eliminando 342 instanciações profundas) e 997 erros foram corrigidos com tipos reais; no caminho, três telas que chamavam funções inexistentes do cliente (canal realtime, storage, sessão) foram consertadas.

WebOperacao
Ver detalhes
  • queryService com overloads por tabela, view e função do banco; rpc tipado por nome com argumentos nulos e JSON.
  • Telemetria de diagnósticos, diagnósticos do veículo, entradas de diagnóstico e insights do veículo: chamadas a canal/storage/auth inexistentes no queryService trocadas pelos serviços corretos (antes falhavam em runtime).
  • Restam 30 erros nos quatro arquivos grandes em divisão (towService, diagnosticService, ScannerSessionDetail, History); CI publica a contagem e passa a bloquear ao chegar a zero.
  • Sem mudança visível para clientes e oficinas além dos consertos acima.

Fonte: Rodada 653 (DT-WEB-11): branch worktree-agent (2 commits) mesclada; eslint 0, vitest 591/591, tsgo 1.027 -> 30

App termina a divisão dos arquivos gigantes: nenhum acima de 1.500 linhas

Serviço Bluetooth Classic, simulador OBD, repositório da O.S., controladores de diagnóstico, painel e sessão do scanner, preferências, narrador do Jarvis e aba do centro OBD foram divididos em partes menores sem mudar comportamento.

AndroidOperacao
Ver detalhes
  • Nove serviços e controladores divididos em partes (mixins e arquivos part) mantendo a API pública e os testes; analise limpa e 1.151 testes verdes.
  • Sem mudança visível para o usuário.

Fonte: Rodada 653 (DT-MOB-02 parte 2): branch worktree-agent (9 commits) mesclada; 0 arquivos > 1.500 linhas

Painel divide os seis maiores arquivos de código em módulos menores

Painel de cobranças Efi, aba de diagnósticos da O.S., Configurações, hook da O.S., Cotações e o serviço de detalhe da O.S. foram divididos em módulos de até 750 linhas, sem mudar comportamento; sobram 15 arquivos acima de 800 linhas para as próximas rodadas.

WebOperacao
Ver detalhes
  • EfiChargePanel 2.545 -> 568 linhas (8 módulos; as duas cópias do acordeão de cobranças viraram um componente).
  • DiagnosticsTab, Settings, useServiceOrder, Quotations e serviceOrderDetailService divididos em sub-hooks, helpers e componentes; caminhos de importação preservados.
  • tsc, ESLint zero avisos e 591 testes verdes.

Fonte: Rodada 653 (DT-WEB-01, parte 1): branch worktree-agent (7 commits) mesclada; arquivos > 800 linhas 23 -> 17

Banco tira a extensão de vetores do schema público e o painel ganha CSP completa em modo de relatório

A extensão pgvector passa para o schema de extensões (advisor do Supabase); o painel web passa a enviar uma Content-Security-Policy completa em modo somente relatório, para validar no console antes de bloquear.

SupabaseWebAndroidOperacao
Ver detalhes
  • ALTER EXTENSION vector SET SCHEMA extensions, com dry-run antes; busca por similaridade continua funcionando (operador testado) e schema do PostgREST recarregado.
  • CSP-Report-Only cobrindo Supabase, Google Maps, Sentry, YouTube, Meta, tiles de mapa e Leaflet; a CSP aplicada continua a mínima (frame-ancestors, object-src, base-uri).
  • App: os 524 debugPrint restantes passam pelo AppLogger (redação de dados pessoais e nível de log), sem mudança de comportamento.
  • Sem mudança visível para clientes e oficinas.

Fonte: Rodada 653 (DT-DB-03, DT-WEB-06): migration 20260904067000 + pgTAP 039; nginx -t ok

App desliga o desfoque dos avatares do Jarvis em GPU fraca e remove quatro dependências sem uso

Os avatares do Jarvis (clássico e 3D) deixam de aplicar desfoque nos traços quando o aparelho está no perfil de GPU segura ou multimídia; quatro bibliotecas sem uso saem do app.

AndroidOperacao
Ver detalhes
  • Avatar clássico recebe o perfil de renderização e desenha anéis e olhos sem blur em GPU fraca; dois pontos restantes do avatar 3D passaram a respeitar o mesmo perfil.
  • google_fonts, open_file, json_annotation e internet_connection_checker_plus removidos do pubspec (sem import no código); análise limpa e testes de avatar, guard de GPU e Jarvis Vivo verdes.
  • Sem mudança visível em celulares e tablets comuns.

Fonte: Rodada 653 (DT-MOB-08, DT-MOB-10): flutter analyze limpo, 54 testes-alvo verdes

Painel abre qualquer tela por link direto, remove dependências sem uso; app deixa de reenviar anomalias rejeitadas

O servidor do painel passa a servir todas as telas do app em navegação direta (antes 39 rotas, como clientes, agendamentos, financeiro e configurações, devolviam 404 ao atualizar a página); duas bibliotecas sem uso saem do painel; no app, eventos de anomalia rejeitados por escopo são descartados da fila local.

WebAndroidOperacao
Ver detalhes
  • Lista de rotas do worker do Sites sincronizada com o App (65 caminhos) e teste de paridade que reprova quando uma rota nova ficar de fora; caminhos fora do app (updates, assets) seguem com 404 por contrato.
  • playwright e @testing-library/jest-dom removidos do painel (sem referência no código); tsc e testes verdes.
  • Fila offline de anomalias descarta itens com erro 42501 do guard de tenant e mantém os demais para nova tentativa; teste unitário novo.
  • Sem mudança visível para clientes e oficinas.

Fonte: Rodada 653 (DT-WEB-09, DT-DB-11): npm uninstall + vitest; flutter analyze limpo e teste edge_event_emitter_scope_test

App passa a ser verificado com 16 regras estritas de código e sem print solto

O código do app Android agora é analisado com regras adicionais (futuros não aguardados, uso de contexto após await, assinaturas cancelláveis, constantes, tipos declarados) e os últimos prints viraram registros estruturados; sem mudança de comportamento para o usuário.

AndroidOperacao
Ver detalhes
  • analysis_options com 16 regras extras; 614 correções automáticas e 225 manuais em 241 arquivos, análise sem avisos e 1.149 testes verdes.
  • Quatro prints (upload de evidências e parser ELM) viraram AppLogger com redação de dados pessoais.
  • Um desvio de tipo no registro de anomalias de viagem (entidade errada no is-check) foi corrigido mantendo o mapeamento de runtime.
  • URLs HTTP do YouAutoTester mantidas (firmware na rede local sem TLS) com justificativa no código.

Fonte: Rodada 653 (DT-MOB-01/03/09): branch worktree-agent (3 commits) mesclada com analyze limpo e flutter test 1149/1149

Banco consolida regras de acesso sobrepostas em 54 tabelas

Regras de acesso (RLS) que se sobrepunham para o mesmo papel e ação foram unidas em uma só por tabela, ação e papel, sem mudar quem enxerga ou altera cada linha; o advisor de performance do Supabase deixa de apontar policies múltiplas.

SupabaseOperacao
Ver detalhes
  • 197 policies removidas e 211 consolidadas (OR das mesmas condições), com comentário indicando as regras de origem.
  • Equivalência verificada em bancada (126 assinaturas de acesso idênticas) e dry-run revertido em produção antes de aplicar; app do tablet seguiu gravando telemetria sem erro de permissão.
  • Sem mudança visível para clientes e oficinas.

Fonte: Rodada 653 (DT-DB-01): migration 20260904066000, pgTAP 038, docs/06_INTEGRATIONS/POLICY_CONSOLIDATION_2026-09-04.md

Painel envia a empresa ativa para métricas de desempenho e analytics de diagnóstico

As telas de desempenho e de analytics passam a informar a empresa ativa ao banco, acompanhando o guard de tenant das funções; usuários de várias empresas deixam de receber erro de escopo.

WebSupabaseOperacao
Ver detalhes
  • PerformanceDashboard e DiagnosticAnalyticsService resolvem a empresa ativa (companyService) antes de chamar o banco; admin SaaS sem empresa mantém o escopo global.
  • Tipos do banco regenerados com os quatro helpers de escopo.

Fonte: Rodada 653 (DT-DB-11): tsc, eslint 0 e vitest 188/188 nos servicos e paginas

Painel web sem avisos de lint e sem tipos genéricos soltos

O código do painel passou a ser verificado com tolerância zero de avisos no CI; 216 usos de tipo genérico (any) viraram tipos reais e 106 exceções de lint foram removidas ou justificadas, sem mudança de comportamento.

WebOperacao
Ver detalhes
  • ESLint com --max-warnings 0 no CI, no CLAUDE.md e no runbook do Sites.
  • Serviços, componentes e páginas tipados com as tabelas do banco; payloads JSON tratados com narrowing em vez de any.
  • Apenas 22 exceções de lint permanecem, todas com regra explícita e motivo em português.
  • Dependências de teste atualizadas (jsdom 30, jest-dom 7) via Dependabot com CI verde.
  • Sem mudança visível para clientes e oficinas.

Fonte: Rodada 653 (DT-WEB-02/03/04): branch worktree-agent (3 commits) mesclada com tsc, eslint 0 e vitest verdes

Banco passa a exigir a empresa do usuário em dez funções de análise, insights e cotação

Dez funções chamadas pelo painel e pelo app (importar preços de cotação, insights de DTC recorrente, recomendações priorizadas, métricas de desempenho, analytics de diagnóstico e do scanner, contexto de casos similares, eventos de anomalia e vídeos por O.S.) passam a validar que o usuário pertence à empresa da O.S., do veículo ou informada; dados agregados entre empresas ficam restritos a quem optou por compartilhar.

SupabaseWebAndroidOperacao
Ver detalhes
  • Quatro helpers internos de escopo (empresa, O.S., veículo, escopo federado) usados só dentro das funções; não são chamáveis pelo app.
  • Usuário de uma única empresa continua funcionando sem informar a empresa; usuário de várias empresas precisa da empresa ativa nas telas de desempenho e analytics (ajuste de telas em andamento).
  • Métricas de desempenho deixam de expor nomes de técnicos de outras empresas; a função antes falhava por referenciar coluna inexistente e foi corrigida.
  • Eventos de anomalia do app só são gravados para veículos que o usuário alcança; itens rejeitados serão descartados da fila local (ajuste no app em andamento).
  • Operação (service_role) e administração SaaS mantêm o comportamento global.

Fonte: Rodada 653 (DT-DB-02): migration 20260904065000 validada em Postgres descartável (pgTAP 037, 39/39) e aplicada com db push

Banco fecha 25 funções internas que qualquer usuário logado podia executar

Rotinas internas de agregação, manutenção, transferência de clientes entre empresas e helpers sem uso no app deixam de ser executáveis por usuários logados; só a operação (service_role) e os crons continuam chamando.

SupabaseOperacao
Ver detalhes
  • Inventário das 64 funções SECURITY DEFINER sem guard executáveis por usuários logados: 9 públicas por contrato, 5 helpers de RLS, 16 RPCs com escopo, 10 RPCs sem escopo (guards em preparação) e 24 internas.
  • As 24 internas mais o wrapper do pipeline de drift do copiloto perdem EXECUTE para anon e authenticated; crons rodam como postgres e a Edge usa service_role, então nada muda para o app.
  • Sem mudança visível para clientes e oficinas.

Fonte: Rodada 653 (DT-DB-02): docs/06_INTEGRATIONS/SECURITY_DEFINER_INVENTORY.md, migration 20260904064000 com dry-run, pgTAP 036

Manutenção: arquivos gerados do app em dia e dependências do site atualizadas

Os arquivos gerados do app Android voltaram a bater com o código e o CI passa a reprovar quando ficarem para trás; o site institucional recebeu o pacote de atualizações menores de dependências e a ação de varredura de vulnerabilidades foi atualizada.

AndroidWebOperacao
Ver detalhes
  • App: 16 arquivos gerados pelo build_runner regenerados; novo passo no CI bloqueia arquivos gerados desatualizados.
  • Site: 12 atualizações menores de dependências (grupo semanal do Dependabot) e osv-scanner 2.5.1.
  • Dependabot ativado com grupos por app e CODEOWNERS para migrations, Edge Functions e Android.
  • Sem mudança visível para clientes e oficinas.

Fonte: Rodada 653 (DT-MOB-04, DT-WEB-08): CI mobile com git diff apos build_runner; PRs #70 e #67 mergeados com CI verde

Banco fecha brecha na inserção de vídeos de conhecimento

A regra que permitia cadastrar vídeos de conhecimento comparava a empresa do vídeo com ela mesma, deixando qualquer usuário logado inserir vídeos em qualquer empresa; passa a exigir que a empresa seja uma das empresas do usuário.

SupabaseOperacao
Ver detalhes
  • Inserção em youtube_knowledge_videos restrita às empresas do usuário (mesmo critério das notificações).
  • Tabela ainda sem registros em produção; nenhuma mudança visível.

Fonte: Rodada 653 (DT-DB-05): achado durante a reescrita das policies; migration 20260904063000 com dry-run, pgTAP 035

Painel fecha alerta novo do sanitizador de HTML usado nos PDFs

A biblioteca DOMPurify, usada pelo gerador de PDF do painel, sobe para a versão que corrige um alerta de XSS publicado hoje.

WebSupabaseOperacao
Ver detalhes
  • Replay do banco alinhado à produção nas permissões das tabelas de conhecimento capturadas; nenhuma mudança em produção.
  • DOMPurify 3.4.12 para 3.4.14 (GHSA-55q2-fjhq-7xh7); auditoria de dependências de produção volta a zero.
  • Sem mudança visível para o usuário.

Fonte: Rodada 653 madrugada: npm audit --omit=dev, tsc e vitest 516/516

Banco acelera as regras de acesso por linha em 31 tabelas

Cinquenta e seis regras de acesso (RLS) que consultavam a identidade do usuário a cada linha passam a consultá-la uma vez por comando, como recomenda o advisor de performance do Supabase; nenhuma permissão mudou.

SupabaseOperacao
Ver detalhes
  • Regras de acesso de sessões de diagnóstico, viagens, manutenção, notificações, comandos de veículo, leituras e telemetria ficam mais rápidas em consultas grandes.
  • A reescrita foi feita a partir do catálogo do banco, preservando tabela, nome, comando, papéis e expressões; foi simulada e revertida antes de aplicar.
  • Sem mudança de permissões, dados ou telas.

Fonte: Rodada 653 madrugada (YC-124 parte segura): migration 20260904062000 com dry-run no remoto (56 reescritas, 0 restantes), pgTAP 034