Communitygithub.com

lguidolin/ship-it

Use quando o usuário quiser finalizar o trabalho — push, PR, arquivar registros de decisão, merge e limpeza. Gerencia o ciclo de vida completo, desde o commit das alterações finais até a limpeza pós-merge, incluindo a conversão de especificações/planos em registros de decisão compactos.

O que é ship-it?

O ship-it automatiza todo o ciclo de entrega de desenvolvimento: verificação de testes, commit convencional, criação de branch, push, abertura de PR, arquivamento pós-merge e limpeza. Ele garante que nunca se faça push diretamente para a main, que todos os commits sigam o formato de commits convencionais, e que especificações e planos sejam convertidos em registros de decisão compactos apenas após o merge. Funciona com repositórios git normais, worktrees nomeados e HEAD destacado, delegando a detecção de ambiente à habilidade `superpowers:finishing-a-development-branch` quando disponível. Caso essa habilidade não esteja disponível, ele recai para um fluxo manual equivalente, executando testes diretamente e confirmando a branch base com o usuário. O ship-it termina sua responsabilidade na implantação de preview do PR; a promoção para staging e produção é responsabilidade de outra habilidade de entrega.

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

Perguntar na sua IA favorita

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

Documentação

Ship It

Gerencia o ciclo de vida completo de entrega: stage, commit, push, abrir um PR, arquivar registros de decisão pós-merge e limpeza.

Visão Geral

Toda alteração passa por um branch e PR. Nunca faça push diretamente para a main. Esta habilidade gerencia o ciclo de finalização completo, incluindo o arquivamento da documentação pós-merge.

As mensagens de commit são documentação. O título do PR se torna o commit squash-merge na main e aparece no changelog. Acertá-lo no momento da criação do PR.

Arquive após o merge, nunca antes. Especificações e planos permanecem acessíveis até o merge do PR. Somente após o merge eles são convertidos em registros de decisão compactos.

Quando Usar

  • O usuário diz "push", "ship it", "vamos finalizar", "abrir um PR", "criar um PR"
  • O usuário diz "merge feito", "está mergeado", "puxar e limpar" após um PR ter sido aberto
  • O usuário concluiu a implementação e quer finalizar
  • Após concluir um plano onde o próximo passo é submeter o trabalho

Quando NÃO Usar

  • O usuário explicitamente quer fazer push diretamente para a main (confirme que isso é intencional primeiro)
  • O repositório não tem remote configurado
  • As alterações são work-in-progress que o usuário não está pronto para enviar
  • O usuário quer apenas fazer commit sem finalizar (use conventional-commits-and-releases)

Processo

Fase 0: Verificar e Detectar

Uma suíte vermelha nunca se torna um PR. Execute a suíte de testes completa do projeto primeiro. Se algo falhar, reporte as falhas e pare — não faça commit, push ou abra um PR. Esta verificação é política do projeto e não é delegada.

A detecção de ambiente (repositório normal vs. worktree nomeado vs. HEAD destacado) e a determinação da branch base são delegadas a superpowers:finishing-a-development-branch, que já lida com todos os três casos.

Verifique a disponibilidade da maneira correta: procure por finishing-a-development-branch na sua própria lista de habilidades disponíveis. Se estiver listada, é invocável. Se não estiver listada, não é — prossiga para o fallback.

Não vasculhe o sistema de arquivos em busca dela. ~/.claude/plugins/cache/ contém todas as versões já buscadas, incluindo plugins que estão instalados mas desabilitados, e habilidades podem ser fornecidas por outros mecanismos além do cache de plugins. Um caminho existindo no cache não prova nada sobre se você pode invocar a habilidade.

Se disponível — invoque-a para verificação de testes, detecção de ambiente e determinação da branch base, então pare antes do menu de opções dela.

A decisão de integração já foi tomada pela política do projeto e não cabe ao usuário redefini-la aqui: este projeto faz merge apenas através de um PR, porque o PR é o que produz a implantação de preview e o que o CI valida. A opção "merge back to <base> locally" está indisponível. A opção "keep the branch as-is" permanece válida — essa é uma decisão de adiar, não de pular a validação.

