tderoussel/portão-de-embarque

Portão de verificação para uma stack Next.js-on-Vercel + Supabase + GitHub Actions, executado antes de afirmar que algo foi enviado, implantado, está no ar, mesclado, passando ou concluído.

O que é portão-de-embarque?

Este skill define uma série de verificações rigorosas que devem ser executadas antes de qualquer afirmação sobre o estado de um sistema em produção, como 'está no ar', 'implantou', 'envie', 'mescle', 'CI está verde', 'confirme produção' ou 'funcionou'. Ele foi projetado para evitar falsos positivos que ocorrem quando verificações óbvias retornam um 'pass' incorreto. O skill suporta stacks que usam Next.js hospedado na Vercel, Supabase como backend e GitHub Actions para CI/CD. As verificações abrangem implantação, CI, tipagem, lint, banco de dados e armadilhas de ambiente, cada uma com regras específicas para garantir que a afirmação seja baseada em consultas reais ao sistema de produção, não em suposições. Ele é útil para desenvolvedores que precisam de um processo confiável antes de declarar que uma mudança está em produção, mesclar um PR ou reportar que a CI está verde. O formato de saída exige que cada verificação seja relatada como 'PASSOU (evidência)' ou 'NÃO VERIFICADO (porquê)', nunca implicando que uma verificação foi executada quando não foi.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tderoussel/agent-skills/tree/main/skills/ship-gate

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

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

Documentação

Portão de embarque

Cada regra aqui existe porque a verificação óbvia uma vez retornou um falso positivo. Execute o portão antes da afirmação, não depois.

Adapte os detalhes à sua stack; a forma — o que tornaria essa afirmação falsa? — é a parte transferível.

A regra da afirmação

Uma afirmação sobre produção exige uma consulta à produção.

Um teste que passa não é produção. Um PR mesclado não é produção. Um deploy verde não é produção. Cada um desses é uma afirmação sobre um sistema diferente daquele sobre o qual você está afirmando.

Se nenhum humano examinou o resultado, não está "verificado" — diga o que você realmente verificou.

Verificação de deploy

  • Saiba o que realmente dispara um deploy. Em um host integrado com git, é o push, não uma invocação de CLI. Implantar via CLI quando o projeto implanta por push produz uma build que não é a que os usuários recebem.
  • Verifique a conta que possui o projeto. Uma CLI logada localmente pode estar autenticada como uma conta pessoal que não possui o projeto de produção — cada comando então é bem-sucedido contra o alvo errado, silenciosamente.
  • Verifique com status do commit contra o SHA implantado, não um olhar de painel.
  • Confirme o deployment que é produção atual, não apenas um que está PRONTO. Vários podem estar prontos ao mesmo tempo.
  • Funções edge/serverless são implantadas separadamente do aplicativo. Um PR mesclado não implanta uma função edge; verifique sua versão explicitamente.
  • Mudanças apenas no cliente podem não precisar de deploy de função — não espere por uma que nunca virá.
  • Reobtenha o manifesto ativo antes de afirmar uma versão. Trabalho paralelo incrementa versões por baixo de você.

Verificação de CI

  • Portão em cada contexto necessário, não no primeiro verde.
  • Nunca faça portão em um comando com pipe. algum-check | tail reporta o código de saída de tail, mascarando a falha real. Em shells sem PIPESTATUS (zsh difere de bash aqui), é fácil errar — verifique o status do próprio comando.
  • steps: 0 significa que o job nunca foi executado, não que passou. Uma API de checks pode reportar uma conclusão para um job que não fez trabalho algum.
  • Uma falha suspeitamente rápida sem steps geralmente é um problema de cobrança ou permissões, não um problema de YAML.
  • Reexecutar apenas jobs com falha reproduz um snapshot desatualizado da branch. Atualize a branch primeiro, depois reexecute.
  • Uma lista de checks omite jobs que nunca foram criados. Ausência de falha não é evidência de aprovação.
  • gh pr create requer um --base explícito. Heredocs encadeados ao redor dele podem falhar silenciosamente.

Portões de tipo e lint

  • Projetos TypeScript grandes podem precisar de um heap Node aumentado; sem ele tsc morre de uma forma que parece um erro de código.
  • Saiba quais diretórios seu typechecker e linter realmente cobrem. Diretórios de funções edge são frequentemente excluídos de ambos. Se eles executam em um runtime diferente, verifique-os com o próprio verificador desse runtime — um job de teste não é um portão de tipo.
  • Construa em worktrees ou checkouts limpos, não em um diretório de trabalho com deriva não commitada.

