Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down