Pular para conteúdo

Registros de release

Um arquivo por release publicada: vX.Y.Z.md. É o documento que a constituição 1.7.0 e o FR-016 da 050 pedem — a decisão do Product Owner sobre o que foi ao ar, quando, e o que se observou depois.

Quem escreve: o papel de Product Owner, ao abrir o PR de release development → main. Quando fecha: depois do merge (que é o deploy), com as medidas do primeiro acesso e a evidência do que o CD fez.

A versão vive no mix.exs — fonte única (contrato do pipeline). O CD lê, publica ghcr.io/the-band-solution/theband:vX.Y.Z, cria a tag git e chama o webhook do Dokploy. Tag e imagem NASCEM do merge: não se tagueia à mão.

A lacuna: a v0.4.0 e a v0.5.0 saíram sem nota

Não existe v0.4.0.md nem v0.5.0.md. As duas releases foram publicadas — a tag existe, a imagem existe, o merge na main aconteceu — e o registro que este diretório pede não foi escrito. A ausência fica aqui em vez de num arquivo inventado: escrever agora uma nota com o que se deduz do histórico produziria uma decisão do Product Owner que ninguém tomou, com a mesma aparência das outras quatro.

O que existe no lugar, e é o que se pode afirmar:

Release Tag Data PR de release Também Commits
v0.4.0 v0.4.0 em 1b04c53 2026-09-03 #791 — "equipes declaradas, a tela da equipe complexa, e a 058 parcial (055, 056, 057, 058)", entrou por squash back-merge #793 1 (o squash)
v0.5.0 v0.5.0 em dda6239 2026-09-03 #795 (development → main) o bump e as pendências em #794; back-merge #796 64 desde a v0.4.0

O que falta, e é o que a nota existiria para dizer: o veredito de aceitação por user story, o que ficou de fora e por quê, a evidência do que o CD fez, as medidas do runbook §7, e o que se observou nas primeiras horas em produção.

Parte disso é recuperável do registro da v0.6.0, que declara que a v0.4.0 subiu sem a T014 com a issue já fechada, e que a v0.4.0 levou a feature 058 parcial. Recuperável não é escrito: quem retomar isto decide se escreve as duas notas em atraso, ou se registra que não serão escritas.

O bump vive na development, e não numa branch de release

O commit que sobe a versão no mix.exs é feito na development, antes de abrir o PR de release. O PR de release é development → main (Gitflow 1.7.0): com o bump já na development, os dois lados carregam a mesma versão e o back-merge seguinte não tem conteúdo a reconciliar.

Branch intermediária release/vX.Y.Z → main faz o contrário, e foi o que aconteceu na v0.2.0: o bump nasceu fora da development, entrou na main por squash, e a development continuou dizendo 0.1.0 no mix.exs enquanto a produção servia 0.2.0. Não é só desalinhamento cosmético — é a fonte única da versão afirmando algo que o ambiente contradiz, e qualquer imagem construída a partir da development sairia com a tag errada.

Comparando as duas releases deste projeto:

Release PR Head O bump chegou na development?
v0.1.0 #636 development sim
v0.2.0 #641 release/v0.2.0 não — corrigido pelo back-merge

O back-merge da L83 continua obrigatório depois de cada release, porque o squash diverge os históricos mesmo com os conteúdos iguais. Com o bump na development, ele passa a ser o que deveria ser: convergência de histórico, sem decisão de conteúdo nenhuma.

Modelo — vX.Y.Z.md

# vX.Y.Z — <o que esta release entrega, numa frase>

**Decidida por**: <papel de Product Owner> em <data>
**PR de release**: #NNN (`development → main`) · **Merge/deploy**: <data e hora>
**Aceitação que a sustenta**: docs/sprints/NNN/aceitacao.md

## O que embarca

Só entregáveis ACEITOS (recusado não embarca — o mesmo invariante do entregável de
sprint):

| User story | Issue | Sprint | PR |
|---|---|---|---|
| <título> | #NNN | NNN | #NNN |

## O que ficou de fora, e por quê

<US recusadas ou não terminadas, com o destino. Silenciar isto faria a release
parecer o sprint inteiro.>

## O que o CD fez

| Passo | Evidência |
|---|---|
| imagem | `ghcr.io/the-band-solution/theband:vX.Y.Z` — digest <sha256> |
| tag git | `vX.Y.Z` em <commit> |
| delivery | webhook aceito às <hora>; Dokploy reimplantou em <duração> |

## As medidas do release (runbook §7)

| Critério | Alvo | Observado |
|---|---|---|
| SC-001 | entrar e ver painel em <2min | |
| SC-002 | <15min de procedimento, <2min de indisponibilidade | |
| SC-004 | zero segredos em imagem e logs | |
| SC-005 | 100% das rotas de dados recusam sem sessão (27 rotas da 045) | |

## Ensaio de restauração (FR-008)

<Data do ensaio mais recente e os três números que bateram; ou a data agendada, se
esta release não carrega dado real ainda.>

## O que se observou depois

<Primeiras horas em produção: o que funcionou, o que surpreendeu, o que virou
issue. Release sem esta seção é release que ninguém olhou.>

Regras que não se negociam

  • Nada de segredo aqui — nem trecho, nem endereço com credencial embutida.
  • Rollback registrado: se a release voltou atrás, o arquivo diz para qual versão e por quê. Release revertida em silêncio apaga a única prova de que o problema existiu.
  • Uma release, um arquivo: reescrever o registro de uma versão publicada é reescrever história — correções entram como nota datada no fim.