Releases: blackwell-systems/gcf-dotnet
Release list
gcf-dotnet v1.0.0 — first stable release
First stable release of the GCF codec for .NET.
The public API is now committed under semantic versioning:
- Facade:
Gcf—EncodeGeneric/DecodeGeneric, graphEncode/Decode, delta encoding, session dedup, pack roots, and streaming. - Data types:
Symbol,Edge,Payload,DeltaPayload,GenericSet,GenericDeltaPayload,GenericOptions,ReanchorPolicy,GenericDeltaSession,OrderedMap,Session,StreamOptions,StreamEncoder. - Exceptions:
DecodeException,EncodeException.
No wire-format or behavioral changes from v0.2.1. Verified against the shared conformance suite (281 fixtures) and the cross-SDK differential fuzz.
Zero runtime dependencies. Multi-targets netstandard2.0 and net8.0 (runs on .NET Framework 4.6.1+, Mono, Unity, and modern .NET).
NuGet: https://www.nuget.org/packages/BlackwellSystems.Gcf/1.0.0
gcf-dotnet v0.2.1 — decode quoted-key/array-value round-trip
A quoted key containing [ alongside an array value now round-trips. Such a key encodes to a named-array line ({"a[b": [1]} -> "a[b"[1]: 1); the decoder locates the array count bracket after the closing quote, per SPEC 4.2. Verified across all seven SDKs by the shared conformance fixtures (keys/012, keys/014, keys/015) and the cross-SDK differential fuzz.
Full changelog: https://github.com/blackwell-systems/gcf-dotnet/blob/main/CHANGELOG.md
gcf-dotnet v0.2.0 — int64 numeric domain
Implements the v3.5.3 numeric domain (SPEC 2.3.2): the canonical domain is signed int64 for integers and IEEE-754 double for non-integers. This SDK parses integer literals to an exact int64 on decode and on the JSON-to-value bridge, and rejects a value outside int64 with an out-of-range error on both decode and encode, rather than following the host numeric type for integers beyond the double-exact range (2^53). Values beyond int64 (unsigned-64 identifiers, exact decimals) are modeled as strings. Canonical number formatting aligns to the domain: a double at or above 2^53 renders in exponent notation. Verified against the shared conformance fixtures (numbers/017-024, errors-v2/041-042) and the cross-SDK differential fuzz.
Adds EncodeException for an out-of-domain value on encode, symmetric with DecodeException on decode.
Full changelog: https://github.com/blackwell-systems/gcf-dotnet/blob/main/CHANGELOG.md
Full Changelog: v0.1.2...v0.2.0
v0.1.2: number-grammar digits are ASCII only + packaged README
Losslessness fix + packaged README (spec v3.5.2)
.NET's Regex matches \d in Unicode mode (\p{Nd}), so a value like 1.٥ (ASCII 1, ., then U+0665) was classified as number-shaped and quoted on encode, where the ASCII SDKs leave it bare: a byte-identity divergence across the fleet. (Decode was unaffected, since double.TryParse with InvariantCulture rejects non-ASCII digits.) The number grammar and numeric-like patterns now pin digits to ASCII [0-9].
Both packages (BlackwellSystems.Gcf and BlackwellSystems.Gcf.Cli) now ship the README on their NuGet page.
Verified against new conformance fixtures (scalar/029-031, decode/007) and the cross-SDK differential fuzz. Spec errata: gcf v3.5.2.
v0.1.1
- Fixed (losslessness): a field name or scalar value ending in a newline (e.g. a key
"x\n") was mis-classified and emitted unquoted, splitting the wire. In .NET, regex$also matches just before a trailing newline, so^...$wrongly accepted such strings as bare keys / numbers. Anchored the scalar/key/number regexes with\A ... \z(strict end of string) to match the Go/Rust references. Caught by the property fuzz. - Added:
gcfcommand-line tool (BlackwellSystems.Gcf.Cli) withencode/decode/encode-generic/decode-generic/stats, matching the other SDKs' CLI surface. Install withdotnet tool install -g BlackwellSystems.Gcf.Cli. - Property fuzz (idempotent-decode + delta round-trip) and cross-format fuzz (JSON / YAML / TOML / CSV); 33M+ round-trips clean. .NET added to the cross-language conformance matrix and the cross-SDK differential fuzz.
v0.1.0
Full Changelog: https://github.com/blackwell-systems/gcf-dotnet/commits/v0.1.0