Skip to content

JSON CRDT delta#1013

Merged
streamich merged 37 commits intomasterfrom
crdt-delta
Apr 11, 2026
Merged

JSON CRDT delta#1013
streamich merged 37 commits intomasterfrom
crdt-delta

Conversation

@streamich
Copy link
Copy Markdown
Owner

No description provided.

streamich added 30 commits April 8, 2026 14:53
Copilot AI review requested due to automatic review settings April 11, 2026 00:39
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds delta-based synchronization primitives for JSON CRDT models (compute/apply/serialize deltas), plus supporting batch/clock encoding work and test updates needed for null-prototype object views.

Changes:

  • Introduce Delta (group of CRDT ops) with binary/compact/verbose codecs and a 3-message sync helper.
  • Add node-level delta(...) emitters and Model.delta() / applyDelta() / merge() to compute/apply missing state.
  • Harden object handling by supporting null-prototype objects in encoders/views and update assertions accordingly.

Reviewed changes

Copilot reviewed 85 out of 86 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
packages/json-pack/src/json/JsonEncoder.ts Treat null-proto objects as objects
packages/json-pack/src/cbor/CborEncoder.ts Treat null-proto objects as objects
packages/json-joy/src/util/print.ts Add indent() helper for printing
packages/json-joy/src/json-crdt/partial-edit/tests/scenario.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/nodes/vec/VecNode.ts Add vec delta emission
packages/json-joy/src/json-crdt/nodes/val/ValNode.ts Add val delta emission
packages/json-joy/src/json-crdt/nodes/types.ts Add delta() to JsonNode interface
packages/json-joy/src/json-crdt/nodes/str/StrNode.ts Add str delta emission
packages/json-joy/src/json-crdt/nodes/obj/ObjNode.ts Add obj delta + null-proto view
packages/json-joy/src/json-crdt/nodes/const/ConNode.ts Add con delta emission
packages/json-joy/src/json-crdt/nodes/bin/BinNode.ts Add bin delta emission
packages/json-joy/src/json-crdt/nodes/arr/ArrNode.ts Add arr delta emission
packages/json-joy/src/json-crdt/model/Model.ts Add delta/applyDelta/merge APIs
packages/json-joy/src/json-crdt/model/api/tests/scenarios/obect-in-value-in-array.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/model/api/tests/scenarios/invalid-patch.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/model/api/tests/scenarios/idempotence.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/model/api/tests/ModelApi.proxy.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/model/api/tests/ModelApi.find.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/model/api/tests/ModelApi.events.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/model/tests/Model.reset.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/model/tests/Model.node-deletion.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/model/tests/Model.events.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/model/tests/Model.delta.spec.ts Add model delta/merge tests
packages/json-joy/src/json-crdt/model/tests/Model.cloning.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/model/tests/Model.caching.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/extensions/ExtNode.ts Add delta stub for extensions
packages/json-joy/src/json-crdt/delta/sync.ts Add 3-message delta sync helper
packages/json-joy/src/json-crdt/delta/Delta.ts Add Delta type + binary codec hooks
packages/json-joy/src/json-crdt/delta/codec/verbose/types.ts Add verbose delta codec types
packages/json-joy/src/json-crdt/delta/codec/verbose/encode.ts Add verbose delta encoder
packages/json-joy/src/json-crdt/delta/codec/verbose/decode.ts Add verbose delta decoder
packages/json-joy/src/json-crdt/delta/codec/compact/types.ts Add compact delta codec types
packages/json-joy/src/json-crdt/delta/codec/compact/encode.ts Add compact delta encoder
packages/json-joy/src/json-crdt/delta/codec/compact/decode.ts Add compact delta decoder
packages/json-joy/src/json-crdt/delta/codec/binary/shared.ts Shared delta binary codec instances
packages/json-joy/src/json-crdt/delta/codec/binary/Encoder.ts Add binary delta encoder
packages/json-joy/src/json-crdt/delta/codec/binary/Decoder.ts Add binary delta decoder
packages/json-joy/src/json-crdt/delta/tests/Delta.spec.ts Add delta correctness/idempotence tests
packages/json-joy/src/json-crdt/codec/structural/verbose/Encoder.ts Emit null-proto maps for objects
packages/json-joy/src/json-crdt/codec/structural/compact/Encoder.ts Emit null-proto maps for objects
packages/json-joy/src/json-crdt/codec/structural/binary/ViewDecoder.ts Decode objects into null-proto maps
packages/json-joy/src/json-crdt/codec/structural/binary/tests/ViewDecoder.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/codec/structural/binary/tests/codec-logical.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/tests/recursion.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/tests/guide/4-Patch.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/tests/guide/3-PatchBuilder.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/tests/guide/2-ModelApi.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/tests/guide/1-JsonPatch.spec.ts Update equality assertions
packages/json-joy/src/json-crdt/tests/fuzzer2/fuzzing-1.spec.ts Add merge fuzz tests (new suite)
packages/json-joy/src/json-crdt/tests/fuzzer2/FuzzerModel.ts Fuzzer model op generator
packages/json-joy/src/json-crdt/tests/fuzzer2/FuzzerContext.ts Fuzzer harness + merge assertions
packages/json-joy/src/json-crdt-patch/util/binary/CrdtWriter.ts Add version-vector writer (vv)
packages/json-joy/src/json-crdt-patch/util/binary/CrdtReader.ts Add version-vector reader (vv)
packages/json-joy/src/json-crdt-patch/Patch.ts Align patch op types + ctor
packages/json-joy/src/json-crdt-patch/operations.ts Add JsonCrdtOperation union + group iface
packages/json-joy/src/json-crdt-patch/codec/verbose/encode.ts Import ordering tweak
packages/json-joy/src/json-crdt-patch/codec/verbose/decode.ts Import ordering tweak
packages/json-joy/src/json-crdt-patch/codec/binary/Encoder.ts Refactor to writePatch/writeOp
packages/json-joy/src/json-crdt-patch/clock/types.ts Add vv/has/gap/toU8/advanceCC to interface
packages/json-joy/src/json-crdt-patch/clock/clock.ts Implement vv/has/gap/toU8/advanceCC + fromU8
packages/json-joy/src/json-crdt-patch/batch/util.ts Add RLE/delta/zigzag utilities
packages/json-joy/src/json-crdt-patch/batch/codec/verbose/types.ts Add verbose batch codec types
packages/json-joy/src/json-crdt-patch/batch/codec/verbose/encode.ts Add verbose batch encoder
packages/json-joy/src/json-crdt-patch/batch/codec/verbose/decode.ts Add verbose batch decoder
packages/json-joy/src/json-crdt-patch/batch/codec/verbose/tests/smoketest.spec.ts Add verbose batch codec tests
packages/json-joy/src/json-crdt-patch/batch/codec/verbose/tests/automated.spec.ts Add verbose batch codec doc tests
packages/json-joy/src/json-crdt-patch/batch/codec/verbose/tests/assertRoundtrip.ts Shared roundtrip assertion helper
packages/json-joy/src/json-crdt-patch/batch/codec/compact/types.ts Add compact batch codec types
packages/json-joy/src/json-crdt-patch/batch/codec/compact/encode.ts Add compact batch encoder
packages/json-joy/src/json-crdt-patch/batch/codec/compact/decode.ts Add compact batch decoder
packages/json-joy/src/json-crdt-patch/batch/codec/compact/tests/smoketest.spec.ts Add compact batch codec tests
packages/json-joy/src/json-crdt-patch/batch/codec/compact/tests/automated.spec.ts Add compact batch codec doc tests
packages/json-joy/src/json-crdt-patch/batch/codec/compact/tests/assertRoundtrip.ts Shared roundtrip assertion helper
packages/json-joy/src/json-crdt-patch/batch/codec/binary/Encoder.ts Add binary batch encoder
packages/json-joy/src/json-crdt-patch/batch/codec/binary/Decoder.ts Add binary batch decoder
packages/json-joy/src/json-crdt-patch/batch/codec/binary/tests/smoketest.spec.ts Add binary batch codec tests
packages/json-joy/src/json-crdt-patch/batch/codec/binary/tests/automated.spec.ts Add binary batch codec doc tests
packages/json-joy/src/json-crdt-patch/batch/codec/binary/tests/assertRoundtrip.ts Shared roundtrip assertion helper
packages/json-joy/src/json-crdt-patch/batch/codec/BatchColumnEncoder.ts Add columnar batch encoder core
packages/json-joy/src/json-crdt-patch/batch/codec/BatchColumnDecoder.ts Add columnar batch decoder core
packages/json-joy/src/json-crdt-patch/batch/Batch.ts New Batch implementation (moved)
packages/json-joy/src/json-crdt-patch/batch/tests/util.vi.spec.ts Tests for batch util encodings
packages/json-joy/src/json-crdt-patch/Batch.ts Re-export moved Batch
packages/json-joy/src/json-crdt-extensions/peritext/slice/tests/Slices.spec.ts Update equality assertions
packages/json-joy/src/json-crdt-extensions/peritext/overlay/tests/Overlay.spec.ts Update equality assertions
packages/json-joy/src/json-crdt-extensions/peritext/editor/tests/atomic-slices.spec.ts Update equality assertions

Comment thread packages/json-joy/src/json-crdt-patch/batch/codec/BatchColumnEncoder.ts Outdated
Comment on lines +46 to +48
/**
* Populates the delta group with the operations that can MUST applied to the
* model of another peer to "fill in" the missing state.
Copy link

Copilot AI Apr 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Docstring grammar is incorrect/ambiguous: “operations that can MUST applied”. Please rephrase to something like “operations that must be applied” or “operations that can be applied” so the interface contract is clear.

Copilot uses AI. Check for mistakes.
@streamich streamich merged commit 19af04a into master Apr 11, 2026
9 checks passed
@streamich streamich deleted the crdt-delta branch April 11, 2026 09:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants