Backlog de CRUD das entidades¶
Derivado de priv/knowledge_base/ — 12 ontologias, 219 conceitos, 141 relações.
Este documento responde: quais entidades precisam ser criadas, em que ordem, e o que "pronto" significa para cada uma.
1. A regra de derivação¶
219 conceitos não viram 219 tabelas. A categoria UFO de cada conceito determina como ele se materializa — e boa parte dos conceitos não é entidade persistida.
| Categoria UFO | Qtd. | Materialização | Vira CRUD? |
|---|---|---|---|
agent, social_agent |
4 | tabela própria | ✅ |
object, social_object |
41 | tabela própria (hierarquia por discriminador) | ✅ |
collective |
8 | tabela própria | ✅ |
relator |
5 | tabela própria — é o vínculo com identidade e temporalidade | ✅ |
goal |
6 | tabela própria | ✅ |
normative_description |
2 | tabela própria | ✅ |
disposition |
14 | tabela própria (instâncias de ferramenta, ambientes, defeitos) | ✅ |
event |
3 | tabela própria — imutável: create e read, sem update | ✅ parcial |
complex_action, action |
64 | processos/atividades executadas, agrupados por agregado + type |
✅ agrupado |
intention |
6 | processos/atividades planejadas | ✅ |
social_role |
7 | catálogo de papéis (seed), não formulário | ✅ trivial |
role |
39 | coluna + FK numa relação, ou tabela de participação | ❌ |
phase |
16 | coluna de estado na tabela do conceito pai | ❌ |
situation |
3 | derivada dos timestamps do evento | ❌ |
kind (UFO) |
12 | metamodelo — vive só na base de conhecimento | ❌ |
Por que papel não vira tabela¶
sro.developer é um papel, não um tipo de pessoa. Uma tabela sro_developers
implicaria que ser desenvolvedor é propriedade intrínseca de alguém — e a pessoa
deixaria de ser desenvolvedora ao trocar de time, virando um DELETE. O histórico
morreria.
A materialização correta é eo_team_memberships: pessoa + papel + equipe + período.
A mesma pessoa é Scrum Master em um time e Developer em outro, e a alocação passada
continua consultável. Vale para os 39 papéis: code_under_integration,
evaluated_artifact, source_branch, delivered_code — todos são o mesmo conceito
base em um contexto, e o contexto é a relação.
Por que fase não vira tabela¶
sro.accepted_deliverable e sro.not_accepted_deliverable são fases do mesmo
entregável. Duas tabelas exigiriam mover a linha de uma para outra quando a avaliação
muda — perdendo id, histórico e referências. A materialização é
sro_deliverables.acceptance_status. Idem para successful/unsuccessful em CI, build,
teste, inspeção e deployment: coluna outcome.
Por que situação não vira tabela¶
osdef.vulnerable_state e osdef.failure_state são a realidade antes e depois da
falha. São derivadas do evento (osdef_failures.occurred_at), não registros
independentes. Persistir as duas duplicaria informação e criaria três lugares para
discordarem entre si.
Resultado: ~78 entidades com CRUD, e não 219.
2. Nem todo CRUD tem formulário¶
Distinção que muda o tamanho do trabalho: a maioria das entidades é populada por ingestão, não digitada por gente. Construir tela de cadastro para elas é trabalho jogado fora — e pior, abre caminho para dado sem proveniência entrar no sistema.
Três níveis de entrega, marcados em cada linha do backlog:
| Nível | O que inclui | Para quê |
|---|---|---|
| D — Domínio | schema Ecto, migração, API pública (commands/queries), changesets, constraints de banco, testes conceituais |
toda entidade |
| A — Acesso | queries de leitura, filtros, paginação, exposição em API/LiveView de consulta | entidades consultadas |
| F — Formulário | criação e edição manual pela interface | só cadastros |
Entidades ingeridas expõem upsert_from_source/2 idempotente em vez de create/1 e
update/2 manuais. Escrita manual sobre elas é vetada por construção: dado externo
entra por mapeamento, com proveniência, nunca por formulário.
Entidades com nível F: tenants, contas de usuário, fontes externas, papéis organizacionais, critérios de qualidade, necessidades de informação. São ~8 de ~78.
3. Definição de pronto de um CRUD¶
Um CRUD só está pronto quando todos os itens valem:
- [ ] migração com
tenant_id,internal_id,record_version, timestamps; - [ ] para entidade ingerida:
source_system,source_instance,external_id,collected_ateunique_index [tenant_id, source_system, source_instance, external_id]; - [ ] constraints no banco (FK,
unique_index,check_constraint) e validação no changeset; - [ ] API pública no módulo raiz da ontologia via
defdelegate— schema não vaza; - [ ]
@specem toda função pública; retorno{:ok, _} | {:error, _}; - [ ] teste conceitual verificando cardinalidades e restrições declaradas no YAML;
- [ ] teste de isolamento entre tenants (dois tenants, um não lê o outro);
- [ ] para entidade ingerida: teste de idempotência (executar duas vezes = mesmo estado);
- [ ] YAML da base de conhecimento e schema Ecto verificados como coerentes por teste;
- [ ] documentação regenerada quando a base mudar.
4. Fundação — pré-requisito de tudo¶
Sem estas entidades, nenhuma outra pode existir: toda tabela de domínio referencia tenant e proveniência.
| # | Entidade | Tabela | Nível | Depende de | Notas |
|---|---|---|---|---|---|
| F1 | Tenant | tenants |
D A F | — | raiz do isolamento multitenant |
| F2 | Conta de usuário | accounts_users |
D A F | F1 | acesso à plataforma, não é eo.person |
| F3 | Fonte externa | sources |
D A F | F1 | instância de ferramenta: URL, tipo, credencial por referência |
| F4 | Credencial de fonte | source_credentials |
D F | F3 | só referência a secret manager; nunca o segredo |
| F5 | Entidade bruta | raw_entities |
D A | F3 | payload original preservado, imutável |
| F6 | Registro de proveniência | provenance_records |
D A | F5 | source_system, source_instance, external_id, collected_at, mapping_id |
| F7 | Execução de sincronização | sync_runs |
D A | F3 | checkpoint, cursor, contagens, status |
7 entidades. Feature 001 Fundação Phoenix e governança + 024 Cadastro de fontes externas.
accounts_userseeo.personsão coisas diferentes. Um usuário da plataforma pode não ser nenhuma pessoa observada nos projetos, e a maioria das pessoas observadas nunca terá conta. Colapsar os dois é erro que só aparece meses depois, quando alguém tentar deletar um usuário e levar junto o histórico de commits de um ex-funcionário.
5. EO — organizações, pessoas, equipes¶
Feature 005. Depende da fundação.
| # | Entidade | Tabela | Conceitos cobertos | Nível | Notas |
|---|---|---|---|---|---|
| EO1 | Organização | eo_organizations |
organization, organizational_unit |
D A | auto-FK parent_id cobre unidade organizacional |
| EO2 | Pessoa | eo_people |
person |
D A | ingerida; reconciliação de identidade é regra explícita, nunca heurística de nome |
| EO3 | Papel organizacional | eo_organizational_roles |
organizational_role + 7 social_role de SRO |
D A F | catálogo com seed; papéis Scrum entram como seeds daqui |
| EO4 | Equipe | eo_teams |
team, organizational_team, project_team |
D A | discriminador team_type |
| EO5 | Alocação em equipe | eo_team_memberships |
team_membership + 3 memberships de SRO |
D A | relator: pessoa + papel + equipe + started_at/ended_at |
5 entidades. eo.team_member não tem tabela — é EO2 + EO5.
Ordem: EO1 → EO2, EO3 → EO4 → EO5.
6. SPO — projetos, processos, atividades¶
Feature 006. É a espinha dorsal: quase toda ontologia de domínio especializa algo daqui.
| # | Entidade | Tabela | Conceitos cobertos | Nível | Notas |
|---|---|---|---|---|---|
| SPO1 | Projeto | spo_projects |
project, software_project |
D A | discriminador project_type |
| SPO2 | Stakeholder de projeto | spo_project_stakeholders |
3 role |
D A | papel materializado: projeto + (pessoa|equipe) + tipo |
| SPO3 | Processo pretendido | spo_intended_processes |
3 intention |
D A | scope = general | specific |
| SPO4 | Atividade pretendida | spo_intended_activities |
intended_project_activity |
D A | FK para SPO3 |
| SPO5 | Processo executado | spo_performed_processes |
5 complex_action |
D A | scope + composition (simple|composite); auto-FK parent_id |
| SPO6 | Atividade executada | spo_performed_activities |
3 conceitos | D A | activity_kind (simple|composite); auto-FK; tabela mais movimentada do sistema |
| SPO7 | Dependência entre atividades | spo_activity_dependencies |
relação depends on |
D A | ordena a execução; grafo, exige guarda contra ciclo |
| SPO8 | Participação | spo_participations |
relações is in charge of, participates in |
D A | participation_type distingue responsável de participante |
| SPO9 | Artefato | spo_artifacts |
artifact, information_item, document |
D A | artifact_type; raiz da hierarquia de artefatos |
| SPO10 | Uso de artefato | spo_artifact_usages |
creates, uses, changes |
D A | usage_type |
| SPO11 | Uso de recurso | spo_resource_usages |
resource + roles de recurso de 4 ontologias |
D A | atividade + artefato no papel de recurso + resource_kind |
11 entidades.
Causação planejado → executado. A relação
spo.intended_causes_performedliga SPO4 a SPO6. É ela que sustenta toda análise de aderência entre plano e execução — e é a primeira coisa que se perde quando alguém decide que "tarefa é tarefa". Modelar como FK anulável em SPO6, não como tabela de junção: uma atividade executada tem no máximo uma intenção que a causou.
Ordem: SPO1 → SPO2, SPO3 → SPO4 → SPO5 → SPO6 → SPO7, SPO8, SPO9 → SPO10, SPO11.
7. SysSwO — sistema e software¶
Feature 007.
| # | Entidade | Tabela | Conceitos cobertos | Nível | Notas |
|---|---|---|---|---|---|
| SYS1 | Produto de software | sysswo_software_products |
software_product |
D A | |
| SYS2 | Item de software | sysswo_software_items |
software_item, code, program, software_system |
D A | item_type; auto-FK para composição |
| SYS3 | Especificação de programa | sysswo_program_specifications |
program_specification |
D A | ancora a identidade do programa |
| SYS4 | Cópia carregada | sysswo_loaded_copies |
loaded_software_system_copy |
D A | base de repositórios, servidores e ambientes de CI/CD |
| SYS5 | Equipamento de hardware | sysswo_hardware_equipments |
hardware_equipment, machine |
D A | equipment_type |
5 entidades.
codeeprogramficam na mesma tabela com discriminador, mas a relaçãoconstituted byentre eles é explícita: trocar o código não troca o programa. Fundir os dois em uma linha só apagaria essa distinção — e com ela a capacidade de dizer que o mesmo programa mudou de implementação.
8. RSRO — requisitos¶
Feature 008.
| # | Entidade | Tabela | Conceitos cobertos | Nível | Notas |
|---|---|---|---|---|---|
| RS1 | Requisito | rsro_requirements |
requirement, functional, non_functional |
D A | requirement_type |
| RS2 | Artefato de requisitos | rsro_requirement_artifacts |
requirements_artifact |
D A | especializa SPO9 |
| RS3 | Documento de requisitos | rsro_requirement_documents |
requirements_document |
D A | especializa SPO9 |
| RS4 | Descrição de requisito | rsro_requirement_descriptions |
relação describes |
D A | junção artefato × requisito |
4 entidades. RS4 existe porque o artefato descreve o requisito sem ser ele.
9. CMPO — gerência de configuração¶
Feature 009. Aqui entra o grosso dos dados do GitHub.
| # | Entidade | Tabela | Conceitos cobertos | Nível | Notas |
|---|---|---|---|---|---|
| CM1 | Repositório | cmpo_source_repositories |
source_repository |
D A | especializa SYS4 |
| CM2 | Branch | cmpo_branches |
branch |
D A | collective de artefatos |
| CM3 | Item de configuração | cmpo_configuration_items |
configuration_item |
D A | papel de artefato sob versionamento |
| CM4 | Cópia de artefato | cmpo_artifact_copies |
artifact_copy + 2 phase |
D A | conflict_status = with | without |
| CM5 | Solicitação de mudança | cmpo_change_requests |
change_request |
D A | Pull Request entra aqui — e não é o merge |
| CM6 | Commit | cmpo_commits |
commit_artifact_copy |
D A | atividade com atributos e volume próprios; FK para SPO6 |
| CM7 | Conflito | cmpo_conflicts |
conflict |
D A | |
| CM8 | Linha de base | cmpo_baselines |
baseline |
D A | |
| CM9 | Atividades de CM | (usa SPO6) | 11 action/complex_action |
D | activity_type em SPO6: checkout, checkin, branch_creation, branch_switch, artifact_checkout, check_conflict, resolve_conflict, delete_branch, change_control, change_accomplishment, change_request_closing, baseline_establishment |
8 entidades + reuso de SPO6.
CM9 é a decisão de design que evita 12 tabelas quase vazias. Só
commitganha tabela própria (CM6), porque tem atributos específicos e volume alto. As demais atividades são linhas emspo_performed_activitiescomactivity_type— mesma semântica, um décimo do esquema.Branch de origem e destino são papéis, não tabelas: viram colunas
source_branch_id/target_branch_idem CM5 e nas atividades de check-in.
10. ROoST — testes¶
Feature 010.
| # | Entidade | Tabela | Conceitos cobertos | Nível | Notas |
|---|---|---|---|---|---|
| RO1 | Caso de teste | roost_test_cases |
test_case |
D A | documento, especializa SPO9 |
| RO2 | Código de teste | roost_test_codes |
test_code |
D A | especializa SYS2 |
| RO3 | Execução de teste | roost_test_executions |
performed_test_execution |
D A | FK para SPO6 |
| RO4 | Resultado de teste | roost_test_results |
test_result |
D A | |
| RO5 | Ambiente de teste | roost_testing_environments |
testing_environment |
D A | |
| RO6 | Teste por nível | (usa SPO6) | level_based_testing, unit, integration, system |
D | testing_level em SPO6 |
5 entidades + reuso de SPO6. code_to_be_tested é papel → coluna em RO1/RO3.
11. QAPO — garantia da qualidade¶
Feature 011.
| # | Entidade | Tabela | Conceitos cobertos | Nível | Notas |
|---|---|---|---|---|---|
| QA1 | Critério de qualidade | qapo_quality_criteria |
quality_criterion |
D A F | catálogo — cadastrado, não ingerido |
| QA2 | Avaliação | qapo_evaluations |
adherence_evaluation, artifact_evaluation |
D A | evaluation_type; review de PR entra aqui |
| QA3 | Não conformidade | qapo_noncompliances |
noncompliance_register |
D A | issue do Sonar entra aqui, não em OSDEF |
| QA4 | Relatório de avaliação | qapo_evaluation_reports |
evaluation_report |
D A |
4 entidades. evaluated_artifact é papel → FK em QA2.
12. OSDEF — defeitos e falhas¶
Feature 012.
| # | Entidade | Tabela | Conceitos cobertos | Nível | Notas |
|---|---|---|---|---|---|
| OS1 | Defeito | osdef_defects |
vulnerability, defect, fault |
D A | defect_kind; fault = defeito com manifestação registrada |
| OS2 | Falha | osdef_failures |
failure |
D A | evento: create e read, sem update |
| OS3 | Manifestação | osdef_manifestations |
relação manifested in |
D A | junção defeito × falha — é ela que promove defect a fault |
3 entidades. vulnerable_state e failure_state não persistem: derivam de
osdef_failures.occurred_at.
13. SRO — Scrum¶
Features 013 a 017. Maior bloco de domínio.
| # | Entidade | Tabela | Conceitos cobertos | Nível | Feature |
|---|---|---|---|---|---|
| SR1 | Projeto Scrum | sro_scrum_projects |
scrum_project |
D A | 013 |
| SR2 | Processo Scrum | sro_scrum_processes |
scrum_process |
D A | 013 |
| SR3 | Sprint | sro_sprints |
sprint |
D A | 013 |
| SR4 | Cerimônia | sro_ceremonies |
ceremony + 4 subtipos |
D A | 013 — ceremony_type |
| SR5 | Definição do product backlog | (usa SPO5) | product_backlog_definition |
D | 013 |
| SR6 | Time Scrum | sro_scrum_teams |
scrum_team, development_team |
D A | 014 — team_type, sobre EO4 |
| SR7 | Alocação Scrum | (usa EO5) | 3 relator de membership |
D | 014 — papel Scrum vem do catálogo EO3 |
| SR8 | Participação Scrum | (usa SPO8) | 11 relações de participação | D | 014 |
| SR9 | Product backlog | sro_product_backlogs |
product_backlog |
D A | 015 |
| SR10 | Sprint backlog | sro_sprint_backlogs |
sprint_backlog |
D A | 015 |
| SR11 | Item de sprint backlog | sro_sprint_backlog_items |
relação user story × sprint backlog | D A | 015 — uma story pode voltar em sprints seguintes |
| SR12 | User story | sro_user_stories |
user_story, atomic, epic |
D A | 016 — story_type, auto-FK parent_id |
| SR13 | Critério de aceitação | sro_acceptance_criteria |
3 goal |
D A | 016 — criterion_type |
| SR14 | Tarefa pretendida | sro_intended_tasks |
intended_scrum_development_task |
D A | 016 |
| SR15 | Tarefa executada | sro_performed_tasks |
performed_scrum_development_task + 2 phase |
D A | 016 — outcome = successful | non_successful |
| SR16 | Entregável | sro_deliverables |
deliverable + 2 phase + sprint/project |
D A | 017 — acceptance_status + deliverable_level |
| SR17 | Avaliação de entregável | sro_deliverable_acceptances |
relação com critérios | D A | 017 — aceitação decorre dos critérios, não de marcação manual |
| SR18 | Materialização | sro_materializations |
relação materialized |
D A | 017 — entregável × user story |
14 tabelas novas + 4 reusos.
SR17 não é enfeite. Sem ela,
acceptance_statusvira campo preenchido à mão e a medida de retrabalho perde o lastro. O axioma da tese exige que a aceitação seja derivável dos critérios de aceitação — verpriv/knowledge_base/rules/sro_axioms.yaml.
14. CIRO — integração contínua¶
Features 018 a 021.
| # | Entidade | Tabela | Conceitos cobertos | Nível | Feature |
|---|---|---|---|---|---|
| CI1 | Processo de CI | ciro_processes |
CI process + 3 trigger + 2 phase |
D A | 018 — trigger_type + outcome |
| CI2 | Servidor de CI | ciro_servers |
continuous_integration_server |
D A | 018 — especializa SYS4 |
| CI3 | Atividade de feedback | ciro_feedback_activities |
continuous_feedback_activity |
D A | 018 |
| CI4 | Evento de solicitação | ciro_request_events |
ci_request_event |
D A | 018 — evento, sem update |
| CI5 | Processo de build | ciro_build_processes |
build + 2 phase |
D A | 019 — outcome |
| CI6 | Ambiente de build | ciro_build_environments |
ci_building_environment |
D A | 019 |
| CI7 | Código candidato | ciro_candidate_codes |
candidate_code |
D A | 019 — collective |
| CI8 | Composição do candidato | ciro_candidate_code_items |
roles code_under_integration, integrated_code |
D A | 019 — junção com code_role |
| CI9 | Cópia de código | ciro_code_copies |
source_code_copy, test_code_copy |
D A | 019 — copy_type, especializa CM4 |
| CI10 | Problema de build | ciro_build_problems |
build_problem |
D A | 019 |
| CI11 | Processo de teste | ciro_test_processes |
test + 2 phase |
D A | 020 — outcome |
| CI12 | Ambiente de teste de CI | ciro_testing_environments |
ci_testing_environment |
D A | 020 — especializa RO5 |
| CI13 | Execução automatizada | ciro_test_executions |
automated_test_execution |
D A | 020 — especializa RO3 |
| CI14 | Resultado de teste de CI | ciro_test_results |
ci_test_result |
D A | 020 — especializa RO4 |
| CI15 | Processo de inspeção | ciro_inspection_processes |
inspection + 2 phase |
D A | 021 — outcome |
| CI16 | Ambiente de inspeção | ciro_inspection_environments |
ci_inspection_environment |
D A | 021 |
| CI17 | Inspeção de artefato | ciro_artifact_inspections |
automated_artifact_inspection |
D A | 021 — especializa QA2 |
| CI18 | Relatório de CI | ciro_evaluation_reports |
ci_evaluation_report |
D A | 021 — especializa QA4 |
| CI19 | Código de critério | ciro_criterion_codes |
quality_assurance_criterion_code |
D A | 021 — materializa QA1 |
| CI20 | Ferramenta de análise estática | ciro_analysis_tools |
static_code_analysis_tool |
D A F | 021 — catálogo |
20 entidades. As criações de ambiente (build_environment_creation,
ci_testing_environment_creation, inspection_environment_creation) e
code_checkout/candidate_code_building usam SPO6 com activity_type.
outcomeé coluna, nunca tabela. Oito conceitos de fase em CIRO viram três colunas. Um processo que falhou e foi reexecutado é a mesma entidade com histórico, não uma linha nova em outra tabela.
15. CDRO — entrega e implantação contínuas¶
Features 022 e 023.
| # | Entidade | Tabela | Conceitos cobertos | Nível | Feature |
|---|---|---|---|---|---|
| CD1 | Atividade de entrega | cdro_delivery_activities |
delivery_activity |
D A | 022 |
| CD2 | Servidor de entrega | cdro_delivery_servers |
continuous_delivery_server |
D A | 022 |
| CD3 | Ambiente de entrega | cdro_delivery_environments |
delivery_environment |
D A | 022 |
| CD4 | Processo de implantação | cdro_deployment_processes |
CD process + 2 phase |
D A | 023 — outcome |
| CD5 | Atividade de implantação | cdro_deployment_activities |
deployment_activity |
D A | 023 |
| CD6 | Servidor de implantação | cdro_deployment_servers |
continuous_deployment_server |
D A | 023 |
| CD7 | Ambiente de implantação | cdro_deployment_environments |
deployment_environment |
D A | 023 |
| CD8 | Feedback de implantação | cdro_feedback_activities |
continuous_deployment_feedback_activity |
D A | 023 |
8 entidades. delivered_code e deployed_code são papéis do código candidato →
colunas delivered_candidate_code_id / deployed_candidate_code_id em CD1/CD5.
16. Totais e ordem de execução¶
| Bloco | Entidades | Feature |
|---|---|---|
| Fundação | 7 | 001, 024 |
| EO | 5 | 005 |
| SPO | 11 | 006 |
| SysSwO | 5 | 007 |
| RSRO | 4 | 008 |
| CMPO | 8 | 009 |
| ROoST | 5 | 010 |
| QAPO | 4 | 011 |
| OSDEF | 3 | 012 |
| SRO | 14 | 013–017 |
| CIRO | 20 | 018–021 |
| CDRO | 8 | 022–023 |
| Total | 94 |
Dos 94, 8 precisam de formulário (nível F). Os outros 86 são populados por ingestão
e expõem upsert_from_source/2 idempotente.
Ordem obrigatória¶
Segue a direção de dependência da rede — o inverso quebra por FK inexistente:
Fundação (F1–F7)
→ EO (5)
→ SPO (11) ← espinha dorsal: quase tudo depois especializa daqui
→ SysSwO (5)
→ RSRO (4) · CMPO (8) · ROoST (5) · QAPO (4)
→ OSDEF (3)
→ SRO (14) ← precisa de EO, SPO, SysSwO, RSRO
→ CIRO (20) ← precisa de SPO, SysSwO, CMPO, ROoST, QAPO, OSDEF
→ CDRO (8) ← precisa de SPO, SysSwO, CIRO
SRO e CIRO são independentes entre si e podem ser feitos em paralelo por times distintos.
Caminho até o primeiro valor entregue¶
Se o objetivo é ver o sistema respondendo alguma pergunta real o quanto antes, a fatia mínima é:
13 entidades — suficiente para ingerir repositórios, commits e Pull Requests do GitHub e responder as perguntas de tempo de revisão e volume de mudança. O resto da rede entra depois, sem retrabalho, porque a fronteira já está no lugar certo.
17. Riscos conhecidos¶
SPO6 é o gargalo. spo_performed_activities recebe atividade de CM, teste,
inspeção, Scrum e CD. Vai ser a maior tabela do sistema. Particionamento por tenant_id
e por período precisa ser avaliado já na feature 006 — depois fica caro.
Discriminadores viram lixeira. activity_type em SPO6 acumula valores de cinco
ontologias. Sem enum validado contra a base de conhecimento, em seis meses haverá
"commit", "Commit" e "commit_artifact_copy" convivendo. O valor deve ser derivado
do id do conceito no YAML, não digitado.
Reconciliação de identidade de pessoa (EO2). Uma pessoa com contas em GitHub, Jira e Sonar precisa virar uma linha só. Fazer isso por similaridade de nome ou e-mail produz erro silencioso que contamina toda métrica por pessoa. Precisa de feature própria, com regra explícita e revisão humana — não resolver no CRUD de EO2.
Aceitação de entregável (SR17). Se a feature 017 entregar acceptance_status como
campo livre, a medida de retrabalho nasce sem lastro. O axioma exige derivação a partir
dos critérios.
18. Próximo passo¶
Este backlog não é especificação. Cada bloco precisa do ciclo do Spec Kit — ver processo por feature.
Sugestão de primeira feature a especificar: