Trabalho com a modernização do GitHub Copilot

Este artigo aborda como comunicar com o agente de modernização do GitHub Copilot, ensinar-lhe as suas preferências, corrigir erros, rever o seu trabalho e gerir atualizações ao longo de várias sessões.

O GitHub Copilot é um colaborador moderno e interativo que faz perguntas, propõe estratégias, adapta-se ao seu feedback e aprende com as suas preferências ao longo do tempo. Para obter os melhores resultados, dê contexto ao agente. Quanto mais souber sobre os seus objetivos, restrições e preferências, melhor desempenho.

❌ Vague — the agent has to guess
"Upgrade my project"

✅ Specific — the agent knows exactly what you need
"Upgrade the WebAPI project to .NET 10. We need to keep backward
compatibility with our existing REST clients, and we can't change the
public API surface."

Sugestão

Não tens de dar todo o contexto logo de início. O agente faz perguntas de seguimento quando precisa de mais informações.

Iniciar uma conversa

  1. Abrir Copilot Chat no VS Code, Visual Studio ou Copilot CLI.
  2. Seleciona o agente de modernização GitHub Copilot para .NET no selector de agentes, ou escreve a menção correta ao agente para o teu ambiente: @modernize-dotnet no VS Code e Copilot CLI, ou @Modernize no Visual Studio.
  3. Descreve o que queres alcançar em linguagem natural.

O que dizer

A linguagem natural funciona. Experimente estes exemplos:

O que queres O que dizer
Atualize uma solução completa "Atualizar a minha solução para .NET 10"
Atualize uma tecnologia específica "Ajuda-me a atualizar de EF6 para EF Core"
Veja o que está disponível "Que cenários estão disponíveis?"
Atualize primeiro um projeto "Atualize primeiro o projeto API, depois a biblioteca partilhada"
Compreenda o estado atual "Qual é o estado atual da minha atualização?"

O que acontece a seguir

Quando inicia uma conversa, o agente verifica se há trabalho de atualização existente no seu espaço de trabalho:

  • Se não houver trabalho existente, o agente começa do zero, normalmente começando com uma avaliação da sua solução.
  • Se houver trabalho em curso, o agente retoma de onde parou e mostra o estado atual, como "3 de 8 tarefas concluídas."

Escolha um modo de fluxo

O agente suporta dois modos de fluxo que controlam quanto tempo o agente pausa para a sua entrada.

Modo automático

No modo automático, o agente percorre as fases (avaliação, planeamento, execução) sem parar para aprovação em cada limite. O agente ainda para em bloqueadores genuínos ou quando precisa de uma decisão que só tu podes tomar.

Ideal para utilizadores experientes, atualizações simples e pequenas soluções.

Modo guiado

No modo guiado, o agente faz uma pausa em cada limite de estágio para a sua revisão:

  • Após a avaliação, antes de criar o plano.
  • Depois de planear, antes de executar qualquer tarefa.
  • Antes de falhas de tarefas complexas.
  • Em pontos-chave de decisão, onde existem múltiplas abordagens válidas.

Ideal para utilizadores iniciantes, soluções complexas e quando queres aprender o processo.

Mudar de modo no meio da sessão

Alterne livremente entre modos a qualquer momento:

Para mudar para O que dizer
Modo guiado "Pausa" ou "Mudar para modo guiado"
Modo automático "Continua" ou "Força"

Sugestão

Começa com o modo guiado para a tua primeira melhoria. O modo guiado é a melhor forma de aprender como o agente pensa e que decisões toma. Muda para modo automático assim que te sentires confortável.

Ensina o agente

O agente aprende contigo. O agente guarda as tuas correções, preferências e instruções na scenario-instructions.md pasta de estado de atualização. Estas preferências persistem ao longo das sessões.

Corrigir erros

Quando o agente tomar uma decisão com a qual não concorda, diga-lhe:

You: "Actually, don't use Newtonsoft.Json — we're standardizing on System.Text.Json."
Agent: "Got it. I'll use System.Text.Json for all serialization going forward.
        I've saved this as a preference."

O agente atualiza scenario-instructions.md e não volta a fazer a mesma escolha, mesmo numa sessão futura.

Definir preferências

Diga proativamente ao agente como gosta que as coisas sejam feitas:

