corpus/cross-run-edit/README.md | 20 ++++ corpus/cross-run-edit/boundary/candidate/synthetic.one | Bin 0 -> 20840 bytes corpus/cross-run-edit/boundary/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/cross-run-edit/boundary/cold/notebook/synthetic.one | Bin 0 -> 20840 bytes corpus/cross-run-edit/boundary/cold/read/environment.json | 7 ++ corpus/cross-run-edit/boundary/cold/read/hierarchy.xml | 2 + corpus/cross-run-edit/boundary/cold/read/page-000.xml | 12 +++ corpus/cross-run-edit/boundary/cold/read/payloads.json | 3 + corpus/cross-run-edit/boundary/cold/run.json | 18 ++++ corpus/cross-run-edit/boundary/cold/source.json | 8 ++ corpus/cross-run-edit/boundary/cold/teardown.json | 1 + corpus/cross-run-edit/clear/candidate/synthetic.one | Bin 0 -> 21736 bytes corpus/cross-run-edit/clear/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/cross-run-edit/clear/cold/notebook/synthetic.one | Bin 0 -> 21736 bytes corpus/cross-run-edit/clear/cold/read/environment.json | 7 ++ corpus/cross-run-edit/clear/cold/read/hierarchy.xml | 2 + corpus/cross-run-edit/clear/cold/read/page-000.xml | 7 ++ corpus/cross-run-edit/clear/cold/read/payloads.json | 3 + corpus/cross-run-edit/clear/cold/run.json | 18 ++++ corpus/cross-run-edit/clear/cold/source.json | 8 ++ corpus/cross-run-edit/clear/cold/teardown.json | 1 + corpus/cross-run-edit/manifest.json | 89 ++++++++++++++++ corpus/cross-run-edit/partial/candidate/synthetic.one | Bin 0 -> 20944 bytes corpus/cross-run-edit/partial/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/cross-run-edit/partial/cold/notebook/synthetic.one | Bin 0 -> 20944 bytes corpus/cross-run-edit/partial/cold/read/environment.json | 7 ++ corpus/cross-run-edit/partial/cold/read/hierarchy.xml | 2 + corpus/cross-run-edit/partial/cold/read/page-000.xml | 11 ++ corpus/cross-run-edit/partial/cold/read/payloads.json | 3 + corpus/cross-run-edit/partial/cold/run.json | 18 ++++ corpus/cross-run-edit/partial/cold/source.json | 8 ++ corpus/cross-run-edit/partial/cold/teardown.json | 1 + corpus/cross-run-edit/replace/candidate/synthetic.one | Bin 0 -> 21520 bytes corpus/cross-run-edit/replace/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/cross-run-edit/replace/cold/notebook/synthetic.one | Bin 0 -> 21992 bytes corpus/cross-run-edit/replace/cold/read/environment.json | 7 ++ corpus/cross-run-edit/replace/cold/read/hierarchy.xml | 2 + corpus/cross-run-edit/replace/cold/read/page-000.xml | 8 ++ corpus/cross-run-edit/replace/cold/read/payloads.json | 3 + corpus/cross-run-edit/replace/cold/run.json | 18 ++++ corpus/cross-run-edit/replace/cold/source.json | 8 ++ corpus/cross-run-edit/replace/cold/teardown.json | 1 + corpus/cross-run-edit/retype/candidate/synthetic.one | Bin 0 -> 22832 bytes corpus/cross-run-edit/retype/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/cross-run-edit/retype/cold/notebook/synthetic.one | Bin 0 -> 23288 bytes corpus/cross-run-edit/retype/cold/read/environment.json | 7 ++ corpus/cross-run-edit/retype/cold/read/hierarchy.xml | 2 + corpus/cross-run-edit/retype/cold/read/page-000.xml | 7 ++ corpus/cross-run-edit/retype/cold/read/payloads.json | 3 + corpus/cross-run-edit/retype/cold/run.json | 18 ++++ corpus/cross-run-edit/retype/cold/source.json | 8 ++ corpus/cross-run-edit/retype/cold/teardown.json | 1 + corpus/cross-run-edit/table/candidate/synthetic.one | Bin 0 -> 30864 bytes corpus/cross-run-edit/table/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/cross-run-edit/table/cold/notebook/synthetic.one | Bin 0 -> 30864 bytes corpus/cross-run-edit/table/cold/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment | 1 + corpus/cross-run-edit/table/cold/read/environment.json | 7 ++ corpus/cross-run-edit/table/cold/read/hierarchy.xml | 2 + corpus/cross-run-edit/table/cold/read/page-000.xml | 11 ++ corpus/cross-run-edit/table/cold/read/payloads.json | 10 ++ corpus/cross-run-edit/table/cold/run.json | 18 ++++ corpus/cross-run-edit/table/cold/source.json | 8 ++ corpus/cross-run-edit/table/cold/teardown.json | 1 + crates/onestore-offline/examples/smb_offline_client.rs | 29 +++-- crates/onestore-offline/src/lib.rs | 1 + crates/onestore-offline/tests/sync.rs | 76 ++++++++++++++ crates/onestore/README.md | 2 +- crates/onestore/src/edit.rs | 93 ++++++++++++----- crates/onestore/src/write/tests.rs | 57 ++++++++-- crates/onestore/tests/edit.rs | 180 +++++++++++++++++++++++++++++++- fuzz/fuzz_targets/edit_text.rs | 20 +++- tools/native_collaboration.py | 8 ++ tools/native_stress.py | 10 +- tools/offline_document_history.py | 62 +++++++---- tools/offline_outage.py | 16 +-- tools/test_cross_run_edit.py | 25 +++++ tools/test_native_runner.py | 21 ++++ tools/test_offline_confirmation.py | 4 +- tools/test_offline_document_history.py | 125 ++++++++++++++-------- tools/test_offline_outage.py | 2 +- tools/verify_offline.py | 4 +- tools/verify_offline_confirmation.py | 7 +- 82 files changed, 1018 insertions(+), 131 deletions(-)