Pular para conteúdo

Validação de publicações

Tradução informativa da versão em inglês, atualizada em 10/11/2026. Em caso de divergência, prevalece a versão em inglês. Identificadores, comandos e blocos de código são mantidos sem tradução.

Depois que uma versão é publicada, tools/release-validation instala os pacotes publicados a partir de seus registros oficiais, como um consumidor novo faria, e executa os catálogos externos de conformidade contra o que foi instalado. Esta página explica o que isso demonstra, o que foi executado até agora e o que não é coberto. O README da ferramenta é a referência para executá-la.

O que cobre

As seis versões publicadas em 09/11/2026 (dossiê de auditoria), por meio de nove lanes:

Versão publicada Lanes
npm @dcp-ai/sdk 2.4.0 npm-sdk
npm @dcp-ai/wasm 2.2.0 npm-wasm-node (Node) e npm-wasm-browser (um Chrome real)
npm @dcp-ai/cli 2.2.0 npm-cli
PyPI dcp-ai 2.11.0 pypi-wheel (o wheel) e pypi-sdist (o sdist, construído a partir do código-fonte)
Módulo Go sdks/go/v2 v2.14.0 go
crates.io dcp-ai 2.14.0 crates-default e crates-otlp (com a feature otlp)

Cada lane instala seu pacote em um diretório temporário com um ambiente construído para ele, verifica que os bytes baixados são os publicados e que o que é instalado ou compilado são esses bytes, e só então executa a evidência:

  • 60 células de catálogo. Os oito catálogos externos do kit de conformidade em seis lanes (o SDK, os dois lanes de Python, Go e os dois lanes de Rust), e os seis que se aplicam à API de WebAssembly em seus dois lanes. O lane da CLI não tem catálogo. São 6142 casos com os catálogos desta revisão.
  • 103 casos diretos da API pública DcpWasm no navegador.
  • As quatro suítes da CLI (218 testes) contra a CLI instalada, e seu controle negativo.
  • 58 controles na mesma execução. Alguns são positivos que devem passar; os demais são cópias alteradas dos relatórios reais, expectativas invertidas, falhas injetadas, prazos esgotados e origens locais, cada um dos quais deve ser recusado da maneira que lhe é exigida.

Não acrescenta nenhum catálogo nem nenhuma expectativa própria. As expectativas são as do kit, versionadas neste repositório.

O que um resultado significa

  • PASS exige tudo o que está acima em uma única execução. Afirma que estes artefatos, com estes hashes, obtidos destes registros, passaram nestes catálogos com o kit nesta revisão e neste ambiente. Não é uma certificação e não diz nada sobre um ambiente que não foi executado.
  • PARTIAL é uma seleção de lanes ou catálogos sem falhas. É um diagnóstico e nunca é informado como um pass.
  • Uma discrepância significa que um artefato instalado respondeu e a expectativa versionada não coincide.
  • Um erro significa que não houve uma resposta válida para julgar: o registro, a rede, um toolchain, uma identidade que não coincide, um relatório incompleto ou que não é desta execução. Um erro nunca conta como uma rejeição do protocolo, nem como um pass.

Instalar um pacote e comprovar de onde ele veio não é conformidade. Apenas as células de catálogo e os blocos são evidência sobre o comportamento.

A ferramenta não muda nada no protocolo: o perfil de canonicalização dcp-jcs-v1, o núcleo, os SDKs e os catálogos são usados como estão.

O que foi executado

Uma campanha completa, em 10/11/2026, a partir de uma cópia do repositório apenas com seus arquivos públicos:

