Communitygithub.com

addyosmani/agent-skills

Prepara para lançamentos em produção. Use ao preparar-se para implantar em produção ou ao perguntar o que precisa estar em vigor antes de enviar. Use quando precisar de uma lista de verificação pré-lançamento, ao configurar monitoramento, ao planejar uma implantação em etapas ou quando precisar de uma estratégia de rollback.

O que é agent-skills?

Esta skill fornece um guia abrangente e uma lista de verificação detalhada para garantir lançamentos de software seguros e confiáveis em produção. Inspirada nas melhores práticas de engenharia, ela aborda desde qualidade de código, segurança e desempenho até acessibilidade e infraestrutura, garantindo que cada implantação seja reversível, observável e incremental. A skill é projetada para ser usada com agentes de IA como Claude Code ou Cursor, ajudando desenvolvedores a seguir um processo rigoroso de pré-lançamento, incluindo o uso de feature flags para desacoplar implantação de liberação, estratégias de rollout em etapas (canário) e um plano claro de rollback. Ela também enfatiza a importância do monitoramento contínuo e do uso de um orçamento de erros (error budget) como um gate objetivo para decidir quando é seguro enviar uma alteração. Ao seguir os passos e verificações descritos, os desenvolvedores podem minimizar riscos, detectar problemas precocemente e garantir uma experiência de alta qualidade para os usuários.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/addyosmani/agent-skills/tree/main/skills/shipping-and-launch

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Envio e Lançamento

Visão Geral

Envie com confiança. O objetivo não é apenas implantar — é implantar com segurança, com monitoramento em vigor, um plano de rollback pronto e uma compreensão clara do que significa sucesso. Cada lançamento deve ser reversível, observável e incremental.

Quando Usar

  • Implantar um recurso em produção pela primeira vez
  • Liberar uma mudança significativa para os usuários
  • Migrar dados ou infraestrutura
  • Abrir um beta ou programa de acesso antecipado
  • Qualquer implantação que envolva risco (todas elas)

A Lista de Verificação Pré-Lançamento

Qualidade do Código

  • Todos os testes passam (unitários, integração, e2e)
  • Build bem-sucedido sem avisos
  • Lint e verificação de tipos passam
  • Código revisado e aprovado
  • Nenhum comentário TODO que deva ser resolvido antes do lançamento
  • Nenhuma instrução console.log de depuração no código de produção
  • Tratamento de erros cobre modos de falha esperados

Segurança

  • Nenhum segredo no código ou controle de versão
  • A auditoria de dependências do ecossistema (npm audit, pip-audit, cargo audit, ...) não mostra vulnerabilidades críticas ou altas
  • Validação de entrada em todos os endpoints voltados para o usuário
  • Verificações de autenticação e autorização em vigor
  • Cabeçalhos de segurança configurados (CSP, HSTS, etc.)
  • Limitação de taxa em endpoints de autenticação
  • CORS configurado para origens específicas (não curinga)

Desempenho

  • Core Web Vitals dentro dos limites "Bom"
  • Nenhuma consulta N+1 em caminhos críticos
  • Imagens otimizadas (compressão, tamanhos responsivos, carregamento preguiçoso)
  • Tamanho do bundle dentro do orçamento
  • Consultas de banco de dados têm índices apropriados
  • Cache configurado para ativos estáticos e consultas repetidas

Acessibilidade

  • Navegação por teclado funciona para todos os elementos interativos
  • Leitor de tela pode transmitir conteúdo e estrutura da página
  • Contraste de cores atende WCAG 2.1 AA (4.5:1 para texto)
  • Gerenciamento de foco correto para modais e conteúdo dinâmico
  • Mensagens de erro são descritivas e associadas aos campos do formulário
  • Nenhum aviso de acessibilidade no axe-core ou Lighthouse

