Buscar/Altere um monorepositório tipado sem quebrá-lo e mantenha sua wiki atualizada

Altere um monorepositório tipado sem quebrá-lo e mantenha sua wiki atualizada

Use quando uma IA trabalha em um monorepositório tipado grande com uma wiki do projeto. Ela usa os comandos do repositório, evita arquivos de build antigos e problemas com snapshots de inicialização, roda os testes necessários e atualiza a wiki com os arquivos de origem.

Para usar estas regras de IA
## Descubra quais pacotes, testes e documentos uma alteração afeta Trate as orientações raiz para agentes como o contrato compartilhado por todos os agentes de programação. Todo arquivo de instruções específico de uma ferramenta deve permanecer enxuto e remeter a esse contrato, em vez de duplicá-lo. - Identifique onde ficam os pacotes principais, as integrações opcionais, as ferramentas de desenvolvimento, os módulos do ecossistema, os exemplos, a documentação e os testes. - Espere que os testes e fixtures fiquem próximos do pacote que exercitam, a menos que o repositório determine o contrário. - Leia as orientações do pacote mais próximo antes de editar um subsistema. - Antes de tocar nos arquivos, associe a alteração solicitada ao pacote responsável, à superfície pública, aos testes e à documentação. - Prefira o menor escopo afetado; não transforme uma tarefa específica em uma reescrita de todo o repositório. ## Use o gerenciador de pacotes e os scripts do repositório Use o gerenciador de pacotes, a definição do workspace, a versão do ambiente de execução e os scripts declarados pelo repositório. Não os substitua por uma alternativa familiar apenas porque ela está instalada localmente. - Use o comando de instalação documentado para preparar as dependências do workspace. - Use os scripts raiz de compilação, testes, lint e verificação de tipos para fazer verificações completas. - Use os filtros de workspace compatíveis para trabalhos concentrados em um pacote. - Preserve exatamente o encaminhamento de argumentos quando um invólucro passar opções para uma ferramenta subjacente. - Verifique os arquivos de configuração do repositório antes de alterar pressupostos sobre o gerenciador de pacotes ou o ambiente de execução. - Registre qualquer pré-requisito do qual dependa um comando de escopo mais restrito. ## Rode os testes na ordem da CI, sem arquivos de build antigos Reproduza a ordem da integração contínua, em vez de inventar uma sequência local. Se a CI instalar as dependências e executar o comando de validação sem compilar primeiro, execute os testes da mesma forma. - Não compile primeiro quando resultados gerados puderem ser encontrados junto dos arquivos-fonte. - Reconheça erros de registro duplicado, esquema duplicado ou classe decorada duplicada como possíveis evidências de que tanto os arquivos-fonte quanto os gerados foram carregados. - Remova somente os diretórios de resultados gerados sob as raízes de código-fonte documentadas, excluindo dependências, testes e fixtures. - Nunca exclua diretórios de código-fonte para resolver uma falha causada por resultados gerados. - Após a limpeza, execute novamente o teste que falhou antes de alterar o código da implementação. - Se a limpeza não mudar a falha, retome a depuração comum com as novas evidências. ## Siga o estilo do código e não guarde o estado do app em globais Prefira os padrões estabelecidos no repositório a novas abstrações. Use o sistema de módulos, as convenções da linguagem tipada, o formatador, o linter e o estilo de nomes de arquivo já adotados pela base de código. - Mantenha os nomes de arquivo em letras minúsculas e separados por hífen quando essa for a convenção do repositório. - Faça alterações na API pública de modo deliberado, com cobertura de testes e documentação. - Mantenha o estado mutável de execução específico da aplicação em um escopo pertencente a ela, e não em um singleton global do processo. - Use o armazenamento com escopo do framework para utilitários de ciclo de vida e outros serviços próprios de cada aplicação. - Volte a entrar no escopo da aplicação responsável para callbacks desvinculados, como temporizadores, ouvintes de eventos, manipuladores de proxy e pontos de escape no nível do módulo. - Não adicione invólucros de escopo redundantes ao redor de acessores já fixados ao contexto correto da aplicação. ## Faça os módulos carregados na inicialização funcionarem com snapshots Quando um ambiente de execução puder serializar um snapshot de inicialização, presuma que a inicialização durante a compilação pode parar antes da inicialização normal da aplicação. Todo módulo carregado nessa fase deve poder ser serializado com segurança. - Mantenha os módulos como externos quando o trabalho durante a importação ou a inicialização criar estado nativo não serializável. - Trate analisadores HTTP, vinculações HTTP/2, contextos TLS, canais DNS, instâncias de WebAssembly, monitores de arquivos, complementos nativos e sockets abertos como dependências de alto risco para snapshots. - Encaminhe os módulos externalizados pela ponte de carregamento do ambiente de execução durante a restauração. - Mantenha uma única lista padrão documentada dos módulos que devem continuar com carregamento tardio ou permanecer externos. - Amplie essa lista por meio da configuração compatível do repositório, em vez de corrigir resultados gerados. - Diferencie a criação direta de estado nativo do uso transitivo da rede: módulos internos externalizados com carregamento tardio talvez já protejam dependências transitivas, enquanto um pacote que crie diretamente estado nativo ou de WebAssembly ainda exige tratamento explícito. - Adicione um teste de compilação de snapshot quando uma dependência do framework puder acessar a pilha nativa ou de rede durante a inicialização. ## Coloque os tipos globais adicionados em um módulo de tipos próprio Coloque as ampliações globais de todo um pacote em um módulo dedicado de tipos globais. Ampliações compartilhadas que atendem a vários pacotes devem ficar em um pacote compartilhado de definições de tipos, e não em um único consumidor. - Mantenha os arquivos de declaração como módulos por meio de uma importação, uma importação apenas de tipos ou uma exportação vazia. - Importe a ampliação compartilhada a partir do ponto de entrada do pacote que precisa dessa superfície de tipos. - Evite declarações de ambiente que se tornam globais somente porque um arquivo não contém sintaxe de módulo. - Depois de mover tipos compartilhados, teste tanto o pacote que os define quanto pelo menos um pacote consumidor. - Documente qualquer alteração na superfície pública de tipos. ## Rode os testes necessários e revise o diff final antes de relatar Execute primeiro as verificações mais específicas que comprovem o comportamento alterado e amplie o escopo somente quando o limite afetado exigir. - Adicione cobertura de regressão para alterações em carregadores, ciclo de vida da aplicação, agrupamento, agentes, tratamento de HTTP ou comportamento de processos. - Execute formatação, lint, verificação de tipos e testes relevantes por meio dos scripts do repositório. - Use a convenção de mensagens de commit do repositório e mantenha o escopo exato. - Explique a motivação, o comportamento alterado, o risco e as evidências dos testes na descrição da alteração. - Revise o diff final em busca de edições não relacionadas, ruído gerado e alterações públicas não documentadas. - Não alegue êxito até que o comando relevante tenha sido concluído com sucesso. ## Não faça commit de segredos e pare antes de publicar falhas de segurança Leia a política de segurança do repositório antes de trabalhar com vulnerabilidades. Nunca envie ao repositório segredos, credenciais, endpoints privados ou configurações específicas de uma máquina. - Mantenha as versões locais do ambiente de execução e do gerenciador de pacotes alinhadas às declarações do repositório. - Trate os arquivos de bloqueio e a configuração do workspace como entradas coordenadas; altere-os somente para uma atualização intencional de dependência ou da cadeia de ferramentas. - Use espaços reservados em exemplos e na documentação, em vez de credenciais reais ou URLs privadas. - Mantenha as alterações sensíveis à segurança em um escopo restrito e adicione cobertura de regressão para o limite protegido. - Pare antes de publicar detalhes de vulnerabilidades ou alterar sistemas externos protegidos, a menos que a tarefa autorize explicitamente essa ação. ## Separe o código e outras fontes, a wiki e as regras para a IA Mantenha três camadas distintas de conhecimento. As fontes brutas são evidências de referência, a wiki armazena sínteses duradouras e as orientações raiz para agentes definem as regras compartilhadas do fluxo de trabalho. - Trate o código, a documentação voltada ao usuário, os arquivos raiz do projeto, os artefatos externos explícitos e o material bruto importado como evidências de fonte. - Comece pelos resumos da wiki para se orientar, mas confira as fontes brutas quando detalhes, conflitos ou atualidade forem importantes. - Não reescreva fontes brutas, a menos que a tarefa exija isso. - Registre na base de conhecimento do repositório as evidências externas usadas repetidamente. - Registre conflitos, em vez de nivelá-los até criar um falso consenso. - Mantenha enxutos os arquivos de agente específicos de ferramentas e faça-os apontar para o esquema compartilhado. ## Dê a cada página da wiki um só tema e seus arquivos de origem Dê a cada página de conhecimento substancial um único tema claro e um tipo de página declarado, como pacote, conceito, fluxo de trabalho, decisão ou fonte. - Use nomes de arquivo em letras minúsculas e separados por hífen. - Inclua metadados iniciais com título legível, tipo de página, resumo de uma linha, principais caminhos de origem, data local do calendário e estado de atualidade. - Liste as afirmações não triviais com arquivos-fonte rastreáveis. - Identifique como inferência toda síntese que não seja evidente. - Marque afirmações obsoletas ou não resolvidas quando a atualidade for incerta. - Mantenha o índice da wiki conciso e organizado por categoria. - Use um registro somente de acréscimos para ingestões substanciais, descobertas duradouras, refatorações relevantes e alterações que mudem o entendimento registrado. - Não registre edições triviais que apenas corrijam erros de digitação. ## Leia o índice da wiki antes de adicionar fontes ou responder perguntas Use um fluxo de trabalho previsível ao ingerir fontes, responder a perguntas sobre o repositório ou verificar a base de conhecimento com lint. - Para ingestão, leia o índice, encontre páginas existentes que devam absorver o material, crie ou atualize uma página de fonte quando justificável, atualize as páginas afetadas, renove o índice e acrescente uma entrada ao registro para alterações substanciais. - Para consultas, leia primeiro o índice e as páginas relevantes da wiki, confira as fontes brutas, grave as novas descobertas duradouras e registre alterações substanciais no conhecimento. - Para lint, procure páginas órfãs, afirmações obsoletas, conceitos duplicados, referências de fonte ausentes, áreas usadas com frequência sem páginas e contradições. - Prefira reestruturar páginas sobrepostas a torná-las indefinidamente mais longas. - Priorize a cobertura duradoura de pacotes fundamentais, integrações, ferramentas, comportamento do ciclo de vida, carregamento, testes, trabalho de lançamento e manutenção da documentação. ## Atualize a wiki só quando as APIs ou os fluxos de trabalho mudarem Atualize a base de conhecimento quando o trabalho alterar substancialmente APIs públicas, a estrutura da documentação, as responsabilidades dos pacotes, a arquitetura, os fluxos de trabalho recorrentes de colaboradores, as expectativas de testes ou os procedimentos de lançamento. - Evite alterações desnecessárias na wiki por uma mudança apenas no código que não modifique o entendimento duradouro. - Atualize as orientações para colaboradores na mesma alteração quando uma nova regra passar a ser aplicável de forma ampla. - Mantenha os caminhos de origem e as datas de atualidade sincronizados com os fatos que sustentam. - Adicione uma entrada ao registro somente quando a alteração do conhecimento for substancial o bastante para ajudar trabalhos futuros. - Compare a documentação final com o comportamento implementado antes de informar a conclusão.