bounded_authority_report_adapter is the holder/issuer
companion signer the TypeScript package ports: it takes a {module, term()} key handle whose callbacks reach
your own custody — an HSM, a KMS, an in-process test key — and produces the signed envelope.
The private key never enters the library. The dependency is one-directional:
this adapter depends on the protocol package, never the reverse; verifiers depend only on the
protocol package, never on this adapter.
The properties the whole family inherits — enforced here first, ported verbatim.
Custody is the caller’s.
A signing library that touches key material becomes the most valuable
target in your system.
The adapter only ever calls {module, term()} callbacks into your
custody — and every sign path ends in a verify-against-the-public-key guard, so a
misconfigured custodian fails loudly.
A holder cannot mint capability.
If the agent’s key can self-issue grants, the boundary is decorative.
sign_grant/3 resolves the issuer role atomically and fails
closed before sign/2 is ever called — a holder handle cannot mint its own authority.
Nothing leaks in failure.
Error messages that narrate which check failed are reconnaissance gifts.
Closed error atoms, value-free telemetry — no key material, message
bytes, or report content ever appears in an error or an event.
The family
One protocol, four repositories, two ecosystems — same wire bytes everywhere.
The protocol
The monorepo: wire specs, the ADR library, certified conformance corpora, the threat model.