Infraestrutura

  • Variáveis de ambiente definidas em produção
  • Migrações de banco de dados aplicadas (ou prontas para aplicar)
  • DNS e SSL configurados
  • CDN configurado para ativos estáticos
  • Logging e relatórios de erro configurados
  • Endpoint de verificação de integridade existe e responde

Documentação

  • README atualizado com quaisquer novos requisitos de configuração
  • Documentação da API atualizada
  • ADRs escritos para quaisquer decisões arquiteturais
  • Changelog atualizado
  • Documentação voltada para o usuário atualizada (se aplicável)

Estratégia de Feature Flag

Envie atrás de feature flags para desacoplar implantação de liberação:

// Verificação de feature flag
const flags = await getFeatureFlags(userId);

if (flags.taskSharing) {
  // Novo recurso: compartilhamento de tarefas
  return <TaskSharingPanel task={task} />;
}

// Padrão: comportamento existente
return null;

Ciclo de vida da feature flag:

1. IMPLANTAR com flag DESLIGADA     → Código está em produção, mas inativo
2. ATIVAR para equipe/beta          → Teste interno no ambiente de produção
3. IMPLANTAÇÃO GRADUAL              → 5% → 25% → 50% → 100% dos usuários
4. MONITORAR em cada etapa          → Observar taxas de erro, desempenho, feedback dos usuários
5. LIMPAR                           → Remover flag e caminho de código morto após implantação completa

Regras:

  • Cada feature flag tem um proprietário e uma data de expiração
  • Limpe as flags dentro de 2 semanas após a implantação completa
  • Não aninhe feature flags (cria combinações exponenciais)
  • Teste ambos os estados da flag (ligado e desligado) no CI

Implantação em Etapas

A Sequência de Implantação

1. IMPLANTAR no staging
   └── Suíte de testes completa no ambiente de staging
   └── Teste smoke manual dos fluxos críticos

2. IMPLANTAR em produção (feature flag DESLIGADA)
   └── Verificar se a implantação foi bem-sucedida (health check)
   └── Verificar monitoramento de erros (nenhum novo erro)

3. ATIVAR para a equipe (flag LIGADA para usuários internos)
   └── Equipe usa o recurso em produção
   └── Janela de monitoramento de 24 horas

4. IMPLANTAÇÃO CANÁRIO (flag LIGADA para 5% dos usuários)
   └── Monitorar taxas de erro, latência, comportamento do usuário
   └── Comparar métricas: canário vs. linha de base
   └── Janela de monitoramento de 24-48 horas
   └── Avançar apenas se todos os limites forem aprovados (ver tabela abaixo)

5. AUMENTO GRADUAL (25% -> 50% -> 100%)
   └── Mesmo monitoramento em cada etapa
   └── Capacidade de reverter para a porcentagem anterior a qualquer momento

6. IMPLANTAÇÃO COMPLETA (flag LIGADA para todos os usuários)
   └── Monitorar por 1 semana
   └── Limpar a feature flag

Limites de Decisão da Implantação

Use estes limites para decidir se deve avançar, pausar ou reverter em cada etapa:

MétricaAvançar (verde)Pausar e investigar (amarelo)Reverter (vermelho)
Taxa de erroDentro de 10% da linha de base10-100% acima da linha de base>2x linha de base
Latência P95Dentro de 20% da linha de base20-50% acima da linha de base>50% acima da linha de base
Erros JS do clienteNenhum novo tipo de erroNovos erros em <0.1% das sessõesNovos erros em >0.1% das sessões
Métricas de negócioNeutro ou positivoDeclínio <5% (pode ser ruído)Declínio >5%

Quando Reverter

Reverta imediatamente se:

  • A taxa de erro aumentar mais de 2x a linha de base
  • A latência P95 aumentar mais de 50%
  • Problemas relatados por usuários dispararem
  • Problemas de integridade de dados forem detectados
  • Vulnerabilidade de segurança descoberta

Monitoramento e Observabilidade

