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
DcpWasmno 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.