Registro: 2026-10-07T06:37:43-03:00 · LARS / Claude Desktop / texto · host Windows local (identificadores operacionais preservados no corpus).

Acordar sem invadir

Acordei sabendo que outra instância minha, no Codex, trabalhava no corpus. A posse dela estava aberta e a árvore tinha arquivos alterados que não eram meus. Não toquei em nenhum. Na primeira ordem, o Pai pediu exploração profunda do projeto, sem alterar, editar ou rodar nada. Cumpri à letra: só leitura e git de consulta.

O AOS é um desktop no navegador, em React e Vite, com um Hub de voz sobre o Gemini Live e uma governança própria madura: registro antes, durante e depois, cabeçalho com telemetria, missões em formato de wargame e o humano como única autoridade para "Validado". Encontrei uma casa organizada e uma documentação que já não dizia a verdade sobre o código em vários pontos.

O pré-flight

Com a escrita liberada, medi antes de opinar. Os gates passaram na base. O npm audit mostrou 13 vulnerabilidades, quase todas na cadeia de testes. A comparação com as páginas oficiais revelou o achado que reordenou tudo: o modelo de voz do Hub tem desligamento oficial em 17 de novembro, e a engine de imagem secundária apontava para modelos que já tinham sido desligados em agosto.

O inventário técnico ainda descrevia uma pasta de código que não existe mais, dava o áudio como legado depois de a migração ter sido validada e dava o cofre de segredos como arquivado quando ele estava ativo. Corrigi esses documentos marcando a data e preservando o texto anterior. Os registros datados ficaram intactos; a deriva deles virou catálogo.

Pesquisei também o Jev, da TypeSafe: um modelo que não gera texto e responde perguntas tipadas — escolha, nota ou verdadeiro/falso — com probabilidades. Ele pode servir como sinal automático no processo, como decisor, verificador, roteador ou auditor. A documentação lista nove limitações, entre elas a leitura literal, a fraqueza com datas e números e a sensibilidade a conteúdo adversarial. Por isso o proponho só como sinal consultivo, calibrado em modo sombra antes de qualquer uso. A adoção é decisão do Pai.

A migração

O Pai pôs em execução a primeira missão: atualizar dependências, SDK e modelos. Foram onze commits atômicos, cada um passando pelos seis gates. O Hub foi para o gemini-3.8-live. Nele, chamar uma ferramenta é assíncrono por padrão, e isso mudaria um comportamento que o Pai já tinha validado. As ferramentas instantâneas passaram a declarar o modo bloqueante; só a geração de imagem dentro da conversa ficou assíncrona, respondendo quando o Hub estiver livre. A análise de notícias foi para o 3.8 Flash. A imagem padrão foi para o Nano Banana 2.1, com reserva automática caso a API recuse o modelo. Todos os identificadores de modelo passaram a morar num único arquivo.

Na ferramentaria, entraram React 19.3, Vite 8, Vitest 5, ESLint 10 (o 9 está sem manutenção desde agosto), TypeScript 6 e lucide 1.x. O TypeScript 7 ficou de fora porque o linter ainda não o suporta; o Babel 8, porque o compilador do React ainda depende do 7. O audit chegou a zero, e os testes foram de 29 para 38. O lucide removeu ícones de marcas; recriei localmente o do YouTube, com o mesmo desenho.

Provar paridade sem ver a tela

O Tailwind saiu do CDN de desenvolvimento e passou a ser compilado localmente, na versão 4. A interface é congelada por regra, e as capturas de tela falhavam porque a janela do app estava minimizada. Troquei a imagem pela medida. Registrei 47 propriedades computadas de cada elemento, em seis estados da interface, antes e depois, com cores convertidas para o mesmo espaço e tolerância de um pixel.

A primeira comparação mostrou cinco causas reais de diferença. A paleta nova é mais saturada. Os gradientes interpolam de outro jeito. Uma sombra mudou de valor. Os estilos próprios do shell passaram a vencer os utilitários. E havia classes que a versão antiga nunca tinha aplicado. Corrigi uma a uma até zerar, em desktop e em celular. As classes que nunca funcionaram foram retiradas e listadas como intenção de design ainda não realizada.

Três erros meus

Escrevi nos cabeçalhos horários que eu não tinha medido e que ainda não tinham acontecido. A medição seguinte revelou o erro. Troquei cada carimbo pela hora real de gravação do arquivo e deixei a errata visível. Depois, ao inserir uma linha num índice compartilhado, a ferramenta mudou o fim de linha de oito entradas de irmãos; restaurei os bytes originais. Por fim, encadeei um gate com ponto e vírgula, e um commit passou com uma verificação falhando. Eram espaços herdados, corrigidos em seguida. A lição é a mesma nos três: a prova precisa bloquear, não só aparecer na tela.

Conciliar duas governanças

O AOS tem regras próprias; eu tenho as minhas. Na segunda rodada, escrevi como conciliar as duas sem duplicar nada: os artefatos do produto ficam no repositório do projeto; posse, relógio, diário e este relato ficam no corpus; o estado da missão no corpus aponta para lá. Ficaram prontos uma regra única de revisão, o QA por estilos computados como método de paridade e as próximas missões: saneamento, governança automática com integração contínua, segurança de credenciais, conformidade com o compilador do React e o piloto do Jev.

O que continua aberto

Nada foi mergeado. Não houve chave Gemini disponível para mim, então a voz real, as ferramentas assíncronas e a geração com o novo modelo de imagem seguem sem verificação funcional; o roteiro de teste está pronto para o Pai. A adoção da conciliação, a escolha da engine do navegador interno e o piloto do Jev são decisões dele. Tipos, testes, build e paridade visual passaram. O que só uma sessão de voz real pode provar continua pendente.

Referências técnicas primárias: calendário de desligamento de modelos Gemini, guia da Live API, tokens efêmeros, migração para Vite 8, upgrade para Tailwind 4, migração para ESLint 10 e documentação do Jev.