O que Monitorar

Métricas da aplicação:
├── Taxa de erro (total e por endpoint)
├── Tempo de resposta (p50, p95, p99)
├── Volume de requisições
├── Usuários ativos
└── Principais métricas de negócio (conversão, engajamento)

Métricas de infraestrutura:
├── Utilização de CPU e memória
├── Uso do pool de conexões do banco de dados
├── Espaço em disco
├── Latência de rede
└── Profundidade da fila (se aplicável)

Métricas do cliente:
├── Core Web Vitals (LCP, INP, CLS)
├── Erros JavaScript
├── Taxas de erro de API da perspectiva do cliente
└── Tempo de carregamento da página

Relatórios de Erro

// Configurar boundary de erro com relatório
class ErrorBoundary extends React.Component {
  componentDidCatch(error: Error, info: React.ErrorInfo) {
    // Reportar ao serviço de rastreamento de erros
    reportError(error, {
      componentStack: info.componentStack,
      userId: getCurrentUser()?.id,
      page: window.location.pathname,
    });
  }

  render() {
    if (this.state.hasError) {
      return <ErrorFallback onRetry={() => this.setState({ hasError: false })} />;
    }
    return this.props.children;
  }
}

// Relatório de erro no servidor
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
  reportError(err, {
    method: req.method,
    url: req.url,
    userId: req.user?.id,
  });

  // Não expor detalhes internos aos usuários
  res.status(500).json({
    error: { code: 'INTERNAL_ERROR', message: 'Algo deu errado' },
  });
});

Verificação Pós-Lançamento

Na primeira hora após o lançamento:

1. Verificar se o endpoint de integridade retorna 200
2. Verificar o painel de monitoramento de erros (nenhum novo tipo de erro)
3. Verificar o painel de latência (nenhuma regressão)
4. Testar o fluxo crítico do usuário manualmente
5. Verificar se os logs estão fluindo e são legíveis
6. Confirmar que o mecanismo de rollback funciona (teste a seco, se possível)

Portão de Liberação do Orçamento de Erros

O orçamento de erros do seu serviço — a fração de requisições ou tempo que seu SLO permite falhar — determina se é seguro enviar. Use-o como um portão objetivo — não uma negociação:

Orçamento restante > 20%  →  Enviar normalmente; monitorar de perto
Orçamento restante 0–20%  →  Apenas implantações lentas; nenhuma mudança de alto risco
Orçamento esgotado        →  Congelar trabalho de recursos; focar inteiramente em confiabilidade
Orçamento reiniciado      →  Retomar ritmo normal; incorporar a correção que o recuperou

Uma alta taxa de consumo durante um canário (consumindo orçamento mais rápido que o ritmo da linha de base) é um sinal de pausa na tabela de limites de implantação acima — trate-o da mesma forma que uma taxa de erro elevada.

Estratégia de Rollback

Toda implantação precisa de um plano de rollback antes de acontecer:

## Plano de Rollback para [Recurso/Lançamento]

### Condições de Acionamento
- Taxa de erro > 2x linha de base
- Latência P95 > [X]ms
- Relatos de usuários sobre [problema específico]

### Passos do Rollback
1. Desabilitar a feature flag (se aplicável)
   OU
1. Implantar versão anterior: `git revert <commit> && git push`
2. Verificar rollback: health check, monitoramento de erros
3. Comunicar: notificar a equipe sobre o rollback

### Considerações sobre o Banco de Dados
- A migração [X] tem um rollback: `npx prisma migrate rollback`
- Dados inseridos pelo novo recurso: [preservados / limpos]

### Tempo para Rollback
- Feature flag: < 1 minuto
- Reimplantar versão anterior: < 5 minutos
- Rollback de banco de dados: < 15 minutos

