Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
14da397
docs(moon): add detailed plan for encoding format
Jan 14, 2026
ab6eddd
docs(moon): design Change/Op IR for testing
Jan 14, 2026
4d255ee
docs(moon): rename Change/Op structs without IR suffix
Jan 14, 2026
bbf76f8
feat(moon): bootstrap codec primitives
Jan 14, 2026
9a67aee
feat(moon): add lz4 frame decoder
Jan 14, 2026
696e12a
feat(moon): implement sstable codec
Jan 14, 2026
767bfb7
feat(moon): parse fastsnapshot/fastupdates bodies
Jan 14, 2026
adb83c8
feat(moon): add container id/wrapper and change-block id
Jan 14, 2026
9a20d29
feat(moon): add serde_columnar codecs
Jan 14, 2026
f3fa4a9
feat(moon): add custom value codec
Jan 14, 2026
c0a8d3f
fix(moon): match serde_columnar delta-of-delta empty encoding
Jan 14, 2026
10f43a2
feat(moon): add ChangeBlock encoded-block codec
Jan 14, 2026
e3140ae
feat(moon): add incremental rle/delta-of-delta decoding helpers
Jan 14, 2026
18d2482
feat(moon): decode change block header/meta and arenas
Jan 14, 2026
5f021b6
feat(moon): add PositionArena v2 codec
Jan 14, 2026
14f379b
feat(moon): extend serde_columnar and value codecs
Jan 14, 2026
3d2127f
feat(moon): decode ChangeBlock ops into Change/Op
Jan 14, 2026
a13d3d1
feat(moon): encode and transcode document blobs
Jan 14, 2026
e8271b8
feat(moon): add JS transcode CLI with Node fs
Jan 14, 2026
8d96885
chore: sync Cargo.lock
Jan 14, 2026
0b40628
fix(moon): handle serde_columnar wrappers
Jan 14, 2026
fec7898
fix(moon): decode ContainerArena as columnar vec
Jan 14, 2026
7102c64
fix(moon): decode ContainerArena as vec of rows
Jan 14, 2026
673fa94
feat(moon): add postcard LoroValue and vv/frontiers codecs
Jan 14, 2026
3c205a2
feat(moon): validate fastsnapshot oplog/state kv stores
Jan 14, 2026
3c43d12
feat(moon): transcode container state snapshots
Jan 14, 2026
3dd341e
test(loro): add optional MoonBit transcode e2e
Jan 14, 2026
4807ec4
docs(moon): add ChangeBlock encoding notes
Jan 14, 2026
a7d365c
feat(moon): re-encode FastUpdates ChangeBlocks
Jan 14, 2026
a30379d
test(loro): broaden MoonBit transcode e2e coverage
Jan 14, 2026
56d4193
docs(moon): note current e2e harness
Jan 14, 2026
676fa9c
feat(moon): add decode-updates JSON output
Jan 14, 2026
219d62c
test(loro): verify Moon decodes text insert op
Jan 14, 2026
a0af415
feat(moon): export JsonSchema updates
Jan 14, 2026
b86e9c4
test(loro): verify Moon JsonSchema export
Jan 14, 2026
792e2c7
test(loro): expand Moon JsonSchema export coverage
Jan 15, 2026
c00d793
docs(moon): document JsonSchema export
Jan 15, 2026
6b14d41
feat(moon): encode FastUpdates from JsonSchema
Jan 15, 2026
c1f988b
test(loro): e2e Moon encodes JsonSchema to updates
Jan 15, 2026
5e5532d
docs(moon): document JsonSchema encode
Jan 15, 2026
7bf07e6
chore(skills): vendor moonbit agent guide
Jan 15, 2026
09040bd
refactor(moon): split JsonSchema export/import modules
Jan 15, 2026
1dd8006
refactor(moon): split serde_columnar strategies
Jan 15, 2026
980b67a
refactor(moon): split ChangeBlock codec into files
Jan 15, 2026
5227bf1
refactor(moon): derive Show/Eq for codec errors
Jan 15, 2026
d565e35
refactor(moon): make JsonSchema import field access safe
Jan 15, 2026
104311b
style(moon): format with moon fmt
Jan 15, 2026
76ea2f2
refactor(moon): split state snapshot codecs
Jan 15, 2026
14eae7d
refactor(moon): split postcard codecs
Jan 15, 2026
a9bd467
refactor(moon): split JsonSchema import
Jan 15, 2026
6125f5a
refactor(moon): split JsonSchema export
Jan 15, 2026
091498e
refactor(moon): split custom value codec
Jan 15, 2026
0588e34
refactor(moon): split sstable codec
Jan 15, 2026
7b8f9d1
refactor(moon): split change block encoder
Jan 15, 2026
d3dffce
refactor(moon): split change block encoded ops
Jan 15, 2026
40493f5
refactor(moon): split delta-of-delta strategy
Jan 15, 2026
e8430df
test(moon): split change block tests
Jan 15, 2026
31b5a45
refactor(moon): split changes_json renderer
Jan 15, 2026
1d8cda3
refactor(moon): split container id codecs
Jan 15, 2026
af51dae
refactor(moon): split JsonSchema import ops
Jan 15, 2026
9bb004d
refactor(moon): extract serde_columnar rle core
Jan 15, 2026
9b9a151
refactor(moon): dedupe delete-seq decode
Jan 15, 2026
a9dea9f
refactor(moon): split postcard common value codec
Jan 15, 2026
6e696fe
refactor(moon): move delta-of-delta helpers
Jan 15, 2026
97fb17c
Merge remote-tracking branch 'origin/main' into feat/moonbit-encoding…
Jan 15, 2026
28a2c2b
chore: update Cargo.lock
Jan 15, 2026
c440c14
docs(moon): define ultimate e2e golden tests
Jan 15, 2026
aacb9af
feat(loro): add moon golden generator CLI
Jan 15, 2026
11d86d4
feat(moon): export deep JSON from snapshots
Jan 15, 2026
6b9e18f
fix(moon): align JsonSchema start_version for FastUpdates
Jan 15, 2026
c8453bc
test(loro): add Moon golden JsonSchema/deep-json checks
Jan 15, 2026
e019daa
docs(moon): link ultimate golden test implementations
Jan 15, 2026
d1f4274
test(loro): enable serde_json float_roundtrip
Jan 15, 2026
386f3a9
test(loro): expand moon golden generator coverage
Jan 15, 2026
ea42f32
fix(moon): sort JsonSchema changes by lamport
Jan 15, 2026
edb4acc
test(loro): expand moon golden coverage matrix
Jan 15, 2026
eb4a710
docs(moon): update e2e coverage status
Jan 15, 2026
094acf1
test(loro): add counter snapshot e2e (optional)
Jan 15, 2026
c3f10c1
fix(moon): export Counter ops in JsonSchema
Jan 15, 2026
2f91fac
test(loro): add Counter JsonSchema e2e check
Jan 15, 2026
7eb2755
feat(moon): support Counter JsonSchema import and LZ4 SSTable encode
Jan 15, 2026
36fa915
fix(moon): make lz4 encoder compatible with moon 0.1
Jan 15, 2026
dced637
chore(loro): enable counter feature by default
Jan 15, 2026
18c006b
test(loro): add moon snapshot fuzz driver
Jan 16, 2026
1904d44
Fix dead container cache invalidation
Jan 16, 2026
f71009d
docs(encoding): align spec with impl
Jan 16, 2026
7dc1823
fix(moon): preserve integer values in jsonschema import
Jan 16, 2026
f067bb8
moon: harden encode-jsonschema
Jan 16, 2026
fb29367
docs/tests: strengthen Moon codec fuzzing
Jan 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
*.ipynb
flamegraph.svg
target
moon/_build/
moon_*_fuzz_artifacts*/
dhat-heap.json
.DS_Store
node_modules/
Expand Down
92 changes: 91 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions crates/kv-store/tests/moon_sstable_fixture.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
use bytes::Bytes;
use loro_kv_store::sstable::SsTable;

