Skip to content

Capítulo 15 — Review, Git e memória operacional

Depois que Spec virou propriedade verificável e os gates mecânicos passaram, ainda resta uma pergunta:

o que precisa existir para alguém aceitar esta mudança?

O diff mostra o que mudou.

Ele não mostra sozinho:

  • por que mudou;
  • qual requisito motivou;
  • que risco foi aceito;
  • quais alternativas foram rejeitadas;
  • que evidência sustentou a decisão;
  • quem aprovou;
  • como voltar.

Por isso, revisão não deve ser tratado apenas como leitura de código.

É uma etapa de governança da mudança.

O método deste livro usa a seguinte cadeia:

Spec
↓
Change Episode
↓
branch/worktree
↓
diff
↓
tests + evidência
↓
commit
↓
PR
↓
approval / resolution
↓
merge
↓
rollback point

Isso é método deste livro.

A ideia é simples:

nenhum elo deveria ficar órfão.

Diff é unidade de mudança, não de contexto completo

Section titled “Diff é unidade de mudança, não de contexto completo”

Diff é excelente para responder:

“o que mudou entre dois estados?”

Mas é limitado para responder:

  • “por que?”;
  • “qual risco?”;
  • “qual requisito?”;
  • “qual evidência?”;
  • “qual decisão?”.

Por isso, diff deve ser acompanhado de provenance.

Hassan et al. defendem que revisão de trabalho agêntico precisa apoiar-se em uma trilha de auditoria versionada que conecte artefatos, ferramentas e evidências, em vez de depender apenas da leitura de PRs crus ou de trajetórias de chat. 1

Mudanças menores são mais fáceis de:

  • revisar;
  • testar;
  • explicar;
  • reverter;
  • atribuir a uma intenção específica.

No método deste livro, small-batch change continua valendo no revisão.

Um PR enorme aumenta:

  • superfície cognitiva;
  • risco de comportamento escondido;
  • custo de regressão;
  • dificuldade de rollback.

Commit é mais que “salvar progresso”.

Pode funcionar como checkpoint semântico.

Um bom checkpoint responde:

  • que estado está sendo preservado?
  • que hipótese acabou de ser validada?
  • que parte da mudança ficou concluída?

Exemplo:

feat(auth): add token validation boundary

é mais útil que:

update files

Commit pequeno não significa commit arbitrário

Section titled “Commit pequeno não significa commit arbitrário”

Pequeno deve significar coeso.

Um commit idealmente contém uma unidade de intenção que:

  • compila ou é consistente;
  • tem evidência correspondente;
  • pode ser revertida com efeito compreensível.

Branch cria isolamento lógico.

No método deste livro, a branch deve representar uma Change Episode ou uma unidade de trabalho claramente identificável.

Exemplo:

feat/vibe-book-chapter-15-zero-draft

O nome não precisa conter toda a Spec.

Mas deve permitir ligação com o trabalho.

Git worktree permite manter mais de uma working tree associada ao mesmo repositório.

Isso é útil quando:

  • dois agentes trabalham em branches distintas;
  • uma tarefa precisa continuar enquanto outra é revisada;
  • queremos evitar troca constante de branch.

No método deste livro, worktree é implementação opcional, não requisito conceitual.

Quanto mais tempo a branch diverge:

  • maior chance de conflito;
  • maior diferença de contexto;
  • maior custo de integração;
  • maior risco de assumptions desatualizadas.

Por isso, branches de agente devem tender a ciclos curtos quando possível.

Um revisor não deveria começar perguntando apenas:

“esse código está bom?”

Perguntas melhores:

  • qual era a intenção?
  • que comportamento deveria mudar?
  • que comportamento deveria permanecer?
  • o diff corresponde à Spec?
  • os gates observam os riscos relevantes?
  • existe mudança fora do escopo?

Review escalável exige progressive disclosure: primeiro uma superfície resumida, depois aprofundamento em testes, logs, traces e evidências quando necessário. 2

Uma boa PR surface pode conter:

O que mudou.

Por que mudou.

O que entrou e o que ficou fora.

Quais gates passaram.

Blast radius e pontos sensíveis.

Como retornar.

O que ainda depende de decisão.

Depois o revisor abre detalhes sob demanda.

Pull Request é uma boundary de integração.

Ele junta:

  • branch;
  • diff;
  • checks;
  • comments;
  • approvals;
  • merge decision.

No método deste livro, o PR é parte da evidência chain.

Não é a cadeia inteira.

A PR deve apontar para a Spec ou Mission Brief equivalente.

Isso permite verificar:

criterion
↓
change
↓
evidência

Sem esse vínculo, revisão vira reconstrução de intenção.

Checks precisam estar visíveis ou linkados.

Exemplo:

acceptance criterion A
→ test_auth_refresh
→ CI run #239
→ PASS

O revisor não precisa confiar em “rodei localmente”.

