1# Atomic Rust page edits
2
3Nine Rust-generated outcomes corresponding to the [native movement controls](../movement/README.md).
4Each candidate was independently opened in a fresh OneNote 2010 clone. Cold output
5preserves every byte beyond the file header and every active object graph without
6metadata repair. `provenance.json` records the generator, inputs and removed clones.
7
8Run `cargo test -p onestore --all-features --test page_movement` for native semantic
9comparisons, exact page-content/history preservation, invalid intents, and interrupted
10publication. Set `ONESTORE_PAGE_MOVEMENT_OUTPUT` to an absolute output directory to
11export the nine candidate states. Then use `tools/native_runner.py INPUT OUTPUT
12--expected-pages 9 --collect-notebook` for fresh independent captures.
13
14`PYTHONPATH=tools python3 -m unittest tools.test_page_movement -v` compares these
15committed fixtures with native XML and the complete cold-reopened graphs.
16
17`stress` retains 520 alternating nest/promote actions across counter carries and
18revision checkpoints. Its final two-page file also reopened without changes beyond
19the header. Set `ONESTORE_PAGE_MOVEMENT_STRESS_OUTPUT` to an absolute directory when
20running the Rust checkpoint test to export another stress file.
21
22`native` records OneNote renaming a moved page with a Unicode title and adding a
23body outline, followed by a cold reopen. `rust-followup` nests that page and edits
24the new native paragraph, then reopens it in OneNote again. Every original page
25identity and existing text remains accounted for across both writers.
26
27`optional-cache` removes an optional series metadata reference while retaining
28the old objects in history. Native OneNote restores those references in a different
29order from the pages. Rust preserves metadata identity through restoration and
30movement; the regression matches copies by their page identifiers. The unit test
31also retains an unknown property and rejects detached edits without reattachment.