#[test]
fn import_moon_encoded_sstable() {
let bytes = Bytes::from_static(include_bytes!("testdata/moon_sstable_simple.bin"));
let table = SsTable::import_all(bytes, true).unwrap();
let kvs: Vec<(Bytes, Bytes)> = table.iter().collect();

assert_eq!(
kvs,
vec![
(Bytes::from_static(b"a"), Bytes::from_static(b"1")),
(Bytes::from_static(b"ab"), Bytes::from_static(b"2")),
(Bytes::from_static(b"z"), Bytes::from_static(b"")),
]
);
}

Binary file not shown.
15 changes: 11 additions & 4 deletions crates/loro-internal/src/state/dead_containers_cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ impl DocState {
pub(crate) fn is_deleted(&mut self, idx: ContainerIdx) -> bool {
#[cfg(not(debug_assertions))]
{
if let Some(is_deleted) = self.dead_containers_cache.cache.get(&idx) {
return *is_deleted;
// Cache stores only deleted containers.
if self.dead_containers_cache.cache.contains_key(&idx) {
return true;
}
}

Expand Down Expand Up @@ -52,8 +53,14 @@ impl DocState {
}
}

for idx in visited {
self.dead_containers_cache.cache.insert(idx, is_deleted);
if is_deleted {
for idx in visited {
self.dead_containers_cache.cache.insert(idx, true);
}
} else {
for idx in visited {
self.dead_containers_cache.cache.remove(&idx);
}
}

is_deleted
Expand Down
3 changes: 2 additions & 1 deletion crates/loro/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ tracing = { workspace = true }
rustc-hash = { workspace = true }

[dev-dependencies]
serde_json = "1.0.87"
serde_json = { version = "1.0.87", features = ["float_roundtrip"] }
anyhow = "1.0.83"
ctor = "0.2"
dev-utils = { path = "../dev-utils" }
Expand All @@ -37,6 +37,7 @@ base64 = "0.22.1"
serial_test = "3"

[features]
default = ["counter"]
counter = ["loro-internal/counter"]
jsonpath = ["loro-internal/jsonpath"]
logging = ["loro-internal/logging"]
Expand Down
Loading
Loading