Se ausente — recorra e não perca nada que bloqueie a correção:

  • Execute a suíte de testes diretamente.
  • Trate o upstream do branch, ou main, como base; confirme com o usuário antes de prosseguir.
  • Pule a limpeza de worktree na Fase 6; delete o branch normalmente.

Fase 1: Stage e Commit

git status --short
git branch --show-current
git log --oneline @{upstream}..HEAD 2>/dev/null || echo "Nenhum upstream configurado"

Árvore de decisão:

  • Na main com alterações não staged → criar branch, commit, push, PR
  • Em branch de feature com alterações não staged → commit, push, PR (ou atualizar PR existente)
  • Em branch de feature com commits não enviados → push, PR (ou atualizar PR existente)
  • Em branch de feature com PR existente → push (PR já existe)

Se houver alterações não staged:

  • Pergunte ao usuário se todas as alterações devem ser incluídas ou arquivos específicos
  • Se as alterações abrangerem múltiplos escopos, sugira dividir

Elabore a mensagem de commit:

TipoQuando
featNova funcionalidade
fixCorreções de bugs
docsApenas documentação
choreConfiguração, dependências, ferramentas
refactorReestruturação de código, sem mudança de comportamento
testAdição ou modificação de testes
ciAlterações em fluxos CI/CD

Formato: <tipo>[escopo opcional]: <descrição imperativa>

Regras:

  • Modo imperativo ("add", não "added" ou "adds")
  • Primeira palavra após dois pontos em minúsculo
  • Sem ponto final
  • Curto (50 caracteres ou menos para o assunto)
  • Descreva o que o commit faz, não como

Apresente a mensagem de commit proposta ao usuário e confirme antes de commitar.

Fase 2: Branch e Push

Se estiver na main, crie um branch:

<tipo>/<descrição-curta>

Exemplos:

  • feat/oauth-login
  • fix/null-response-handling
  • docs/release-workflow-permissions

Push:

git push -u origin $(git branch --show-current)

Fase 3: Abrir PR

Título do PR = mensagem de commit convencional (usada para squash-merge na main).

Estrutura do corpo do PR:

## O que mudou

[Descrição específica das adições/modificações/remoções]

## Por quê

[Motivação — qual problema isso resolve?]

Criar usando gh CLI:

gh pr create --title "<mensagem de commit convencional>" --body "<corpo do PR>"

Se gh não estiver disponível, forneça a URL do PR a partir da saída do git push ou construa-a.

Verifique se o ambiente de preview foi criado. Se o projeto implantar previews por PR, aguarde esse workflow e confirme que o ambiente está acessível antes de entregar o PR:

gh pr checks --watch

Se o preview falhar ao implantar, reporte e pare. Um PR que ninguém pode revisar não foi finalizado.

Onde esta habilidade para. O ship-it encerra sua consciência de implantação no preview. A promoção para staging e produção não é sua responsabilidade — elas pertencem à habilidade de entrega do projeto (cloud-delivery-aks, ou seu equivalente). As Fases 4-6 abaixo são higiene de git e documentação, não implantação.

Fase 4: Aguardar Merge

Após o PR ser criado, pergunte: "Avise-me quando o merge for feito que eu cuido da limpeza e arquivamento."

Aguarde a confirmação do usuário (ex.: "merged", "done", "it's merged").

Fase 5: Pós-Merge — Arquivar Registros de Decisão

Especificações e planos são verbosos por design — bons para um humano ler o histórico, caros toda vez que Claude carrega um. Convertê-los em registros de decisão compactos mantém as decisões essenciais baratas de ler enquanto a narrativa completa permanece em disco, arquivada, sem custar nada até que alguém a abra deliberadamente.

Somente após o merge do PR, verifique se há specs/planos não convertidos:

ls docs/superpowers/specs/ 2>/dev/null
ls docs/superpowers/decisions/ 2>/dev/null

A habilidade recording-decisions fornece dois helpers para isso. Localize-os — a habilidade pode estar instalada no projeto ou globalmente:

for base in .claude/skills ~/.claude/skills; do
  d="$base/recording-decisions/scripts"
  [ -d "$d" ] && echo "$d" && break
done

