You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
licensing: emissor de licença de dev (issue_dev_license_jwt.py) não emite ML-DSA — quebra o Maestro quando o híbrido for obrigatório #2043
Canon: licença híbrida Ed25519 + ML-DSA-65 obrigatória em todo o roster (ver issue irmã sobre âncora e guard.py). Quando o verificador passar a exigir dbmldsa_sig, todo token emitido sem ele deixa de valer.
O que existe hoje
scripts/issue_dev_license_jwt.py emite licença de dev de vida curta para o modo enforced e não referencia mldsa, dbmldsa_sig nem ml-dsa (verificado via gh api em DataBoar/data-boar@main, 2026-10-05). O Maestro depende dele: handlers/Handle-LicensingMatrix.ps1 (repo DataBoar/maestro) chama esse script.
Hoje isso funciona porque o híbrido é opcional no verify. Com o híbrido obrigatório, o Maestro e qualquer fluxo que use esse emissor passam a receber licença recusada.
Esperado
O emissor de dev gera dbmldsa_sig válido sob o payload canônico, assinado com uma chave ML-DSA de dev, nunca a golden. Isso exige uma âncora de teste equivalente, que só pode existir em build de teste (como o -tags licensetest do kp-license-check).
A chave privada de dev não entra no repositório.
Teste que prova que o token de dev passa no caminho híbrido obrigatório e que o mesmo token sem a claim é recusado.
Critérios de aceite
Token de dev verifica pelo mesmo caminho híbrido de produção, com âncora de teste isolada.
Nenhuma chave privada, nem de dev, commitada.
A matriz de licenciamento do Maestro continua verde com o híbrido obrigatório.
Atualização de escopo (auditoria, tom recomendatório) — verificado contra origin/main @ 9fdd2434, 2026-10-19.
Continua valendo: scripts/issue_dev_license_jwt.py não referencia mldsa/dbmldsa_sig. A âncora de produção já está vendorizada (#2075) e a claim inválida já falha fechada (#2002), então o que falta é o lado emissor + o fim do modo opcional (#2042).
Recomendações:
O emissor de dev passa a emitir dbmldsa_sig válido sobre o payload canônico, assinado com chave ML-DSA de dev, nunca a golden.
Resolvida pela PR #2114 (merge 87f1fe0). Commit 98b6ad8: o emissor de DEV assina dbmldsa_sig. Teste: test_dev_token_without_claim_is_rejected em tests/test_issue_dev_license_qa.py.
Activity
FabioLeitao commentedon Oct 20, 2026
Atualização de escopo (auditoria, tom recomendatório) — verificado contra
origin/main@9fdd2434, 2026-10-19.Continua valendo:
scripts/issue_dev_license_jwt.pynão referenciamldsa/dbmldsa_sig. A âncora de produção já está vendorizada (#2075) e a claim inválida já falha fechada (#2002), então o que falta é o lado emissor + o fim do modo opcional (#2042).Recomendações:
dbmldsa_sigválido sobre o payload canônico, assinado com chave ML-DSA de dev, nunca a golden.Handle-LicensingMatrix.ps1noDataBoar/maestrocom o híbrido obrigatório: a matriz precisa continuar verde. Ordem segura: emissor de dev + âncora de teste antes (ou junto) de tornar o híbrido obrigatório (licensing: âncora ML-DSA embutida ausente e híbrido ainda opcional no guard (canon: Ed25519 + ML-DSA obrigatório) #2042).Rodapé: comentário gerado por Claude (auditor RO), sem alteração de código.
FabioLeitao commentedon Oct 20, 2026
Resolvida pela PR #2114 (merge 87f1fe0). Commit 98b6ad8: o emissor de DEV assina dbmldsa_sig. Teste: test_dev_token_without_claim_is_rejected em tests/test_issue_dev_license_qa.py.