All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Port note.
didwebvh-dartis a faithful port ofdidwebvh-java, built to behave identically and verified against the same shared interop vectors, written with a Dart-idiomatic mindset.
tool/bump-version.sh: an interactive, colorized version-bump wizard. Bumps all three packages in lockstep —version:fields, inter-package^constraints, the README install snippet, the generatedversion.g.dart, and every CHANGELOG (promoting eachUnreleasedsection to the new dated version) — choosing patch/minor/major or an explicit version, explaining what the jump means, always confirming, loudly double-confirming a downgrade, and warning (with a continue/abort prompt) if any changelog'sUnreleasedsection is empty.tool/changelog-extract.sh: prints a single version's CHANGELOG section, used by CI for release notes.- CI: a
github_releasejob in the publish workflow that, after all packages publish, creates the GitHub Release with the matchingCHANGELOG.mdsection as its body (mirroring the didwebvh-java reference). didwebvh_wizardnow derives its--versionstring frompubspec.yamlvia a generatedlib/src/version.g.dart(regenerate withdart run tool/generate_version.dart) instead of a hardcoded literal.- Regression tests pinning that a single-element
service.typearray (e.g.["DIDCommMessaging"]) survives SCID and entry-hash verification, guarding against the typed-model array-collapse bug fixed upstream inaffinidi/affinidi-ssi-dart#290. This port already keeps the DID documentstateas a verbatim map (so it was never affected); the tests lock that in.
- Documented and standardized the changelog conventions (in
docs/AGENTS.mdand the README): the rootCHANGELOG.mdfollows Keep a Changelog (## [Unreleased]/## [X.Y.Z] - DATE); per-package changelogs use the plain Dart-idiomatic style (## Unreleased/## X.Y.Z - DATE). tool/verify.shnow fails fast ifversion.g.dartis out of sync with the wizard'spubspec.yaml, and if the README install snippet pins package versions that don't match theirpubspec.yaml.
Packaging-only patch (no API or behaviour change), fixing pub.dev metadata:
- Restored the canonical Apache-2.0
APPENDIXblock inLICENSE(and each package's copy) so pub.dev's license detector recognizes it asApache-2.0. - Trimmed the
didwebvhpackage description to pub.dev's 60–180 character range.
- Bumped all three packages to
0.1.1and the inter-package constraints to^0.1.1(lockstep versioning).
First release — a complete, interop-verified Dart port of the three didwebvh-java modules across a pub
workspace (didwebvh, didwebvh_signing_local, didwebvh_wizard).
- did:webvh v1.0 method (
didwebvh). Full create / resolve / update / migrate / deactivate, plus paralleldid:webpublishing (spec §3.7.10), behind theDidWebVhfacade andDidWebVhStateholder. - Byte-exact crypto primitives ported from the Java
crypto/package: JCS (RFC 8785 canonicalization),sha2-256multihash, base58btc multibase (z) framing, Ed25519 W3C Multikey (0xed01), SCID, entry-hash, and pre-rotation commitment generators — all gated against the shared cross-language interop vectors. - Model + serialization:
LogEntry,Parameters,DidDocument,VersionId,DataIntegrityProof,ResolveResult/ResolutionMetadata, witness types, and the exception hierarchy. Hand-writtentoJson/fromJsonoverdart:convert(no codegen) reproduces Java's null-preserving vs null-omitting serialization exactly. - Signing: the async
Signerinterface (the one intentional architectural delta from Java — supports local keys, KMS, and HSM),eddsa-jcs-2022ProofGenerator, andProofVerifier(verify/isAuthorized); every proof in all vendored interop logs verifies. - DID URL handling:
DidWebVhUrlparsing and theDidToHttpsTransformerDID→HTTPS/witness/did:webtransform (NFC + IDNA/Punycode host mapping viapunycode+unorm_dart). - Validation & witness: the full spec §3.6.2 log-chain validator (parameter merge, SCID/entry-hash/proof
checks,
versionTimemonotonicity, pre-rotation commitment, deactivation) and threshold witness verification (spec §3.7.5/§3.7.8). Async, mirroring the asyncSigner. - Resolution:
DidResolverover HTTPS (HttpDidFetcher, with a 10 s timeout and a streamed 200 KB response cap), local files, and in-memory logs, with version selection (ResolveOptions) and implicit#files/#whoisservices (spec §3.8/§3.9). didwebvh_signing_local:LocalKeySigner— an async in-memory Ed25519Signeronpackage:cryptography, withgenerate/fromPrivateKey/fromJsonand JWK-styletoJsonimport/export.didwebvh_wizard: an interactive CLI (didwebvh_wizard, installable viadart pub global activate) for create / update (modify, migrate, deactivate) / resolve / export-did:web, with--dir/--actionoptions and an automatic witness key store + proof collection.- Runnable
example/programs fordidwebvh(create → resolve → update with an inline signer) anddidwebvh_signing_local(full create → sign → resolve round-trip). - Project infrastructure: pub-workspace layout (
sdk: ^3.6.0),very_good_analysis(pinned^7.0.0for the 3.6 floor), thetool/verify.shone-shot gate, Codecov (80% ondidwebvh;didwebvhships at ~95%), CI SDK matrix (3.6.0/stable/beta), and tag-triggered pub.dev OIDC publishing. The full porting history and decisions live underdocs/.