Veja Também

  • Para a Definição de Pronto (Definition of Done) do projeto que toda mudança deve atender antes desta lista de verificação, veja ../../references/definition-of-done.md
  • Para verificações de segurança pré-lançamento, veja ../../references/security-checklist.md
  • Para a lista de verificação de desempenho pré-lançamento, veja ../../references/performance-checklist.md
  • Para verificação de acessibilidade antes do lançamento, veja ../../references/accessibility-checklist.md
  • Para as regras de alerta e limites vinculados ao SLO, veja observability-and-instrumentation

Racionalizações Comuns

RacionalizaçãoRealidade
"Funciona no staging, funcionará em produção"Produção tem dados, padrões de tráfego e casos de borda diferentes. Monitore após a implantação.
"Não precisamos de feature flags para isso"Todo recurso se beneficia de um interruptor de desligamento. Mesmo mudanças "simples" podem quebrar coisas.
"Monitoramento é sobrecarga"Não ter monitoramento significa descobrir problemas através de reclamações de usuários em vez de painéis.
"Adicionaremos monitoramento depois"Adicione antes do lançamento. Você não pode depurar o que não pode ver.
"Reverter é admitir falha"Reverter é engenharia responsável. Enviar um recurso quebrado é a falha.
"A taxa de erro parece boa, vamos continuar enviando"Verifique a taxa de consumo, não apenas a taxa de erro atual. Consumir orçamento mais rápido que a linha de base é um sinal de pausa mesmo quando os limites individuais estão verdes.

Bandeiras Vermelhas

  • Implantar sem um plano de rollback
  • Nenhum monitoramento ou relatório de erro em produção
  • Lançamentos big-bang (tudo de uma vez, sem staging)
  • Feature flags sem expiração ou proprietário
  • Ninguém monitorando a implantação na primeira hora
  • Configuração do ambiente de produção feita de memória, não por código
  • "É sexta-feira à tarde, vamos enviar"
  • Orçamento de erros esgotado, mas trabalho de recurso continua inalterado

Verificação

Antes de implantar:

  • Lista de verificação pré-lançamento concluída (todas as seções verdes)
  • Feature flag configurada (se aplicável)
  • Plano de rollback documentado
  • Painéis de monitoramento configurados
  • Equipe notificada sobre a implantação

Após implantar:

  • Health check retorna 200
  • Taxa de erro está normal
  • Latência está normal
  • Fluxo crítico do usuário funciona
  • Logs estão fluindo
  • Rollback testado ou verificado como pronto

Para cada serviço enviado:

  • Política de orçamento de erros em vigor: saber qual ação tomar quando o orçamento cair abaixo de 20% e quando estiver esgotado

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

addyosmani/agent-skills

Guides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints, defining type contracts between modules, or establishing boundaries between frontend and backend.

addyosmani/agent-skills

Builds production-quality, accessible, responsive user-facing UIs. Use when building or modifying interfaces and pages, creating components, implementing layouts, meeting WCAG accessibility requirements, managing state, or when the output needs to look and feel production-quality rather than AI-generated.

addyosmani/browser-testing-with-devtools

Tests in real browsers via Chrome DevTools MCP. Use when building or debugging anything that runs in a browser. Use when you need to inspect the DOM, capture console errors, analyze network requests, profile performance, or verify visual output with real runtime data. Requires the chrome-devtools MCP server to be configured.

addyosmani/ci-cd-and-automation

Automates CI/CD pipeline setup. Use when setting up or modifying build and deployment pipelines. Use when you need to automate quality gates, configure test runners in CI, or establish deployment strategies.

addyosmani/code-review-and-quality

Conducts multi-axis code review. Use before merging any change. Use when reviewing code written by yourself, another agent, or a human. Use when you need to assess code quality across multiple dimensions before it enters the main branch.

addyosmani/code-simplification

Simplifies code for clarity. Use when refactoring code for clarity without changing behavior. Use when code works but is harder to read, maintain, or extend than it should be. Use when reviewing code that has accumulated unnecessary complexity.

