corpus/outline-edit/README.md | 27 ++ corpus/outline-edit/rust-tree/cross-container/candidate/synthetic.one | Bin 0 -> 92512 bytes corpus/outline-edit/rust-tree/cross-container/cold/commands.jsonl | 3 + corpus/outline-edit/rust-tree/cross-container/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/outline-edit/rust-tree/cross-container/cold/notebook/synthetic.one | Bin 0 -> 92512 bytes corpus/outline-edit/rust-tree/cross-container/cold/read/environment.json | 7 + corpus/outline-edit/rust-tree/cross-container/cold/read/hierarchy.xml | 2 + corpus/outline-edit/rust-tree/cross-container/cold/read/page-000.xml | 5 + corpus/outline-edit/rust-tree/cross-container/cold/read/page-001.xml | 5 + corpus/outline-edit/rust-tree/cross-container/cold/read/page-002.xml | 5 + corpus/outline-edit/rust-tree/cross-container/cold/read/page-003.xml | 5 + corpus/outline-edit/rust-tree/cross-container/cold/read/page-004.xml | 5 + corpus/outline-edit/rust-tree/cross-container/cold/read/page-005.xml | 4 + corpus/outline-edit/rust-tree/cross-container/cold/read/page-006.xml | 20 ++ corpus/outline-edit/rust-tree/cross-container/cold/read/page-007.xml | 5 + corpus/outline-edit/rust-tree/cross-container/cold/read/page-008.xml | 4 + corpus/outline-edit/rust-tree/cross-container/cold/read/page-009.xml | 5 + corpus/outline-edit/rust-tree/cross-container/cold/read/page-010.xml | 5 + corpus/outline-edit/rust-tree/cross-container/cold/read/page-011.xml | 5 + corpus/outline-edit/rust-tree/cross-container/cold/read/payloads.json | 1 + corpus/outline-edit/rust-tree/cross-container/cold/run.json | 18 + corpus/outline-edit/rust-tree/cross-container/cold/scripts/cold.ps1 | 1 + corpus/outline-edit/rust-tree/cross-container/cold/scripts/read.ps1 | 1 + corpus/outline-edit/rust-tree/cross-container/cold/source.json | 8 + corpus/outline-edit/rust-tree/cross-container/cold/teardown.json | 1 + corpus/outline-edit/rust-tree/groups-cells/candidate/synthetic.one | Bin 0 -> 98760 bytes corpus/outline-edit/rust-tree/groups-cells/cold/commands.jsonl | 3 + corpus/outline-edit/rust-tree/groups-cells/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/outline-edit/rust-tree/groups-cells/cold/notebook/synthetic.one | Bin 0 -> 102488 bytes corpus/outline-edit/rust-tree/groups-cells/cold/read/environment.json | 7 + corpus/outline-edit/rust-tree/groups-cells/cold/read/hierarchy.xml | 2 + corpus/outline-edit/rust-tree/groups-cells/cold/read/page-000.xml | 5 + corpus/outline-edit/rust-tree/groups-cells/cold/read/page-001.xml | 5 + corpus/outline-edit/rust-tree/groups-cells/cold/read/page-002.xml | 2 + corpus/outline-edit/rust-tree/groups-cells/cold/read/page-003.xml | 5 + corpus/outline-edit/rust-tree/groups-cells/cold/read/page-004.xml | 2 + corpus/outline-edit/rust-tree/groups-cells/cold/read/page-005.xml | 5 + corpus/outline-edit/rust-tree/groups-cells/cold/read/page-006.xml | 2 + corpus/outline-edit/rust-tree/groups-cells/cold/read/page-007.xml | 20 ++ corpus/outline-edit/rust-tree/groups-cells/cold/read/page-008.xml | 2 + corpus/outline-edit/rust-tree/groups-cells/cold/read/page-009.xml | 2 + corpus/outline-edit/rust-tree/groups-cells/cold/read/page-010.xml | 5 + corpus/outline-edit/rust-tree/groups-cells/cold/read/page-011.xml | 5 + corpus/outline-edit/rust-tree/groups-cells/cold/read/payloads.json | 1 + corpus/outline-edit/rust-tree/groups-cells/cold/run.json | 18 + corpus/outline-edit/rust-tree/groups-cells/cold/scripts/cold.ps1 | 1 + corpus/outline-edit/rust-tree/groups-cells/cold/scripts/read.ps1 | 1 + corpus/outline-edit/rust-tree/groups-cells/cold/source.json | 8 + corpus/outline-edit/rust-tree/groups-cells/cold/teardown.json | 1 + corpus/outline-edit/rust-tree/ordinary/candidate/synthetic.one | Bin 0 -> 111728 bytes corpus/outline-edit/rust-tree/ordinary/cold/commands.jsonl | 3 + corpus/outline-edit/rust-tree/ordinary/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes corpus/outline-edit/rust-tree/ordinary/cold/notebook/synthetic.one | Bin 0 -> 115880 bytes corpus/outline-edit/rust-tree/ordinary/cold/read/environment.json | 7 + corpus/outline-edit/rust-tree/ordinary/cold/read/hierarchy.xml | 2 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-000.xml | 5 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-001.xml | 5 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-002.xml | 5 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-003.xml | 2 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-004.xml | 4 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-005.xml | 5 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-006.xml | 2 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-007.xml | 5 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-008.xml | 2 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-009.xml | 5 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-010.xml | 20 ++ corpus/outline-edit/rust-tree/ordinary/cold/read/page-011.xml | 5 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-012.xml | 5 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-013.xml | 2 + corpus/outline-edit/rust-tree/ordinary/cold/read/page-014.xml | 5 + corpus/outline-edit/rust-tree/ordinary/cold/read/payloads.json | 1 + corpus/outline-edit/rust-tree/ordinary/cold/run.json | 18 + corpus/outline-edit/rust-tree/ordinary/cold/scripts/cold.ps1 | 1 + corpus/outline-edit/rust-tree/ordinary/cold/scripts/read.ps1 | 1 + corpus/outline-edit/rust-tree/ordinary/cold/source.json | 8 + corpus/outline-edit/rust-tree/ordinary/cold/teardown.json | 1 + corpus/outline-edit/rust-tree/unequal-groups/candidate/groups.one | Bin 0 -> 8784 bytes corpus/outline-edit/rust-tree/unequal-groups/cold/commands.jsonl | 3 + corpus/outline-edit/rust-tree/unequal-groups/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4792 bytes corpus/outline-edit/rust-tree/unequal-groups/cold/notebook/groups.one | Bin 0 -> 8784 bytes corpus/outline-edit/rust-tree/unequal-groups/cold/read/environment.json | 7 + corpus/outline-edit/rust-tree/unequal-groups/cold/read/hierarchy.xml | 2 + corpus/outline-edit/rust-tree/unequal-groups/cold/read/page-000.xml | 2 + corpus/outline-edit/rust-tree/unequal-groups/cold/read/payloads.json | 1 + corpus/outline-edit/rust-tree/unequal-groups/cold/run.json | 18 + corpus/outline-edit/rust-tree/unequal-groups/cold/scripts/cold.ps1 | 1 + corpus/outline-edit/rust-tree/unequal-groups/cold/scripts/read.ps1 | 1 + corpus/outline-edit/rust-tree/unequal-groups/cold/source.json | 8 + corpus/outline-edit/rust-tree/unequal-groups/cold/teardown.json | 1 + crates/onestore/README.md | 12 + crates/onestore/src/commit.rs | 12 + crates/onestore/src/edit.rs | 56 ++- crates/onestore/src/lib.rs | 2 + crates/onestore/src/paragraph.rs | 47 +-- crates/onestore/src/tree.rs | 597 ++++++++++++++++++++++++++++++++ crates/onestore/tests/support/tree_model.rs | 364 +++++++++++++++++++ crates/onestore/tests/tree.rs | 520 ++++++++++++++++++++++++++++ fuzz/Cargo.toml | 7 + fuzz/fuzz_targets/tree.rs | 11 + tools/test_outline_edit.py | 30 ++ 100 files changed, 2016 insertions(+), 49 deletions(-)