release: promove develop pra produção (Automation Contract v1/v1.1/v1.2, object storage Garage, guardrails arquiteturais, separação EEG no frontend) #79
Loading…
Reference in a new issue
No description provided.
Delete branch "develop"
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?
O que é
Promove pra produção tudo que já está validado em
develop-- 9 PRs de features/fix/docs acumuladas desde a última promoção (PR #69).Principais mudanças
POST /api/automation/runs-- ingestão normalizada de resultado de teste externo, outcome fechado, idempotência real via índice único no banco, Automation Discovery (UNMAPPED/MAPPED/IGNORED), M2M via Authentik.test_environmentno run,metricslivre por resultado, categoriaTIMEOUTemfailure_classification.stepsopcional -- múltiplas ações por caso de teste, cada uma com seu próprio outcome. OutcomeCONDITIONAL_PASS("aprovado com ressalvas"), compartilhado com execução manual.test_architecture.pytravaautomation/orchestrationnunca importarem um do outro nemmodules/eeg_reports, e fecha um vazamento real (Report.eeg_profileacessado fora do extension point em 4 arquivos Core).Attachment/RunAttachment) podem ir pro Garage (S3-compatível, self-hosted) em vez de BLOB no banco, quando as env varsGARAGE_*estão configuradas. Sem elas, comportamento idêntico a hoje. Histórico de anexos existentes não é migrado (decisão deliberada).ReportForm/ReportDetail/ReportListnão embutem mais o vocabulário EEG diretamente (extraído praEegProfileFields.tsx);Library.tsxmostra requisitos vinculados a cada cenário.X-Frame-Optionsglobal (#74).CRITICALemperl-base(#72).Migrations
5 migrations novas rodam no deploy (automáticas, via
alembic upgrade headno boot): Automation Contract v1 (outcome restrito + idempotência + runner secret + badge automação), métricas emtest_run_steps,automation_outcomeemtest_run_scenarios,storage_keyemimages/run_images. Todas aditivas (colunas nullable ou índice novo) -- nenhuma quebra dado existente, testadas com upgrade→downgrade→upgrade +alembic checksem drift.Pendências conhecidas (não bloqueiam esta PR)
GARAGE_*no.envde produção: sem essas 5 variáveis, anexos novos continuam BLOB automaticamente (sem erro) -- confirme que já foram adicionadas se quiser que produção use o Garage desde já.docs/KNOWN_LIMITATIONS.md.Verificação
git merge-treeentremainedevelop: sem conflitos (main não tem nenhum commit fora de develop desde a última promoção).tsc/lint/163 testes/build limpos.docs.sh build --strict: limpo.developjá validou boa parte disso ao vivo).🤖 Generated with Claude Code
Motivado por uma necessidade real (validacao de manufatura, em desenho agora): AutomationResultIn ganha um campo opcional `steps`, permitindo reportar varias acoes por caso de teste (cada uma com seu proprio outcome/duration_ms/failure_classification/message/evidence/metrics) em vez do unico passo sintetico do v1/v1.1. Sem `steps`, comportamento identico ao que ja existia. Novo outcome CONDITIONAL_PASS ("aprovado com ressalvas") -- vocabulario compartilhado entre automacao e execucao manual (schemas.StepOutcome), decisao explicita do usuario. O outcome de um result nunca e recalculado a partir do "pior status vence" dos steps -- quem chama a API decide o veredito final. Isso exigiu TestRunScenario.automation_outcome (migration 1e03ec5658f9) pra _dedup_response nao divergir do outcome_counts da ingestao original quando um result tem varios passos. Verificado manualmente na UI (dev server local): ingestao multi-step + CONDITIONAL_PASS, edicao manual de um passo pra CONDITIONAL_PASS, e persistencia apos reload -- tudo funcionando ponta a ponta. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>