O conjunto de commits conta a história executada.

Pode divergir do plano inicial.

Essa divergência não é necessariamente problema.

Mas precisa ser compreensível.

Mudança real frequentemente descobre fatos novos.

Por isso, revisão deve registrar:

  • plano inicial;
  • execução real;
  • divergências relevantes;
  • rationale.

Isso evita dois extremos:

  • fingir que tudo saiu como planejado;
  • tratar qualquer divergência como falha.

Approval representa decisão de integração.

No método deste livro, uma aprovação relevante deveria ter contexto suficiente para responder:

  • o que foi aceito?
  • com base em que evidência?
  • sob quais restrições?
  • quem tinha autoridade?

Hassan descreve Resolution Record como registro durável da decisão, ligado aos artefatos e evidências que a justificaram. Sem esse registro, revisão tende a ser evento isolado e o conhecimento se perde. 3

No método deste livro, podemos representar isso de forma leve.

Exemplo:

decision: approved
revision: abc123
evidência: CI #239, security scan #88
constraints: feature flag required
authority: maintainer
date: ...

Quando uma decisão é registrada, ela pode alimentar:

  • futura Spec;
  • runbook;
  • policy;
  • architecture record;
  • regression test;
  • onboarding;
  • incident analysis.

Review deixa de ser evento descartável.

Git preserva:

  • snapshots;
  • autoria;
  • timestamps;
  • branches;
  • merges;
  • diffs;
  • tags.

Mas Git não conhece automaticamente:

  • requisito;
  • rationale;
  • risco;
  • approval authority;
  • evidência de runtime.

Por isso, Git é infraestrutura da memória operacional, não a memória completa.

Commit message deve apontar para significado.

Ele não precisa conter um relatório inteiro.

Mas pode funcionar como índice para:

  • issue;
  • Change Episode;
  • PR;
  • migration;
  • decision record.

Tags podem marcar:

  • release;
  • baseline;
  • recovery point;
  • migration boundary.

Isso facilita reconstrução histórica.

Rollback point como referência de decisão

Section titled “Rollback point como referência de decisão”

Git ajuda a identificar estados de código antes e depois de uma decisão. Isso cria pontos claros para comparação e, em alguns casos, para revert.

Mas este capítulo não trata revert como recovery completa. Dados, side effects, credentials e artifacts podem exigir mecanismos operacionais adicionais.

Aqui, o papel do rollback point é preservar qual estado foi aceito e qual estado o precedeu. O Capítulo 16 tratará da promoção do artifact; os capítulos de Operations e Recovery tratarão da volta segura em runtime.

Squash, merge commit e rebase têm trade-offs.

Este livro não prescreve uma estratégia universal.

O requisito é preservar:

  • traceability;
  • coherent history;
  • evidência links;
  • rollback reasoning.

Pode simplificar history quando a branch contém muitos commits experimentais.

Risco:

  • perder checkpoints internos úteis.

Preserva estrutura da branch.

Pode facilitar reconstrução de integração.

Risco:

  • history mais ruidosa.

Pode produzir sequência linear e limpa.

Risco:

  • reescrever identidade de commits já compartilhados.

A escolha deve servir o modelo operacional.

Em equipes ou frotas de agentes com alto paralelismo, branches podem passar isoladamente e falhar quando combinadas.

Merge queue reduz esse risco ao testar combinações próximas do estado real de integração.

Isso pertence ao capítulo de delivery em maior profundidade, mas afeta revisão readiness.

Provenance responde:

de onde veio esta mudança e por que confiamos nela?

Uma cadeia mínima pode ser:

Spec ID
↓
Change Episode
↓
branch
↓
commit SHA
↓
CI run
↓
PR
↓
approval
↓
merge SHA

O projeto deste livro usa Change Episode como implementação prática de memória da mudança.

Ele registra:

  • intent;
  • risk;
  • autonomy;
  • branch;
  • evidência;
  • delivery;
  • outcome.

Isso é método deste livro.

Não tratamos Change Episode como conceito histórico inédito.

É uma implementação da necessidade mais geral de rastreabilidade e memória operacional.

O Project Command Center também é implementação.

Ele consolida:

  • status;
  • roadmap;
  • current state;
  • next action;
  • Change Episodes;
  • evidência pointers.

O conceito subjacente é mais amplo:

um sistema precisa de estado operacional legível e retomável.

Chat é útil para exploração.

Mas é fraco como memória canônica porque:

  • pode ser longo;
  • pode conter hipóteses descartadas;
  • pode não refletir estado final;
  • pode estar separado do código.

Decisões importantes devem migrar para artefatos duráveis.

Histórico existe, mas ninguém sabe onde procurar.

Memória operacional precisa de indexação.

Links ajudam:

  • Spec → PR;
  • PR → commit;
  • commit → CI;
  • PR → decision;
  • decision → deploy.