You: "Always use bottom-up strategy for this solution — upgrade leaf projects first."
Agent: "Noted. I'll use a bottom-up upgrade strategy, starting with projects that
        have no internal dependencies and working up to the top-level projects."

Dê instruções específicas para cada tarefa

Por vezes, uma preferência aplica-se apenas a uma tarefa específica:

You: "For this task, skip the test validation — the tests are broken for a known
      reason and we'll fix them separately."
Agent: "Understood. I'll skip test validation for this task only."

O que o agente guarda

O scenario-instructions.md ficheiro está organizado em secções claras:

Seção O que contém Exemplo
Preferências do Utilizador (Técnicas) Escolhas de pacotes, decisões de framework, padrões de codificação "Use System.Text.Json, não Newtonsoft"
Preferências do Utilizador (Estilo de Execução) Como funciona o agente "Usa sempre uma estratégia de baixo para cima"
Registo de Decisões-Chave Decisões importantes e a sua justificação "Escolhi o EF Core em vez do Dapper porque..."
Instruções Personalizadas por Tarefa Substituições específicas de tarefas "Saltar os testes para a tarefa 3.1"

Sugestão

Também edite scenario-instructions.md diretamente. É um ficheiro Markdown em .github/upgrades/{scenarioId}/. O agente lê o ficheiro no início de cada interação.

Faça correções a meio da sessão

O agente lida com as interrupções com elegância e não perde a noção de onde está ou do que estava a fazer.

Pausa e revisão

You: "Wait, stop — let me review that change first."
Agent: "Here's what I was about to do: [describes planned changes].
        Would you like me to proceed, or adjust the approach?"

Redirecionamento

You: "Actually, let's do Project B before Project A — it has fewer dependencies."
Agent: "Good call. I'll reorder the tasks and start with Project B."

Desfazer

You: "That last change broke the build. Can we revert it?"
Agent: "I'll revert the last commit (abc1234: 'Migrate auth middleware').
        Reverting now."

Além disso, reverte commits tu próprio usando comandos Git padrão. O agente escreve mensagens de commit claras e descritivas para que saibas exatamente o que cada commit mudou.

Faça perguntas a meio do fluxo

Fazer perguntas não descarrila o fluxo de trabalho:

You: "Why did you choose to migrate the data layer before the API controllers?"
Agent: "The API controllers depend on the data layer interfaces. By migrating
        the data layer first, we avoid temporary compilation errors in the
        controllers and can validate each layer independently."

Revise o trabalho do agente

O agente oferece várias formas de avaliar o seu desempenho.

Controlo de origem

O agente sugere trabalhar num ramo separado e faz as alterações à medida que trabalha. Revise as alterações do agente com comandos Git padrão:

git log --oneline -10
git diff main..<agent-branch>

Ficheiros de fluxo de trabalho

O agente mantém vários ficheiros em .github/upgrades/{scenarioId}/ que proporcionam total visibilidade:

Ficheiro O que mostra
tasks.md Visão visual do progresso com todas as tarefas, indicadores de estado (✅ concluído, 🔄 em progresso, ⬜ pendente) e uma barra de progresso
execution-log.md Registo cronológico completo de cada ação que o agente tomou, quando e o que aconteceu
assessment.md A análise inicial da sua solução, incluindo dependências, alterações de ruptura e complexidade de atualização
scenario-instructions.md As suas preferências e as decisões aprendidas pelo agente
tasks/{taskId}/progress-details.md Detalhes por tarefa: erros de compilação encontrados, como foram resolvidos, resultados dos testes e decisões tomadas

Retomar o trabalho interrompido

Fecha o chat ou desliga o teu IDE. O agente lida com esta situação de forma fluida.

O agente armazena todo o estado dentro .github/upgrades/ do teu repositório. Quando inicia uma nova conversa, o agente verifica o estado atual e sabe imediatamente:

  • Qual cenário está ativo.
  • Quais tarefas estão concluídas, em curso ou pendentes.
  • Que artefatos existem (avaliação, plano, ficheiros de tarefas).
  • Se alguma tarefa parece obsoleta (preso no 🔄 estado de uma sessão anterior).

Deteção de tarefas obsoletas

Se uma tarefa estiver em curso de uma sessão anterior, o agente reconhece que a tarefa pode estar estagnada e oferece opções para continuar, reiniciar ou saltar.

