Sprint 004 — Issues e projetos das organizações observadas¶
Período: 2026-08-11 a 2026-08-17 (7 dias — cadência semanal) Feature: 004-issues-e-projetos Plano: plan.md Tarefas: tasks.md — 42, das quais 29 neste sprint
Objetivo do sprint¶
A plataforma passa a saber qual trabalho existe nas organizações observadas — e a mostrar, ao lado, o que ela não conseguiu classificar e por quê.
O que este sprint faz diferente por causa das lições¶
Vinte e quatro lições no registro acumulado. Estas entram como restrição:
| Lição | O que muda aqui |
|---|---|
| L19 — marca de ausência por tenant marca o que é de outra organização | mark_issues_no_longer_observed/3 exige repository_id na assinatura, e a versão de aridade 2 não existe. A L19 impedida no tipo, num volume quatro vezes maior: 14 repositórios em vez de 3 organizações |
| L21 — função testada sem consumidor não é entregue | nenhuma fase termina em API sem tela. T028 fecha a US1; as cinco funções de consulta (T021) existem porque a tela as usa, não antes |
| L22 — gate diferencial sem gate de sucesso | mix gates confere código de saída de cada derivação, não só o diff. Foi o que deixou o gate vermelho por semanas |
| L23 — aviso de verificação pulada é reprovação | mix gates provisiona o venv, e o validador Python valida forma. Nenhum gate roda com \| tail |
| L24 — caminho do ambiente limpo não é testado por quem tem o ambiente | T001 é exercitada com o .venv removido, e as migrações com rollback |
| L18 — um critério atendido não é suficiente | 7 dos 15 SC são pela violação. T023 confere que #3 não é épico; T022 confere que 0 issues de outro repositório foram marcadas |
| L11 — configurar iterations recria as existentes | nenhuma alteração de iteration. Ver a limitação abaixo |
| L12 — PR não aberto na hora carrega outra feature | o PR #105 está aberto desde o planejamento, e recebe os commits do sprint |
| L03 — dado inválido acha o que o caminho feliz esconde | os testes usam o dado real, que já contém uma violação de sro.rule07 — uma tarefa sem pai |
Herança — tudo com destino antes de escopo novo¶
Regra da skill product-owner. Item aberto sem destino não é trabalho, não é decisão
e não é descarte.
| O que sobrou | De onde | Destino |
|---|---|---|
| #81, #82 — US2 e US3 da feature 002 | sprint 002 | product backlog, sem iteration — decisão tomada |
| #98, #99, #100 — papéis Scrum | decisão de cadastro manual | product backlog, sem iteration |
| #104 — US3 da feature 003, telas T019 a T022 | sprint 003 | product backlog, sem iteration |
| Reparo do dado histórico da L19 | feature 001 | acontece na próxima coleta real de cada organização — não se desmarca o que não se sabe se a origem mostrava |
| Janela da iteration do sprint 002 | sprint 002 | decisão pendente: corrigir exige mexer em iterations, causa da L11, que custou reatribuir 96 itens |
| Iteration dos sprints 003 e 004 | — | não existem, pelo mesmo motivo. Limitação declarada abaixo |
| Paridade Elixir/Python | sprints 001 e 002 | dívida declarada: 4 verificações contra 12. O gate Python é o que decide, e roda no mix gates |
connected_tools.status materializa situação |
feature 001 | dívida declarada, contra a ADR 0004 D7. Não ampliada: esta feature não materializa sro_user_stories.status |
| RSRO e SYS_SWO sem estereótipo | base de conhecimento | eram 16 conceitos; a regra da fronteira reduziu a exigência desta feature a um — a T001. Os outros 15 ficam como dívida declarada |
| Aprovação de revisão registrada | sprints 001 a 003 | bloqueada por ferramenta: com uma identidade, o autor não aprova o próprio PR. Fecha com bot ou GitHub App |
| F4 e F5 da feature 004 | esta feature | fora deste sprint, com o custo declarado abaixo |
Sprint no GitHub¶
Projeto: The Band
Iteration: não existe para este sprint — e é limitação declarada, não esquecimento.
O campo de iteração do projeto tem duas iterations configuradas: Sprint 001 e
Sprint 002. Acrescentar Sprint 003 e Sprint 004 exige alterar a configuração do
campo, que é exatamente o que causou a L11 — a alteração
recriou as iterations existentes com novos identificadores, e 96 itens perderam a
atribuição.
O escopo do sprint é rastreado por este documento e pelas issues, que estão no
projeto. A ordem do backlog usa Priority.
Tipos de issue desta organização¶
Epic e User Story não existem na organização, e não foram criados. A
organização usa Feature, Task e Bug, e a regra de roteamento já aceita Feature
como user story atômica.
Criar os tipos alteraria a configuração da organização para casar com um documento —
e inverteria a precedência que a própria regra declara: a estrutura vence o rótulo.
O mapeamento está em
rules/tenants/the_band_solution.yaml,
e a US3 desta feature entrega a tela que o torna ajustável sem editar YAML.
User stories selecionadas¶
| # | User story | Tipo | Issue | Priority | Estimate | Cenários | Neste sprint |
|---|---|---|---|---|---|---|---|
| US1 | Saber quais issues existem, e o que elas são | Feature | #106 | P0 | — | 8 | sim |
| US2 | Enxergar os quadros e o que cada item carrega | Feature | #107 | P1 | — | 9 | não |
| US3 | Ver e ajustar o mapeamento dos tipos | Feature | — | P1 | — | 8 | não |
| US4 | Restringir quais repositórios são observados | Feature | #108 | P2 | — | 4 | parcial |
Priority carrega a importance — valor para a organização. Estimate carrega a
complexity. Estimate em branco significa desconhecido, não zero: nenhuma
estimativa foi feita, e preencher com zero mediria como se a decisão tivesse sido
tomada.
US3 não tem issue ainda — foi especificada depois da criação das issues, e é pendência explícita em vez de link inventado.
US4 entra parcialmente: a exclusão de repositório e o repositório inacessível (T011, T012) são a base da US1, porque definem o escopo da marca de ausência. A tela de gestão de repositórios fica fora.
Tarefas¶
| # | Tarefa | Fase | Atende | Issue | [P] | Estado |
|---|---|---|---|---|---|---|
| T001 | Anotar o kind referenciado | F0 | US1 | #109 | — | a fazer |
| T002 | Provar que a referência é uma tabela só | F0 | US1 | #110 | — | a fazer |
| T003 | Declarar a regra do tenant | F1 | US1 | #111 | sim | a fazer |
| T004 | Escrever a consulta de repositórios | F1 | US1 | #112 | sim | a fazer |
| T005 | Escrever as consultas de issues | F1 | US1 | #113 | sim | a fazer |
| T006 | Declarar o conector de issues | F1 | US1 | #114 | — | a fazer |
| T007 | Migrar a tabela do kind referenciado | F2 | US1 | #115 | — | a fazer |
| T008 | Migrar a extensão do repositório | F2 | US1 | #116 | — | a fazer |
| T009 | Migrar o repositório observado | F2 | US1 | #117 | — | a fazer |
| T010 | Descobrir os repositórios da organização | F2 | US1 | #118 | — | a fazer |
| T011 | Excluir repositório da observação | F2 | US4 | #119 | — | a fazer |
| T012 | Marcar repositório inacessível | F2 | US4 | #120 | — | a fazer |
| T013 | Migrar a issue coletada | F3 | US1 | #121 | — | a fazer |
| T014 | Migrar a promoção da issue | F3 | US1 | #122 | — | a fazer |
| T015 | Migrar vínculos e recusas | F3 | US1 | #123 | — | a fazer |
| T016 | Gravar a issue coletada | F3 | US1 | #124 | — | a fazer |
| T017 | Promover pela regra versionada | F3 | US1 | #125 | — | a fazer |
| T018 | Gravar a divergência entre declarado e derivado | F3 | US1 | #126 | — | a fazer |
| T019 | Relatar por repositório o que foi promovido | F3 | US1 | #127 | — | a fazer |
| T020 | Registrar mudança de classificação entre coletas | F3 | US1 | #128 | — | a fazer |
| T021 | Consultas de issues, promoções e lacunas | F3 | US1 | #129 | — | a fazer |
| T022 | Registrar a lacuna com o nome do tipo | F3 | US1 | #130 | — | a fazer |
| T023 | Derivar épico de atômica | F3 | US1 | #131 | — | a fazer |
| T024 | Recusar ciclo no comando | F3 | US1 | #132 | — | a fazer |
| T025 | Registrar referência fora do escopo | F3 | US1 | #133 | — | a fazer |
| T026 | Marcar ausência por repositório | F3 | US1 | #134 | — | a fazer |
| T027 | Interromper coleta pelo limite de consumo | F3 | US1 | #135 | — | a fazer |
| T028 | Tela de issues com lacunas | F3 | US1 | #136 | — | a fazer |
| T029 | Provar o isolamento entre tenants | F3 | US1 | #137 | — | a fazer |
Tarefa não recebe Priority: herda a da user story que atende.
Estados: a fazer · em andamento · feito · bloqueado · não iniciado
Fora do escopo deste sprint¶
| Item | Tarefas | Custo declarado |
|---|---|---|
| F4 — quadros, campos e iterações | T030 a T039 | sem elas não há sprint, backlog nem valor de campo. A dependência é nessa direção: item de quadro aponta para issue, e entregar quadros antes produziria backlogs vazios |
| F5 — tela de quadros | T040 | idem |
| US3 — tela de mapeamento | ainda sem tarefas | a regra do tenant fica declarada em YAML (T003), e ajustá-la exige editar o repositório. A lacuna fica visível pela US1 e inendereçável pela interface até esta tela existir |
| Fechamento | T041, T042 | dependem do MVP |
Riscos e dependências¶
| Risco | Mitigação |
|---|---|
| Errar composição por atendimento — tarefa como parte de user story | é o defeito da feature. T023 usa os seis casos reais, e a asserção que importa é #3 com nove sub-issues não ser épico. Se ela falhar, 78 tarefas se ligam a épicos |
| Repetir a L19 em 14 repositórios | repository_id obrigatório na assinatura, e T022 testa com dois repositórios e duas coletas em sequência |
| Volume de issues estourar o limite de consumo | checkpoint por repositório; retomar não recomeça o repositório inteiro (T027) |
| Sub-issues indisponíveis na instância | detectar e declarar que a distinção épico/atômica não é feita. Nunca cair para heurística de lista em markdown |
| A regra de roteamento estar errada | tem status: proposed. A feature a mede: a lacuna por motivo é a métrica que diz onde ela erra. Corrigir é consequência, não pré-requisito |
refused_links nascer e ficar vazia |
declarado no plano como previsão, com critério de reversão: vazia depois de duas coletas reais em todos os tenants, vira contagem no relatório. T041 registra a contagem |
Definition of Done do sprint¶
- [ ]
mix gatesverde — os nove, conferidos por código de saída - [ ] os seis casos estruturais reais classificam certo, e
#3não é épico - [ ] a marca de ausência não atravessa repositório, provado com dois repositórios e duas coletas
- [ ] a soma de promovidas e não promovidas é igual ao total coletado, sob qualquer filtro
- [ ] issue de tipo desconhecido não promovida, e contada com o nome do tipo
- [ ] a divergência entre tipo declarado e conceito derivado está gravada, não só derivada
- [ ] V1 a V8 do quickstart executadas contra o dado real, com os números registrados
- [ ] a tela de issues no ar, mostrando promoções, lacunas e divergências
- [ ]
sprint-review.mdescrito, separando feito de não feito - [ ]
aceitacao.mdpercorrendo os critérios, um a um, com evidência - [ ]
licoes-aprendidas.mdatualizado - [ ] revisão independente — declarada, nunca marcada como cumprida por quem implementa