Se encontrado, $d/doc-archive.sh lista specs não convertidos e imprime um prompt de conversão, e $d/index-rebuild.sh regenera o índice. Se não encontrado, faça o mesmo trabalho manualmente usando os passos abaixo — eles são autocontidos.

Se existirem specs/planos não convertidos:

  1. Pergunte ao usuário: "Encontrei specs/planos que podem corresponder a este trabalho. Deseja que eu os converta em registros de decisão compactos e arquive os originais?"

  2. Se sim, para cada spec:

    • Leia o conteúdo do spec
    • Gere um registro de decisão com frontmatter YAML:
      ---
      title: <extraído do spec>
      date: <do nome do arquivo do spec>
      component: <inferido do conteúdo>
      status: implemented
      supersedes: null
      dependencies: [<inferido>]
      ---
      
    • Escreva ~30-50 linhas capturando: decisões principais, interfaces, restrições
    • Salve em docs/superpowers/decisions/<data>-<tópico>.md
    • Mova o spec original para docs/superpowers/archive/specs/
    • Mova o plano correspondente para docs/superpowers/archive/plans/
  3. Reconstrua o índice mestre — regenere docs/superpowers/index.md a partir do frontmatter de cada registro de decisão, agrupado em uma tabela de Decisões Ativas (componente, título, data, dependências) e uma tabela de Substituídas (componente, título, substituída por). Execute $d/index-rebuild.sh se o localizou acima; caso contrário, escreva o arquivo diretamente.

  4. Faça commit do arquivamento:

    git add docs/superpowers/
    git commit -m "docs: arquivar specs e atualizar índice de decisões"
    git push
    

Fase 6: Limpeza

git checkout main
git pull
git branch -d <nome-do-branch>
git push origin --delete <nome-do-branch> 2>/dev/null || true
git fetch --prune

Verifique o estado limpo:

git branch --show-current
git log --oneline -3

Se o trabalho aconteceu em um git worktree, delegue a desmontagem a superpowers:finishing-a-development-branch (sua limpeza baseada em proveniência — ela sabe quais worktrees possui e deixa os gerenciados externamente em paz). Se essa habilidade não estiver disponível, remova o worktree manualmente com git worktree remove <caminho> e confirme com o usuário primeiro.

Princípios Chave

  • Uma suíte vermelha nunca se torna um PR — verifique antes de qualquer outra coisa (Fase 0)
  • Nunca faça push diretamente para a main — sempre branch + PR. O PR é a implantação de preview e a validação do CI; um merge local pula ambos. Isso substitui qualquer fluxo que ofereça merge local como uma opção.
  • A finalização termina no preview — merge, arquivamento e limpeza são higiene; promoção para staging e produção é trabalho de uma habilidade separada
  • Commits convencionais — o título do PR é a entrada do changelog
  • Arquive apenas após o merge — specs permanecem acessíveis durante a revisão
  • Registros de decisão são compactos — ~30-50 linhas, indexados por YAML, otimizados para LLM
  • Limpe completamente — sem branches obsoletos ou refs de rastreamento

Individual skills in this repo

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

lguidolin/change-hygiene-and-code-craft

Use when writing or refactoring code, structuring a commit or PR, or deciding whether to abstract duplication. Symptoms — mixing reorg with logic changes, a PR doing several things at once, a file growing large, the second copy of similar code, or unsure whether to DRY something up.

lguidolin/cloud-delivery-aks

Use when deploying to Kubernetes or Azure Kubernetes Service (AKS), configuring cloud secrets, setting up progressive rollout/canary, per-PR ephemeral environments, or k8s health probes. Keywords — Kubernetes, AKS, Key Vault, Argo Rollouts, Flagger, canary, blue-green, liveness, readiness, PodDisruptionBudget, HPA, rollback, GHCR.

lguidolin/commit-history-rewrite

Use when an existing repository has messy commit history that needs to conform to conventional commits before adopting release-please, or when intermediate WIP/fixup/merge commits need to be cleaned up.

lguidolin/conventional-commits-and-releases

Use when committing, writing a commit message, opening a PR that will be squash-merged, or configuring automated versioning/changelogs. Keywords — conventional commits, release-please, semver, feat/fix/chore, breaking change, changelog.

