corpus/outline-edit/README.md | 18 + corpus/outline-edit/offline-tree/candidate/synthetic.one | Bin 0 -> 152736 bytes corpus/outline-edit/offline-tree/cases.json | 72 ++++ corpus/outline-edit/offline-tree/cell-delete/candidate/synthetic.one | Bin 0 -> 88240 bytes corpus/outline-edit/offline-tree/cell-delete/cold/commands.jsonl | 3 + corpus/outline-edit/offline-tree/cell-delete/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/outline-edit/offline-tree/cell-delete/cold/notebook/synthetic.one | Bin 0 -> 92992 bytes corpus/outline-edit/offline-tree/cell-delete/cold/read/environment.json | 7 + corpus/outline-edit/offline-tree/cell-delete/cold/read/hierarchy.xml | 2 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-000.xml | 5 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-001.xml | 5 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-002.xml | 5 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-003.xml | 5 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-004.xml | 2 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-005.xml | 5 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-006.xml | 20 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-007.xml | 4 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-008.xml | 5 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-009.xml | 5 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-010.xml | 5 + corpus/outline-edit/offline-tree/cell-delete/cold/read/page-011.xml | 5 + corpus/outline-edit/offline-tree/cell-delete/cold/read/payloads.json | 1 + corpus/outline-edit/offline-tree/cell-delete/cold/run.json | 18 + corpus/outline-edit/offline-tree/cell-delete/cold/scripts/cold.ps1 | 1 + corpus/outline-edit/offline-tree/cell-delete/cold/scripts/read.ps1 | 1 + corpus/outline-edit/offline-tree/cell-delete/cold/source.json | 8 + corpus/outline-edit/offline-tree/cell-delete/cold/teardown.json | 1 + corpus/outline-edit/offline-tree/cell-move/candidate/synthetic.one | Bin 0 -> 88104 bytes corpus/outline-edit/offline-tree/cell-move/cold/commands.jsonl | 3 + corpus/outline-edit/offline-tree/cell-move/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/outline-edit/offline-tree/cell-move/cold/notebook/synthetic.one | Bin 0 -> 92856 bytes corpus/outline-edit/offline-tree/cell-move/cold/read/environment.json | 7 + corpus/outline-edit/offline-tree/cell-move/cold/read/hierarchy.xml | 2 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-000.xml | 5 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-001.xml | 5 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-002.xml | 5 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-003.xml | 5 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-004.xml | 20 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-005.xml | 4 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-006.xml | 5 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-007.xml | 4 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-008.xml | 5 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-009.xml | 5 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-010.xml | 5 + corpus/outline-edit/offline-tree/cell-move/cold/read/page-011.xml | 5 + corpus/outline-edit/offline-tree/cell-move/cold/read/payloads.json | 1 + corpus/outline-edit/offline-tree/cell-move/cold/run.json | 18 + corpus/outline-edit/offline-tree/cell-move/cold/scripts/cold.ps1 | 1 + corpus/outline-edit/offline-tree/cell-move/cold/scripts/read.ps1 | 1 + corpus/outline-edit/offline-tree/cell-move/cold/source.json | 8 + corpus/outline-edit/offline-tree/cell-move/cold/teardown.json | 1 + corpus/outline-edit/offline-tree/cold/commands.jsonl | 3 + corpus/outline-edit/offline-tree/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/outline-edit/offline-tree/cold/notebook/synthetic.one | Bin 0 -> 152736 bytes corpus/outline-edit/offline-tree/cold/read/environment.json | 7 + corpus/outline-edit/offline-tree/cold/read/hierarchy.xml | 2 + corpus/outline-edit/offline-tree/cold/read/page-000.xml | 2 + corpus/outline-edit/offline-tree/cold/read/page-001.xml | 2 + corpus/outline-edit/offline-tree/cold/read/page-002.xml | 20 + corpus/outline-edit/offline-tree/cold/read/page-003.xml | 2 + corpus/outline-edit/offline-tree/cold/read/page-004.xml | 5 + corpus/outline-edit/offline-tree/cold/read/page-005.xml | 2 + corpus/outline-edit/offline-tree/cold/read/page-006.xml | 2 + corpus/outline-edit/offline-tree/cold/read/page-007.xml | 2 + corpus/outline-edit/offline-tree/cold/read/page-008.xml | 2 + corpus/outline-edit/offline-tree/cold/read/page-009.xml | 5 + corpus/outline-edit/offline-tree/cold/read/page-010.xml | 2 + corpus/outline-edit/offline-tree/cold/read/page-011.xml | 4 + corpus/outline-edit/offline-tree/cold/read/page-012.xml | 2 + corpus/outline-edit/offline-tree/cold/read/page-013.xml | 2 + corpus/outline-edit/offline-tree/cold/read/page-014.xml | 2 + corpus/outline-edit/offline-tree/cold/read/payloads.json | 1 + corpus/outline-edit/offline-tree/cold/run.json | 18 + corpus/outline-edit/offline-tree/cold/scripts/cold.ps1 | 1 + corpus/outline-edit/offline-tree/cold/scripts/read.ps1 | 1 + corpus/outline-edit/offline-tree/cold/source.json | 8 + corpus/outline-edit/offline-tree/cold/teardown.json | 1 + crates/onestore-offline/README.md | 22 +- crates/onestore-offline/examples/cache_probe.rs | 3 +- crates/onestore-offline/src/lib.rs | 5 +- crates/onestore-offline/src/schema.rs | 2 +- crates/onestore-offline/src/sync.rs | 25 ++ crates/onestore-offline/src/tree.rs | 370 +++++++++++++++++ crates/onestore-offline/tests/cache.rs | 8 +- crates/onestore-offline/tests/support/tree_schedule.rs | 246 +++++++++++ crates/onestore-offline/tests/sync.rs | 6 + crates/onestore-offline/tests/sync/outline.rs | 4 +- crates/onestore-offline/tests/sync/tree.rs | 716 ++++++++++++++++++++++++++++++++ crates/onestore/src/objects.rs | 1 + crates/onestore/src/tree.rs | 12 + fuzz/Cargo.toml | 7 + fuzz/fuzz_targets/offline_tree.rs | 9 + tools/test_outline_edit.py | 10 +- 93 files changed, 1847 insertions(+), 15 deletions(-)