Post-merge hotfix (SDD)

Post-merge point fix outside the full SDD pipeline: no PRD or TRD, but TDD and required reviews (code review, QA, security, SRE) per the skill's criteria.

Sby Skills Guide Bot
DevelopmentAdvanced
109/15/2026
Claude CodeCursorWindsurf
#sdd#hotfix#post-merge#workflow#code-review

Recommended for


name: sdd-hotfix description: Correção pontual pós-merge, fora do ciclo normal de fatias do pipeline SDD. Use quando um bug é encontrado em produção (ou numa validação manual) depois que a spec relacionada já foi mergeada, ou para uma melhoria pontual sem spec de origem — sem PRD/TRD, mas ainda com TDD e as revisões relevantes (code review sempre; QA/segurança/SRE conforme o critério desta skill).

/sdd-hotfix

Formaliza o processo de correção pontual pós-merge: um bug encontrado em produção (ou numa validação manual) depois que a spec relacionada já concluiu o pipeline e foi mergeada, ou uma melhoria pontual sem spec de origem nenhuma. Diferente das 7 etapas normais (docs/SDD-WORKFLOW.md), esta skill não gera PRD nem TRD — o pedido já é concreto o suficiente (um bug específico, um ajuste pontual) para não justificar o levantamento de produto/arquitetura completo. Isso não é uma saída para pular rigor: TDD, code review, e as revisões que se aplicarem continuam obrigatórias.

Quando usar

  • Um bug foi encontrado em produção (ou durante docs/POST-MERGE-VALIDATION.md) numa feature cuja spec já está com todas as fatias mergeadas — não é o caso de "fatia ainda em andamento" (isso volta para /sdd-implement normalmente, achados de revisão da própria fatia).
  • Uma melhoria pontual e de baixo risco é pedida sem nenhuma spec de origem (nunca passou por /sdd-prd).
  • Não use para uma mudança que na prática é uma feature nova (critério de aceite novo, decisão de arquitetura relevante, mais de uma fatia de esforço) — isso é /sdd-prd normalmente, mesmo que o pedido pareça pequeno à primeira vista. Se a correção crescer em escopo/risco no meio da execução desta skill, pare e migre para o fluxo completo em vez de continuar aqui (mesmo espírito de specs/_template/oneshot.template.md).

