feat: Automation Contract v1 -- outcome restrito, idempotência real, M2M #70
Loading…
Reference in a new issue
No description provided.
Delete branch "feature/automation-contract-v1"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Formaliza o contrato de automação do QA Cockpit (ingestão, Automation Discovery, Runner Contract) após auditoria completa (estado atual + gaps entregues antes de qualquer mudança de código).
Mudanças confirmadas com o usuário:
outcomede ingestão restrito aos 5 valores terminais (PASS/FAIL/ERROR/BLOCKED/SKIPPED) --PENDING/RUNNING(só fazem sentido pra execução manual em andamento) agora são rejeitados com422.external_run_idpassa a ser obrigatório (era opcional) -- junto comsource, é a chave de idempotência. Sem esse campo não havia proteção nenhuma contra reentrega duplicada.test_runs(automation_source, external_run_id) WHERE external_run_id IS NOT NULL, não só checagem em aplicação -- com tratamento deIntegrityErrorpra corrida entre requisições concorrentes.Runner.secretopcional (M2M Cockpit → Runner viaAuthorization: Bearer), nunca exposto pela API (RunnerOutsó expõehas_secret).qa-cockpit-automationdo Authentik já chega pelos mesmos headersX-authentik-*queservices/identity.pylê desde o item 14.is_automated) emAuditLogEntry,Report.reviewer/approved_byeTestRun.executed_by, calculado a partir do grupoqa-cockpit-automations.Achado da auditoria que valeu a pena registrar: o Runner Contract (orquestração) já estava correto -- vocabulário
QUEUED/RUNNING/COMPLETED/FAILEDcom a semântica certa (FAILED = erro de infra, não teste reprovado) -- só faltava documentação formal, já que o único ADR próximo do tema (0012) descrevia uma proposta completamente diferente e nunca implementada.Documentação nova:
docs/AUTOMATION_CONTRACT.md(referência externa com exemplos HTTP completos, pra outros projetos consumirem sem ler código) + ADR-0015, com nota de esclarecimento no ADR-0012 e atualizações emAPI.md/ARCHITECTURE.md/BACKLOG.md/KNOWN_LIMITATIONS.mdrefletindo que o forward-auth via Authentik já está ativo em prod e dev (PRs #67/#68/#69, aplicadas por fora deste PR).Verificação: 257 testes de backend (18 novos), 152+ de frontend (2 novos em
Runners.test.tsx), typecheck/lint/build/Storybook build OK, migration testada contra banco populado e do zero (restore drill, 37 tabelas).