Sprint 030 — A tela da equipe por vínculo, e a herança que ganhou tela¶
Período: 2026-09-07 a 2026-09-12 (cadência de uma semana) · fechado em 2026-09-13 Feature: 060 — a tela da equipe Plano: plan.md · Pesquisa: research.md · Protótipo: prototipo/ — aprovado em 2026-09-07 e 2026-09-08 Herança: 045 (D06 da v0.7.0) · 055 (FR-003 e o ato de subequipe)
Este backlog foi escrito depois do sprint, em 2026-09-13. A skill
sprint-backlogé obrigatória antes de implementar e não rodou: a 060 foi de spec a tela sem este documento, sem issues e sem iteration. O que está aqui é a intenção reconstruída a partir dotasks.mdde 2026-09-07 e dos PRs — não a intenção registrada antes de executar. A distinção importa porque a análise de aderência entre plano e execução, que este documento existe para permitir, não pode ser feita para este sprint: quem escreve já sabe o que aconteceu. Ver a lacuna 1 ao fim, e a lição L108.
Objetivo do sprint¶
A página da equipe passa a mostrar quem está nela por vínculo — observado e declarado, lado a lado —, e quem gere a estrutura passa a poder agir sobre cada linha: dizer que a pessoa saiu, que o vínculo nunca existiu, declarar ou trocar o papel, e criar papéis da organização a partir do que a estrutura mostra. E, na segunda aba, o fluxo da equipe em três granulações.
De onde este sprint veio¶
A spec 060 nasceu em 2026-09-06/07 do épico da tela da equipe: a página mostrava participação
sem dizer de onde vinha cada afirmação, e a saída de alguém não era declarável. O protótipo
(team-dashboard-structure.html) foi aprovado antes do código, e o prompt que o gerou está em
prototipo/. A ordem das tarefas é a das fatias verticais: a primeira tela é a T010, e antes
dela só o que a tela precisa para decidir quem vê botão — a concessão gerir estrutura da
equipe (T002–T007).
A herança entrou por revisão, não por planejamento. A revisão de 2026-09-10 (RETOMAR.md
daquele dia) achou três coisas fora da 060: a FR-003 da 055 era cláusula MUST desde 2026-09-06 e
não tinha tela — declare_team_membership/5 existia com 11 testes e zero chamadas em
lib/; o ato de criar subequipe fazia duas escritas sem transação; e o D06 da v0.7.0 (a
conta desativada) estava recusado por três razões que o #853 se propôs a fechar. Os três
entraram no mesmo período, e por isso estão aqui.
Lições aplicadas¶
Do registro acumulado. Registradas depois — o que se pode afirmar é o que a evidência dos PRs mostra, não o que foi lido ao abrir.
| Lição | Origem | Como aparece na evidência |
|---|---|---|
| princípio IV — contrato antes da primeira função pública | constituição | T001 escreveu os contratos antes de tudo (#817) |
| vertical slice — nunca infraestrutura sem consumidor na tela | constituição VIII | a T010 é a primeira tela, e T002–T007 existem só porque ela precisa do veredito |
| L38 / L53 — o custo de uma tela se mede pela diferença, com teto dos dois lados | 009, 013 | T013 mediu o teto de consultas das duas abas |
| L30 — conferir o número contra a origem | 003 | T006 substituiu pode_declarar_estrutura/4 e mediu: zero contas perderam escrita |
| L60 — o veredito é o código de saída | 019 | #853 exit 0 (2 026 testes), #857 exit 0 (2 028), #863 exit 0 (2 112), #860 exit 0 (2 085) |
| reinjeção de defeito como prova do teste | 029 | #853 reinjetou 4 e os 4 reprovaram; #857 desfez a transação e o teste nomeou a invariante; #863 reinjetou 4; #860 reinjetou 3 |
| L95 — pedir revisor não é obter revisão | 027 | aplicada pela metade: #816–#821 pediram revisor (1 cada, reviews 0); #853, #857, #860 e #863 não pediram |
L102 — git add -A numa árvore compartilhada |
nasceu aqui, 2026-09-09 | um PR que dizia mudar três arquivos mudou seis; refeito com caminhos explícitos |
| L103 / L104 — o protótipo não é o produto; aviso descartado vira atestado | nasceram aqui, 2026-09-10 | o detector de design passou a ignorar prototipo/ (#858) e a exigir as bibliotecas |
Sprint no GitHub¶
Projeto: The Band · 1 PR no
projeto (#817, com Iteration nula); os outros seis, fora.
Três limitações — declaradas, não contornadas¶
- A 060 não tem issue nenhuma. Nem épico, nem user story, nem tarefa.
/speckit-tasksrodou,/speckit-taskstoissuesnão. As 29 tarefas abaixo estão sem link de propósito — tarefa sem issue é pendência explícita, nunca link inventado. É a mesma lacuna da 052 no sprint 026, e o destino é o mesmo: criação retroativa depois da confirmação da aceitação, com cada issue dizendo que nasceu depois do trabalho; - Sem iteration. A iteration ativa no período (Sprint 024 — Mensagens e o botão da chave, 2026-09-05 a 2026-09-12) não recebeu item nenhum desta feature;
- Sem tipo. Consequência da 1 — não há o que tipar.
User stories selecionadas¶
Da spec 060, as seis que o tasks.md chama de PR 1. US6, US7 e US8 ficaram para a PR 2
(ver Fora do escopo).
| # | User story | Priority | Issue | Tarefas | Critérios |
|---|---|---|---|---|---|
| US1 | Quem está na equipe, e de onde veio cada afirmação | P1 | — | T010–T013 | AS 1–5, FR-001 a FR-013, SC-004, SC-007 |
| US2 | Declarar o papel de quem a origem mostra, e alterá-lo | P1 | — | T018–T020 | FR-014 a FR-018 |
| US3 | A pessoa saiu, e o que ela fez continua contando | P1 | — | T014–T015 | FR-019 a FR-023, SC-001, SC-013 |
| US4 | O vínculo que nunca foi | P1 | — | T016–T017 | FR-024 a FR-028, SC-002 |
| US5 | Criar o papel da organização a partir da estrutura | P1 | — | T021–T022 | FR-029 a FR-034, SC-005 |
| US9 | O fluxo da equipe inteira: burn, Prometido × Entregue, Monte Carlo | P3 | — | T026–T029 | FR-064, FR-084, SC-009; os três gráficos nas três granulações |
Priority é a importance — valor para a organização, e vem da spec. Estimate (a
complexity) não foi registrada: sem issue não há campo; a coluna não existe nesta tabela
para não sugerir que houve estimativa.
Tarefas¶
Todas executadas — os PRs estão na coluna Estado. A coluna Issue é — em todas, pela
limitação 1.
| # | Tarefa | Atende | Issue | Estado |
|---|---|---|---|---|
| T001 | Escrever os contratos antes da primeira função pública | fundação | — | feito · #817 |
| T002 | Declarar as duas concessões na base (role_grants.yaml) |
fundação | — | feito · #817 |
| T003 | Emendar a regra da evidência para a v3 | fundação | — | feito · #817 |
| T004 | A tabela e o schema da concessão de gestão | fundação | — | feito · #819 |
| T005 | EO.StructureGrants — declarar, revogar, listar e alcançar |
fundação | — | feito · #821 |
| T006 | pode_gerir_estrutura/3 substitui pode_declarar_estrutura/4 |
fundação | — | feito · #821 |
| T007 | /roles concede e revoga manages team structure |
fundação | — | feito · #821 |
| T008 | A saída declarada e a data da declaração no esquema | fundação | — | feito · #821 |
| T009 | As consultas do roster | US1 | — | feito · #821 |
| T010 | As duas abas de /teams/:id, com a aba na URL |
US1 | — | feito · #821 |
| T011 | A seção Members por vínculo, a legenda, a discordância e Where this team sits | US1 | — | feito · #821 |
| T012 | Quem não gere lê tudo e não vê ação — e o evento é recusado com motivo | US1 | — | feito · #821 |
| T013 | O teto de consultas das duas abas, medido | US1 | — | feito · #821 |
| T014 | A saída grava quem e quando, alcança os dois papéis, e a coleta não recria | US3 | — | feito · #821 |
| T015 | "Left the team…" na linha, com data obrigatória e a origem do fim dita | US3 | — | feito · #821 |
| T016 | O equívoco alcança todos os vigentes do par | US4 | — | feito · #821 |
| T017 | "Mistake…" na linha, com razão obrigatória e o texto que separa de "saiu" | US4 | — | feito · #821 |
| T018 | declare_role/6 e change_role/5 |
US2 | — | feito · #821 |
| T019 | "Declare role" / "Change role" na linha, e "+ new role…" sem sair dela | US2 | — | feito · #821 |
| T020 | O lote "Declare all roles", por vínculo, na Estrutura | US2 | — | feito · #821 |
| T021 | role_holder_counts/3 — quantas pessoas por papel |
US5 | — | feito · #821 |
| T022 | A seção Roles: catálogo e criados, criar com código sugerido, renomear, ocultar | US5 | — | feito · #821 |
| T023 | A escrita de projeto vive na Estrutura, sob o mesmo veredito | fechamento | — | feito · #821 |
| T024 | Isolamento entre tenants nas consultas novas | fechamento | — | feito · #821 |
| T025 | Gates, quickstart e documentos | fechamento | — | feito · #821 |
| T026 | A granulação e a janela vivem no endereço, com padrão por granulação | US9 | — | feito · #821 |
| T027 | Prometido × Entregue, com a definição junto do título | US9 | — | feito · #821 |
| T028 | Os três gráficos na equipe composta, sobre o conjunto da equipe inteira | US9 | — | feito · #821 |
| T029 | O gráfico pequeno no cartão da subequipe | US9 | — | feito · #821 |
Herança e o que entrou sem tarefa — entregáveis fora do tasks.md da 060¶
| # | Entregável | Feature | Origem | Estado |
|---|---|---|---|---|
| H4 | A aba Flow per person — o burn por pessoa e a previsão que diz sua confiança; três consultas para qualquer número de membros | 060 · US10–US12 da extensão spec-graficos-por-membro.md (FR-085 a FR-112) |
o tasks.md as declarava sem tarefa ("depende da US9 e do protótipo desta aba, que ainda não existe"); o protótipo foi aprovado em 2026-09-08 e a tela entrou assim mesmo |
feito · #860 (2026-09-12) — não avaliado; os requisitos estão sendo transcritos do protótipo no #913 |
| H1 | A conta desativada como o protótipo pediu — razão de lista fechada, episódio com as duas pontas, a recusa na tela | 045 · D06 da v0.7.0 | docs/releases/v0.7.0.md, D06 recusado |
feito · #853 (2026-09-10) |
| H2 | Vincular pessoa a equipe — FR-003 ganha tela, com o veredito antes do botão | 055 · FR-003 | revisão de 2026-09-10 | feito · #863 (2026-09-12) |
| H3 | Declarar equipe dentro de outra é um ato, numa transação | 055 · criar_subequipe |
revisão de 2026-09-10 | feito · #857 (2026-09-11) |
Fora do escopo deste sprint¶
| O quê | Por quê |
|---|---|
| US6 — as subequipes: quem compõe esta equipe, desde quando (P2) | PR 2; o cartão da subequipe foi movido para a US7 pela decisão 11 de 2026-09-07 (#820) |
| US7 — o Dashboard reorganizado (P2) | PR 2; FR-041 (cartão e a porta) sem tarefa |
| US8 — a visão geral do gestor (P2) | PR 2 |
| US10–US12 — os quatro gráficos por membro (FR-085 a FR-112) | o tasks.md as declarava sem tarefa; entraram assim mesmo pelo #860, fora do plano — ver H4 |
| FR-007 | confirmado sem mudança (pode_ver_equipe/3) |
Riscos e dependências¶
- As seis perguntas abertas do
plan.mdnão bloqueavam começar e bloqueavam fechar T002, T014, T017 e T022. Quatro delas estavam na pauta em 2026-09-08:started_atdeeo_team_compositionsobrigatório × "data ou desconhecido" (FR-037); cinco transições sem teste;eo_organizational_unitssem schema e sem leitor; a tabela por subequipe convive ou substitui os cartões (#820). Nenhuma resposta está registrada — as tarefas fecharam assim mesmo, e isto é dívida (ver a review); - Dois YAML e duas migrações —
role_grants.yaml, evidência v3,saida_declarada_com_autor,concessao_de_gestao_da_estrutura. Aditivas; Periodos.interseccao/1pessimista (dívida da 057/058) — a tela por vínculo consome a marca de período parcial, e uma equipe semstarted_ata verá em toda linha.
Definition of Done do sprint¶
- [x] quality gates verdes —
mix gatesexit 0em cada PR, e o CI verde emdevelopment - [x] base de conhecimento válida — parte dos gates
- [ ] issues encerradas ou repriorizadas — não há issues (limitação 1)
- [x]
sprint-review.mdescrito — retroativo, 2026-09-13 - [x]
aceitacao.mdescrito — proposta do papel, confirmação pendente - [x]
licoes-aprendidas.mdatualizado — L108