Contexto
Canon do operador (repetido várias vezes): a licença do Boar e de todo o roster bestial é híbrida Ed25519 + ML-DSA-65, obrigatória — é o modo mínimo de licença, não uma opção. Em 2026-10-05 um levantamento dos verificadores mostrou onde o data-boar ainda não cumpre isso. Estado verificado via gh api em DataBoar/data-boar@main, não pelo clone local.
O que existe hoje
- Âncora ML-DSA ausente.
core/licensing/ traz só license-pub-v1.pem (Ed25519). guard.py carrega a âncora por trust_anchor.load_embedded_mldsa_anchor_pem(), que não tem arquivo para ler. Os consumidores irmãos já documentam essa espera: faithful-ferret (trust_anchor.clj: "data-boar main does not ship license-mldsa-pub-v1.pem") e sage-remora (trust_anchor.clj, mesma frase). O resultado nos dois foi um verificador que recusava ou degradava, até que cada um vendorizou a chave por conta própria.
- Híbrido opcional no verify/guard.
core/licensing/guard.py::_token_has_mldsa_claim diz no docstring: "only an absent key selects Ed25519-only verification". Token sem dbmldsa_sig verifica só com Ed25519. verify.py descreve o claim como "Optional hybrid PQC claim".
Âncora canônica (já em uso)
~/.keys/data-boar/golden-mldsa.pub = keen-platypus/go/kp-license-check/trust/golden-mldsa.pub, sha256 37faef8ff167cf01a0fc6a2bc8b7cfcac6bfe5651360051b1eb00a0a60fa85b8.
- Cadeia verificada em 2026-10-05 com
kp-license-check -verify-cross-sign: OK Ed25519 signs ML-DSA-65 pubkey e OK ML-DSA-65 signs Ed25519 pubkey (PKIX DER).
- O
kp-license-check já é obrigatório (verifyTokenHybridRequired). O sage-remora está na branch fix/hybrid-license-required (commit d474be2, sem push) e o faithful-ferret recebe a mesma correção.
Escopo proposto (cada item é um commit)
Cuidado de compatibilidade
Tornar o híbrido obrigatório rejeita licenças emitidas só com Ed25519 (por exemplo os .lic curtos antigos). O release 1.7.4 GA já saiu com o híbrido opcional, então isso é mudança de comportamento para 1.8.x. Precisa de nota no CHANGELOG e de um caminho de reemissão. O emissor de dev tem issue própria (ver "Relacionado").
Fora de escopo
Rotação de chave. O contrato de rotação (attestation assinada pelas duas âncoras) já existe e não muda.
Relacionado
Épico #1462 (crypto agility + hybrid PQC). KP#375 (Remora recusava o JWT híbrido por falta da âncora). Emissor de dev sem ML-DSA: issue irmã.
Verifique antes de implementar: gh api repos/DataBoar/data-boar/contents/core/licensing/guard.py (as linhas citadas acima) — não confiar no clone local.
Contexto
Canon do operador (repetido várias vezes): a licença do Boar e de todo o roster bestial é híbrida Ed25519 + ML-DSA-65, obrigatória — é o modo mínimo de licença, não uma opção. Em 2026-10-05 um levantamento dos verificadores mostrou onde o data-boar ainda não cumpre isso. Estado verificado via
gh apiemDataBoar/data-boar@main, não pelo clone local.O que existe hoje
core/licensing/traz sólicense-pub-v1.pem(Ed25519).guard.pycarrega a âncora portrust_anchor.load_embedded_mldsa_anchor_pem(), que não tem arquivo para ler. Os consumidores irmãos já documentam essa espera: faithful-ferret (trust_anchor.clj: "data-boar main does not ship license-mldsa-pub-v1.pem") e sage-remora (trust_anchor.clj, mesma frase). O resultado nos dois foi um verificador que recusava ou degradava, até que cada um vendorizou a chave por conta própria.core/licensing/guard.py::_token_has_mldsa_claimdiz no docstring: "only an absent key selects Ed25519-only verification". Token semdbmldsa_sigverifica só com Ed25519.verify.pydescreve o claim como "Optional hybrid PQC claim".Âncora canônica (já em uso)
~/.keys/data-boar/golden-mldsa.pub=keen-platypus/go/kp-license-check/trust/golden-mldsa.pub, sha25637faef8ff167cf01a0fc6a2bc8b7cfcac6bfe5651360051b1eb00a0a60fa85b8.kp-license-check -verify-cross-sign:OK Ed25519 signs ML-DSA-65 pubkeyeOK ML-DSA-65 signs Ed25519 pubkey (PKIX DER).kp-license-checkjá é obrigatório (verifyTokenHybridRequired). O sage-remora está na branchfix/hybrid-license-required(commitd474be2, sem push) e o faithful-ferret recebe a mesma correção.Escopo proposto (cada item é um commit)
core/licensing/license-mldsa-pub-v1.pem= a chave canônica acima, com teste que fixa o sha256.dbmldsa_sigausente deixa de selecionar Ed25519-only: token sem a claim é inválido.null, vazio e não-string já falham fechado.Cuidado de compatibilidade
Tornar o híbrido obrigatório rejeita licenças emitidas só com Ed25519 (por exemplo os
.liccurtos antigos). O release 1.7.4 GA já saiu com o híbrido opcional, então isso é mudança de comportamento para 1.8.x. Precisa de nota no CHANGELOG e de um caminho de reemissão. O emissor de dev tem issue própria (ver "Relacionado").Fora de escopo
Rotação de chave. O contrato de rotação (attestation assinada pelas duas âncoras) já existe e não muda.
Relacionado
Épico #1462 (crypto agility + hybrid PQC). KP#375 (Remora recusava o JWT híbrido por falta da âncora). Emissor de dev sem ML-DSA: issue irmã.
Verifique antes de implementar:
gh api repos/DataBoar/data-boar/contents/core/licensing/guard.py(as linhas citadas acima) — não confiar no clone local.