Skip to content

Releases: brunoga/deep

v5.3.0

01 Jun 16:38
991e5ad

Choose a tag to compare

⚠️ Breaking change — JSON wire format

Operation.From (json "f") now carries the source path for OpMove/OpCopy. Previously the source path was stored in Operation.Old (json "o"). Patches serialised by v5.2.0 and earlier will not round-trip cleanly through ParseJSONPatch / UnmarshalJSON. Generated *_deep.go files are unaffected — Move/Copy ops fall through to the reflection path which now reads From.

Migration: re-serialise any persisted patches, or attach a transformation step that copies the source path from Old to From for OpMove/OpCopy ops before parsing.

What's Changed

Twelve correctness/robustness fixes plus the wire-format split, all in #45:

  • engine: OpCopy deep-copies the source so reference-typed destinations no longer alias.
  • selector: MapKey RFC 6901-escapes the key so values containing / or ~ navigate correctly.
  • patch: Reverse drops OpLog ops instead of emitting a malformed zero-Kind operation.
  • patch: ParseJSONPatch only lifts the leading test-op into Guard; a later same-shape entry no longer overwrites it.
  • operation: split From (source path) from Old (prior value) — see the breaking change note above.
  • deep-gen: root-level strict check uses a comma-ok type assertion (no more panic on mismatched Old).
  • engine: ApplyOpReflectionValue nil-checks the logger.
  • engine: OpMove/OpCopy from a non-existent source now surface an error (test gap closed).
  • hlc: Clock.SetLatest rehydrates the clock under the mutex; CRDT.UnmarshalJSON uses it.
  • hlc: Clock.Reserve panics on negative n or int32 overflow instead of silently wrapping.
  • condition: Not with an empty Sub returns an explicit error.
  • crdt: Set.Len no longer materialises the full Items() slice.

Full Changelog: v5.2.0...v5.3.0

v5.2.0

01 Jun 11:10
9e5bffd

Choose a tag to compare

What's Changed

  • feat(crdt): add Reverse method to CRDT[T] for undo/redo support by @brunoga in #42
  • fix(deep-gen): stop emitting imports of internal/engine in generated code by @brunoga in #44

Full Changelog: v5.1.1...v5.2.0

v5.1.1

25 Mar 14:00
d693764

Choose a tag to compare

What's Changed

  • fix(engine): delegate customDiffPatch.summary() to inner patch's Summary() by @brunoga in #41

Full Changelog: v5.1.0...v5.1.1

v5.1.0

25 Mar 12:08
aaba2e7

Choose a tag to compare

What's Changed

  • feat(crdt): add PN-Counter, OR-Set, and LWW-Map CRDTs by @brunoga in #40

Full Changelog: v5.0.1...v5.1.0

v5.0.1

25 Mar 10:29
f9f5eb5

Choose a tag to compare

What's Changed

  • fix: correct path navigation, map-nested writes, and CRDT Text convergence by @brunoga in #39

Full Changelog: v5.0.0...v5.0.1

v5.0.0

24 Mar 14:09
0f00be9

Choose a tag to compare

What's Changed

  • Refactor: v5 API Overhaul and Architecture Rewrite by @brunoga in #38

Full Changelog: v4.1.0...v5.0.0

v4.1.0

20 Feb 20:33
3975799

Choose a tag to compare

What's Changed

  • feat: implement pluggable serialization for patches and conditions by @brunoga in #37

Full Changelog: v4.0.0...v4.1.0

v4.0.0

18 Feb 16:29
9a43400

Choose a tag to compare

What's Changed

  • feat: robust move detection and dependency-aware patch application by @brunoga in #30
  • Refactor/core internal and json paths by @brunoga in #31
  • refactor: clean up and simplify public API for release by @brunoga in #32
  • refactor: merge Node into PatchBuilder for a fluent API by @brunoga in #33
  • fix: update examples to use JSON Pointers in conditions by @brunoga in #34
  • refactor: improve ConflictResolver API with current/proposed context by @brunoga in #35
  • release: v4.0.0 by @brunoga in #36

Full Changelog: v3.1.1...v4.0.0

v3.1.1

15 Feb 13:46
763dc47

Choose a tag to compare

What's Changed

  • fix: core improvements and CRDT enhancements by @brunoga in #29

Full Changelog: v3.1.0...v3.1.1

v3.1.0

14 Feb 15:09
16876ca

Choose a tag to compare

What's Changed

  • feat(crdt): robust RGA-based Text CRDT with run optimization by @brunoga in #28

Full Changelog: v3.0.0...v3.1.0