Sugestão

Como o estado está dentro .github/upgrades/ do teu repositório, ele viaja com o teu código. Empurra o ramo para um comando, puxa-o para outra máquina, e o agente retoma exatamente onde paraste.

Trabalhar em várias sessões

Grandes atualizações, como uma solução de 20 projetos, uma atualização complexa da estrutura ou uma modernização em múltiplas etapas, costumam abranger várias sessões ao longo de dias ou semanas. O agente lida com várias sessões de forma natural.

  • Estado persistente: Está tudo em .github/upgrades/. Não há estado de memória a perder.
  • Independência da sessão: Cada sessão de chat é independente. O agente reconstrói o seu contexto a partir dos ficheiros de estado todas as vezes.
  • Suporte a Cross-IDE: Comece no VS Code, continue no Visual Studio ou no Copilot CLI. A pasta de estado é o contrato partilhado.

Dicas para trabalho em várias sessões

  • Submete a pasta do estado. Empurra .github/upgrades/ para o teu branch para fazer backup da pasta e torná-la visível para a tua equipa.
  • Revise entre sessões. Leia tasks.md e execution-log.md para refrescar a sua memória sobre o que aconteceu na última sessão.
  • Atualiza as preferências à medida que aprendes. Se descobrires algo nos testes que deva mudar a abordagem do agente, informa-o no início da próxima sessão.

Pede ajuda

Não sabe o que o agente pode fazer ou como está a situação? Pergunte:

O que queres saber O que dizer
Cenários de atualização disponíveis "O que podes fazer?" ou "Que cenários estão disponíveis?"
Progresso atual "Qual é o estado atual?" ou "Mostra-me o progresso"
O plano de atualização "Explica o plano" ou "Explica-me as tarefas"
Detalhes da avaliação "Mostra-me a avaliação" ou "O que encontrou a avaliação?"
Competências disponíveis "Que competências tens?" ou "Lista as tuas competências"
Uma decisão específica "Porque escolheste X em vez de Y?"
Riscos ou preocupações "Quais são os riscos com esta atualização?"

Comunica de forma eficaz

A qualidade da sua interação afeta diretamente a qualidade dos resultados.

Seja específico quanto ao âmbito

"Atualize apenas os projetos Data.Access e Data.Models para .NET 10" dá ao agente um foco claro. "Atualizar tudo" funciona, mas o agente toma mais decisões por si próprio sobre ordenações e prioridades.

Partilhar contexto

O agente não conhece as limitações do seu negócio a menos que as partilhe:

  • "Estamos a atualizar porque Serviço de Aplicações do Azure vai deixar de suportar .NET 8 em novembro."
  • "Este é um serviço de produção de alto tráfego — zero alterações comportamentais nas respostas da API."

Restrições expressas

Diga ao agente o que não deve fazer, não apenas o que deve :

  • "Não mudes a superfície pública da API — temos consumidores externos."
  • "Ainda não podemos atualizar o Newtonsoft.Json—a equipa que é responsável por contratos partilhados ainda não atualizou."
  • "Não toques no módulo de reporte legado — isso está a ser reescrito separadamente."

Enviar comentários

O feedback positivo ajuda tanto quanto as correções e confirma que o agente está no caminho certo:

  • "Essa atualização parece ótima—faz a mesma abordagem para o outro projeto de repositório."
  • "Isso funciona, mas preferimos injeção de construtores a injeção de propriedades nesta base de código."

Referência rápida

Situação O que dizer
Comece uma nova atualização "Atualizar a minha solução para .NET 10"
Retomar trabalhos anteriores "Continuar" ou "Qual é o estado?"
Mudança para modo guiado "Pausa" ou "Mudar para modo guiado"
Mudar para modo automático "Força" ou "Prosseguir sem pedir"
Corrigir uma decisão "Na verdade, usa X em vez de Y"
Definir uma preferência "Faça sempre X nesta solução"
Rever alterações "Mostra-me o que mudaste" ou verifica o Git log
Desfazer uma mudança "Reverter a última alteração"
Pergunte porquê "Porque escolheste essa abordagem?"
Saltar uma tarefa "Ignora esta tarefa por agora"
Obter ajuda "O que podes fazer?"