develop #35

Open
jhony75 wants to merge 30 commits from develop into main
Owner
No description provided.
Faixa vulnerável ia até 7.17.0. Avaliado trocar por TanStack Router e
descartado: o valor dele é inferência de tipo ponta-a-ponta, e o frontend
é 100% JS (zero .ts/.tsx) — sem TypeScript esse ganho não existe, e
reescrever toda a navegação só pra fechar 2 CVEs que um bump resolve não
compensava. API usada (BrowserRouter/Routes/Route/NavLink/useNavigate/
useParams) não mudou entre v6 e v7 — build e testes passam sem alteração
de código.
O objetivo é zero contato humano no caso comum: a pipeline vira a guardiã
do status, não a memória de quem fez o deploy. Complementa o rollback de
containers/imagens que já existia.

- deploy-remote.sh: no rollback, restaura o backup do SQLite feito antes
  do deploy (por cima do live db) e remove -wal/-shm da tentativa quebrada
  antes de trocar o arquivo base — sem isso, WAL de um schema mais novo
  aplicado sobre o backup mais antigo corrompe o restore (banco roda em
  journal_mode=wal). Só sobra log de WARNING pedindo intervenção manual se
  o próprio restore falhar.
- DATA_DIR lido direto do env file (sem `source`), com fallback silencioso
  pra fixtures antigas sem essa variável.
- 2 cenários novos em test-deploy-remote.sh (com e sem backup disponível).
- scripts/generate-synthetic-data.py: gera banco sintético de qualquer
  tamanho pra medir esse tipo de operação sem precisar de acesso à VPS.
  RTO medido com ~43 MB (banco de produção real é ~40 MB): drill
  estrutural em 0,66s, restore de arquivo em ~60ms — camada de banco não
  é o gargalo de um rollback real.
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.
feat: palavra-chave BDD/Gherkin nos passos de cenário + export .feature
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 2m43s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
72a972528e
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.
feat: migrar frontend para TypeScript + TanStack Query, adicionar API Playground
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 3m40s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
f740066385
Refatoração completa da base do frontend de .jsx/.js pra .tsx/.ts, com tipos
gerados de docs/openapi.json (openapi-typescript) como fonte única de verdade
pro contrato frontend/backend. Busca de dados migrada de useEffect/useState
manual pra @tanstack/react-query em todas as telas, com invalidação explícita
após mutações. CI ganha um passo de typecheck (tsc --noEmit) antes dos testes.

