develop #35
Loading…
Add table
Add a link
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?
Achado deixa de pertencer a um único report: o mesmo defeito reaparecendo em builds/reports diferentes agora é o mesmo Issue sendo reanexado, não uma cópia — status (Aberto/Em correção/Verificado/Fechado) e severidade ficam num lugar só, compartilhados por todo report que o referencia. - Migration 9f3d2a1c7b44: tabela report_issues (N:N), backfill sem perda de dado, origin_report_id como proveniência (não dono). - API: PUT/DELETE /api/reports/{id}/issues/{issue_id} (anexar/desanexar sem duplicar), GET /api/issues (listagem global com filtros), GET /api/issues/{id} (detalhe + traceability — reports que o referenciam), PATCH /api/issues/{id} (edição, com closed_at automático). - Report.overall_score deixa de ser preenchido à mão — vira calculado (severidade dos achados abertos + status) em compute_overall_score. - Frontend: telas /achados e /achados/:id, IssuePicker pra anexar achado existente em vez de duplicar, nota geral exibida como somente leitura. - CI: --expect-alembic atualizado pro novo head.Passo de cenário (biblioteca, Report, Run) ganha palavra-chave opcional (Given/When/Then/And/But). steps continua aceitando string simples (comportamento antigo) ou {description, keyword} — pode misturar os dois na mesma lista, sem quebrar quem já manda string. - gherkin_parser.py (novo, motor genérico): parse_gherkin extrai nome/ descrição/passos de texto colado em Gherkin (POST /api/scenarios/ parse-gherkin, botão "Extrair como Gherkin" no fluxo de colar texto que já existia); to_feature_text exporta um cenário da biblioteca como .feature de verdade (GET /api/scenario-templates/{id}/feature). - Migration 4c8a1f9d2e63: keyword em test_step_templates e test_run_steps. - Frontend: seletor de palavra-chave em todo lugar que cria/edita passo (ScenarioBuilder, compartilhado por Report/Run/Biblioteca), exibição com prefixo da palavra-chave onde já existia leitura, botão .feature na Biblioteca. - Rodar o .feature de verdade (ex.: playwright-bdd) ainda exige escrever as step definitions — inerente ao BDD, não dá pra gerar isso a partir de texto livre. - Scenario Outline/Examples (dado parametrizado) deliberadamente fora de escopo por ora.PUT /api/reports/{id}, /runs/{id}, /technical-validations/{id} e PATCH /api/issues/{id} suportam o header HTTP padrao If-Unmodified-Since (RFC 7232) — opt-in, sem quebrar quem nao manda o header (last-write-wins de sempre). Quem manda e o registro mudou desde entao recebe 412 Precondition Failed. Os GETs correspondentes mandam Last-Modified de volta. Issue ganhou updated_at (migration 4ca07fcf36fd, backfill com created_at pras linhas existentes) — nao tinha essa coluna ainda. Achado durante a implementacao: Last-Modified/If-Unmodified-Since so tem resolucao de segundos (padrao HTTP) — comparar direto contra updated_at (que tem microssegundos) rejeitava toda edicao com 412 mesmo sem conflito real. Corrigido truncando os dois lados pra segundos antes de comparar. Frontend ainda nao consome isso (nenhum formulario captura Last-Modified nem reenvia If-Unmodified-Since) — documentado em BACKLOG.md como proximo passo, a capacidade ja existe pronta no backend. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>- ESLint no frontend (flat config), wirado no CI; desligada a regra nova react-hooks/set-state-in-effect (conflita com o padrao proposital de useQuery+useEffect->draft local usado em toda tela de detalhe). - SBOM do Trivy publicado como artifact baixavel do workflow (if: always()). - Cobertura de CRUD destrutivo/versionamento/concorrencia que estava zerada: delete de Plan/Run/RunScenario/scenario alias/ScenarioTemplate direto/item de checklist com cascata correta; template referenciado por Run existente vira SET NULL sem alterar a copia; edicao nao retroage sobre execucoes ja copiadas; historico de versao acumula em ordem; endpoints sem If-Unmodified-Since ignoram o header (last-write-wins), nunca 400/412. - UX: guarda de duplicate-submit (saving/deleting) nos formularios e deletes que ficaram de fora do padrao original; os 3 componentes "picker" agora aguardam onSelect e mostram erro em vez de fire-and-forget silencioso; acoes de "salvar instantaneo" (status de step, item de checklist) capturam e mostram erro em vez de falhar em silencio. - Logs da API viraram JSON estruturado (observability.py). Bug real encontrado no processo: alembic/env.py chama fileConfig no init_db(), que desabilita todo logger nao listado no alembic.ini -- os logs da API vinham sendo silenciados a cada subida do processo. Corrigido reafirmando a config depois de init_db(); travado em teste. - Tags/labels em Issue e TestScenarioTemplate (mesmo vocabulario de Report), com filtro em GET /api/issues e contagem em GET /api/tags somando as tres entidades. Migration 632765b48860. - Historico de execucao + sinal de flakiness por cenario da biblioteca (GET /api/scenario-templates/{id}/executions) -- mesmo cenario passando e falhando entre runs diferentes. Logica de agregacao de status extraida pra services/scenario_status.py, compartilhada com a matriz de rastreabilidade. - Import de JUnit XML deixado de fora de proposito -- tem decisoes de produto reais em aberto (mapeamento testsuite/testcase, criacao automatica de achado, dedup de reimportacao) documentadas no BACKLOG. 119 testes backend, 47 frontend, todos passando; verificado ao vivo no navegador (tags, filtro por tag, flakiness).Substitui a barra de nav em lista unica (quebrando linha de forma inconsistente) por menus agrupados com dropdown ("Testes", "Rastreabilidade") mais icones em todos os itens, incluindo os botoes de acao da Biblioteca (.feature/Historico/Execucoes).View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.