Passos

  1. Identifique a spec relacionada, se houver. Se o bug está numa área de código que uma spec existente em specs/ introduziu ou alterou por último, essa é a spec relacionada — os artefatos desta rodada (code-review.md/qa-report.md/security-review.md/sre-review.md) são editados in-place nela, com uma linha nova na respectiva "Histórico de aprovações por fatia" usando hotfix-<data> (ex.: hotfix-2026-09-01) no lugar do identificador de fatia (F-N). Se não há nenhuma spec relacionada (melhoria pontual sem origem), crie um diretório dedicado specs/<NNNN>-<slug-curto>/ (próximo número sequencial livre em specs/) contendo só os artefatos de revisão que se aplicarem — sem prd.md/trd.md. 1b. Gate obrigatório: confirme/crie a Issue GitHub deste hotfix antes de criar a branch. Verifique remote GitHub configurado e autenticado (git remote -v, gh auth status).
    • Se houver: se o bug/ajuste já tem uma issue aberta (o usuário citou o número, ou ela existe no repositório), use-a; senão crie uma via gh issue create descrevendo o bug/ajuste, com o label de tipo apropriado (bug ou enhancement). Nenhum hotfix começa sem essa issue — sem exceção, mesmo para uma correção de uma linha. Se o passo 1 identificou uma spec relacionada, identifique essa issue estruturadamente contra ela (docs/QUALITY-GATES.md, seção "TRD"): reaproveite o milestone da spec se ele já existir (gh api repos/<owner>/<repo>/milestones filtrando por título <slug> — o mesmo milestone que architect cria por spec, .claude/agents/architect.md); se ainda não existir nenhum milestone para essa spec/projeto (spec sem decomposição de tarefas em issues), aplique em vez disso um label spec:<slug> (crie com gh label create se faltar). Sem spec relacionada (melhoria pontual sem origem), não há identificação de spec a aplicar.
    • Se não houver remote GitHub configurado/autenticado: pare aqui, não crie a branch — peça ao usuário para configurar git remote + gh auth login antes de prosseguir. Não há alternativa "sem GitHub" para hotfix (diferente do PRD, que dispensa GitHub).
  2. Nomeie a branch seguindo a tabela de prefixos de docs/GIT-WORKFLOW.md (seção "Mudanças no próprio pipeline", mesma tabela vale para hotfix de qualquer projeto): hotfix/<slug> se algo já quebrado em produção/main precisa de correção urgente; fix/<slug> se é uma correção sem urgência de produção, ou a melhoria pontual sem spec de origem. <slug> curto em kebab-case descrevendo a correção. Crie a branch a partir de main atualizada.
  3. Implemente com TDD estrito, mesmo rigor de .claude/agents/backend-developer.md/ .claude/agents/frontend-developer.md (teste que falha primeiro, código mínimo, refactor) — invoque o agente correspondente à trilha afetada (Agent tool) passando esta instrução: sem TRD/PRD desta vez, o "plano" é a descrição do bug/ajuste desta rodada e o escopo do passo 1. Se a correção se aplica a múltiplos pontos de entrada estruturalmente equivalentes (mesmo padrão de UI/lógica duplicado em N lugares — ex.: N formulários de upload usando o mesmo hook compartilhado, N validações idênticas em rotas irmãs), inclua explicitamente na instrução: "aplique a correção com paridade de teste em todos os N pontos, não só paridade de implementação" — já aconteceu de a implementação sair correta nos N pontos, mas só alguns ganharem teste de integração dedicado ao novo caminho, achado só pelo code-reviewer numa rodada extra de correção evitável. Ainda assim, apresente esse plano mínimo ao usuário via AskUserQuestion antes do primeiro commit (mesmo gate de aprovação de sempre, só que sobre um escopo bem menor). Se o plano envolve mutação real de infraestrutura/config vars de produção ou geração deliberada de tráfego/carga (ex.: múltiplos logins concorrentes para validar esgotamento de conexão), sinalize isso no próprio texto apresentado nesta AskUserQuestion — essas duas categorias são tipicamente bloqueadas pelo classificador de modo automático desta sessão para orquestrador e subagentes, exigindo execução manual do usuário ou uma regra de permissão explícita; já aconteceu de um hotfix de infra só descobrir esse bloqueio durante a execução, depois de comandos já terem falhado, em vez de antecipado no plano. Abra o PR cedo, em modo draft, com Closes #N referenciando a issue do passo 1b (sempre existe, é o gate obrigatório). Se outra tarefa desta sessão pode estar ativa no mesmo repositório, use isolamento de working tree (docs/GIT-WORKFLOW.md, seção "Isolamento de working tree entre agentes concorrentes").
  4. Rode a suíte completa com cobertura (e o comando de build/empacotamento real, se a trilha afetada tiver um — docs/TESTING.md) ao final, gravando o resumo em specs/<slug-da-spec-relacionada-ou-dedicada>/coverage/hotfix-<data>-<trilha>.md, mesmo padrão de qualquer fatia.
  5. Decida as revisões desta rodada — critério objetivo, não uma decisão manual reavaliada a cada vez:
    • Code review: sempre. Toda correção pontual passa por /sdd-code-review contra o PR desta rodada antes do merge — sem exceção, mesmo para uma mudança de uma linha.
    • QA: se há um critério de aceite concreto a validar. Se a correção reafirma um comportamento que já tinha um critério de aceite no PRD/TRD original (ele estava quebrado, ou um novo critério pontual surge do próprio bug), rode /sdd-qa contra esse critério. Uma correção puramente técnica sem critério de aceite de produto associado (ex.: corrigir uma falha de performance sem mudança de comportamento observável) pode pular o QA — registre essa decisão com o heading padronizado ## Decisão: QA pulado (justificado) no qa-report.md desta rodada (crie o arquivo a partir do template se ainda não existir, só com essa seção — não é um relatório de execução de QA), com a justificativa completa logo abaixo. Nunca registre essa decisão em texto livre sem esse heading — é o que permite a /sdd-status//sdd-pending (skills/status/scripts/sdd-status.sh/.ps1) reconhecerem isso como um estado terminal válido em vez de "veredito não identificado", evitando que o usuário seja questionado à toa sobre algo já decidido e justificado.
    • Segurança: sempre que o diff tocar qualquer item do critério objetivo de docs/QUALITY-GATES.md (seção "Segurança (security-engineer)") — autenticação, autorização, gestão de sessão, dados pessoais/sensíveis, ou qualquer ponto de entrada aceitando identificador externo (e-mail, identidade SSO, token) — independente do tamanho da mudança. Fora desses casos, decisão do orquestrador, mas registrada no artefato desta rodada (nunca implícita).
    • SRE: só se houver impacto de infraestrutura, CI/CD, ou dependência (mudança em infra/, .github/workflows/, Dockerfile, ou manifesto de dependências). Uma correção isolada em código de aplicação sem tocar nada disso pula o SRE. Apresente essa decisão (quais revisões rodam e por quê) ao usuário via AskUserQuestion antes de prosseguir, oferecendo a opção de rodar uma revisão adicional mesmo que o critério acima não a exija.
  6. Rode cada revisão decidida no passo 5 normalmente (/sdd-code-review, /sdd-qa, /sdd-security, /sdd-sre), contra o PR desta rodada — cada uma edita in-place o artefato identificado no passo 1, com a linha hotfix-<data> no histórico de aprovações. Mesma regra de "Auto-aprovação nunca é o gate real" (.claude/skills/sdd-implement/SKILL.md) — nenhum agente que implementou a correção escreve o próprio veredito. 6b. Antes de informar que o merge fica a critério do usuário, confirme explicitamente que toda revisão decidida como aplicável no passo 5 já rodou com veredito aprovado — não confie em lembrar de tê-las rodado todas. Releia a decisão do passo 5 contra o estado real dos artefatos (code-review.md/qa-report.md/security-review.md/sre-review.md, seção "Histórico de aprovações por fatia", linha hotfix-<data>): se qualquer revisão marcada como aplicável ainda não tem veredito aprovado para esta rodada, não prossiga para o passo 7 — rode a revisão faltante agora, ou, se por algum motivo ela não puder rodar ainda, avise isso em destaque ao usuário antes de qualquer menção a merge, nunca como nota de rodapé. Já aconteceu de verdade: um hotfix teve seu PR de código mergeado sem que SRE tivesse sido acionado — code review, QA e segurança rodaram normalmente, SRE simplesmente não foi lembrado antes do merge, e a lacuna só foi descoberta ~9 dias depois. /sdd-status já sinaliza esse tipo de gap corretamente quando consultado — este passo existe para que o gap seja visto antes do merge, não só depois.
  7. Merge é decisão do usuário, nunca automática — mesma regra de GitHub Flow de qualquer PR deste pipeline. Depois do merge, se a correção resolve algo que docs/POST-MERGE-VALIDATION.md ou um item "VALIDAR DEPOIS" esperava, feche esse ciclo (/sdd-amend).

Registro do processo

Ao final, resuma ao usuário: spec relacionada (ou diretório dedicado), branch/PR, quais revisões rodaram e por quê (critério do passo 5), e onde ficou registrado o resultado — para que o próximo /sdd-status já reflita esta correção.

Quando usar sem os agentes

Se o Agent tool não estiver disponível, siga .claude/agents/backend-developer.md/ .claude/agents/frontend-developer.md para a implementação e os agentes de revisão correspondentes diretamente, mantendo o mesmo rigor de TDD e os mesmos critérios do passo 5.

Related skills