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