This page lists exactly what the Hex package promises across a release line, and what it does not. The repository's test suite checks the module lists below against the architecture gate that pins the package's public exports and struct fields, so the page and the code cannot drift apart.
Two version numbers
- Package versions (
0.9.1,1.0.0,1.1.0) are Hex releases of this library, following Semantic Versioning. "Package 1.x" means every release from 1.0.0 before 2.0.0. - Contract-majors (1, 2, 3) are closed wire profiles, each with its own namespace
(
BoundedAuthorityProtocol.V1,V2,V3), suite (BAP1-Ed25519-SHA256,BAP2-Ed25519-SHA256,BAP3-ES256-SHA256), specification, and corpus.
The numbers are independent. One package release carries several contract-majors, a new contract-major arrives in a package minor release, and a package major release changes no wire profile.
What a release may change
From package 1.0.0 (governance ยง Package versions is the normative text):
| Release | May contain |
|---|---|
| Patch (1.0.x) | An editorial erratum, or a fix that changes no documented behavior or verdict. |
| Minor (1.x.0) | A new contract-major or sibling profile; a new public function, optional argument, or struct field with a default; a soundness repair that meets every governance condition; a raised Elixir or Erlang/OTP floor, announced in the changelog. |
| Major (2.0.0) | Removing a namespace, or changing a struct field, a function arity, a return shape, an enforced key, or a documented error. |
A soundness repair is the one way a verdict changes inside a contract-major: it changes verdicts
only from accept to reject, only on inputs no conforming producer emits, and it is recorded in
the errata registry. Pin the minor-bounded requirement (~> 1.0 admits every 1.x
release) and run the packaged corpora after each upgrade
(Recipes).
Within a contract-major, the accepted bytes and verdicts never change except through such a
repair. Every function keeps returning {:ok, value} or exactly {:error, :invalid}, and the
facts structs keep their not-evaluated markers.
Stable surface
Within package 1.x, these modules keep their public functions (name, arity, argument and return shapes), their struct fields, and their documented errors. New functions and new defaulted fields may be added.
Contract-major 1 facade and structs:
BoundedAuthorityProtocol.V1BoundedAuthorityProtocol.V1.AnchorFactsBoundedAuthorityProtocol.V1.AnchoredExportFactsBoundedAuthorityProtocol.V1.AnchoredExportInputBoundedAuthorityProtocol.V1.ArchivedObjectBoundedAuthorityProtocol.V1.BoundaryAnchorBoundedAuthorityProtocol.V1.ChainFactsBoundedAuthorityProtocol.V1.ChainInputBoundedAuthorityProtocol.V1.ConsumptionEntryBoundedAuthorityProtocol.V1.CredentialsBoundedAuthorityProtocol.V1.DecodedGrantBoundedAuthorityProtocol.V1.DecodedProofBoundedAuthorityProtocol.V1.EncodedAnchoredExportBoundedAuthorityProtocol.V1.EncodedConsumptionEntryBoundedAuthorityProtocol.V1.EnvelopeFactsBoundedAuthorityProtocol.V1.ExpectedAnchorBoundedAuthorityProtocol.V1.ExpectedAnchoredExportBoundedAuthorityProtocol.V1.ExpectedChainBoundedAuthorityProtocol.V1.ExpectedExportBoundedAuthorityProtocol.V1.ExpectedGrantBoundedAuthorityProtocol.V1.ExpectedKeyTransitionBoundedAuthorityProtocol.V1.ExpectedRequestBoundedAuthorityProtocol.V1.GrantBoundedAuthorityProtocol.V1.GrantFactsBoundedAuthorityProtocol.V1.HistoricalKeyChainBoundedAuthorityProtocol.V1.HistoricalPublicKeyBoundedAuthorityProtocol.V1.KeyLocatorBoundedAuthorityProtocol.V1.KeyTransitionBoundedAuthorityProtocol.V1.KeyTransitionFactsBoundedAuthorityProtocol.V1.OperationBoundedAuthorityProtocol.V1.ProofBoundedAuthorityProtocol.V1.SelectorBoundedAuthorityProtocol.V1.SigningInputBoundedAuthorityProtocol.V1.TrustedIssuer
Shared building blocks:
BoundedAuthorityProtocol.V1.Base64UrlBoundedAuthorityProtocol.V1.BoundsBoundedAuthorityProtocol.V1.JcsBoundedAuthorityProtocol.V1.JsonBoundedAuthorityProtocol.V1.JwkBoundedAuthorityProtocol.V1.Uri
Contract-major 2 facade and structs:
BoundedAuthorityProtocol.V2BoundedAuthorityProtocol.V2.AnchorFactsBoundedAuthorityProtocol.V2.AnchoredExportFactsBoundedAuthorityProtocol.V2.ChainFactsBoundedAuthorityProtocol.V2.DecodedGrantBoundedAuthorityProtocol.V2.DecodedProofBoundedAuthorityProtocol.V2.EnvelopeFactsBoundedAuthorityProtocol.V2.GrantBoundedAuthorityProtocol.V2.GrantFactsBoundedAuthorityProtocol.V2.KeyTransitionFactsBoundedAuthorityProtocol.V2.OperationBoundedAuthorityProtocol.V2.ProofBoundedAuthorityProtocol.V2.Selector
Contract-major 3 facade and structs:
BoundedAuthorityProtocol.V3BoundedAuthorityProtocol.V3.AnchorFactsBoundedAuthorityProtocol.V3.AnchoredExportFactsBoundedAuthorityProtocol.V3.ChainFactsBoundedAuthorityProtocol.V3.DecodedGrantBoundedAuthorityProtocol.V3.DecodedProofBoundedAuthorityProtocol.V3.EcJwkBoundedAuthorityProtocol.V3.EnvelopeFactsBoundedAuthorityProtocol.V3.GrantBoundedAuthorityProtocol.V3.GrantFactsBoundedAuthorityProtocol.V3.KeyTransitionFactsBoundedAuthorityProtocol.V3.OperationBoundedAuthorityProtocol.V3.ProofBoundedAuthorityProtocol.V3.Selector
Signature suites:
Sibling profiles:
BoundedAuthorityProtocol.ApplicationProfile.LocalLoopbackHttp.V1BoundedAuthorityProtocol.RoleAttestation.V1BoundedAuthorityProtocol.RoleAttestation.V1.AttestationFactsBoundedAuthorityProtocol.RoleAttestation.V1.DecodedAttestationBoundedAuthorityProtocol.RoleAttestation.V1.ExpectedAttestationBoundedAuthorityProtocol.RoleAttestation.V1.RoleAttestationBoundedAuthorityProtocol.ContentAssertion.V1BoundedAuthorityProtocol.ContentAssertion.V1.ContentAssertionBoundedAuthorityProtocol.ContentAssertion.V1.ContentAssertionFactsBoundedAuthorityProtocol.ContentAssertion.V1.DecodedContentAssertionBoundedAuthorityProtocol.ContentAssertion.V1.ExpectedContentAssertion
Conformance:
BoundedAuthorityProtocol.Conformance.Cli:run/1and thebounded_authority_conformancecommand. Its flags (--corpus DIR, required;--report PATH;--help;--version), its exit statuses (0complete agreement,1any disagreement, integrity, completeness, or I/O failure,2a usage error), and its report's JSON fields (format,agreement,exit_status,total,agreed,disagreed,index_sha256_base64url) are part of the contract.
Not covered
These are public only because Elixir has no private modules, are hidden from these docs, and may change in any release:
BoundedAuthorityProtocol.V1.Runtime,BoundedAuthorityProtocol.V2.Runtime,BoundedAuthorityProtocol.V3.Runtime, and every otherRuntimemodule;BoundedAuthorityProtocol.Conformance.Corpus,BoundedAuthorityProtocol.Conformance.Runner, andBoundedAuthorityProtocol.Conformance.Report, the CLI's internals;BoundedAuthorityProtocol.Conformance.Cli.Main, the escript entry point;BoundedAuthorityProtocol.V1.Jwk.thumbprint_digest_unchecked/1;- the signature gate helpers
BoundedAuthorityProtocol.Ed25519.signature_gate?/1andBoundedAuthorityProtocol.Ed25519.strict_gate?/2; - the selector helpers that verification and the producers share, in each of
BoundedAuthorityProtocol.V1.Selector,BoundedAuthorityProtocol.V2.Selector, andBoundedAuthorityProtocol.V3.Selector:BoundedAuthorityProtocol.V1.Selector.float_zero_free?/1,BoundedAuthorityProtocol.V1.Selector.integral_float_free?/1,BoundedAuthorityProtocol.V1.Selector.match_all/3,BoundedAuthorityProtocol.V1.Selector.semantic_equal?/2;BoundedAuthorityProtocol.V2.Selector.float_zero_free?/1,BoundedAuthorityProtocol.V2.Selector.integral_float_free?/1,BoundedAuthorityProtocol.V2.Selector.match_all/3,BoundedAuthorityProtocol.V2.Selector.semantic_equal?/2;BoundedAuthorityProtocol.V3.Selector.float_zero_free?/1,BoundedAuthorityProtocol.V3.Selector.integral_float_free?/1,BoundedAuthorityProtocol.V3.Selector.match_all/3,BoundedAuthorityProtocol.V3.Selector.semantic_equal?/2;
- every function or module marked
@doc falseor@moduledoc false.
Also not covered: the text of inspect/2 output (it redacts credentials, arguments, and nonces,
and its exact form may change), the order of keys in maps you did not build, and the wording of
any message the CLI writes to standard error.
What never changes
Whatever the package version:
- every verification and production function returns
{:ok, value}or exactly{:error, :invalid}, and signals every failure with that one value; - the facts are redacted and never authorize (
authorization: :not_evaluated,trust: :not_evaluated); - the package performs no I/O, reads no clock, and holds no keys, outside the conformance CLI's documented file reads.