corpus/formatted-insertion/README.md | 31 + corpus/formatted-insertion/empty-typed/candidate/synthetic.one | Bin 0 -> 6016 bytes corpus/formatted-insertion/empty-typed/cold/notebook/synthetic.one | Bin 0 -> 7496 bytes corpus/formatted-insertion/empty-typed/cold/read/environment.json | 7 + corpus/formatted-insertion/empty-typed/cold/read/hierarchy.xml | 2 + corpus/formatted-insertion/empty-typed/cold/read/page-000.xml | 3 + corpus/formatted-insertion/empty-typed/cold/read/payloads.json | 3 + corpus/formatted-insertion/empty-typed/cold/run.json | 18 + corpus/formatted-insertion/empty-typed/cold/source.json | 8 + corpus/formatted-insertion/empty-typed/cold/teardown.json | 1 + corpus/formatted-insertion/empty-typed/reverse/control-before.xml | 3 + corpus/formatted-insertion/empty-typed/reverse/control-update.xml | 2 + corpus/formatted-insertion/empty-typed/reverse/edit-before.xml | 3 + corpus/formatted-insertion/empty-typed/reverse/edit-update.xml | 2 + corpus/formatted-insertion/empty-typed/reverse/notebook/synthetic.one | Bin 0 -> 10240 bytes corpus/formatted-insertion/empty-typed/reverse/read/environment.json | 7 + corpus/formatted-insertion/empty-typed/reverse/read/hierarchy.xml | 2 + corpus/formatted-insertion/empty-typed/reverse/read/page-000.xml | 3 + corpus/formatted-insertion/empty-typed/reverse/read/payloads.json | 3 + corpus/formatted-insertion/empty-typed/reverse/reverse-verification.json | 5 + corpus/formatted-insertion/empty-typed/reverse/run.json | 19 + corpus/formatted-insertion/empty-typed/reverse/source.json | 8 + corpus/formatted-insertion/empty-typed/reverse/teardown.json | 1 + corpus/formatted-insertion/empty/candidate/synthetic.one | Bin 0 -> 5624 bytes corpus/formatted-insertion/empty/cold/notebook/synthetic.one | Bin 0 -> 5624 bytes corpus/formatted-insertion/empty/cold/read/environment.json | 7 + corpus/formatted-insertion/empty/cold/read/hierarchy.xml | 2 + corpus/formatted-insertion/empty/cold/read/page-000.xml | 2 + corpus/formatted-insertion/empty/cold/read/payloads.json | 3 + corpus/formatted-insertion/empty/cold/run.json | 18 + corpus/formatted-insertion/empty/cold/source.json | 8 + corpus/formatted-insertion/empty/cold/teardown.json | 1 + corpus/formatted-insertion/empty/typed-after-cold/candidate/synthetic.one | Bin 0 -> 6728 bytes corpus/formatted-insertion/empty/typed-after-cold/read/environment.json | 7 + corpus/formatted-insertion/empty/typed-after-cold/read/hierarchy.xml | 2 + corpus/formatted-insertion/empty/typed-after-cold/read/page-000.xml | 3 + corpus/formatted-insertion/empty/typed-after-cold/read/payloads.json | 3 + corpus/formatted-insertion/manifest.json | 963 ++++++++++++++++++++++++++++++++ corpus/formatted-insertion/native-cell/candidate/synthetic.one | Bin 0 -> 27800 bytes corpus/formatted-insertion/native-cell/cold/notebook/synthetic.one | Bin 0 -> 27800 bytes corpus/formatted-insertion/native-cell/cold/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment | 1 + corpus/formatted-insertion/native-cell/cold/read/environment.json | 7 + corpus/formatted-insertion/native-cell/cold/read/hierarchy.xml | 2 + corpus/formatted-insertion/native-cell/cold/read/page-000.xml | 21 + corpus/formatted-insertion/native-cell/cold/read/payloads.json | 10 + corpus/formatted-insertion/native-cell/cold/run.json | 18 + corpus/formatted-insertion/native-cell/cold/source.json | 8 + corpus/formatted-insertion/native-cell/cold/teardown.json | 1 + corpus/formatted-insertion/native-cell/reverse/control-before.xml | 21 + corpus/formatted-insertion/native-cell/reverse/control-update.xml | 14 + corpus/formatted-insertion/native-cell/reverse/edit-before.xml | 23 + corpus/formatted-insertion/native-cell/reverse/edit-update.xml | 16 + corpus/formatted-insertion/native-cell/reverse/notebook/synthetic.one | Bin 0 -> 32304 bytes corpus/formatted-insertion/native-cell/reverse/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment | 1 + corpus/formatted-insertion/native-cell/reverse/read/environment.json | 7 + corpus/formatted-insertion/native-cell/reverse/read/hierarchy.xml | 2 + corpus/formatted-insertion/native-cell/reverse/read/page-000.xml | 23 + corpus/formatted-insertion/native-cell/reverse/read/payloads.json | 10 + corpus/formatted-insertion/native-cell/reverse/reverse-verification.json | 5 + corpus/formatted-insertion/native-cell/reverse/run.json | 19 + corpus/formatted-insertion/native-cell/reverse/source.json | 8 + corpus/formatted-insertion/native-cell/reverse/teardown.json | 1 + corpus/formatted-insertion/native-cell/ui/before-read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment | 1 + corpus/formatted-insertion/native-cell/ui/before-read/environment.json | 7 + corpus/formatted-insertion/native-cell/ui/before-read/hierarchy.xml | 2 + corpus/formatted-insertion/native-cell/ui/before-read/page-000.xml | 21 + corpus/formatted-insertion/native-cell/ui/before-read/payloads.json | 10 + corpus/formatted-insertion/native-cell/ui/edit.ahk | 10 + corpus/formatted-insertion/native-cell/ui/edit.json | 13 + corpus/formatted-insertion/native-cell/ui/edit.png | Bin 0 -> 46121 bytes corpus/formatted-insertion/native-cell/ui/navigate.ahk | 20 + corpus/formatted-insertion/native-cell/ui/navigate.json | 13 + corpus/formatted-insertion/native-cell/ui/notebook/synthetic.one | Bin 0 -> 32744 bytes corpus/formatted-insertion/native-cell/ui/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment | 1 + corpus/formatted-insertion/native-cell/ui/read/environment.json | 7 + corpus/formatted-insertion/native-cell/ui/read/hierarchy.xml | 2 + corpus/formatted-insertion/native-cell/ui/read/page-000.xml | 21 + corpus/formatted-insertion/native-cell/ui/read/payloads.json | 10 + corpus/formatted-insertion/native-cell/ui/run.json | 18 + corpus/formatted-insertion/native-cell/ui/source.json | 8 + corpus/formatted-insertion/native-cell/ui/teardown.json | 1 + corpus/formatted-insertion/native-paragraph/candidate/synthetic.one | Bin 0 -> 18672 bytes corpus/formatted-insertion/native-paragraph/cold/notebook/synthetic.one | Bin 0 -> 19160 bytes corpus/formatted-insertion/native-paragraph/cold/read/environment.json | 7 + corpus/formatted-insertion/native-paragraph/cold/read/hierarchy.xml | 2 + corpus/formatted-insertion/native-paragraph/cold/read/page-000.xml | 20 + corpus/formatted-insertion/native-paragraph/cold/read/payloads.json | 3 + corpus/formatted-insertion/native-paragraph/cold/run.json | 18 + corpus/formatted-insertion/native-paragraph/cold/source.json | 8 + corpus/formatted-insertion/native-paragraph/cold/teardown.json | 1 + corpus/formatted-insertion/native-paragraph/reverse/control-before.xml | 20 + corpus/formatted-insertion/native-paragraph/reverse/control-update.xml | 19 + corpus/formatted-insertion/native-paragraph/reverse/edit-before.xml | 22 + corpus/formatted-insertion/native-paragraph/reverse/edit-update.xml | 21 + corpus/formatted-insertion/native-paragraph/reverse/notebook/synthetic.one | Bin 0 -> 23176 bytes corpus/formatted-insertion/native-paragraph/reverse/read/environment.json | 7 + corpus/formatted-insertion/native-paragraph/reverse/read/hierarchy.xml | 2 + corpus/formatted-insertion/native-paragraph/reverse/read/page-000.xml | 22 + corpus/formatted-insertion/native-paragraph/reverse/read/payloads.json | 3 + corpus/formatted-insertion/native-paragraph/reverse/reverse-verification.json | 5 + corpus/formatted-insertion/native-paragraph/reverse/run.json | 19 + corpus/formatted-insertion/native-paragraph/reverse/source.json | 8 + corpus/formatted-insertion/native-paragraph/reverse/teardown.json | 1 + corpus/formatted-insertion/outline/candidate/synthetic.one | Bin 0 -> 7776 bytes corpus/formatted-insertion/outline/cold/notebook/synthetic.one | Bin 0 -> 9256 bytes corpus/formatted-insertion/outline/cold/read/environment.json | 7 + corpus/formatted-insertion/outline/cold/read/hierarchy.xml | 2 + corpus/formatted-insertion/outline/cold/read/page-000.xml | 15 + corpus/formatted-insertion/outline/cold/read/payloads.json | 3 + corpus/formatted-insertion/outline/cold/run.json | 18 + corpus/formatted-insertion/outline/cold/source.json | 8 + corpus/formatted-insertion/outline/cold/teardown.json | 1 + corpus/formatted-insertion/outline/reverse/control-before.xml | 15 + corpus/formatted-insertion/outline/reverse/control-update.xml | 14 + corpus/formatted-insertion/outline/reverse/edit-before.xml | 17 + corpus/formatted-insertion/outline/reverse/edit-update.xml | 16 + corpus/formatted-insertion/outline/reverse/notebook/synthetic.one | Bin 0 -> 12616 bytes corpus/formatted-insertion/outline/reverse/read/environment.json | 7 + corpus/formatted-insertion/outline/reverse/read/hierarchy.xml | 2 + corpus/formatted-insertion/outline/reverse/read/page-000.xml | 17 + corpus/formatted-insertion/outline/reverse/read/payloads.json | 3 + corpus/formatted-insertion/outline/reverse/reverse-verification.json | 5 + corpus/formatted-insertion/outline/reverse/run.json | 19 + corpus/formatted-insertion/outline/reverse/source.json | 8 + corpus/formatted-insertion/outline/reverse/teardown.json | 1 + crates/onestore-offline/README.md | 10 +- crates/onestore-offline/examples/smb_offline_client.rs | 9 +- crates/onestore-offline/tests/cache.rs | 15 +- crates/onestore-offline/tests/sync.rs | 40 +- crates/onestore/README.md | 4 +- crates/onestore/src/formatting.rs | 48 +- crates/onestore/src/insertion.rs | 110 ++++ crates/onestore/tests/insertion.rs | 358 +++++++++++- fuzz/Cargo.toml | 7 + fuzz/fuzz_targets/insert.rs | 135 +++++ tools/native/formatted-insertion.ps1 | 53 ++ tools/native/read.ps1 | 5 +- tools/offline_document_history.py | 7 +- tools/test_formatted_insertion.py | 57 ++ tools/test_offline_document_history.py | 28 + 140 files changed, 2765 insertions(+), 40 deletions(-)