Item Observado
Resultado PASS: 60 células (6142 de 6142 casos), 103 casos diretos, 218 testes da CLI, o controle negativo, 58 controles
Modo locked (os locks versionados)
Host macOS em Apple silicon (arm64), Node 22.15.0, npm 11.3.0
Python CPython 3.12.2, arm64
Go go1.26.10, que neste host compila darwin/amd64: o binário Go validado é amd64
Rust cargo e rustc 1.93.1, aarch64
Navegador Google Chrome 157.0.8103.50. Seu user agent é reduzido e não indica qual arquitetura foi executada
Relatório execução dfeaa975-f449-4947-8238-32bb3f372d87, SHA-256 de report.json 2b5c4c109b76038c693c73ab6485a3a3634949790fd57648637deaf9a23b7ee7

O relatório e seus arquivos são mantidos pelos mantenedores; não estão no repositório.

Também foi executado, e não é uma campanha: os dois lanes de Python com o primeiro catálogo em um contêiner Linux x86_64 (Ubuntu 24.04, CPython 3.12.3, emulado no mesmo host), em modo fresh e em modo locked. É daí que vem o lock de Linux.

A campanha completa no GitHub passou. Em 10/11/2026 (America/Santiago), o workflow executou os nove lanes em modo locked em um runner do GitHub com Ubuntu 24.04 x86_64. A evidência preservada foi conferida de forma independente: passaram as 60 células (6142 casos), 103 casos diretos no navegador, 218 testes CLI, o controle negativo com exatamente quatro falhas e os 58 controles; os testes da ferramenta passaram 37/37 sem omissões.

Item Observado
GitHub Release validation #42936377966
Run 29adf7d3-14a9-4ad8-b57b-d3f3e5bcc628
UTC 2026-11-11T01:06:03.656Z – 2026-11-11T01:12:52.962Z
Node / npm 22.23.4 / 10.9.9
Python / pip CPython 3.12.16 x86_64 / 25.0.1
Go 1.26.10 linux/amd64
Rust cargo / rustc 1.99.1, x86_64-unknown-linux-gnu
Chrome Google Chrome 156.0.8078.79
report.json SHA-256 d0b5da90f06b204ae46677a8fbaeb54d6f3b1620c204f8aea2d33a7efedac84f

O workflow é executado nos PRs pertinentes e sob demanda, com acesso de leitura ao repositório e sem etapas de publicação. Seus artefatos são mantidos por 30 dias. Os hashes dos arquivos baixados foram recalculados de forma independente e os hashes das árvores-fonte coincidiram com as verificações das árvores instaladas registradas antes de --clean remover os consumidores; isso não afirma uma segunda inspeção dos arquivos removidos.

Como executar

node --test tools/release-validation/release-validation.test.mjs
node tools/release-validation/run.mjs --python "/path/to/python3.12" --go "/path/to/go" --cargo "$(rustup which cargo)"

O primeiro comando não usa rede externa (um teste serve um índice a partir de um servidor HTTP de loopback). O segundo baixa do npm, do PyPI, do proxy do Go e do crates.io, e precisa do Chrome. --lane e --catalog selecionam uma parte, que termina como PARTIAL. Na CI, inicie manualmente o workflow Release validation. Os requisitos, as opções e a estrutura do relatório estão no README da ferramenta.

As dependências de terceiros vêm de locks versionados (locked, o padrão) ou são resolvidas naquele momento (fresh). Os locks de Python existem para CPython 3.12 em macOS arm64 e em Linux x86_64; em qualquer outro interpretador ou plataforma, os lanes de Python precisam de fresh.

O que não é coberto

  • Nenhuma versão além das seis acima, nem nada que não esteja publicado nesses registros: as integrações com frameworks, as imagens Docker, os templates de projeto, os serviços e os contratos.
  • Sistemas operacionais, arquiteturas, interpretadores e navegadores que não foram executados. Em particular: nem Windows, nem um binário Go para arm64, nem nenhum navegador além do Chrome.
  • As ferramentas do próprio host. npm, pip, Go, cargo, rustc, o compilador C e o Chrome são usados como estão e registrados, não fixados.
  • As propriedades que os próprios catálogos não cobrem. Seus limites estão no kit de conformidade e no dossiê de auditoria.