Banco de dados

  • Nunca envie schema ou execute migrações casualmente contra produção. Aplique schema através do caminho revisado que o projeto escolheu, uma vez.
  • Chame novos procedimentos armazenados contra o banco de dados real antes de acreditar neles. Mocks escondem erros de runtime que só aparecem com tipos reais e ambiguidade real.
  • Se o conjunto de testes faz mock do banco de dados globalmente, um teste unitário que passa não prova nada sobre o banco de dados.
  • Nunca faça compare-and-set em uma coluna gerenciada por trigger — o trigger a altera por baixo da escrita.
  • Meça o raio de explosão de uma mudança contra dados de produção antes de mesclar. Um filtro que parece estreito contra um seed local pode corresponder a uma parcela muito diferente de linhas reais.

Armadilhas de ambiente

  • Nunca assuma o fuso horário da máquina — execute date. Testes dependentes de data falham no deslocamento, e a falha parece um bug de código.
  • Uma identidade git não definida pode bloquear deploys e se manifestar como um erro de rede não relacionado.
  • Defina variáveis de ambiente do host a partir de um arquivo, não por atribuição inline; shells e CLIs podem incorporar quebras de linha finais que corrompem o valor invisivelmente.
  • Sucesso de job agendado não é sucesso de efeito do job: um runner reportando succeeded significa que a invocação retornou, não que o trabalho aconteceu. Verifique o efeito.

Saída

Estados cada portão como PASSOU (evidência) ou NÃO VERIFICADO (porquê).

Nunca implique que um portão foi executado quando não foi. Se algum portão falhar ou não for verificado, diga claramente que a mudança não está verificada — reter a afirmação é correto.

Individual skills in this repo

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

tderoussel/codebase-audit

Runs a ranked, evidence-backed audit of a product, codebase, or subsystem, ending in a verify list that separates proven findings from inferred ones. Use when the user asks for an audit, a gap analysis, a deep read, a bug hunt, a readiness check, a re-audit, a state reconciliation, or asks what they are not seeing. Trigger phrases include "audit", "gap analysis", "what am I missing", "deep audit", "readiness", "bug hunt", "review the whole thing". Produces findings and a verify list; does not fix.

tderoussel/competitive-teardown

Researches a competing product against your own and produces a ranked build-or-ignore verdict, plus optional comparison-page copy. Use when the user names a competitor or asks how their product stacks up against one. Trigger phrases include "vs us", "competitor", "what does X have", "should we copy", "competitive gap", "teardown", "are we behind". Produces a ranked verdict with effort estimates and an explicit not-worth-copying list.

tderoussel/decision-council

Run a structured multi-perspective review of a decision instead of getting one agreeable answer. Use when the user says run a council, get me perspectives on this, should I do X, stress-test this decision, or is this a good idea.

tderoussel/fleet-brief

Authors a workstream brief for dispatching multiple parallel build agents across one codebase, with per-lane file ownership, shared-ground warnings, and a derived DO-NOT list. Use whenever work is about to be split across concurrent agents, workers, lanes, or waves — even if the user does not say "write a brief". Trigger phrases include "fan out", "parallel agents", "orchestrate this", "split into lanes", "workstreams", "run these in parallel", "review-gated build". Produces the brief; does not dispatch.

tderoussel/inbox-triage

Triage an email inbox — sort what needs a reply, draft the replies, flag what needs a decision, and surface what can be ignored or unsubscribed. Use when the user says triage my inbox, do my email, what's in my inbox, or clean up my email.

tderoussel/overnight-build

Composes an autonomous unattended Claude Code build prompt that survives usage-limit resets via BUILD_LOG.md checkpointing, plus the launcher that restarts it. Use when the user asks for an overnight build, an autonomous build, a build to run while they sleep, an unattended or unsupervised session, or any long build they will not be monitoring. Trigger phrases include "overnight build", "run overnight", "build while I sleep", "autonomous build", "let it run", "unattended". Produces a single copyable prompt; does not run the build.

tderoussel/session-log

Write a durable record of a work session — what was built, root-caused, or shipped — into the project's notes. Use when the user says log this session, write a session log, record this, or when a substantial piece of work has just finished and needs to be handed off to a future session.

tderoussel/vault-doctor

Audits and repairs an Obsidian vault's structural health — broken [[wikilinks]], ambiguous duplicate filenames, missing or malformed frontmatter, stale status markers, and hub notes whose state sections have gone cold. Use when the user asks about vault health, broken links, vault cleanup, dead links, orphan notes, tag consistency, or says the vault feels messy or out of date. Trigger phrases include "vault health", "broken links", "clean up the vault", "audit the vault", "is the vault current". Read-only by default; every repair is proposed before it is made.

Habilidades Relacionadas