test: fecha gaps de cobertura da Automation Discovery encontrados em auditoria #40

Merged
jhony75 merged 2 commits from feature/close-backend-outcome-automation-audit into develop 2026-09-08 11:26:05 -03:00
Owner

Item 1 do roadmap pós-refactor ("fechar e validar o pacote backend atual"): auditoria completa do estado real de Outcome vocabulary, Failure Classification, Automation Discovery e Stable IDs (public_id/external_key), feita por 3 investigações independentes antes de qualquer mudança de código.

Resultado da auditoria

  • Outcome vocabulary (PENDING/RUNNING/PASS/FAIL/ERROR/BLOCKED/SKIPPED): 100% confirmado, sem gaps - migration de dados real (448ab764c678) com downgrade documentado, schemas fechados (Literal), nenhuma dependência residual do vocabulário antigo em português em lógica de negócio/frontend/métricas/exports, e verificado direto nos dados reais do banco de dev (SELECT DISTINCT status FROM test_run_steps só retorna os valores novos).
  • Failure classification (PRODUCT_DEFECT/AUTOMATION/ENVIRONMENT/TEST_DATA/OBSOLETE_TEST/UNKNOWN): 100% confirmado - clear_failure_classification_unless_failed chamada em todo update de step, nenhuma regra nova exigindo classification em FAIL, nenhuma dependência do literal antigo "Falhou".
  • Stable IDs (public_id/external_key): 100% confirmado no backend - public_id imutável (só escrito na criação), external_key separado/normalizado/único, duplicar nunca herda external_key nem public_id nem version, migration com backfill pros registros legados, automação identifica cenário por external_key (nunca pelo PK interno). Único gap encontrado é de frontend (não existe UI de edição de cenário na Library hoje, então external_key não é editável na prática) - sinalizado como decisão em aberto, não implementado nesta PR (é fora do escopo de "fechar backend", e a fase de estabilização do frontend em andamento pediu explicitamente para não fazer redesign/features novas agora).
  • Automation Discovery: os 8 requisitos de produto já decididos (external_key desconhecida não derruba o Run inteiro; ingestão nunca cria Scenario canônico sozinha; get-or-create por (source, external_key); histórico preservado e discovery_id nunca apagado após mapear; exatamente 3 estados UNMAPPED/MAPPED/IGNORED; os 4 endpoints map/create-scenario/ignore/unignore já existem; IGNORED continua aceitando resultados; Library como fonte canônica com external_key do template independente do mapped_template_id da discovery) estão 100% confirmados no código. O único gap real era cobertura de teste em 3 pontos específicos - fechado nesta PR.

O que esta PR muda

Só backend/tests/test_automation.py, com 3 testes novos:

  1. test_ingestion_with_mixed_known_and_unknown_external_keys_in_same_payload - confirma que uma external_key desconhecida num payload com múltiplos resultados não derruba o processamento das outras.
  2. test_ingestion_never_creates_a_scenario_template - confirmação negativa de que a ingestão nunca cria um TestScenarioTemplate sozinha.
  3. test_discovery_status_stays_within_the_closed_set_across_the_full_lifecycle - percorre o ciclo de vida completo (criar → ignorar → reabrir → mapear) e confirma que o status observado é exatamente {UNMAPPED, MAPPED, IGNORED}, nem mais nem menos.

Nenhuma mudança de comportamento, schema ou contrato de API - só fechamento de cobertura de teste sobre comportamento já existente e correto.

Verificação

151 testes de backend passando (3 novos, 148 preexistentes sem regressão).

🤖 Gerado com Claude Code

