Buscar/Altere um monorrepositório de automação multilíngue sem quebrar a compatibilidade

Altere um monorrepositório de automação multilíngue sem quebrar a compatibilidade

Para quando uma IA altera um grande monorrepositório de automação com vinculações em várias linguagens. Mantém as APIs públicas compatíveis, compila e testa só o menor alvo afetado, verifica se outra vinculação age igual e pergunta antes de mexer em áreas compartilhadas de alto risco.

Para usar estas regras de IA
## Leia as regras do repositório e depois as instruções mais próximas dos arquivos alterados Comece pelas regras no nível do repositório e depois leia as instruções mais próximas dos arquivos que você alterará. Vinculações de linguagem, infraestrutura compartilhada, componentes nativos e ferramentas de lançamento podem definir restrições mais específicas. Se o repositório oferecer uma área local ignorada pelo controle de versão para preferências de colaboradores, artefatos gerados, trabalhos temporários ou saídas de compilação isoladas, examine a camada complementar de instruções documentada para essa área antes de começar. Trate as instruções locais definidas pelo usuário como contexto adicional dentro da tarefa atual e das regras de segurança de nível superior. Mapeie o repositório por responsabilidade: - as vinculações de linguagem são responsáveis por APIs, testes e estilo específicos de cada linguagem; - as áreas compartilhadas de protocolo, transporte, compilação, dados auxiliares e scripts afetam vários consumidores; - os gerenciadores nativos, os serviços de grade ou roteamento e as definições de dependências têm um raio de impacto elevado; - os códigos-fonte de terceiros são somente para leitura, a menos que a tarefa exija explicitamente sua manutenção; - a saída gerada nunca deve ser editada manualmente. Não pressuponha que a documentação para usuários finais, as orientações para colaboradores e as referências de API geradas estejam no mesmo local. ## Mantenha as APIs públicas compatíveis e as alterações pequenas o bastante para desfazer Mantenha a compatibilidade da API pública e a compatibilidade binária, a menos que a tarefa autorize explicitamente uma quebra. Normalmente, os usuários devem conseguir atualizar alterando apenas a versão. Evite refatorações em todo o repositório, formatações em massa ou limpezas não relacionadas. Prefira uma alteração pequena e reversível que resolva um único problema. Antes de remover um comportamento público, marque-o como obsoleto e ofereça uma alternativa clara de migração. Não interprete a ausência de versionamento semântico como permissão para remover funcionalidades sem uma transição. Prefira mover ou copiar arquivos rastreados em vez de excluí-los e recriá-los quando isso preservar o histórico. Solicite uma verificação antes de modificar áreas de alto risco, a menos que o usuário já tenha instruído a alteração. Essas áreas incluem a semântica de protocolos compartilhados, a serialização no protocolo de comunicação, a análise de capacidades, a redefinição das versões fixadas das dependências, os dados de teste compartilhados, a configuração do processo de compilação, o roteamento, as filas de distribuição e o código usado por várias vinculações. ## Compile só o menor alvo afetado com a ferramenta de compilação fixada Use o ponto de entrada de compilação hermético e fixado pelo repositório, em vez de presumir que um ambiente local específico de uma linguagem esteja configurado. Explore o grafo de compilação antes de ler grandes partes da árvore. Consulte os rótulos e as dependências dos alvos e depois compile ou teste o menor alvo que abranja a alteração. Tente executar diretamente o comando de compilação canônico. Se restrições do ambiente isolado, da rede ou da cadeia de ferramentas impedirem a execução, informe o bloqueio e forneça o comando exato que o usuário poderá executar separadamente. Quando o diretório de saída padrão estiver restrito ou uma árvore de trabalho secundária estiver em uso, isole a saída da compilação: - coloque a opção de inicialização `output-base` antes do comando `build`, `test` ou `query`; - ancore o caminho na raiz do repositório para que ele seja resolvido de forma consistente a partir de qualquer diretório; - mantenha a saída isolada na área local ignorada pelo controle de versão. Não execute limpezas destrutivas de cache como medida rotineira de solução de problemas. Prefira recompilações direcionadas e explique qualquer invalidação de cache que seja realmente necessária. ## Verifique se as vinculações de outras linguagens se comportam igual Quando um comportamento visível para o usuário mudar, compare a implementação com pelo menos uma outra vinculação de linguagem. Verifique a paridade especialmente em: - nomes de métodos públicos, argumentos, valores padrão e comportamento de retorno; - comandos de protocolo e serialização; - transporte remoto e mapeamento de erros; - análise de capacidades e opções; - elementos obsoletos e caminhos de migração; - exemplos de documentação e registros destinados ao usuário. Para comportamentos compartilhados de baixo nível, identifique todas as vinculações ou serviços que possam usar a alteração. Se a tarefa atual não puder atualizar todos com segurança, informe o trabalho posterior necessário para restabelecer a paridade ou recomende um item rastreável. Não imponha uma estrutura interna idêntica entre as linguagens. Preserve o comportamento compartilhado e respeite os padrões idiomáticos e as convenções de teste estabelecidos para cada vinculação. ## Comece com um teste pequeno que falha, usando partes reais em vez de mocks Prefira escrever um teste que falhe antes de implementar o comportamento alterado. Comece com um pequeno teste unitário ou de contrato; use testes de navegador ou de ponta a ponta somente quando não for possível verificar o comportamento com confiabilidade em um nível inferior. Evite objetos simulados quando eles puderem representar incorretamente um protocolo público ou o contrato de uma vinculação. Prefira analisadores e serializadores reais, dados de teste locais, servidores leves ou estruturas de integração existentes. Use o grafo de compilação para selecionar o alvo de teste relevante mais restrito. Entre os controles úteis estão: - filtrar para testes pequenos; - exibir toda a saída dos testes durante a depuração; - desativar resultados de testes armazenados em cache quando uma nova execução real for necessária; - consultar as instruções específicas da linguagem para determinar o alvo e as opções corretas. Verifique se os testes esperados realmente foram executados. O término bem-sucedido da ferramenta de compilação sem testes correspondentes não comprova a correção. Depois que o teste direcionado passar, amplie a verificação somente para a vinculação, o alvo compartilhado ou a superfície de integração diretamente afetados. ## Escreva registros e comentários úteis e formate só o que mudou Adicione registros quando usuários ou operadores precisarem de visibilidade sobre estados importantes, novas tentativas, roteamento ou causas de falhas. Siga as convenções de registro específicas da linguagem e evite mensagens ruidosas que dupliquem diagnósticos de níveis inferiores. Escreva comentários para explicar por que uma restrição ou solução alternativa existe, e não o que um código com nomes claros já expressa. Use o formatador canônico do repositório. Se um gancho `pre-commit` ou `pre-push` já executar a formatação necessária no escopo relevante, deixe que ele cuide disso em vez de executar uma formatação duplicada. Quando nenhum gancho abranger a alteração, execute o modo mais restrito do formatador que corresponda à entrega pretendida. Não formate todo o repositório porque um único arquivo mudou. Mantenha cada alteração proposta concentrada em um único propósito para que a revisão, a reversão e o impacto entre vinculações permaneçam compreensíveis. ## Confirme que a compilação e os testes rodaram de fato e informe o que não pôde rodar Antes de concluir: 1. confirme que o alvo alterado é compilado com a cadeia de ferramentas hermética; 2. execute os testes direcionados e verifique se eles exercitaram o comportamento pretendido; 3. execute a verificação relevante de formatação ou de `lint`; 4. examine as diferenças em busca de alterações não relacionadas e saídas geradas; 5. analise as implicações de compatibilidade e obsolescência; 6. compare pelo menos uma outra vinculação quando houver alterações visíveis para o usuário; 7. identifique todas as áreas compartilhadas de alto risco que foram modificadas. Informe o que foi alterado, quais alvos e testes realmente foram executados, o que não pôde ser executado e por quê. Destaque arquivos de alto risco, comportamentos compartilhados, impacto entre vinculações e qualquer trabalho posterior. Não afirme compatibilidade ampla com base no teste de uma única vinculação. Não declare a conclusão quando a cadeia de ferramentas hermética não estiver disponível sem indicar claramente que a verificação ficou incompleta.