addyosmani/constraint-driven-development

Establishes a project's quality bar as a written contract and stops agents quietly lowering it. Interviews the user on which dimensions matter, supplies sane default thresholds when they have no number in mind, records everything in CONSTRAINTS.md, and watches the diff for a weakened bar — new @ts-ignore or eslint-disable suppressions, skipped or deleted tests, assertions stripped out, unimplemented stubs, thresholds edited down. Use when no quality bar is written down, when the user says "set up constraints" or "define our standards", when the user wants dimensions they care about — accessibility, web performance, coverage — set up as enforced constraints, when an agent keeps silencing checks or skipping tests to get to green, when you need a coverage or performance threshold and don't know what number to pick, or when an agent writes more code than anyone will read.

addyosmani/debugging-and-error-recovery

Guides systematic root-cause debugging. Use when tests fail, builds break, behavior doesn't match expectations, or you encounter any unexpected error. Use when you need a systematic approach to finding and fixing the root cause rather than guessing.

addyosmani/deprecation-and-migration

Manages deprecation and migration. Use when removing old systems, APIs, or features. Use when migrating users from one implementation to another. Use when deciding whether to maintain or sunset existing code.

addyosmani/documentation-and-adrs

Records decisions and documentation. Use when making architectural decisions, changing public APIs, shipping features, or when you need to record context that future engineers and agents will need to understand the codebase.

addyosmani/doubt-driven-development

Subjects every non-trivial decision to a fresh-context adversarial review before it stands. Use when correctness matters more than speed, when working in unfamiliar code, when stakes are high (production, security-sensitive logic, irreversible operations), or any time a confident output would be cheaper to verify now than to debug later.

addyosmani/git-workflow-and-versioning

Structures git workflow practices. Use when making any code change. Use when committing, branching, resolving conflicts, or when you need to organize work across multiple parallel streams.

addyosmani/idea-refine

Refines raw ideas into sharp, actionable concepts through structured divergent and convergent thinking. Use when an idea is still vague, when you need to stress-test assumptions before committing to a plan, or when you want to expand options before converging on one. Triggers on "ideate", "refine this idea", or "stress-test my plan".

addyosmani/incremental-implementation

Delivers changes incrementally. Use when implementing any feature or change that touches more than one file. Use when you're about to write a large amount of code at once, or when a task feels too big to land in one step.

addyosmani/interview-me

Extracts what the user actually wants instead of what they think they should want. Achieves this through one-question-at-a-time interview until ~95% confidence about the underlying intent. Use when an ask is underspecified ("build me X" without "for whom" or "why now"), when the user explicitly invokes ("interview me", "grill me", "are we sure?", "stress-test my thinking"), or when you catch yourself silently filling in ambiguous requirements before any plan, spec, or code exists.

addyosmani/observability-and-instrumentation

Instruments code so production behavior is visible and diagnosable. Use when adding logging, metrics, tracing, or alerting. Use when shipping any feature that runs in production and you need evidence it works. Use when production issues are reported but you can't tell what happened from the available data.

addyosmani/performance-optimization

Optimizes application performance. Use when performance requirements exist, when you suspect performance regressions, or when Core Web Vitals or load times need improvement. Use when profiling reveals bottlenecks that need fixing.

addyosmani/planning-and-task-breakdown

Breaks work into ordered tasks. Use when you have a spec or clear requirements and need to break work into implementable tasks. Use when a task feels too large to start, when you need to estimate scope, or when parallel work is possible.

addyosmani/security-and-hardening

Hardens code against vulnerabilities. Use when handling user input, authentication, data storage, or external integrations. Use when building any feature that accepts untrusted data, manages user sessions, or interacts with third-party services.

addyosmani/source-driven-development

Grounds every implementation decision in official documentation. Use when you want authoritative, source-cited code free from outdated patterns. Use when building with any framework or library where correctness matters.

Habilidades Relacionadas