Conversation
There was a problem hiding this comment.
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 andModel.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 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. |
There was a problem hiding this comment.
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.