Adiciona também um API Playground (RapiDoc) ao site de documentação, servindo
o mesmo docs/openapi.json já publicado, como alternativa ao Swagger UI/Bruno
pra explorar e testar a API sem subir nada localmente.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Merge pull request 'feat: rollback de deploy, Issue N:N, nota calculada, React Router 7, BDD/Gherkin' (#28) from feature/combined-perf-quality into develop
All checks were successful
EEG QA CI / validate-and-build (push) Successful in 3m4s
EEG QA CI / Deploy production (push) Has been skipped
EEG QA CI / Deploy development (push) Successful in 44s
bdd63eee96
Reviewed-on: #28
feat: indices em FKs/colunas filtradas + travar dependencias Python
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 3m42s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
7fa5f5947f
SQLite nao indexa chaves estrangeiras automaticamente — adiciona 24 indices
(migration bffe8e3bdf84) nas FKs sem indice e nas colunas mais filtradas em
listagem (Report.status/test_environment/issue_type/build_version,
Issue.status/category/severity, TestRun.status/build_version/test_environment).
Mudanca puramente aditiva, validada com upgrade/downgrade/upgrade, alembic check
(zero drift entre models.py e a migration) e suite completa de testes.

requirements.txt/requirements-dev.txt travados nas versoes exatas ja testadas
(antes >=, resolviam pra qualquer versao nova no build) — builds reproduziveis.
Validado com build limpo da imagem Docker (python:3.12-slim) + subida do
container + GET /api/health.

Usuario nao-root na imagem do backend foi avaliado e adiado — risco de quebrar
a escrita no DATA_DIR em producao sem poder verificar/corrigir a ownership dos
arquivos existentes na VPS a partir daqui; motivo documentado em BACKLOG.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Merge pull request 'feat: indices em FKs/colunas filtradas + travar dependencias Python' (#29) from feature/combined-perf-quality into develop
All checks were successful
EEG QA CI / validate-and-build (push) Successful in 2m38s
EEG QA CI / Deploy production (push) Has been skipped
EEG QA CI / Deploy development (push) Successful in 31s
5014487a94
Reviewed-on: #29
Nova tela "Ferramentas de Dev" (/dev-tools) com um botao que dispara a suite
pytest completa e mostra passou/falhou, contagens e saida completa. So aparece
com ENVIRONMENT=development no backend (fail-safe: qualquer outro valor, ou
nao configurado, esconde a rota com 404, sem vazar que existe).

Cada teste da suite usa seu proprio banco SQLite temporario (ver tests/*.py) —
rodar isso pela UI nunca toca no banco de dev/prod de verdade.

Imagem Docker do backend so instala requirements-dev.txt (pytest) quando o
build recebe INSTALL_DEV_DEPS=true (BACKEND_INSTALL_DEV_DEPS=true no .env.dev),
mantendo a imagem de producao enxuta. Validado com build limpo da imagem +
container rodando em modo dev (endpoint disparando a suite real) e em modo
prod (endpoint escondido) + smoke test completo no navegador.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
limit/offset opcionais (services/pagination.py) — sem eles, comportamento de
sempre (lista completa, sem envelope); com eles, a lista e fatiada e o total
(antes do corte) vai no header X-Total-Count. 100% retrocompativel: nenhum
consumidor existente precisa mudar. limit vai de 1 a 200 (400 fora da faixa).

Validado com testes automatizados (4 novos, cobrindo os 3 endpoints + limites
invalidos) e manualmente via curl contra dados reais.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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>
fix: substituir datetime.utcnow() deprecado por time_utils.utcnow_naive()
Some checks failed
EEG QA CI / validate-and-build (pull_request) Failing after 1m7s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
8038d8ca68
datetime.utcnow() esta deprecado desde Python 3.12 (removido numa versao
futura) e gerava 121 DeprecationWarning na suite de testes. Substituido em
todo o backend (models.py, modules/issues, modules/reporting,
modules/eeg_reports/docx_export, scripts/generate-synthetic-data.py) por
time_utils.utcnow_naive() — datetime.now(timezone.utc).replace(tzinfo=None),
que devolve exatamente o mesmo tipo (naive, UTC) que as colunas DateTime do
SQLAlchemy/SQLite sempre esperaram. Mudanca de implementacao, nao de
comportamento nem de schema.

Suite completa (85 testes) roda sem esses warnings agora.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
fix: restaurar import de datetime usado como type hint em docx_export.py
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 4m25s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
df4157435e
O commit anterior (8038d8c) removeu "from datetime import datetime" ao trocar
datetime.utcnow() por time_utils.utcnow_naive(), mas o nome datetime ainda era
usado como anotacao de tipo em _data_extenso_pt(dt: datetime) — nao capturado
pelo grep usado pra levantar os usos (so buscava "datetime\." com ponto, nao
pegando anotacoes de tipo puras). Python avalia anotacoes em tempo de definicao
por padrao, entao isso quebrava a importacao do modulo inteiro (NameError),
derrubando a app inteira (qualquer rota que dependa de modules.eeg_reports).

Passou despercebido nos testes locais por causa de bytecode cache
(__pycache__) nao invalidado — confirmado ao reproduzir com cache limpo antes
deste fix (51 failed) e depois (85 passed). Pego pela pipeline de CI (ambiente
limpo, sem cache local) — obrigado por reportar.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Merge pull request 'feat: botao de testes em dev, paginacao, controle otimista, fix datetime.utcnow' (#30) from feature/combined-perf-quality into develop
All checks were successful
EEG QA CI / validate-and-build (push) Successful in 3m13s
EEG QA CI / Deploy production (push) Has been skipped
EEG QA CI / Deploy development (push) Successful in 36s
9923c53a7f
Reviewed-on: #30
ReportDetail, IssueDetail, RunDetail e TechnicalValidationDetail capturam
Last-Modified no GET e reenviam como If-Unmodified-Since no PUT/PATCH de
"Salvar alteracoes" — hook frontend/src/hooks/useLastModified.ts. Um 412
mostra a mensagem do backend com um botao "Recarregar" que refaz o GET
(capturando o Last-Modified novo); depois disso salvar funciona normalmente.

api.ts ganhou ApiError (preserva o status HTTP, antes so a mensagem
sobrevivia) e um onHeaders opcional em RequestOptions pra capturar headers de
resposta sem mudar o tipo de retorno de request() em nenhum outro lugar.

Validado com um teste manual real de conflito (edicao concorrente via curl
enquanto a pagina estava aberta no navegador) — 412 + mensagem + recarregar +
salvar de novo funcionaram ponta a ponta.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
24 novos testes (8 arquivos) cobrindo os formularios de criacao (ReportForm,
RunForm, TechnicalValidationForm — submissao feliz + validacao de campo
obrigatorio) e as telas de detalhe/edicao (ReportDetail, IssueDetail,
RunDetail, TechnicalValidationDetail — carregar, salvar, e o conflito 412 do
controle otimista de edicao visto de ponta a ponta: mensagem exibida, botao
"Recarregar", recuperacao depois de clicar nele), mais as telas de listagem
que ainda nao tinham teste (Issues, Runs, TechnicalValidations).

Helper de teste comum extraido pra frontend/src/test/renderWithProviders.tsx
(era duplicado inline em ReportList.test.tsx), com suporte a rota
parametrizada pros componentes que usam useParams().

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
feat: SBOM + scan de vulnerabilidades (Trivy) no CI
Some checks failed
EEG QA CI / validate-and-build (pull_request) Failing after 4m16s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
6855e5120f
Depois de construir as imagens de backend e frontend (docs fica de fora — nao
serve trafego de aplicacao), o CI roda Trivy:

1. gera SBOM (CycloneDX JSON) — hoje fica nos logs do job, ainda nao publicado
   como artifact baixavel (ver ressalva no BACKLOG.md);
2. escaneia vulnerabilidades e falha o job so em CRITICAL com correcao ja
   publicada (--ignore-unfixed) — HIGH ou CRITICAL sem patch disponivel ficam
   registradas mas nao bloqueiam, ja que nao ha nada acionavel a fazer agora.

Roda antes de "Publish images...", entao uma imagem com CRITICAL corrigivel
nunca chega a ser publicada. Validado localmente simulando o step exato do CI
(mesmas tags, mesmos comandos) contra as duas imagens reais — hoje ambas
passam limpas (backend: 122 componentes no SBOM, frontend: 72, nenhuma
CRITICAL corrigivel).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
fix: remover bind mount de path local no step de SBOM/scan (Trivy)
Some checks failed
EEG QA CI / validate-and-build (pull_request) Failing after 3m35s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
25b062ed93
O CI real (PR #31, run 68) falhou no step novo — nao consegui acessar o log
detalhado (API do Forgejo 15.0.6 nao expõe rota de logs de actions, e a
sessao do navegador nao estava autenticada), entao aplico a correcao mais
provavel com base em como o step estava estruturado.

Causa provavel: -v "$PWD/sbom:/out" monta um path do HOST, resolvido pelo
daemon Docker — mas o job (runs-on: docker) ja roda dentro de um container,
entao o "docker run" do Trivy cria um container IRMAO no daemon do HOST (via
socket compartilhado), nao um filho deste container. $PWD ali e um path
dentro do container do job, que nao existe no host — o bind mount falharia.

Troca --output /out/x.json + bind mount por redirecionamento de stdout
(docker run ... > arquivo.json), que nao depende de resolucao de path entre
containers. Testado localmente: JSON gerado limpo (logs INFO/WARN do Trivy
vao pro stderr, nao contaminam o stdout).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
fix: rodar Trivy como binario nativo em vez de via docker run
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 4m6s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
012db28a69
Log real do CI (PR #31, run 69): Cannot connect to the Docker daemon at
unix:///var/run/docker.sock. Is the docker daemon running? — o container do
job nao expoe um socket Docker de verdade nesse caminho (nem docker,
containerd nem podman testados pelo proprio Trivy), entao um container Trivy
a parte (via docker run -v /var/run/docker.sock:...) nao conseguia inspecionar
as imagens, mesmo com docker build/docker push funcionando normalmente nas
steps anteriores desse mesmo shell.

Corrigido instalando o Trivy como binario nativo (curl | sh do instalador
oficial) e rodando ele direto no shell do job, sem docker run — ele reusa o
mesmo client Docker que ja funciona pras outras steps, sem precisar de socket
algum. Testado num container que replica o cenario (docker CLI + socket real
do host): SBOM e scan de vulnerabilidades funcionam identicos ao esperado.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Merge pull request 'feat: frontend consome optimistic concurrency, cobertura de testes, SBOM/scan' (#31) from feature/combined-perf-quality into develop
All checks were successful
EEG QA CI / validate-and-build (push) Successful in 4m22s
EEG QA CI / Deploy production (push) Has been skipped
EEG QA CI / Deploy development (push) Successful in 49s
24a0d75bf2
Reviewed-on: #31
feat: achado verificado exige nota de verificacao (com excecao p/ instabilidade)
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 4m43s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
4ad6e2559d
Status "Verificado" agora exige verification_note (referencia ao reteste, ou
justificativa quando indisponibilidade/instabilidade do ambiente impediu
confirmar via run/step) — verified_without_retest sinaliza esse segundo caso
sem travar o fluxo em infraestrutura de reteste formal. Reabrir o achado limpa
os campos de verificacao. UI em IssueDetail mostra a nota/checkbox quando o
status selecionado e "Verificado".
feat: sugestao de achado parecido ao criar novo achado (so sugere, nunca bloqueia)
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 4m32s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
0fb6d9590e
GET /api/issues/similar compara a descricao digitada com achados existentes
por similaridade de texto (difflib), padrao comum em ferramentas de tracking
(Jira/GitHub/Linear) -- campos estruturados (categoria+severidade+build) nao
capturam paráfrase do mesmo defeito. Frontend sugere anexar em "Novo achado"
sem nunca bloquear a criacao, decisao explicita do usuario.

Documenta em BACKLOG.md a decisao de adiar Issue.category como picklist
curada para o rollout do Authelia (curadoria por admin nao tem enforcement
sem sessao autenticada hoje).
Merge pull request 'feat: achado verificado exige nota de verificacao' (#32) from feature/combined-perf-quality into develop
All checks were successful
EEG QA CI / validate-and-build (push) Successful in 4m58s
EEG QA CI / Deploy production (push) Has been skipped
EEG QA CI / Deploy development (push) Successful in 36s
a844fc9721
Reviewed-on: #32
feat: rastreabilidade Requisito -> Cenario -> Execucao -> Achado (rumo a X-Ray/TestRail)
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 6m29s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
4414b5ef66
Novo modulo Core modules/traceability: Requirement como entidade livre
(external_url opcional, sem acoplamento a HubSpot/Jira), vinculos N:N manuais
com Issue (direto, independente de Run formal) e com TestScenarioTemplate (no
nivel da biblioteca, nao da instancia de execucao). Historico de execucao vem
de graca via TestRunScenario.template_id/template_version.

GET /api/traceability/matrix: matriz global por padrao, filtro opcional por
build_version/plan_id; linha permanece visivel (status null) quando o filtro
nao bate com nenhuma execucao, pra mostrar a lacuna de cobertura em vez de
escondê-la.

Frontend: /requisitos (CRUD), /requisitos/:id (detalhe com pickers de
vinculo), /rastreabilidade (matriz). Migration 521b1f6452b4 validada
upgrade/downgrade/upgrade + alembic check. 100 testes backend, 47 frontend,
todos passando; verificado ao vivo no navegador end-to-end.
Merge pull request 'feat: rastreabilidade Requisito -> Cenario -> Execucao -> Achado' (#33) from feature/combined-perf-quality into develop
All checks were successful
EEG QA CI / validate-and-build (push) Successful in 5m22s
EEG QA CI / Deploy production (push) Has been skipped
EEG QA CI / Deploy development (push) Successful in 25s
16c7458959
Reviewed-on: #33
feat: backlog nao-VPS completo + tags/flakiness rumo a X-Ray/TestRail
Some checks failed
EEG QA CI / validate-and-build (pull_request) Failing after 6m25s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
2ed9334886
- 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).
O job validate-and-build falhava sempre no ultimo step (publicar SBOM
como artifact) mesmo com todos os checks reais passando: v4+ usa a
Actions Results API, que este runner recusa com "not currently
supported on GHES".
feat: menus de navegacao agrupados com icones (@tabler/icons-react)
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 7m30s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
c825bdc08c
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).
Merge pull request 'feat: backlog nao-VPS + tags/flakiness rumo a X-Ray/TestRail' (#34) from feature/combined-perf-quality into develop
All checks were successful
EEG QA CI / validate-and-build (push) Successful in 7m26s
EEG QA CI / Deploy production (push) Has been skipped
EEG QA CI / Deploy development (push) Successful in 49s
EEG QA CI / validate-and-build (pull_request) Successful in 8m27s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
6ac8c7461b
Reviewed-on: #34
All checks were successful
EEG QA CI / validate-and-build (push) Successful in 7m26s
EEG QA CI / Deploy production (push) Has been skipped
EEG QA CI / Deploy development (push) Successful in 49s
EEG QA CI / validate-and-build (pull_request) Successful in 8m27s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin develop:develop
git switch develop

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.

git switch main
git merge --no-ff develop
git switch develop
git rebase main
git switch main
git merge --ff-only develop
git switch develop
git rebase main
git switch main
git merge --no-ff develop
git switch main
git merge --squash develop
git switch main
git merge --ff-only develop
git switch main
git merge develop
git push origin main
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!35
No description provided.