Sprint 011 — Review¶
Período: 2026-08-12 · Feature: 012 — o vínculo que sumiu na origem PR: #278 · Aceitação: aceitacao.md
Escrita neste sprint, e não no seguinte. É a L44 aplicada a ela mesma.
Resumo¶
| Planejado | Entregue | |
|---|---|---|
| User stories | 3 | 3, uma delas provada só em teste |
| Tarefas | 9 | 8 feitas · 1 pendente de pessoa |
| Requisitos funcionais aceitos | 14 | 14 |
| Critérios de sucesso aceitos | 7 | 3 — quatro pendem do dado real |
O que foi feito¶
| Tarefa | Issue | Entregável | Aceito |
|---|---|---|---|
| T001 | #269 | mark_decomposition_links_no_longer_observed/3, escopada pelo repositório do pai |
sim |
| T002 | #270 | teste que fixa a ressurreição e a preservação de observed_at |
sim |
| T003 | #271 | idempotência, e a marca antiga que não se reescreve | sim |
| T004 | #272 | a fronteira do tenant, aserida pelo vínculo do vizinho | sim |
| T005 | #273 | a chamada no ramo de sucesso, depois de vincular/2 e antes de promover/2 |
sim |
| T006 | #274 | cinco casos de "não aconteceu nada", incluindo refused_links |
sim |
| T007 | #275 | log que nomeia repositório e número, e cala quando é zero | sim |
| T008 | #276 | tela recebendo o dado pela coleta, não por escrita direta | sim |
O que não foi feito¶
| Tarefa | Issue | Motivo | Destino |
|---|---|---|---|
| T009 | #277 | exige a chave mestra e a origem respondendo, e olho humano na tela de eo_lib |
pessoa mantenedora; segue aberta |
T009 é a única, e não é atraso: ela nunca foi executável por mim. Está declarada como pendente desde o backlog, e continua declarada — nunca contada como cumprida.
Evidências¶
mix gates → 10 gates verdes, código de saída 0
18 testes novos em três arquivos:
test/the_band/work_items/decomposition_absence_test.exs 6 casos
test/the_band/ingestion/decomposition_absence_test.exs 10 casos
test/the_band_web/live/decomposition_absence_screen_test.exs 2 casos
Medida que originou a feature, conferida no banco antes de existir código:
1666 vínculos · 0 marcados · 52 que a última coleta não reviu
eo_lib 29 · theband 15 · ResearchDomain 8
nos 52, pai e filha vigentes: 0 e 0
Dívida gerada¶
| Dívida | Por quê foi aceita |
|---|---|
| quarta função de marcação de ausência, sem abstração comum | os cortes não são iguais: issue corta por data, designado e rótulo cortam por lista. Generalizar juntaria coisas diferentes |
| o total de vínculos marcados por execução só existe no log | a pergunta "o que esta coleta deixou de ver" ainda não foi feita por ninguém; inventar o campo agora é padrão sem problema |
| este PR está empilhado sobre o #264 | a alternativa era esperar a revisão de um PR que já está pronto há um dia |
O que a análise e o plano acharam antes do código¶
Seis achados, e nenhum veio de rodar teste — todos de medir o banco ou ler o código:
| Fase | Achado |
|---|---|
| plano | FR-002 pedia gravar o started_at na marca, contra a convenção das três irmãs |
| plano | FR-013 pedia número novo na tela de sincronizações — o caso concreto do princípio X |
| análise | 12 dos 52 vínculos sustentam violações da sro.rule07: o painel cai de 293 para 281 |
| análise | a ordem contra promover/2 virou carga: classification/2 conta só vigentes |
| análise | FR-014 estava sem tarefa, e era testável |
| análise | T008 estava bloqueada, não pendente |
Sétima feature seguida em que a fase de análise acha defeito de desenho.
Lições deste sprint¶
Três, e as três nasceram de erro cometido dentro do sprint — não de teoria.
- L45 — sprint novo tirado da
mainnão enxerga o fecho do anterior enquanto o PR está aberto; - L46 — teste com corte temporal e dado montado no mesmo instante passa ou falha por sorte;
- L47 — vínculo entre repositórios só existe a partir da segunda coleta.
Detalhadas em licoes-aprendidas.md.
Depois do merge¶
Os PRs #264 e
#278 foram aprovados e incorporados na
ordem certa. main em 8677752, 10 gates verdes por código de saída, branches apagadas.
E o merge deixou uma coisa por fazer, que ninguém teria notado: a #263 continuou aberta. O corpo do PR dizia "Fecha #263", e o GitHub só reconhece a palavra em inglês — a menção cruzada aparece igual nos dois casos, e a issue fica aberta parecendo trabalho não feito. Fechada à mão, com a evidência, e virou a L48.
Uma quarta lição do sprint, e da mesma família das outras três: nenhum erro, e o resultado errado.
O que continua pendente¶
| # | O que | Por quê |
|---|---|---|
| #277 | a conferência no dado real | exige a chave mestra e a origem respondendo |
| #265 | o épico | fica aberto enquanto a #277 estiver — épico com verificação pendente não está pronto |
Quatro dos sete critérios de sucesso seguem declarados como pendentes. O código está na main;
o efeito dele no dado, não foi observado.
A reincidência, achada pela pessoa mantenedora¶
A pergunta foi "olhe a lista de issues, por que estão abertas ainda?", e a lista respondeu: a #246 — o pedido que originou a feature 011 — estava aberta desde o merge do PR #264, pelo mesmo motivo da #263. Dois PRs, o mesmo mecanismo.
Fechada com a evidência. E a conferência que a achou virou parte da L48: a lista de issues abertas é a conferência, e ela vale ao fechar o sprint — não só a issue que se lembra de olhar.