Item 1 do roadmap pós-refactor ("fechar e validar o pacote backend atual"): auditoria completa do estado real de Outcome vocabulary, Failure Classification, Automation Discovery e Stable IDs (public_id/external_key), feita por 3 investigações independentes antes de qualquer mudança de código. ## Resultado da auditoria - **Outcome vocabulary** (`PENDING/RUNNING/PASS/FAIL/ERROR/BLOCKED/SKIPPED`): **100% confirmado**, sem gaps - migration de dados real (`448ab764c678`) com downgrade documentado, schemas fechados (`Literal`), nenhuma dependência residual do vocabulário antigo em português em lógica de negócio/frontend/métricas/exports, e verificado direto nos dados reais do banco de dev (`SELECT DISTINCT status FROM test_run_steps` só retorna os valores novos). - **Failure classification** (`PRODUCT_DEFECT/AUTOMATION/ENVIRONMENT/TEST_DATA/OBSOLETE_TEST/UNKNOWN`): **100% confirmado** - `clear_failure_classification_unless_failed` chamada em todo update de step, nenhuma regra nova exigindo classification em FAIL, nenhuma dependência do literal antigo `"Falhou"`. - **Stable IDs** (`public_id`/`external_key`): **100% confirmado** no backend - `public_id` imutável (só escrito na criação), `external_key` separado/normalizado/único, duplicar nunca herda `external_key` nem `public_id` nem `version`, migration com backfill pros registros legados, automação identifica cenário por `external_key` (nunca pelo PK interno). Único gap encontrado é de frontend (não existe UI de edição de cenário na Library hoje, então `external_key` não é editável na prática) - **sinalizado como decisão em aberto**, não implementado nesta PR (é fora do escopo de "fechar backend", e a fase de estabilização do frontend em andamento pediu explicitamente para não fazer redesign/features novas agora). - **Automation Discovery**: os 8 requisitos de produto já decididos (external_key desconhecida não derruba o Run inteiro; ingestão nunca cria Scenario canônico sozinha; get-or-create por `(source, external_key)`; histórico preservado e `discovery_id` nunca apagado após mapear; exatamente 3 estados UNMAPPED/MAPPED/IGNORED; os 4 endpoints map/create-scenario/ignore/unignore já existem; IGNORED continua aceitando resultados; Library como fonte canônica com `external_key` do template independente do `mapped_template_id` da discovery) estão **100% confirmados no código**. O único gap real era cobertura de teste em 3 pontos específicos - fechado nesta PR. ## O que esta PR muda Só `backend/tests/test_automation.py`, com 3 testes novos: 1. `test_ingestion_with_mixed_known_and_unknown_external_keys_in_same_payload` - confirma que uma `external_key` desconhecida num payload com múltiplos resultados não derruba o processamento das outras. 2. `test_ingestion_never_creates_a_scenario_template` - confirmação negativa de que a ingestão nunca cria um `TestScenarioTemplate` sozinha. 3. `test_discovery_status_stays_within_the_closed_set_across_the_full_lifecycle` - percorre o ciclo de vida completo (criar → ignorar → reabrir → mapear) e confirma que o status observado é exatamente `{UNMAPPED, MAPPED, IGNORED}`, nem mais nem menos. Nenhuma mudança de comportamento, schema ou contrato de API - só fechamento de cobertura de teste sobre comportamento já existente e correto. ## Verificação 151 testes de backend passando (3 novos, 148 preexistentes sem regressão). 🤖 Gerado com [Claude Code](https://claude.com/claude-code)
test: cobre 3 gaps de teste da Automation Discovery encontrados em auditoria
Some checks failed
EEG QA CI / validate-and-build (pull_request) Failing after 11m47s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
99992baad8
Revisão do pacote backend (outcome/failure classification/Automation
Discovery/stable IDs) antes da fase de estabilizacao do frontend. Outcome
vocabulary, failure classification e stable IDs (public_id/external_key)
foram auditados e confirmados 100% corretos (migration com backfill,
schemas fechados, nenhuma dependencia residual do vocabulario antigo em
portugues em logica de negocio/frontend/metricas/exports/dados reais do
banco de dev). Automation Discovery tambem teve os 8 requisitos de produto
confirmados no codigo - so faltava cobertura de teste em 3 pontos:

- payload de ingestao com external_key conhecida + desconhecida misturadas
  na mesma requisicao (confirma que uma nao derruba o processamento da
  outra);
- confirmacao negativa de que a ingestao nunca cria um TestScenarioTemplate
  sozinha;
- ciclo de vida completo do status da discovery (criar -> ignorar ->
  reabrir -> mapear) fica dentro do vocabulario fechado UNMAPPED/MAPPED/
  IGNORED.

151 testes de backend passando (3 novos).
ci: re-dispara o pipeline (falha anterior foi timeout de rede baixando o Trivy)
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 11m51s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
3b8bcd2643
jhony75 merged commit b280bf03c7 into develop 2026-09-08 11:26:05 -03:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jhony75/eeg-qa!40
No description provided.