skills/43-canary-deployment/SKILL.md
Skill para rollout gradual de release com observacao continua de metricas e rollback automatico. Cobre estrategias canary (traffic-based, feature flag, blue-green), thresholds de seguranca e gatilhos de abort. Use quando precisar promover uma release ja aprovada em producao reduzindo blast radius. Trigger em: "canary", "canary deployment", "rollout gradual", "blue-green", "feature flag rollout", "progressive deployment", "gradual release", "rollback automatico", "deploy seguro".
npx skillsauth add felvieira/claude-skills-fv canary-deploymentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
O Canary Deployment fecha o gap entre release-manager (skill 24, que decide o que sai) e deploy (skill 07, que coloca em producao): assume um artefato ja aprovado, promove em fatias controladas e observa metricas em tempo real para decidir progredir ou reverter. O objetivo nao e empacotar — e limitar o impacto de uma regressao desconhecida.
Esta skill segue GLOBAL.md, policies/execution.md, policies/handoffs.md,
policies/quality-gates.md, policies/verification-before-completion.md (toda transicao de step
exige output verificavel da metrica que liberou a passagem) e policies/stack-flexibility.md (sem
amarrar a runtime especifico).
Quando memory/constitution.md existe:
Bloqueio: se baseline nao existe ou error budget esta esgotado, nao iniciar canary. Registrar exception em ADR antes (raramente justificavel).
Roteia uma fracao do trafego real para a nova versao usando weighting no load balancer, service mesh (Istio, Linkerd) ou ingress controller. Escada padrao:
Step 0: 0% (versao nova publicada mas sem trafego) — health check passa
Step 1: 1% — soak 10-15 min — observar 5xx, p95, erros estruturados
Step 2: 10% — soak 30 min — primeiro sinal de regressao agregada
Step 3: 50% — soak 60 min — confirmar estabilidade sob carga proxima do real
Step 4: 100% — promover, manter versao antiga por 24h para rollback rapido
Pseudocodigo agnostico de stack:
# Kubernetes + service mesh
kubectl apply -f canary-1pct.yaml # weighting: stable=99 canary=1
sleep 900 && check_metrics || rollback
kubectl apply -f canary-10pct.yaml
...
# AWS ALB com weighted target groups
aws elbv2 modify-listener \
--default-actions Type=forward,ForwardConfig='{
"TargetGroups":[
{"TargetGroupArn":"...stable...","Weight":99},
{"TargetGroupArn":"...canary...","Weight":1}
]
}'
Versao nova ja esta deployada em 100% das instancias, mas o codigo novo so executa quando flag ativa. Roteamento de quem ve o que e decidido em runtime:
# Pseudo-API generica de flag SDK
if flag.is_enabled("new_checkout", user=ctx.user_id,
rollout=Rollout(percent=1, segments=["beta"])):
return new_checkout_flow(ctx)
return legacy_checkout_flow(ctx)
Vantagens sobre traffic-based: granularidade por usuario, segmento ou regiao; abort instantaneo sem redeploy; permite holdout group para A/B. Limites: codigo de ambas as versoes coexiste no binario (overhead de manutencao); requer infraestrutura de flag (LaunchDarkly, Unleash, Flagsmith, ou self-hosted).
Dois ambientes identicos: blue (atual em producao) e green (nova versao). Switch instantaneo via DNS, load balancer ou roteador. Rollback = inverter o switch.
1. Green ambiente paralelo, escala 100% identica ao blue
2. Smoke tests + warmup contra green (sem trafego real)
3. Switch: roteador aponta para green
4. Observar 15-30 min com 100% do trafego em green
5. Se ok: blue vira reserva por 24h, depois desliga
Se falha: switch reverso em segundos
Quando preferir: mudancas que tocam runtime (Node 18 -> 22), framework major, schema de cache incompativel. Custo: dobra a infra temporariamente.
Configurar dashboard unificado e thresholds antes de iniciar o step 1%. Comparar sempre canary vs stable lado a lado, nao canary vs baseline historico (variacao de carga confunde).
| Metrica | Default threshold | Janela de avaliacao | Acao se quebrar | |---|---|---|---| | Error rate (5xx/total) | canary < 1% absoluto E canary <= stable + 0.5pp | ultimos 5 min, 2 samples consecutivos | rollback automatico | | p95 latency | canary <= stable * 1.20 (regressao max 20%) | ultimos 10 min, media movel | rollback automatico | | p99 latency | canary <= stable * 1.30 | ultimos 10 min | alerta + decisao humana | | Conversion rate / business KPI | canary >= stable * 0.95 (perda max 5%) | janela conforme volume | alerta + decisao humana | | 5xx rate por endpoint | nenhum endpoint > 2% em canary | ultimos 5 min | rollback automatico | | Saturacao (CPU, memoria, conexoes) | canary <= stable * 1.30 | continuo | alerta | | Custo por request (se IA) | canary <= stable * 1.15 | janela conforme volume | alerta |
Notas:
Gatilhos que disparam reversao sem intervencao humana:
kubectl rollout undo, flag kill switch,
switch blue-green) com permissao de qualquer on-callProcedimento de rollback (deve estar testado em staging):
1. Acionar reversao do step (weighting volta para 100% stable, flag desligada,
switch blue-green revertido)
2. Confirmar via dashboard que trafego retornou para versao anterior (< 2 min)
3. Snapshot de logs/metricas do periodo do canary (window: inicio - 5min ate now)
4. Comunicar canal #releases com link do dashboard e janela do incidente
5. Abrir postmortem dentro de 24h (skill 20 observability-sre lidera, skill 11
reviewer revisa)
Pos-rollback: artefato canary nao volta automaticamente; precisa novo PR ou hotfix. Nunca "tentar de novo" sem fix da causa raiz — rollback repetido queima error budget e confianca.
Status update em cada transicao no canal definido (#releases ou equivalente). Formato sugerido:
[canary <servico> <versao>] step 10% iniciado
- baseline: error 0.3%, p95 240ms
- canary atual: error 0.4%, p95 252ms (+5%)
- soak: 30 min, proxima decisao em ~15:42
- dashboard: <link>
- abort: <comando ou link>
Updates obrigatorios:
Seguir policies/handoffs.md. Devolver para skill 24 (release-manager) em caso de sucesso para
encerrar release oficial, ou para skill 20 (observability-sre) em caso de rollback para conduzir
analise de causa raiz.
Estrategia base e thresholds adaptados do slash command /canary do repositorio
garrytan/gstack (licenca MIT). Conceitos de error budget e
janela de soak alinhados com Google SRE Book (capitulos 4 e 8). Pattern de blue-green e canary
documentado em Continuous Delivery (Humble & Farley, 2010).
development
Skill compositora que pega texto/assunto e gera post de blog HTML completo no repo {blog_repo_path} ({github_user_repo_url}), com imagens (via skill 17 fal.ai ou skill 42 Playwright screenshot), commit+push automático, retorna URL pública via GitHub Pages. Trigger em: "post no blog", "publicar post", "escrever post", "blog post", "publish blog", "gera post", "criar post", "novo post no meu blog".
tools
Audita o peso de contexto carregado na sessão — CLAUDE.md, agents, MCP descriptions, rules ativas, skills invocadas e histórico acumulado. Estima tokens por componente, reporta headroom disponível e emite alertas de overflow. Distinto do cost-tracker (skill 30) que rastreia tokens gastos em completions runtime. Trigger em: "contexto inchado", "context overflow", "quanto contexto estou usando", "peso do contexto", "context budget", "tokens carregados", "sessao lenta", "respostas degradadas", "headroom de contexto", "custo fixo de contexto", "overhead de rules", "overhead dos agents", "impacto do MCP no contexto", "espaco no context window", "quanto cabe no context window"
development
Coleta e organiza informacao tecnica multi-fonte antes de escrever docs, PRDs, ADRs ou artigos. Busca em: docs oficiais, GitHub (repos + issues), Stack Overflow, papers e blogs de referencia. Ranqueia fontes por autoridade (oficial 40% + recencia 30% + profundidade 20% + comunidade 10%). Output: memory/research/<slug>.md pronto para alimentar skill 10 (documenter), skill 01 (po-feature-spec), skill 26 (prompt-engineer) ou skill 41 (blog-publisher). Trigger em: "pesquisa tecnica", "levanta informacao", "coleta docs", "busca referencias", "preciso de fontes", "research antes de escrever", "levanta o que existe sobre", "benchmark de solucoes", "o que existe sobre X", "quero entender o estado da arte", "compara abordagens", "levanta referencias", "faz um research de", "coleta fontes sobre", "pesquisa sobre", "quero saber o que existe de", "monta um dossie tecnico", "background tecnico", "due diligence tecnica", "levantamento de alternativas".
development
Extrai e codifica os padroes de coding do projeto existente (naming, estrutura de arquivos, error handling, testing style, import style, API design, async patterns) e usa esses padroes como restricao sobre novo codigo. Garante que o agente code "igual ao resto do projeto" em vez de inventar convencoes proprias. Produce um "code style map" salvo em memory/patterns.md que todas as skills de geracao de codigo devem consultar. Trigger em: "segue o padrao do projeto", "coda igual ao resto", "nao reinventa padrao", "detecta padroes do codebase", "code style do projeto", "padrao do projeto", "convencao do projeto", "coda consistente", "mesma convencao", "sem reinventar roda", "padrao de codigo", "patterns do codebase", "pattern enforcement", "conformidade de padrao", "convencoes de naming", "padrao de tratamento de erro", "mesma estrutura do projeto", "detecta as convencoes", "extrai padroes de coding", "como o projeto estrutura".