Buscar/Crie uma ferramenta que revisa e corrige código com IA sem perder o código do usuário

Crie uma ferramenta que revisa e corrige código com IA sem perder o código do usuário

Use ao trabalhar em uma ferramenta que revisa e corrige código com IA em segundo plano. Lê antes a build e os documentos de responsáveis, impede que branches não confiáveis rodem comandos, protege jobs ativos e barra pushes ou releases inseguros.

Para usar estas regras de IA
## Leia a build e os documentos de responsáveis antes de mudar o código Antes de alterar o código, leia o ponto de entrada, o mapa de pacotes, a definição de compilação e os documentos de responsabilidade do repositório. Trate cópias geradas e resumos de conveniência como referências, não como fontes da verdade concorrentes. ### Orientação no repositório - Localize os pontos de entrada executáveis, os pacotes de implementação, a infraestrutura compartilhada e o sistema de compilação. - Use a definição de compilação como lista atual de comandos, em vez de copiar comandos para orientações que podem ficar desatualizadas. - Identifique qual documento ou arquivo-fonte é responsável por cada comportamento público, chave de configuração, variável de ambiente e invariante operacional. - Mantenha explícitos os adaptadores específicos de cada host. Fixe as premissas sobre versões de ferramentas externas de linha de comando e use alternativas de API estáveis quando o estado da árvore de trabalho tornar os comandos de alto nível pouco confiáveis. ### Portões de verificação - Formate e execute o linter antes da entrega, incluindo verificações de divergência dos artefatos gerados. - Execute testes focados durante a iteração e, em seguida, as suítes normativas de testes unitários, de integração, de condições de corrida e de ponta a ponta exigidas pelo limite alterado. - Prefira testes de ponta a ponta para comportamentos de processos, E/S, configuração, Git, daemon e fixtures gravadas; use testes unitários em auxiliares puros para obter rapidez e localizar falhas. - Compile o executável real após alterações não triviais. - Use desenvolvimento orientado a testes para correções de erros e funcionalidades e mantenha o trabalho não resolvido no rastreador de issues, em vez de ocultá-lo em alterações não relacionadas. ## Encerre todos os processos filhos ao cancelar e passe o diretório do Git de forma explícita Uma automação de longa duração deve controlar seu cancelamento, seus descendentes, seu estado compartilhado e seus efeitos no sistema de arquivos em todos os sistemas operacionais compatíveis. ### Disciplina de processos - Propague contextos de cancelamento por trabalhos de longa duração, subprocessos e operações de rede. - Derive tempos-limite delimitados para limpeza, sondagens e chamadas HTTP. - Coloque subprocessos canceláveis dentro de um limite de árvore de processos, para que o cancelamento encerre os descendentes, não apenas o filho direto. - Recolha os grupos de processos na saída normal, no erro e também no cancelamento; pipes herdados e processos netos vazados não podem sobreviver a uma execução. - Aplique a proteção de processos filhos específica da plataforma por meio de um único wrapper idempotente, para que o trabalho em segundo plano nunca abra consoles indesejados. - Proteja o estado mutável compartilhado com primitivas de sincronização padrão e torne explícita a responsabilidade por goroutines, canais, árvores de trabalho e diretórios temporários. ### Disciplina de sistema de arquivos e Git - Use auxiliares de caminho da plataforma, raízes de estado pertencentes ao aplicativo e modos de arquivo documentados. - Resolva links simbólicos quando aliases da plataforma puderem fazer com que caminhos equivalentes sejam comparados de maneira diferente. - Encaminhe operações Git de repositórios bare por um auxiliar que informe explicitamente o diretório Git; nunca dependa da descoberta pelo diretório atual sob configurações reforçadas do Git. - Remova ou substitua um estado somente quando os registros de responsabilidade e ciclo de vida comprovarem que isso é seguro. ## Defina quais comandos rodam só pela configuração do branch confiável Uma configuração que seleciona comandos ou agentes executáveis é código. Carregue-a somente de uma revisão confiável e trate configurações e instruções controladas por colaboradores como dados não confiáveis. ### Entradas confiáveis - Resolva o branch padrão confiável com uma nova busca remota e fixe o commit exato antes de ler configurações que executam código. - Interrompa se não for possível buscar, ler ou analisar o commit confiável ou sua configuração atual. Uma árvore confiável legível sem configuração pode ser válida se o contrato permitir. - Leia seletores de comandos, seletores de agentes, política de documentação, opções de exclusão de instruções do projeto e permissão de comandos do repositório somente na cópia confiável. - Mantenha desabilitada por padrão a permissão de comandos do repositório. Um branch enviado nunca deve poder habilitar seus próprios privilégios de execução nem enfraquecer a política confiável. - Mantenha separadas as configurações de funcionalidades que não executam código, para que o comportamento específico de um branch não atravesse o limite de execução. ### Tratamento com falha segura - Higienize textos de controle adversariais e oculte segredos antes de inserir conteúdo do usuário ou do repositório nos prompts dos agentes. - Antes de iniciar, confirme que qualquer opção de supressão de instruções funciona no adaptador selecionado. - Nunca simule confiança após uma falha de busca, análise ou autorização. - Adicione testes de regressão que comprovem que o conteúdo enviado não pode autorizar a si próprio a executar comandos, substituir a política confiável nem contornar o comportamento de falha segura. ## Rode um único serviço em segundo plano e recuse paradas com jobs ativos Serviços de todo o sistema precisam de defesas independentes para responsabilidade singleton, segurança de sockets, recuperação e comandos destrutivos de ciclo de vida. ### Singleton e recuperação - Obtenha um bloqueio exclusivo do sistema operacional antes do trabalho de recuperação ou da vinculação de sockets e mantenha-o durante toda a vida do processo. - Trate um bloqueio de kernel mantido como prova de um proprietário ativo; não invente heurísticas de obsolescência para ele. - Sonde um socket existente antes de removê-lo e limite separadamente os tempos de conexão e de verificação de integridade. - Inicie a execução do serviço somente por um modo explícito. Variáveis de ambiente herdadas não podem reinterpretar sondagens comuns como workers. - Faça com que a limpeza de inicialização considere o estado: nunca remova uma árvore de trabalho nem um recurso cujo registro de tarefa esteja pendente ou em execução. ### Controles de ciclo de vida - Recuse parar, reiniciar ou atualizar enquanto houver tarefas ativas, a menos que o operador forneça a substituição destrutiva explícita. - Não permita que opções de confirmação não interativas contornem a proteção de tarefas ativas. - Liste as tarefas bloqueadoras e audite cada chamada de ciclo de vida com a atribuição do processo e do processo pai. - Trate os limites de monitoramento da integração contínua como tempos-limite de inatividade: rearme-os somente diante de progresso verificado na origem anterior, nunca reduza o prazo existente e falhe com segurança quando não for possível verificar o progresso. - Torne idempotentes as operações de cancelamento de órfãos e mantenha os carimbos de data e hora de espera por agente apenas como observação: defina-os somente enquanto um portão estiver efetivamente estacionado e nunca os use para alterar a resolução do portão. ## Separe as sessões de revisão e correção e compare as mudanças com o objetivo A revisão deve comparar a alteração completa com a intenção verificável na fonte, sem permitir que texto não confiável, momento da entrega ou justificativa do agente de correção distorçam a decisão. ### Intenção e constatações - Preserve a proveniência da intenção. Trate uma intenção explícita como critérios de aceitação normativos e uma intenção inferida somente como indício de baixa confiança. - Aplique a mesma higienização, ocultação de segredos e proteção contra execução a ambas as formas. - Converta uma alteração do agente de correção que contradiga critérios explícitos em uma constatação de consulta ao usuário que estacione a execução. - Durante a revisão anterior à entrega, exclua somente resultados cuja responsabilidade pertença a etapas posteriores do pipeline; continue impondo requisitos externos ou preexistentes do ciclo de vida. - Falhe com segurança quando uma ação para uma constatação estiver ausente ou for desconhecida: classifique-a como consulta ao usuário, nunca como corrigível automaticamente. ### Disciplina de sessões e correções - Mantenha uma sessão durável de revisor por execução e outra sessão durável separada para o agente de correção; as funções nunca devem compartilhar estado. - Reutilize as sessões somente no ciclo de revisão, persista metadados mínimos de identidade e nunca persista prompts nem transcrições. - Se a retomada não for compatível ou falhar, descarte essa identidade e repita do zero a rodada da mesma função. Não tente novamente após um cancelamento. - Toda nova revisão continua sendo uma revisão adversarial completa de todo o diff do branch. - Em uma rodada de correção, aplique primeiro todas as correções e execute uma única verificação focada, limitada à área alterada. Deixe os portões normativos da suíte completa de testes e do linter para suas etapas dedicadas. ## Regenere a documentação pela fonte e não envie prompts nem código nas métricas Mantenha um único responsável por cada fato, regenere as orientações derivadas a partir da fonte e separe as evidências de diagnóstico locais das análises remotas limitadas. ### Documentação e conteúdo gerado - Mantenha concisos os documentos de visão geral; coloque os fatos de referência detalhados no responsável designado e crie links para eles nos guias. - Atualize os mapas de responsabilidade quando uma atribuição mudar. - Edite a fonte das orientações geradas para agentes, regenere o artefato com a compilação aprovada e deixe o linter falhar em caso de divergência. - Altere em conjunto as orientações de origem e a saída de comando no ponto de uso quando ambas expressarem o mesmo contrato operacional. - Se uma única passagem de agente combinar tarefas de documentação e de linter, consuma cada resultado exatamente uma vez e recorra a uma passagem independente sempre que uma saída for ignorada, inválida ou não confiável. - Limite as alterações de documentação ao material que ficou desatualizado pela alteração atual; não reintroduza varreduras exaustivas do corpus. ### Observabilidade com proteção da privacidade - Superfícies somente leitura não devem emitir nenhuma visualização de página; condicione o evento remoto de comando delas a uma mudança de estado e a um intervalo limitado. - Mantenha fidelidade total nos eventos de mutação, mas armazene evidências detalhadas de desempenho somente no ambiente local. - Nunca armazene prompts, saídas, diffs, segredos nem argumentos brutos de comandos nas métricas de invocação e nunca envie identificadores de execução, caminhos, identidades de sessão nem registros individuais de invocação para análises remotas. - Envie somente contagens agregadas e limitadas nos eventos terminais. - Atribua as definições de métricas e os limites temporais a uma única implementação normativa. Represente valores indisponíveis como null, não como um zero inventado, e calcule o uso por rodada a partir das diferenças entre valores cumulativos da sessão quando necessário. ## Confira o remoto antes de um force push e assine cada build de release A invariante principal é preservar o código do usuário. Recuse uma sincronização ou entrega insegura, em vez de tentar uma recuperação engenhosa que possa sobrescrever trabalho não observado. ### Segurança do repositório e dos branches - Mantenha o roteamento da base do pull request separado de um destino opcional de push para fork. Quando um host não puder oferecer roteamento de fork de ponta a ponta, ignore a criação em vez de abrir incorretamente um pull request para o próprio repositório. - Limite a sincronização comum a um fast-forward estrito e limpo ou a um deslocamento de divergência comprovadamente equivalente, ancorado no head exato do pipeline. - Um status passivo não deve buscar nem alterar. Caminhos bloqueados não devem redefinir, guardar em stash, mesclar, fazer rebase, forçar, trocar, excluir nem atualizar um remoto externo. - Persista o commit exato enviado, a identidade de destino sem credenciais e a geração e, imediatamente antes de aplicar uma sincronização, verifique novamente todas as premissas mutáveis. - Preserve o trabalho terminal não publicado sob uma referência de recuperação. A recuperação só pode mover uma árvore de trabalho limpa por fast-forward estrito; a preservação de trabalho local deve atualizar o portão por comparação e troca sem acionar um novo pipeline. - Derive as bases de rebase de referências remotas normativas recém-buscadas. Estacione a execução quando commits não enviados do branch padrão ampliarem silenciosamente uma alteração. - Antes de um push forçado, releia o head remoto e prossiga somente diante de um branch novo, um head igual, um head observado anteriormente e inalterado ou commits adicionados remotamente cuja equivalência já tenha sido comprovada pela identidade do patch. Qualquer falha de consulta ou comprovação deve falhar com segurança. - Mantenha como âncora de lease o último head que a execução realmente observou, nunca uma ponta buscada imediatamente antes de forçar. ### Segurança de versões e dependências - Em uma plataforma com contrato permanente de assinatura, assine cada artefato oficial com a identidade fixa do aplicativo, runtime reforçado e carimbo de tempo seguro antes de arquivá-lo ou calcular sua soma de verificação. - Restrinja as credenciais de assinatura à tarefa de versão, importe-as para armazenamento efêmero e remova-as tanto em caso de êxito quanto de falha. - Faça a verificação da versão falhar diante de assinatura ausente ou ambígua, identidade ou arquitetura incorreta, requisito de identidade mutável, reforço ausente ou carimbo de tempo ausente. - Trate notarização, formatos de empacotamento e binários universais como escopos separados, a menos que o contrato da versão os inclua. - Antes de adicionar uma dependência, consulte a documentação normativa atual e converse sobre a alteração com o usuário. - Não declare prontidão até que formatação, linting, testes focados, testes de integração, suíte completa, verificações de compilação, verificações de documentação e verificação específica da versão tenham resultados reais.