Skip to content

Commit e6d0a7d

Browse files
Implement generic-profile delta (SPEC §10a)
Full producer + consumer for generic-profile keyed-row delta, byte-for-byte interoperable with gcf-go: - GenericSet, GenericDeltaPayload - generic_pack_root (gcf-pack-root-v1) with collision-free cell canonicalization decoupled from the wire encoder; fields and records sort by UTF-8 byte order to match Go's sort.Strings - diff_generic_sets (blessed producer path), encode_generic_full, encode_generic_delta - decode_generic_full, decode_generic_delta (consumer wire parsing) - verify_generic_delta (atomic apply + new_root verification) Delta is opt-in and bilateral; encode_generic is unchanged. Adds a unit suite mirroring gcf-go and conformance-runner support for the four generic delta operations (12 shared fixtures). Bumps version to 2.3.0.
1 parent e3afca4 commit e6d0a7d

5 files changed

Lines changed: 594 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
# Changelog
22

3+
## v2.3.0 (unreleased)
4+
5+
### Generic-profile delta encoding (SPEC §10a)
6+
7+
- Full producer + consumer implementation of generic-profile delta, byte-for-byte interoperable with `gcf-go`:
8+
- `GenericSet` (keyed record set), `GenericDeltaPayload`
9+
- `generic_pack_root` (`gcf-pack-root-v1`, generic profile) with a purpose-built cell canonicalization decoupled from the wire cell encoder: collision-free (null/bool/number bare, strings always quoted) and record-safe. Fields and records sort by UTF-8 byte order to match Go's `sort.Strings`.
10+
- `diff_generic_sets` (the blessed producer path; centralizes the keyed-diff invariants), `encode_generic_full`, `encode_generic_delta`
11+
- `decode_generic_full`, `decode_generic_delta` (consumer wire parsing)
12+
- `verify_generic_delta` (atomic apply + `new_root` verification)
13+
- Delta is opt-in and bilateral; the existing `encode_generic` path is unchanged (backward compatible).
14+
15+
### Tests
16+
17+
- Unit suite mirroring `gcf-go`: self-proving round-trip (diff -> encode -> apply -> recomputed root), determinism / row-order invariance, no-type-collision canonicalization, every invariant/error path, full-payload wire round-trip, the complete server -> wire -> consumer end-to-end loop, and malformed-wire-fails-closed.
18+
- Conformance runner support for `generic-pack-root`, `generic-delta`, `generic-delta-verify`, `generic-delta-decode` (12 shared fixtures); verified to produce identical pack roots and delta wire to `gcf-go`.
19+
320
## v2.2.2 (2026-07-10)
421

522
### Fixes

src/gcf/__init__.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@
3939
from .delta import encode_delta
4040
from .encode import encode
4141
from .generic import encode_generic, GenericOptions
42+
from .generic_delta import (
43+
GenericSet,
44+
GenericDeltaPayload,
45+
generic_pack_root,
46+
diff_generic_sets,
47+
encode_generic_full,
48+
encode_generic_delta,
49+
decode_generic_full,
50+
decode_generic_delta,
51+
verify_generic_delta,
52+
)
4253
from .session import Session, encode_with_session
4354
from .decode_generic import decode_generic
4455
from .stream import StreamEncoder
@@ -64,6 +75,15 @@
6475
"encode_generic",
6576
"GenericOptions",
6677
"encode_with_session",
78+
"GenericSet",
79+
"GenericDeltaPayload",
80+
"generic_pack_root",
81+
"diff_generic_sets",
82+
"encode_generic_full",
83+
"encode_generic_delta",
84+
"decode_generic_full",
85+
"decode_generic_delta",
86+
"verify_generic_delta",
6787
]
6888

69-
__version__ = "2.2.2"
89+
__version__ = "2.3.0"

0 commit comments

Comments
 (0)