Sprint 003 — Corrigir a marca de ausência, e encerrar observação¶
Período: 2026-08-11 a 2026-08-17 (7 dias — cadência semanal) Feature: 003-editar-remover-ferramentas Plano: plan.md
Objetivo do sprint¶
A marca de "não mais observado" volta a significar o que diz, e a plataforma passa a saber encerrar a observação de uma organização.
Duas coisas erradas antes de começar¶
Registradas em vez de omitidas, porque as duas são minhas.
Implementei a 003 sem abrir sprint. A skill sprint-backlog diz, na primeira
linha, que ela é obrigatória antes de implementar — e eu fui de tasks.md direto para o
código. O trabalho está rastreável pelas 30 tarefas, mas ficou fora do sprint enquanto
acontecia. Este documento o traz para dentro, declarando o que já estava feito.
A janela do sprint 002 ainda não fechou. A iteration diz 2026-08-10 a 2026-08-16, e o sprint foi encerrado e aceito no primeiro dia. É a segunda vez que a duração declarada não corresponde à ocorrida — a primeira virou parte da L17.
Este sprint parte de 11/08 e a iteration do 002 continua dizendo 16/08. Corrigir exige mexer na configuração de iterations, que é o que causou a L11 e custou reatribuir 96 itens. Fica como decisão pendente, não como correção silenciosa.
Herança — tudo com destino, antes de escopo novo¶
É a regra que a skill product-owner passou a exigir. Item aberto sem destino não é
trabalho, não é decisão e não é descarte.
| O que sobrou | De onde | Destino |
|---|---|---|
| L19 — marca de ausência sem escopo de organização | feature 001 | primeira fase deste sprint. Está ativa e errada agora |
| 003: F1, F2 e F3 implementadas | esta feature, fora de sprint | registradas como feitas, com o motivo. Não se refaz o que está pronto e verificado |
| 003: US2 — retomar | esta feature | entra neste sprint, depois da L19 |
| 003: US3 e telas restantes | esta feature | fora deste sprint, com o custo declarado abaixo |
| US2 e US3 da feature 002 | sprint 002 | no product backlog, sem iteration — decisão já tomada |
| Paridade Elixir/Python | sprints 001 e 002 | dívida declarada: 4 verificações contra 12. O gate Python é o que decide, e roda no CI |
| 10 vínculos sem lastro | feature 002 | fechada por limitação declarada, com o conceito nomeado em cada mapeamento |
connected_tools.status materializa situação |
feature 001 | dívida declarada, contra a ADR 0004 D7. Não ampliada pela 003 |
| Aprovação de revisão registrada | sprints 001 e 002 | bloqueada por ferramenta: com uma identidade, o autor não aprova. Fecha com bot ou GitHub App |
| Feature 004 — agendamento | fila da pessoa mantenedora | não entra, e a razão está abaixo |
Por que a L19 vem antes de tudo¶
Não é prioridade por severidade apenas. É dependência.
A promessa do retomar é "a coleta seguinte devolve vigência ao que a origem ainda mostra". Com a L19, a coleta marca e desmarca errado — não haveria como demonstrar o retomar funcionando, só afirmar. Entregar US2 sobre a L19 produziria uma verificação que passa sem provar nada.
E o defeito está ativo: EduardoNFraiz aparece com zero organizações vigentes estando em
duas observadas. Toda consulta que pede só o vigente devolve menos do que a plataforma
observa.
Por que a 004 não entra¶
Agendamento amplifica a L19. Hoje o estrago exige alguém disparar uma coleta; com sincronização periódica, cada execução remarca os vínculos das outras organizações sozinha, sem ninguém olhando.
Especificar a 004 agora também faria ela assumir uma API de observação que a 003 ainda pode mudar.
Lições aplicadas¶
Do registro acumulado — dezenove lições, L01 a L19.
| Lição | O que muda neste sprint |
|---|---|
| L19 | é o escopo da primeira fase, e a correção precisa de teste com duas organizações e duas coletas em sequência — a forma que os 151 testes não tinham |
| L18 — um critério atendido não é suficiente | a verificação da L19 não para em "o vínculo certo foi marcado": confere também que nenhum outro foi |
| L17 — execução revela o que implementação esconde | a L19 só apareceu ao demonstrar no banco real. Este sprint demonstra de novo, depois da correção |
| L03 — teste com dado inválido acha o que o caminho feliz esconde | o teste da L19 é a violação: coletar A e conferir que B não foi marcada |
| L11 — configurar iterations recria as existentes | nenhuma alteração de iteration sem snapshot antes |
| L12 — PR não aberto na hora carrega outra feature | o PR da 003 é aberto quando a fase pedir |
| L14, L15 — revisão | todo PR nasce com revisor pedido, e a lacuna de aprovação é declarada |
Escopo¶
| # | Fase | Estado |
|---|---|---|
| F0 | Herança: corrigir a L19 | a fazer — primeira |
| F1 | Base de conhecimento: duas causas | feito, fora de sprint |
| F2 | Eventos append-only e estado derivado | feito, fora de sprint |
| F3 | Encerrar: marcar por vínculo, destruir credencial | feito, fora de sprint |
| F4 | US2 — retomar | a fazer |
| F5 | US3 e telas restantes | fora do escopo |
MVP¶
F0 e F4. A correção da L19 e o retomar.
O custo de F5 ficar de fora, declarado: sem as telas de T019 a T022, encerrar existe na API e a lista de ferramentas não distingue os três estados. Quem encerrar pela API não verá o resultado refletido. A tela de encerramento existe — foi entregue com F3 —, então o caminho principal está coberto.
Riscos¶
| Risco | Mitigação |
|---|---|
| Corrigir a L19 marcar de menos | o oposto do defeito atual, e igualmente errado. O teste confere os dois lados: o que deve ser marcado é, e o que não deve não é |
| Os dados atuais já estão marcados errado | a correção muda o comportamento futuro; o passado exige decisão à parte — não desmarcar por conta própria, porque não se sabe o que a origem mostrava |
| Mexer em iterations | nenhuma alteração sem snapshot; a discrepância da janela do 002 fica declarada |
Definition of Done¶
- [ ] nove quality gates verdes
- [ ] a L19 tem teste com duas organizações e duas coletas em sequência
- [ ] a correção é demonstrada no banco real, e
EduardoNFraizvolta a mostrar duas organizações vigentes - [ ]
sprint-review.mdescrito, separando feito de não feito - [ ]
aceitacao.mdpercorrendo os critérios - [ ]
licoes-aprendidas.mdatualizado - [ ] revisão independente — declarada, nunca marcada como cumprida por quem implementa