diff --git a/CHANGELOG.md b/CHANGELOG.md index 466ebf1..29718c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Changelog -## Unreleased +## 1.0.0-beta.3 - 2026-09-14 + +Closes the listed divergences below from `dcbor` 0.25.2; +the Rust harness now replays encode, decode, format, date and +unsigned vectors under both reference builds in CI. ### Changed @@ -57,7 +61,7 @@ - `expectUnsigned(cbor, { width, wrapNegative })` extracts into a fixed width like `u8`…`u64::try_from`, including the reference's wrap of a - negative integer (`-1` → `255` at width 8; RUST_DIVERGENCES.md §1.1). + negative integer (`-1` → `255` at width 8). Without options the behaviour is unchanged. - `TagsStore.clone()` mirrors `#[derive(Clone)]`: an independent copy that shares frozen tags and summarizer functions. diff --git a/README.md b/README.md index 3f1f964..eca8ece 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Runnable examples live in the [`examples/`](https://github.com/BlockchainCommons ### Version History -- **Unreleased** - Closes every observable difference from `dcbor` 0.25.2: decoding keeps a leading U+FEFF; `cbor(string)` keeps the string and the encoder normalizes to NFC; `InvalidUtf8` messages mirror `core::str::Utf8Error`; float heads follow the reference's canonicality predicates (a whole f32 head at or beyond 2^31 decodes to an integer); float diagnostics round exact decimal ties like Rust; `CborDate` holds seconds plus nanoseconds (leap seconds display as `:60`, `NaN` is the epoch); `WrongTag` names both tags; `cborEquals` is structural; `registerStandardTags` registers unconditionally, tags are frozen and the global store is one per process across ESM and CJS; `expectUnsigned` gains fixed-width extraction and `TagsStore.clone()` is added. The Rust harness runs two builds over encode, decode (with messages), format, date and unsigned vectors, in CI. See `CHANGELOG.md` and `RUST_DIVERGENCES.md`. +- **1.0.0-beta.3 (September 14, 2026)** - `cborEquals` is structural; `cbor(string)` keeps the string as given and the encoder normalizes to NFC (a leading U+FEFF survives decoding); float heads and float diagnostics follow the reference; `CborDate` holds seconds plus nanoseconds; `WrongTag` names both tags; `registerStandardTags` registers unconditionally, tags are frozen and the global store is one per process; `expectUnsigned` gains fixed-width extraction and `TagsStore.clone()` is added; the `TAG_*` constants with no reference counterpart are removed. - **1.0.0-beta.2 (September 13, 2026)** - Diagnostic line breaking measures strings in UTF-8 bytes as the reference does; dates outside the reference's representable range are `InvalidDate` (an integer `f64` cannot hold is `OutOfRange` on decode) instead of a late `RangeError`; `registerStandardTags` names the bignum tags only on request, as the reference names them only under `num-bigint`; a tag-registration conflict is a `CborError`; `CborDate.fromString` parses exactly as `Date::from_string` (nanosecond fractions, leap seconds, chrono's bare-date forms), the component constructors validate instead of rolling over, and `toString()` prints years outside 0–9999 as the reference does. - **1.0.0-beta.1 (July 21, 2026)** - Initial beta implementation. diff --git a/package.json b/package.json index d9ba11a..d51fe47 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@blockchaincommons/dcbor", - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.3", "type": "module", "sideEffects": false, "description": "Blockchain Commons Deterministic CBOR (dCBOR) for TypeScript",