Pular para conteúdo

Sprint Review 004 — Issues e projetos das organizações observadas

Período: 2026-08-11 · Encerrado em: 2026-08-11 Backlog: sprint-backlog.md · Aceitação: aceitacao.md

Separa o que foi entregue do que não foi. Nada marcado como pronto sem evidência.

Resumo

Planejado Entregue
Fases F0 a F3 (MVP) 4
Tarefas 29 29
Testes 177 → 218
Lições novas — 2 — L25 e L26
Requisitos acrescentados durante o sprint — 15

O que foi feito

F0 — O kind referenciado, em um conceito

sys_swo.loaded_software_system_copy ganhou ontouml_stereotype: kind. Um conceito, não onze — a regra da fronteira da constituição IX reduziu a exigência, e os outros 10 da SysSwO seguem sem estereótipo de propósito.

Cinco testes travam a declaração, e provei que reprovam nos dois sentidos: trocando source_repository para kind, 4 de 5 passam; removendo o estereótipo do kind, 3 de 5.

F1 — Semântica declarada antes do código

Regra do tenant com os três tipos que a organização usa, com os identificadores conferidos pela API. Nove testes, e dois deles pela violação: mapear Priority para importance reprova nomeando o antipadrão.

F2 — Repositório observado

135 repositórios descobertos a partir das organizações, nenhum conectado individualmente. Tabela própria com o que qualquer hospedagem de Git fornece — e três coisas deixadas de fora com o motivo: is_fork (é relação, não propriedade), a lista de linguagens (exigiria conceito próprio), licença e tamanho em disco.

F3 — Issues, promoção, recusa e tela

4455 issues, 4455 promoções vigentes, 1614 vínculos de decomposição. A tela /trabalho no ar, com menu, paginação, organização e repositório.

O teste que importa passa: a issue #3, com nove sub-issues do tipo Task, é atômica. Tarefa atende, não compõe.

Mudanças de desenho decididas durante o sprint

Decisão O que mudou
sincronizar traz tudo o worker separado virou fase da mesma sincronização; um registro, um relatório
mapeamento por organização escopo passou de tenant para ferramenta conectada, configurado ao definir
repositório vira tabela atributos declarados na ontologia, e é isso que faz a extensão existir
identificador em tudo source_external_id obrigatório; tipo de issue tem id, ao contrário do que eu havia escrito
unicidade escopada pelo tipo o mesmo identificador pode designar artefatos diferentes
quadro é planejamento Projects v2 não é promovido a projeto

Evidência

O dado real, no banco de desenvolvimento

135 repositórios observados       4455 issues coletadas
4455 promoções vigentes           5022 no histórico (append-only)
1614 vínculos                        4 recusados (todos out_of_scope)
4833 payloads de issue             163 payloads de repositório
   0 issues marcadas como ausentes

Conferido contra a API: The-Band-Solution tem 14 repositórios e 189 issues. A plataforma coletou 14 e 189.

A tela, no ar

Trabalho
4455 issues coletadas · 135 repositórios observados

  PROMOVIDAS         1015     NÃO PROMOVIDAS       3440     DIVERGÊNCIAS   23
    épico              23       sem tipo na origem 3403
    user story atóm.  699       tipo desconhecido    37
    tarefa pretend.   110         Chore (17), Refactor (16), Hotfix (4)
    defeito           183

  organização        repositório        #   tipo    partes  promovida a
  leds-conectafapes  agentes-planning   2   Bug          0  defeito
  leds-conectafapes  agentes-planning   3   Chore        0  tipo desconhecido: Chore
  1–50 de 4455       página 1 de 90

Gates

Nove verdes, por mix gates, conferidos por código de saída — não por leitura de saída.

Gate Resultado
format, compile, credo, dialyzer passou
testes 218
knowledge.validate, knowledge.graph passou
validador Python passou, com a validação de forma
derivação reproduzível passou nas quatro ontologias

O que não foi feito

Item Por quê
F4 — quadros, campos e iterações fora do MVP declarado. Um sprint sem issues não responde nada, e a dependência é nessa direção
F5 — tela de quadros idem
F6 — tela de mapeamento ficou fora, e a lacuna que ela endereça cresceu: 3440 issues sem conceito. Virou a feature 005, já especificada
Contadores do sync records_collected conta só a fase de EO. A tela mostra "0 coletados" ao lado de "4266 issues nesta coleta" — contradição declarada, correção pendente
Iteration no Projects v2 não existe para os sprints 003 e 004. Criar mexe na configuração que causou a L11
Reparo do dado da L19 acontece na próxima coleta real de cada organização

Dois defeitos encontrados no dado real, e nenhum teste os pegava

O envelope do cliente (L26). Client.graphql/4 devolve {:ok, %{data: ...}} e eu casei {:ok, data}. O job completou com sucesso e coletou zero — nenhum erro, nenhum payload, e a explicação plausível era "a organização não tem repositórios".

O número como chave (L25). Liguei as partes ao pai por number, que é único dentro do repositório. Com 135 repositórios, partes de um foram ligadas ao pai de outro, e a tela mostrava 2 épicos onde havia 3.

Os dois são da mesma família das L22 e L23: sucesso silencioso. Em nenhum houve erro — houve ausência de resultado lida como resultado. E os dois só apareceram porque alguém olhou um número que não fechava com a origem.

Dívida gerada e mantida

O quê Situação
connected_tools.status materializa situação mantida, contra a D7. Não ampliada: esta feature não criou sro_user_stories.status, e a migração diz isso por extenso
Contadores do sync incompletos gerada neste sprint. A fase de trabalho não soma em records_collected
RSRO e SYS_SWO sem estereótipo 15 conceitos restantes. Era 16; a regra da fronteira exigiu um
Paridade Elixir/Python mantida: 4 verificações contra 12
refused_links como previsão 4 linhas no dado real, todas out_of_scope. Nenhuma por ciclo — a previsão do plano segue sem confirmação, e o critério de reversão continua valendo
Aprovação de revisão registrada bloqueada por ferramenta

Lições deste sprint

L25 — número da issue não identifica: é único dentro do repositório. A tabela já carregava a regra no índice único, e eu escrevi outra chave ao lado dela.

L26 — casar o envelope errado devolve lista vazia em vez de erro. Casamento de padrão largo esconde mudança de forma.

E uma observação que atravessa as duas, e as duas do sprint anterior: quatro lições seguidas sobre sucesso silencioso. L22 (gate que compara duas falhas iguais), L23 (aviso de verificação pulada), L25 (chave colidindo em silêncio), L26 (job que completa sem fazer).

O padrão é sempre o mesmo: a ausência de erro sendo lida como presença de resultado. E o que achou todos foi conferir um número contra a origem, não rodar a suíte.