lguidolin/defense-in-depth-security

Use when handling untrusted input, secrets, authentication/authorization, or dependencies — or threat-modeling a new surface. Keywords — STRIDE, threat model, least privilege, secrets management, supply chain, dependency scanning, input validation, audit log, defense in depth.

lguidolin/designing-before-building

Use when starting a feature, fixing a non-trivial bug, or about to write implementation code — before any code exists. Symptoms you need this: "this is simple, I'll just code it", reaching for the editor before a design is approved, or an idea that hasn't been turned into a spec and plan.

lguidolin/engineering-constitution

Use when starting work in a project that follows the engineering constitution, orienting to its rules, or deciding which engineering practice applies to a task — spec writing, commits, testing, security, deploys, database, or UI work.

lguidolin/graphql-contract-testing

Use when writing a GraphQL query/mutation that the UI and a test will share, or building route/schema contract or smoke tests. Symptoms — copying a query into a test, a test asserting on query text, schema change that didn't break the UI build, or RLS/permission drift. Keywords — graphql-codegen, typed document, contract test, route smoke test.

lguidolin/init-repo-CI

Use when setting up a new repository with conventional commits, release-please, and CI automation, or when retrofitting an existing repository that lacks automated versioning and PR validation workflows.

lguidolin/interface-craft-and-accessibility

Use when building or styling UI — components, layouts, forms, design tokens — or making accessibility decisions. Keywords — a11y, WCAG, keyboard navigation, focus state, contrast, design system, minimalist UI, component reuse, ARIA, semantic HTML.

lguidolin/merge-gates-and-automation

Use when setting up or changing CI, pre-push hooks, or a task runner, or deciding what must pass before merge. Symptoms — tempted to put authoritative checks only in a local hook, skip CI, bypass with --no-verify, or unsure what gates a merge vs. runs locally.

lguidolin/observability-and-slos

Use when adding logging, metrics, tracing, health checks, SLOs, or alerting — or when building a service surface that needs to be operable and debuggable. Keywords — structured logs, OpenTelemetry, correlation id, RED metrics, liveness, readiness, SLI, SLO, error budget, alerting.

lguidolin/performance-and-scale

Use when working on hot paths, list endpoints, pagination, data-access in loops, or public interfaces/schemas. Symptoms — unbounded queries, N+1 access, no latency budget, optimizing without measuring, or changing an interface many consumers depend on. Keywords — pagination, N+1, Hyrum's Law, performance budget, bundle size.

lguidolin/postgres-postgraphile-rls-and-sql

Use when writing PostgreSQL, PostGraphile config, Row-Level Security policies, SQL schema files, or working on the Browser→App→PostGraphile→Postgres data path. Keywords — RLS, SECURITY DEFINER, search_path, pgSettings, grants, roles, GraphQL depth limit, query cost, statement_timeout, SQL file organization.

lguidolin/recording-decisions

Use when a design or architecture decision has been made and needs to be captured — writing a decision record or ADR, updating a decision index, noting a deferred idea, or superseding a past decision. Keywords — ADR, decision record, rationale, rejected alternatives, dependency index.

lguidolin/resilience-and-deploy-safety

Use when planning a deploy, designing a rollback, or responding to an incident or writing a postmortem. Keywords — deploy safety, rollback, immutable artifact, progressive delivery, canary, blast radius, incident response, blameless postmortem, error budget.

lguidolin/tests-as-a-control

Use when writing or modifying tests, when a test breaks during a refactor, or when testing permission/role rules. Symptoms — tempted to edit a test to make it pass, testing only the happy path, a deny-test that started passing, flaky tests, or unsure what to assert.

lguidolin/zero-downtime-migrations

Use when changing a database schema where data must survive the change — adding/removing/renaming columns, constraints, indexes, or backfilling. Symptoms — a destructive migration bundled with a code deploy, a NOT NULL column with a backfill, a table-locking UPDATE, or a rename. Keywords — expand/contract, parallel change, backfill, NOT VALID, CREATE INDEX CONCURRENTLY, graphile-migrate.

Habilidades Relacionadas