Um commit que mistura:

  • refactor;
  • feature;
  • migration;
  • formatting;
  • dependency update;

fica difícil de explicar e reverter.

Separação semântica melhora revisão.

Falha típica: aprovação sem revisão do scope

Section titled “Falha típica: aprovação sem revisão do scope”

Checks verdes podem esconder mudança fora do pedido.

Review precisa comparar touch set com intenção.

Hassan alerta para decisões que permanecem efêmeras quando não viram registro durável. 3

Se uma exceção importante foi aprovada apenas em chat, o próximo agente pode repetir a discussão do zero.

Se não sabemos que estado restaurar, o merge vira one-way door operacional.

Mesmo quando revert é simples, o ponto anterior precisa estar identificável.

Artefato operacional deste capítulo:

  • Spec/issue/episode está linkado?
  • diff corresponde ao pedido?
  • existe touch set inesperado?
  • checks relevantes passaram?
  • evidência está ligada aos critérios?
  • blast radius está explícito?
  • efeitos externos foram considerados?
  • approval authority está correta?
  • exceções estão registradas?
  • rollback point está identificado?
  • há efeitos não reversíveis?
  • decisão durável foi registrada?

Progressive disclosure reduz custo de revisão. 2

Comece com:

  • summary;
  • risk;
  • evidência;
  • diff stats.

Aprofunde onde o risco pede.

Isso é diferente de revisão superficial.

É revisão orientado por risco.

O trabalho do agente pode gerar:

  • milhares de ferramenta calls;
  • logs extensos;
  • tentativas descartadas.

A PR deve comprimir isso em informação decisória.

Mas a compressão precisa manter ponteiros para o detalhe.

A memória operacional nasce quando:

  • decisão;
  • evidência;
  • rationale;
  • outcome;

podem ser recuperados no futuro.

Isso reduz:

  • debate repetido;
  • regressão de policy;
  • redescoberta de risco;
  • dependência de memória individual.

Review encerra uma decisão sobre a mudança; não encerra sua jornada até produção.

A saída deste capítulo deve ser inequívoca:

  • intenção identificada;
  • diff e commits rastreáveis;
  • Evidence ligado à mudança;
  • decisão registrada;
  • revision/merge SHA conhecida.

O próximo capítulo recebe exatamente essa saída e responde outra pergunta:

como garantir que o artifact promovido é o artifact correspondente à revisão aprovada, sob permissions, rollout e recovery controls adequados?

Review é uma trust boundary entre mudança proposta e integração. Diff, CI, evidência pack e approval precisam referir-se à mesma revisão. Se o código muda depois da aprovação, a confiança precisa ser reavaliada.

Merge exige rastreabilidade mínima de Spec → diff → evidência → approval. O revisor deve conseguir reconstruir por que a revisão específica foi aceita sem depender de memória informal.

Antes do merge, identifique o rollback point e separe reversibilidade de código de reversibilidade operacional. Git pode restaurar conteúdo versionado; efeitos em dados, infraestrutura e sistemas externos podem exigir mecanismos adicionais.

Rastreabilidade deste capítulo:

  • CLM-053 — Hassan et al., trilha de auditoria versionada para supervisão orientada por evidências;
  • CLM-054 — Hassan, Resolution Record como decisão durável e memória institucional;
  • CLM-055 — Hassan et al., progressive disclosure para revisão escalável.

Change Episode, Review Checklist, cadeia Spec → Episode → branch → diff → evidência → commit → PR → approval → merge → rollback point e uso do Project Command Center são método deste livro.

O comparável de Liao permanece fonte limitada e não foi usado como autoridade factual.

Fontes de acesso limitado não foram usadas como autoridade factual neste capítulo.

Recursos relacionados:

  • Review Checklist;
  • Change Episode template;
  • PR evidence-link template;
  • Resolution Record leve;
  • rollback-point checklist;
  • provenance chain template;
  • futura visualização PCC de Spec ↔ commit ↔ CI ↔ PR ↔ deploy.

Living Book Expanded · capítulo executável

Review, Git e memória operacional: abrir Review Lab. A camada expandida preserva o texto estável e mantém repo/arquivo/commit e What changed? separados do manuscrito canônico.


  1. Hassan et al., Agentic Software Engineering: Foundational Pillars and a Research Roadmap, 4.2.4 From Code Review to Evidence-Based Oversight, p. 11. Rastreabilidade interna: CLM-053. ↩

  2. Hassan et al., Agentic Software Engineering: Foundational Pillars and a Research Roadmap, 4.2.4 From Code Review to Evidence-Based Oversight, pp. 11–12. Rastreabilidade interna: CLM-055. ↩ ↩2

  3. Ahmed E. Hassan, Agentic Software Engineering (2026), Structured escalation: the Consultation Request Pack and the Resolution Record, pp. 51–52. Rastreabilidade interna: CLM-054. ↩ ↩2