Sprint 016 — a geração mensal dos perfis¶
Período: a partir de 2026-08-16 · fim não declarado — ver Limitações abaixo
Feature: 027 geração mensal de perfis
Plano: plan.md · Tarefas: tasks.md
Branch: 027-geracao-mensal-de-perfis
Objetivo do sprint¶
O perfil de competências deixa de depender de alguém lembrar de clicar: a plataforma o escreve sozinha, uma vez por mês, para quem teve trabalho novo — e mostra numa tela o que a rodada fez e quanto custou.
Fase 0 — o que sobrou do sprint anterior, com destino¶
A regra da L12 é que nenhum escopo novo é selecionado enquanto o item anterior não tiver destino. O destino não precisa ser "concluído": pode ser devolvido, descartado com motivo, ou bloqueado com bloqueador nomeado.
| Item | Estado real | Destino |
|---|---|---|
| Feature 026 — perfil de competências, PR #330 | incorporado em 2026-08-16 às 13:06 UTC, commit 16c7388 |
concluído |
| Revisão independente do #330 | não aconteceu: reviews vazio no momento do merge, com pedido pendente a Adylla027 e EduardoNFraiz |
lacuna registrada, não marcada como cumprida — princípio VII |
sprint-review.md do sprint 014 |
não existe | pendência declarada abaixo |
| Sprints 015 e as features 018 a 026 | sem diretório em docs/sprints/ |
pendência declarada abaixo |
A pendência de processo, dita por inteiro¶
A conferência que a L44 manda fazer ao abrir um sprint encontrou o seguinte: docs/sprints/ vai até 014, e o registro de lições cita Sprint 015. As features 018 a 026 foram entregues sem sprint-backlog.md e sem sprint-review.md, embora as lições tenham continuado a ser escritas — o arquivo acumulado chegou a L59.
Ou seja: o mecanismo que produz aprendizado continuou funcionando, e o que produz rastro do que foi planejado contra o que foi entregue parou. É exatamente a metade que a L44 descreve como a que some sem nada falhar.
Este sprint não corrige o passado — reconstruir nove reviews de memória produziria documento pior que a ausência. O que ele faz é voltar a produzir, e registrar a lacuna para que ninguém a leia como "não houve sprint".
Lições aplicadas¶
Do registro acumulado, consideradas neste sprint:
| Lição | Origem | Como está sendo aplicada |
|---|---|---|
| L12 | Sprint 001 | a Fase 0 acima: a 026 recebeu destino antes de qualquer escopo novo ser selecionado, e a revisão que não aconteceu está declarada, não maquiada |
| L44 | Sprint 009 | a conferência mecânica foi feita ao abrir, e achou a lacuna de nove sprints sem documento |
| L58 | Sprint 015 | o #330 foi incorporado por squash durante esta sessão; a branch da 027 foi rebaseada sobre a main para o PR desta feature não mostrar a 026 de novo. Conferido com git log origin/main..HEAD: dois commits, os meus |
| L11 | Sprint 001 | por isso o sprint não vira iteration no GitHub: reconfigurar o campo recria as iterations existentes, e Sprint 001 e 002 perderiam identidade |
| L26 | Sprint 006 | a FR-016 separa falha de credencial de falha transitória, e 200 com lista vazia de modelos é erro em verify/2, nunca sucesso |
| L28 | Sprint 007 | os tokens de entrada são gravados por pessoa, e não só calculados para exibir — FR-020, T014 |
| L30 e L35 | Sprints 008 e 009 | o custo da rodada é medido contra o provedor de verdade, não estimado — T024, e é o único item que nenhum teste substitui |
| L59 | Sprint 015 | o verde do CI é conferido no commit, e não no PR: o gate de Credo que o 57c509f quebrou não apareceu no #330 porque os checks verdes eram do commit anterior |
Sprint no GitHub¶
Projeto: The Band · PVT_kwDODHSRm84BAAnT
Limitações declaradas, e não contornadas:
- o campo
Iterationparou no Sprint 002, iniciado em 2026-08-10 com sete dias. Não há iteration para os sprints 003 a 016. Criar a deste sprint exigeupdateProjectV2Fieldsobre a configuração do campo, e a L11 registra que essa mutação recria as iterations existentes — Sprint 001 e 002 perderiam identidade, e com ela a série que o produto pretende ingerir. Decisão de 2026-08-16: não mexer, e registrar aqui; - os tipos
EpiceUser Storynão existem na organização. SóTask,BugeFeature. Criá-los altera a configuração da organização inteira. As 28 issues foram criadas sem tipo próprio, com o rótuloenhancement, e a ligação com a feature vive no corpo de cada issue — o caminhospecs/027-geracao-mensal-de-perfis/tasks.md, que é o que permite reencontrá-las; - consequência: a hierarquia
Epic → User Story → Taskque a regra de roteamento espera não existe para este sprint. Quem for ingerir o repositório vai ler estas 28 issues como tarefas soltas.
User stories selecionadas¶
| # | User story | Prioridade | Tarefas | Critérios de aceitação |
|---|---|---|---|---|
| US1 | O perfil está lá quando eu abro | P1 | 11 | 4 cenários |
| US2 | Ver o que a rodada fez, e o que ela custou | P1 | 5 | 4 cenários |
As duas são P1 e entram juntas: a US1 sozinha é infraestrutura sem consumidor visível, o que o princípio VI proíbe. Priority e Estimate não foram gravadas no projeto — ver Limitações. Campo em branco significa desconhecido, nunca zero.
Tarefas¶
Setup¶
| # | Tarefa | Issue | Estado |
|---|---|---|---|
| T003 | Fila própria para as rodadas | #331 | a fazer |
| T004 | Limiares de regeneração na base de conhecimento | #332 | a fazer |
| T005 | Validação recusa limiar ausente ou inválido | #333 | a fazer |
Fundação¶
| # | Tarefa | Issue | Estado |
|---|---|---|---|
| T006 | Migração dos eventos de automação | #334 | a fazer |
| T007 | Migração das rodadas | #335 | a fazer |
| T008 | Migração das entradas de rodada | #336 | a fazer |
| T009 | Schemas das três tabelas | #337 | a fazer |
US1 — o perfil está lá quando eu abro¶
| # | Tarefa | Issue | Estado |
|---|---|---|---|
| T010 | Ler os limiares sem padrão embutido | #338 | a fazer |
| T011 | Decidir quem entra na rodada, e por qual motivo não | #339 | a fazer |
| T012 | Ligar e desligar com autor | #340 | a fazer |
| T013 | Abrir, registrar e encerrar a rodada | #341 | a fazer |
| T014 | A geração devolve o consumo | #342 | a fazer |
| T014a | O material continua sendo o histórico inteiro | #343 | a fazer |
| T015 | A rodada executa sequencialmente, com checkpoint | #344 | a fazer |
| T016 | Falha de credencial encerra a rodada | #345 | a fazer |
| T016a | Quem falhou volta na rodada seguinte | #346 | a fazer |
| T017 | O cron mensal enfileira uma rodada por organização | #347 | a fazer |
| T017a | Subir a versão não gera nada | #348 | a fazer |
US2 — ver o que a rodada fez¶
| # | Tarefa | Issue | Estado |
|---|---|---|---|
| T018 | Tela da geração automática | #349 | a fazer |
| T019 | Os nove números de cada rodada | #350 | a fazer |
| T020 | Ligar dispara a primeira rodada | #351 | a fazer |
| T020a | Pedir uma rodada a mão | #352 | a fazer |
| T021 | Uma organização não vê a rodada da outra | #353 | a fazer |
Já entregue nesta branch, e por isso fora da contagem: a credencial por organização — lib/the_band/ai.ex, a tela /ai e verify/2 na borda —, commit 46b433d, com 31 testes.
Fora do escopo deste sprint¶
| # | Tarefa | Issue | Por que fica de fora |
|---|---|---|---|
| T022 | O limiar novo vale na rodada seguinte | #354 | US3, P2. Depende da US1 existir, e o valor aparece quando alguém quiser ajustar — não na primeira rodada |
| T023 | Registro operacional sem chave e sem material | #355 | polimento |
| T024 | Medir o custo real de uma rodada | #356 | exige chave real e de 15 a 35 minutos de rodada contra o provedor. Fica de fora do sprint, e não do caminho: a FR-021 obriga essa medição antes de N e M serem fixados — ver Riscos |
| T025 | Quality gates verdes | #357 | roda ao fechar |
| T026 | Percorrer o quickstart a mão | #358 | roda ao fechar |
Silenciar isto faria o sprint parecer a feature inteira. Não é: são 23 das 28 issues.
Riscos e dependências¶
| Risco | Por quê | O que fazer |
|---|---|---|
| N e M ficam fixados sem a medição | a T024 está fora do sprint, e a FR-021 a exige antes de os limiares valerem |
os valores entram no YAML como iniciais, e o SC-002 diz que muda junto com a recontagem. Se a medição não acontecer, o sprint fecha com a dívida registrada, nunca com o número declarado por estimativa |
| Job Oban de 35 minutos | é fora do comum neste repositório | fila própria (T003) e checkpoint (T015). Reinício de nó no meio devolve o job à fila, e o checkpoint é o que impede isso de custar dinheiro |
| Revisão independente | o #330 foi incorporado sem ela; nada garante que o PR desta feature terá | pedir à equipe the-band ao abrir o PR, e conferir com gh pr view --json reviewRequests — a L14 registra que o gh sai com código zero mesmo quando o pedido é recusado |
| Provedor externo | 34 gerações seguidas podem esbarrar em limite de taxa | a FR-016 já separa isso de falha de credencial; se acontecer, vira medição para a T024 |
Definition of Done do sprint¶
- [ ] as 23 issues fechadas, ou repriorizadas com justificativa escrita
- [ ]
mix gatescom código de saída 0 — nunca com| tailnem| grep - [ ]
mix knowledge.validatepassando com a regraregenerationnova - [ ] PR aberto com revisor pedido à equipe
the-band, e o pedido conferido - [ ]
sprint-review.mdescrito, separando entregue de não entregue - [ ]
licoes-aprendidas.mdatualizado - [ ] a lacuna da revisão independente declarada, se persistir — nunca marcada como cumprida