From d7b8dcee3e1a2f16ec6335f18cd91b96ed0f3b12 Mon Sep 17 00:00:00 2001 From: clover caruso Date: Fri, 11 Sep 2026 03:10:11 -0700 Subject: [PATCH] test: rerun the native reconciliation gates on page saves Every native reconciliation corpus that the per-operation intents had produced is regenerated from page-model saves and cold-opened in disposable OneNote 2010 clones: the sixteen paragraph reconciliation controls, the four offline split/join groups, the outline and tree offline fixtures with the two emptied-cell captures, the eighteen offline page-edit cases and the twelve-client section. The captures replace the old records in place; the page-edit provenance is rebuilt from the new runs. Outcomes under the merge: the paragraph controls publish 32 receipts, six merging automatically and ten after review, where the COM-replacement and bullet-adoption joins that the typed writers could only retain now publish as reviewed pages. The outline and tree fixtures each merge seven and review seven of fourteen, including the four native deletions whose review keeps the dependent text alone. The offline inheritance group has four cases, since a join of runs that differ in language or spacing is not a page-model edit and is recorded as refused. Page batches keep their nine conflicts and 24 publications. The outline record names the changed object, the change and the dependent text object per page so the public check can apply them; the reviewed split inside a table cell is placed after the remote prefix; a replacement takes the format of the first replaced character; the twelve-client bodies keep their combining mark. The corpus READMEs describe the page-save runs and their regeneration commands. Verification: cargo clippy --workspace --all-features --all-targets, cargo nextest run -p notebook --all-features, Python lane (162 passed) against the installed captures. Assisted-by: claude-fable-5.1 --- corpus/outline-edit/README.md | 49 +- .../offline-tree/candidate/synthetic.one | Bin 152736 -> 153008 bytes corpus/outline-edit/offline-tree/cases.json | 126 +- .../cell-delete/candidate/synthetic.one | Bin 88240 -> 90624 bytes .../cell-delete/cold/commands.jsonl | 2 +- .../cell-delete/cold/machine.json | 1 + .../cold/notebook/Open Notebook.onetoc2 | Bin 4800 -> 4800 bytes .../cell-delete/cold/notebook/synthetic.one | Bin 92992 -> 94368 bytes .../cell-delete/cold/read/environment.json | 2 +- .../cell-delete/cold/read/hierarchy.xml | 2 +- .../cell-delete/cold/read/page-000.xml | 6 +- .../cell-delete/cold/read/page-001.xml | 5 +- .../cell-delete/cold/read/page-002.xml | 6 +- .../cell-delete/cold/read/page-003.xml | 5 +- .../cell-delete/cold/read/page-004.xml | 20 +- .../cell-delete/cold/read/page-005.xml | 6 +- .../cell-delete/cold/read/page-006.xml | 23 +- .../cell-delete/cold/read/page-007.xml | 5 +- .../cell-delete/cold/read/page-008.xml | 6 +- .../cell-delete/cold/read/page-009.xml | 6 +- .../cell-delete/cold/read/page-010.xml | 6 +- .../cell-delete/cold/read/page-011.xml | 6 +- .../cell-delete/cold/read/payloads.json | 4 +- .../offline-tree/cell-delete/cold/run.json | 2 +- .../cell-delete/cold/scripts/cold.ps1 | 28 +- .../cell-delete/cold/scripts/read.ps1 | 143 +- .../offline-tree/cell-delete/cold/source.json | 6 +- .../cell-delete/cold/teardown.json | 2 +- .../cell-move/candidate/synthetic.one | Bin 88104 -> 90488 bytes .../cell-move/cold/commands.jsonl | 2 +- .../offline-tree/cell-move/cold/machine.json | 1 + .../cold/notebook/Open Notebook.onetoc2 | Bin 4800 -> 4800 bytes .../cell-move/cold/notebook/synthetic.one | Bin 92856 -> 94232 bytes .../cell-move/cold/read/environment.json | 2 +- .../cell-move/cold/read/hierarchy.xml | 2 +- .../cell-move/cold/read/page-000.xml | 6 +- .../cell-move/cold/read/page-001.xml | 6 +- .../cell-move/cold/read/page-002.xml | 6 +- .../cell-move/cold/read/page-003.xml | 6 +- .../cell-move/cold/read/page-004.xml | 23 +- .../cell-move/cold/read/page-005.xml | 5 +- .../cell-move/cold/read/page-006.xml | 6 +- .../cell-move/cold/read/page-007.xml | 5 +- .../cell-move/cold/read/page-008.xml | 5 +- .../cell-move/cold/read/page-009.xml | 6 +- .../cell-move/cold/read/page-010.xml | 5 +- .../cell-move/cold/read/page-011.xml | 23 +- .../cell-move/cold/read/payloads.json | 4 +- .../offline-tree/cell-move/cold/run.json | 2 +- .../cell-move/cold/scripts/cold.ps1 | 28 +- .../cell-move/cold/scripts/read.ps1 | 143 +- .../offline-tree/cell-move/cold/source.json | 6 +- .../offline-tree/cell-move/cold/teardown.json | 2 +- .../offline-tree/cold/commands.jsonl | 2 +- .../offline-tree/cold/machine.json | 1 + .../cold/notebook/Open Notebook.onetoc2 | Bin 4800 -> 4800 bytes .../offline-tree/cold/notebook/synthetic.one | Bin 152736 -> 153008 bytes .../offline-tree/cold/read/environment.json | 2 +- .../offline-tree/cold/read/hierarchy.xml | 2 +- .../offline-tree/cold/read/page-000.xml | 5 +- .../offline-tree/cold/read/page-001.xml | 2 +- .../offline-tree/cold/read/page-002.xml | 20 +- .../offline-tree/cold/read/page-003.xml | 2 +- .../offline-tree/cold/read/page-004.xml | 6 +- .../offline-tree/cold/read/page-005.xml | 4 +- .../offline-tree/cold/read/page-006.xml | 2 +- .../offline-tree/cold/read/page-007.xml | 2 +- .../offline-tree/cold/read/page-008.xml | 5 +- .../offline-tree/cold/read/page-009.xml | 5 +- .../offline-tree/cold/read/page-010.xml | 2 +- .../offline-tree/cold/read/page-011.xml | 4 +- .../offline-tree/cold/read/page-012.xml | 5 +- .../offline-tree/cold/read/page-013.xml | 20 +- .../offline-tree/cold/read/page-014.xml | 2 +- .../offline-tree/cold/read/payloads.json | 4 +- .../outline-edit/offline-tree/cold/run.json | 2 +- .../offline-tree/cold/scripts/cold.ps1 | 28 +- .../offline-tree/cold/scripts/read.ps1 | 143 +- .../offline-tree/cold/source.json | 6 +- .../offline-tree/cold/teardown.json | 2 +- .../offline/candidate/synthetic.one | Bin 149936 -> 151272 bytes corpus/outline-edit/offline/cases.json | 42 +- .../outline-edit/offline/cold/commands.jsonl | 2 +- corpus/outline-edit/offline/cold/machine.json | 2 +- .../cold/notebook/Open Notebook.onetoc2 | Bin 4800 -> 4800 bytes .../offline/cold/notebook/synthetic.one | Bin 149936 -> 151272 bytes .../offline/cold/read/environment.json | 2 +- .../offline/cold/read/hierarchy.xml | 2 +- .../offline/cold/read/page-000.xml | 5 +- .../offline/cold/read/page-001.xml | 20 +- .../offline/cold/read/page-002.xml | 6 +- .../offline/cold/read/page-003.xml | 5 +- .../offline/cold/read/page-004.xml | 5 +- .../offline/cold/read/page-005.xml | 6 +- .../offline/cold/read/page-006.xml | 5 +- .../offline/cold/read/page-007.xml | 6 +- .../offline/cold/read/page-008.xml | 5 +- .../offline/cold/read/page-009.xml | 5 +- .../offline/cold/read/page-010.xml | 5 +- .../offline/cold/read/page-011.xml | 5 +- .../offline/cold/read/page-012.xml | 6 +- .../offline/cold/read/page-013.xml | 20 +- .../offline/cold/read/page-014.xml | 6 +- .../offline/cold/read/payloads.json | 4 +- corpus/outline-edit/offline/cold/run.json | 2 +- .../offline/cold/scripts/cold.ps1 | 28 +- .../offline/cold/scripts/read.ps1 | 143 +- corpus/outline-edit/offline/cold/source.json | 6 +- corpus/page-lifecycle/offline-edits/README.md | 4 +- .../candidate/Lifecycle.one | Bin 61168 -> 61168 bytes .../candidate/manifest.json | 192 +- .../cold/commands.jsonl | 3 + .../group-01-demoted-parent/cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 61168 -> 61168 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 4 +- .../cold/read/page-004.xml | 4 +- .../cold/read/page-005.xml | 4 +- .../cold/read/page-006.xml | 2 +- .../cold/read/page-007.xml | 4 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../group-01-demoted-parent/cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../group-01-demoted-parent/cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 62200 -> 62200 bytes .../candidate/manifest.json | 184 +- .../cold/commands.jsonl | 3 + .../cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 62200 -> 62200 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 4 +- .../cold/read/page-004.xml | 4 +- .../cold/read/page-005.xml | 4 +- .../cold/read/page-006.xml | 4 +- .../cold/read/page-007.xml | 4 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../group-02-promoted-parent/cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../group-02-promoted-parent/cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 62664 -> 62664 bytes .../candidate/manifest.json | 182 +- .../cold/commands.jsonl | 3 + .../cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 62664 -> 62664 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 2 +- .../cold/read/page-004.xml | 4 +- .../cold/read/page-005.xml | 4 +- .../cold/read/page-006.xml | 4 +- .../cold/read/page-007.xml | 4 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 66464 -> 66464 bytes .../candidate/manifest.json | 180 +- .../group-04-subpage-move/cold/commands.jsonl | 3 + .../group-04-subpage-move/cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 66464 -> 66464 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 4 +- .../cold/read/page-004.xml | 2 +- .../cold/read/page-005.xml | 4 +- .../cold/read/page-006.xml | 4 +- .../cold/read/page-007.xml | 4 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../group-04-subpage-move/cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../group-04-subpage-move/cold/source.json | 8 + .../group-04-subpage-move/cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 68104 -> 68104 bytes .../candidate/manifest.json | 184 +- .../cold/commands.jsonl | 3 + .../cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 68104 -> 68104 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 2 +- .../cold/read/page-003.xml | 4 +- .../cold/read/page-004.xml | 4 +- .../cold/read/page-005.xml | 2 +- .../cold/read/page-006.xml | 4 +- .../cold/read/page-007.xml | 2 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 70512 -> 70512 bytes .../candidate/manifest.json | 186 +- .../cold/commands.jsonl | 3 + .../cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 70512 -> 70512 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 4 +- .../cold/read/page-004.xml | 4 +- .../cold/read/page-005.xml | 2 +- .../cold/read/page-006.xml | 4 +- .../cold/read/page-007.xml | 4 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../group-06-promoted-level-two/cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 73840 -> 73840 bytes .../candidate/manifest.json | 184 +- .../cold/commands.jsonl | 3 + .../group-07-promoted-root/cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 73840 -> 73840 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 2 +- .../cold/read/page-001.xml | 2 +- .../cold/read/page-002.xml | 2 +- .../cold/read/page-003.xml | 2 +- .../cold/read/page-004.xml | 4 +- .../cold/read/page-005.xml | 4 +- .../cold/read/page-006.xml | 2 +- .../cold/read/page-007.xml | 4 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../group-07-promoted-root/cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../group-07-promoted-root/cold/source.json | 8 + .../group-07-promoted-root/cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 75656 -> 75656 bytes .../candidate/manifest.json | 212 +- .../cold/commands.jsonl | 3 + .../cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 75656 -> 75656 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 2 +- .../cold/read/page-003.xml | 4 +- .../cold/read/page-004.xml | 4 +- .../cold/read/page-005.xml | 2 +- .../cold/read/page-006.xml | 4 +- .../cold/read/page-007.xml | 4 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../cold/source.json | 8 + .../cold/teardown.json | 1 + .../group-single-page/candidate/Lifecycle.one | Bin 64016 -> 64016 bytes .../group-single-page/candidate/manifest.json | 184 +- .../group-single-page/cold/commands.jsonl | 3 + .../group-single-page/cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 64016 -> 64016 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../group-single-page/cold/read/hierarchy.xml | 2 +- .../group-single-page/cold/read/page-000.xml | 2 +- .../group-single-page/cold/read/page-001.xml | 4 +- .../group-single-page/cold/read/page-002.xml | 4 +- .../group-single-page/cold/read/page-003.xml | 2 +- .../group-single-page/cold/read/page-004.xml | 4 +- .../group-single-page/cold/read/page-005.xml | 4 +- .../group-single-page/cold/read/page-006.xml | 4 +- .../group-single-page/cold/read/page-007.xml | 2 +- .../group-single-page/cold/read/page-008.xml | 2 +- .../group-single-page/cold/read/payloads.json | 3 + .../group-single-page/cold/run.json | 18 + .../group-single-page/cold/scripts/cold.ps1 | 27 + .../group-single-page/cold/scripts/read.ps1 | 142 + .../group-single-page/cold/source.json | 8 + .../group-single-page/cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 60192 -> 60192 bytes .../candidate/manifest.json | 64 +- .../cold/commands.jsonl | 3 + .../cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 60192 -> 60192 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 4 +- .../cold/read/page-004.xml | 4 +- .../cold/read/page-005.xml | 4 +- .../cold/read/page-006.xml | 4 +- .../cold/read/page-007.xml | 2 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../indent-01-demoted-parent/cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../indent-01-demoted-parent/cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 62680 -> 62680 bytes .../candidate/manifest.json | 68 +- .../cold/commands.jsonl | 3 + .../cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 62680 -> 62680 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 2 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 4 +- .../cold/read/page-004.xml | 2 +- .../cold/read/page-005.xml | 4 +- .../cold/read/page-006.xml | 2 +- .../cold/read/page-007.xml | 2 +- .../cold/read/page-008.xml | 2 +- .../cold/read/payloads.json | 3 + .../indent-02-promoted-parent/cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 63752 -> 63752 bytes .../candidate/manifest.json | 64 +- .../cold/commands.jsonl | 3 + .../cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 63752 -> 63752 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 2 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 2 +- .../cold/read/page-004.xml | 2 +- .../cold/read/page-005.xml | 2 +- .../cold/read/page-006.xml | 2 +- .../cold/read/page-007.xml | 2 +- .../cold/read/page-008.xml | 2 +- .../cold/read/payloads.json | 3 + .../cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 66856 -> 66856 bytes .../candidate/manifest.json | 64 +- .../cold/commands.jsonl | 3 + .../indent-04-subpage-move/cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 66856 -> 66856 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 2 +- .../cold/read/page-004.xml | 2 +- .../cold/read/page-005.xml | 2 +- .../cold/read/page-006.xml | 4 +- .../cold/read/page-007.xml | 4 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../indent-04-subpage-move/cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../indent-04-subpage-move/cold/source.json | 8 + .../indent-04-subpage-move/cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 67160 -> 67160 bytes .../candidate/manifest.json | 62 +- .../cold/commands.jsonl | 3 + .../cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 67160 -> 67160 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 4 +- .../cold/read/page-004.xml | 4 +- .../cold/read/page-005.xml | 4 +- .../cold/read/page-006.xml | 4 +- .../cold/read/page-007.xml | 4 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 71448 -> 71448 bytes .../candidate/manifest.json | 64 +- .../cold/commands.jsonl | 3 + .../cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 71448 -> 71448 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 2 +- .../cold/read/page-004.xml | 4 +- .../cold/read/page-005.xml | 4 +- .../cold/read/page-006.xml | 4 +- .../cold/read/page-007.xml | 4 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 73840 -> 73840 bytes .../candidate/manifest.json | 68 +- .../cold/commands.jsonl | 3 + .../indent-07-promoted-root/cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 73840 -> 73840 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 2 +- .../cold/read/page-001.xml | 2 +- .../cold/read/page-002.xml | 2 +- .../cold/read/page-003.xml | 2 +- .../cold/read/page-004.xml | 4 +- .../cold/read/page-005.xml | 4 +- .../cold/read/page-006.xml | 2 +- .../cold/read/page-007.xml | 2 +- .../cold/read/page-008.xml | 2 +- .../cold/read/payloads.json | 3 + .../indent-07-promoted-root/cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../indent-07-promoted-root/cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 74056 -> 74056 bytes .../candidate/manifest.json | 66 +- .../cold/commands.jsonl | 3 + .../cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 74056 -> 74056 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../cold/read/page-000.xml | 4 +- .../cold/read/page-001.xml | 4 +- .../cold/read/page-002.xml | 4 +- .../cold/read/page-003.xml | 4 +- .../cold/read/page-004.xml | 2 +- .../cold/read/page-005.xml | 4 +- .../cold/read/page-006.xml | 2 +- .../cold/read/page-007.xml | 4 +- .../cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../cold/run.json | 18 + .../cold/scripts/cold.ps1 | 27 + .../cold/scripts/read.ps1 | 142 + .../cold/source.json | 8 + .../cold/teardown.json | 1 + .../candidate/Lifecycle.one | Bin 64312 -> 64312 bytes .../candidate/manifest.json | 68 +- .../indent-single-page/cold/commands.jsonl | 3 + .../indent-single-page/cold/machine.json | 1 + .../cold/notebook/Lifecycle.one | Bin 64312 -> 64312 bytes .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4800 bytes .../cold/read/environment.json | 7 + .../cold/read/hierarchy.xml | 2 +- .../indent-single-page/cold/read/page-000.xml | 4 +- .../indent-single-page/cold/read/page-001.xml | 4 +- .../indent-single-page/cold/read/page-002.xml | 4 +- .../indent-single-page/cold/read/page-003.xml | 4 +- .../indent-single-page/cold/read/page-004.xml | 4 +- .../indent-single-page/cold/read/page-005.xml | 2 +- .../indent-single-page/cold/read/page-006.xml | 4 +- .../indent-single-page/cold/read/page-007.xml | 2 +- .../indent-single-page/cold/read/page-008.xml | 4 +- .../cold/read/payloads.json | 3 + .../indent-single-page/cold/run.json | 18 + .../indent-single-page/cold/scripts/cold.ps1 | 27 + .../indent-single-page/cold/scripts/read.ps1 | 142 + .../indent-single-page/cold/source.json | 8 + .../indent-single-page/cold/teardown.json | 1 + .../offline-edits/provenance.json | 192 +- .../twelve-clients/candidate/manifest.json | 9080 ++++++++++++----- .../twelve-clients/candidate/pages.one | Bin 149680 -> 155344 bytes .../twelve-clients/cold/commands.jsonl | 3 + .../twelve-clients/cold/machine.json | 1 + .../cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 4792 bytes .../twelve-clients/cold/notebook/pages.one | Bin 164208 -> 169872 bytes .../twelve-clients/cold/read/environment.json | 7 + .../twelve-clients/cold/read/hierarchy.xml | 2 +- .../twelve-clients/cold/read/page-000.xml | 2 +- .../twelve-clients/cold/read/page-001.xml | 2 +- .../twelve-clients/cold/read/page-002.xml | 2 +- .../twelve-clients/cold/read/page-003.xml | 2 +- .../twelve-clients/cold/read/page-004.xml | 2 +- .../twelve-clients/cold/read/page-005.xml | 2 +- .../twelve-clients/cold/read/page-006.xml | 2 +- .../twelve-clients/cold/read/page-007.xml | 2 +- .../twelve-clients/cold/read/page-008.xml | 2 +- .../twelve-clients/cold/read/page-009.xml | 2 +- .../twelve-clients/cold/read/page-010.xml | 2 +- .../twelve-clients/cold/read/page-011.xml | 2 +- .../twelve-clients/cold/read/page-012.xml | 2 +- .../twelve-clients/cold/read/page-013.xml | 2 +- .../twelve-clients/cold/read/page-014.xml | 2 +- .../twelve-clients/cold/read/page-015.xml | 2 +- .../twelve-clients/cold/read/page-016.xml | 2 +- .../twelve-clients/cold/read/page-017.xml | 2 +- .../twelve-clients/cold/read/page-018.xml | 2 +- .../twelve-clients/cold/read/page-019.xml | 2 +- .../twelve-clients/cold/read/page-020.xml | 2 +- .../twelve-clients/cold/read/page-021.xml | 2 +- .../twelve-clients/cold/read/page-022.xml | 2 +- .../twelve-clients/cold/read/page-023.xml | 2 +- .../twelve-clients/cold/read/page-024.xml | 2 +- .../twelve-clients/cold/read/page-025.xml | 2 +- .../twelve-clients/cold/read/page-026.xml | 2 +- .../twelve-clients/cold/read/page-027.xml | 2 +- .../twelve-clients/cold/read/page-028.xml | 2 +- .../twelve-clients/cold/read/page-029.xml | 2 +- .../twelve-clients/cold/read/page-030.xml | 2 +- .../twelve-clients/cold/read/page-031.xml | 2 +- .../twelve-clients/cold/read/page-032.xml | 2 +- .../twelve-clients/cold/read/page-033.xml | 2 +- .../twelve-clients/cold/read/page-034.xml | 2 +- .../twelve-clients/cold/read/page-035.xml | 2 +- .../twelve-clients/cold/read/page-036.xml | 2 +- .../twelve-clients/cold/read/payloads.json | 3 + .../twelve-clients/cold/run.json | 18 + .../twelve-clients/cold/scripts/cold.ps1 | 27 + .../twelve-clients/cold/scripts/read.ps1 | 142 + .../twelve-clients/cold/source.json | 8 + .../twelve-clients/cold/teardown.json | 1 + corpus/paragraph-edit/README.md | 12 +- .../inheritance/candidate/synthetic.one | Bin 59016 -> 58696 bytes .../offline/inheritance/manifest.json | 28 +- .../offline/inheritance/native/commands.jsonl | 3 + .../offline/inheritance/native/machine.json | 1 + .../native/notebook/Open Notebook.onetoc2 | Bin 4800 -> 4800 bytes .../inheritance/native/notebook/synthetic.one | Bin 61448 -> 58696 bytes .../inheritance/native/read/environment.json | 2 +- .../inheritance/native/read/hierarchy.xml | 2 +- .../inheritance/native/read/page-000.xml | 4 +- .../inheritance/native/read/page-001.xml | 23 +- .../inheritance/native/read/page-002.xml | 23 +- .../inheritance/native/read/page-003.xml | 7 +- .../inheritance/native/read/page-004.xml | 7 +- .../inheritance/native/read/page-005.xml | 4 +- .../inheritance/native/read/payloads.json | 4 +- .../offline/inheritance/native/run.json | 2 +- .../inheritance/native/scripts/cold.ps1 | 27 + .../inheritance/native/scripts/read.ps1 | 142 + .../offline/inheritance/native/source.json | 6 +- .../offline/inheritance/native/teardown.json | 2 +- .../offline/joins/candidate/synthetic.one | Bin 150648 -> 152216 bytes .../offline/joins/manifest.json | 24 +- .../offline/joins/native/commands.jsonl | 3 + .../offline/joins/native/machine.json | 1 + .../native/notebook/Open Notebook.onetoc2 | Bin 4800 -> 4800 bytes .../joins/native/notebook/synthetic.one | Bin 150648 -> 152216 bytes .../joins/native/read/environment.json | 2 +- .../offline/joins/native/read/hierarchy.xml | 2 +- .../offline/joins/native/read/page-000.xml | 7 +- .../offline/joins/native/read/page-001.xml | 6 +- .../offline/joins/native/read/page-002.xml | 5 +- .../offline/joins/native/read/page-003.xml | 4 +- .../offline/joins/native/read/page-004.xml | 6 +- .../offline/joins/native/read/page-005.xml | 5 +- .../offline/joins/native/read/page-006.xml | 5 +- .../offline/joins/native/read/page-007.xml | 4 +- .../offline/joins/native/read/page-008.xml | 23 +- .../offline/joins/native/read/page-009.xml | 6 +- .../offline/joins/native/read/page-010.xml | 6 +- .../offline/joins/native/read/page-011.xml | 7 +- .../offline/joins/native/read/page-012.xml | 4 +- .../offline/joins/native/read/page-013.xml | 23 +- .../offline/joins/native/read/payloads.json | 4 +- .../offline/joins/native/run.json | 2 +- .../offline/joins/native/scripts/cold.ps1 | 27 + .../offline/joins/native/scripts/read.ps1 | 142 + .../offline/joins/native/source.json | 6 +- .../offline/joins/native/teardown.json | 2 +- .../offline/splits/candidate/synthetic.one | Bin 119736 -> 122856 bytes .../offline/splits/manifest.json | 24 +- .../offline/splits/native/commands.jsonl | 3 + .../offline/splits/native/machine.json | 1 + .../native/notebook/Open Notebook.onetoc2 | Bin 4800 -> 4800 bytes .../splits/native/notebook/synthetic.one | Bin 119736 -> 122856 bytes .../splits/native/read/environment.json | 2 +- .../offline/splits/native/read/hierarchy.xml | 2 +- .../offline/splits/native/read/page-000.xml | 7 +- .../offline/splits/native/read/page-001.xml | 23 +- .../offline/splits/native/read/page-002.xml | 7 +- .../offline/splits/native/read/page-003.xml | 6 +- .../offline/splits/native/read/page-004.xml | 7 +- .../offline/splits/native/read/page-005.xml | 7 +- .../offline/splits/native/read/page-006.xml | 6 +- .../offline/splits/native/read/page-007.xml | 6 +- .../offline/splits/native/read/page-008.xml | 7 +- .../offline/splits/native/read/page-009.xml | 7 +- .../offline/splits/native/read/page-010.xml | 6 +- .../offline/splits/native/read/page-011.xml | 7 +- .../offline/splits/native/read/page-012.xml | 23 +- .../offline/splits/native/read/page-013.xml | 7 +- .../offline/splits/native/read/payloads.json | 4 +- .../offline/splits/native/run.json | 2 +- .../offline/splits/native/scripts/cold.ps1 | 27 + .../offline/splits/native/scripts/read.ps1 | 142 + .../offline/splits/native/source.json | 6 +- .../offline/splits/native/teardown.json | 2 +- .../offline/tags/candidate/synthetic.one | Bin 42688 -> 42688 bytes .../paragraph-edit/offline/tags/manifest.json | 6 +- .../offline/tags/native/commands.jsonl | 3 + .../offline/tags/native/machine.json | 1 + .../native/notebook/Open Notebook.onetoc2 | Bin 4800 -> 4800 bytes .../tags/native/notebook/synthetic.one | Bin 44792 -> 44792 bytes .../offline/tags/native/read/environment.json | 2 +- .../offline/tags/native/read/hierarchy.xml | 2 +- .../offline/tags/native/read/page-000.xml | 23 +- .../offline/tags/native/read/page-001.xml | 8 +- .../offline/tags/native/read/page-002.xml | 23 +- .../offline/tags/native/read/page-003.xml | 8 +- .../offline/tags/native/read/payloads.json | 4 +- .../offline/tags/native/run.json | 2 +- .../offline/tags/native/scripts/cold.ps1 | 27 + .../offline/tags/native/scripts/read.ps1 | 142 + .../offline/tags/native/source.json | 4 +- .../offline/tags/native/teardown.json | 2 +- .../paragraph-edit/reconciliation/README.md | 20 +- .../reconciled/candidate/synthetic.one | Bin 171880 -> 182880 bytes .../reconciliation/reconciled/manifest.json | 293 +- .../reconciled/native/commands.jsonl | 2 +- .../reconciled/native/machine.json | 1 + .../native/notebook/Open Notebook.onetoc2 | Bin 4800 -> 4800 bytes .../reconciled/native/notebook/synthetic.one | Bin 171880 -> 182880 bytes .../reconciled/native/read/environment.json | 2 +- .../reconciled/native/read/hierarchy.xml | 2 +- .../reconciled/native/read/page-000.xml | 6 +- .../reconciled/native/read/page-001.xml | 6 +- .../reconciled/native/read/page-002.xml | 6 +- .../reconciled/native/read/page-003.xml | 4 +- .../reconciled/native/read/page-004.xml | 4 +- .../reconciled/native/read/page-005.xml | 6 +- .../reconciled/native/read/page-006.xml | 6 +- .../reconciled/native/read/page-007.xml | 21 +- .../reconciled/native/read/page-008.xml | 5 +- .../reconciled/native/read/page-009.xml | 5 +- .../reconciled/native/read/page-010.xml | 6 +- .../reconciled/native/read/page-011.xml | 7 +- .../reconciled/native/read/page-012.xml | 22 +- .../reconciled/native/read/page-013.xml | 6 +- .../reconciled/native/read/page-014.xml | 4 +- .../reconciled/native/read/page-015.xml | 5 +- .../reconciled/native/read/page-016.xml | 4 +- .../reconciled/native/read/payloads.json | 4 +- .../reconciliation/reconciled/native/run.json | 2 +- .../reconciled/native/scripts/cold.ps1 | 28 +- .../reconciled/native/scripts/read.ps1 | 143 +- .../reconciled/native/source.json | 6 +- .../reconciled/native/teardown.json | 2 +- crates/notebook/tests/support/model_ops.rs | 11 +- crates/notebook/tests/sync/tree.rs | 2 +- crates/notebook/tests/sync_outline.rs | 31 +- crates/notebook/tests/sync_pages.rs | 2 +- crates/notebook/tests/sync_paragraph.rs | 7 +- tools/test_outline_edit.py | 9 +- tools/test_paragraph_edit.py | 16 +- 709 files changed, 14677 insertions(+), 4844 deletions(-) create mode 100644 corpus/outline-edit/offline-tree/cell-delete/cold/machine.json mode change 120000 => 100644 corpus/outline-edit/offline-tree/cell-delete/cold/read/payloads.json mode change 120000 => 100644 corpus/outline-edit/offline-tree/cell-delete/cold/scripts/cold.ps1 mode change 120000 => 100644 corpus/outline-edit/offline-tree/cell-delete/cold/scripts/read.ps1 mode change 120000 => 100644 corpus/outline-edit/offline-tree/cell-delete/cold/teardown.json create mode 100644 corpus/outline-edit/offline-tree/cell-move/cold/machine.json mode change 120000 => 100644 corpus/outline-edit/offline-tree/cell-move/cold/read/payloads.json mode change 120000 => 100644 corpus/outline-edit/offline-tree/cell-move/cold/scripts/cold.ps1 mode change 120000 => 100644 corpus/outline-edit/offline-tree/cell-move/cold/scripts/read.ps1 mode change 120000 => 100644 corpus/outline-edit/offline-tree/cell-move/cold/teardown.json create mode 100644 corpus/outline-edit/offline-tree/cold/machine.json mode change 120000 => 100644 corpus/outline-edit/offline-tree/cold/read/payloads.json mode change 120000 => 100644 corpus/outline-edit/offline-tree/cold/scripts/cold.ps1 mode change 120000 => 100644 corpus/outline-edit/offline-tree/cold/scripts/read.ps1 mode change 120000 => 100644 corpus/outline-edit/offline-tree/cold/teardown.json mode change 120000 => 100644 corpus/outline-edit/offline/cold/read/payloads.json mode change 120000 => 100644 corpus/outline-edit/offline/cold/scripts/cold.ps1 mode change 120000 => 100644 corpus/outline-edit/offline/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/group-single-page/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/group-single-page/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/group-single-page/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/group-single-page/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/group-single-page/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/group-single-page/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/group-single-page/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-single-page/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/group-single-page/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/group-single-page/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-single-page/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/indent-single-page/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-single-page/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-single-page/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-single-page/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-single-page/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/indent-single-page/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/indent-single-page/cold/teardown.json create mode 100644 corpus/page-lifecycle/offline-edits/twelve-clients/cold/commands.jsonl create mode 100644 corpus/page-lifecycle/offline-edits/twelve-clients/cold/machine.json create mode 100644 corpus/page-lifecycle/offline-edits/twelve-clients/cold/notebook/Open Notebook.onetoc2 create mode 100644 corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/environment.json create mode 100644 corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/payloads.json create mode 100644 corpus/page-lifecycle/offline-edits/twelve-clients/cold/run.json create mode 100644 corpus/page-lifecycle/offline-edits/twelve-clients/cold/scripts/cold.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/twelve-clients/cold/scripts/read.ps1 create mode 100644 corpus/page-lifecycle/offline-edits/twelve-clients/cold/source.json create mode 100644 corpus/page-lifecycle/offline-edits/twelve-clients/cold/teardown.json create mode 100644 corpus/paragraph-edit/offline/inheritance/native/commands.jsonl create mode 100644 corpus/paragraph-edit/offline/inheritance/native/machine.json mode change 120000 => 100644 corpus/paragraph-edit/offline/inheritance/native/read/payloads.json create mode 100644 corpus/paragraph-edit/offline/inheritance/native/scripts/cold.ps1 create mode 100644 corpus/paragraph-edit/offline/inheritance/native/scripts/read.ps1 mode change 120000 => 100644 corpus/paragraph-edit/offline/inheritance/native/teardown.json create mode 100644 corpus/paragraph-edit/offline/joins/native/commands.jsonl create mode 100644 corpus/paragraph-edit/offline/joins/native/machine.json mode change 120000 => 100644 corpus/paragraph-edit/offline/joins/native/read/payloads.json create mode 100644 corpus/paragraph-edit/offline/joins/native/scripts/cold.ps1 create mode 100644 corpus/paragraph-edit/offline/joins/native/scripts/read.ps1 mode change 120000 => 100644 corpus/paragraph-edit/offline/joins/native/teardown.json create mode 100644 corpus/paragraph-edit/offline/splits/native/commands.jsonl create mode 100644 corpus/paragraph-edit/offline/splits/native/machine.json mode change 120000 => 100644 corpus/paragraph-edit/offline/splits/native/read/payloads.json create mode 100644 corpus/paragraph-edit/offline/splits/native/scripts/cold.ps1 create mode 100644 corpus/paragraph-edit/offline/splits/native/scripts/read.ps1 mode change 120000 => 100644 corpus/paragraph-edit/offline/splits/native/teardown.json create mode 100644 corpus/paragraph-edit/offline/tags/native/commands.jsonl create mode 100644 corpus/paragraph-edit/offline/tags/native/machine.json mode change 120000 => 100644 corpus/paragraph-edit/offline/tags/native/read/payloads.json create mode 100644 corpus/paragraph-edit/offline/tags/native/scripts/cold.ps1 create mode 100644 corpus/paragraph-edit/offline/tags/native/scripts/read.ps1 mode change 120000 => 100644 corpus/paragraph-edit/offline/tags/native/teardown.json create mode 100644 corpus/paragraph-edit/reconciliation/reconciled/native/machine.json mode change 120000 => 100644 corpus/paragraph-edit/reconciliation/reconciled/native/read/payloads.json mode change 120000 => 100644 corpus/paragraph-edit/reconciliation/reconciled/native/scripts/cold.ps1 mode change 120000 => 100644 corpus/paragraph-edit/reconciliation/reconciled/native/scripts/read.ps1 mode change 120000 => 100644 corpus/paragraph-edit/reconciliation/reconciled/native/teardown.json diff --git a/corpus/outline-edit/README.md b/corpus/outline-edit/README.md index 8ea0c1938367d1eeebccf312f1cf91d5238d1283..92f9b0d0a9aba3b94b0dedcaddeeab5a1b48d6df 100644 --- a/corpus/outline-edit/README.md +++ b/corpus/outline-edit/README.md @@ -68,21 +68,20 @@ To regenerate, run `resizing_a_native_reserved_width_preserves_content` with `ONESTORE_RESERVED_WIDTH_OUTPUT` set to a new absolute directory, then cold-open it with the same runner arguments. -`offline` reconciles local layout/default intents and later text edits against all -fourteen native changes. Five merge automatically, five require explicit review, -and four deleted targets retain their local branches and dependent queues. The ten -successful cases produce eighteen publications and twenty durable receipts; the -already-converged collapse defaults require confirmation without another append. -The final cold capture preserves all 304 active graph objects, ten tags, and 8,937 -explicit formatting comparisons. The `cases.json` records stable targets and the -retained/dependent outcomes used by the public test. +`offline` reconciles one page-model save per page, carrying a layout or collapse +change and a dependent text edit, against all fourteen native changes. Seven +merge automatically; seven are reviewed against the remote page and then +publish, including the four whose target the native side deleted, where the +review keeps only the dependent text. The `cases.json` records each page's +outcome, the changed object, the change and the dependent text object used by +the public test. -Regenerate by running the offline sync test -`native_moves_deletions_and_layout_changes_merge_or_retain_explicit_conflicts` -with `ONESTORE_OFFLINE_OUTLINE_OUTPUT` set to a new absolute directory, then use -the same cold runner arguments. The test also retains a JSON record next to that -directory. Cache migration, uncertain revision retention, stale review, and twelve -offline writers are exercised in `crates/onestore-offline/tests`. +Regenerate by running the sync test +`native_moves_deletions_and_layout_changes_merge_or_require_review` in +`crates/notebook/tests/sync_outline.rs` with `ONESTORE_OFFLINE_OUTLINE_OUTPUT` +set to a new absolute directory, then cold-open its `candidate` with +`--expected-pages 15 --collect-notebook`. Uncertain revision retention, stale +review and twelve offline writers are exercised in the same file. `tree` extends the native controls with eleven cases involving outline groups, indentation gaps, numbered/bulleted subtrees, and table cells. The stored graphs, @@ -136,20 +135,18 @@ unit test. Cold-open the resulting `ordinary`, `groups-cells`, `cross-container` and `unequal-groups` notebooks with expected page counts 15, 12, 12 and 1, respectively, using `tools/native_runner.py --collect-notebook`. -`offline-tree` reconciles moves/deletions and dependent text edits against the -fourteen ordinary native controls. Three already-converged moves confirm without -publication, seven competing structure/content changes require explicit review, -and four deleted targets retain the complete local branch. The cold capture -preserves all 247 active graph objects across fifteen pages, three tags, and -6,497 explicit character-format comparisons per image. Its `cases.json` records -the native input cases and outcomes. Regenerate with the offline sync test -`native_tree_and_layout_changes_reconcile_without_discarding_unreviewed_content`, -setting `ONESTORE_OFFLINE_TREE_OUTPUT` to a new absolute directory, then cold-open -its `candidate` with `--expected-pages 15 --collect-notebook`. +`offline-tree` reconciles page-model saves carrying a move or deletion and a +dependent text edit against the fourteen ordinary native controls. Seven merge +automatically and seven are reviewed against the remote page before publishing. +Its `cases.json` records the native input cases and outcomes. Regenerate with +the sync test +`native_tree_and_layout_changes_reconcile_without_discarding_unreviewed_content` +in `crates/notebook/tests/sync/tree.rs`, setting `ONESTORE_OFFLINE_TREE_OUTPUT` +to a new absolute directory, then cold-open its `candidate` with +`--expected-pages 15 --collect-notebook`. Its `cell-delete` and `cell-move` captures additionally verify local edits to an emptied cell's replacement paragraph while preserving remote text in the other -cell. They retain 272 and 274 active objects, respectively, with 8,201 and 8,377 -explicit format comparisons per image. Regenerate with the offline sync test +cell. Regenerate with the sync test `emptied_cell_replacement_is_durable_and_cannot_be_silently_omitted_on_replay`, using the same output variable; cold-open each candidate with twelve expected pages. diff --git a/corpus/outline-edit/offline-tree/candidate/synthetic.one b/corpus/outline-edit/offline-tree/candidate/synthetic.one index 685ee81cbcd88ee73564b37f6e8118bc42803213..689f3f5836818614dc526572641faa877256f75c 100644 GIT binary patch delta 4380 zcmZu!3s_TE63#skLouq>M?UNfG4j11H=v_0>rdF%IUzh#V{WLvIJxx zNHmCPefxmtlM7*v>mP#PdJKqZebMUm=Re}{idcgpqd|N>gVGaOHaeK2gQXzoU;>EA zLGK;?on4s#oj5)gcUGKlH@72j_5Tfqz95Pl2`LXfn629ZZL zA1XEKSHcsS=t?wPozDE^L~IjT4mwvPP}PZD6ys44n!dQF?Y%8i`H`{tm@eEneN!t>9o*+bPA&`*`60Y z$xhn;^B26%lQAMX&yo09+SWOec_yc!bfOUaiTvFh4!2E9-t{E|A)``6WN|+Kc{^|U1yUa| zq-GIdt{76Y@K7fvRev2e2;!%u)?7?u@H5~YfAZg_`xZ~znU53rHD&X3$09!J4phyJ zZEd^X`*7yfTZXd|A|W=r7Vt`ICA3mbq{P;h9+VR|3Ll?nlaz$8v9v1UuFuXC(zik5 z_$m&%Wq34l8xzQyv1~OAWHeYt-e)t?$!NWh%S1+d+=(?kDtQtM$xEjlq#%de~R z)Ec=&J#ZN#%sKEovnE#@vtn}EizZ$1eRS?cwTDPm(JXWiHA1ttfwjp}z3#fNR}%=yiX{`jCo+IIu>-0hA!1qXw;shm) z2!JZqDQQ3$38Ou}@XCN4UQ158o=f~{TJ`)m!KO=8;0HuZ9Ld4M7HE+%919BB6(wiU z4i*+++3#>R7P14o~?*>GB0QRt-}-7~!cy{c(XD6uA;Dh|BHn*(3qjo{Vv z>}aS0!MX2~f3NONZi?EgNQu-r)4QVqe1fVEyhXk&_;&9;@D{Pz^U;`OC@oMCf%I|C zpb@^UZVOX%s%R_Y;Gg@G%ljqI-as9S zk;*`Be~?OZ^hPR!ISZuHJYA$Rialm#doU`iH;pAkM|m*vNSO7jAydO#hLPcibay;i zaQM;sS&7w0qzkRXe|ym%z57T;%%b{v> zIemsql z?ho5@rkE+W@vHu)Cg%h1wWvek_CylGIcM}ig}d~6&%S~Qj{ zVu8;LC+|v=#Ty^T_ArSX{}$ZTvexl#f6R_*#(9tloh}^Fne`Ck=4SBOePtU6s$LzW zO1w?u4|i5wcDzVelcp`N*i*SR!(*LUC~jv-^BAt4B@x`wIx&LnE17s7H_@l9&))W) zV1Dcdry9xGCsUl!Q%m{N8CE5k{MXd$XW7%KrKm&U=nEUe(WisCIb^n^rL_^91(vi~ zrux7HH+mzC=&arXa8NxnXhAeIh}6={bN7pVVp{9%o`$TMx7TnzoOm-NJ(8^hs)!)R z``RtOiuV{k4ALgERH5n>RkTY3E@z)}`Nh5?IN_5EPC9KG3ir23hxrN7f%Z`fhL)M4fJ$a9Fx?{{EtkbVnQ+E)~Z0;WA4^|7e_> z0#RWTxf0LWAx-9SIGUoy5nH{VbZEdEU}5_Ika3;cvI^!xkkugg@81lNSL@^Rat*ic zF$b;mLWWN#CXy(tw@s|Uz{nb^`dB-a1YnmJd}~-zV>f>9s;>B>3nnZ!+)XmE*7Z79 z4+$w8ZMqaQ+RzC9ghh6TUEYn}jZ(1hsP|rH?%Ge7K9giN31TKKd-;;r*4$Q#tzn0OR*&O8@`> delta 4658 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 tjY1n}IA%#n*G&Kb diff --git a/corpus/outline-edit/offline-tree/cases.json b/corpus/outline-edit/offline-tree/cases.json index f88e7b7ac84f4c18112867710fad315bfb7fec0b..ca92dd44b3353a57188e86e261da8a95064d6f5e 100644 --- a/corpus/outline-edit/offline-tree/cases.json +++ b/corpus/outline-edit/offline-tree/cases.json @@ -1,72 +1,58 @@ [ - { - "page": "Move leaf down", - "result": "converged", - "space": "{B7267338-BF83-0893-27A7-37F606DD20C8},1" - }, - { - "page": "Move subtree down", - "result": "converged", - "space": "{9B80D7CA-18B4-02B0-1E85-6E8AA0DAD827},1" - }, - { - "page": "Move subtree up", - "result": "converged", - "space": "{7538095C-389B-07D8-2991-B2BC46EBD52A},1" - }, - { - "page": "Indent subtree", - "result": "reviewed", - "space": "{651463E3-C768-0C93-363D-FCE642B07408},1" - }, - { - "page": "Outdent subtree", - "result": "reviewed", - "space": "{8384083C-60ED-0F7C-2F15-8B20B878B3EB},1" - }, - { - "page": "Collapse subtree", - "result": "reviewed", - "space": "{FF88B513-029C-00E2-0082-9E3DCE1D7796},1" - }, - { - "page": "Expand subtree", - "result": "reviewed", - "space": "{850B34E4-D62A-042B-138A-B2A905CEE28E},1" - }, - { - "page": "Delete leaf", - "result": "retained", - "space": "{363FE055-44E1-0B27-14A8-46278FD681FF},1" - }, - { - "page": "Delete subtree", - "result": "retained", - "space": "{8BBAD88F-D248-0959-00B3-2438A7065330},1" - }, - { - "page": "Delete only paragraph", - "result": "retained", - "space": "{A4CB3BA2-767F-0AE8-0916-AF142D995822},1" - }, - { - "page": "Delete outline", - "result": "retained", - "space": "{80E80543-87A1-0C3A-0816-22B190BDFC87},1" - }, - { - "page": "Move outline", - "result": "reviewed", - "space": "{16207F40-69C9-0CA1-09B5-DC5712DB2BBE},1" - }, - { - "page": "Resize outline", - "result": "reviewed", - "space": "{CD420421-73F7-0F11-02EC-35FCA348998C},1" - }, - { - "page": "Automatic outline size", - "result": "reviewed", - "space": "{F383096F-2121-0225-1E62-AB37C9B15B33},1" - } + [ + "Move leaf down", + "merged" + ], + [ + "Move subtree down", + "merged" + ], + [ + "Move subtree up", + "merged" + ], + [ + "Indent subtree", + "reviewed" + ], + [ + "Outdent subtree", + "reviewed" + ], + [ + "Collapse subtree", + "reviewed" + ], + [ + "Expand subtree", + "reviewed" + ], + [ + "Delete leaf", + "merged" + ], + [ + "Delete subtree", + "merged" + ], + [ + "Delete only paragraph", + "merged" + ], + [ + "Delete outline", + "merged" + ], + [ + "Move outline", + "reviewed" + ], + [ + "Resize outline", + "reviewed" + ], + [ + "Automatic outline size", + "reviewed" + ] ] \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cell-delete/candidate/synthetic.one b/corpus/outline-edit/offline-tree/cell-delete/candidate/synthetic.one index d436dd78487631e41e1449151855924eec9debf4..8bcf1873b1dd8c53592c6ffea3b755e6db65b077 100644 GIT binary patch delta 1746 zcmaJ?drXs86u-CSQItnncoh4Alt)s?q727mhKFDa)k<3mZ2>_F+YmFEm7qlS2j4b> zu%Roti623E#K;o2#1uL=HZ}|iDgic7=R#t_*k(32vy3gU7n$swen3pc9rDZNJFk1r z@1A?>8t~=Ee4S(Iq?(e)MK6DlG7)o6|K`<@fV|Pef4shGR;#WreO(-@`P{$jH@@oQ zX4c`$xfOIIU%nzIJRv1TqNAON7X-2gL7K>aMvv*vMqr$*J~jcWvdr z%-E>MG`9HX(m<2-k`<#tKC~0wI(>diP*Hf!8z1E+r7T4}VxMKJC5i%}$4n#HRjraa zb{oPm&3*_llUGO`IZ7H}jb&}QY3!ffVcR!@B@hq{2mxRd*c=ue1&9G`1*iaVga~>w zjgk-fOBNpZxc6L6yLDqxHQNFE#u(^fvqo`eCpcqIDFik` z6&h5Q+!%CysS)Gh?nnkB^aC)MVL0uMeh4=_u z0ZqpCg}nu|bQ2DScK8;|7n_<)_2|DXpjwX}$OB>HQ`H`QosqsIblPa3{MFHc#(DWC z#<$+~otuh{suePd=wQZBvADY(f+7KdFyx-GMfMdI(U=Yf9IK$mjV6o0o2XLavIyNK z$_c*~(VzSW|B30x#T&Y^PSoIhJvNpT;2B2VlIl%#&vTmBwc7FNtuCFlxiU|3K5|?ZeGCldTQ{^?GCFL;!_zhh&%M*a0Y~ENY_AZq zY*bgWekSWY>D|lFBkvk!PC102DeX+zXKcq-Dfp|b{iZ{E8Ra#ey@urHd>>uKR^be83YW2NL#Ap@#h95KYe((Lhce&fN zzSCMy+eDuoSonFkODK{$_WrW9Y44QI)mIlZgyEs*T*F5D?u5>O}yk%*wM(+?kI%J|kH>oR?#+sSG_Fl_!#h0Mrmn@LduP6}UFD&4Q#t%8~Vn7B^ zZvK-Vw6C>7UIN)8g0ZOJPT|9Izz|Us;AwGSQoJ2w)gmfS_i6cEEBuPl%E^i|`^jHTJs%ZCw&v% zWv-_C7|S@8Yj1eXa$C~7qRslM=26Jec>XQp-eMRc1?O0<(s{KL5~a4cQRnKOH{@?Wao^gwX=yLj_Pr^pHTyiwQyMC<9X-G8C#NZz z2T#AVkvxStYLpJ!)Tgwd=b-(+SCQv$R@IX<`xLXn0%o1M5qdk{Rt1F`8aLl!gXGDk z>a6DbemQU5hsq_Im7`~o&d*G=ROYEp$hK+Fe^@(nXO3|9<{v*_aNzNTo`mjo&q?Qd Wy;1X|oISGo?WP;Q$%13f*`EMsn}B@) diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/commands.jsonl b/corpus/outline-edit/offline-tree/cell-delete/cold/commands.jsonl index 376f0fbbc073e2a0fde448f5a6d6a462e418c7e5..9c4d8dd64df91112e334f73e7bced1c227558ebb 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/commands.jsonl +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/commands.jsonl @@ -1,3 +1,3 @@ {"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} -{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-37ACD671 -ExpectedPages 12", "exit": 0, "stdout": "Read 1 sections and 12 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-2DD749D3 -ExpectedPages 12", "exit": 0, "stdout": "Read 1 sections and 12 pages.\r\n", "stderr": "", "error": null} {"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/machine.json b/corpus/outline-edit/offline-tree/cell-delete/cold/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..d7978e2e9744c39c6b5108e6fa741cd0e3443ce3 --- /dev/null +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/machine.json @@ -0,0 +1 @@ +{"name": "m6-2dd749d3", "hostname": "ONE-M6-2DD749D3"} diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/notebook/Open Notebook.onetoc2 b/corpus/outline-edit/offline-tree/cell-delete/cold/notebook/Open Notebook.onetoc2 index 6aaa8771213ea8929090e4f9321a8f42a7909acc..3a483643d614f46bd75a0c69edacec61d9ffc66a 100644 GIT binary patch delta 460 zcmX@0dO%fSq5gm8oA1kf<~xQn7V{f1!(r&i3Kc^1$b3- zu_*(&Ncu%X!|QY9pSGwyb=!DzOW&6BjprCAGct-hAIL5ex$bzE5#$aA21SvE1_l+N zb3hy}(-{YhKfiJ4aGj9NwRT05hCo9@4^VCik1zYp5LK^rGJ(FOUR8OMck><>P-f(v z>bOYGbDcPQa*@oR*vXUloa$#B%r-N6-R?YZw#vyn+`OG2OE8=P6iZN;hRYG%^Se7P zpGfzc;KMQb&k;*$RRf6QKt{nFwEb-Bj`Yga9!-&de{8L+It-H2^C68`$XYwJXz;vKFDCnhRv(Rj8_*Fv_d z%e5n>Xr)ZkvBTU95b(ZwvH{!qRIgo|KW$|#f0#bmkWpr{1mk}u%>w5SdOzy6xwmdy zr|8GsJ)aS%fhD1#0YiMVBg<;$iTSLXKd`H?NMlF?wF$^DOkKjL0yO*X!~&Md0=z1^ z*pz`>B>keHVV(b}*~ZTqT-U5)np+*yxsP!&Bcr(U1HXRDtM+#pLGEB+P!wrsU{C=% z2gK?4w=jOeyjxyvo^EL#x7PjE5NK%V0m`xM3#*hmAm+2bs_5hP&L<>u$uKX z@&7YEm+n??%hzAaFHWAs=TskfZI@YaRJ!{nt;`)dMt8D7mS8voDAvHd8J8p8luEAL zlRVpTO0g%$BQ<7QRRf6QKt{nF^rv}?*@KU~{%dcrsY}*)hJfUBJs5g72lMAL0|3Nd Bt;PTV diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/notebook/synthetic.one b/corpus/outline-edit/offline-tree/cell-delete/cold/notebook/synthetic.one index fbc3b6f8b77f9917bc47778188e6de47e313f390..62ce218c0fd55aae4486aa21c2b47c9cecae4c90 100644 GIT binary patch delta 2403 zcmaJ?2~d+)5PmNKNjSp|5-=Q&!6u3*6&()2M1x2Ofh2$&!2@XvHKlmbPDxt_v7!z0 zSAWNPFb=e}&LD>sT3dmR2cuX}tEJN!M2o!~r__OIEh^pR=L%w%`R0**-yUyw-}~Ec z+g9JTmGo<~-m2{RG^ws3bw_vT!JEO<=|J3xfP^}4yA8$SC)rgJqiEh^W&5>~vx?I^ zzWjcHA#-L&7$L&FxLRpr;Gp4NtgGfCfyPn}1z9NkEpeo-A$=ga~x27nVF9Uuf`jICa01rPvY0X_iaX>)VdXTyqqNlw!}wlvz_ypD@0p-uU>8n-io*!khc1-A@Y z54#O?bnC+4-$M3%2z!~5Iz~u2zn5-`#05As-2nZsC zP1I6fQHvdK;5VD5l_w*vUm6VTse-r?W>;Ljusex6MjsO$pWvzho9R(=dC-#Tz)U`* z#XJp6oRPFNWc;*PZxlRj?c9TN1v}3xTKiig9NGs<7@1PDKng9ZEg=;>$y{U$knv1m z1OlN7Hw!e}<^WTy*f<)w=#4qdKMEf)_7MgBYl3(0Jb!plT_+AvAHLCb2>hG)QY~eU zE2H&%AO&;~bEMbaD@U&QD?abv^Sw)iv*-rKy1-+qz)iWKL}f# zPUBd=B>EDbolQuh8TL38%5&FYxR}nX;iLMyNmMzihsuF49i8h(^+m~a1AE9o9YwFT zH*D_{eVP3J2e!SP65j$gDwQ@ywWM*OjbP*raD>SoomniskB-}ngbkc2r>UD79c$K5 zKVH3#J*uH%_Rm!M`z*BT*0HWB)SK-|ql;Nb9esJUY5T4QPYecLFcfUurP$m($9qbX ztN1~IhPskrwo*saXa9P+#+<5F$A2ZbX_pu?ux5Nxq#5ip9SvvuQs}}mECT{vnRz5g zOvI)B!~=hhtBIMCt^P!eHzAqi!(SnJg}jcph~$y2aGwg`Ru!WO$oSym#Ye&X;+(}N zEsE7^K0IFSy!rAY9#$j><~GDA!S{xc7o{4RiC5W=XUb&H!5UhT$rUpUY;YhcaU(eA zB%~o+yyf6|yJ8Pvbot|kVRl4I16frHb@VtEe0AI6Wx~W3)6dD9&+$Xi10%ZO!@tyxkuiav6S8u-<^c}3DTA}ev76oo28LVJGL|wDW~#%B0(i#X zEEhwKxF^||&Bhq0Dt)3S6LrRi6b0-2pzE4u>F%H6EAQprsokb6!qm7r|9_dQv)En( zjbWqoRG>b(y|7o`S-z@1ibvL-DqzsbOf}@rjWy`Y;{G=Sb9xF)qbf#~ez=g4~yz}@9jR4C={)O#u;N-lJ=V#vVn3mTY3GZ3DQe5d8-*v4ng8 delta 2033 zcma)74Qx|Y6uxI|XW!PfWk1rg4$4xQtYz-63S_b$H-?OLV}I@buz;Ho1}b8x3|u8_ zY%;Oq0T)DTiBnVr$GR{OlT8sa)F5Rr2@nt!5l75o#E^*0bNjlqWte!EFYoPq-#Pc3 zd(OLcU6b?=Nwhzg)HJqV*jIS)P^sEILla=NGPiWw50{G-W7&o`%Lo?f|SLEB!_ z-rc?F)A$aF#;tuEZ8t4apl2o`8o`_oUASa4<5P;TAe4wo1czWc z4T9RtQ0h=SD(JSK*J&< z2uZFGHrE18s)AV=tQQPyKYIv?*AUIRIPa{HF*C6Pc{z??3_^-XJ^nS2XEE;)Umc@2vnk9+B?Y(GNMKFqc>-XhuEsTad^${N?B$g%ePu#h?n zVWP>~#}Xkc)+RPh?7Y0gdZLH4Ci_S&5+VeUNI|t}n{n`F#@9)@zkgcYxuo93&W{g| zh|{oRXR8NOI9Yq=-kw^gX`6F6<;3DMIyOAr^r9Jlqt`5uM&By~H8oViWbaHDR)U`H zD#4*UxBmOp8!BSwItS8@EsRtBPPbQrWzv5Yqb;YQRgg-pwGeIk>QC;->Kl!7-`qb` z-n#k4d#ttxby29f%RwB)z7hvedH;D*);s#|LJJ4nI_f3 zoC-1OCl3(2ahmejuzkB)dJBpEwH&~nposEzu%h_QT-tBD1`?8>zb2eWvWhvj1 zQ`dWG2^^4W*geKpkJWA;cb6Kp#eDk$DZRS_9HOkHz$+5fP~H1c1N1?Y?w#$|m$c>O z+6x9#&wqKnm+jk`OWrUV6oB_ZG8;o+27`f<8woAgSE3Y1*cbKyaf?@)nXoPV2>dM+$TaTpcyK*a$)r;r4u>eMSh7O2>v z=j2{R(^xed^-&NOD0xNCMFa&|rk?=#TjNjU8LTEqQH - + diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-000.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-000.xml index 5b596ba0cb694a935fd463c1669b51242d3bb544..7089c972bef8f828002f8698c664dae327de8993 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-000.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-000.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-001.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-001.xml index ef35bd7d297ba0f0b5725c70f3a1b2e38986772e..16142d3c8999ce1c59b8e40016ce672086754fe2 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-001.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-001.xml @@ -1,5 +1,2 @@  -Target 🦀 é Link label]]>Child]]> + diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-002.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-002.xml index 7e3e1a9aeeb1cfb1545433d80ed7543a98b84903..10069be629f0e2d0288e2767578fc3b28201afe6 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-002.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-002.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-003.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-003.xml index 91c27de6d6060425ae6c54c035cedd9d87c4596c..0023cf4452feb4d8d231ba4e9f2cb0b125c3a43d 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-003.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-003.xml @@ -1,5 +1,4 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]> diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-004.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-004.xml index e1b4293c682ad863ef826df86205f1501a380e5d..fc1c3c9240e862a836d43ef8c2e021283d6da11b 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-004.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-004.xml @@ -1,2 +1,20 @@  - +Remote Bold 🦀 italic é color 東京
+End
]]>
Fictitious: café, 東京, مرحبا]]>
diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-005.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-005.xml index 28bd3aaffb53138691a0a0c0274ac6189af15863..08c1363d4c43ae322c7e5302bfbfdff1382ab49e 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-005.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-005.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-006.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-006.xml index 6db2eb3af060b96524dd1cb35b0387bd43c48e84..dcd1d765468fadc9ce929a2c181c9c29969964be 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-006.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-006.xml @@ -1,20 +1,5 @@  -Bold 🦀 italic é color 東京
-End
]]>
Fictitious: café, 東京, مرحبا]]>
+Target 🦀 é Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-007.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-007.xml index 7ff4c27aa74a5bc66687b4fd112675d297eefdcf..93bd49d4e9b493b5213a54b213c73d4de46be8d1 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-007.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-007.xml @@ -1,4 +1,5 @@  -Target 🦀 é Link label]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-008.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-008.xml index d1192626314920b26ae68505cab85dc39ca6999c..51f8cb62c954d230e4aa9eb8c77cb42accafd294 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-008.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-008.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-009.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-009.xml index 2efd5ef0591f702be1709aa514214ac97c956bd3..aba9e374db66652229d59eea4cce68d956991dcc 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-009.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-009.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-010.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-010.xml index e66be2846ed280e83f5b57fbe02750ddababbac6..440e7e6b83f72561c2f4db05ac60b72b4e6aaa83 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-010.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-010.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-011.xml b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-011.xml index 174806a0ca3f05c5e56ed253b2a1a9fd485c2943..bccba0f5519f724cab9c11eec54f5a879ea847be 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-011.xml +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/page-011.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/payloads.json b/corpus/outline-edit/offline-tree/cell-delete/cold/read/payloads.json deleted file mode 120000 index 28e766c3d4f4499afc8ee14682bf4467ff3087cd..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/read/payloads.json +++ /dev/null @@ -1 +0,0 @@ -../../../../../paragraph-edit/before/read/payloads.json \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/read/payloads.json b/corpus/outline-edit/offline-tree/cell-delete/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/run.json b/corpus/outline-edit/offline-tree/cell-delete/cold/run.json index 94b34a8c1b76c8573dd004991339daef6ad62693..906c2f1e724746a1726099767cd41588ba1b0ce5 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/run.json +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/run.json @@ -1,5 +1,5 @@ { - "notebook": "/Users/clo/dev/one/evidence/m10/offline-tree-native-01/cell-delete/candidate", + "notebook": "/private/tmp/m33/offline-tree/cell-delete/candidate", "expected_pages": 12, "author": null, "author_timeout_seconds": 600, diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/cold.ps1 b/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/cold.ps1 deleted file mode 120000 index 9b4c65b63ddad6e65d7acb85fb7d0accbb23d030..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/cold.ps1 +++ /dev/null @@ -1 +0,0 @@ -../../../../../paragraph-edit/reconciliation/keyboard/scripts/cold.ps1 \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/cold.ps1 b/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/read.ps1 b/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/read.ps1 deleted file mode 120000 index 113263f9c23ecc3cafa21407510de560fdc964a8..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/read.ps1 +++ /dev/null @@ -1 +0,0 @@ -../../../../../paragraph-edit/reconciliation/keyboard/scripts/read.ps1 \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/read.ps1 b/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/source.json b/corpus/outline-edit/offline-tree/cell-delete/cold/source.json index 7baa2ca5d5742c75adb26f380f51d8279111a589..aec94489351f7ca638104b53bcce2f397a77b061 100644 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/source.json +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/source.json @@ -1,8 +1,8 @@ [ { "path": "synthetic.one", - "bytes": 88240, - "sha256": "963f5c960c690ff21451787f2a0028573cdc3ce4edeb887a8ed115997fcda194", - "mtime_ns": 1788901194571318513 + "bytes": 90624, + "sha256": "b3d8165c630cfad9d3b0f006f635eb238f6a3fea184872ff7ec25b65849798a2", + "mtime_ns": 1789121632667264018 } ] diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/teardown.json b/corpus/outline-edit/offline-tree/cell-delete/cold/teardown.json deleted file mode 120000 index f87f229e17cdf751396fcf149ad2624727a29624..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cell-delete/cold/teardown.json +++ /dev/null @@ -1 +0,0 @@ -../../../offline/cold/teardown.json \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cell-delete/cold/teardown.json b/corpus/outline-edit/offline-tree/cell-delete/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/outline-edit/offline-tree/cell-delete/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/outline-edit/offline-tree/cell-move/candidate/synthetic.one b/corpus/outline-edit/offline-tree/cell-move/candidate/synthetic.one index a803314f1105069601bb012294d0722b18e1b10d..3d7d8577b14f6905f9075b3bc9672bd462ee92e1 100644 GIT binary patch delta 1753 zcmaJ?e@xV67=Pd6Kp>2xP%rrc$3=QDMPxJ?#xKWB2<|w3+?NB71!W9YcOrwu;19lQ zMN|Zbula5nsA&8soQJ3Eg0d~O;bKZ`F4%I@wHZSVw=y7C^gQ=H$eq^1K6~!_zMuE` z^*+zbpwoZpTYtx;l%^_59+m#&yRK-rF1J&^)2%y154U)?#qyr#zerYRef-C?PTkUR zm38|IE;YTdSGA%d5+RminOI3(w{v=p)d66%6tEs(0R#ccym}+(Q~;hxuITu*9Q4zG zeSlzq6%Yu>0H^`TdvDw9Yz1hv+f?BVO6i*C^=ZLNs2?%)ZLdDbxm@V5Xbc zd3^+{%QS94Gx>0!h`dg0^tzqx)d6E5@8E$zBc0vG{K`3AY05inMp94ezq5&}g zEdXUT6s!;mh7wSlenRTX%E&A~vpy}A;_eq}hTL!B4tV8)g_{~DP#UFVJwsIwsO-#P(q1g)P zYXS}f3SQ2|wp}y1_91;+%12z;x8n@YFQV_hoyD7)Qqe{S=!@_r$(EY7g z00df-6htc!p*fO-4S1M^sqM?hBl8{ZEU z4DmYL?-_AYJpLHj1;Pfw89WAtXY^4UDEkgb)T4xzP0uhS2GM)!Ij(8uLL^y-( zOUX0xkJynU;lPm#>*~XU(%P0s9`Y_TeSzl}(!lUy)$Nm&#bX6+TZbFB_pG#{bEcYB zbE%L92s0vn6H*82v6~JSsSw-L_FEjb^Mpla&H?+entK{G(Hk8$s&C5t1ChonW~_Wv zq&b$g(yo;YpH&nr*XJL$m~Df0qdRWezUUfvqhGmP|6eV&m5VSAYlD4RyYMV~W1*mb z%x1rl+R}%1o>UDvFU-+mm48dX^o_zZYAXD9AOMgz@Lfx<>tOs*KX%+--(9C<_tym~ HVV(Q~NiPWf delta 1380 zcma)64MI|9BpcerHdz#wWfLOYWtVEVtvzSnSf&Nt;p5yn=R4<~ z`<=^s*`{suY2ED^sWPyk>&UJWn@+%xf$~^fB8=rHYvW?2;L%rX;fY?$onO5MB>K2 z;9AfQpmg4!9rAB4h6SOo=O;n|z!xT@h z(Gl_Zx5&9>-3Di}GVg+*^m?>PXXmm|{cSc_$z?M{$Jt(d4VQ%Pv+Jd(8&TQ*hy1k- zq{$~Xu$n}(+W2y;GaeC*cLj1$aI=|v?eK-hXXe+*###6iwBOCNs7WI7rXq|VB!z<+ z7%(AXh6a7%Ac>xa7&A1e&sWQ~Vjvo~QG>zDam@8LyfCKx-aamoG@BS;u0Pk6udaZs zd{5-7=ZCwtwsK(!7=%E$)MhL*;__FmAQ-9^zFsU)T?Au|#p=TO3f9y$Ig~ok7)H8fFlfP?;2Z^=#11T);LaF}yls z`K%m&73>?fmN_Yhad#0U%yl+Z#CxZ2%V~%m;6c`{BW(sdp=B@{& znp)EvDl&Y`q;CZ+nxu1&qfhMGo$J2U_KWae;SoCbb3_c-_{pU(-xh&< rQlowAt2AqcRovU3e)z}VeyFE9A5%!Z7u`{BSNASt4)20jN-+O_h;^mU diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/commands.jsonl b/corpus/outline-edit/offline-tree/cell-move/cold/commands.jsonl index 81ecca46b8bb05edac92ed89d4e159e008835478..a816cec5cc0bac279074ef9d251a5ad905cd5652 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/commands.jsonl +++ b/corpus/outline-edit/offline-tree/cell-move/cold/commands.jsonl @@ -1,3 +1,3 @@ {"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} -{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-B3E79CAE -ExpectedPages 12", "exit": 0, "stdout": "Read 1 sections and 12 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-5256934C -ExpectedPages 12", "exit": 0, "stdout": "Read 1 sections and 12 pages.\r\n", "stderr": "", "error": null} {"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/machine.json b/corpus/outline-edit/offline-tree/cell-move/cold/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..f80e25e1951439f6de88f6b8606812633059b400 --- /dev/null +++ b/corpus/outline-edit/offline-tree/cell-move/cold/machine.json @@ -0,0 +1 @@ +{"name": "m6-5256934c", "hostname": "ONE-M6-5256934C"} diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/notebook/Open Notebook.onetoc2 b/corpus/outline-edit/offline-tree/cell-move/cold/notebook/Open Notebook.onetoc2 index ea8defc64e1d250d13f34869bf8c6a720fd221e1..df2d99c0c1b17001e668cbcb0c3620643a661ac7 100644 GIT binary patch delta 460 zcmX@0dO%fSq5gm8oA1kf<~c7 z&H-^AO_x6MW~ZU!`e_G#eo1_+R_YFtwKh0$l4&(vbY?v;#_4H;!NOECUt(tN1;_r%X%%e
UbT(-Dsf0q&D3v^U^>6_W9-GPTPIlKWv*KVLN#@?{R@fFXbtx z`L{dnX{dQ0XXzm_c@m#fecPu8AqS<_`0sUAh-6L7Qv_Lp;R>MGgob~(9HEmD#&hCF zhS$;v#zKY1Yxk-eKpY1$3g)1$orXJ_AC$Uv-?`3rvQ7L5NKV&-p?7mIe=aispb@&& diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/notebook/synthetic.one b/corpus/outline-edit/offline-tree/cell-move/cold/notebook/synthetic.one index 5225bc6a0238f882b6df42b82c798290144f4901..3d99921c23258433b24f5a0c6e64c1f8f3bbad73 100644 GIT binary patch delta 2914 zcmaJ@3slqB8UNoPkAznUsR@$mV1nY1bmN zh_HL)?x;|F0JT~LQDjnPJJw1!RJ3!$p7jjdoz~e}?Zb(qE&IOzAB>>e<$UMZSjSGpC;doQ()HK-j@%YyG> zuJA?<@*V1o{b^d&1lwBF^yJZaWy+p^ zU(qNlYcJ9UZ&jC)$YgS-kHY`%qQQXpigk%6X9vnrfW9r0M+lM~o47qCy6Anc*=X(N zU-+oTerR!7pBD4&(=v45S1?+z#!vYsIjm-fhKQAG7UAlF=f;rkZrEy?XLz ztUQnSQE7720;m3Jf&JD{0pa<7{Py16&h6I2RuIK?%E7s#HW)`;+dE7(b594qIq#Eq z>08Mfk4$4NDHVcQ4IsPO$titNva)_@bsSr*w#iOhSAk zH0dW9A!z`A#FG*c6su)Ukr((%zn_!&c+{fkNxN7ITxd6W{i&1J^`n{e(#-~+rrP^d zYq01wP|en@T+MKnV7nf`7-$>^mhcFf>n#HF4&9Qrnm1kc{A@a!rertrNPx7?ROkMC zbGNxBZrM{GEosz%;&Lxd4xz6ZlB`~!BXWRq-!JR2^pj(zy}#==_i^LbP-9j4!I1ES zb%wT!Ya=a#&M`a_EOpd#^_GcrxZ!kq{n*U{qE;iS!z@T>V4I#<56YG;poT!#^gOWT zRuZkM&k+yPcbYCh}tpo@JOwp#+=7(0dtrjt>5L0e^noL=5~nqz)Dv$tH8X z5htSK??=#q!BQSpmPJ;n@DAX@!t_@!8qRPXF;p+!#bz9wcY+yn$Sa9Gd4fX@Kq-I% z;4bhDjulbn3(Up9!2Sz-m}$vpZVL$)b>y=q+=uenS=^OY7LrZE+3g(i4DX39mzem= zBLo6^9yBc8O3k7VUOV^W=tH&VCxc2CVWJ9E>LZ5{JrlMxj3o%e&-n5olkzmjM>Cb zo-6(IkR$hOR`pZIDs)Zb{0OGfD@x|hCO)cRt57N&+>caRVkN5RZPnkzU@H&U1mq2{ z`$*3DCXJi$4x4m($ZV&T#EORPtlLVK*&d|!LAr37;=**j@oHs$+3PNIPs|n9y{_IK zv@4|R|7S~SXVwC;9gt+$iDw|irj%^Ng;KG6M{LGrT{xg@?k^!%V@)`7wuOIu1gXr0Zg=8Q5z69#B zw}>2NN%-~L3ew9eR>IeEJJ}}=5fl&^`_fL%iD8bTJ|d-hy^38aCWplEg7HT|?3XJ6 z0mG308Nee-OF##_ZTyjhKZvtsvg?I(+*u(`pd&1+mmW^~KB98GMu5(l-wOeD%jD=0}~zP=DcBhiS5j(BRmx zK=cU>AwtX|Kmn1^cR;^CyR{0m;Y-*rTBH0!x;l6+;anFMj#VQzko5tZ1ktaIiZFa8 zvoFM5UUaS^wW)aU>-~M-b|Fa0cA*X^2G=Svtvg)$bxLQ+C%@j=zS9rcGHNm@!a{+o zjOiOm8t+W0`Rk@??R#GwK(3tWP#B+IP3s%aidr_CUmctG)ziD*=7nd{7eH76+^VY| z5M^YmvDVP29(nP@CsA0*E?^4rz22)~PiNNE8{TpzDi73!Q)JI#&zF+WDh(vO7Jj-8 zS^v>?=6p)aVCuGv6USe~gd9%ec3E`6_$fS+c#y6WOJM5z!5H=;c(70>BQQTa2rVGI zA4Wug4*2iJgOKaQLGW)7=%|`dLUf@7n#}_l)rtcJ$OPhF+F$}5>OqWX#Q{?gLs}_; zmi8ddYsLOk5N7}Zh4LVdS82tPDUfD>K(RcKJz8<_lz6Mb5h$1k@q$(yGzIaTHk3fk wJP0QQGX-JMh7hP*9H)n4K8xuP%@oLDFax#oD47S*&`$L#+TtB4%mV3u0SMhT$N&HU delta 2472 zcma);2~d+q6oB^yf=M_MAP7jn2vH#cyoy?nA{I4B0wNItBIPiM2x=W29XyCfDOPB~ zUs;`KrHa+oqbORe2O{bKYE^0(QKtjdb}UX+tZg0Z)wfA#h_*BRGjDePx8HmFj?E@p zI{C-i`0}5or!6mS-=jTvC~?`gGRNqv-xqZ10#%Tbs<;la)UGjSY^axACzHZ2@4nvlR&2&p2qIchy;ILY%3k=3W4-vJvedI zErZ-_)(qvQwJ6=0O6cg0uhR_$3ls^?N$0b33Nfb7n2enttIdb^y7`d^W_lJAc;!iPlsl>E&$my#1jq0-bvqzlFY`V@W`GI?< zwf+ATge#05WIhBMJp`DWQJ@FyaQil%`~AruhYFLbSuxmiB!d{QADI%ZrfTh;YaK`H zRxPZezv@BXuj}NEZz69sP1wJrWzFW7?bCuWXx1P>B27=h#!O43%Tr)>)KokZY!Bwm z$RmL=A}jPaAAHiICPpAj{0XK`NIc2GPd=GT<`V<6A+&rtNXHnC@t| zE1N0jfQgRJ!r8q!aDuMP#My;hs8sZnlijlHIg(*CzH!rs%BOLq8i7~p+67CSzU!@Xa}^qIaH0na@TCuTK)S zUX9~h-gAg-JfZya_Kg_ExzYRixVf0qYP~^1PvMI%yR$P~w>%!T-UP}Rzx2sl&&*`3 z2bYQAdeSmxA>|(7ix-{6Ec&9wS)ReCaf)0#2*~_zBc2sA3vU|6SRd|;#@p8yp+zFE zz8(qtCY2m6Z{p2L5HYA9ZJh_6MZprIu@ql(Yea2w|K;j~`m(X@!SSzHrq$7;Oc5#u zbTO3R%?eE67bUW)5rdJydu=EQ?I~*jW@CrAVK&$Un-ji@ l`$}%$s`vpF3mv)cJ`xFLPyA3A=PS4uQ}@{{XmUUz - + diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-000.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-000.xml index 38a5fe2bc583842c23c5f3c5d06c4fdb7498fca2..669c3d7b071abbe2588e1663bb7ef93e4fdfb219 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-000.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-000.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-001.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-001.xml index 7c7868edb0e5ad2e0da9c32d46da4a5c71dab36c..fbe1870f159a3879221fe816dcaa6318f772ceaa 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-001.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-001.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-002.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-002.xml index d87dec3e9ec72b23d1da613f0bc6ac5d7d8a4741..3048c2ad9d17923787a43841ec881e49dad52342 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-002.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-002.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-003.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-003.xml index 61258b17bd3b4696470e45fd15b2238e85102c8c..522193219efe9fd3dde49aac1400c9e9810d0a48 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-003.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-003.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-004.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-004.xml index 77144bad3020ab4aea23da62a3a7fb2bf2442ec4..5e809637f201f44628d7947bd72076c93d63fa35 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-004.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-004.xml @@ -1,20 +1,5 @@  -Bold 🦀 italic é color 東京
-End
]]>
Fictitious: café, 東京, مرحبا]]>
+Target 🦀 é Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-005.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-005.xml index d6691b8df4f4c92c62bd3dc9ca08b5399205b54e..baf398626d234d8ada01d3532b34a1e65069f604 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-005.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-005.xml @@ -1,4 +1,5 @@  -Target 🦀 é Link label]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-006.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-006.xml index dc9c3f123f7066f05b7badef1177ef90c5866da5..f859e5cf233ca2e11ee91e3928cf0687d237efba 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-006.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-006.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-007.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-007.xml index 2043c5c8487baf35d348cc326f6cd4f6150c0ba1..dbe6b63db1ea169f9c086fc5179dd95c60494c62 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-007.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-007.xml @@ -1,4 +1,5 @@  -Target 🦀 é Link label]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-008.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-008.xml index 815993c199fc421ebf87eb5d7d4ae31ecbbef2bb..de5d7ab417cedc1f28d6117dedb291b810082021 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-008.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-008.xml @@ -1,5 +1,4 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]> diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-009.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-009.xml index 53301e198094d41179ff16c32690f920984e389a..0bdd1b35c308c32fd1db27d7435de61ddca15f1a 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-009.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-009.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-010.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-010.xml index 8d83e900f90dc4d3d4673b33832070e3b1f88f54..05c842aa60d43b935062abd7ef4c121e8c7812a4 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-010.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-010.xml @@ -1,5 +1,4 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/tree">Link label]]> diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-011.xml b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-011.xml index 2a31def0593f8b0ea52c4f12eb9b9c2fcd79f512..e6660882bad56ac8b91bd32a040a2e5f15857900 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/page-011.xml +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/page-011.xml @@ -1,5 +1,20 @@  -Target 🦀 é Link label]]>Child]]> +Remote Bold 🦀 italic é color 東京
+End
]]>
Fictitious: café, 東京, مرحبا]]>
diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/payloads.json b/corpus/outline-edit/offline-tree/cell-move/cold/read/payloads.json deleted file mode 120000 index 28e766c3d4f4499afc8ee14682bf4467ff3087cd..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cell-move/cold/read/payloads.json +++ /dev/null @@ -1 +0,0 @@ -../../../../../paragraph-edit/before/read/payloads.json \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/read/payloads.json b/corpus/outline-edit/offline-tree/cell-move/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/outline-edit/offline-tree/cell-move/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/run.json b/corpus/outline-edit/offline-tree/cell-move/cold/run.json index 90033d1c9018364ba72c03d6e54278b7b2e33c12..12e8f8abf1ebc51f926d56cb7f3bead203707ad8 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/run.json +++ b/corpus/outline-edit/offline-tree/cell-move/cold/run.json @@ -1,5 +1,5 @@ { - "notebook": "/Users/clo/dev/one/evidence/m10/offline-tree-native-01/cell-move/candidate", + "notebook": "/private/tmp/m33/offline-tree/cell-move/candidate", "expected_pages": 12, "author": null, "author_timeout_seconds": 600, diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/scripts/cold.ps1 b/corpus/outline-edit/offline-tree/cell-move/cold/scripts/cold.ps1 deleted file mode 120000 index 9b4c65b63ddad6e65d7acb85fb7d0accbb23d030..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cell-move/cold/scripts/cold.ps1 +++ /dev/null @@ -1 +0,0 @@ -../../../../../paragraph-edit/reconciliation/keyboard/scripts/cold.ps1 \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/scripts/cold.ps1 b/corpus/outline-edit/offline-tree/cell-move/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/outline-edit/offline-tree/cell-move/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/scripts/read.ps1 b/corpus/outline-edit/offline-tree/cell-move/cold/scripts/read.ps1 deleted file mode 120000 index 113263f9c23ecc3cafa21407510de560fdc964a8..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cell-move/cold/scripts/read.ps1 +++ /dev/null @@ -1 +0,0 @@ -../../../../../paragraph-edit/reconciliation/keyboard/scripts/read.ps1 \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/scripts/read.ps1 b/corpus/outline-edit/offline-tree/cell-move/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/outline-edit/offline-tree/cell-move/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/source.json b/corpus/outline-edit/offline-tree/cell-move/cold/source.json index d521823056591867a7a1141208e263d8ee1c447d..e74fae033ee905099f8227d52d0bf361bbfeb233 100644 --- a/corpus/outline-edit/offline-tree/cell-move/cold/source.json +++ b/corpus/outline-edit/offline-tree/cell-move/cold/source.json @@ -1,8 +1,8 @@ [ { "path": "synthetic.one", - "bytes": 88104, - "sha256": "0d50bcef1e1b80d7920777e4734412e7549c484972aac0d9fbb313757ff85929", - "mtime_ns": 1788901195424267841 + "bytes": 90488, + "sha256": "dfbf1c95a6d5709b19a147f8db3033d487452ce7ba0895f73d41907233ea4dae", + "mtime_ns": 1789121633821515267 } ] diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/teardown.json b/corpus/outline-edit/offline-tree/cell-move/cold/teardown.json deleted file mode 120000 index f87f229e17cdf751396fcf149ad2624727a29624..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cell-move/cold/teardown.json +++ /dev/null @@ -1 +0,0 @@ -../../../offline/cold/teardown.json \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cell-move/cold/teardown.json b/corpus/outline-edit/offline-tree/cell-move/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/outline-edit/offline-tree/cell-move/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/outline-edit/offline-tree/cold/commands.jsonl b/corpus/outline-edit/offline-tree/cold/commands.jsonl index 1a23ac47beb5b14ed3a96021c3be08de87442207..adf462a171416449527a0787850fbfbadffdd185 100644 --- a/corpus/outline-edit/offline-tree/cold/commands.jsonl +++ b/corpus/outline-edit/offline-tree/cold/commands.jsonl @@ -1,3 +1,3 @@ {"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} -{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-7605A4F1 -ExpectedPages 15", "exit": 0, "stdout": "Read 1 sections and 15 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-F749AF66 -ExpectedPages 15", "exit": 0, "stdout": "Read 1 sections and 15 pages.\r\n", "stderr": "", "error": null} {"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/outline-edit/offline-tree/cold/machine.json b/corpus/outline-edit/offline-tree/cold/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..b6ef30570b7022baba9d352fa967cea748917a4d --- /dev/null +++ b/corpus/outline-edit/offline-tree/cold/machine.json @@ -0,0 +1 @@ +{"name": "m6-f749af66", "hostname": "ONE-M6-F749AF66"} diff --git a/corpus/outline-edit/offline-tree/cold/notebook/Open Notebook.onetoc2 b/corpus/outline-edit/offline-tree/cold/notebook/Open Notebook.onetoc2 index 9bcfeb67122a90d8d83001106c707f0fe7bbaebe..9f0fb2e2e59948fd45477a13d9a02cb539e654f2 100644 GIT binary patch delta 460 zcmX@0dO%fSq5gm8oA1kf<~L42mKR4Gbzk z=YTlVMDL$Im#yc~dNTRzJ3B8&4S|M+9-y46me_#{&QhLR6n4C;V?1W+Ln-sD}0xCWz|>*M=YOg$SAW}g7H6-X1Y|IFZ;{+ek+&X zHSv5L?6=fFZuwk!3aW#C+DxAJ|n`q%ov{+5}`6rY>Pr0h)bxVgbu!0bUhd zY|20`l77+9@cEfUW^? z=9^lbyW`U2(^ruy_{ukRm4-k=Ll02yLEP3e%=ag_?qItnwETRx+vMH6%LU>rA6Gek znCv}o{nv&xsYdb1MSMy1{C0nDzO0FLm|J(NcCOtEZ;&Mzt^kT1Fv-W|h!>|>9z34z y<~>1|%QvMzUs2Tn;y92|Fb5SfJ(uqNxWT_W&G@jLj|Lw|&e4FOcXKd*E;9g(w5YBC diff --git a/corpus/outline-edit/offline-tree/cold/notebook/synthetic.one b/corpus/outline-edit/offline-tree/cold/notebook/synthetic.one index a98e60962617853d8ccd44cca3d171abc4dc03e6..d3d77e1649de7ee42fd4bc6c35453f50a0ef7be0 100644 GIT binary patch delta 4434 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 delta 4712 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 uX&Qqz&{VtQcPyPbx%{xPtvtH(cG1z+8+ - + diff --git a/corpus/outline-edit/offline-tree/cold/read/page-000.xml b/corpus/outline-edit/offline-tree/cold/read/page-000.xml index f7088b5d78d77ba3aa02e2ffb7b32689e46ac4b1..9f3335d389af5645a1f5ace280c0933a8c6374a9 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-000.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-000.xml @@ -1,2 +1,5 @@  - +Target 🦀 é Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cold/read/page-001.xml b/corpus/outline-edit/offline-tree/cold/read/page-001.xml index 38017a1d7fcc9df5640c30590885df703022fecb..9014e4275df5b2e8731daa7994b047f9f5a744d3 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-001.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-001.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/outline-edit/offline-tree/cold/read/page-002.xml b/corpus/outline-edit/offline-tree/cold/read/page-002.xml index 67c2e52e667222d5ed459ddbd833d3fb2f74a0aa..212f984d035c136f9b893d1a369f8300615e1a32 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-002.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-002.xml @@ -1,20 +1,2 @@  -Bold 🦀 italic é color 東京
-End
]]>
Fictitious: café, 東京, مرحبا]]>
+ diff --git a/corpus/outline-edit/offline-tree/cold/read/page-003.xml b/corpus/outline-edit/offline-tree/cold/read/page-003.xml index e91b1202b3ef808c70f19f6c39458a644cb3f514..d6df723e46fda135fcc90b38dfed7a2cc7a2a26c 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-003.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-003.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/outline-edit/offline-tree/cold/read/page-004.xml b/corpus/outline-edit/offline-tree/cold/read/page-004.xml index c2da7d7bb0f0b72af82e63c463aa418226fa5334..c2efe3ae1cf9da353f3b97f6935b4c1e3f254cbb 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-004.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-004.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/outline">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cold/read/page-005.xml b/corpus/outline-edit/offline-tree/cold/read/page-005.xml index b97a3beace587830b849c7b2f0a035e8c0330211..840f559bf7d479f1c2eb064588a4ee8041d46096 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-005.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-005.xml @@ -1,2 +1,4 @@  - +Target 🦀 é Link label]]> diff --git a/corpus/outline-edit/offline-tree/cold/read/page-006.xml b/corpus/outline-edit/offline-tree/cold/read/page-006.xml index 8504acda4447ca06dfe8de1184aabbe2473016db..5e9c731f467e6d540c71be50e15a80cbf22fd7bf 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-006.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-006.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/outline-edit/offline-tree/cold/read/page-007.xml b/corpus/outline-edit/offline-tree/cold/read/page-007.xml index aa15f615fbd3e6a0371999a8c6e01b504db9384b..52052ca6afc5d29782d4809a25dd3302ef5a04b5 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-007.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-007.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/outline-edit/offline-tree/cold/read/page-008.xml b/corpus/outline-edit/offline-tree/cold/read/page-008.xml index 547b18ec2cd492e08b9301773a695a682eb7a913..63ccbf0c913921db3d6971ea792cf9199abbeccd 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-008.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-008.xml @@ -1,2 +1,5 @@  - +Target 🦀 é Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cold/read/page-009.xml b/corpus/outline-edit/offline-tree/cold/read/page-009.xml index 7c09d1e66df39b3e75ebc3e209dfcd66b8bcee0c..cab0f22832fee130d8799b76c7889aaa100e4e2f 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-009.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-009.xml @@ -1,5 +1,2 @@  -Target 🦀 é Link label]]>Child]]> + diff --git a/corpus/outline-edit/offline-tree/cold/read/page-010.xml b/corpus/outline-edit/offline-tree/cold/read/page-010.xml index 91d86124956dc049a7c3d38d991faa64ac14088f..d38100d7b79de99b69965b666925799981066fef 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-010.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-010.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/outline-edit/offline-tree/cold/read/page-011.xml b/corpus/outline-edit/offline-tree/cold/read/page-011.xml index 08fc27b702e86ce0c9489b31480b77f1ea191e60..99ded23d3332ccc0833bbb700b8b54a54be27978 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-011.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-011.xml @@ -1,4 +1,2 @@  -Target 🦀 é Link label]]> + diff --git a/corpus/outline-edit/offline-tree/cold/read/page-012.xml b/corpus/outline-edit/offline-tree/cold/read/page-012.xml index 8352935a309b73e0da8789b9b9a19c7b9116875a..59e9801b0af11a6c2df7e28337821dbd3d66fba4 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-012.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-012.xml @@ -1,2 +1,5 @@  - +Target 🦀 é Link label]]>Child]]> diff --git a/corpus/outline-edit/offline-tree/cold/read/page-013.xml b/corpus/outline-edit/offline-tree/cold/read/page-013.xml index 7dc3e80cd912dc5034c0d493d5ec9ff103fe088c..803a91c7ca517ac21cce2896777dd0e491beec14 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-013.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-013.xml @@ -1,2 +1,20 @@  - +Bold 🦀 italic é color 東京
+End
]]>
Fictitious: café, 東京, مرحبا]]>
diff --git a/corpus/outline-edit/offline-tree/cold/read/page-014.xml b/corpus/outline-edit/offline-tree/cold/read/page-014.xml index 5c5c21da02c4028ec2c40f07a2c615607d1f3c63..daeea93b34ecc72d9bb43581642164788cd1a65e 100644 --- a/corpus/outline-edit/offline-tree/cold/read/page-014.xml +++ b/corpus/outline-edit/offline-tree/cold/read/page-014.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/outline-edit/offline-tree/cold/read/payloads.json b/corpus/outline-edit/offline-tree/cold/read/payloads.json deleted file mode 120000 index 9e1be3e2b6d87478e7c48d278ecac8ee6c97f6d0..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cold/read/payloads.json +++ /dev/null @@ -1 +0,0 @@ -../../../../paragraph-edit/before/read/payloads.json \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cold/read/payloads.json b/corpus/outline-edit/offline-tree/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/outline-edit/offline-tree/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cold/run.json b/corpus/outline-edit/offline-tree/cold/run.json index c416e28bcfe053dd9dafaed85cdcc408f344d922..3e08089d0881260324e8177eb961149cbbe9eedc 100644 --- a/corpus/outline-edit/offline-tree/cold/run.json +++ b/corpus/outline-edit/offline-tree/cold/run.json @@ -1,5 +1,5 @@ { - "notebook": "/Users/clo/dev/one/evidence/m10/offline-tree-native-01/candidate", + "notebook": "/private/tmp/m33/offline-tree/candidate", "expected_pages": 15, "author": null, "author_timeout_seconds": 600, diff --git a/corpus/outline-edit/offline-tree/cold/scripts/cold.ps1 b/corpus/outline-edit/offline-tree/cold/scripts/cold.ps1 deleted file mode 120000 index 5bc2f1837e1f0b639923a80b79c517c98c5c519a..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cold/scripts/cold.ps1 +++ /dev/null @@ -1 +0,0 @@ -../../../../paragraph-edit/reconciliation/keyboard/scripts/cold.ps1 \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cold/scripts/cold.ps1 b/corpus/outline-edit/offline-tree/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/outline-edit/offline-tree/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/outline-edit/offline-tree/cold/scripts/read.ps1 b/corpus/outline-edit/offline-tree/cold/scripts/read.ps1 deleted file mode 120000 index 85257c76cede599f47da88e69419a767dd6b99ee..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cold/scripts/read.ps1 +++ /dev/null @@ -1 +0,0 @@ -../../../../paragraph-edit/reconciliation/keyboard/scripts/read.ps1 \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cold/scripts/read.ps1 b/corpus/outline-edit/offline-tree/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/outline-edit/offline-tree/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/outline-edit/offline-tree/cold/source.json b/corpus/outline-edit/offline-tree/cold/source.json index 1e424af0fe0483cb5c76015ea425e248ea4d25bb..788b222f23b490c81308a9bc29f612e8af95a326 100644 --- a/corpus/outline-edit/offline-tree/cold/source.json +++ b/corpus/outline-edit/offline-tree/cold/source.json @@ -1,8 +1,8 @@ [ { "path": "synthetic.one", - "bytes": 152736, - "sha256": "c724b5590d30d8a2ba5d12a25ba1e62bb05792947fd5405b65e68e9b2ae7c256", - "mtime_ns": 1788900756034686311 + "bytes": 153008, + "sha256": "8d1f6eacdb124a4d0b8c854264320e25ee0a7ba6767d07d5c861f870ccf879cc", + "mtime_ns": 1789121640205341562 } ] diff --git a/corpus/outline-edit/offline-tree/cold/teardown.json b/corpus/outline-edit/offline-tree/cold/teardown.json deleted file mode 120000 index a9088cc9e6bf00c88849f584d2a4967ba2372903..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline-tree/cold/teardown.json +++ /dev/null @@ -1 +0,0 @@ -../../offline/cold/teardown.json \ No newline at end of file diff --git a/corpus/outline-edit/offline-tree/cold/teardown.json b/corpus/outline-edit/offline-tree/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/outline-edit/offline-tree/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/outline-edit/offline/candidate/synthetic.one b/corpus/outline-edit/offline/candidate/synthetic.one index 72a2843936fe40a397370ea1bc5d68802ee8b425..7ce0cdbc1d84bb72bd1489516428956a32b2ace2 100644 GIT binary patch delta 4965 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 GH~N2NX!M)_ diff --git a/corpus/outline-edit/offline/cases.json b/corpus/outline-edit/offline/cases.json index 40623c317bc500504538eb48cc5f9437477aa7c6..24472e659ff3d180df1a2e0b0555ec88819242e5 100644 --- a/corpus/outline-edit/offline/cases.json +++ b/corpus/outline-edit/offline/cases.json @@ -6,8 +6,7 @@ "dependent_text": "{033CC036-70D6-02D3-2869-6264552F7B9E},64", "name": "Move leaf down", "object": "{033CC036-70D6-02D3-2869-6264552F7B9E},45", - "retained": false, - "space": "{B7267338-BF83-0893-27A7-37F606DD20C8},1" + "outcome": "merged" }, { "change": { @@ -16,8 +15,7 @@ "dependent_text": "{E79A0442-BFCF-04C6-1E04-364B68877B88},75", "name": "Move subtree down", "object": "{E79A0442-BFCF-04C6-1E04-364B68877B88},45", - "retained": false, - "space": "{9B80D7CA-18B4-02B0-1E85-6E8AA0DAD827},1" + "outcome": "merged" }, { "change": { @@ -26,8 +24,7 @@ "dependent_text": "{3F47069A-F0C5-053E-1DEC-13B552EEE2A0},75", "name": "Move subtree up", "object": "{3F47069A-F0C5-053E-1DEC-13B552EEE2A0},45", - "retained": false, - "space": "{7538095C-389B-07D8-2991-B2BC46EBD52A},1" + "outcome": "merged" }, { "change": { @@ -36,8 +33,7 @@ "dependent_text": "{5A89330E-0803-08CF-2BF5-26621F998039},75", "name": "Indent subtree", "object": "{5A89330E-0803-08CF-2BF5-26621F998039},45", - "retained": false, - "space": "{651463E3-C768-0C93-363D-FCE642B07408},1" + "outcome": "merged" }, { "change": { @@ -46,8 +42,7 @@ "dependent_text": "{1A8D8A0B-E96E-01B0-3DA2-EF182AA19042},75", "name": "Outdent subtree", "object": "{1A8D8A0B-E96E-01B0-3DA2-EF182AA19042},45", - "retained": false, - "space": "{8384083C-60ED-0F7C-2F15-8B20B878B3EB},1" + "outcome": "merged" }, { "change": { @@ -56,8 +51,7 @@ "dependent_text": "{7375C8D1-28F0-0B05-00E5-093957D7F5F1},75", "name": "Collapse subtree", "object": "{7375C8D1-28F0-0B05-00E5-093957D7F5F1},45", - "retained": false, - "space": "{FF88B513-029C-00E2-0082-9E3DCE1D7796},1" + "outcome": "merged" }, { "change": { @@ -66,8 +60,7 @@ "dependent_text": "{B11DD73E-4234-04EF-0F4D-1F67E8F92C22},75", "name": "Expand subtree", "object": "{B11DD73E-4234-04EF-0F4D-1F67E8F92C22},45", - "retained": false, - "space": "{850B34E4-D62A-042B-138A-B2A905CEE28E},1" + "outcome": "merged" }, { "change": { @@ -76,8 +69,7 @@ "dependent_text": "{DC976FEC-CD30-0C41-20AD-BB462A203464},64", "name": "Delete leaf", "object": "{DC976FEC-CD30-0C41-20AD-BB462A203464},45", - "retained": true, - "space": "{363FE055-44E1-0B27-14A8-46278FD681FF},1" + "outcome": "reviewed" }, { "change": { @@ -86,8 +78,7 @@ "dependent_text": "{73987DA5-C014-0EEA-00F8-5C1E149736E4},75", "name": "Delete subtree", "object": "{73987DA5-C014-0EEA-00F8-5C1E149736E4},45", - "retained": true, - "space": "{8BBAD88F-D248-0959-00B3-2438A7065330},1" + "outcome": "reviewed" }, { "change": { @@ -96,8 +87,7 @@ "dependent_text": "{C868DD34-6E8C-07E9-116E-4C68D2C45DFC},54", "name": "Delete only paragraph", "object": "{C868DD34-6E8C-07E9-116E-4C68D2C45DFC},40", - "retained": true, - "space": "{A4CB3BA2-767F-0AE8-0916-AF142D995822},1" + "outcome": "reviewed" }, { "change": { @@ -109,8 +99,7 @@ "dependent_text": "{78796D8B-FB39-02D8-2502-22530F00073C},75", "name": "Delete outline", "object": "{78796D8B-FB39-02D8-2502-22530F00073C},39", - "retained": true, - "space": "{80E80543-87A1-0C3A-0816-22B190BDFC87},1" + "outcome": "reviewed" }, { "change": { @@ -122,8 +111,7 @@ "dependent_text": "{462B969B-FCFA-0201-073A-0B4C3C23ABF5},75", "name": "Move outline", "object": "{462B969B-FCFA-0201-073A-0B4C3C23ABF5},39", - "retained": false, - "space": "{16207F40-69C9-0CA1-09B5-DC5712DB2BBE},1" + "outcome": "reviewed" }, { "change": { @@ -135,8 +123,7 @@ "dependent_text": "{048364F9-D353-05E3-319E-2633D33434CE},75", "name": "Resize outline", "object": "{048364F9-D353-05E3-319E-2633D33434CE},39", - "retained": false, - "space": "{CD420421-73F7-0F11-02EC-35FCA348998C},1" + "outcome": "reviewed" }, { "change": { @@ -148,7 +135,6 @@ "dependent_text": "{CE365E1B-9B76-067E-2EC7-220FB6AC76E9},75", "name": "Automatic outline size", "object": "{CE365E1B-9B76-067E-2EC7-220FB6AC76E9},39", - "retained": false, - "space": "{F383096F-2121-0225-1E62-AB37C9B15B33},1" + "outcome": "reviewed" } ] \ No newline at end of file diff --git a/corpus/outline-edit/offline/cold/commands.jsonl b/corpus/outline-edit/offline/cold/commands.jsonl index 3ca2a0d7a0a8100956f32249e22b0b52c430db17..f6efe72e90da7aa6bdb6b7f403bc0afcd05a8140 100644 --- a/corpus/outline-edit/offline/cold/commands.jsonl +++ b/corpus/outline-edit/offline/cold/commands.jsonl @@ -1,3 +1,3 @@ {"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} -{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-B0D8A07E -ExpectedPages 15", "exit": 0, "stdout": "Read 1 sections and 15 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-397443BC -ExpectedPages 15", "exit": 0, "stdout": "Read 1 sections and 15 pages.\r\n", "stderr": "", "error": null} {"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/outline-edit/offline/cold/machine.json b/corpus/outline-edit/offline/cold/machine.json index 2fddeba2bd756293074dce48eecba902509d105e..24667f29d5e2b768d667767a16ff7382241ce622 100644 --- a/corpus/outline-edit/offline/cold/machine.json +++ b/corpus/outline-edit/offline/cold/machine.json @@ -1 +1 @@ -{"name": "m6-b0d8a07e", "hostname": "ONE-M6-B0D8A07E"} +{"name": "m6-397443bc", "hostname": "ONE-M6-397443BC"} diff --git a/corpus/outline-edit/offline/cold/notebook/Open Notebook.onetoc2 b/corpus/outline-edit/offline/cold/notebook/Open Notebook.onetoc2 index ca2d23e914168eb4e1cf10450afb22b8af9e73cf..1b1942a6114891c51ac39bcf1c3c14bbfc71173f 100644 GIT binary patch delta 514 zcmX@0dO%fSq5gm8oA1kf<~o&Z2!v&CWuYm&D*O5RNuhD zFh!O@W~U5;NH&n(2c!jn!aH&}h0ZqDdn~rzclJ^5&WDpH@##(W;8U1=3$n6zN!Jl`5>cUPM*5Q xdD+~&gHAI-?i*MfRlEw4b2MP+<-fwn!Ug28>UuEro@C^ne2iCNa}&QEGXN&it#SYW delta 525 zcmX@0dO%fSq5gm8oA1kf<~w%QLq?g+5{&xQn7V{f1!(r&i3Kc^1$b3- zu_*(&Ncu%X!}70%8=u;2^PYP&)77AcZwljNMn-Yx0~rT;kJ#U31i6EOK~bckfk6f6 z91zDex1ifeg2!i%LTdtFmD4{Bfrf@2pj=h>X1B>3=J`&H++Ahboi%mxZr3-}bY zfO;BO7^cWF$n2D15XlD8`+&3nP&jv{iSDM11c!a8ck-kgV^2;l;?tXafKQ}e^7W># zqLtmgi%MC4`pAUkf}DZjP>{LHZ{c!gL$+2)Gv9OXUW3o?mPj1jsA>RlKFBDTlXo`S z85>1(c&&Z2s98qL^(jbB*Mp%~>MSES7my9{J)@%mL+?pO7A_!{b@D}C(alZ#cFX{x C(y}}N diff --git a/corpus/outline-edit/offline/cold/notebook/synthetic.one b/corpus/outline-edit/offline/cold/notebook/synthetic.one index 3d2228b42f3bf92091ce641f1caf3ab4a11d11eb..064869b445ee6393030cdc02165033614a0f1033 100644 GIT binary patch delta 5019 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 B<}m;O delta 4938 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 Kfp7TGjrbouhzuqG diff --git a/corpus/outline-edit/offline/cold/read/environment.json b/corpus/outline-edit/offline/cold/read/environment.json index 6ae9b744b00d8ad9a4d76e32a145436c615f6563..511e81bd38c25ecc3f3c5e0bee39bf5e6c3748f2 100644 --- a/corpus/outline-edit/offline/cold/read/environment.json +++ b/corpus/outline-edit/offline/cold/read/environment.json @@ -1,7 +1,7 @@ { "powershell": "5.1.14409.1005", "schema": "xs2010", - "hostname": "ONE-M6-B0D8A07E", + "hostname": "ONE-M6-397443BC", "cold": true, "onenote": "14.0.4763.1000" } diff --git a/corpus/outline-edit/offline/cold/read/hierarchy.xml b/corpus/outline-edit/offline/cold/read/hierarchy.xml index 0204d58383339adec8feaf54bf500679741f6b9c..36366e0c1e9190b025365460c8fc383e4aff4213 100644 --- a/corpus/outline-edit/offline/cold/read/hierarchy.xml +++ b/corpus/outline-edit/offline/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/outline-edit/offline/cold/read/page-000.xml b/corpus/outline-edit/offline/cold/read/page-000.xml index 92615e94b447e118621d2a59144184e84e651e6e..f3717d3d2b03e1a4faa7a8138db8ba15f393e412 100644 --- a/corpus/outline-edit/offline/cold/read/page-000.xml +++ b/corpus/outline-edit/offline/cold/read/page-000.xml @@ -1,5 +1,4 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/outline">Link label]]> diff --git a/corpus/outline-edit/offline/cold/read/page-001.xml b/corpus/outline-edit/offline/cold/read/page-001.xml index 6ccb6255a089fb2fe6e0c42387cc479f72ebbdea..2817bb21f8a4a494ecfcb9e8f46e3c3ec2e84c09 100644 --- a/corpus/outline-edit/offline/cold/read/page-001.xml +++ b/corpus/outline-edit/offline/cold/read/page-001.xml @@ -1,20 +1,2 @@  -Bold 🦀 italic é color 東京
-End
]]>
Fictitious: café, 東京, مرحبا]]>
+ diff --git a/corpus/outline-edit/offline/cold/read/page-002.xml b/corpus/outline-edit/offline/cold/read/page-002.xml index fd2f2fbe02f1229cd212a0c1b88a10595b2870eb..2e8e92a9f62be30113f93a06ac9e0323536da099 100644 --- a/corpus/outline-edit/offline/cold/read/page-002.xml +++ b/corpus/outline-edit/offline/cold/read/page-002.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/outline">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline/cold/read/page-003.xml b/corpus/outline-edit/offline/cold/read/page-003.xml index af9b2af57eb448d917e65d456ddb64cd33b4d3e8..53a0ed3dd01e765c41306ea218866203d97cea08 100644 --- a/corpus/outline-edit/offline/cold/read/page-003.xml +++ b/corpus/outline-edit/offline/cold/read/page-003.xml @@ -1,2 +1,5 @@  - +Target 🦀 é Link label]]>Child]]> diff --git a/corpus/outline-edit/offline/cold/read/page-004.xml b/corpus/outline-edit/offline/cold/read/page-004.xml index fc84dcf2d2d8d46ecb76ab6d1a9afe5713fa331c..22ecb7507fdbef018a7db69ed6057d5094e77248 100644 --- a/corpus/outline-edit/offline/cold/read/page-004.xml +++ b/corpus/outline-edit/offline/cold/read/page-004.xml @@ -1,5 +1,2 @@  -Target 🦀 é Link label]]>Child]]> + diff --git a/corpus/outline-edit/offline/cold/read/page-005.xml b/corpus/outline-edit/offline/cold/read/page-005.xml index 65b18bd345968995b34b8d54d092f6d45df726f1..98981ed576dda1252423ab842e702094e05bd7ea 100644 --- a/corpus/outline-edit/offline/cold/read/page-005.xml +++ b/corpus/outline-edit/offline/cold/read/page-005.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/outline">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline/cold/read/page-006.xml b/corpus/outline-edit/offline/cold/read/page-006.xml index f8a14bee6efb9f1df88c8dd6d78a1e6b60a34808..3e16b106dd4883ed7a485e5cb8fac2ef70172b01 100644 --- a/corpus/outline-edit/offline/cold/read/page-006.xml +++ b/corpus/outline-edit/offline/cold/read/page-006.xml @@ -1,5 +1,2 @@  -Target 🦀 é Link label]]>Child]]> + diff --git a/corpus/outline-edit/offline/cold/read/page-007.xml b/corpus/outline-edit/offline/cold/read/page-007.xml index 0c3c0b97cff7e771638fc0ee59778ec92a074070..57d259399a107cc313063636b4161d8b00dde712 100644 --- a/corpus/outline-edit/offline/cold/read/page-007.xml +++ b/corpus/outline-edit/offline/cold/read/page-007.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/outline">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline/cold/read/page-008.xml b/corpus/outline-edit/offline/cold/read/page-008.xml index 4a425d20db03d8ebdf3c5639ac9d1358ca4ab69f..7acc9909da694567d005fa78e975535f7d30ad30 100644 --- a/corpus/outline-edit/offline/cold/read/page-008.xml +++ b/corpus/outline-edit/offline/cold/read/page-008.xml @@ -1,2 +1,5 @@  - +Target 🦀 é Link label]]>Child]]> diff --git a/corpus/outline-edit/offline/cold/read/page-009.xml b/corpus/outline-edit/offline/cold/read/page-009.xml index 2e10eaeff992340702c39f5209ce5a82cd68fcb2..e024115764bc01675982636ec685757e63a6d2d4 100644 --- a/corpus/outline-edit/offline/cold/read/page-009.xml +++ b/corpus/outline-edit/offline/cold/read/page-009.xml @@ -1,4 +1,5 @@  -Target 🦀 é Link label]]> +href="https://example.invalid/outline">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline/cold/read/page-010.xml b/corpus/outline-edit/offline/cold/read/page-010.xml index a1d53f47f159ab8288c69cc79036170a54d1d897..9962dbbc6532ccc644fb8accd9e4f8959dca455a 100644 --- a/corpus/outline-edit/offline/cold/read/page-010.xml +++ b/corpus/outline-edit/offline/cold/read/page-010.xml @@ -1,5 +1,2 @@  -Target 🦀 é Link label]]>Child]]> + diff --git a/corpus/outline-edit/offline/cold/read/page-011.xml b/corpus/outline-edit/offline/cold/read/page-011.xml index 0b524b2623a0e04b9a9dea0c6997240d04b7ad26..49201c6a35cf7b4187a290cd7bdb8368eae49899 100644 --- a/corpus/outline-edit/offline/cold/read/page-011.xml +++ b/corpus/outline-edit/offline/cold/read/page-011.xml @@ -1,2 +1,5 @@  - +Target 🦀 é Link label]]>Child]]> diff --git a/corpus/outline-edit/offline/cold/read/page-012.xml b/corpus/outline-edit/offline/cold/read/page-012.xml index 3cdeb076e5761dafb8999ba352bca4bfb67d7ad4..3e87b85118fa6ccf94a8a98b0c6c4a3e3d4de957 100644 --- a/corpus/outline-edit/offline/cold/read/page-012.xml +++ b/corpus/outline-edit/offline/cold/read/page-012.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/outline">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline/cold/read/page-013.xml b/corpus/outline-edit/offline/cold/read/page-013.xml index fe7126cf65360af6f16da4aa84e9916b2894258a..3d7acc220a814e9b2563baa7672fc5aeb30bc1d6 100644 --- a/corpus/outline-edit/offline/cold/read/page-013.xml +++ b/corpus/outline-edit/offline/cold/read/page-013.xml @@ -1,2 +1,20 @@  - +Bold 🦀 italic é color 東京
+End
]]>
Fictitious: café, 東京, مرحبا]]>
diff --git a/corpus/outline-edit/offline/cold/read/page-014.xml b/corpus/outline-edit/offline/cold/read/page-014.xml index 95cba123060980b973bd7a83c4437f5eb37b4d89..57d56d992230dfcdf655d40edbf0fe7607e0d5b3 100644 --- a/corpus/outline-edit/offline/cold/read/page-014.xml +++ b/corpus/outline-edit/offline/cold/read/page-014.xml @@ -1,5 +1,5 @@  -Target 🦀 é Link label]]>Child]]> +href="https://example.invalid/outline">Link label]]>Child]]> diff --git a/corpus/outline-edit/offline/cold/read/payloads.json b/corpus/outline-edit/offline/cold/read/payloads.json deleted file mode 120000 index 9e1be3e2b6d87478e7c48d278ecac8ee6c97f6d0..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline/cold/read/payloads.json +++ /dev/null @@ -1 +0,0 @@ -../../../../paragraph-edit/before/read/payloads.json \ No newline at end of file diff --git a/corpus/outline-edit/offline/cold/read/payloads.json b/corpus/outline-edit/offline/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/outline-edit/offline/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/outline-edit/offline/cold/run.json b/corpus/outline-edit/offline/cold/run.json index afe77f78d76e0bc7a673bf8f335422d71457a911..e2e36384413daa846a304b449f4d69c4de1027e6 100644 --- a/corpus/outline-edit/offline/cold/run.json +++ b/corpus/outline-edit/offline/cold/run.json @@ -1,5 +1,5 @@ { - "notebook": "/Users/clo/dev/one/evidence/m10/offline-outline-candidate-01", + "notebook": "/private/tmp/m33/offline-outline/candidate", "expected_pages": 15, "author": null, "author_timeout_seconds": 600, diff --git a/corpus/outline-edit/offline/cold/scripts/cold.ps1 b/corpus/outline-edit/offline/cold/scripts/cold.ps1 deleted file mode 120000 index 5bc2f1837e1f0b639923a80b79c517c98c5c519a..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline/cold/scripts/cold.ps1 +++ /dev/null @@ -1 +0,0 @@ -../../../../paragraph-edit/reconciliation/keyboard/scripts/cold.ps1 \ No newline at end of file diff --git a/corpus/outline-edit/offline/cold/scripts/cold.ps1 b/corpus/outline-edit/offline/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/outline-edit/offline/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/outline-edit/offline/cold/scripts/read.ps1 b/corpus/outline-edit/offline/cold/scripts/read.ps1 deleted file mode 120000 index 85257c76cede599f47da88e69419a767dd6b99ee..0000000000000000000000000000000000000000 --- a/corpus/outline-edit/offline/cold/scripts/read.ps1 +++ /dev/null @@ -1 +0,0 @@ -../../../../paragraph-edit/reconciliation/keyboard/scripts/read.ps1 \ No newline at end of file diff --git a/corpus/outline-edit/offline/cold/scripts/read.ps1 b/corpus/outline-edit/offline/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/outline-edit/offline/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/outline-edit/offline/cold/source.json b/corpus/outline-edit/offline/cold/source.json index c24898bd5a570d771a210ecb1fd572535e985442..f47716a131e8bb12e2bbec02ac756bf417dfaa18 100644 --- a/corpus/outline-edit/offline/cold/source.json +++ b/corpus/outline-edit/offline/cold/source.json @@ -1,8 +1,8 @@ [ { "path": "synthetic.one", - "bytes": 149936, - "sha256": "608532b4ef9be3cbeac3c0ec9b7e624a96aa4ce0ce6c0f86837933703e61fd0c", - "mtime_ns": 1788894002037909008 + "bytes": 151272, + "sha256": "c7597855c339b53c41023864a8365aebd22af36afcf0964e7bbee49a87c5cf31", + "mtime_ns": 1789121631571331942 } ] diff --git a/corpus/page-lifecycle/offline-edits/README.md b/corpus/page-lifecycle/offline-edits/README.md index 229eb140c29c299bc9b09d8d7eb68fccf6735fef..b14bf0aabd9b55fdd976c4d877580ce8b049667e 100644 --- a/corpus/page-lifecycle/offline-edits/README.md +++ b/corpus/page-lifecycle/offline-edits/README.md @@ -24,9 +24,9 @@ captures, source hashes, scripts, base image and clone removal. Reproduce candidates with new absolute output directories: ```sh -ONESTORE_OFFLINE_PAGE_EDIT_OUTPUT=/tmp/one-page-edits cargo test -p onestore-offline --all-features --test sync pages::native_page_changes_reconcile_with_atomic_offline_batches_and_review -- --exact +ONESTORE_OFFLINE_PAGE_EDIT_OUTPUT=/tmp/one-page-edits cargo test -p notebook --all-features --test sync_pages native_page_changes_reconcile_with_atomic_offline_batches_and_review -- --exact python tools/offline_page_edits.py /tmp/one-page-edits /tmp/one-page-edits-cold --workers 4 -ONESTORE_OFFLINE_PAGE_CLIENT_OUTPUT=/tmp/one-page-clients cargo test -p onestore-offline --all-features --test sync pages::twelve_disjoint_page_batches_merge_with_dependent_bodies_without_review -- --exact +ONESTORE_OFFLINE_PAGE_CLIENT_OUTPUT=/tmp/one-page-clients cargo test -p notebook --all-features --test sync_pages twelve_disjoint_page_batches_merge_with_dependent_bodies_without_review -- --exact python tools/native_runner.py /tmp/one-page-clients /tmp/one-page-clients-cold --expected-pages 37 --collect-notebook ``` diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/candidate/Lifecycle.one index a5f9214f1d6f124243acbf2deece1042eb54b0ed..bbf1e7fea73127ac8b1484ab9dfede4c0750870e 100644 GIT binary patch delta 558 zcmexxm-)k8<_T9cu3ToiK9_H&!;1VU{@$Ni)h`(!K;-4c-sw}!T^D`vsZ0*|r#IP= zRc5mUyvBVYE1TdoFK5TVBwwDe?L1mNGW@r)a;%# zdCy}#4Aq-|J!WDQm?XAPOV#*<@9uVUfu?9Tzs)>PcQ6Wwtu5YtGpfU5-+K8i8&+6y zP3C#}WAd5j90Irft{GH*``|iN?|GTBqZs4lC(ny81=C)r8KlZMylU=V?YsTsv6>XV zHZ4Y=Zs1bOj^5SDf}7Gw<1s=Laacf9$0%vaI;)8v}B8k2niI{F0>q< zyyvkVhU(3~9y2it-2TpYu5wj}Yv(?bm;RGV=56MAx`R zv+ayP-zW(%G^ivnG=MyYVbY!#4+M0-vOYgN+uF57uH90{DyeevnwNSQPMrMer2(c3 zwO$zrpxZe)>s1buMZsi&%?gu$yz*kUD7ZA)^>w|#g_FL8OV9jt-S+x+k^d>#ci@2g z^ZFE6ZDqt{g|}K@wZ3oV1xi({=U53Z@LNzX77?EMd<{_T3cqyvBVYE1TdoFK5TVBwwDe?L1mNGW@r z)a;%#dCy}#4Aq-|J!WDQm?XAPOV#*<@9uVUfu?9Tzs)>PcQ6Wwtu5YtGpfU5-+K8i z8&+6yP3C#}WAd5j90Irft{GH*``|iN?|GTBqZs4lC(ny81=C)r8KlZMylU=V?YsTs zv6>XVHZ4Y=Zs1bOj^5SDf}7`XLjXVQ6WKq*Z0D+ z&=scclUDxO6%s8RG;xB9Mn*i-$M^C6?u+{q_pWqRYJANA0qH^U_xAO#^_%$Sim5o) zS;onZtTLM=82>yJIQ@QUT6I^s^Nu&4kNGN^f0|tLR%5cy;{<`W%wq>UuRQbGzQS#p z)rFShllMH#{W1B>a}I$&)iZrnb{f0PU9ZhhA>N%d`N{JlOu@7lY6gMgec3JhMVxl( zXRx#{f3}?w=o=*gh6a@ch6a$wFihI>;(>tfSJvl;XIs0r$hBMQSS3|XUh`59!-zjeOxOU8&K*ELhV`#rs>npV1*>HMDZsGv)k}rRm)^+% E0J$R+J^%m! diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..4ee0b2f5633446696fe370bcf4ab11a00cc9b97d GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x7-R7f7Lu1Im(bmdrn$dBZ11~g!Qcb0(k#IK%9FNjZk zdt%)UX`nnZhAICK1RypmOaMy5#LF6+|@Ac|ACUE}oo3pOmPzi-~FV{wLo_60p!Lskb=FTrL_1NewnhW`nF*Y@$Vxu82 z)I;FNm+xOUR)sAQfO>=@hhb_1qsjrT9ZzQ@sd!Bda=GGhnpuevD9w`4(11;Rs0YEQ z`$t1yM1%lxo$0;HxaqLyp>9~d2W9ZfQ<(xld?p|k1Y(dF2&Z?>@&)lh;-IP)CT^2_ zZ!w6^1r;;R7D)#2MWFl?9WQqva}c>x)QsY@7DAc}@5 ziLHEug%7NYAyR<55hVShq2XBmGN#h%0`E!EC!}0=HaCFEN^Bq?|NG(Vj&~U$@`@r2 z4Gb#4pa&^E@$<5@jg6-7KJUg#i+5WUH3S+OdVq2-Tz^L7yE8c~Uez&>+)kXBs} zhTap5jIa_IST?t$F!UgM1Y{xztdBHkXn?7c0UG&VfS~~_Lo{)K52}=ffdN*307V)= zqCm%hO=n{GCc~hzPliDRs67%~~s7*ZLM87hG|2guT6$Y;m{(vaRCkOBha_yOqz#X((d#~UV# zcAuWRPpgC!CI*AVvBk>+f2AWh;($re{6mI%t!LAsBU{x!+i z+8g`Zd?xV<9etC&sug4nC_c_Ia>K$IsKL>Iq4y*s3l~t96>HqoXfpf)#RtgvQ7{?; PqalDR1dxk0Sos40iY-0o literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..6b413be795aa8233a06acbf0f1edade4401b1313 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-E8220F62", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/hierarchy.xml index 8ddbea76bb664363d095779528aa88347d14dd60..702becda49cd3a1e37891176b0a0e2aac9bc71ec 100644 --- a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-000.xml index 3ee348a35859185d865152b1eaf187df0ec1474d..10df27db05a3540158b2661dfefe4b226c90dc68 100644 --- a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-000.xml @@ -1,2 +1,4 @@  - +Body grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-001.xml index 12e634fad1f842455d581e11d8dfd37c842a9d6e..b8bf6f81e1c7439e195e2dfe4399f83cdb4f7d0e 100644 --- a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-001.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-002.xml index 85216cfdc05263624742fe73ce0d7c08165c340b..b38abb01cb797021743afd1b7a056815988e4254 100644 --- a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-002.xml @@ -1,4 +1,2 @@  -Body grandchild 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-003.xml index 20740711b6cc7e8fe8fe29c6bb4de61f5e8c8517..f08eb1c61412117a204e615580f3c08c8d91c2f7 100644 --- a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-003.xml @@ -1,4 +1,2 @@  -Offline Body parent 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-004.xml index d32f327d6c8a91806bfac5bff526356135178802..6d6d59a72119256e28ad0e1784a50227d6c2cc7f 100644 --- a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-004.xml @@ -1,2 +1,4 @@  - +Body child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-005.xml index d60aad063d3af51798dd95027f7d15ed704868bb..7f938e968ea04a97bbc6d0ccc9a45a0ff6cae5e9 100644 --- a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-005.xml @@ -1,4 +1,2 @@  -Body child 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-006.xml index c63d9a1990243b8a47c5238a44ba7fd6cb62c339..225fb96e1c3421a9e4d6e4a0a48ae3a27510f53f 100644 --- a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-007.xml index 797255f7f07481ec6a652be069428287c508a4fa..c43e33a0e71b2671be64806bde5d0fab076261d4 100644 --- a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-008.xml index d25e3ec6e0fd06cbc6a68c9a425e4d1e09677ad4..1719fdb588ae76cd99041a85607817255c34129c 100644 --- a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/run.json b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..de4c9be215186b9443aad14aacd6d083a0706966 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpbu44alfu", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/source.json b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..11ac61d07f260f42639babe8fb2e7372ebc796f1 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 61168, + "sha256": "b0fd7dc60d8bb7d26310e363f8ec9269651bf1c6bccce6465b292978e6c932ce", + "mtime_ns": 1789121644250856649 + } +] diff --git a/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/teardown.json b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-01-demoted-parent/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/candidate/Lifecycle.one index 353b3b73aca4f83700b1a37ca34883680a4f7e88..7157c9767ed919aea696ce02e17b6d4d64389f09 100644 GIT binary patch delta 318 zcmezIl=;U~<_T9c9FlHa=u`gbJpcHKf_Gwz&%I@U0EME$`I8klxUMc-&>d-<_p&0rMxVbN@7?{(B~!z_EbZ^}QPO}_I= zWAmCf7K{R}M>Rb^d|K{3UqPw!+q=B|lfS&x!!TrW)hC(Be(yvu%>haDy$fK@(YreN z;k!&Q?fbr7AoC<^pxO3S-jg<+d6&FlzwP8Z?>~VhFMenQ)1e>b1sb1D`10b+E3e+_ z_?2Q`JKg{lX-r=8u|YuYV)Gt{ysf^=*~Q)-I@Nq_vdt$wOe3p48DJW*>ysS-_GqGs delta 318 zcmezIl=;U~<_T9c4o}-zvE%1*?>%38h4~k)So)R$0;=pLb$q&J<2bY9l67OHZTw_M zR+-Hbj9Xp`*qKk$KKsDhx%Ye0i`A`=s7vefr|%@8pYbOuq9< zWAmCf7K{SU2Ul+vyQttkH-!IrWq9v}$zR^;VHh&G>XXc5zjq>-=71#n-UTpQ7F?SA z@LeXD_I+P3(86@+zBT#I`%hrWiys=nbm&KUfg3#BPy9c6`}aPX yrCgA)G#RK!WAd7h4FaX5@6T*7kMr$+sG#@xd${gon@@U}Mpk_?z%*jlCp!S$l$`zm diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/candidate/manifest.json b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/candidate/manifest.json index 0a91ee206e09713c25317a6d6e58133d910125ec..395613a07fd1cf32f39e38a6a17f638775d9ac70 100644 --- a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/candidate/manifest.json +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/candidate/manifest.json @@ -5,22 +5,22 @@ "original": [ { "guid": [ - 205, - 25, - 35, - 174, - 21, - 169, - 174, + 68, + 176, + 77, + 20, + 183, + 9, + 54, + 75, + 168, + 116, 72, - 182, - 223, - 57, - 112, - 191, - 108, - 153, - 199 + 109, + 49, + 21, + 21, + 17 ], "level": 1, "position": { @@ -30,22 +30,22 @@ }, { "guid": [ - 59, - 191, - 216, - 214, - 87, - 39, - 49, - 64, - 147, - 84, - 80, - 127, - 29, - 240, 132, - 241 + 65, + 94, + 115, + 140, + 181, + 53, + 79, + 149, + 192, + 118, + 105, + 127, + 89, + 100, + 201 ], "level": 2, "position": { @@ -55,22 +55,22 @@ }, { "guid": [ - 111, - 54, - 53, - 101, - 131, + 92, + 74, + 109, + 169, + 47, + 35, + 107, + 73, + 130, + 118, + 81, 37, - 42, - 79, - 140, - 237, - 226, - 118, - 126, - 82, - 234, - 186 + 128, + 161, + 143, + 254 ], "level": 3, "position": { @@ -79,28 +79,28 @@ "space": "{8A6DBA48-33BB-0681-2F02-2C73A811E8B8},1" } ], - "page_receipt": "Some(Published { revision: ExGuid { guid: [67, 193, 171, 179, 22, 209, 32, 71, 157, 84, 15, 231, 121, 87, 141, 208], n: 1 } })", + "page_receipt": "Some(Published { revision: ExGuid { guid: [69, 197, 41, 73, 240, 242, 167, 75, 159, 32, 34, 137, 246, 238, 110, 191], n: 1 } })", "phase": "02-promoted-parent", "publications": 2, "reviewed": [ { "guid": [ - 205, - 25, - 35, - 174, - 21, - 169, - 174, + 68, + 176, + 77, + 20, + 183, + 9, + 54, + 75, + 168, + 116, 72, - 182, - 223, - 57, - 112, - 191, - 108, - 153, - 199 + 109, + 49, + 21, + 21, + 17 ], "level": 1, "position": { @@ -110,22 +110,22 @@ }, { "guid": [ - 59, - 191, - 216, - 214, - 87, - 39, - 49, - 64, - 147, - 84, - 80, - 127, - 29, - 240, 132, - 241 + 65, + 94, + 115, + 140, + 181, + 53, + 79, + 149, + 192, + 118, + 105, + 127, + 89, + 100, + 201 ], "level": 2, "position": { @@ -135,22 +135,22 @@ }, { "guid": [ - 111, - 54, - 53, - 101, - 131, + 92, + 74, + 109, + 169, + 47, + 35, + 107, + 73, + 130, + 118, + 81, 37, - 42, - 79, - 140, - 237, - 226, - 118, - 126, - 82, - 234, - 186 + 128, + 161, + 143, + 254 ], "level": 3, "position": { @@ -159,5 +159,5 @@ "space": "{8A6DBA48-33BB-0681-2F02-2C73A811E8B8},1" } ], - "text_receipt": "Some(Published { revision: ExGuid { guid: [117, 117, 239, 204, 176, 55, 94, 77, 143, 225, 32, 46, 243, 247, 87, 45], n: 1 } })" + "text_receipt": "Some(Published { revision: ExGuid { guid: [30, 209, 131, 188, 64, 110, 181, 77, 167, 7, 22, 237, 194, 202, 131, 214], n: 1 } })" } \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/commands.jsonl b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/commands.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..4c1c1492088bc872543d7c5b89ce3757eb5a62ce --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/commands.jsonl @@ -0,0 +1,3 @@ +{"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-529C1CBC -ExpectedPages 9", "exit": 0, "stdout": "Read 1 sections and 9 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/machine.json b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..a3bdae076b1df6732d90f4c58d0063ba7bdfa6a3 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/machine.json @@ -0,0 +1 @@ +{"name": "m6-529c1cbc", "hostname": "ONE-M6-529C1CBC"} diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/notebook/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/notebook/Lifecycle.one index dbde03ccf5d068f64771aff896b56afec51957d3..550ac220cb8e3cb7b1cb03bc980b2937a19c5a28 100644 GIT binary patch delta 372 zcmezIl=;U~W`!p~G1Wacmiw;T7+i5dbK2#^Ot#Du@ke|YO5awPw$`zEqC$eex6{3T zN=s~97fd&^d-< z_p&0rMxVbN@7?{(B~!z_EbZ^}QP zO}_I=WAmCf7K{R}M>Rb^d|K{3UqPw!+q=B|lfS&x!!TrW)hC(Be(yvu%>haDy$fK@ z(YreN;k!&Q?fbr7AoC<^pxO3S-jg<+d6&FlzwP8Z?>~VhFMenQ)1e>b1sb1D`10b+ zE3e+__?2Q`JKg{lX-r=8u|YuYV)Gt{ysf^=*~Q)-I@Nq_vdt$wOe3p48DJW*>ysS- Dxzo1? delta 372 zcmezIl=;U~W`!p~G1Wacmiw;T7+i5dbK2#HcV23!PygsYO_O~!NBKRbi3$kfM5Y#e8HT(WMg zw2hza$SSj0f^o}B0Xy?)+GihFJNJH1da=6ok?-a^uVyd`wEvl9l-4Be#)476`QYl!Viy(M=Z5e2 z%YsXjAHK^3)4uQP1zLEHPIxE0-gmZ;Qt{@b%eN-qdH)G4dGSLdm=66YFK~m0`-%TY zZ~xvWvy=-mmL>xgX-r=8u|c4;^!=F)=5fCL4;A!2e-GE4Z1YJE)5xk%2AD?d`eX+H DwyCyz diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..5d22c5a2dfcf0d11aa1601e9c227bf631e9035cf GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x86JKgK2w8X}B!E`e_ZcmqB1~g!Qcb0(k#IK%9FNjZk zdt%)UX`nnZhAICK1RypmOaMy5#L*orFidS=RN?+_!>-6H>fR|l!KH6=h8H7HnkAv30h{RZa(GVD0U+Gl|4S|M+9-!RkxKgPa&;PE|`g|)nJ8x@(wCZ{= z^qyd3gq6U+vbiONp$FL`AQM4geWXD{15BL^(8&J+3=LozqKN~1P^Byk46ynGDAE8G zZD3)TBFiANQ-(n#8%Xa1(xBQTF_SIxMEnuoh0?bbrmb~s202>>hO5^96lFLBi*y5$(gg>r0cw-h3xMk*X&qfuVOIcq&&Q}En9>_+JQLy;9CA}fJ z$f?qIOD6XU!&x?+AUQ_^hTbcTEL=b~D=2PGGIGPh99P`bXfpf)#RpLLC>RZa(Gb8H L0?5T0to#80rTjF) literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..7b488d296eb63f5b8a4df37f7eb331cea0c28a0c --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-529C1CBC", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/hierarchy.xml index e1c3260092a2a2888a6fac8aad6e3ec09423dc88..365999684ce26dc3ec07bc87f935842b54514a36 100644 --- a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-000.xml index b49393e0bec505558d406e92368349c3179da095..eb285fb834e41d98f0d2f48986192179e0160c37 100644 --- a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-000.xml @@ -1,4 +1,2 @@  -Body duplicate 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-001.xml index ac53606f49a7e98edbe97b13d95831ad3cffb429..310fe6e6aeb8636aa960926d43dd05186b5a1572 100644 --- a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 éBody child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-002.xml index e59d479b7161382835c959d60af6b9d2167eaa1d..044e861b291fe0c4d279772ef669be9a55389de9 100644 --- a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-002.xml @@ -1,4 +1,2 @@  -Body trailing 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-003.xml index 7567ea80bced6c3c2782e8c6f4ed224dbd364307..eed308396e5366effb6fe3354bc73bf660b6454c 100644 --- a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-003.xml @@ -1,4 +1,2 @@  -Body child 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-004.xml index 1a8ea955732ef95b63306495a01d7005585c2a55..8f2d35eabc781123dd847fb0429200f6a0c407e2 100644 --- a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-004.xml @@ -1,2 +1,4 @@  - +Body grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-005.xml index a0d1ae4322235093fe1aee25115d21195f9ba149..0e20915e0a86f545b9b3ecffff05902f555df304 100644 --- a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-005.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-006.xml index af74b0b3ce0f12e16643d21e3c773980617b707c..c219a62d71478e334bca680f90652827bab11829 100644 --- a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-007.xml index 19cfa6e08a9bad712003c9abbd1636a641df3c7c..3a7f98d715ce92323ead6a1e555db2bab284b11d 100644 --- a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Offline Body parent 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-008.xml index b756f6f806dde3c05a91037e60add9566ee9eefe..8f328ea83807224a72eb9c1b42e6cd7cac86c90e 100644 --- a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/page-008.xml @@ -1,2 +1,4 @@  - +Body trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/run.json b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..c919f7448e77865f141f7b398a4b1f46c57248b0 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpzv4zdwuu", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/source.json b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..447664d0fcf556ac01bfd7e6aff245611e37b1d4 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 62200, + "sha256": "1799f81b54d3d38ff66e420e83d4a242711cae40e52c8c3a2fb8d7886c43fd6b", + "mtime_ns": 1789121644594396710 + } +] diff --git a/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/teardown.json b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-02-promoted-parent/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/candidate/Lifecycle.one index 2c360d4926f138ed90c66657c9eaa4a905039b3b..2e149c4888f2d2d609d53dabd29c80e7c439d8c3 100644 GIT binary patch delta 199 zcmX@{lKI3-<_T9cqUO3gf3nJRS}EVhvZky5>w5+WcsVWqc=;b+um0J3cT_BR+$TG- z%50Wkoc5kMNAK$7jUO_>wCu-v0bU88psbXwF8d#e&s^(OdTa8UkDtJj3qLi2Y1Pm2 z0$W1N=Qk|f=04HTo;z{=k!L_f8k1{2Hwf4_Mjxy@rsBDHg~Dn-mkpegdA{gj8tL`L K0Mm%BFLnTwHCikH delta 199 zcmX@{lKI3-<_T9cq+Tce>zh>I)p2%KXhGBJ(Dw`w;PgTBcGkTG4!xQdzMs9VH6}Z< z%50Wkoc5mCvf$F>jUO_>wCu-v0f7f6PsUdoxy@R5<9^tE+vAhheEbBKT==OGOsjsD z7x+;x*XO1F%zMxL-ED^Jxsrj3G$z-4ZV<5HYFOrcV2khkT#K+O-*btRdA{gj8tL`L K0Mm%BFLnS=uU@hM diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/candidate/manifest.json b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/candidate/manifest.json index 78fde90ddefdfa2372df478c17fd4cdc2a9a770d..2d59c60cac551677a91b1616c92f28ae0f6ec1b1 100644 --- a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/candidate/manifest.json +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/candidate/manifest.json @@ -5,22 +5,22 @@ "original": [ { "guid": [ - 59, - 56, - 245, - 11, - 183, - 166, - 17, - 77, - 128, - 103, - 4, - 198, - 84, - 31, - 176, - 132 + 42, + 117, + 255, + 71, + 239, + 218, + 67, + 71, + 175, + 211, + 157, + 52, + 145, + 208, + 101, + 95 ], "level": 1, "position": { @@ -30,22 +30,22 @@ }, { "guid": [ - 125, - 120, - 25, - 176, - 131, - 146, - 79, - 66, - 152, + 33, + 225, + 101, + 47, + 69, + 149, + 52, 72, - 8, - 5, - 112, 144, - 227, - 13 + 162, + 220, + 60, + 114, + 18, + 197, + 88 ], "level": 2, "position": { @@ -55,22 +55,22 @@ }, { "guid": [ - 13, + 112, + 138, + 67, + 208, + 44, + 116, + 79, + 76, + 139, + 42, 28, - 56, - 21, - 0, - 191, - 211, - 65, - 137, - 203, - 79, - 98, - 79, - 246, - 200, - 111 + 6, + 127, + 208, + 43, + 160 ], "level": 3, "position": { @@ -85,22 +85,22 @@ "reviewed": [ { "guid": [ - 59, - 56, - 245, - 11, - 183, - 166, - 17, - 77, - 128, - 103, - 4, - 198, - 84, - 31, - 176, - 132 + 42, + 117, + 255, + 71, + 239, + 218, + 67, + 71, + 175, + 211, + 157, + 52, + 145, + 208, + 101, + 95 ], "level": 1, "position": { @@ -110,22 +110,22 @@ }, { "guid": [ - 125, - 120, - 25, - 176, - 131, - 146, - 79, - 66, - 152, + 33, + 225, + 101, + 47, + 69, + 149, + 52, 72, - 8, - 5, - 112, 144, - 227, - 13 + 162, + 220, + 60, + 114, + 18, + 197, + 88 ], "level": 2, "position": { @@ -135,22 +135,22 @@ }, { "guid": [ - 13, + 112, + 138, + 67, + 208, + 44, + 116, + 79, + 76, + 139, + 42, 28, - 56, - 21, - 0, - 191, - 211, - 65, - 137, - 203, - 79, - 98, - 79, - 246, - 200, - 111 + 6, + 127, + 208, + 43, + 160 ], "level": 3, "position": { @@ -159,5 +159,5 @@ "space": "{8A6DBA48-33BB-0681-2F02-2C73A811E8B8},1" } ], - "text_receipt": "Some(Published { revision: ExGuid { guid: [60, 10, 128, 166, 67, 192, 180, 77, 159, 109, 56, 86, 122, 77, 206, 97], n: 1 } })" + "text_receipt": "Some(Published { revision: ExGuid { guid: [63, 129, 91, 193, 126, 198, 36, 73, 163, 168, 32, 171, 78, 68, 176, 9], n: 1 } })" } \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/commands.jsonl b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/commands.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..321880d1b6176d139057103e43e5e06fe98601e4 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/commands.jsonl @@ -0,0 +1,3 @@ +{"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-757551A0 -ExpectedPages 9", "exit": 0, "stdout": "Read 1 sections and 9 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/machine.json b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..99493ed690064b7376ac909b1b7cb473e7b5f00e --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/machine.json @@ -0,0 +1 @@ +{"name": "m6-757551a0", "hostname": "ONE-M6-757551A0"} diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/notebook/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/notebook/Lifecycle.one index c8ef9758827843a7de8a5841061ec81a50f82f5b..65d0cae77ab60bd96e63bdb9127a49132d1860ef 100644 GIT binary patch delta 253 zcmX@{lKI3-W`!p~G1Wacmiw;T7+i5dbK2!8lkMB0wbr`rxWt;d@$_1gi3$k<3S1>s z+!MdMtkgNpmhjW>(!>ca8XvSiYKr)r@m;b$#wKQ2->Z)d5b$zZ{_*lZzFz&a_3o%x z@VHNQWR=-0!8q+bbB^BC$s0dpf@#^0^#Z&SK0#S2TV3`)5}&!&tMu07H6K5LB^Q2b z1k_~Y3Fmv delta 253 zcmX@{lKI3-W`!p~G1Wacmiw;T7+i5dbJ}HpJGY1zTT>lcEZEpf4se%FR7en5W|N)0 zXq~A4q?P6iA8mQMa^eIRjf>_Dc3m&;`*sWLJf=Uvt@tAY1UP-ryq$G#fkUsRh3{u? zYmLc{tTLM=7^l5wwk)_bdEMwMsBkf-nbuj-}dx&%#3S@Tn diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..7783f8f56e02698c4b49861a00d28bb457c8108e GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x77aFtYXPyFt(Qs*>V!cV_T3~0dq?koZ6iC;aJUJ#%7 z_Qbjy(m;7+3{(Ce2taIBm;jW9iK7Xla6xK704&G>m0|(XAPfRP8lnQC=711H7)IWh zJM-k)q#XY>&1)4-_1*R1hDtb}+W6?gA|c0pS7tS2TiNr$)MKN!XfEVO#@N)1ij9WA zP!EA4U%r3cSQWNJ0O}Er9EPb4j4Bt+XMJw+zvi~=MBkC8?`Om_0;O3J8XB;P5A`4z zb^mAxjEE3Gt~0%N88;mkJ=6`$_n-`Zc`8!?h|dJXfV*H-e;JG&HH^Y-bWhGV+=W2Gt@h&4oUQwi> zfk6cr^dO}lnfsQ150i0kJ+R1W?Q&5M4S|M+9-y2@~ zL+=SjMpy|9ESpoKt~Fu>{$pk}Zs zK*xYhXJYs!!=SQHhCu}6ye;$YAxv*zVVEMzAhQ!Fmkp#rYCyHkl*#sO(OPTWc3fi3 z+<1De2}qv|5c@D>GNdu2G9)up0&xzIrN@xZkO!n8y+0rY1jz9N(g})#t*ee&PGxO( zo%${}+^<_u2_%j!UN$^S#1#kDkGeP9oD$*R_)PcGGIQ-ks=&YlngXu+VDTZhf%(ad zlS^EeNL-6i;xz~WSp$lXvy9xZa0Y5{G+^jG$;iS5lx4*lH#M3Jzd-Q;GJX_{hQMeD N;0gicVhvXQ005;uNk#ww literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..42da147eb166eaed158dbaec1006a72bfdaf5a32 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-757551A0", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/hierarchy.xml index 3f8eb5430a158b16c4b13ad412368a1caf5921fd..4a21c596b50ed4d4b406bce7fab1d2af4394ff04 100644 --- a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-000.xml index 4606c1dc986c96fa06b62cb2ab7ef72cd82a41e9..eacefb93a1c6b0a591824fba3b3b42a7b2bee8aa 100644 --- a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-000.xml @@ -1,2 +1,4 @@  - +Body trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-001.xml index 83dc60453e4f4ccc1df31be48d5f12956e928ec6..619d20bb96cddb19e7f76996c3ad2c5d95aecaca 100644 --- a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Offline Body parent 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-002.xml index 547a567b37b677d592a76297e9b5f1d0aa98d9d1..89600d1605b9d9228ad55ab0b7fc93e3d24c246c 100644 --- a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-002.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-003.xml index cc1955130f89864806f7a4e6b2425067a0fe607d..e107570730c7da99c57bf2036207400f688e607f 100644 --- a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-003.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-004.xml index 555151550341e889451c675f7892271a0bbd541a..2c7801c1e1ed95799bc0a357c4e5644620224edb 100644 --- a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-004.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-005.xml index 8692105a5442dfb9154f32bc03bb7b4d3ceb88b9..9349b048a8737400ee0894318a1900a06810879e 100644 --- a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-005.xml @@ -1,4 +1,4 @@  -Body child 🦀 éBody grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-006.xml index 93de8fbb47c60089f4b428c30113904416f32b9c..8852747f42dc27890fa85c1a390b659a75680371 100644 --- a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-006.xml @@ -1,4 +1,2 @@  -Body trailing 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-007.xml index a944412ed9ca6e8c07515b1301daf91f4be599e4..58dda18426ee710543727cc5914ab26273eccacc 100644 --- a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-007.xml @@ -1,4 +1,2 @@  -Body automatic 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-008.xml index 826cf6ceb894ab1f79787892ad911ae1b4e9e5a7..b48c2d8da9be88041db81bd195ffbd5432e99ce8 100644 --- a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/run.json b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..f8ded1acf6dae5ec4471da872d687269a796903b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpukazpfqa", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/source.json b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..0d1248875d7d200bb3e4a9b8378c85a0ec6522f5 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 62664, + "sha256": "7f9d34875babd03e06d9c1c19e308651a32f60128a82fc3ebe4ceb7c26b4ff8d", + "mtime_ns": 1789121644927702132 + } +] diff --git a/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/teardown.json b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-03-selected-group-move/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/candidate/Lifecycle.one index f2246dc48f1be0aac3a93e92973f6d97df0093e6..3d65719eb12efe2889a5e7758629a8118c3677bc 100644 GIT binary patch delta 349 zcmZ3`&a$ALWx^E=^YzYce||f;ZgE>*|25&E_h$wOSi0=q!IJDC#~m@t+20hmIZt+E zmDw!8Sn^AN>Fko@>MM(!TYh-n3~D;Vym`*=1&jhk!bJ=-x9WKB=VpD&n0Horvd>>V z45gF1{;m@Ez|O7Hbdbfb+vn?Xv5jgMCcFIW5K!N|J#b~1l=GZVZ`0MEOg=XG&Obd& zl~Vt6m~-{6P8QrOKY7J}FEIP-|9XK3X=)~00!uu0JuY|@xVtiCx(*Yg#?&>8ry!~; z!>3*Dd&W{0+d)UOa|l6xA$`l#G#6_?^Ymt5Wz c)1NRg>S34-^n=WFJ7z`^3{$`|b-)*fK}oPK_f_fqGrSM2gtEG9d$ z%50WkEcqqSwf=6)S*Np3U3}j^^!>5R-aO~`0!9Hwajk^`r#T&aRXyv1&2~gg_W7%a zp>%TB-&F#FhvrCFJTdd$-TdURv`a+kWS4&(0yol@#1#j<^l9?5`l4SppMUb5e|nfI zrT*tISr$wd*sL&l#eXkm%YsXjzy7ZmSgB}|asT)-*Ll6so^7QOmeX~Z7&WG@VLSy^ zTp2O_0wbdqNcHr;jEwRE$u;YWu5M>^YAlU5v6^JZ15&<1;KQ4Dr*ld+InBHA>diyr e{F&3AFfr<37!CA+%yc_uMiC5Cz%q5rj7k7+mX~}0 diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/candidate/manifest.json b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/candidate/manifest.json index 542a43c578e4c9ac7562e829f316a13ed1899c30..b5fb6180df0dbfb1dc0a0c853ffdf0831cac14d7 100644 --- a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/candidate/manifest.json +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/candidate/manifest.json @@ -5,22 +5,22 @@ "original": [ { "guid": [ - 199, - 220, - 106, - 186, 152, + 128, + 175, + 195, + 17, + 190, + 211, 76, - 232, - 72, - 177, - 255, - 217, - 123, - 93, - 179, - 135, - 200 + 152, + 1, + 231, + 122, + 112, + 7, + 10, + 54 ], "level": 1, "position": { @@ -30,22 +30,22 @@ }, { "guid": [ - 201, - 193, - 170, - 254, - 196, - 54, - 169, - 65, - 154, - 108, - 193, - 198, - 218, - 35, - 28, - 28 + 46, + 26, + 204, + 164, + 242, + 190, + 81, + 66, + 144, + 106, + 111, + 2, + 236, + 71, + 14, + 166 ], "level": 2, "position": { @@ -55,22 +55,22 @@ }, { "guid": [ - 115, - 244, - 83, - 70, - 165, - 185, - 39, - 79, - 140, + 191, + 224, + 129, + 54, + 186, 95, - 5, - 252, + 248, + 64, 174, - 129, - 183, - 255 + 137, + 121, + 46, + 144, + 88, + 88, + 161 ], "level": 3, "position": { @@ -79,28 +79,28 @@ "space": "{8A6DBA48-33BB-0681-2F02-2C73A811E8B8},1" } ], - "page_receipt": "Some(Published { revision: ExGuid { guid: [1, 23, 42, 161, 80, 203, 9, 65, 141, 37, 73, 126, 83, 54, 184, 88], n: 1 } })", + "page_receipt": "Some(Published { revision: ExGuid { guid: [114, 19, 114, 0, 153, 181, 44, 75, 191, 11, 5, 237, 1, 110, 205, 35], n: 1 } })", "phase": "04-subpage-move", "publications": 2, "reviewed": [ { "guid": [ - 199, - 220, - 106, - 186, 152, + 128, + 175, + 195, + 17, + 190, + 211, 76, - 232, - 72, - 177, - 255, - 217, - 123, - 93, - 179, - 135, - 200 + 152, + 1, + 231, + 122, + 112, + 7, + 10, + 54 ], "level": 1, "position": { @@ -110,22 +110,22 @@ }, { "guid": [ - 201, - 193, - 170, - 254, - 196, - 54, - 169, - 65, - 154, - 108, - 193, - 198, - 218, - 35, - 28, - 28 + 46, + 26, + 204, + 164, + 242, + 190, + 81, + 66, + 144, + 106, + 111, + 2, + 236, + 71, + 14, + 166 ], "level": 2, "position": { @@ -135,22 +135,22 @@ }, { "guid": [ - 115, - 244, - 83, - 70, - 165, - 185, - 39, - 79, - 140, + 191, + 224, + 129, + 54, + 186, 95, - 5, - 252, + 248, + 64, 174, - 129, - 183, - 255 + 137, + 121, + 46, + 144, + 88, + 88, + 161 ], "level": 3, "position": { @@ -159,5 +159,5 @@ "space": "{8A6DBA48-33BB-0681-2F02-2C73A811E8B8},1" } ], - "text_receipt": "Some(Published { revision: ExGuid { guid: [240, 236, 238, 203, 108, 116, 178, 66, 158, 216, 234, 236, 225, 51, 111, 153], n: 1 } })" + "text_receipt": "Some(Published { revision: ExGuid { guid: [130, 30, 229, 84, 5, 226, 119, 66, 170, 10, 33, 222, 68, 109, 13, 168], n: 1 } })" } \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/commands.jsonl b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/commands.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..d95fee0efcc85483d4b4eb444999e299b71dfcdb --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/commands.jsonl @@ -0,0 +1,3 @@ +{"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-7B82F5FD -ExpectedPages 9", "exit": 0, "stdout": "Read 1 sections and 9 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/machine.json b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..d3471abdbbb23e425284be9981570461dd78c534 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/machine.json @@ -0,0 +1 @@ +{"name": "m6-7b82f5fd", "hostname": "ONE-M6-7B82F5FD"} diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/notebook/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/notebook/Lifecycle.one index fd9993809907ef62e50d0048d6d001c8894415d9..397c078d935dd1ebb5397e346e6eba7462c5b30c 100644 GIT binary patch delta 403 zcmZ3`&a$ALMd3+MOm)wV<-Y4S23K6roOapezWk)CFLFI*8wm-y7M&2CsE{D=Ng=~B zUH86EmqP2W1J~GeCr)tD*qZGz?U}?Jzn!^rPfAVPef=u~1T0;4?_f!GkmHV+C+X*$T_*X{H5xY$Ou3zJ>`bqJ_$-X6FzOv-uAr?=_qPbMFm zeCMAYrb?;*In23wS0@W@mY=-hzZaPO^?$vQDf>F z##0d0mEqGbFfwX^IMe?!GRh0Egs#~XW3teF!*%g^YqLXJLF!isG|4>;VSQBYw2Djd ho=Yz8is?_781*pB2Kqr}x*ap42!<(OnL1`hB>-cnu(SXG delta 401 zcmZ3`&a$ALMd3+MOm)wV<-Y4S23K6roOXFxN7U^P|C)Sy+@4*U`uBvwM1=%_jPFlg znxwz?S>Zp~c*Qrhs)-X^G&t(yXExpv^j$vB`rza>zt((ZfPl3JSU;zq-{Za1dFvIs zd=-nyj;u19B^XP733RQ$+j7?FtWy`?_YZx4?6Nn{`MrQqfKgm)VZdol$6i&>x?r;% z5tDuX>R~9I-1T>rfZ(Ay5*AO)ymvQ0IV|lGQ99Y>Ux&brv?X!HK`(up{H(s{m(Ay& zeCMAYrb?;*IZT!XlLa;_OkVNdi`lZ^(&VrI>jhRSnq=HRzRY!AZ?tDyX@uo;9VSMN zscRTdffZLqOuxX$s0C6z{VyYl1)zY kZoGQ)&^UkQ^e0S=dKg9neIPU4j+s#e!xXSg9W$d60QK#*EC2ui diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..1484d5948ba65d1aa2a58dec1bb7f281acfe4c09 GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x86Qpm7O*S+u4rO^88z%@2q1~g!Qcb0(k#IK%9FNjZk zdt%)UX`nnZhAICK1RypmOaMy5#Lao#VG#BzCV{B?h#YRJ5 zsE5FjFWy zy~Q9t7gWqNTO=987lHCqbiCYw%uz5J0;3@?NJ9Wt|AX>32=L&jPrfhZcL zB)0Mq7Cx{phDZVKMv(N2hKAY$frlfjUO2Sn*qcj5f9MC5mDs=r=jo<59Pcthc7K@U>;bJx2IujQ8d?Tl2qY`<~;G7W)-h902Y@BKelY&<>1ckbDww8AaQK*QqZ&!R~+a#drgrnIq5$4j;wuFOp~E1Fz`S&f{cR2hedkJ zD{138=h;T4$3pb9Z-e9<4H$Z_FtTs~*{q - + diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-000.xml index 641d0f427604e5f658a64c761b62edad722521ca..3c7ec4792b2edeb0afb9d6f90d3b0a9d85eee4e2 100644 --- a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-000.xml @@ -1,2 +1,4 @@  - +Body child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-001.xml index 47e7dc37a7d1165b83787020b1c651c6a4795499..607394ec4f30124be54dfa5c6fef41ee55e4b37c 100644 --- a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-001.xml @@ -1,4 +1,2 @@  -Body grandchild 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-002.xml index 45c7729e4c7fa4bf41f7188e5b304d4537c9e701..213a2ed96dbaf3eee577c6dbeb660517c4ff4c98 100644 --- a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-002.xml @@ -1,4 +1,4 @@  -Offline Body parent 🦀 éBody grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-003.xml index 89f9bdf8bba3bc0ef1c2475a3ea8847817f8a835..516541a095b5e90d4f75d7a6d7383b12c6d59c32 100644 --- a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-003.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-004.xml index 95930861ec6efc5d6f67f1f9aa08305bf5872d00..13ff5e1cebc72b07bc33ea040a7b87315ea647e8 100644 --- a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-004.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-005.xml index 6046d9cef4384d45cb8821d442a9b765638dffa1..7671086359149686086f8a6796a97ff15bb8d2e1 100644 --- a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-005.xml @@ -1,4 +1,2 @@  -Body child 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-006.xml index 90449ac07241299d3bddba540c1b14e4c8f33dfc..5c2b86e7982836257eb7bb0ba84b65c435fcf4db 100644 --- a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-007.xml index 9328dbea04689335589756d508d10632a932f564..67e2f1137aa44b6eff6616593713b8f0bcd25c9b 100644 --- a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-008.xml index f232d0470aa691fd2d252c686b33c3547a487dd9..6efc5ed75b774d0c1bb765b368c21329b8d14fcb 100644 --- a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/run.json b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..ce0b235d7119f02f98002a438f93a1434fcddee8 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmphwmxgpck", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/source.json b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..8240d1f0d61e6f89a81c76e3c338450597d80788 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 66464, + "sha256": "698e65aec54d2096cb78fe19daf07002cd4cff49139cbe2a8ae515cb8a07f75d", + "mtime_ns": 1789121645336160751 + } +] diff --git a/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/teardown.json b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-04-subpage-move/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/candidate/Lifecycle.one index a3c872c9c655a1dd02b125a7ddb85c14f079febf..9948f6c44ba31a09d8ef961a8b124f1379b307fe 100644 GIT binary patch delta 359 zcmeB}!qPE?Wx^GWf?v0#W-e3pU3la`!Tjch_1_sF;Ja7C+MC-HWdMgvBHM7LBHkJwYbYZtNa&q=8& zpMHj!Q4d4$bS@UgRRW^xpPXv^yV`ep```bbrIHV)A7NoE5SggCzTPJHywe`b+x0K& zrmSQHx@Pi$T#@N9tc+rqdVnU`O+UcOsK=bEcXj$lR>n*)BbJS^USQcg<~ORBPB|~W z`Y7t6e1h5ZH*Acbz|s%d85_ZjR1QXYf!~v*`9F2m`cHY+Iqi71;%SgNjp=(h7#jo{ mTa*m0rpmjt*nOJ$oR@`Xx(_GNKNtpgaWWcU8gq)1(GCFYfR_mX delta 359 zcmeB}!qPE?Wx^GWRPp~k*Vest?>fZCl-u$k?mGhnOxBR*+`8?(N4IADg#Si5HIp4# zWtt@zw@WZGrZ5VGXH*Hka=hf&y8V&F3XPmO+k2Q84HyNsPc&#Ws^oImlGuABbWfkz z^fSzidKikQbFnb45|}#Q>x|o^B;P3x3M<%u@7X&22n%C@NS=Up^`2$N{HLl398fu! zD$fXX&Ex~QBGY478O1R508O%+et?xxkJ+l=()5q4jG16YEE{9JfRnZi)7_>${*8AY zFPk)R+u`YN*cd;7r6000Hi8+c9E|b;Edd;H+OO(dCM9`FZ{TEn3{s~teGdm?gMd8S l?W1`!Tzu9jFO<_|_bx#)V44)i1Q6WL#o#Ixd zM=sNScWwEvy69-mu=eJ*cMfxUYa`7r zO}RSRkyWNyf^oY9BV!7q0E<|L!v?WhkCksZ>YjW3{JOn|iP3;jAki(A#Uu8V@7hJ| z`*TvN%BP=UX4Jz_Je`Y$ag~7R`X{Fv|E~6(-v0N$XQ|}F=|@-?3q&SruCKSrJ@2%~ z@^<~px+yCefv%Z+AXj913@f7;rXHY4cGC~AGU_qs>Rp}wk(DtM%!p-UtQS}|kNJ)2 zrBlv}uRe;pD4$?9{S6!AC$RKGcE(09Bb9?uUf}m+Y5q^0wfW7uhepPyYvxXQ#r~540w!xnb8g-C-lJPHe!_nv zotnvxtTN3KjN2s`8B-Vq!ZWG_UpZcKY~B7yVueP|ob5eKj0TJX+b0?{8dY*RY)R}r z61u0)Z2B2yMm-G0)45m}R|!m=?{&s)Qj+f!2Za^vzxQmNeuRawKqOBn*)BbJS^UcgCPhUsq8 z9{0x(_GNKNtpgaWWcU8gq)1(GCFUU!sHn diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..4552fc1dbcfb1826349333df051bfa23f620fcf9 GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x8+Q{1Zb$Yr|kt}Xvn_g#&8#DE6u@6HmCp7_;s=>_qL zZ%?edAq|vA#xUjofdIs2g$Y1um^hj+3KygX1i*qEP$?E54Z{z6WLS%Tt*GKzt@376f9D7zn3#&hiEELE@mQ7A9_! zd~Y#`&jl4T%@#=p@kOBg6df;jAafLqhQMeD4AKyQ)&HRU4FWtkDtQ4JhN(*!RUnFn zDT%FogoO{Riy=~gyAdS)qM;#k0$akz4OcwZ9eHEEt@Ph_P+5r$JlNj6%&ocRuru#(N;G zx*iO@Cm0!FB`~mTZb@P2LG}p9L=adXY0%IBQzrv7^1lE>16YP=;s761DGLJwto{Is zG=M~bjscs_#PCgqL1mu|g9ylZTjt#ZNkTva3&Rvy2AQ2exojW}QUj`OrkYefPuKDH z-B{+d|c})J3WWTQxTxom`WDO`j&N6bt!WpQ+(SV`%BqIwKP?i;I+|+0?`~t-X$oNq( R8UmvsfGY%$i#1sJ0|37^N&Wx; literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..99f65c3c99974d0caa70d8e228bcf637a96967b7 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-797C5E28", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/hierarchy.xml index ff049c9c8cfcc579a6512cf18a203fad3f1fb18e..b16a737579d10e1c8513120a7d296a3b3ba3140e 100644 --- a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-000.xml index 56409f471881843d6412125de69260a6385043af..580181b862e21c102ea7cf71b556bd219e7ad0af 100644 --- a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-000.xml @@ -1,4 +1,4 @@  -Body child 🦀 éBody grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-001.xml index 2c1397fd535eba6b9d56e0ff3d815b6358beb5b7..b9420c6a1c022d0d66e9f991428ed13bfbb0195f 100644 --- a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-001.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-002.xml index d9a41c904e5c8b0de61054913ce252b9bbbfa67f..a082aed77aa1178dbe902a23961460561b74513e 100644 --- a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-002.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-003.xml index 138fd929e3fc8b18fcbef521a1849a4a69c66247..be94f9e238a645bd0172c78270692f861781020a 100644 --- a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-003.xml @@ -1,4 +1,2 @@  -Offline Body parent 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-004.xml index 370d826a803e0667a73b1f09ac1179562cb1f2e3..b99894439887a47a85b1d50b59e206865a9a983f 100644 --- a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-004.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 éBody child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-005.xml index 6df0b9a75d431ad7e3c4d401a6b0a89c777c1789..d99efda1e6c27e2ddb05040a7e2e609a63a71a4b 100644 --- a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-005.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-006.xml index da5ff0193b117ff66aec2ac8ce8e000cf56f39bd..51ded3ab607d4cd93806cec6a4e370e7c53b40b9 100644 --- a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-007.xml index 5d88cb6927aee56fe9206fbc673d0cb058846de6..3c080b86668054f921b98a11b78d99854e570546 100644 --- a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-008.xml index 817b4dd435498d30b4d9eba16e70e9dbc0ffe789..6a503538c391b986b2be71a8f5477209c2e82892 100644 --- a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/run.json b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..88f26c6897b4d9c840ddf515522a01c525f931c0 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpq5zb96wg", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/source.json b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..8aaea301f426779b0138393b9bc4409a4a6cbf3a --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 68104, + "sha256": "6d156380c9a4fe2be62662f6cb18fb2dad0423c4baf6c7ff7cc74a0fb6f39ec7", + "mtime_ns": 1789121645747767832 + } +] diff --git a/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/teardown.json b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-05-insert-before-subpage/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/candidate/Lifecycle.one index cba6a1d547983632bfdbcb8f010dd7237341409f..7005a9c9f8ae88518fa4056afb36d4c267b2afa5 100644 GIT binary patch delta 221 zcmeycjOD{JmI+rh5^lWRSg>`W=hElGVZN=VqO6PzU@#$~ZjM`6ru(GSj339iL%SwB zvdT0|Fm9J%WVGXB&eOX(S#Y!b^a_4PFA!(?QGUjHfyJ*P?uki+I&Htyz3s~M!qe0L z2r_C+uMuE81<_C$K7D~8qZU}hSwTj5fymU&<+}{|oc9a)v@o!wtOaRUAz*xR#$5F? h|NIv-xjj?S%ljf@LRmE&)%kW#h*~vpvkMr^L zKZ1-J(`y76Pl44}MoeEI$fyNYe^!uDUf_kH5rbjaLEqiV`&=8Zf4l}#ze3>1qKD;A i-gUXn%{p)WW#xaR>05*t^)Su;B*bWdX@Ze3qa6SylvY~+ diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/candidate/manifest.json b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/candidate/manifest.json index 7e16fb916c1d7d8906503fddf3aa2ddfac6125d8..3e75cf1c71cb7853394835e467b9c18fd371431b 100644 --- a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/candidate/manifest.json +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/candidate/manifest.json @@ -5,22 +5,22 @@ "original": [ { "guid": [ - 250, - 94, - 81, - 44, - 38, - 41, - 18, - 79, - 176, - 32, - 212, - 55, - 124, - 86, - 24, - 127 + 68, + 158, + 11, + 68, + 154, + 29, + 16, + 77, + 138, + 227, + 126, + 70, + 53, + 196, + 30, + 137 ], "level": 1, "position": { @@ -30,22 +30,22 @@ }, { "guid": [ - 212, - 192, - 147, - 247, - 2, - 22, - 36, - 69, - 191, - 7, - 210, + 168, + 186, + 220, + 11, + 33, + 242, + 222, + 73, + 186, + 14, 26, - 138, - 233, + 68, + 126, 236, - 190 + 227, + 189 ], "level": 2, "position": { @@ -55,22 +55,22 @@ }, { "guid": [ - 161, - 179, - 107, - 180, - 28, - 108, - 129, - 70, - 167, - 177, - 5, - 12, - 8, - 212, - 104, - 95 + 169, + 20, + 205, + 3, + 56, + 3, + 3, + 78, + 176, + 171, + 155, + 220, + 21, + 165, + 243, + 237 ], "level": 3, "position": { @@ -85,22 +85,22 @@ "reviewed": [ { "guid": [ - 250, - 94, - 81, - 44, - 38, - 41, - 18, - 79, - 176, - 32, - 212, - 55, - 124, - 86, - 24, - 127 + 68, + 158, + 11, + 68, + 154, + 29, + 16, + 77, + 138, + 227, + 126, + 70, + 53, + 196, + 30, + 137 ], "level": 1, "position": { @@ -110,22 +110,22 @@ }, { "guid": [ - 212, - 192, - 147, - 247, - 2, - 22, - 36, - 69, - 191, - 7, - 210, + 168, + 186, + 220, + 11, + 33, + 242, + 222, + 73, + 186, + 14, 26, - 138, - 233, + 68, + 126, 236, - 190 + 227, + 189 ], "level": 2, "position": { @@ -135,22 +135,22 @@ }, { "guid": [ - 161, - 179, - 107, - 180, - 28, - 108, - 129, - 70, - 167, - 177, - 5, - 12, - 8, - 212, - 104, - 95 + 169, + 20, + 205, + 3, + 56, + 3, + 3, + 78, + 176, + 171, + 155, + 220, + 21, + 165, + 243, + 237 ], "level": 3, "position": { @@ -159,5 +159,5 @@ "space": "{8A6DBA48-33BB-0681-2F02-2C73A811E8B8},1" } ], - "text_receipt": "Some(Published { revision: ExGuid { guid: [196, 162, 225, 119, 228, 238, 138, 70, 157, 106, 207, 59, 244, 169, 255, 34], n: 1 } })" + "text_receipt": "Some(Published { revision: ExGuid { guid: [51, 201, 152, 157, 39, 204, 254, 79, 163, 2, 70, 230, 36, 46, 107, 249], n: 1 } })" } \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/commands.jsonl b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/commands.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..46409fa65be9e207f1419ba94f5e5a78bdf61993 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/commands.jsonl @@ -0,0 +1,3 @@ +{"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-5F2EA96F -ExpectedPages 9", "exit": 0, "stdout": "Read 1 sections and 9 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/machine.json b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..e828aeec25caea961182114d7512490c50221002 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/machine.json @@ -0,0 +1 @@ +{"name": "m6-5f2ea96f", "hostname": "ONE-M6-5F2EA96F"} diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/notebook/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/notebook/Lifecycle.one index 8ca150210d1bdf4eff78e0c77821370b130d1c8b..8057df9e7e6568e6f04049f199aea3a773e9ece4 100644 GIT binary patch delta 275 zcmeycjOD{J7KJB4G1Wacmiw;T7+i5dbK2#zH~(l}YRqw5dB|-xvznX0M1=%_qyG)M z!yhnv_d49(<0F`TVd4ZAjlk^f!bkt9yUdcz&R%#d>n}Sa0~kz*sGH*!mgznzHRH!I z?$EBuj;u1x5{%m=7#Z#OnDg|mP8QrOKfQvV(F??xew3fFUSRR7he zz3}w(KZ1-J(`y76PeC+PhEHE0$fyO@a8{5}ULZ1cbNMbqKIi>HJ}nF^DQiI*RtOlM loH1AZ%s>CdOm5Fq^s;|W-y+1QhiUjHAw~mC6O4oz?Esa&a325w delta 273 zcmeycjOD{J7KJB4G1Wacmiw;T7+i5dbK2$II?HFQU6Sm*e$te8el2|$CMqNdI7~HZ z;%=Pov#&n(i;;)y#EBDJH2!~_+>$e|)@zLe!zBK4Wq)=?1~AyV>*Qw@uL`%u<1#%4 zx8ph{JF?0&OE7MiU}Uu8W3nokEU;N&dIdkD7qeBtrRhic8S4cuOI5{eXUp(gz1hh_ zQjhcT^gn`(8q;e87*B!KS4K=m0|(XAPfRP8lnQC=711H7)Cbc zaPf4SwR^8UcDQt>T!;}jRN^;}Snwmk2G728$EzPDELsawkB#1~$`k>?d|+J+kpkR}An6wk4I-&it0dghJ*P`-E>mF?SPLpEv4MaYa!YSG-erWyD~dEU zFsJ~79;9^b?$rvlTCKiw5AC^o*_=N~L!hCd2Pn7Ler1ofVn^W1 zX16)>O7@$5zFrLy#}+RF*DY|xfkxV*372ik9C!Np7jWJ&{I3cOJfJDyst*<)N22EV zo4r}$xP0+)F3tEyw?Wo`;^QnMH!Pfi8XOH6dQUR4Z~ZQA literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..60b3b751b88328da7630ebed0f9cb59a9dbdcadd --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-5F2EA96F", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/hierarchy.xml index 185019a1ab9cd23e9cf12a88956802e3b577634b..25db231084d5f5180f5a0b58b05abee1725305c2 100644 --- a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-000.xml index ca35946118950b08b9539761e4b41bf4cbfd359a..d5431fc20ca51a517ce933845929a73df410cf00 100644 --- a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-000.xml @@ -1,4 +1,2 @@  -Body automatic 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-001.xml index f93737305928e254976a6629e1898fa793f270f1..63bfade0371259891f1b6309865024c919066066 100644 --- a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-002.xml index c206d2154f0423e3e8ab0ad5b12f913dbfaa16ca..0ed15d9410a1d26127286f82236dce1bc274b513 100644 --- a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-002.xml @@ -1,4 +1,2 @@  -Body trailing 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-003.xml index bd7332627d400e0f8cc6f01b67216e1dd710083c..63527cc43a99c8f14713788c30d017ef2ba1ec2d 100644 --- a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-003.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-004.xml index c683033bab3aaa11cc4253ac8fb3ad8d67031ea3..339825a56b38aabb6947c06cf5fbf945e1a9745a 100644 --- a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-004.xml @@ -1,4 +1,4 @@  -Body child 🦀 éBody grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-005.xml index cf69328c7c5908b7fd44355ceabe557211e0489c..a2bf4210d4f2c7cda5c6a37aafed1ae5d25bd0da 100644 --- a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-005.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-006.xml index 85aa554da7b9f5aab922f37fc9c1675dbfeffe94..aa614608be1acca751ceec7325a8d333cd9c10a3 100644 --- a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-007.xml index fdd0ee6268a31303cb6f99d4f96f83c63eddc1a0..3a0bea4b5e1b06743cb1dc99c049020021065612 100644 --- a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Offline Body parent 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-008.xml index 2e34b0f3fc827fdb87fe607bc5fb25c387382031..dbb5d792579285b444786556266ae000fc7c6951 100644 --- a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/page-008.xml @@ -1,2 +1,4 @@  - +Body trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/run.json b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..ca52a42162f9918fff0ce770b8d3a144662c48f4 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp8h8axamn", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/source.json b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..679aeb87a572b2fb8f5f1abc76b1a89059699d2c --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 70512, + "sha256": "f44639cf506727cfce4607d83a7ec231ee7daa04d918fdb9ff198094bf0c11a4", + "mtime_ns": 1789121646097525529 + } +] diff --git a/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/teardown.json b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-06-promoted-level-two/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/candidate/Lifecycle.one index de29bf36f6123310faecad194e217a12ab0e6f6b..b4d74d068d14e0f0cbda21736d3b10356bacb387 100644 GIT binary patch delta 369 zcmexxfaSvhmI+rhi2Ty)D=+nmcqq3`F`=sqD5{wHN1u8qamX`fCbDDLy;G_}v zv?J3+q!{%u6ie9FA!(?Q5nX10miEE=8Fa2U6EALl%E2l5&#SVpi=+< delta 367 zcmexxfaSvhmI+rhw&=3{>Nx(wXKv=tnm4Dozi~1$fI;h&ofhRx)y^xN_6aag<>#L4 z$STt;!MI(5kz;6TLk}f^h+(fL3J3+bT9QkBQ5kXQ&xg zwoVt3V${P>JpGk4qs;U?DaL66Ork2YUG|APZMnT^)3kG!qNa;TGj<3V$F$jfUg+Ym z*x)I9#+$yx>1(8c#$c!g8k56hRWMm#v%>TW8AdN=tAb0@kIFFC3*22Se=^-R+;jT> z)pvHBt!|k9M~+crdW|gODX{v=i0KRD7`4Fa&&n~%3mAR!CyI5>7VPt?$#PZ;=N&1H){vZ}=1#MKFy4OZh1d*(cAIp;TJSxo8*%k%})MWh)!1iqK6 z=84B7yRSLfa${3JZ~OE$(m-P{)B=skVb0ULI$3bD{PYSLMlTR&`cWCidI83&@aBsJ z-(8p9s{C^G_w2vZ|Hv_FOs|n;JO$BE89sf19HSOk!&x~-d4Y4srXT7JEAdZ<7MZwhn@Wcr&8sf*cMQph9$#M3FSf$5p?60^P8Ni@*%1(=NrfTOEPWuFy zr}A@8c4U=lmSEg2!N_PME}(Pdj`_*W8s1a5HuL0iu8H2BBEh(TQ9vuQ<82k2na9Ls z&ok5vD_f_FNHOYRD4zaGno(wYo)qIW0VYwE*)IFUownTGv}xM8OHtEBq!~K|jAPpD zJ}-1}SZwf=J>yMZ;`BArKw~h}0*%RGvMQJ?uvuYxg$$z?vsJ;R=|^Q4>jmyEmOq(p z8}2#%|LQwC&Q>=}|0Bn!F}+5X@f28nWyJIaa*SGF^=IW6(=+_)3?Y2oq=IC*f)F%j3SuEfTjEt7?l8iVyqhg diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..1cfa59c6c9bc17b91c13b8379523a70c9ea85438 GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x9P22L)nJYVj;;)KmcO1!UUi+OdL%Zg$q&x0$@Q7s1ys324N5Y(hwC8H3x(s!Z4Ea zt4ySF-ZhU|y}inXFLy5ChDyv1onQMzXtMYAnykkOwS1v4_1NewnhW`nF*Y@$Vxu82 z)I;FNm+xOUR)sAQfO>=@hhb_1ql(Mt!++|w9(P{0D@1z2`l?t)pfpQDLjyMPp&kUI z?jH?-5fK8&b*A?&y zy~Q9t7gWqNTO=987lHCqbiCYw%uz5J0;3@?NJ9Wt|AX>32=L&jPrfhZcL zB)0Mq7Cx{phDZVKMv(N2hK7#A79V}(w|Q=Q^TX94NTmf-R$>DO}UI^Jc3$SaC8 zG%% - + diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-000.xml index 3553c70f17c69fce246d097b504465d5963eb45b..de7b550bbc1eab7a37e800fe0587cd13dc044f19 100644 --- a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-000.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-001.xml index 2a7c71e6b1f9c495ba5e3cc414dd13b3ab0170f4..7ac82faccebbc3fa18eda06d9fa0ab81984e9836 100644 --- a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-002.xml index 289cd9a0fcd89bd53e213787caea05bcbdf47350..5c2a2419836b5aee7fb76573fc5d3e3d16d52ba7 100644 --- a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-002.xml @@ -1,4 +1,4 @@  -Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-003.xml index af1c9da6f6089d17289d846c3a8add2093994abe..5f94215aaea2b204d2956e4db3c71c59f90721ab 100644 --- a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-003.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-004.xml index e47d053d03a5bec82284117e0b5569130210aa73..6e579bd097b5afbe4bfb602a2313af0ab544c251 100644 --- a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-004.xml @@ -1,2 +1,4 @@  - +Body child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-005.xml index e04dc2d8efee949ac19d15797a78471585a119b1..b0f5a91e533685354370fb34f84d7f8c7ce7679a 100644 --- a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-005.xml @@ -1,4 +1,2 @@  -Body child 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-006.xml index 4edbbb4144a12903a51120c8309eb2d601f6aaaf..7a1a3877dd881b9e61cc4ee095cb1e19c2880f40 100644 --- a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-007.xml index 1e27f5f82f040e40fa5cd3c5ee7985a2a9d2fa38..1ef1192019dead37d2089bc80453d65958670baa 100644 --- a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-008.xml index cbe74728ae8462ad4ac4a1f837792ae3b0db959f..a27dc47f683302d25e10bb9fbf207fda0e7807f0 100644 --- a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/run.json b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..c8da7e03ed189bc94d7db311495113562425c85d --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpmryvpdbi", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/source.json b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..e21398a3bc4abef93fca4920bfccc96e7a6ae5ca --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 73840, + "sha256": "aade5170cde10160d9f3840a8d0bad944c5bbd285b6efb79831ebd17a4cb5b72", + "mtime_ns": 1789121646529054140 + } +] diff --git a/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/teardown.json b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-07-promoted-root/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/candidate/Lifecycle.one index 03799d8fb1b754c9d8fc2abf2ba8d241eeed9c0e..9b78b2086b040a5b732fed6ed531cc85bc0ee274 100644 GIT binary patch delta 396 zcmeA;&(d+8Wx^GWD6uJVclYl0Z9iWAgZKNancR#FVDRiX4^zqguTB$6cQr>ou-iA; zkyWNyf^oY9BcqRuK-x0D2N~>}e7l~0e8$yoffQdtPIbx)|viBfl&{`jOkj6j0PA+OwUqe+$12kIeO~U z<0O;(sLYrNX53X~tQQcU!5TfO_LSS~^mWq<9t0#z&rxCg1eQ)zWo!g9o~km+3tX*_ zlX(4G#A&|SN}~-D<+nlVG^X3AF*XR)Z2!End8VezoWhSTn?vj;Oh2OrbOnaNTPFd>=vKw z$STt;!MI(5kyERZ>8Fsc3)PWuA{`*A;6TCd!>X=#A9(LL&xsr5-QV=C;`pIPzy9yX1bg*V*s;t z!KLYi%8Z#{#$9E`dI67{y%!4G-n+H4uHD7{bH(K8IVy~wz|x7TjE!K%Q&mQJfj_b3 zRgrB;?wdkOYgvEkScBAQOt(>EY!KKOrLHmZ6}?k5Ui*Elo;blpWA(x?d0FLG-b>G<)Ghcwb2cv{0~kCz&cjr4|Etr4(p}Aw z5A60$c4U=lmSEg2!N}+%BapVt??DFpCf}~7-=9gcDed20BFp%JQJ`)z$C?u3=f17s ziOw%8FE7|$BF~t?C=k%_Kw;ZrZ>I%o94o`KtaYZpQDD@=Fk`xwBBKF@5!16288->Y zZH}Hgb$PVw1fMx9u}tw!({+>>I|P<+?0Hwi;^5gb{q5iPr?+xXKcWOQ7eg)3T$$-| z%8UWbd3sl;7b-Jmf*E&}8S4eaXRt<3sy*d4JAK{sf(HQ!({of9KY^taRT&$>jHjxM z@&Z@u<0M}H7IB(yw$f;WMEPxyI*sWzYK#p6HQPV0Y@VsMz1d^lk2;y!54Q~_DkKO*@+G#$ z9CvY^bSOkjY@L$w#0f4Mff4qH9_`Zf+HBN$^Yww+|GbP0U~uPrhm5-OI`6q|Z>PFd z>=vKw$STt;!MI(5kyERZ>8Fsc3)PWuA{`*A;6TCd!>X=#A9(LL&xsr5-QV=C;`pIPzy9yX1bg* zV*s;t!KLYi%8Z#{#$9E`dI67{y%!4G-n+H4uHD7{bH(K8IVy~wz|x7TjE!K%Q&mQJ zfj_b3RgrB;?wdkOYgvEkScBAQOt(>EY!KKOrL=@hhb_1qY8_ZbWu^Tq~CT4J88xCu1rRtG)qE512*xY9t5NA z9}R&K5dz3{ruQ!6ro*C#x?%Yql)*1gWeNcCnSfXjh(Tf?oZdOh7sLmNgQ{AXxJ~lC z#UMTxRLnG6BpJjPf$~#yyxf7zQ7{?;qaiRzLjYF)gYq{B@ZhNA1!NeeE@4!GC>o|D zw(=1cKCmu^NCECfko1d&hO-jE$37q5=(h1YTb%!y7+X+Ti46#BUnzdm@h&4oUQwi> zfk6cr^dP0}PO%L#i$ z=sm&62rGesWphgkLl3e?Kqi8~`bdL@2ADb-pppLt7#hGbL=y-2ph{U77-01WP^1AQ z3UmzEbS8#xG7KvFWEez1&f7BY9!L@b8dw;n$TG<61j=OtX^f zdb=&i4%!CNCj-Pj44DjR45(SmUNfli?RAK0wBgg3%Bd O4FOysfLyG>${zql*ES~r literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..c98c4b44f4fc61edccacb0d538eb46c6fea2c72b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-89B4B25F", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/hierarchy.xml index a5f391d3c28e56e3b14f485f63ce38f1cfbd9fd2..b66ad0fe985472ffd678726703bf1e7df802a645 100644 --- a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-000.xml index 22e7ee2a0615a449b452f4f99a9dbfce701fb25c..fe741b6200014bc1dd88da1a17d4d01fe3bf6144 100644 --- a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-000.xml @@ -1,2 +1,4 @@  - +Body grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-001.xml index 4db172a21b1890fef631c57beae1ab99ab83cb13..2fdd5ea44b3e08f3354823b1ca4d188e8aba28d8 100644 --- a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Body child 🦀 éOffline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-002.xml index 823b251e26e2cb4da7e5b70c94eb54648611dda8..ed411d94ae090acfccc3b9cea01d9a92f80b91f8 100644 --- a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-002.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-003.xml index 388737348575b51f6900f2f02ac2c9b953017ec0..e40bd53067011955579069e27613fb8d6a8fa7d6 100644 --- a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-003.xml @@ -1,4 +1,2 @@  -Body grandchild 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-004.xml index 2f3602eabda6c615ae44c05bba7d06494ca14132..3aafcb69a7e4d7b17100b79ae5037025fd58ab26 100644 --- a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-004.xml @@ -1,4 +1,4 @@  -Offline Body parent 🦀 éBody child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-005.xml index 4bb6531fd27a0faff6f2af3cf1f3525be42bfb45..caeedf22e54af8c879f63dfbcd9820a708be3d6a 100644 --- a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-005.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-006.xml index e926ab1fdc36a63521b452336ed7a88865e4556b..9b2525859a1861f282318004efde4607926b6d72 100644 --- a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 éBody trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-007.xml index 22880c399a2281975b80e0e5a12e21ae0fbd8429..816e813b24804d84730440b9b4a249ee8d8e64ea 100644 --- a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-008.xml index c4ba10d560dc86dbabe4a084ffcfe4c8a4f2bb94..40ef5463210b9678b3d4a141aa345b5dee1a76e5 100644 --- a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/run.json b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..fbee38a57b255701857487786f4d06e2330b284d --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp89aydbgy", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/source.json b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..af4ac2241e03b61eca9132fec2e7c0c401857f67 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 75656, + "sha256": "69eab3043565feb74c1242cd4b2407e83990feeec43c959c5aea61c9ea156337", + "mtime_ns": 1789121646959281959 + } +] diff --git a/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/teardown.json b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-08-collapsed-group-move/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/group-single-page/candidate/Lifecycle.one index 68b9eda5d841c574768463be8ae8c995e9ef4865..34182c0486a6fcbe37a91eeb04d16bf7098160b4 100644 GIT binary patch delta 279 zcmbR6g?R!HUD4S1_h$HK!{6=;O7rS5YV}(Gu@Y}6b}Pw;^wm;_OThW(ckiq3=nXA&&Dk~9m;%KBah|AOz2xY*^yOd zvjpRmPXboj8y_?-GV!14d^BqAvWAnJ_k3<(6wo>1y=u0=VYkNpr;SaH9I>73^HmQ+ z>Ey1jbC|3PCJR(XOm6t5#cW-0Y4X}{@&eoLuc&$zQ{maWu6#$We@@xtJKqk0B^Q3r z1k=1f>II(UF>eqn+2h@_lqD#h+3xk^IX_ki2uLnG{5?y^f1-*1>?x(06DEiJ)WbBc Z>#Ksoh6xN4DtIL>?dS|4r-S6D08+LTl5_R3lbAGH4C>MUaHBW4k!|eDc$sV7|#3qOQ d)WbBc>#Ksoh6xN4DtgeGJM(u?DBToBM{AcD&v|Aj)Ui+B=0R~9I-1T)1lXbylfy#)<4d1kwtqU$qUi(d6VB7r_Rj*_@Y4PqsGynB|i1jRGky`DVh#|i-f$%Ti%X9@XFH1VH3r8ING g04WUPy1v>00Pzl(`Tzg` diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/group-single-page/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..60dc5a020e9f10196635504512c5cd755db4aafd GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x86Z&N9+ynfz!N}b^T*62OP3~0dq?koZ6iC;aJUJ#%7 z_Qbjy(m;7+3{(Ce2taIBm;jW9iK7Xla6xK704&G>m0|(XAPfRP8lnQC=711H7)EXr z*!tj0&P1m!CA~g#*NT=@hhb_1qe|)nkH4$Gy1BJv9MQ{l%T;0oO0y(1G++}S>OnB- z{?QN^5g~wFXL|24ZaOS_s2i5=K^gq=RHgtBp9zQsffytP!s(r}d_jDWIH;Jmm3h@xRi zVk;kE;REYph!o&%1WCVWXi$}xv7Pr&#&O*{54{shH$4QEmDoUlH=9s634J{chPVaQ}iV@PF4W~c<>93V@NA)g@+NJDymKne(u;|HV@6bH+$CoJXo zD(BLt*uz@PKPw+3jxAmu*o$`Ihy%y#qNO~Cz5RDA4vsP5Y<5%y1|HB9aMcHkkICt! zo{qoY`^>Yyc>G<%ge@RzK=E;wksB7yKn;!t4812AS-60*tXSiwMw8(eC_X^OkAl$< P7!3hjA%I-0!O9;16mCGj literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..d45063a6ae5cc0da3d4424b912e465c8a5eaef08 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-133773F4", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/hierarchy.xml index 31ab6ea3516975695579433603f358f0b113c7de..f35b6f71559fa991cc60f4f0430f6db3a346038b 100644 --- a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-000.xml index 8c56e657acab1e2645db0b7db0f439938d35edb5..c3c8e053c8d137c108587f3c359178b9316eddaf 100644 --- a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-000.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-001.xml index 07d1abde47dcb058d2b8ce2f5d88295b0af9025f..6f4e5a299bc64b8feb8c59a20089f72af3fa7a6e 100644 --- a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-002.xml index 75ce5c196b2c8f107467dac1b98b5412e5eb49fc..9e30700be89cb4072bad400d34b295878b8e614a 100644 --- a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-002.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-003.xml index e1cdc9832cc62970e87e8f1e8e17d0201ea058fd..75aeccab92f9f16c58ad7fc6a9689928c31014d2 100644 --- a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-003.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-004.xml index f3e2f07d0b4998eb6538beb4e8fe7452c77199ce..730507e254e57ffb8c4be5762e94d9985fd3c56b 100644 --- a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-004.xml @@ -1,4 +1,2 @@  -Body grandchild 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-005.xml index 7faf3438e5bfe2cd65b5186b3f2d691fa5621240..6c0fb643464caf8fd7c0cd5c01f5f8d66dbdb6e4 100644 --- a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-005.xml @@ -1,4 +1,4 @@  -Offline Body parent 🦀 éBody grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-006.xml index bc6ed999c299b9cf092a1ef69de64ba88798ead7..e8d89cca384ffc3b10e29c3e621403b3cdae96bb 100644 --- a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-006.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-007.xml index 0ee2447c4511ff99381a18061d260d4602a8321c..93c070c7287d0e84bce328c336ac55311aae24db 100644 --- a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-007.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-008.xml index fd65d743951471d17467b4e8438893f7d4ebff7a..a016bf295ca2f11b89d523c03b4fa80eceaec408 100644 --- a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/run.json b/corpus/page-lifecycle/offline-edits/group-single-page/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..8d1c9e93ea342fcd78d6458c40b65a213534d86e --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp2iu0f00f", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/group-single-page/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/group-single-page/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/source.json b/corpus/page-lifecycle/offline-edits/group-single-page/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..3a1e9c4d96bde8fcefc7e18d21c3a1bec3afe7df --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 64016, + "sha256": "8f1d397cf23969ee336661f188879f1d418741878b506f6682a6f86d238c5c33", + "mtime_ns": 1789121647383619936 + } +] diff --git a/corpus/page-lifecycle/offline-edits/group-single-page/cold/teardown.json b/corpus/page-lifecycle/offline-edits/group-single-page/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/group-single-page/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/candidate/Lifecycle.one index 2b6fd03c045ea6a2c4f665e41b995cd199b10e3b..dd8d8dfb990a896b60129574be3707e3cf112930 100644 GIT binary patch delta 362 zcmZ2*jd{T}<_T9cvQ=lg&NP>H-=2}gv7lBs}=kjM0YV)=}x-r?2 zRc5mULa_eZ@v{~fw0Y(x1i1Qs2bSj({+`VwVZ)dX(BhZ-1 z1@0n~|2z@H&@y?}GrP$NPjdv8X1gfuHuU#cm0)|5LpgHSe&(f z{8qqL{_M#y&-5@=&U%)^oS}DhvfyU<$r{hS!0giJ^#W$$sYh7?)0~$u75`S~VA?i$ z%}b5RIxkK^6jz2%4tS{rX4k%y7clutkz}S mmxqQ2w`5y@y|N%$VsgVPAxz_EJ(HQd@0AFqQ6Pzbuap2WA)xI5 delta 360 zcmZ2*jd{T}<_T9cDrdT~={)@6v?45Fu9M)|_?HY2knLu2ZsW{X&Yd459_ikB<2>1s zRc5mU)4SzxomWR2%u%w`3bCYL_17wG>Q?eTw)kNcF=zoo3a zjog#hywsSi^Wqd(ZDqvdfR|cewY4wh1*UavU$OMx8IS4dn;%-A{!j;0yFx@Gb>6D* rFOE*L49|2LsNS0n_Q-;0iOCJGgfLB?^-N~+zE>icMu8;$y;1@Igs-oG diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/candidate/manifest.json b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/candidate/manifest.json index ba631c1c9c546f93850c5fec398ed5e2bee4f114..d1ef731d1a178f39624bd2f468da296ba6859349 100644 --- a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/candidate/manifest.json +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/candidate/manifest.json @@ -5,55 +5,55 @@ "original": [ { "guid": [ - 51, - 149, - 71, - 130, + 134, + 63, + 62, + 53, + 19, + 11, + 2, + 77, + 181, + 135, 35, - 40, - 136, - 73, - 174, - 150, - 88, - 198, - 236, - 138, - 233, - 46 + 119, + 101, + 81, + 244, + 16 ], "level": 3, "position": "Keep", "space": "{D7B1788B-A971-08DE-3324-F4DF82A3B46E},1" } ], - "page_receipt": "Some(Published { revision: ExGuid { guid: [251, 177, 210, 219, 141, 235, 29, 72, 144, 228, 193, 87, 108, 105, 221, 185], n: 1 } })", + "page_receipt": "Some(Published { revision: ExGuid { guid: [47, 88, 207, 136, 144, 44, 120, 66, 160, 221, 208, 207, 142, 185, 131, 44], n: 1 } })", "phase": "01-demoted-parent", "publications": 2, "reviewed": [ { "guid": [ - 51, - 149, - 71, - 130, + 134, + 63, + 62, + 53, + 19, + 11, + 2, + 77, + 181, + 135, 35, - 40, - 136, - 73, - 174, - 150, - 88, - 198, - 236, - 138, - 233, - 46 + 119, + 101, + 81, + 244, + 16 ], "level": 3, "position": "Keep", "space": "{D7B1788B-A971-08DE-3324-F4DF82A3B46E},1" } ], - "text_receipt": "Some(Published { revision: ExGuid { guid: [40, 101, 158, 170, 87, 244, 65, 66, 154, 49, 204, 137, 48, 37, 222, 151], n: 1 } })" + "text_receipt": "Some(Published { revision: ExGuid { guid: [75, 127, 20, 153, 134, 54, 125, 68, 174, 244, 225, 49, 193, 180, 107, 56], n: 1 } })" } \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/commands.jsonl b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/commands.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..820d5f33953e33f0e4c708237673326ae7992c5f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/commands.jsonl @@ -0,0 +1,3 @@ +{"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-B88A1AEC -ExpectedPages 9", "exit": 0, "stdout": "Read 1 sections and 9 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/machine.json b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..947ca5763651dd6c25747777ed0a3fa017e77dfe --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/machine.json @@ -0,0 +1 @@ +{"name": "m6-b88a1aec", "hostname": "ONE-M6-B88A1AEC"} diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/notebook/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/notebook/Lifecycle.one index 11e6db8793659abc789a12f4dce3b80fb1c3c898..8d6daa996ecd1f3651e16888f89fd5453d52d048 100644 GIT binary patch delta 416 zcmZ2*jd{T}W`!p~G1Wacmiw;T7+i5dbK2$SlJ2Y8j=ghe*XeceoAK3iqC$eeK2@=I z|32Mvnbvaab)aCO_QVM;8hr{MeV&D1^yq7Fci%Eiul6+q1bmWNu%eM+z31|06KeCe zKDsg4kyU211ml~B0%p95#yz219lPegvU2Na+q7Ba@c~8={fP4&6Lcz^7TmpXzHeu< z4kOT*$p!8rlm9#s!_YE$)-$`w2~TqbmS(#s?KbrHSe0OVlS4Uj*W^1-3k3KK-^yOQ z&g$6_{rpzIR{reCG0*fcRnB^r!6;%~pZ-t>RJ%e% wBX!=Y@Gp)|vkcF48mQiz4)(}`Xo<-UuY@p7pY=>;^1fFhm_~sl{=HHH03MOb_W%F@ diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..9740e2a067d862954679b1dfa93055544c1f7619 GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x9XQx$vn@6#=pX)U*22MQKyGoS(cyR!tOCw}!@dO>{R z+Y{?{z6WLS%Tt*GKzt@376f9D7zn3#&hiEELE@mQ7A9_! zd~Y#`&jl4T%@#=p@kOBg6df;jAafLqhQMeD4AKyQ)&HRU4FWtkDtQ4JhN(*!RUnFn zDT%FogoO{Riy=~gyAdS)qM;!qZQ`jbu|Zz_N;~p`&wbMbm6h0l!hF5%n~rxGA@YhM z4Gjz`z@P^y?TMMf?^S%rXUFV%@7ci%CTj>ZH1q)Fg19B;t?6FxyD7u$lTU{ILXcKn z4~E_ojEt}n7+5y9q%ia#djw=62&|7ZXlQ_`lK~p}Ux1+jEJHMLfDfvag@FN9e*i@q zK%zj$fK6v&_$I@kvQLIV1mwIe^X`EpA)tYUVTvq+%ub+OHjoCX0o69oCEZuG9ed}{ zuG8z_H{+`(NS_Q4`!HlOq%ov2Br{Y3aSo8B$B@sE2c#jrKOhAJ$ngWx35tW$EdNt; z*_}NnuQ1P4ua6W1iDQeG2Y%kT;=t$T)`eWco$m8CXjyZ#DrTty0}p5lxaxz&$84eK zDRUpDdCa#i=}?UPupeX%C_c_Ia>K$IsKL>Iq4y*s3l~t96>HqoXfpf)#RtgvQ7{?; PqalDR1dxk0Sos40DM3b& literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..029f15dee294d37daae6d14326c5503d23bc2cf6 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-B88A1AEC", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/hierarchy.xml index 931b2160f5cbd5d36844575f84913826a88bf7d1..cdc72e381f3579853fe45cd7713ed3868abb3479 100644 --- a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-000.xml index 2c30288598dea46d0b8323ad293cbe6438e665dc..fb08253f054f6d0e25dc9acf606dcf2c4e497543 100644 --- a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-000.xml @@ -1,4 +1,2 @@  -Body child 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-001.xml index 7d5246520edd9f8682f15619d1726eec091621ee..36041a336f5cd8d9296174f43d14dd3a18600cf0 100644 --- a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-001.xml @@ -1,2 +1,4 @@  - +Body grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-002.xml index 7c74a10fa0c57c7559770738758ffc5447ac42e5..2660ded2eca5b1d595de4cd4fe446967b864693a 100644 --- a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-002.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-003.xml index 9ed998ad53a336229e907e219959cee82ae680d9..416eb80fd4c972698fd063d0fe60c66d4da6e8f9 100644 --- a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-003.xml @@ -1,4 +1,2 @@  -Body grandchild 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-004.xml index 334ab5c5228d33f8633a510696c4e89126b9ce5e..01d64ed29cccce49bc76385c031a94774e7e7efb 100644 --- a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-004.xml @@ -1,4 +1,2 @@  -Offline Body parent 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-005.xml index dd27e940f1ba049701745dc23b63a9185598d541..b2abfb252315cf937c35c0ebb2ef40efa06cf256 100644 --- a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-005.xml @@ -1,2 +1,4 @@  - +Body child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-006.xml index aab84fd136b7e8e66ffa768e9e568988ef53ba9a..422eac44fe8bb0d730b087c3b624afd6a2cf8c0f 100644 --- a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-007.xml index 175c837b65e99e0ad08d95b7dcc12384ad4912ac..dcd8a8c1d883258fecb71732058ed59656886184 100644 --- a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-008.xml index 5110cb0954fb17374a767d57adf8f802a4815d6f..ddf1a6da0ae2346aa99269dbbf747b7b71508a8e 100644 --- a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/run.json b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..776dda02130e9bbd0723d5d150583547acf2528d --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpzu_h46n7", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/source.json b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..05d111f61afe35d542e3c4cfb21d52147fe51ee9 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 60192, + "sha256": "edfc61dcb2e55d6bf3afccc72e523a1fa9d253fa5c5b947f36cbb152b9446fdf", + "mtime_ns": 1789121640873938491 + } +] diff --git a/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/teardown.json b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-01-demoted-parent/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/candidate/Lifecycle.one index 4330b9e3a2bab05a122fea306ad64fb4cfb8f760..ed662cde10fd99f0522c007960db495c28580a78 100644 GIT binary patch delta 373 zcmccdlKI9<<_T9c-gg~ec4d9O^Tv91z62K4?{66(;G~CF>S@g^@A*-!ul_y1xOK84 ztITEz#w9NW7S}rLa&bA~(IH=BbV%Fg#pW}wG?)ZhYtLA6^GdolU%x3YWTU-yGs{~K zMu7>hnWwzluHwJ%DZ5_0zxwjYG4J#+446FYodJga$+zCE5-5L|Hz`^~&2Ogew3SO< zmh?}a^1eWzP4&r99_<9TwR_flwA1aqIa%a`9;V7$@9ZW|_@Kv}sdshq!4H{WTK8kU zfJ&(IFd;vw9F6~ delta 373 zcmccdlKI9<<_T9ce!C^r+}v&9vF2^K|7-hS>2Dbz!20?`qxWlB99mW1CS25vF`w+n zDzjOFamh=82KK+%{7Y25rdH`ZNmRX_yZOv34JLs)Mtj*E=4Ot&nV+-&{(YfxGs{~K zMgj3j?MXAUvt4(G%b$68yTE&L%sV{{118UUXMmx9@~wBP1RP~%EbNF9aoIcZ9_!N& zu9}mlye|+4nAYpK%IAsaq@#LMFBV+1pDgl04^!o>cXpE}e9&VyE4VcI;D<~wt^2WF zVA)*}t;j_R9!txPOWJcJr%c}S@e^2bDBanHSzWxnWP8X5J)0Mm$BU+e(?sIDCV diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/candidate/manifest.json b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/candidate/manifest.json index a59ec49aed2c95693afdac4bf47b7eaf08fc35d9..86ef4db19db43554c94ac6c05793df4b3050a758 100644 --- a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/candidate/manifest.json +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/candidate/manifest.json @@ -5,55 +5,55 @@ "original": [ { "guid": [ - 74, - 104, - 251, - 59, - 244, - 179, - 135, - 76, - 167, - 255, - 40, - 223, - 194, - 18, - 10, - 190 + 32, + 235, + 90, + 209, + 129, + 195, + 33, + 65, + 173, + 207, + 182, + 84, + 31, + 81, + 88, + 138 ], "level": 3, "position": "Keep", "space": "{D7B1788B-A971-08DE-3324-F4DF82A3B46E},1" } ], - "page_receipt": "Some(Published { revision: ExGuid { guid: [23, 146, 135, 98, 153, 107, 107, 69, 187, 87, 31, 204, 225, 219, 112, 75], n: 1 } })", + "page_receipt": "Some(Published { revision: ExGuid { guid: [144, 235, 3, 148, 238, 183, 36, 79, 190, 229, 7, 46, 95, 79, 39, 167], n: 1 } })", "phase": "02-promoted-parent", "publications": 2, "reviewed": [ { "guid": [ - 74, - 104, - 251, - 59, - 244, - 179, - 135, - 76, - 167, - 255, - 40, - 223, - 194, - 18, - 10, - 190 + 32, + 235, + 90, + 209, + 129, + 195, + 33, + 65, + 173, + 207, + 182, + 84, + 31, + 81, + 88, + 138 ], "level": 3, "position": "Keep", "space": "{D7B1788B-A971-08DE-3324-F4DF82A3B46E},1" } ], - "text_receipt": "Some(Published { revision: ExGuid { guid: [94, 246, 254, 201, 85, 191, 7, 77, 186, 8, 10, 23, 229, 199, 73, 189], n: 1 } })" + "text_receipt": "Some(Published { revision: ExGuid { guid: [121, 19, 89, 2, 36, 85, 121, 75, 181, 191, 91, 180, 181, 186, 142, 127], n: 1 } })" } \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/commands.jsonl b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/commands.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..e16fc0e235fa008fa70487c9fd783d89cf0c8e1c --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/commands.jsonl @@ -0,0 +1,3 @@ +{"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-6E03355E -ExpectedPages 9", "exit": 0, "stdout": "Read 1 sections and 9 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/machine.json b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..05c92ca67edd8a7e1680dc6ff407afcd46f3f096 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/machine.json @@ -0,0 +1 @@ +{"name": "m6-6e03355e", "hostname": "ONE-M6-6E03355E"} diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/notebook/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/notebook/Lifecycle.one index b85adfac4e8b9abba97bb1574bb7671b56927d50..baa52b52e739ae7632b1b863b60add172ac44467 100644 GIT binary patch delta 427 zcmccdlKI98lywnHZL}xd8NT5&{})OlABl3wfXu@c_AC^ zwVPSqdN2x1c+EWJ-F6lKeNWl-;{DZ^PmXz~hhf0vS?>%m^iRI^Zk0g!!@Nn+B5Hm! zb*HUd^0K6V@|5=l0&S{Kj`CjhL&{ZA~P;_5g<_EWmfZNM5lowYmKT`x=##0J>NUTe6F5G9 w`~3PDP?5&up3e;emBNusDxsC$TlYtA*}AK*ezMFLJxn8`z8GK{G3$#R066!|EC2ui delta 427 zcmccdlKI9 zg|C?Hywarg*sCeCxF$|;(QvYRC7&oA>%Y_DR_c;2ks0q9Ai(SsYqb-zHqt zj4_|=$SSj0f^o@9fd=-!+5AgXy{1;_JV{i&p1b+XD-9-rI!1fh9p+|^yP2P}|NecU zax=?Y4@Lp;N$p89v$I`yhs&RNc)P%Ra?CqD3o( z@gD2b53ZV%r@Su^2$0Q!f@=w4W^UK@U^qt#@{lCw$OjHY>O^`QV34 zFs=KsUSQc>5v|BY3LZ<#j!W8eB&ST?^YIf{a^t5)Fm3u-USP#H`JQ8KT&`=rome8g vIQtAxk;den&kX``-~OEp-Ouj3i-Sx2>2c4!lV!f>VHz3r#Q@WYSzqh`8%D?p diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..57258be81f3959ca36a8d3359abd1a337ebba65a GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x9n`hJt=!Trg;eP`ZF>P%I1V?YD;cV`JmPyFh+^n&=r zw;)KmcO1!UUi+OdL%Zg$q&x0$@Q7s1ys324N5Y(hwC8H3x(s!Z0#3 zY|*VNfu_|nd0MsKKISf-97*%R7{#m}n!q=xm!FZ49>YH|qKxvkQh6ZfnLp=ya z-9H)vBO(Nl>rC%m#!ZJs4|T)xJt%`;p2`#e;xhrUAP|GZKsdc~mM@485(ibaFmapY zdy7GQE~uDkwn#FFF9PMK=y5@kdH7SRxJr*!*%wT4@tgRu?(9i>vTeEScsgPfR-=wI-Lub39vq4&Q zJs5gVFfzhQU|`wYlETn~>=BTOAh15tprHY#P6lY?e*uODunf_}0Y0cw76t}b{Q(qd zfQmM-FieqUkl882Ad(HF_W@~8ZKAo%RBE5n1ea+O-p+ode9RQ&Y#AW-VaQ}iV@PF4 zW~c<>93V@NA)g@+NJDyeKne(es==;iV)!P*paL=zq<_o2dtg}x2ITkw$$;V@I9{aT z!doYw?JWMM<_Gwm1c_sdmjxdl;)(;_nN=(e`fuH~tbgYm?QOS56&QFR8$m|F;zQPE z?NXhfAji4wOZ=l$!^=T(js^_9R~T8ifNWM!+?-_OhJ`t - + diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-000.xml index 6a2cf37f0dc995fddf3dce1d21ced07d04a93728..ecfdc3416cbbd6b2c4a2e2047ffb48c87118dd26 100644 --- a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-000.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-001.xml index fd57a53172293dfd132489b7401f86489b08b312..4c7064336984b01c04d04822d01a723f5c813044 100644 --- a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-002.xml index 85e373ea826cbf125e1847169b6010895710a4f6..13a95614bb99347d40c1a6bf3668db4ac9098e56 100644 --- a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-002.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-003.xml index 17d603bc2b1b5461c65ccb6e7fc223b87cc4fbd1..bdce7a8c2f7bcc54764b04b292f3add5773547c9 100644 --- a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-003.xml @@ -1,4 +1,2 @@  -Offline Body parent 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-004.xml index 346a62c243cefa74d6955bd65f1aa2e4964de3da..0b1d03dcf5411d6e85b531c6955c0e33fc73a2cf 100644 --- a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-004.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-005.xml index f74d51e74298a6798d4ced53cb226e9239278691..6772566e113aa0880776743f15e6c656000c232c 100644 --- a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-005.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-006.xml index 027a4073fd43d4094649fe264f8a421a0fad7fda..18d60f826724cfc3f5a0984a3431e818b4bf0068 100644 --- a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-006.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-007.xml index 4d73c1582b215bc94398d4f6980ecb2fbf24a7df..bf92465c772547b93014f415f1ad8bb66930a083 100644 --- a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Body child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-008.xml index d8097dbaf961081b207a7e6244ef62537eee20fc..b9fabd6dd3abbdd10c1919b970695c5103f641c4 100644 --- a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/page-008.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/run.json b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..57a28bf3fc85833daf91470a6259801400d55a1f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp5vi4lp1k", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/source.json b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..affe4743f3cebe62b5d2c6b4f801871a29f0ecbd --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 62680, + "sha256": "fc93aa64ff966e2f5557bac1e38c0768df378ee5865c0e527d672c6f31c76761", + "mtime_ns": 1789121641216798594 + } +] diff --git a/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/teardown.json b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-02-promoted-parent/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/candidate/Lifecycle.one index b1b6616758663f23e9fb4116d4805be487ed04db..05515ba8f0616599798a4445c4f601e588bd1556 100644 GIT binary patch delta 330 zcmeD9#N6?TdBPP9$s_GuMtV-po1cidRS2!@e9r&@vTo&?uL8HKt0p_L z%50Wkyz*Y)?yeixPPFN}O_^05VZY+1;O0Lc4loLw`)V?8X02Xck{O7{~Mgf17;7P_ipLBnT3FM60N zxjx%XKJZ14*{tBwGBSnRi^Z0^Sv!yq}JB8|y=zBdSnDhD~A={EP9qmg7fZ;N8@WS<{;m_~N} LFu*k8)DJrVEMAyJ diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/candidate/manifest.json b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/candidate/manifest.json index e36b124cd8e575ee4180e7251be41e0b79682ea2..e268b4c10e075d23f4b908eb99b797b1c715a749 100644 --- a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/candidate/manifest.json +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/candidate/manifest.json @@ -5,55 +5,55 @@ "original": [ { "guid": [ - 125, - 53, - 145, - 2, - 3, - 127, - 82, - 64, + 110, + 69, + 66, + 99, 167, - 187, - 251, - 62, - 162, - 162, - 161, - 216 + 190, + 20, + 72, + 155, + 148, + 109, + 0, + 93, + 84, + 216, + 44 ], "level": 3, "position": "Keep", "space": "{D7B1788B-A971-08DE-3324-F4DF82A3B46E},1" } ], - "page_receipt": "Some(Published { revision: ExGuid { guid: [79, 36, 83, 146, 51, 185, 231, 72, 147, 254, 0, 180, 206, 5, 30, 79], n: 1 } })", + "page_receipt": "Some(Published { revision: ExGuid { guid: [206, 245, 52, 158, 165, 94, 95, 72, 151, 84, 33, 16, 146, 78, 218, 136], n: 1 } })", "phase": "03-selected-group-move", "publications": 2, "reviewed": [ { "guid": [ - 125, - 53, - 145, - 2, - 3, - 127, - 82, - 64, + 110, + 69, + 66, + 99, 167, - 187, - 251, - 62, - 162, - 162, - 161, - 216 + 190, + 20, + 72, + 155, + 148, + 109, + 0, + 93, + 84, + 216, + 44 ], "level": 3, "position": "Keep", "space": "{D7B1788B-A971-08DE-3324-F4DF82A3B46E},1" } ], - "text_receipt": "Some(Published { revision: ExGuid { guid: [21, 35, 82, 67, 204, 139, 55, 78, 156, 40, 98, 53, 158, 180, 33, 141], n: 1 } })" + "text_receipt": "Some(Published { revision: ExGuid { guid: [139, 13, 130, 183, 108, 34, 87, 74, 131, 7, 187, 88, 129, 170, 226, 238], n: 1 } })" } \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/commands.jsonl b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/commands.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..4a190f31b5109be6c6e81da187edefdf59c5a005 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/commands.jsonl @@ -0,0 +1,3 @@ +{"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-A3820EBF -ExpectedPages 9", "exit": 0, "stdout": "Read 1 sections and 9 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/machine.json b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..181c2cf675f0a650aaae6b3b9ca684a6e8a21d19 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/machine.json @@ -0,0 +1 @@ +{"name": "m6-a3820ebf", "hostname": "ONE-M6-A3820EBF"} diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/notebook/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/notebook/Lifecycle.one index d309acb210c66b940bfa64925c20e41b3e04663b..0b8ece35c4178a83203eec2e118d453c2c237d56 100644 GIT binary patch delta 384 zcmeD9#N6?TS>Z`gOm)wV<-Y4S23K6roOU^Uh0TsV4)=Yxu+A6yKcUQhqC$cI54Y>b z*S#yfr=7fCvP`f0(8LKY8ejK@zupAWGrG+}T5Ab|sfB;#yb8SbSO>~-nbi!AG zTh&#Q9a&{IOE6w}FK~C)jcX^`^xdY+Dvz*V@l$Z~pAQEZ1i`e6qEQuxA@ delta 384 zcmeD9#N6?TS>Z`gOm)wV<-Y4S23K6roOXGo<5LFIxKGSXPH%BAMblw)l-pM{c Q^e~O=`eA@+#Hk;40DFkCEdT%j diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..72bfd612f1f572806763534cf923a6751b5dd03a GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x9baJznd-Mi9z+R6JR%k;VrF`xnayR!tOCw}!@dO>{R z+Y{?+ zsln-{)@lFQpDfR?GBWJuhDt=3ykM&l;PGEK=asp2mm<2;VA{d-7R`nH$QVU(lrtIv z!z2WbeEI%$V^!D^0jPgCau}vIFscNUOfFg6+U3}Fi}B2tN4=?xKxvkQh6Zfn!z3g| zy)haB!#f0!>rC%m#!ZJs4|T)xJt%`;p2`#e;xhrUAP|GZKsdc~mM@485(ibaFmapY zdy7GQE~uDkwn#FFF9PMK=y?`OUZ;K2e`j#zy$>^g@7EA$Xy^gTwY9Fz@v2Yq+qclQW$!WJpwWj1lC6yG&I1}$pDS~FTl_MmLZxrzz0>z!oUElKY$_) zAW@)Wz@{@Xe3M~N*(bvw0&?D#dG|n)5YWKFFh!O@W+zZC8%TrHfNGoY6*fEeINbN$ z!a85*|AaDkkUkk8_F>3mNMlH4NM@)6;v67Lk0GBS4@g6Le?STdkmCoW6BGw>3Cb^S zN$z&vaMiXoce=zpkT|w@d5|iND-Nda7d4bFuJW3hFVA;s;iEEDVBi5w0atyn`0&Y_ z)TPa-?7Xe=(}fK)Lo-0ufa2pUBR4FZff^hQ7+Xo literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..faecd82d4628a453efadab3774f03fef19773fe1 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-A3820EBF", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/hierarchy.xml index d522da966bcf290ef753f3dcbdf7186bc9a28316..d6263e603808665424a6644790724d3e85cdbb28 100644 --- a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-000.xml index c030175bbc038081b6ea818f014aca3f8d9f156c..d1a5e6a031f1d8f772248be0c72b698f0dde35cd 100644 --- a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-000.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-001.xml index 7daf73932bd87a60fd90402221f605519f7244ca..b90875f84c14fd2ee71a8290a5f1a90565e65d8c 100644 --- a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Offline Body parent 🦀 éBody grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-002.xml index 6e63b04c776b24eedd2c660266f2f6c15f345bda..a71dbde1c546424d1367f9d0e4fbb5b0086cc579 100644 --- a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-002.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 éOffline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-003.xml index 0780350d99c7ddde66c3446517938fe7e3bbfc9c..0aa42bffe8f3295a71e9961fe06629cd533e4557 100644 --- a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-003.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-004.xml index a3f6da4a755147788360c3d0b49eb5910cd6b332..cfb18eeb2d452181d8f47999e9013a137a0f15e5 100644 --- a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-004.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-005.xml index 3f614e3eb7325b575bdf701553383f40d1ef916f..e7190e87d6fb2f43b7f88776477183c6b4128f3b 100644 --- a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-005.xml @@ -1,4 +1,4 @@  -Body child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-006.xml index d31cc414ec99bcd8020c0458b55ad22e06016398..5cdfe59e70abd38080d4f6634d906a4a3864a5a8 100644 --- a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-007.xml index 5f36954144d5fab9d197d825932dab04d7a7e851..67bbb03857f22a81e37cecb3bf331783d8da821f 100644 --- a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-008.xml index 0666a6d29a3ea3e0c2c5a40088879ed3e79b186c..eecc121c44bb60f2a78e1e8ea4fe914a79c24810 100644 --- a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/run.json b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..bb4cb6bc9c49d26acb4f43f8cc8a69231c0519ca --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp41s5b9uu", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/source.json b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..acd1861a1dfc67bc6200df9bb30a9732a1165bb7 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 63752, + "sha256": "93548ad527574f6a19f2288b751746754bf78037b8229e5408aa1af8d5e4f94b", + "mtime_ns": 1789121641556517733 + } +] diff --git a/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/teardown.json b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-03-selected-group-move/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/candidate/Lifecycle.one index 291421f083d3c89243c6ab3ed2d0f8e63a20d540..20478543a6c716a651d882f4d965a51c54811cf8 100644 GIT binary patch delta 394 zcmZ3{#j>J{Wx^GW(i%sv|H*wWO=dAS^%UYudjqJ6IOlcwaam;lTlsl%*l?d zGMgnBkNgx!Jm1eVf5tbb=9O$oArqckZGQ8MgGs>dHpA2q^H`6a48=lhzZO|+X8GH| zC}49_^v2zoi_R_jQ;+JN*5;o)<)0pg0n=BpFv?7R_fG`F5QvQ4|2~1sayQIu4aA(M z?~XY;XF9XP_E*?WcA9qk_2jR-AqS_XFzR8b1e-B+A7cP>rry=*f{cur zU`8z?W4(a>A;yPim``|afB#v^j^%vvbRH(gPhe?AX2wP^qm`LaUcg>8Zj#fq<+xk`CgW1+w>e3pd&C0271u|)0kH*jCKHJ C*`Zhf delta 394 zcmZ3{#j>J{Wx^E=<)urbIdfKdwq22Ay0c@8%x4A&D0;U3P_}-Y=bYagUxk=IST@;_ zRc5mU{!+ZCF1kYUoFkj-y?aWDydik=tg*v9Cw#b8?FIXnJkn_2!g zFbZ%e^^4wX-{{zX*Z6J6!QGsbr~K2yFkt#B7Dk!L@BWEk7y^;e``;&E9FnzUp^%(^ zgQDGgna9g>CZGA=Ay8lBeM-z`t@Ebeo(uAG!epnWFzR8b1e-B+A7cQsdBLUWf{cur zU`8z?W4%DGaGc_$M^n6a{rY^%vN3MSbRH(gPhe?AX2wP^qm`LaULbGscHQjWde6m0 z8dg%qCl-LzX-vPv%-A3h(CSn*PsG7J{Md3+MOm)wV<-Y4S23K6roOZc#^`wt>S*fPMqMPVL!!zO*wUrOWTFT&0+Ie#lJE@!0RjF%Y;>5dhK$Y>SRAPdj&Y8~aF!{{?4graej{Oz3lbxpBem(gsZ^*%^DU5m;D#2z<-NzWfoT+zp zx*#KCCYVvn$XG9+e~9tn8Riq7+uwhdvST@)Je`M$@e^2@k(sd(%xGn1lozm9jho~& z?YQ&KZOLbqFZ*u=sneK#hncZKfGuS5%x2x69=ikYa=w@4*)~0g1?UJ2gMnT&z%=F+ H3!@zX4?4Pk delta 448 zcmZ3{#j>J{Md3+MOm)wV<-Y4S23K6roOW6KkhSo3#gE<-XD^C(da8VOqC$dz(BqUh zMJ_px-B<3sESzM>H*tcC#yY_VtzYkkI;<2*-lpQ7`S>dX1Qb16e<)i&&U4Q1jjuw? zA1s^f$SSj0g7L^tfpZZXvYwPq^6d)EI><2TPsrvszc`o#K1I)qbZlev*kUlP@tht1 zvdt`i8yE#Rl=?;QwQqFnzia%qFbsjn=>6{#Fb>ID zvQS9Qzd_ONz0Bj~Ig`))?+~aj@;)VIv(|ajZ_fq!IbpI>QyBFyRD#Wzx{on{*}UM= zbU{YOOfaLCk+EJNS2#}b(xWNfyMBGXW!V_FWI7KM<0r5*BQs+on9<72C@+vVdAn|Q zZ@uT@A`L4k;}Z)&>NKX`VPj;%LGsT#yPU&h*}8+;mvV62O!%Sk?Y1nati%eA$miU0yvqoYR}^Vz zU{C=DJxHlXQ_o?stBStUT37QaurH6-5NK%V0m@z2P`pd?;}M@}2hY4u35xj&(yHsh z(0hWB5mo{N%jT98h8|>(fJ_8|^^pb*4KQ^wKqLPPFf@Q=h$as3L6x#FFu>{$phyEq z6zCYR=}ZjYWEfQT$uNk3oVR5jQYWi{g<*;;gUn8#TsDvfsR7kCl^g%X$?yE=Grw|| z?Ybi&i6DJ4K4*=fvNs9mg literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..b7ece341eed0cd7440fb65fc2a1f9d42a139b19c --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-32450AD0", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/hierarchy.xml index 86f30bb2f3d06cbf0dc09e0079cca4fa480ed607..aca1e1dd935976613e81e234d8291044312e333b 100644 --- a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-000.xml index ac51c79601f9b0ca5e666ba1f3df86ef85da19e3..3905cdd44fe78eabbeb92e72556bec219f408175 100644 --- a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-000.xml @@ -1,2 +1,4 @@  - +Body trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-001.xml index 5e90fdfe9ae67add82c8757e364c83c126d154ec..1f6dc3503ecde60c37b6a60eb0c4b9c5e3bf1c00 100644 --- a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Body child 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-002.xml index f86c556d436c5b97f60f62c5af905eb1ce34dfe1..db53db58906eab4bbd57388c944156a3d965c2b4 100644 --- a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-002.xml @@ -1,2 +1,4 @@  - +Body duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-003.xml index fbf05a32f682574e0765f7bed6ef6c5c59e791b8..3b55585734977e57ba4d5f3afd657c371bbdd6c2 100644 --- a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-003.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-004.xml index c335371bc9781e1778f7c9b43ce6817aa5a1e52d..b2c45102f72813296a353b3e0a547bfd731661c1 100644 --- a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-004.xml @@ -1,4 +1,4 @@  -Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-005.xml index cf0bc30aedaa4705c27e598cd3972b7efba5fd8b..41bf81832bd49d0be62a36459fd76fea5bc84088 100644 --- a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-005.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-006.xml index ec651536ff45de4fe84ae556d7d79d52fd50e503..e359892258fef917981202f12fd6627d231dd27f 100644 --- a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-006.xml @@ -1,4 +1,2 @@  -Body duplicate 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-007.xml index 2309a54cf2af5e57de49cf7030e631446a13f490..a1b991b5a129d0742a12d654d6d1d0f087d978ba 100644 --- a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-007.xml @@ -1,4 +1,2 @@  -Body automatic 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-008.xml index db97e3f0c35ee2f348dec1f5ef48c79fb8fe87fe..8c0c00a181c8cc8342f95f4ccfec3153111b77f7 100644 --- a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 éBody child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/run.json b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..67eaf5644230589a5e31e64f029aff3fb12b51fb --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpz1pbk0ta", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/source.json b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..84bfed985a375ef67cdb51be3f69ad25701015d8 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 66856, + "sha256": "d566d07a037d5d3552ddd2d64f42f793c5823e4209dd340758c1847a21a5dc93", + "mtime_ns": 1789121641964058226 + } +] diff --git a/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/teardown.json b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-04-subpage-move/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/candidate/Lifecycle.one index 969768a1f8d4056b64e51804f5378d787ca1375f..e6d7931a947a009982ebdd18b472f5ebc45e9af9 100644 GIT binary patch delta 213 zcmcc7!*ZjCWx^GWs)fRQQM#(Gjf-0E-sj2U`OW|VnhjN!r>AuLv`(@6w?zG;@MK3; znPv&b?GlWPYK+WTdRM1AGBIX?8Ecss>jm5=doRwJa>H#_@aI(`cQ=Ggw_#@d1eP{r zVQd65wz4qF3osTQQw>So>^CLLdv3IyqYX%%#&jN5#s-1o$*=#X{JQC~YSGT<=9{(m Wrq5wz)WbCR7AvCxrZG}%jCKGa=}`#) delta 213 zcmcc7!*ZjCWx^GWXFoSToyOzhv)xug`C{=oqwfq5&?~0)VRr8ckG}N737S*Q-6lJ- z$}~$bZkJ$WRAXc|FSs<_k%=)A%vj6BSTAtmc$d{4EiIRYl13}?vgN9$+b}bJ0!tgR zFgAi2TUi+81!V5XOQ%|G^x4{QHu{)BN;^oM#&jN5#s+~7mg3F&hMbf4Hy9EKaWPn_VQk<;2>`hBsK*YbetpN>3xp!kyk0yG<{EKg7A_Gz7B_iu^% zN8!nitTN3KjN2s`8Pyn>v-GY`cVuGB1T)q$G1d#XPxfA%Gv$Wctl-b9MDA_~nQp_( z_z5g+$imnNW^83)lowzuJf<3wy4i0^miOFfJ4YLkI*sW(tc(o;$CF?GPx*DzW!0jc b(akq&?@gb>%BY8F@GVwG159J2*cj~qHU@1h delta 267 zcmcc7!*ZjCMd3+MOm)wV<-Y4S23K6roOW5}-_7VXepRkJ8~j67^vkJCR7emA+N{xR zX*SufG4xdT_l%?mC~cVuGB1T)q$G1d#5INoKoM@!3Pp`_7@yllDZ={C%a zpTN?FER2m{##R$R_^3thR8-2DmoQ*zakkSrPr!k#}m9asfgQa-0z9FaQDn746 ansr+pr_W(!)WbCR7AvCxrZG}%jCKGdNN279 diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..fdd7b1363d1947de8975c95edd5368262f43fa86 GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x9TZ0*RJs?+Pd`nF;vhvCNU3~0dq?koZ6iC;aJUJ#%7 z_Qbjy(m;7+3{(Ce2taIBm;jW9iK7Xla6xK704&G>m0|(XAPfRP8lnQC=711H7)H*$ ze4Hckse=2gz=@hhb_1qsqLal3|JF?B1(WOM>ziuJvUEO0y(1G++}S>OnB- z{?QN^5g~wFXL|24ZaOS_s2i5=K^gq=RHgtBp9zQsffytP!s(r}d_jDWIH;Jmm3h@xRi zVk;kE;REYph!o&%1WCVWXt;Lb@ZAZ&L)_Z^-`!0+rj`LJE3pBG*QbhZIo@T2$SaC8 zG%%aX=Z6N=y70%_It zVCX%;$OtQefn{?`3PTUFM?fZm!1_poh6b2A8K9B>1sEE@GDH&x_@GKz7#Lvn2T-H| zBnos4*mNd_Z!!!j`(zkIK+fAT?;c1J0vcEtrpPkL>;%eX18I;NP;H}nUn2EJ*=^rW znYNv?Q!ICZ^vM9R4?`wH8bc~WGD9U0=KxuH4EYRsKpN8f15!YM96unPpg8!M9_*x3 zy54!|iId%bHd69#6vhjSg8dYH60Zjo{eX#gA_p^KF zkIC^~4O|8Rm&M}}LDqoc<18aLES!NF91R$HPcpJ_0cBaS#!ZbT!!J;LfQ%mnqaiRF N0=Pl|xmbghKL94pKSBTi literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..0f5aeefa8aff8fd019232d1842f7d0945121c5bc --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-1B265F06", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/hierarchy.xml index 6390daaec50eddbf5458665fd14e764cdfc0fc0f..1185c4ae2edd51f0003186836d9a674076d5435c 100644 --- a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-000.xml index 7e84ef75198876e79fda769b380b2b7a83eb9881..4b1430f609826b7e4d273105c71e7677b666a093 100644 --- a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-000.xml @@ -1,2 +1,4 @@  - +Body trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-001.xml index 4b47688a009d181b55b97cbf34e8809b64d0fcb1..d440c62c4340abe70562ab6810dba76d4ecbba0b 100644 --- a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-001.xml @@ -1,2 +1,4 @@  - +Body automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-002.xml index d0dd7d58d9ab21b24ab56047f76c6ba6e05b1b0d..ae64193fc29119f09051d88dbc92cb6cd33024f9 100644 --- a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-002.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-003.xml index 240091165437942b1c533c8bd07d7c153f39af16..99e5f55c7416f44bb5854afe4c94e22319997b33 100644 --- a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-003.xml @@ -1,4 +1,2 @@  -Offline Body parent 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-004.xml index 6f76f37c8dcaf1066d15a0b83bbd0cd70678f58a..036827ac0a4751d89e6539dc007d5cb69dac3d39 100644 --- a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-004.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-005.xml index 0b09402d89d37d14affa4e46ed2984a6661998de..7fc8765fd68401144ab68f5473459f2edda2226f 100644 --- a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-005.xml @@ -1,4 +1,4 @@  -Body child 🦀 éBody grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-006.xml index f6461edc278e5e4ad2facb700e916cdb6ab0d937..9ab4e6821968942838b79134a3ad1290ba46b354 100644 --- a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-006.xml @@ -1,4 +1,2 @@  -Body trailing 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-007.xml index 9ba63b947391203afc2ef75f8d898339b4a8cae3..f40b862dcc680613dc9d0bd1542a16d00d9004b7 100644 --- a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-007.xml @@ -1,4 +1,2 @@  -Body duplicate 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-008.xml index 340c7a7de1ed73627d6136e2a5c939aacc873b5d..b3f890242fba17c8cacc215a6a50239202958e8c 100644 --- a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 éBody child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/run.json b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..13032e26c4d6feef7b3532b521d0f1a8dee720d5 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpf5e2rlwx", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/source.json b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..d352b433d43071d1dff9edc519905f17548ccc3a --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 67160, + "sha256": "03715fdc38a5e3a369e49e5abe8e55fa82da4ffb90c304987ca5f66edf545f7b", + "mtime_ns": 1789121642301975530 + } +] diff --git a/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/teardown.json b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-05-insert-before-subpage/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/candidate/Lifecycle.one index de93d19ed31f9874d68afcbe23d996a7346ebbf3..ccee9e37b3498ba9b9aa7f0b16a80caa8e84f99c 100644 GIT binary patch delta 356 zcmbQSj%CI=mI+rh+6}vM-G5B>-1#Zy5dZHbGg%oKz@WxcT<6;5KW>vBzFsLWHhJ%4 zM^>3;3C8UbjEpUO0#jOY&b~>D^4Vf-VLmP8P3!VC{EUnOy1k|!vlt%u?n)_HxqfAv z&-6V4jCvSqr~eXQ+$50p(kM4_^$gF(SsI1PySNyq?-69|5Mj@&5kK!<=DA4X5ufF^ zq+F0=CjZNmm|h^nD1@m8Xp-IZ3qp)~%vpL@r!xvOW`Y^H!i@C-0-1;JFFPjU(Rp{j zz+~&RsOf)%89#xgKZ-Cmf*GZvj0*fJMJPJv@uPp8L-0lkA^?kq7zLkv@Hi80y%0Q}I8d;kCd delta 356 zcmbQSj%CI=mI+rhB5JSp%xZ7--rBAc!T4{&X;wxCFt{!^`(gEt7T38~<{hq+f6q7B zkyWNyf^oY9BV!AnfQ^*o%e9M-x$RC1;}2&~T)TV?KO>{S-5+T|pLh;AbUkla?_9QW z_4GXgjCvSqr~eXQ+$2zbP&0C}*bCpqOa7OabM9%LzDJO;LnPOEy1Md_%gz(SmvI&f z`|bfbX7ay0iRlGGj6#@tfF{{ZzaYe@$8273X*#1YV8s1;*ucF^j~{#nDbtvKMwGEZ;MtMF kX$xy!`)u}^-vimm3}8^>DXw$v@*lU!4_~j8 z7n{6yvLmZZvjpRI2}Z^iK7lDMIcMLbMfq&8wlJTT@}_n98h%Db0o`8Hk68>4e0Qak ztX#jc&1d=^0Y*IxwbOqIFm4h^dufy#xq60Y<1CFr?L z@#ws}UtqFzTGaGE!i=B5(jP?_8^MfHQAP!Rm7zV{W_C!uZ446W1=4Oyp02KZM@%aT$;`(%$Nygk(MHvf~ZFpR8o zeo-N<&gZ^pT`kKu#$8?9P>B-Xb$_ot%J!Q0I3=`q*2e^xdTjI-&4v8P7@L|=vC$A1 z>LGCC%lEGvtHPEDKs~~d!!WghQDt{z`;wKtCeC|%gJNu7gxq5UO0y(1G++}S>OnB- z{?QN^5g~wFXL|24ZaOS_s2i5=K^gq=RHgtBp9zQsffytP!s(r}d_jDWIH;Jmm3h@xRi zVk;kE;R7nyKtQAbcOyvpMMHzceAb?~T6dlL58YiQ*_5RWDl4&p2}%q`_f{_tc0t3tDmK25_WRHMM1cCLD1`Q1`buvIB{|hiQfMtj#4)8&hvM?~f>JOku z14tC;7_jL~4BuoJRQAa*h=828W!^oIBm^|DFieqUkl6{8%LdXQHK5w2qvOa`UyYgG zn_Q}Q<-Lp32kDamVjqS~hBSs$hGd3HAkG1@^ceCP@_;m?_Xnha06Bg@Ize#|C#P`z zaD0GApYfJVF53;@#w)gXF-Q}5fFlmx@jqClX58kyJ-fQ|Q|NDPRbb$OtOHpAi;p)K z=l% - + diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-000.xml index 2c820f22e2b956bd89527ebd153963b68de0ebb7..ce0cd3dcd4ddb57b19500cd4de580bdd87f1bc87 100644 --- a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-000.xml @@ -1,4 +1,2 @@  -Body trailing 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-001.xml index da92bd7180d3b8fe12c6d9c34b05e42dde30e4a5..8f2dcd9cdda6409312fc0882833644ac9d001e04 100644 --- a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-002.xml index 4907a264a7b149962315aebf6bebb16a84638191..13376bc639d14e2154c4df76af8346670d5b9d1c 100644 --- a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-002.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 éOffline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-003.xml index fc1c90bddbbf4d35da271ce2796a85964715b3e7..73467ebdccf8ace9397f8cffe405f0b08f08d89d 100644 --- a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-003.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-004.xml index 206f75cfae24571eb4f8c4e710add7e821926e34..e40f2ca9cf6091414aa4b6557f01484c283b2598 100644 --- a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-004.xml @@ -1,2 +1,4 @@  - +Body child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-005.xml index c5c98de466b7e7d5e25a4ed3eec5b6e4e02db670..5265ddbd165f7227024964090b0e33b7c567d4ed 100644 --- a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-005.xml @@ -1,4 +1,2 @@  -Offline Body parent 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-006.xml index c4f4db853288afcd39c6db9b3965c2a2bbda9607..95ff09fc3bf573018f2c0ff7f00089850829ee00 100644 --- a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 éBody trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-007.xml index 06485d3977b92b0952377ef2f1be6a2410e28d24..cfdfda2d10e0596e00114564a94a41c413215dce 100644 --- a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-007.xml @@ -1,2 +1,4 @@  - +Body duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-008.xml index c46c04873a5e6e988e06998e3abea272ef4300af..6d835912f4f48faa03a0bbf243dbc9a0a03bca47 100644 --- a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body child 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/run.json b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..735aa2176dd32427a1e5d54b213cb627e018323c --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmplg_djgsc", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/source.json b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..252e8d1ac27b903055990dd98fdb3561be114268 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 71448, + "sha256": "f66bd60a8834f9770060ae457a30aff734bf1777b0b21a6de9d8d19570777b3e", + "mtime_ns": 1789121642659393696 + } +] diff --git a/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/teardown.json b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-06-promoted-level-two/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/candidate/Lifecycle.one index 684d740175054374caed48d143b0c5deb67bf2c0..7a8e23af48c0ed86e48acb023bc24785f2c01b4f 100644 GIT binary patch delta 369 zcmexxfaSvhmI+rh{wkcmw`o zx3BJcz_-pMarzo*pfMO~fyU%8XX#y?EVx;IdW8(57lqr^m6(iIYy1?HL{GSAQ~#er!SCW)BggKXDYk;7ME2rXWh;{6`D1Di#*UF7>0xW!>7O~f@us`%1?n&2>?~9mTCY1 delta 367 zcmexxfaSvhmI+rhj_iAP?ex9X4h?OqC+i+&{>I7300!=QG2SiH-TW6CE!O_<{q4fZ zj;u1x5{%m=7#VHE1(Ji8Wle5h>(EtMc+QIDX8HCM3C0DC0_=xD;c9 z$6nv_T6wiXmBFsmZsG(NjUeN)-G29WJ9b^T@T^ejb~ra90~oyY`uE;UPQbItebXn= z`99^79a&|XB^b9$Ff!VR3n)u+om+3~kT7=$+aoV-w z$(r1k^^>NHNHOYRD4zaGno(wYo)qIWfu(6N+d3`I`R+P&^*(>+O5N!q(u^GffAj2@ zKiOXBxqWrl1HN@8iPP6e1C7B@3p6H&IZN;AWWmky(<@{cy+EAlM`al61tzQBdROC~ z;W{UE`rI*wH$T4b6uaRXu1<_C$K7D~4qZU}hSvf{|fza1p%6H7Qy=SePWh%C! xc?w9w3IT7;JyY4$x45j5IqP=rsnD$HTjYTb!7v=`A3g;}5lmyiQho}IN&pwSuipRw delta 421 zcmexxfaSvh7KJB4G1Wacmiw;T7+i5dbK2zv+ca8p%y(pI+JJ;k)H-V9pti0xfPv1~72fi}7xm?&iPHXtDN( z?{61Qc4U=lmSEg2!N_PME|46&ENgQ6T8FO6!gE$EH_NxDNH8v76ktE>dwfP~t=EpG z{jxzV<)+g`q!{%u6ir?r?<_moIb^TMS_VhKjeru_-t1@ zg?n~wyeFOVIqvZEKXQy3(`#fIPl44}MoeEI$EXEXe^!oBUf`PjB-W5M-mW{Mjv9uu x%4dVruMqGN3yT#@iuB&{#ns`OcvI^1E%HETV3-Z|4W9y|2&OS$DL(~9B>;g3s-FM= diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..5ace9b9df226ff5fa11d6163af4f697287e07ff2 GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x7d=XRYu_WGXJ%BvNs40fe<3~0dq?koZ6iC;aJUJ#%7 z_Qbjy(m;7+3{(Ce2taIBm;jW9iK7Xla6xK704&G>m0|(XAPfRP8lnQC=711H7)C1Z znA*orFidS=RMFNn$;;_J?YnbN3^(W68O)48X_kbB25jO(JqSkK zKN~$`k>?d|+J+kpkR}An6wk4g3EsS#@J_k>7sn+FLyByY_&}N^Ic6tUnKKIo@T2$SaC8 zG%%12po#07C;T+!fdv>)^FQ zXjaXC@6?STeKJ7o!;s04#*oU8%uor$IY5>kLq0 - + diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-000.xml index 2c8de41793179a2a6cb34149464e6caa8a2fbe85..65f161066512c9892c60b0548d6e954300801ea5 100644 --- a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-000.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-001.xml index d34d3de9948549ac57a53696f907d5b0286bd5fb..e2f610785af96108eda59201c985a12482c7e809 100644 --- a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-002.xml index 0962294e321b89491a8b0fe94c66f3d4126d1719..f4e5001e74771fbbdcbded50887ffabcfbd18e75 100644 --- a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-002.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-003.xml index 6b7dff0a785f95904084cba7b26337061a9ed8e8..1c51d370fb8ce9f8d735cc1ec7ed708cffb40cfe 100644 --- a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-003.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-004.xml index ffd74309e7121732443d89c4822e978ac3c12bea..2ce08db703c28561135f2144af2fb0bf47c56b22 100644 --- a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-004.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 éOffline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-005.xml index bda9a32d0e2d6a834a028a7fb73f1b39ca62b478..8d7cc733ef6edf2e0bae078dc974d4ee94d39735 100644 --- a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-005.xml @@ -1,4 +1,4 @@  -Offline Body parent 🦀 éBody grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-006.xml index 9b65f28b3324a4cdc4fc9940cc6ce89103c5b73b..df7fb31488b7f69d6bdc649574ad9773b9435372 100644 --- a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-006.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-007.xml index 7cc29f161b7df2b0672bd088e4cea23544a4d3ba..5455b63da21e09c2eb29c8f8f0cef241be58daad 100644 --- a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Body child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-008.xml index b5d4452da63a2d7c43633d995410f9147db98ac7..e79a645a377d9e4d93274a446b5733405d44e983 100644 --- a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/page-008.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/run.json b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..24e96394c7f20126b7d5792187e2d2a2764dd52f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpksr_pqio", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/source.json b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..621e90f83cf59c0839412fc247f801f25c87cc72 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 73840, + "sha256": "0d48cefd731266249f136cf48bf70e1899942e390a3c40bec04b058c8b20c738", + "mtime_ns": 1789121643082641295 + } +] diff --git a/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/teardown.json b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-07-promoted-root/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/candidate/Lifecycle.one index bdc11818051de98d9b52000a661dff0fbfdfbadf..9131addd8bfd2ad0c09b3f873a82a3b989bf024d 100644 GIT binary patch delta 213 zcmX?ch~>l~mI+rhOnxjdVO(M8w9a|@=|9fyuecc*z~H>{_TK3m-?}%;&dgtGYdC4L zBdbia1mkuIMn*9i=4`#I(+y=AGr^3xvW)ctnc0@lHyN&Q>nc-R%jlP)IbBDN@e^2D zQJ%38%vdVVC@;V+!0@B#@l?lUUvJbM{}mblQl~Nfk33_8fRl~mI+rh1kX>gwAEqs>C|V9TmAgyQEo;CFgSQ&2IITWvt75Ryr_~>eSB}S zBdbia1mkuIMn*9iW{ZML(+y=AGr^3xvW)ctEBB~;`R^#kxe%9iN_2fr#I1i Y>ztl~7KJB4G1Wacmiw;T7+i5dbK2#Fg%MomSLArLpP9L)#-+^jG17@Tv^6?fy`{n=bH>yxOJ5&u4VK~(VVU$ z$M^{>ttijf2xcsmXOtIU7hw3&^mwY{vadJlj{gb`0IAcM{zsm%K|sr@?y0iXO0PW` cq94!5oL8UTqrj+#Y49lpMgvS^xD*-f0H(rf?f?J) delta 267 zcmX?ch~>l~7KJB4G1Wacmiw;T7+i5dbJ}Iyb=ywfosj3h;N+qOw`MgaO;kt_c&0ts zCF$mGpV@+U1Epe(lP6Aa(GYom@YwU*&2IaIu9@8_-qOs=$N&ZhFU(+k_j$JK_LLV@ za;lH-O?G6JX_jEzF2TqsCc|t|aA~@sEMq2^F;|wcUSQ=Ol`sDtCHyAT96#ZneC_#k z9XZBNU};5p#zrt>sXU{+!0d*+<7#*3xbz1t{;uNia2`mV#`Hh(j12{NXdT*W6^d1F9Jxqg7DKHvf8pEZ?Xa@iw_;n@# diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..90b5889be625b1db32df4c14bd21878dd252b6b9 GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x8IM9Z|5O=fazW1c)&x^m$<1~g!Qcb0(k#IK%9FNjZk zdt%)UX`nnZhAICK1RypmOaMy5#LCp%POg+)u~mPxja!t9@&-NaJ#tdTjI-&4v8P7@L|=vC$A1 z>LGCC%lEGvtHPEDKs~~d!!WghQN>)yaGRNwt>41OH|!-E7H(z)O0y(1G++}S>OnB- z{?QN^5g~wFXL|24ZaOS_s2i5=K^gq=RHgtBp9zQsffytP!s(r}d_jDWIH;Jmm3h@xRi zVk;kE;REYph!o&%1WCVWXgHa5y+Zn1yx(-kqoz6=ee^+PB{tA-U)k@r<6TCGyrM`$ z1A_`M=s`-K+@B{AJ9nPP;>*{JA|I(d(GX~8=mE-U2B=)qEsu5C*RkZ$R+)`LAg#I{ z481298DS+buxxHgVdz2j2*^YbSRZN7&;U~>12po#07C;l9K1YvRUtyA+N(qA{ - + diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-000.xml index 51299b44b7a94a0c682cd2c9c960cd4846650195..56e73e5d6b9a0440368828b05432229cc8be96a3 100644 --- a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-000.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 éBody trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-001.xml index e7361b989c43e0f1513ed106c50c1107b15f6447..feb30185e34fa53327cb296302751683520edd73 100644 --- a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-001.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 éBody duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-002.xml index d6e89b60ca4a0a122b7e401330ce08c3e3edae46..612f077bd98e100059bc5738170c79c305789450 100644 --- a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-002.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-003.xml index d1185a10588878ac61679697e79a4cb46f5bf611..a809d8b795d71659699429627f3ddbd610059ad7 100644 --- a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-003.xml @@ -1,4 +1,2 @@  -Body child 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-004.xml index f740f86068f16965989e32574c8d4c7f5a1c358d..3aee5a97d214b5da9a124004d5b1a9eabbc637ab 100644 --- a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-004.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-005.xml index b78519adb1eadd14afb1fa5276c585ee24d7c862..b46710a47ec47e7d5723c50214ecb19a06f576cf 100644 --- a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-005.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-006.xml index ff20ffaa509355ba4e87e9764ed2acb68f3d454b..6cedc8afdc3e2da08169868c7a6d6e7e41bfebad 100644 --- a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-007.xml index be9c65c3b53e2228702629fa2fbb20227520b660..1b87ab56e1830834fa4ff8e58632ec5853573e8c 100644 --- a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-007.xml @@ -1,4 +1,2 @@  -Offline Body parent 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-008.xml index f28319de24b583552f7a9dbb73e47a5bbf5546de..3629078679ce43fd4e72b7610f4b232b5a3f253e 100644 --- a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/page-008.xml @@ -1,2 +1,4 @@  - +Body child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/run.json b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..344c3194decb95ca5eace5fb833fe1c7fd372765 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp9pe3v7df", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/source.json b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..7d97bed80d9d1bc20e03a606a485b78ad526bbec --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 74056, + "sha256": "c4ff8e01f64f3ad05e44ae4ff1dd65286985d7b3ffee478d42e7e0ea41d55024", + "mtime_ns": 1789121643503140348 + } +] diff --git a/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/teardown.json b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-08-collapsed-group-move/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/candidate/Lifecycle.one b/corpus/page-lifecycle/offline-edits/indent-single-page/candidate/Lifecycle.one index 1866250830de0a4bb4f3013d6d6d2e312eacb029..fc561d753d7f98a3fde10c33a45229cdab44530a 100644 GIT binary patch delta 338 zcmdn-jd{m6<_T9c>|bX^oZpb-+I2O0SNYLPt{)j7Ail@;n&YM^4*Nw}lv6hs?U?My zDzjOF(dU!Ej;+iowo;FMXWQkQCO(i)*Q9(&ftxaq;n$xpuM zVJMxv>zB-AyRUr$mqfT*JT$bO+9t~T)>|57PQLTCLtvX3)51EzZvT~^upmYEL delta 337 zcmdn-jd{m6<_T9cxPl)ZEsTnBYrC1KdheRRrH>2{U@Mj*wcf4KXG!11nf)eBVv`+N zWj0GN`g{^lTi2I!)N;D#yq~^#b@%fEH*=DUow;JzV->+k7Ide60q25imK5uRl(q=lka@(5RmZSpSSK%m`CS}(wrAB{{NU< z@=Xs@CCG?#-x`=L3NB3!{N4zruYQ*o(D_#UMexEl*A)wG!*^`RpEQ}}#~~(*g2@7# z6($#a6qx+uhZR_@>CbwBu%s{EhCvZd3)W{Od$+B&pM2!!3W0gd8B5lL+BWhwM1=%_7GCG_ zShWO?7W3D4z7&6Bn>fKm010_r^DjU-z82q5YWw0^)mYuQ_g-;;>(oMLBhI z(T>TEtTLM=7=1no?AXejVk`C7ceY)=Y2pL8s!61s*R}Xzspk=H1M?sak2K%+kp$KMsK< z1vkr2F8C-g`Nt0{FyHiNy+EhI>F_-ZPWraL;+S&xltJp`BR^LN?DAXk^5m0E?rWuX Z?Y)@BaB6bRFFj0Scl|QJ)c)(29RSkkxds3L delta 391 zcmdn-jd{m6W`!p~G1Wacmiw;T7+i5dbK2#O=q>6Mp1N*plAqO_X#ATyQ6WJ>=N zCb7wmtTLM=7=1nosIBYEIchoGbKXziyt?~&ftyP{Col?J&EI3t`?1ey^WW7ye*OW1 zlb?Li!%#YT*DsmLc3=Ah?#Hn_GYMGiG)2|un5tm#)5&+fb_huL@6TIzD9oetMQP59 z7yo}uF8QX1sS;$wxo-{376q3k2Yzn^(^tRC3+Q|+{vvo`o9l{&w&6QAcjZ^NJnrv>XXlD*qj+fP37bA`Y>=8Pq4LhYS5 b`|aAelz+**$u+<9FiqX{%K%gRuU~cmWn#Q= diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/notebook/Open Notebook.onetoc2 b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/notebook/Open Notebook.onetoc2 new file mode 100644 index 0000000000000000000000000000000000000000..5329e2757d718396297753e2ae1417c84436fe85 GIT binary patch literal 4800 zcmZ3e|KIuM`!b(-j|5(YE0x8!@H&^rswH@|n7_XBrT7~g0~)ZuJ4--%;#be57sMyN zJ+bbFG*BKH!<7FA0uY-OCIF>j;%LGsT#yE>@|KCq*-s8Tg>x^;W!L>hN>ao#VG#BzCV{B?h#YRJ5 zsE5FjFW9~d2W9ZfQ<(xld?p|k1Y(dF2&Z?>@&)lh;-IP)CT^2_ zZ!w6^1r;;R7D)#2MWFl?9WQqva}c>x)QsY@7DAc}@5 ziLHEug%7NYAyR<55hVShp&`7&v2xqC3b(1dx0DyPGj0KumDqs6S&^{Yj&~U$@`@r2 z4Gb#4pa&^E{3=xLguRmI!jR-&{CkgfY6vtm^Z?~PGix81vHzLFoZREvT{fNE2hytR z!O(kxkr7q`1Iy-?6owvTkAO@Bf%TCF4Gl1LGC(8$3otZ*Wr!vY@IjTbFfhRC51>c` zNEGN8u<1+;-((n6_Q^1afSk8w-aU{c1T?TPOp#@f*$I@(2GSrkpxP$o+SW8#r>&lI z*kg0HE>->p(kBDNJ`9-*X$+|h$qbc1oC9R(G2}Dk0cl9@4@dz4a{PdFg5u!T0VC4@0FPlH% literal 0 HcmV?d00001 diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..c89a0ee56a7fd5c8d0696fdad5768c4e0b99f6ca --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-060E8528", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/hierarchy.xml index b4925c33e29a7ed92d9d464c09d473267a5b2fa2..75a31bd668dba122923d54bce22a463b5c773e56 100644 --- a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-000.xml index 2fad3bcc8986f48cf03cfc898cc68cf86863acd6..c76898bb57e77d2d59f6a232506d978a3d3953ef 100644 --- a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-000.xml @@ -1,4 +1,2 @@  -Body child 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-001.xml index 74ee05b496a37a4498a375473a5f632d4f2088e1..5e28ec1948ee77ed02c44b2e7f9a44c93719b7b0 100644 --- a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-001.xml @@ -1,2 +1,4 @@  - +Offline Body parent 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-002.xml index 02566225479a211c5af801b132ad85ae26103547..c32295709a1ef8664ddf692f3e5c7e78e6af6864 100644 --- a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-002.xml @@ -1,4 +1,4 @@  -Offline Body parent 🦀 éBody grandchild 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-003.xml index c54bafd9f900c1fa83c87c3ab5cd70248b8f3cf6..85040b087c85c964bc6810744ab2600693e37461 100644 --- a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-003.xml @@ -1,4 +1,2 @@  -Body grandchild 🦀 é preserved]]> + diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-004.xml index 9dd340e4be7f2510745aa68f1f0c45d93114ff89..d7f407f6a5985fcf3566750f925308a913793f72 100644 --- a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-004.xml @@ -1,2 +1,4 @@  - +Body child 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-005.xml index 821141b64b52ed4dc856337a4bf88c17ff9a00c8..2cbf463f0384bfdc9eae94f10c7061ccabda4df9 100644 --- a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-005.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-006.xml index ecb0e0214d1823e1a1fee5401341b5ebc17bf8dc..fe1aacd918e9c0e924568b0f29e2ed90ad473e32 100644 --- a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-006.xml @@ -1,4 +1,4 @@  -Body automatic 🦀 éBody trailing 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-007.xml index b9ac7efa88d60f73d8118bed77f95e6b38b12ce8..0a8f73a67566a6226265313e33a4138cfc5c5f62 100644 --- a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-007.xml @@ -1,4 +1,4 @@  -Body duplicate 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-008.xml index 560fe366effd777b9662921cf89120b13cacb515..d72195dbbe2ce3f613bc42ca5fce037726e89004 100644 --- a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/page-008.xml @@ -1,4 +1,4 @@  -Body trailing 🦀 éBody automatic 🦀 é preserved]]> diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/run.json b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..021acfed520e0fe1487b2a9de93cfdf529d6f9f7 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp9_ggdkk6", + "expected_pages": 9, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/source.json b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..d31b3494bd54638d5a76d64dd1f414c72be6ed68 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "Lifecycle.one", + "bytes": 64312, + "sha256": "3dadcab935fa149e6d732f3c8fc29e44006197a76572212eafbcd7f5b09cda59", + "mtime_ns": 1789121643843763906 + } +] diff --git a/corpus/page-lifecycle/offline-edits/indent-single-page/cold/teardown.json b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/indent-single-page/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/page-lifecycle/offline-edits/provenance.json b/corpus/page-lifecycle/offline-edits/provenance.json index 634b8edb4df2be275431104f59aecbf730558e0d..ae245465bbd18b4b6b21b86cbe05f39631e8dd27 100644 --- a/corpus/page-lifecycle/offline-edits/provenance.json +++ b/corpus/page-lifecycle/offline-edits/provenance.json @@ -2,7 +2,7 @@ "cases": { "group-01-demoted-parent": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp25ua0uma", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpbu44alfu", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -20,8 +20,8 @@ } }, "machine": { - "name": "m6-b441c6ce", - "hostname": "ONE-M6-B441C6CE" + "name": "m6-e8220f62", + "hostname": "ONE-M6-E8220F62" }, "teardown": { "absent": true @@ -30,14 +30,14 @@ { "path": "Lifecycle.one", "bytes": 61168, - "sha256": "b824f43c0f789519771dcaabd0d7b84549ccc01629c19a64bd3bba9bb70b75df", - "mtime_ns": 1788941881049079637 + "sha256": "b0fd7dc60d8bb7d26310e363f8ec9269651bf1c6bccce6465b292978e6c932ce", + "mtime_ns": 1789121644250856649 } ] }, "group-02-promoted-parent": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpbtvm7zy4", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpzv4zdwuu", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -55,8 +55,8 @@ } }, "machine": { - "name": "m6-a937eee4", - "hostname": "ONE-M6-A937EEE4" + "name": "m6-529c1cbc", + "hostname": "ONE-M6-529C1CBC" }, "teardown": { "absent": true @@ -65,14 +65,14 @@ { "path": "Lifecycle.one", "bytes": 62200, - "sha256": "904bf500864584bff80c83dfbdf957de109836964a1dd7e97810df042cee0efa", - "mtime_ns": 1788941881329857761 + "sha256": "1799f81b54d3d38ff66e420e83d4a242711cae40e52c8c3a2fb8d7886c43fd6b", + "mtime_ns": 1789121644594396710 } ] }, "group-03-selected-group-move": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpqpnmdqos", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpukazpfqa", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -90,8 +90,8 @@ } }, "machine": { - "name": "m6-1b35b14a", - "hostname": "ONE-M6-1B35B14A" + "name": "m6-757551a0", + "hostname": "ONE-M6-757551A0" }, "teardown": { "absent": true @@ -100,14 +100,14 @@ { "path": "Lifecycle.one", "bytes": 62664, - "sha256": "5a3d665f5da9a1c8aee3339d368bb1fdcb2e00e7aa0422478758bce84f5646f0", - "mtime_ns": 1788941881601421859 + "sha256": "7f9d34875babd03e06d9c1c19e308651a32f60128a82fc3ebe4ceb7c26b4ff8d", + "mtime_ns": 1789121644927702132 } ] }, "group-04-subpage-move": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp93masgxw", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmphwmxgpck", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -125,8 +125,8 @@ } }, "machine": { - "name": "m6-390f4ff1", - "hostname": "ONE-M6-390F4FF1" + "name": "m6-7b82f5fd", + "hostname": "ONE-M6-7B82F5FD" }, "teardown": { "absent": true @@ -135,14 +135,14 @@ { "path": "Lifecycle.one", "bytes": 66464, - "sha256": "f758f4f74f21734349275e839e78a39454d00e1c546dd6b29f936ed9adef752a", - "mtime_ns": 1788941881947544959 + "sha256": "698e65aec54d2096cb78fe19daf07002cd4cff49139cbe2a8ae515cb8a07f75d", + "mtime_ns": 1789121645336160751 } ] }, "group-05-insert-before-subpage": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmph61roaik", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpq5zb96wg", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -160,8 +160,8 @@ } }, "machine": { - "name": "m6-c13e29ae", - "hostname": "ONE-M6-C13E29AE" + "name": "m6-797c5e28", + "hostname": "ONE-M6-797C5E28" }, "teardown": { "absent": true @@ -170,14 +170,14 @@ { "path": "Lifecycle.one", "bytes": 68104, - "sha256": "fbacddf7e10d230f3ffc4e28a967cfa43d378e598bff5dc5d2a532f8cb64091d", - "mtime_ns": 1788941882292841519 + "sha256": "6d156380c9a4fe2be62662f6cb18fb2dad0423c4baf6c7ff7cc74a0fb6f39ec7", + "mtime_ns": 1789121645747767832 } ] }, "group-06-promoted-level-two": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpyvldz7f2", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp8h8axamn", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -195,8 +195,8 @@ } }, "machine": { - "name": "m6-84bacce5", - "hostname": "ONE-M6-84BACCE5" + "name": "m6-5f2ea96f", + "hostname": "ONE-M6-5F2EA96F" }, "teardown": { "absent": true @@ -205,14 +205,14 @@ { "path": "Lifecycle.one", "bytes": 70512, - "sha256": "89163b8a78ef94dc540ef00d3d05fca2014fa9e3b88a7e73e6a574c11e6d39bd", - "mtime_ns": 1788941882577853637 + "sha256": "f44639cf506727cfce4607d83a7ec231ee7daa04d918fdb9ff198094bf0c11a4", + "mtime_ns": 1789121646097525529 } ] }, "group-07-promoted-root": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpw7p2frw3", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpmryvpdbi", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -230,8 +230,8 @@ } }, "machine": { - "name": "m6-0e532964", - "hostname": "ONE-M6-0E532964" + "name": "m6-d8ac8bbf", + "hostname": "ONE-M6-D8AC8BBF" }, "teardown": { "absent": true @@ -240,14 +240,14 @@ { "path": "Lifecycle.one", "bytes": 73840, - "sha256": "7952a0e1d9211af424cb5af2745171d8e745f7583d0e748762d7e34314bdb1c8", - "mtime_ns": 1788941882943040331 + "sha256": "aade5170cde10160d9f3840a8d0bad944c5bbd285b6efb79831ebd17a4cb5b72", + "mtime_ns": 1789121646529054140 } ] }, "group-08-collapsed-group-move": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpopp2ih5l", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp89aydbgy", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -265,8 +265,8 @@ } }, "machine": { - "name": "m6-8da7d856", - "hostname": "ONE-M6-8DA7D856" + "name": "m6-89b4b25f", + "hostname": "ONE-M6-89B4B25F" }, "teardown": { "absent": true @@ -275,14 +275,14 @@ { "path": "Lifecycle.one", "bytes": 75656, - "sha256": "0be5eaca3172c3455b9b85946e0425e62cff0f61ab8fee75d8d0c4b0f6706248", - "mtime_ns": 1788941883308990065 + "sha256": "69eab3043565feb74c1242cd4b2407e83990feeec43c959c5aea61c9ea156337", + "mtime_ns": 1789121646959281959 } ] }, "group-single-page": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpyqtm83w3", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp2iu0f00f", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -300,8 +300,8 @@ } }, "machine": { - "name": "m6-2e6f3792", - "hostname": "ONE-M6-2E6F3792" + "name": "m6-133773f4", + "hostname": "ONE-M6-133773F4" }, "teardown": { "absent": true @@ -310,14 +310,14 @@ { "path": "Lifecycle.one", "bytes": 64016, - "sha256": "a256c8f761cfe6465ccbe37852794c5760bbd46a6993a821e535ced69c38d510", - "mtime_ns": 1788941883672568012 + "sha256": "8f1d397cf23969ee336661f188879f1d418741878b506f6682a6f86d238c5c33", + "mtime_ns": 1789121647383619936 } ] }, "indent-01-demoted-parent": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpono2kv8d", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpzu_h46n7", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -335,8 +335,8 @@ } }, "machine": { - "name": "m6-12ecb7c4", - "hostname": "ONE-M6-12ECB7C4" + "name": "m6-b88a1aec", + "hostname": "ONE-M6-B88A1AEC" }, "teardown": { "absent": true @@ -345,14 +345,14 @@ { "path": "Lifecycle.one", "bytes": 60192, - "sha256": "7d65268efd6ff873d370ff776062c378674b760d6adbeac4a19dc9fd28cb61c1", - "mtime_ns": 1788941878214798774 + "sha256": "edfc61dcb2e55d6bf3afccc72e523a1fa9d253fa5c5b947f36cbb152b9446fdf", + "mtime_ns": 1789121640873938491 } ] }, "indent-02-promoted-parent": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpu3zp0wxf", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp5vi4lp1k", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -370,8 +370,8 @@ } }, "machine": { - "name": "m6-8695a32c", - "hostname": "ONE-M6-8695A32C" + "name": "m6-6e03355e", + "hostname": "ONE-M6-6E03355E" }, "teardown": { "absent": true @@ -380,14 +380,14 @@ { "path": "Lifecycle.one", "bytes": 62680, - "sha256": "bb97693bb9b9ee756b71b46ec9f8236994af5ebcd17b4162b799d25687c03bae", - "mtime_ns": 1788941878501070348 + "sha256": "fc93aa64ff966e2f5557bac1e38c0768df378ee5865c0e527d672c6f31c76761", + "mtime_ns": 1789121641216798594 } ] }, "indent-03-selected-group-move": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpkkgri9eo", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp41s5b9uu", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -405,8 +405,8 @@ } }, "machine": { - "name": "m6-79f79370", - "hostname": "ONE-M6-79F79370" + "name": "m6-a3820ebf", + "hostname": "ONE-M6-A3820EBF" }, "teardown": { "absent": true @@ -415,14 +415,14 @@ { "path": "Lifecycle.one", "bytes": 63752, - "sha256": "38e4a1ea6410eb097653c8d3bd74abdc5ac28f4616ebd04eb32e332e9a34179a", - "mtime_ns": 1788941878785592590 + "sha256": "93548ad527574f6a19f2288b751746754bf78037b8229e5408aa1af8d5e4f94b", + "mtime_ns": 1789121641556517733 } ] }, "indent-04-subpage-move": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpnaob6ged", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpz1pbk0ta", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -440,8 +440,8 @@ } }, "machine": { - "name": "m6-24815dc0", - "hostname": "ONE-M6-24815DC0" + "name": "m6-32450ad0", + "hostname": "ONE-M6-32450AD0" }, "teardown": { "absent": true @@ -450,14 +450,14 @@ { "path": "Lifecycle.one", "bytes": 66856, - "sha256": "beeb72e90c663376bf6f378c256b44a58f74adcd7efa75b685ab163521cb899c", - "mtime_ns": 1788941879132236190 + "sha256": "d566d07a037d5d3552ddd2d64f42f793c5823e4209dd340758c1847a21a5dc93", + "mtime_ns": 1789121641964058226 } ] }, "indent-05-insert-before-subpage": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp4c2gwxhe", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpf5e2rlwx", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -475,8 +475,8 @@ } }, "machine": { - "name": "m6-bf5daf50", - "hostname": "ONE-M6-BF5DAF50" + "name": "m6-1b265f06", + "hostname": "ONE-M6-1B265F06" }, "teardown": { "absent": true @@ -485,14 +485,14 @@ { "path": "Lifecycle.one", "bytes": 67160, - "sha256": "eebeea1c5b675eb9114dc1ab096ccd71536e6b077a6bb4cfbac6ca8c0b674c71", - "mtime_ns": 1788941879409552027 + "sha256": "03715fdc38a5e3a369e49e5abe8e55fa82da4ffb90c304987ca5f66edf545f7b", + "mtime_ns": 1789121642301975530 } ] }, "indent-06-promoted-level-two": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpkdhy5hsi", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmplg_djgsc", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -510,8 +510,8 @@ } }, "machine": { - "name": "m6-7cb23bfd", - "hostname": "ONE-M6-7CB23BFD" + "name": "m6-e0ac64b2", + "hostname": "ONE-M6-E0AC64B2" }, "teardown": { "absent": true @@ -520,14 +520,14 @@ { "path": "Lifecycle.one", "bytes": 71448, - "sha256": "fe37a1b0a3691daf93b172d42f929905a5c9c9b5caba4e6e3b67e6a59f5f7de5", - "mtime_ns": 1788941879701176676 + "sha256": "f66bd60a8834f9770060ae457a30aff734bf1777b0b21a6de9d8d19570777b3e", + "mtime_ns": 1789121642659393696 } ] }, "indent-07-promoted-root": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpi18ckmh6", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpksr_pqio", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -545,8 +545,8 @@ } }, "machine": { - "name": "m6-d1a70cb9", - "hostname": "ONE-M6-D1A70CB9" + "name": "m6-167fb3cd", + "hostname": "ONE-M6-167FB3CD" }, "teardown": { "absent": true @@ -555,14 +555,14 @@ { "path": "Lifecycle.one", "bytes": 73840, - "sha256": "276195070618d102292a0455590ceb9bbf6d26106b4887cda73252fa149d1b63", - "mtime_ns": 1788941880070772321 + "sha256": "0d48cefd731266249f136cf48bf70e1899942e390a3c40bec04b058c8b20c738", + "mtime_ns": 1789121643082641295 } ] }, "indent-08-collapsed-group-move": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpqphw6cgh", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp9pe3v7df", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -580,8 +580,8 @@ } }, "machine": { - "name": "m6-d141faaf", - "hostname": "ONE-M6-D141FAAF" + "name": "m6-9d58611a", + "hostname": "ONE-M6-9D58611A" }, "teardown": { "absent": true @@ -590,14 +590,14 @@ { "path": "Lifecycle.one", "bytes": 74056, - "sha256": "250a938806af76fc3ed8b917fcbd6161694000f2d287eb491ad134586b7a2fa2", - "mtime_ns": 1788941880425063366 + "sha256": "c4ff8e01f64f3ad05e44ae4ff1dd65286985d7b3ffee478d42e7e0ea41d55024", + "mtime_ns": 1789121643503140348 } ] }, "indent-single-page": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpey9_i1nq", + "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmp9_ggdkk6", "expected_pages": 9, "author": null, "author_timeout_seconds": 600, @@ -615,8 +615,8 @@ } }, "machine": { - "name": "m6-809753e8", - "hostname": "ONE-M6-809753E8" + "name": "m6-060e8528", + "hostname": "ONE-M6-060E8528" }, "teardown": { "absent": true @@ -625,15 +625,15 @@ { "path": "Lifecycle.one", "bytes": 64312, - "sha256": "19c5d537b172a6ceeceffb8aa72e370c08584a55f18619aef5bdcbb0c7cca935", - "mtime_ns": 1788941880706173615 + "sha256": "3dadcab935fa149e6d732f3c8fc29e44006197a76572212eafbcd7f5b09cda59", + "mtime_ns": 1789121643843763906 } ] } }, "twelve-clients": { "run": { - "notebook": "/private/var/folders/90/4f4rngds01j55ggdj_vglk_c0000gn/T/tmpauflzr4r", + "notebook": "/private/tmp/m33/page-clients2/candidate", "expected_pages": 37, "author": null, "author_timeout_seconds": 600, @@ -651,8 +651,8 @@ } }, "machine": { - "name": "m6-87535bf3", - "hostname": "ONE-M6-87535BF3" + "name": "m6-16c2e4d4", + "hostname": "ONE-M6-16C2E4D4" }, "teardown": { "absent": true @@ -660,9 +660,9 @@ "source": [ { "path": "pages.one", - "bytes": 149680, - "sha256": "c1f90ad7adb5568be651fdf59009c8ccbb11ca772973155d93caa45b14f79665", - "mtime_ns": 1788941460936854212 + "bytes": 155344, + "sha256": "623ade8b5ee6fc837ae63d5293791039ecd17da9cb8bc5e243ea20cadf37958c", + "mtime_ns": 1789124063040528117 } ] }, diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/candidate/manifest.json b/corpus/page-lifecycle/offline-edits/twelve-clients/candidate/manifest.json index 82e0c6e06d029c1ed259f92743ef1a3ae3ed66ba..6848c514d3c0d4f1149f35c3bf02604813bc5116 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/candidate/manifest.json +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/candidate/manifest.json @@ -1,151 +1,151 @@ { "expected_order": [ [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", 1 ], [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", 1 ], [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", 1 ], [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", + "{C837A033-F055-4455-B45F-17D82016921C},1", 2 ], [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", 1 ], [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", 1 ], [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", 2 ], [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", 1 ], [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", 1 ], [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", 2 ], [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", 1 ], [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", 1 ], [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", 2 ], [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", 1 ], [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", 1 ], [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", 2 ], [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", 1 ], [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", 1 ], [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", 2 ], [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", 1 ], [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", 1 ], [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", 2 ], [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", 1 ], [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", 1 ], [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", 2 ], [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", 1 ], [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", + "{754FA957-C432-4502-A5CF-EE44449462C0},1", 1 ], [ - "{12C643DD-9593-4641-B945-124257947ADD},1", + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", 2 ], [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", 1 ], [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", 1 ], [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", 2 ], [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", 1 ], [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", 1 ], [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", 2 ], [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", 1 ], [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", 1 ], [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", 2 ] ], @@ -158,1472 +158,1204 @@ "edits": [ { "guid": [ - 66, - 8, - 214, - 26, - 163, - 202, - 186, - 65, - 133, - 85, - 205, - 48, - 31, 86, - 240, - 18 - ], - "level": 1, - "position": { - "Before": "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1" - }, - "space": "{EED86E95-3017-46A7-B26B-991C815839B7},1" - }, - { - "guid": [ - 175, - 129, - 69, - 10, - 173, - 37, - 210, - 68, - 143, - 124, - 194, - 27, - 84, - 67, - 127, - 64 - ], - "level": 2, - "position": "Keep", - "space": "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1" - } - ], - "observed": [ - [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", - 1 - ], - [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", - 1 - ], - [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", - 1 - ], - [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", - 1 - ], - [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", - 1 - ], - [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", - 1 - ], - [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", - 1 - ], - [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", - 1 - ], - [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", - 1 - ], - [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", - 1 - ], - [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", - 1 - ], - [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", - 1 - ], - [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", - 1 - ], - [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", - 1 - ], - [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", - 1 - ], - [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", - 1 - ], - [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", - 1 - ], - [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", - 1 - ], - [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", - 1 - ], - [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", - 1 - ], - [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", - 1 - ], - [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", - 1 - ], - [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", - 1 - ], - [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", - 1 - ], - [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", - 1 - ], - [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", - 1 - ], - [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", - 1 - ], - [ - "{12C643DD-9593-4641-B945-124257947ADD},1", - 1 - ], - [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", - 1 - ], - [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", - 1 - ], - [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", - 1 - ], - [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", - 1 - ], - [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", - 1 - ], - [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", - 1 - ], - [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", - 1 - ], - [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", - 1 - ], - [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", - 1 - ] - ] - } - }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" - }, - { - "id": 2, - "operation": { - "Insert": { - "author": "Author", - "created": 1473408656, - "guid": [ - 169, - 96, - 38, - 145, - 180, - 69, - 222, - 67, - 132, - 192, - 3, - 247, - 73, - 62, - 35, - 159 - ], - "parent": "{EED86E95-3017-46A7-B26B-991C815839B7},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } - }, - "text": "Actor 0 🦀 é" - } - }, - "space": "{EED86E95-3017-46A7-B26B-991C815839B7},1" - } - ], - [ - { - "id": 1, - "operation": { - "Pages": { - "edits": [ - { - "guid": [ - 172, - 161, - 73, - 98, - 42, - 175, - 7, - 71, - 172, - 34, - 169, - 112, - 203, - 118, - 56, - 125 - ], - "level": 1, - "position": { - "Before": "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1" - }, - "space": "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1" - }, - { - "guid": [ - 192, 0, - 119, - 124, - 245, - 45, - 114, - 68, - 165, - 167, - 212, - 208, - 73, - 144, - 1, - 1 - ], - "level": 2, - "position": "Keep", - "space": "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1" - } - ], - "observed": [ - [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", - 1 - ], - [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", - 1 - ], - [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", - 1 - ], - [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", - 1 - ], - [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", - 1 - ], - [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", - 1 - ], - [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", - 1 - ], - [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", - 1 - ], - [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", - 1 - ], - [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", - 1 - ], - [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", - 1 - ], - [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", - 1 - ], - [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", - 1 - ], - [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", - 1 - ], - [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", - 1 - ], - [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", - 1 - ], - [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", - 1 - ], - [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", - 1 - ], - [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", - 1 - ], - [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", - 1 - ], - [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", - 1 - ], - [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", - 1 - ], - [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", - 1 - ], - [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", - 1 - ], - [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", - 1 - ], - [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", - 1 - ], - [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", - 1 - ], - [ - "{12C643DD-9593-4641-B945-124257947ADD},1", - 1 - ], - [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", - 1 - ], - [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", - 1 - ], - [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", - 1 - ], - [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", - 1 - ], - [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", - 1 - ], - [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", - 1 - ], - [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", - 1 - ], - [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", - 1 - ], - [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", - 1 - ] - ] - } - }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" - }, - { - "id": 2, - "operation": { - "Insert": { - "author": "Author", - "created": 1473408656, - "guid": [ - 103, - 211, - 55, - 116, - 145, - 175, - 246, - 72, - 188, - 193, - 248, - 191, - 133, - 8, - 103, - 251 - ], - "parent": "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } - }, - "text": "Actor 1 🦀 é" - } - }, - "space": "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1" - } - ], - [ - { - "id": 1, - "operation": { - "Pages": { - "edits": [ - { - "guid": [ - 186, - 235, - 251, - 180, - 99, - 157, - 152, - 66, - 133, - 236, - 95, - 58, - 75, - 235, - 31, - 11 - ], - "level": 1, - "position": { - "Before": "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1" - }, - "space": "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1" - }, - { - "guid": [ - 212, - 110, - 96, - 109, - 211, - 163, - 247, - 70, - 139, - 235, - 189, - 123, - 151, - 176, - 53, - 248 - ], - "level": 2, - "position": "Keep", - "space": "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1" - } - ], - "observed": [ - [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", - 1 - ], - [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", - 1 - ], - [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", - 1 - ], - [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", - 1 - ], - [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", - 1 - ], - [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", - 1 - ], - [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", - 1 - ], - [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", - 1 - ], - [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", - 1 - ], - [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", - 1 - ], - [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", - 1 - ], - [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", - 1 - ], - [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", - 1 - ], - [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", - 1 - ], - [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", - 1 - ], - [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", - 1 - ], - [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", - 1 - ], - [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", - 1 - ], - [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", - 1 - ], - [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", - 1 - ], - [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", - 1 - ], - [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", - 1 - ], - [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", - 1 - ], - [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", - 1 - ], - [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", - 1 - ], - [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", - 1 - ], - [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", - 1 - ], - [ - "{12C643DD-9593-4641-B945-124257947ADD},1", - 1 - ], - [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", - 1 - ], - [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", - 1 - ], - [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", - 1 - ], - [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", - 1 - ], - [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", - 1 - ], - [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", - 1 - ], - [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", - 1 - ], - [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", - 1 - ], - [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", - 1 - ] - ] - } - }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" - }, - { - "id": 2, - "operation": { - "Insert": { - "author": "Author", - "created": 1473408656, - "guid": [ - 171, - 143, - 40, - 139, - 204, - 11, - 117, - 64, - 133, - 104, - 4, - 206, - 154, - 151, - 142, - 27 - ], - "parent": "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } - }, - "text": "Actor 2 🦀 é" - } - }, - "space": "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1" - } - ], - [ - { - "id": 1, - "operation": { - "Pages": { - "edits": [ - { - "guid": [ - 188, - 81, + 111, + 192, 138, - 165, - 126, - 205, - 194, - 74, - 131, + 101, + 192, + 76, 185, - 205, - 113, - 158, - 13, - 18, - 70 - ], - "level": 1, - "position": { - "Before": "{9C56CBC3-690B-4900-8A07-A43600F7477B},1" - }, - "space": "{914C89B2-A95E-4992-8D2B-B533C7326D57},1" - }, - { - "guid": [ - 55, - 235, - 66, - 120, - 1, - 129, - 35, - 79, - 158, - 92, - 115, - 100, - 177, - 222, - 61, - 141 - ], - "level": 2, - "position": "Keep", - "space": "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1" - } - ], - "observed": [ - [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", - 1 - ], - [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", - 1 - ], - [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", - 1 - ], - [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", - 1 - ], - [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", - 1 - ], - [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", - 1 - ], - [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", - 1 - ], - [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", - 1 - ], - [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", - 1 - ], - [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", - 1 - ], - [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", - 1 - ], - [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", - 1 - ], - [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", - 1 - ], - [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", - 1 - ], - [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", - 1 - ], - [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", - 1 - ], - [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", - 1 - ], - [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", - 1 - ], - [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", - 1 - ], - [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", - 1 - ], - [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", - 1 - ], - [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", - 1 - ], - [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", - 1 - ], - [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", - 1 - ], - [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", - 1 - ], - [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", - 1 - ], - [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", - 1 - ], - [ - "{12C643DD-9593-4641-B945-124257947ADD},1", - 1 - ], - [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", - 1 - ], - [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", - 1 - ], - [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", - 1 - ], - [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", - 1 - ], - [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", - 1 - ], - [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", - 1 - ], - [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", - 1 - ], - [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", - 1 - ], - [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", - 1 - ] - ] - } - }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" - }, - { - "id": 2, - "operation": { - "Insert": { - "author": "Author", - "created": 1473408656, - "guid": [ - 143, - 233, - 248, - 215, - 61, - 12, - 0, - 79, - 148, - 136, - 19, - 105, - 195, - 219, - 117, - 136 - ], - "parent": "{914C89B2-A95E-4992-8D2B-B533C7326D57},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } - }, - "text": "Actor 3 🦀 é" - } - }, - "space": "{914C89B2-A95E-4992-8D2B-B533C7326D57},1" - } - ], - [ - { - "id": 1, - "operation": { - "Pages": { - "edits": [ - { - "guid": [ - 34, - 42, - 214, - 244, - 21, - 119, - 161, - 72, - 138, - 36, - 0, + 152, + 225, 226, - 83, - 220, - 182, - 42 + 79, + 192, + 46, + 40 ], "level": 1, "position": { - "Before": "{73479EE6-9FC0-4474-A702-E22C734FC42B},1" + "Before": "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1" }, - "space": "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1" + "space": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1" }, { "guid": [ - 4, - 175, - 37, - 45, - 204, - 188, - 216, - 74, - 162, - 17, - 48, - 219, - 8, - 158, - 57, - 248 - ], - "level": 2, - "position": "Keep", - "space": "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1" - } - ], - "observed": [ - [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", - 1 - ], - [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", - 1 - ], - [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", - 1 - ], - [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", - 1 - ], - [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", - 1 - ], - [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", - 1 - ], - [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", - 1 - ], - [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", - 1 - ], - [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", - 1 - ], - [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", - 1 - ], - [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", - 1 - ], - [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", - 1 - ], - [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", - 1 - ], - [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", - 1 - ], - [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", - 1 - ], - [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", - 1 - ], - [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", - 1 - ], - [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", - 1 - ], - [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", - 1 - ], - [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", - 1 - ], - [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", - 1 - ], - [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", - 1 - ], - [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", - 1 - ], - [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", - 1 - ], - [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", - 1 - ], - [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", - 1 - ], - [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", - 1 - ], - [ - "{12C643DD-9593-4641-B945-124257947ADD},1", - 1 - ], - [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", - 1 - ], - [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", - 1 - ], - [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", - 1 - ], - [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", - 1 - ], - [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", - 1 - ], - [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", - 1 - ], - [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", - 1 - ], - [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", - 1 - ], - [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", - 1 - ] - ] - } - }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" - }, - { - "id": 2, - "operation": { - "Insert": { - "author": "Author", - "created": 1473408656, - "guid": [ - 85, - 203, - 251, - 4, - 53, - 54, - 25, - 75, - 131, - 132, - 88, - 128, - 39, - 160, - 107, - 23 - ], - "parent": "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } - }, - "text": "Actor 4 🦀 é" - } - }, - "space": "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1" - } - ], - [ - { - "id": 1, - "operation": { - "Pages": { - "edits": [ - { - "guid": [ + 133, + 52, + 67, 104, - 223, - 221, - 220, - 195, - 253, - 140, - 73, - 138, - 112, - 221, - 253, - 145, - 92, - 153, + 247, + 13, + 120, + 79, + 190, + 78, + 126, + 126, + 12, + 116, + 230, 238 ], + "level": 2, + "position": "Keep", + "space": "{C837A033-F055-4455-B45F-17D82016921C},1" + } + ], + "observed": [ + [ + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", + 1 + ], + [ + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", + 1 + ], + [ + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", + 1 + ], + [ + "{C837A033-F055-4455-B45F-17D82016921C},1", + 1 + ], + [ + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", + 1 + ], + [ + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", + 1 + ], + [ + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", + 1 + ], + [ + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", + 1 + ], + [ + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", + 1 + ], + [ + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", + 1 + ], + [ + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", + 1 + ], + [ + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", + 1 + ], + [ + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", + 1 + ], + [ + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", + 1 + ], + [ + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", + 1 + ], + [ + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", + 1 + ], + [ + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", + 1 + ], + [ + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", + 1 + ], + [ + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", + 1 + ], + [ + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", + 1 + ], + [ + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", + 1 + ], + [ + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", + 1 + ], + [ + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", + 1 + ], + [ + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", + 1 + ], + [ + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", + 1 + ], + [ + "{754FA957-C432-4502-A5CF-EE44449462C0},1", + 1 + ], + [ + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", + 1 + ], + [ + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", + 1 + ], + [ + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", + 1 + ], + [ + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", + 1 + ], + [ + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", + 1 + ], + [ + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", + 1 + ], + [ + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", + 1 + ], + [ + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", + 1 + ], + [ + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", + 1 + ], + [ + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", + 1 + ], + [ + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", + 1 + ] + ] + } + }, + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" + }, + { + "id": 2, + "operation": { + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{3517C5BC-B40B-45E6-8324-BAB9403F7F3B},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{D76D17C9-C3D7-49A2-A78E-305604ABA8AF},0", + "tags": [], + "text": { + "spans": [ + { + "end": 16, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 0 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{1A80E3C3-180F-42AB-B946-1A365F043826},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + }, + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } + } + }, + "space": "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1" + } + ], + [ + { + "id": 1, + "operation": { + "Pages": { + "edits": [ + { + "guid": [ + 183, + 11, + 130, + 190, + 141, + 83, + 119, + 77, + 133, + 112, + 123, + 250, + 37, + 199, + 26, + 252 + ], "level": 1, "position": { - "Before": "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1" + "Before": "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1" }, - "space": "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1" + "space": "{57E835EA-2799-4118-B55C-7BB1E51C6941},1" }, { "guid": [ - 120, - 153, - 169, - 147, - 181, - 108, - 47, - 66, - 154, - 71, - 185, - 89, - 106, - 88, - 140, - 240 + 252, + 97, + 42, + 186, + 167, + 236, + 97, + 65, + 143, + 137, + 54, + 20, + 165, + 72, + 170, + 170 ], "level": 2, "position": "Keep", - "space": "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1" + "space": "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1" } ], "observed": [ [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", 1 ], [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", 1 ], [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", 1 ], [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", + "{C837A033-F055-4455-B45F-17D82016921C},1", 1 ], [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", 1 ], [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", 1 ], [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", 1 ], [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", 1 ], [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", 1 ], [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", 1 ], [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", 1 ], [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", 1 ], [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", 1 ], [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", 1 ], [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", 1 ], [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", 1 ], [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", 1 ], [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", 1 ], [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", 1 ], [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", 1 ], [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", 1 ], [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", 1 ], [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", 1 ], [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", 1 ], [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", 1 ], [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", + "{754FA957-C432-4502-A5CF-EE44449462C0},1", 1 ], [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", 1 ], [ - "{12C643DD-9593-4641-B945-124257947ADD},1", + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", 1 ], [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", 1 ], [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", 1 ], [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", 1 ], [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", 1 ], [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", 1 ], [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", 1 ], [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", 1 ], [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", 1 ], [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", 1 ] ] } }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" }, { "id": 2, "operation": { - "Insert": { - "author": "Author", - "created": 1473408656, - "guid": [ - 255, - 149, - 116, - 40, - 154, - 131, - 139, - 73, - 186, - 135, - 152, - 112, - 107, - 42, - 81, - 135 - ], - "parent": "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{57E835EA-2799-4118-B55C-7BB1E51C6941},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{0817794A-7E1B-41EF-A811-A0F65EE1CE99},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{BB519837-B3F7-4C9B-A428-3D9696CA0070},0", + "tags": [], + "text": { + "spans": [ + { + "end": 16, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 1 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{88AA1A5C-2020-4249-BF25-62D5B4957CC6},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{57E835EA-2799-4118-B55C-7BB1E51C6941},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{57E835EA-2799-4118-B55C-7BB1E51C6941},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{57E835EA-2799-4118-B55C-7BB1E51C6941},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{57E835EA-2799-4118-B55C-7BB1E51C6941},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{57E835EA-2799-4118-B55C-7BB1E51C6941},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" }, - "text": "Actor 5 🦀 é" + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{57E835EA-2799-4118-B55C-7BB1E51C6941},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{57E835EA-2799-4118-B55C-7BB1E51C6941},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{57E835EA-2799-4118-B55C-7BB1E51C6941},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{57E835EA-2799-4118-B55C-7BB1E51C6941},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{57E835EA-2799-4118-B55C-7BB1E51C6941},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{57E835EA-2799-4118-B55C-7BB1E51C6941},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } } }, - "space": "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1" + "space": "{57E835EA-2799-4118-B55C-7BB1E51C6941},1" } ], [ @@ -1634,980 +1366,4828 @@ "edits": [ { "guid": [ + 172, 90, - 196, - 10, - 13, - 157, - 154, + 29, + 103, + 245, + 250, + 220, + 74, + 178, + 30, + 220, + 119, + 124, + 185, + 174, + 198 + ], + "level": 1, + "position": { + "Before": "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1" + }, + "space": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1" + }, + { + "guid": [ + 43, + 65, + 11, + 224, + 49, + 201, + 193, + 78, + 183, + 88, + 16, + 59, + 113, + 75, + 60, + 236 + ], + "level": 2, + "position": "Keep", + "space": "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1" + } + ], + "observed": [ + [ + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", + 1 + ], + [ + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", + 1 + ], + [ + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", + 1 + ], + [ + "{C837A033-F055-4455-B45F-17D82016921C},1", + 1 + ], + [ + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", + 1 + ], + [ + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", + 1 + ], + [ + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", + 1 + ], + [ + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", + 1 + ], + [ + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", + 1 + ], + [ + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", + 1 + ], + [ + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", + 1 + ], + [ + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", + 1 + ], + [ + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", + 1 + ], + [ + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", + 1 + ], + [ + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", + 1 + ], + [ + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", + 1 + ], + [ + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", + 1 + ], + [ + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", + 1 + ], + [ + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", + 1 + ], + [ + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", + 1 + ], + [ + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", + 1 + ], + [ + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", + 1 + ], + [ + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", + 1 + ], + [ + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", + 1 + ], + [ + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", + 1 + ], + [ + "{754FA957-C432-4502-A5CF-EE44449462C0},1", + 1 + ], + [ + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", + 1 + ], + [ + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", + 1 + ], + [ + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", + 1 + ], + [ + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", + 1 + ], + [ + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", + 1 + ], + [ + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", + 1 + ], + [ + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", + 1 + ], + [ + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", + 1 + ], + [ + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", + 1 + ], + [ + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", + 1 + ], + [ + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", + 1 + ] + ] + } + }, + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" + }, + { + "id": 2, + "operation": { + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{5C473AF1-9E02-4E9A-BFC8-9E9CBBB289E1},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{B412B53F-86FF-4462-8750-FB4D73532A63},0", + "tags": [], + "text": { + "spans": [ + { + "end": 16, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 2 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{ADE09A18-DF3F-4995-BF31-D453831561D7},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + }, + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } + } + }, + "space": "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1" + } + ], + [ + { + "id": 1, + "operation": { + "Pages": { + "edits": [ + { + "guid": [ + 220, + 22, + 109, + 148, + 199, + 94, + 248, + 76, + 168, + 183, + 186, + 119, + 172, + 76, + 100, + 21 + ], + "level": 1, + "position": { + "Before": "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1" + }, + "space": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1" + }, + { + "guid": [ + 177, + 33, + 19, + 250, + 24, + 200, + 209, + 74, + 175, + 22, + 210, + 214, + 251, + 44, + 125, + 123 + ], + "level": 2, + "position": "Keep", + "space": "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1" + } + ], + "observed": [ + [ + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", + 1 + ], + [ + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", + 1 + ], + [ + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", + 1 + ], + [ + "{C837A033-F055-4455-B45F-17D82016921C},1", + 1 + ], + [ + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", + 1 + ], + [ + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", + 1 + ], + [ + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", + 1 + ], + [ + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", + 1 + ], + [ + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", + 1 + ], + [ + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", + 1 + ], + [ + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", + 1 + ], + [ + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", + 1 + ], + [ + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", + 1 + ], + [ + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", + 1 + ], + [ + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", + 1 + ], + [ + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", + 1 + ], + [ + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", + 1 + ], + [ + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", + 1 + ], + [ + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", + 1 + ], + [ + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", + 1 + ], + [ + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", + 1 + ], + [ + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", + 1 + ], + [ + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", + 1 + ], + [ + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", + 1 + ], + [ + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", + 1 + ], + [ + "{754FA957-C432-4502-A5CF-EE44449462C0},1", + 1 + ], + [ + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", + 1 + ], + [ + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", + 1 + ], + [ + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", + 1 + ], + [ + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", + 1 + ], + [ + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", + 1 + ], + [ + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", + 1 + ], + [ + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", + 1 + ], + [ + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", + 1 + ], + [ + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", + 1 + ], + [ + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", + 1 + ], + [ + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", + 1 + ] + ] + } + }, + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" + }, + { + "id": 2, + "operation": { + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{930570FE-0B42-4598-A6B7-74E90CE526D4},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{917ABDDE-781F-45C9-90B5-A63A0FBCAEE4},0", + "tags": [], + "text": { + "spans": [ + { + "end": 16, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 3 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{A4C1F94C-C7D9-4C9A-8F97-D7437FF3F499},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + }, + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } + } + }, + "space": "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1" + } + ], + [ + { + "id": 1, + "operation": { + "Pages": { + "edits": [ + { + "guid": [ + 240, + 213, + 212, + 204, + 25, + 156, + 182, + 67, + 143, + 206, + 96, + 209, + 2, + 198, + 208, + 94 + ], + "level": 1, + "position": { + "Before": "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1" + }, + "space": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1" + }, + { + "guid": [ + 82, + 173, + 19, + 143, + 3, + 17, + 177, + 66, + 183, + 218, + 131, + 72, + 199, + 191, 233, - 79, - 148, - 125, + 214 + ], + "level": 2, + "position": "Keep", + "space": "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1" + } + ], + "observed": [ + [ + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", + 1 + ], + [ + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", + 1 + ], + [ + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", + 1 + ], + [ + "{C837A033-F055-4455-B45F-17D82016921C},1", + 1 + ], + [ + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", + 1 + ], + [ + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", + 1 + ], + [ + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", + 1 + ], + [ + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", + 1 + ], + [ + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", + 1 + ], + [ + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", + 1 + ], + [ + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", + 1 + ], + [ + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", + 1 + ], + [ + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", + 1 + ], + [ + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", + 1 + ], + [ + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", + 1 + ], + [ + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", + 1 + ], + [ + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", + 1 + ], + [ + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", + 1 + ], + [ + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", + 1 + ], + [ + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", + 1 + ], + [ + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", + 1 + ], + [ + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", + 1 + ], + [ + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", + 1 + ], + [ + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", + 1 + ], + [ + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", + 1 + ], + [ + "{754FA957-C432-4502-A5CF-EE44449462C0},1", + 1 + ], + [ + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", + 1 + ], + [ + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", + 1 + ], + [ + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", + 1 + ], + [ + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", + 1 + ], + [ + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", + 1 + ], + [ + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", + 1 + ], + [ + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", + 1 + ], + [ + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", + 1 + ], + [ + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", + 1 + ], + [ + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", + 1 + ], + [ + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", + 1 + ] + ] + } + }, + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" + }, + { + "id": 2, + "operation": { + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{6A6E0E73-D2A2-4C82-B0B4-E8A3695B4D5A},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{A11F6C01-70A2-44C7-90E9-91C455D075E7},0", + "tags": [], + "text": { + "spans": [ + { + "end": 16, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 4 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{1B1F5EFD-3EE8-4031-BEB2-C3D27A332144},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + }, + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } + } + }, + "space": "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1" + } + ], + [ + { + "id": 1, + "operation": { + "Pages": { + "edits": [ + { + "guid": [ 170, - 133, - 213, - 12, - 242, - 187 - ], - "level": 1, - "position": { - "Before": "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1" - }, - "space": "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1" - }, - { - "guid": [ - 158, - 142, - 245, - 209, - 34, - 112, - 75, - 79, - 157, - 220, - 50, - 10, + 199, + 91, + 6, + 149, + 108, + 28, + 78, + 169, + 241, 201, - 168, + 191, + 131, + 111, + 13, + 167 + ], + "level": 1, + "position": { + "Before": "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1" + }, + "space": "{7E9041BD-301B-4B5B-9456-1C92050E4914},1" + }, + { + "guid": [ + 18, + 19, + 211, + 10, + 209, + 7, + 195, + 66, + 172, + 223, + 64, + 131, + 73, + 37, + 59, + 187 + ], + "level": 2, + "position": "Keep", + "space": "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1" + } + ], + "observed": [ + [ + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", + 1 + ], + [ + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", + 1 + ], + [ + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", + 1 + ], + [ + "{C837A033-F055-4455-B45F-17D82016921C},1", + 1 + ], + [ + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", + 1 + ], + [ + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", + 1 + ], + [ + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", + 1 + ], + [ + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", + 1 + ], + [ + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", + 1 + ], + [ + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", + 1 + ], + [ + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", + 1 + ], + [ + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", + 1 + ], + [ + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", + 1 + ], + [ + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", + 1 + ], + [ + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", + 1 + ], + [ + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", + 1 + ], + [ + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", + 1 + ], + [ + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", + 1 + ], + [ + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", + 1 + ], + [ + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", + 1 + ], + [ + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", + 1 + ], + [ + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", + 1 + ], + [ + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", + 1 + ], + [ + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", + 1 + ], + [ + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", + 1 + ], + [ + "{754FA957-C432-4502-A5CF-EE44449462C0},1", + 1 + ], + [ + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", + 1 + ], + [ + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", + 1 + ], + [ + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", + 1 + ], + [ + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", + 1 + ], + [ + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", + 1 + ], + [ + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", + 1 + ], + [ + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", + 1 + ], + [ + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", + 1 + ], + [ + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", + 1 + ], + [ + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", + 1 + ], + [ + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", + 1 + ] + ] + } + }, + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" + }, + { + "id": 2, + "operation": { + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{7E9041BD-301B-4B5B-9456-1C92050E4914},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{9D60419E-FC09-4547-8A45-5083DF888B11},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{A30B6C43-D76B-4629-B1C4-AC8F2FF6CBEE},0", + "tags": [], + "text": { + "spans": [ + { + "end": 16, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 5 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{AD6C0452-3D66-42DF-8865-A679E80B3F05},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{7E9041BD-301B-4B5B-9456-1C92050E4914},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{7E9041BD-301B-4B5B-9456-1C92050E4914},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{7E9041BD-301B-4B5B-9456-1C92050E4914},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{7E9041BD-301B-4B5B-9456-1C92050E4914},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{7E9041BD-301B-4B5B-9456-1C92050E4914},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + }, + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{7E9041BD-301B-4B5B-9456-1C92050E4914},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{7E9041BD-301B-4B5B-9456-1C92050E4914},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{7E9041BD-301B-4B5B-9456-1C92050E4914},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{7E9041BD-301B-4B5B-9456-1C92050E4914},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{7E9041BD-301B-4B5B-9456-1C92050E4914},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{7E9041BD-301B-4B5B-9456-1C92050E4914},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } + } + }, + "space": "{7E9041BD-301B-4B5B-9456-1C92050E4914},1" + } + ], + [ + { + "id": 1, + "operation": { + "Pages": { + "edits": [ + { + "guid": [ + 235, + 237, + 5, + 138, + 5, 243, - 47 - ], - "level": 2, - "position": "Keep", - "space": "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1" - } - ], - "observed": [ - [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", - 1 - ], - [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", - 1 - ], - [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", - 1 - ], - [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", - 1 - ], - [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", - 1 - ], - [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", - 1 - ], - [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", - 1 - ], - [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", - 1 - ], - [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", - 1 - ], - [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", - 1 - ], - [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", - 1 - ], - [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", - 1 - ], - [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", - 1 - ], - [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", - 1 - ], - [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", - 1 - ], - [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", - 1 - ], - [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", - 1 - ], - [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", - 1 - ], - [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", - 1 - ], - [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", - 1 - ], - [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", - 1 - ], - [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", - 1 - ], - [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", - 1 - ], - [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", - 1 - ], - [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", - 1 - ], - [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", - 1 - ], - [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", - 1 - ], - [ - "{12C643DD-9593-4641-B945-124257947ADD},1", - 1 - ], - [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", - 1 - ], - [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", - 1 - ], - [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", - 1 - ], - [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", - 1 - ], - [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", - 1 - ], - [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", - 1 - ], - [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", - 1 - ], - [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", - 1 - ], - [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", - 1 - ] - ] - } - }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" - }, - { - "id": 2, - "operation": { - "Insert": { - "author": "Author", - "created": 1473408656, - "guid": [ - 229, - 132, - 181, - 220, - 244, - 135, - 183, - 77, - 159, - 236, - 219, - 238, - 255, - 87, - 152, - 224 - ], - "parent": "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } - }, - "text": "Actor 6 🦀 é" - } - }, - "space": "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1" - } - ], - [ - { - "id": 1, - "operation": { - "Pages": { - "edits": [ - { - "guid": [ - 72, - 57, - 163, - 131, - 240, - 229, + 246, + 64, + 171, + 74, + 60, + 18, 85, - 76, + 228, + 190, + 225 + ], + "level": 1, + "position": { + "Before": "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1" + }, + "space": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1" + }, + { + "guid": [ + 154, + 175, + 180, + 52, + 102, + 86, + 241, + 66, + 129, + 168, + 227, + 222, + 69, + 213, + 66, + 187 + ], + "level": 2, + "position": "Keep", + "space": "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1" + } + ], + "observed": [ + [ + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", + 1 + ], + [ + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", + 1 + ], + [ + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", + 1 + ], + [ + "{C837A033-F055-4455-B45F-17D82016921C},1", + 1 + ], + [ + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", + 1 + ], + [ + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", + 1 + ], + [ + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", + 1 + ], + [ + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", + 1 + ], + [ + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", + 1 + ], + [ + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", + 1 + ], + [ + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", + 1 + ], + [ + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", + 1 + ], + [ + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", + 1 + ], + [ + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", + 1 + ], + [ + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", + 1 + ], + [ + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", + 1 + ], + [ + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", + 1 + ], + [ + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", + 1 + ], + [ + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", + 1 + ], + [ + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", + 1 + ], + [ + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", + 1 + ], + [ + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", + 1 + ], + [ + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", + 1 + ], + [ + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", + 1 + ], + [ + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", + 1 + ], + [ + "{754FA957-C432-4502-A5CF-EE44449462C0},1", + 1 + ], + [ + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", + 1 + ], + [ + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", + 1 + ], + [ + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", + 1 + ], + [ + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", + 1 + ], + [ + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", + 1 + ], + [ + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", + 1 + ], + [ + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", + 1 + ], + [ + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", + 1 + ], + [ + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", + 1 + ], + [ + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", + 1 + ], + [ + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", + 1 + ] + ] + } + }, + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" + }, + { + "id": 2, + "operation": { + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{69602664-892F-4537-9BFE-860DAD71A595},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{C533D56B-11C4-4867-B1E2-3E7520E7939A},0", + "tags": [], + "text": { + "spans": [ + { + "end": 16, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 6 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{FB8451BB-46B9-44F1-972F-A543F55F06B5},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + }, + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } + } + }, + "space": "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1" + } + ], + [ + { + "id": 1, + "operation": { + "Pages": { + "edits": [ + { + "guid": [ + 133, + 13, + 22, + 96, + 19, + 247, + 50, + 69, + 147, + 11, 146, - 253, - 111, - 184, - 27, + 207, + 6, + 153, + 24, + 94 + ], + "level": 1, + "position": { + "Before": "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1" + }, + "space": "{7F6702B3-C977-436F-82AF-403E2BE950E7},1" + }, + { + "guid": [ 159, + 110, + 141, + 39, + 253, + 156, + 37, 64, - 117 + 172, + 95, + 144, + 82, + 194, + 61, + 40, + 198 + ], + "level": 2, + "position": "Keep", + "space": "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1" + } + ], + "observed": [ + [ + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", + 1 + ], + [ + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", + 1 + ], + [ + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", + 1 + ], + [ + "{C837A033-F055-4455-B45F-17D82016921C},1", + 1 + ], + [ + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", + 1 + ], + [ + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", + 1 + ], + [ + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", + 1 + ], + [ + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", + 1 + ], + [ + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", + 1 + ], + [ + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", + 1 + ], + [ + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", + 1 + ], + [ + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", + 1 + ], + [ + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", + 1 + ], + [ + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", + 1 + ], + [ + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", + 1 + ], + [ + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", + 1 + ], + [ + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", + 1 + ], + [ + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", + 1 + ], + [ + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", + 1 + ], + [ + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", + 1 + ], + [ + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", + 1 + ], + [ + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", + 1 + ], + [ + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", + 1 + ], + [ + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", + 1 + ], + [ + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", + 1 + ], + [ + "{754FA957-C432-4502-A5CF-EE44449462C0},1", + 1 + ], + [ + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", + 1 + ], + [ + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", + 1 + ], + [ + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", + 1 + ], + [ + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", + 1 + ], + [ + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", + 1 + ], + [ + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", + 1 + ], + [ + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", + 1 + ], + [ + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", + 1 + ], + [ + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", + 1 + ], + [ + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", + 1 + ], + [ + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", + 1 + ] + ] + } + }, + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" + }, + { + "id": 2, + "operation": { + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{7F6702B3-C977-436F-82AF-403E2BE950E7},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{F5ABCB2B-29D3-411E-A836-02A85749FF09},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{3500B3EC-E613-4C17-8520-F7B22DB266FD},0", + "tags": [], + "text": { + "spans": [ + { + "end": 16, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 7 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{DFF3BBDE-C14D-4D31-8E0D-CBCED9BB1195},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{7F6702B3-C977-436F-82AF-403E2BE950E7},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{7F6702B3-C977-436F-82AF-403E2BE950E7},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{7F6702B3-C977-436F-82AF-403E2BE950E7},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{7F6702B3-C977-436F-82AF-403E2BE950E7},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{7F6702B3-C977-436F-82AF-403E2BE950E7},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + }, + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{7F6702B3-C977-436F-82AF-403E2BE950E7},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{7F6702B3-C977-436F-82AF-403E2BE950E7},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{7F6702B3-C977-436F-82AF-403E2BE950E7},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{7F6702B3-C977-436F-82AF-403E2BE950E7},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{7F6702B3-C977-436F-82AF-403E2BE950E7},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{7F6702B3-C977-436F-82AF-403E2BE950E7},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } + } + }, + "space": "{7F6702B3-C977-436F-82AF-403E2BE950E7},1" + } + ], + [ + { + "id": 1, + "operation": { + "Pages": { + "edits": [ + { + "guid": [ + 60, + 96, + 70, + 223, + 197, + 137, + 63, + 78, + 170, + 199, + 81, + 158, + 99, + 18, + 163, + 133 ], "level": 1, "position": { - "Before": "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1" + "Before": "{754FA957-C432-4502-A5CF-EE44449462C0},1" }, - "space": "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1" + "space": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1" }, { "guid": [ - 22, - 244, - 53, - 252, + 218, + 181, 208, - 13, - 123, + 213, + 72, + 152, + 253, + 76, + 176, + 213, + 138, + 85, + 141, + 127, + 170, + 160 + ], + "level": 2, + "position": "Keep", + "space": "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1" + } + ], + "observed": [ + [ + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", + 1 + ], + [ + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", + 1 + ], + [ + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", + 1 + ], + [ + "{C837A033-F055-4455-B45F-17D82016921C},1", + 1 + ], + [ + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", + 1 + ], + [ + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", + 1 + ], + [ + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", + 1 + ], + [ + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", + 1 + ], + [ + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", + 1 + ], + [ + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", + 1 + ], + [ + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", + 1 + ], + [ + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", + 1 + ], + [ + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", + 1 + ], + [ + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", + 1 + ], + [ + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", + 1 + ], + [ + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", + 1 + ], + [ + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", + 1 + ], + [ + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", + 1 + ], + [ + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", + 1 + ], + [ + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", + 1 + ], + [ + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", + 1 + ], + [ + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", + 1 + ], + [ + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", + 1 + ], + [ + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", + 1 + ], + [ + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", + 1 + ], + [ + "{754FA957-C432-4502-A5CF-EE44449462C0},1", + 1 + ], + [ + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", + 1 + ], + [ + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", + 1 + ], + [ + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", + 1 + ], + [ + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", + 1 + ], + [ + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", + 1 + ], + [ + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", + 1 + ], + [ + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", + 1 + ], + [ + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", + 1 + ], + [ + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", + 1 + ], + [ + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", + 1 + ], + [ + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", + 1 + ] + ] + } + }, + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" + }, + { + "id": 2, + "operation": { + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{5A041F4B-D387-4A35-8723-9F16A833AC7E},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{8A12422A-9108-4831-9889-D95B1B47F85A},0", + "tags": [], + "text": { + "spans": [ + { + "end": 16, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 8 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{8906C7DF-89B1-40E4-9D47-6C794C39F974},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + }, + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } + } + }, + "space": "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1" + } + ], + [ + { + "id": 1, + "operation": { + "Pages": { + "edits": [ + { + "guid": [ + 99, + 82, + 79, 67, 136, - 101, - 93, - 39, + 178, 110, - 39, - 190, - 158 - ], - "level": 2, - "position": "Keep", - "space": "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1" - } - ], - "observed": [ - [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", - 1 - ], - [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", - 1 - ], - [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", - 1 - ], - [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", - 1 - ], - [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", - 1 - ], - [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", - 1 - ], - [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", - 1 - ], - [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", - 1 - ], - [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", - 1 - ], - [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", - 1 - ], - [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", - 1 - ], - [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", - 1 - ], - [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", - 1 - ], - [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", - 1 - ], - [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", - 1 - ], - [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", - 1 - ], - [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", - 1 - ], - [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", - 1 - ], - [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", - 1 - ], - [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", - 1 - ], - [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", - 1 - ], - [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", - 1 - ], - [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", - 1 - ], - [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", - 1 - ], - [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", - 1 - ], - [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", - 1 - ], - [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", - 1 - ], - [ - "{12C643DD-9593-4641-B945-124257947ADD},1", - 1 - ], - [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", - 1 - ], - [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", - 1 - ], - [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", - 1 - ], - [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", - 1 - ], - [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", - 1 - ], - [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", - 1 - ], - [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", - 1 - ], - [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", - 1 - ], - [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", - 1 - ] - ] - } - }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" - }, - { - "id": 2, - "operation": { - "Insert": { - "author": "Author", - "created": 1473408656, - "guid": [ - 6, - 12, - 136, - 31, - 34, - 131, - 43, - 75, - 140, - 243, - 250, - 229, - 197, - 110, - 135, - 127 - ], - "parent": "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } - }, - "text": "Actor 7 🦀 é" - } - }, - "space": "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1" - } - ], - [ - { - "id": 1, - "operation": { - "Pages": { - "edits": [ - { - "guid": [ - 92, + 79, + 138, + 9, + 172, 171, - 163, - 41, - 66, + 67, + 243, + 71, + 142 + ], + "level": 1, + "position": { + "Before": "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1" + }, + "space": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1" + }, + { + "guid": [ + 198, + 58, + 35, + 75, + 157, + 18, + 195, + 77, + 154, 80, - 115, - 70, - 155, - 131, - 144, + 148, + 1, 210, - 175, - 109, - 142, - 183 - ], - "level": 1, - "position": { - "Before": "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1" - }, - "space": "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1" - }, - { - "guid": [ - 72, - 112, - 149, - 65, - 108, - 25, - 248, - 69, - 165, - 205, - 164, - 179, - 32, - 249, - 230, - 107 - ], - "level": 2, - "position": "Keep", - "space": "{12C643DD-9593-4641-B945-124257947ADD},1" - } - ], - "observed": [ - [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", - 1 - ], - [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", - 1 - ], - [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", - 1 - ], - [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", - 1 - ], - [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", - 1 - ], - [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", - 1 - ], - [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", - 1 - ], - [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", - 1 - ], - [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", - 1 - ], - [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", - 1 - ], - [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", - 1 - ], - [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", - 1 - ], - [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", - 1 - ], - [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", - 1 - ], - [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", - 1 - ], - [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", - 1 - ], - [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", - 1 - ], - [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", - 1 - ], - [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", - 1 - ], - [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", - 1 - ], - [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", - 1 - ], - [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", - 1 - ], - [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", - 1 - ], - [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", - 1 - ], - [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", - 1 - ], - [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", - 1 - ], - [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", - 1 - ], - [ - "{12C643DD-9593-4641-B945-124257947ADD},1", - 1 - ], - [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", - 1 - ], - [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", - 1 - ], - [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", - 1 - ], - [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", - 1 - ], - [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", - 1 - ], - [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", - 1 - ], - [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", - 1 - ], - [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", - 1 - ], - [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", - 1 - ] - ] - } - }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" - }, - { - "id": 2, - "operation": { - "Insert": { - "author": "Author", - "created": 1473408657, - "guid": [ - 32, - 217, - 98, - 198, - 139, - 74, - 200, - 79, - 184, - 88, - 19, - 17, - 198, - 122, - 217, - 139 - ], - "parent": "{574D9093-179F-46A3-B3F9-F7EB4345FADA},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } - }, - "text": "Actor 8 🦀 é" - } - }, - "space": "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1" - } - ], - [ - { - "id": 1, - "operation": { - "Pages": { - "edits": [ - { - "guid": [ - 87, - 93, - 187, - 190, 118, - 231, - 12, - 73, - 171, - 89, - 199, - 95, - 48, - 205, - 34, - 65 - ], - "level": 1, - "position": { - "Before": "{C4850841-2A3C-4402-BF11-7499914F9024},1" - }, - "space": "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1" - }, - { - "guid": [ - 231, - 156, - 210, - 109, - 117, - 247, - 23, - 73, - 150, - 139, - 247, - 223, - 39, - 173, - 106, - 66 + 195, + 115 ], "level": 2, "position": "Keep", - "space": "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1" + "space": "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1" } ], "observed": [ [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", 1 ], [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", 1 ], [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", 1 ], [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", + "{C837A033-F055-4455-B45F-17D82016921C},1", 1 ], [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", 1 ], [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", 1 ], [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", 1 ], [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", 1 ], [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", 1 ], [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", 1 ], [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", 1 ], [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", 1 ], [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", 1 ], [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", 1 ], [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", 1 ], [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", 1 ], [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", 1 ], [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", 1 ], [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", 1 ], [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", 1 ], [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", 1 ], [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", 1 ], [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", 1 ], [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", 1 ], [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", 1 ], [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", + "{754FA957-C432-4502-A5CF-EE44449462C0},1", 1 ], [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", 1 ], [ - "{12C643DD-9593-4641-B945-124257947ADD},1", + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", 1 ], [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", 1 ], [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", 1 ], [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", 1 ], [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", 1 ], [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", 1 ], [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", 1 ], [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", 1 ], [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", 1 ], [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", 1 ] ] } }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" }, { "id": 2, "operation": { - "Insert": { - "author": "Author", - "created": 1473408657, - "guid": [ - 212, - 210, - 78, - 209, - 125, - 10, - 236, - 68, - 149, - 82, - 106, - 62, - 189, - 231, - 83, - 255 - ], - "parent": "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{69906E37-5C35-4F2F-B74F-B5D45950739B},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{3A6E4FCA-F6C5-4418-ADF4-9E92782F26CD},0", + "tags": [], + "text": { + "spans": [ + { + "end": 16, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 9 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{FFE94E14-C2A1-4CB1-BBDB-0D72059C0A9D},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" }, - "text": "Actor 9 🦀 é" + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } } }, - "space": "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1" + "space": "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1" } ], [ @@ -2618,242 +6198,600 @@ "edits": [ { "guid": [ - 32, - 165, - 164, - 162, - 23, - 231, + 99, + 113, + 79, + 243, + 201, + 17, + 203, + 78, + 185, 122, - 69, - 137, - 205, - 124, - 4, - 250, - 9, - 150, - 110 - ], - "level": 1, - "position": { - "Before": "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1" - }, - "space": "{858FEBAE-05A2-4B49-92D2-96C28376330D},1" - }, - { - "guid": [ - 136, - 28, - 174, - 50, - 180, - 184, + 45, 83, - 67, - 167, - 99, - 194, - 10, - 250, - 255, - 69, - 239 + 216, + 140, + 115, + 52 + ], + "level": 1, + "position": { + "Before": "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1" + }, + "space": "{189EA744-BE13-467A-95BA-2667A134C0B0},1" + }, + { + "guid": [ + 240, + 160, + 93, + 114, + 5, + 25, + 128, + 75, + 161, + 252, + 39, + 123, + 203, + 137, + 98, + 106 ], "level": 2, "position": "Keep", - "space": "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1" + "space": "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1" } ], "observed": [ [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", 1 ], [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", 1 ], [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", 1 ], [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", + "{C837A033-F055-4455-B45F-17D82016921C},1", 1 ], [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", 1 ], [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", 1 ], [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", 1 ], [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", 1 ], [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", 1 ], [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", 1 ], [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", 1 ], [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", 1 ], [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", 1 ], [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", 1 ], [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", 1 ], [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", 1 ], [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", 1 ], [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", 1 ], [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", 1 ], [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", 1 ], [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", 1 ], [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", 1 ], [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", 1 ], [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", 1 ], [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", 1 ], [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", + "{754FA957-C432-4502-A5CF-EE44449462C0},1", 1 ], [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", 1 ], [ - "{12C643DD-9593-4641-B945-124257947ADD},1", + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", 1 ], [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", 1 ], [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", 1 ], [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", 1 ], [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", 1 ], [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", 1 ], [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", 1 ], [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", 1 ], [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", 1 ], [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", 1 ] ] } }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" }, { "id": 2, "operation": { - "Insert": { - "author": "Author", - "created": 1473408657, - "guid": [ - 235, - 68, - 225, - 150, - 90, - 167, - 26, - 78, - 157, - 185, - 155, - 48, - 227, - 111, - 93, - 87 - ], - "parent": "{858FEBAE-05A2-4B49-92D2-96C28376330D},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{189EA744-BE13-467A-95BA-2667A134C0B0},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{A05DF797-7FAA-4593-A1F4-7E35812A5257},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{D134F5D0-A81E-4663-9AE8-5FF66C8882F1},0", + "tags": [], + "text": { + "spans": [ + { + "end": 17, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 10 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{D783BABC-D1D5-45A9-86F8-1169830488FC},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{189EA744-BE13-467A-95BA-2667A134C0B0},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{189EA744-BE13-467A-95BA-2667A134C0B0},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{189EA744-BE13-467A-95BA-2667A134C0B0},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{189EA744-BE13-467A-95BA-2667A134C0B0},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{189EA744-BE13-467A-95BA-2667A134C0B0},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" }, - "text": "Actor 10 🦀 é" + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{189EA744-BE13-467A-95BA-2667A134C0B0},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{189EA744-BE13-467A-95BA-2667A134C0B0},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{189EA744-BE13-467A-95BA-2667A134C0B0},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{189EA744-BE13-467A-95BA-2667A134C0B0},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{189EA744-BE13-467A-95BA-2667A134C0B0},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{189EA744-BE13-467A-95BA-2667A134C0B0},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } } }, - "space": "{858FEBAE-05A2-4B49-92D2-96C28376330D},1" + "space": "{189EA744-BE13-467A-95BA-2667A134C0B0},1" } ], [ @@ -2864,242 +6802,600 @@ "edits": [ { "guid": [ - 181, - 53, - 220, - 27, - 175, - 42, - 75, - 67, - 172, - 247, - 88, - 164, - 222, - 89, - 204, - 82 - ], - "level": 1, - "position": { - "Before": "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1" - }, - "space": "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1" - }, - { - "guid": [ - 66, - 14, - 221, - 210, - 177, - 93, - 236, - 75, - 161, - 135, - 67, + 137, + 150, + 22, + 112, + 113, + 130, + 213, + 65, + 143, 6, + 73, + 88, + 176, + 192, + 23, + 119 + ], + "level": 1, + "position": { + "Before": "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1" + }, + "space": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1" + }, + { + "guid": [ + 65, + 77, + 116, + 151, + 20, + 16, + 115, 66, - 129, - 52, - 199 + 138, + 169, + 25, + 24, + 111, + 125, + 154, + 123 ], "level": 2, "position": "Keep", - "space": "{A8883FF6-F53C-46B7-912C-779F9300FA77},1" + "space": "{2B736B19-2D9C-4E76-A732-478D533D717A},1" } ], "observed": [ [ - "{90D67E9A-BEC2-43C9-973C-1B927FE5FCD4},1", + "{869D5929-6E5E-4EDB-9639-4C56977DD447},1", 1 ], [ - "{7D896A2D-61C9-42B2-AECF-B3C979B88BEB},1", + "{B0B53F94-0105-4C59-B65B-9473F49BFF41},1", 1 ], [ - "{EED86E95-3017-46A7-B26B-991C815839B7},1", + "{0E98EE82-B78F-4872-8BD9-5D9B23A817C5},1", 1 ], [ - "{0E8EA7AB-946D-461C-B571-96CCDC183FDC},1", + "{C837A033-F055-4455-B45F-17D82016921C},1", 1 ], [ - "{BE25CAF8-690F-4947-8683-3A37A7D52CCA},1", + "{89D86121-BF5C-418B-BB92-CBFFA8EF545F},1", 1 ], [ - "{F61E497B-25BB-426E-BC73-320A7B6D2E9E},1", + "{57E835EA-2799-4118-B55C-7BB1E51C6941},1", 1 ], [ - "{E53F33D2-F3FC-42C9-8DC8-B47261D1BDED},1", + "{F7EECCCF-B6B4-44F2-A543-36837EC18B8A},1", 1 ], [ - "{7FDAAAE9-CD33-42AA-A8AA-F87CE3BC8CD6},1", + "{361A0F09-EA63-4F2D-9620-C061D4E4707E},1", 1 ], [ - "{F0E8692A-3CBB-47A6-81D6-7B6E2A125A7F},1", + "{EB3940F1-F255-42BE-8C31-DD09E86DBAAF},1", 1 ], [ - "{71B566DF-DBD8-43B2-AD96-265FDB789E07},1", + "{C2870D07-8ADC-44BB-9F12-15D6C3708689},1", 1 ], [ - "{9C56CBC3-690B-4900-8A07-A43600F7477B},1", + "{1E0C6331-32C9-4EF9-8087-150A8669FA91},1", 1 ], [ - "{914C89B2-A95E-4992-8D2B-B533C7326D57},1", + "{ED9769DD-99D6-4BE2-B980-580DA9C4DFCE},1", 1 ], [ - "{2CA7400B-F732-4FAF-811B-AAFA91C480DF},1", + "{17C30054-7129-4A10-9D00-4D5545E4F4BA},1", 1 ], [ - "{73479EE6-9FC0-4474-A702-E22C734FC42B},1", + "{4C5FBA5B-E348-4750-ACE4-E9694D527BFF},1", 1 ], [ - "{B6C1B618-B721-49CD-B224-45DDFF38C8FC},1", + "{BD0EF658-4D0F-42A7-B546-B4F4A77D246B},1", 1 ], [ - "{CED8C7D5-5AC4-4553-B9F7-A02A1F599692},1", + "{6FEA70FA-1451-4A27-8A8E-C4CC3B713CF6},1", 1 ], [ - "{D260D973-E2FB-4654-89A2-13BAFC23AEDE},1", + "{68A1E0E1-7A39-4AB6-AD71-4D8A18878D79},1", 1 ], [ - "{EC0D40A0-9E0D-4262-9B4D-D075704938C9},1", + "{7E9041BD-301B-4B5B-9456-1C92050E4914},1", 1 ], [ - "{8E47F53D-F24F-4B3B-942F-390A8F0F31E7},1", + "{EFA77BAE-8A98-4176-B536-B615D1D2ED2B},1", 1 ], [ - "{1FBF8DA5-01E9-4248-BBB9-90B5C4ADFA58},1", + "{87AC0239-51A5-47C6-BAF4-926CCF56385C},1", 1 ], [ - "{A3909E43-E7FE-40C8-9222-0B60EA8CE89B},1", + "{C50BF7FC-F848-4B91-B8C8-743D0AA5F195},1", 1 ], [ - "{925E4C70-2C3F-480D-BB44-D3BF4A0FB985},1", + "{FD8D07D0-C447-4516-A7DB-F8522B77D4A7},1", 1 ], [ - "{1792331E-BA2E-4B60-B150-6AAF41BC488D},1", + "{D2E1FE57-F45D-49C3-B388-95222ACA3886},1", 1 ], [ - "{39716E7C-28A0-4770-BBD2-BB4018DBE93F},1", + "{7F6702B3-C977-436F-82AF-403E2BE950E7},1", 1 ], [ - "{D30FD954-4DA9-4B85-8950-12B85AFA12CB},1", + "{688C4EA1-80F5-4D85-B9BB-F8633FF3C0CA},1", 1 ], [ - "{0F4D72D3-20B0-4884-BF56-08BA4DBFB6FF},1", + "{754FA957-C432-4502-A5CF-EE44449462C0},1", 1 ], [ - "{574D9093-179F-46A3-B3F9-F7EB4345FADA},1", + "{D2197C55-D962-4DF0-8B14-26F88C06D6FA},1", 1 ], [ - "{12C643DD-9593-4641-B945-124257947ADD},1", + "{87B83BA8-A906-4F71-A6CA-3E8133A75D34},1", 1 ], [ - "{C4850841-2A3C-4402-BF11-7499914F9024},1", + "{F2D6AEBB-98EA-4F10-991F-5243E74AF450},1", 1 ], [ - "{37EF05A5-C2D9-44A2-84C0-BCA93ACB9048},1", + "{406687D7-F9E9-491B-85DA-166DE6CD5A60},1", 1 ], [ - "{27C692F0-F79D-4390-AB44-CB8B10E2B49E},1", + "{1F73BF36-9FC2-495D-844D-B370D5C47DE7},1", 1 ], [ - "{B1F28022-58CF-49CF-BC6F-D77A1A034AAC},1", + "{E9BD343F-4A66-4DE2-81F9-3789CCA22818},1", 1 ], [ - "{858FEBAE-05A2-4B49-92D2-96C28376330D},1", + "{189EA744-BE13-467A-95BA-2667A134C0B0},1", 1 ], [ - "{806A80BF-45E8-4188-B782-66A0DAA26E5A},1", + "{017F5881-F818-4C7C-B9F9-6BCB4085F1D0},1", 1 ], [ - "{940E7901-6EF0-43ED-BD42-E0C7658185B1},1", + "{CD0D17F4-25D8-4076-9AF7-47D9CDEFCF0A},1", 1 ], [ - "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1", + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1", 1 ], [ - "{A8883FF6-F53C-46B7-912C-779F9300FA77},1", + "{2B736B19-2D9C-4E76-A732-478D533D717A},1", 1 ] ] } }, - "space": "{31C1BA26-B092-43F4-B346-A5147633ACB5},1" + "space": "{90FCDB0C-36AE-422F-B4FE-67676826FE36},1" }, { "id": 2, "operation": { - "Insert": { - "author": "Author", - "created": 1473408657, - "guid": [ - 142, - 193, - 242, - 223, - 29, - 246, - 57, - 70, - 180, - 43, - 87, - 35, - 54, - 147, - 219, - 200 - ], - "parent": "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},12", - "placement": { - "Outline": { - "x": 36.0, - "y": 36.0 - } + "Page": { + "after": { + "created": 134335976560000000, + "definitions": { + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Outline": { + "id": "{00E55A56-1362-4A11-ACD3-2117BCCE619E},0", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 36.0, + "y": 36.0 + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{AD3FBA83-B057-48DF-9731-DEBD6F95BDBE},0", + "tags": [], + "text": { + "spans": [ + { + "end": 17, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 11.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Actor 11 🦀 é" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{77E85A17-9EF5-4C79-B11B-48A5CE7FE0FD},0", + "level": 1, + "lists": [], + "parent": null, + "style": null, + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + }, + { + "Title": { + "date": null, + "id": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" }, - "text": "Actor 11 🦀 é" + "author": "Author", + "before": { + "created": 134335976560000000, + "definitions": { + "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},18": { + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "kind": { + "name": "PageTitle", + "type": "Style" + } + } + }, + "margin_origin": [ + 0.0, + 0.0 + ], + "objects": [ + { + "Title": { + "date": null, + "id": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},13", + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": 0.0, + "y": 0.0 + }, + "outlines": [ + { + "id": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},14", + "indents": [], + "layout": { + "max_height": null, + "max_width": null, + "reserved_width": null, + "width_set_by_user": null, + "x": null, + "y": null + }, + "min_width": null, + "paragraphs": [ + { + "collapsed": false, + "content": { + "Text": { + "date_field": null, + "id": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},16", + "tags": [], + "text": { + "spans": [ + { + "end": 10, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": "Calibri", + "font_size": 17.0, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": 1033, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + } + } + ], + "text": "Same title" + } + } + }, + "format": { + "alignment": null, + "bold": null, + "color": null, + "embedded_object": null, + "font": null, + "font_size": null, + "hidden": null, + "highlight": null, + "hyperlink": null, + "hyperlink_label": null, + "italic": null, + "language": null, + "line_spacing": null, + "list_spacing": null, + "math": null, + "rtl": null, + "space_after": null, + "space_before": null, + "strike": null, + "subscript": null, + "superscript": null, + "underline": null + }, + "id": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},15", + "level": 1, + "lists": [], + "parent": null, + "style": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},18", + "tags": [] + } + ], + "title": false, + "unsupported": [] + } + ] + } + } + ], + "title": "Same title" + } } }, - "space": "{D106259D-D139-4DAB-87BE-50AC5E5BEF80},1" + "space": "{CCBB5969-BCE8-498B-BE1A-98FD3A44DB1A},1" } ] ], diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/candidate/pages.one b/corpus/page-lifecycle/offline-edits/twelve-clients/candidate/pages.one index 1b5234be824491c10496e749049b25836b704808..2eeab58e5d1fbb41822281555635300f75e4b5b6 100644 GIT binary patch literal 155344 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 NQ^+b5(JRI){y$slmOuai literal 149680 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
    jMLKKX|N15M*XavhsLcUo!Tj}x}D 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µ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 literal 164208 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 diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/environment.json b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/environment.json new file mode 100644 index 0000000000000000000000000000000000000000..747e291e640b73db771af0151c2ebe1ecb3627e6 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/environment.json @@ -0,0 +1,7 @@ +{ + "powershell": "5.1.14409.1005", + "schema": "xs2010", + "hostname": "ONE-M6-16C2E4D4", + "cold": true, + "onenote": "14.0.4763.1000" +} diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/hierarchy.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/hierarchy.xml index 0ee77a03aafb8eeaeb2733d618080544bd2ea97f..569bd9d2624ab7dc4f36e751f769b5ed2b492d19 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/hierarchy.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-000.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-000.xml index 0f15ae2965b2c5801066502cc65fb2971d3d6f79..ddc49e628e7e1f06935c6038502eecf01489308e 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-000.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-000.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-001.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-001.xml index 3c5a328c51edce7c2dc83cd5a92c18bc587a106c..ea93ab8f4c1d76eaf9c633fbf2ab1a8a58b18e51 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-001.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-001.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-002.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-002.xml index a195845e5111f9473c8e51a137c52a816bad177b..2d8525d02868d0f1287b344cc030bac1f5798efe 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-002.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-002.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-003.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-003.xml index baee1e0e41db2b8970d5ebf6874ced610c5605fb..6a6d89afdf7796f811b0cd05a0dc0124da540dac 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-003.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-003.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-004.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-004.xml index f44afff85ab2f639498e454230ad684fe477fbf6..91ca1b13844bddd0066ef9b4b51502b034f3003d 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-004.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-004.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-005.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-005.xml index f6e72bd83473e6564ec0fff5a02f177df8bf0645..54244aa786c49bd758072198f180fa18e428f132 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-005.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-005.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-006.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-006.xml index 7a8518e4307ec050749e07f20cfc60e669106ef5..0b65c27a4cb7593a90534f1ae39f8ac2034e0e1c 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-006.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-006.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-007.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-007.xml index 7bd5e8573a299047e1a443e9c48e7656f3fd4cc4..ab512d7f8beab5e69ca851b04ef0c4822431cf42 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-007.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-007.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-008.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-008.xml index b6fe52b23f3a5dba69811943143175555fb768be..8bbea50d74a13c69d55e0804031265973456d572 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-008.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-008.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-009.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-009.xml index 0858743ad9424999de876ec95ebb3248a6a6bdf9..045fcb701b9f60ea1d82b63dfbbd936c10a0d91d 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-009.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-009.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-010.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-010.xml index 11a009ba37b0b56e694a634af3d0e8004ce9d891..3d16a64f844515662eb47ca89db8eaca383f37bd 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-010.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-010.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-011.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-011.xml index 7b24ebb857bc900c9e2b592c479099b227d34cd3..04b3240f657876147e0982ee8a4e828930d92df9 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-011.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-011.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-012.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-012.xml index 9d24b783aaefac29d5cdcd4a31f24ae4350e8cf1..8b383a7af0f74c659ebf68f068b3e660c3d58d06 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-012.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-012.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-013.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-013.xml index a0b537ecdf3fdbe4dad19b16940ec5b2b81a1328..8c1d476171c64a10f1465826b3e4208ed2d13d7a 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-013.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-013.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-014.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-014.xml index a732b77292318a35e0043268b077c55e62718d14..08c872d0ad481307923505f968cc3683259b630c 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-014.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-014.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-015.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-015.xml index 954bc03f039bf5fe5d329e2f645d7360bd26d705..6f61dc1a76e074e554a5c25d23137ac02d203390 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-015.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-015.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-016.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-016.xml index b5d495c4a6dd601c2d85aab3b59447958047a59c..0c0d0e6ad4ea243067b5114bc23658cb70fb9a7e 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-016.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-016.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-017.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-017.xml index 6605ca79c45634598f5ce40064057da6816f4609..9814cd630806eefc93ee9efa5e1d18fa17a524d9 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-017.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-017.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-018.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-018.xml index 90b13e7d6aee11a437d57de33a4a0018feb9d4c9..c5070fd54278cf962a0213a7016a096db7ddf28b 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-018.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-018.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-019.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-019.xml index ed2088a46488b1d864cc197db28d717da87c7a37..e8fa05da717a35ae9070c0754343dcbcb6cd760d 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-019.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-019.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-020.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-020.xml index 4b846972581daad7f772f3e9cf9c9a94c9f920d6..b31abf3925f0c62ba09ce2c11b22f566ec63a0dd 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-020.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-020.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-021.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-021.xml index 0fbc487ff677d2ea1c5fc1486f9a0b07cc2a6475..a21a4dd734a31553b4c6a69ccd8542ed6f80f834 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-021.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-021.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-022.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-022.xml index 7f858dac0099b526675ffdb5ab01ab6da1d33691..e44c331c3277c2a6cf462b78082895a1ae6265c3 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-022.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-022.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-023.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-023.xml index 0a8a90d9ebdb7e7a59a3974d7cad9ce6090de2c5..7c314f860d8a9b791be5c9d6421d67b5751f3674 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-023.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-023.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-024.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-024.xml index 9853ca9969f3b84d42d3cd09ae46998e6a647a29..c6e2f5e91f62380a0aa8245e28fce80bf5523fa6 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-024.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-024.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-025.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-025.xml index 906efaf6bca54f0ab49f8b1bb800048142964fc3..2463cde990f11f382f3e5cf07b844396ebe3f1d9 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-025.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-025.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-026.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-026.xml index 8bbe68696dd02386a2cf7779fd753c7f01c996c3..da1e7da17cd18a1e94fbb4fd3175f186c1d12eea 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-026.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-026.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-027.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-027.xml index cc544f47a39d6a8c3327a84b2769965ca0a882bf..126f6719eb016d3e246dd0e921b97e7e94634d4f 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-027.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-027.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-028.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-028.xml index 70ab187afc832d956614e01d0af09fa5d6d1f4cb..c258afb97ddcaccf28f6faca8c9aec7c2c80925b 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-028.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-028.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-029.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-029.xml index 1758fdbfe166a84f89b01fe06f116e6c302db6ea..8a4e8bae89e5afdbcc79408532e77f0d30e65726 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-029.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-029.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-030.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-030.xml index 700ebcae96d598eee2625e5fed1f666da0a3b1c4..f8f903f4ce64e3b1ca3bd9cf6e3afba2d34b6f73 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-030.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-030.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-031.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-031.xml index e495a2d21ac63dd38b6d09d900e67f2eacc2575c..2b25bc0ee284254da60a0fa8afb549b0d17705b7 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-031.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-031.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-032.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-032.xml index d5b8a086d20f562201b4434f21a709704a633a03..365f61997ffcc80c2cf7f2766f40d546333596c8 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-032.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-032.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-033.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-033.xml index 3cd0c6e82ab8d68f29e1404827790b08c5647b2e..a666cdc6381ff2f08d9e4a612fb678d27ed8e31b 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-033.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-033.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-034.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-034.xml index 3b6e3be1405b02b3bfc6f65e430ef3131457e9c6..34923dd48e15d94c96eb55cefbd03f4d70737607 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-034.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-034.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-035.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-035.xml index 7df2f70b29e740529a7fea08d8f6d69f395dba6b..0220fa4fc4bac580f38180ac4ac58a5c419533a5 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-035.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-035.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-036.xml b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-036.xml index c0741ad9b38c722243acfd6dd81afdf090e9780e..1ebc46fdbeb645acc7f5e0c820039c95253bbd48 100644 --- a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-036.xml +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/page-036.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/payloads.json b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/run.json b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/run.json new file mode 100644 index 0000000000000000000000000000000000000000..6c89101554490de6bed888dd5cc6762ec72d1559 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/run.json @@ -0,0 +1,18 @@ +{ + "notebook": "/private/tmp/m33/page-clients2/candidate", + "expected_pages": 37, + "author": null, + "author_timeout_seconds": 600, + "inspect": false, + "collect_notebook": true, + "base": { + "file": "win7-office-base.qcow2", + "format": "qcow2", + "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346", + "virtual_size": 68719476736 + }, + "scripts": { + "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331", + "read.ps1": "04013bfcccee40a17e2a225f9b9e96f40a3a8daad9e350609654f8eda3ccbb41" + } +} diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/scripts/cold.ps1 b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/scripts/read.ps1 b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/source.json b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/source.json new file mode 100644 index 0000000000000000000000000000000000000000..5a7b7bdc33c9835a75ee62c9515d3481b0c6c5ae --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/source.json @@ -0,0 +1,8 @@ +[ + { + "path": "pages.one", + "bytes": 155344, + "sha256": "623ade8b5ee6fc837ae63d5293791039ecd17da9cb8bc5e243ea20cadf37958c", + "mtime_ns": 1789124063040528117 + } +] diff --git a/corpus/page-lifecycle/offline-edits/twelve-clients/cold/teardown.json b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/page-lifecycle/offline-edits/twelve-clients/cold/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/paragraph-edit/README.md b/corpus/paragraph-edit/README.md index a8ed082d25ee9a53dda45247767161dabf90562a..c37d217f2c67e340b184f342ea562b514b76feb0 100644 --- a/corpus/paragraph-edit/README.md +++ b/corpus/paragraph-edit/README.md @@ -62,9 +62,13 @@ the native-rendered result to the corresponding keyboard-generated control. by `ONESTORE_PARAGRAPH_JOIN_OUTPUT`. `offline` retains reconciled split/join candidates and cold native captures. -The cache queues edits before observing independent remote `☂` prefixes, reopens -between acknowledgements, and confirms modeled lost replies without replaying -operations. Tests compare native text/styles to the original keyboard controls, -account for the remote prefixes, and retain exact graph identities after reopening. +The cache queues each recorded split or join as a page-model save before +observing an independent remote `☂` prefix, reopens between acknowledgements, +and confirms modeled lost replies without replaying a publication. The +`inheritance` group has four cases: `Join inherited styles` joins runs whose +language or spacing differ, which the page model cannot express, and is +recorded as refused. Tests compare native text/styles to the original keyboard +controls, account for the remote prefixes, and retain exact graph identities +after reopening. The ignored offline test `export_native_offline_paragraphs` regenerates candidates in a new directory specified by `ONESTORE_OFFLINE_PARAGRAPH_OUTPUT`. diff --git a/corpus/paragraph-edit/offline/inheritance/candidate/synthetic.one b/corpus/paragraph-edit/offline/inheritance/candidate/synthetic.one index e64cafc0ec2e467c73f2709679fe0acfda707323..b7e7057f82bb773e828603c5be2adcc74e2058b3 100644 GIT binary patch delta 3515 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 - + diff --git a/corpus/paragraph-edit/offline/inheritance/native/read/page-000.xml b/corpus/paragraph-edit/offline/inheritance/native/read/page-000.xml index 7ec799793802bacdd3ab47100a46821273f490bd..e338a3e9e5cb4829a6aa64aeefd964f5d5cd039b 100644 --- a/corpus/paragraph-edit/offline/inheritance/native/read/page-000.xml +++ b/corpus/paragraph-edit/offline/inheritance/native/read/page-000.xml @@ -1,5 +1,5 @@  -☂LeftBold italic 🦀 é tail]]> +lang=en-US> 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/inheritance/native/read/page-001.xml b/corpus/paragraph-edit/offline/inheritance/native/read/page-001.xml index e7da941a9f1ab49daedf6b4599443ae39a0269b6..e4ee444148f4866ab925b96836a21107fec510d2 100644 --- a/corpus/paragraph-edit/offline/inheritance/native/read/page-001.xml +++ b/corpus/paragraph-edit/offline/inheritance/native/read/page-001.xml @@ -1,5 +1,20 @@  -☂LeftBold italic 🦀 é tail]]> +Bold 🦀 italic é color 東京
    +End
    ]]>
    Fictitious: café, 東京, مرحبا]]>
    diff --git a/corpus/paragraph-edit/offline/inheritance/native/read/page-002.xml b/corpus/paragraph-edit/offline/inheritance/native/read/page-002.xml index 9f7ebac7baae2c38efceca18ccd5d33d6fa668e9..64216ad68e92b2a9671434d86ddb8f56abe2d69f 100644 --- a/corpus/paragraph-edit/offline/inheritance/native/read/page-002.xml +++ b/corpus/paragraph-edit/offline/inheritance/native/read/page-002.xml @@ -1,20 +1,5 @@  -Bold 🦀 italic é color 東京
    -End
    ]]>
    Fictitious: café, 東京, مرحبا]]>
    +☂LeftBold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/inheritance/native/read/page-003.xml b/corpus/paragraph-edit/offline/inheritance/native/read/page-003.xml index b4d1f59c82406908740081c4710a489002085ac2..f2cdc96ba344390eb5402f0f2b6ac05374623913 100644 --- a/corpus/paragraph-edit/offline/inheritance/native/read/page-003.xml +++ b/corpus/paragraph-edit/offline/inheritance/native/read/page-003.xml @@ -1,5 +1,4 @@  -☂LeftRight italic]]> +Right italic]]> diff --git a/corpus/paragraph-edit/offline/inheritance/native/read/page-004.xml b/corpus/paragraph-edit/offline/inheritance/native/read/page-004.xml index 2f7e50d49be4739acae06d0e4fb7c70663d60644..4ad01c8a34062259208e79234a2d54325f8925c0 100644 --- a/corpus/paragraph-edit/offline/inheritance/native/read/page-004.xml +++ b/corpus/paragraph-edit/offline/inheritance/native/read/page-004.xml @@ -1,5 +1,4 @@  -☂Left childBold italic 🦀 é tail]]> +Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/inheritance/native/read/page-005.xml b/corpus/paragraph-edit/offline/inheritance/native/read/page-005.xml index 82c73e5a1daf3735d8e9a40de6251a3f839b6a89..18b152e8fa3356af22aa2a926195c172cce73b30 100644 --- a/corpus/paragraph-edit/offline/inheritance/native/read/page-005.xml +++ b/corpus/paragraph-edit/offline/inheritance/native/read/page-005.xml @@ -1,5 +1,5 @@  -Bold italic 🦀 é tail]]> +style='color:#123456' lang=x-none>tail]]> diff --git a/corpus/paragraph-edit/offline/inheritance/native/read/payloads.json b/corpus/paragraph-edit/offline/inheritance/native/read/payloads.json deleted file mode 120000 index 787b4bae85038cda922f8befac6c8ed361fa8035..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/offline/inheritance/native/read/payloads.json +++ /dev/null @@ -1 +0,0 @@ -../../../../before/read/payloads.json \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/inheritance/native/read/payloads.json b/corpus/paragraph-edit/offline/inheritance/native/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/paragraph-edit/offline/inheritance/native/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/inheritance/native/run.json b/corpus/paragraph-edit/offline/inheritance/native/run.json index 2fbf78ac8b624e29cbc1ef5a140dc7bb0c388002..be00e60c20fb973a28ae46047369310ed5a99e56 100644 --- a/corpus/paragraph-edit/offline/inheritance/native/run.json +++ b/corpus/paragraph-edit/offline/inheritance/native/run.json @@ -1,5 +1,5 @@ { - "notebook": "/Users/clo/dev/one/evidence/m10/offline-paragraph-native-01/inheritance/candidate", + "notebook": "/private/tmp/m33/offline-paragraph/inheritance/candidate", "expected_pages": 6, "author": null, "author_timeout_seconds": 600, diff --git a/corpus/paragraph-edit/offline/inheritance/native/scripts/cold.ps1 b/corpus/paragraph-edit/offline/inheritance/native/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/paragraph-edit/offline/inheritance/native/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/paragraph-edit/offline/inheritance/native/scripts/read.ps1 b/corpus/paragraph-edit/offline/inheritance/native/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/paragraph-edit/offline/inheritance/native/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/paragraph-edit/offline/inheritance/native/source.json b/corpus/paragraph-edit/offline/inheritance/native/source.json index 02e8e0326bf665e52ba695484dafd587f263b7c0..f8b9b6c762434d633360b146a5c3050fce928a62 100644 --- a/corpus/paragraph-edit/offline/inheritance/native/source.json +++ b/corpus/paragraph-edit/offline/inheritance/native/source.json @@ -1,8 +1,8 @@ [ { "path": "synthetic.one", - "bytes": 59016, - "sha256": "828e330b0dfda41ecd5ade77ea65398cf5a070170757b3f650ca4600520d99bb", - "mtime_ns": 1788863184799153800 + "bytes": 58696, + "sha256": "30d43d92bf2100adc4138134854ce5be30a56877f288fc42f2ee2cf685c188b6", + "mtime_ns": 1789121621674421867 } ] diff --git a/corpus/paragraph-edit/offline/inheritance/native/teardown.json b/corpus/paragraph-edit/offline/inheritance/native/teardown.json deleted file mode 120000 index 47a1192a30ea7da90676d631bb9a2687d829b43e..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/offline/inheritance/native/teardown.json +++ /dev/null @@ -1 +0,0 @@ -../../../joined/teardown.json \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/inheritance/native/teardown.json b/corpus/paragraph-edit/offline/inheritance/native/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/paragraph-edit/offline/inheritance/native/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/paragraph-edit/offline/joins/candidate/synthetic.one b/corpus/paragraph-edit/offline/joins/candidate/synthetic.one index b3fefe96ad2e3c9de97a136f760b521bcb11bda4..882adba9ebd294c3d74ac0a1a0b967af1746f52a 100644 GIT binary patch delta 10201 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 k3>hD87Nk3#4bq;x9t7zFS{woi_@% delta 460 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 diff --git a/corpus/paragraph-edit/offline/joins/native/read/environment.json b/corpus/paragraph-edit/offline/joins/native/read/environment.json index 552ef9a6189225c2022dccd1e57702c7939ff4da..d52ab315b60cf6e158ce347705ca1ca67bfdaf68 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/environment.json +++ b/corpus/paragraph-edit/offline/joins/native/read/environment.json @@ -1,7 +1,7 @@ { "powershell": "5.1.14409.1005", "schema": "xs2010", - "hostname": "ONE-M6-37FF299E", + "hostname": "ONE-M6-DA41E6F9", "cold": true, "onenote": "14.0.4763.1000" } diff --git a/corpus/paragraph-edit/offline/joins/native/read/hierarchy.xml b/corpus/paragraph-edit/offline/joins/native/read/hierarchy.xml index 9a5218400d4c87069f2b31b2c580618a7d756a3d..e217dd01a9634e6e51fdd10874aefaac0b678bff 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/hierarchy.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-000.xml b/corpus/paragraph-edit/offline/joins/native/read/page-000.xml index 9201082b94066f46a988d536c2ef7494840dfbf2..78e95f3219e0cc256757aebddbabd429779dcc48 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-000.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-000.xml @@ -1,5 +1,4 @@  -☂Bold italic 🦀 é tail]]> +☂Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-001.xml b/corpus/paragraph-edit/offline/joins/native/read/page-001.xml index 62fe84b91cb277cec1462d1a02afd2446f6dee21..fb88b1168d684e4a324fcbc4777f6c28f88a8c6a 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-001.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-001.xml @@ -1,3 +1,5 @@  - -soft break]]> +☂Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-002.xml b/corpus/paragraph-edit/offline/joins/native/read/page-002.xml index bf17bb70560f2566974524307321791177e331a1..a0ed9129161fc0c25d549bed24ab9954c93a194d 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-002.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-002.xml @@ -1,2 +1,5 @@  - +☂Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-003.xml b/corpus/paragraph-edit/offline/joins/native/read/page-003.xml index adec3d788188349daf59a08d4d872658c04ef724..a990e699c33c933588e1ad2bdba704aebe95ae78 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-003.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-003.xml @@ -1,5 +1,5 @@  -☂Bold italic 🦀 é tail]]> +style='color:#123456' lang=x-none>tail]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-004.xml b/corpus/paragraph-edit/offline/joins/native/read/page-004.xml index fe7660933a9e562a29e298825fb22266375d80c8..0bce9f7388e5dc06ea1ce9931063c11e4052ff86 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-004.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-004.xml @@ -1,5 +1,3 @@  -☂Bold italic 🦀 é tail]]> + +soft break]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-005.xml b/corpus/paragraph-edit/offline/joins/native/read/page-005.xml index 4227be5eb03a241bf6ce0dfe0fbb1ece9965dade..7a74cc2b4d6e80a9b4ac6340aff82d173922cc1d 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-005.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-005.xml @@ -1,6 +1,5 @@  -☂Bold italic 🦀 é tail]]> +style='color:#123456' lang=x-none>tail]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-006.xml b/corpus/paragraph-edit/offline/joins/native/read/page-006.xml index 167287870795f4b510eebf42241cafb673ad0940..189d2238572ec195d87d6b71858fadf14ad37120 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-006.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-006.xml @@ -1,5 +1,2 @@  -☂Bold italic 🦀 é tail]]> + diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-007.xml b/corpus/paragraph-edit/offline/joins/native/read/page-007.xml index 402252d7c06456b9a4f6d4461f03bcbd71640661..c79ceef1d7a7127453cf5e173465933f41a7e637 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-007.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-007.xml @@ -1,5 +1,5 @@  -☂Bold italic 🦀 é tail]]> +style='color:#123456' lang=x-none>tail]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-008.xml b/corpus/paragraph-edit/offline/joins/native/read/page-008.xml index 552b927b47f79cfc1a3d1cd2e2b46c2c79adcff7..cf3bb536206ff2da13af6633f9ce1380ab6eb289 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-008.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-008.xml @@ -1,20 +1,5 @@  -Bold 🦀 italic é color 東京
    -End
    ]]>
    Fictitious: café, 東京, مرحبا]]>
    +☂Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-009.xml b/corpus/paragraph-edit/offline/joins/native/read/page-009.xml index 4301ba0550eaa621005b78bc9e7aeba3f76a2f6e..260a6362f229d99fe275d456106ad3d60a8adb70 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-009.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-009.xml @@ -1,5 +1,3 @@  -☂Bold italic 🦀 é tail]]> +Link label
    tail]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-010.xml b/corpus/paragraph-edit/offline/joins/native/read/page-010.xml index dae5fdb3cbcd6aaa85cd91b2ab029238544058b3..c1663401df7a3a41fcb334d5bc043b00fd2651fb 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-010.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-010.xml @@ -1,3 +1,5 @@  -Link label tail]]> +☂Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-011.xml b/corpus/paragraph-edit/offline/joins/native/read/page-011.xml index b31bc7ec4baddcf2e98da0146a56658a8ad390f8..565c9411ac198a987f354397167b19311ae21807 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-011.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-011.xml @@ -1,5 +1,4 @@  -☂Bold italic 🦀 é tail]]> +☂Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-012.xml b/corpus/paragraph-edit/offline/joins/native/read/page-012.xml index 9fcb04f0bd3028c095bfaaab0c8cbf2add4e8c6c..afb58a8062f9df825bc3b19712b23eb437599156 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-012.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-012.xml @@ -1,5 +1,5 @@  -Bold italic 🦀 é tail]]> +style='color:#123456' lang=x-none>tail]]> diff --git a/corpus/paragraph-edit/offline/joins/native/read/page-013.xml b/corpus/paragraph-edit/offline/joins/native/read/page-013.xml index 6dd7d0276272223468796769d7447b6b7d25fc04..19ae27bf32dfe0a0daf87a8fc850fc5237891bf2 100644 --- a/corpus/paragraph-edit/offline/joins/native/read/page-013.xml +++ b/corpus/paragraph-edit/offline/joins/native/read/page-013.xml @@ -1,5 +1,20 @@  -☂Bold italic 🦀 é tail]]> +Bold 🦀 italic é color 東京
    +End
    ]]>
    Fictitious: café, 東京, مرحبا]]>
    diff --git a/corpus/paragraph-edit/offline/joins/native/read/payloads.json b/corpus/paragraph-edit/offline/joins/native/read/payloads.json deleted file mode 120000 index 787b4bae85038cda922f8befac6c8ed361fa8035..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/offline/joins/native/read/payloads.json +++ /dev/null @@ -1 +0,0 @@ -../../../../before/read/payloads.json \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/joins/native/read/payloads.json b/corpus/paragraph-edit/offline/joins/native/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/paragraph-edit/offline/joins/native/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/joins/native/run.json b/corpus/paragraph-edit/offline/joins/native/run.json index d6d739820dca141e877c521937893a9db95b9010..d26cc27ccaa75ddc7c18e46302cf1f5f5d5df763 100644 --- a/corpus/paragraph-edit/offline/joins/native/run.json +++ b/corpus/paragraph-edit/offline/joins/native/run.json @@ -1,5 +1,5 @@ { - "notebook": "/Users/clo/dev/one/evidence/m10/offline-paragraph-native-01/joins/candidate", + "notebook": "/private/tmp/m33/offline-paragraph/joins/candidate", "expected_pages": 14, "author": null, "author_timeout_seconds": 600, diff --git a/corpus/paragraph-edit/offline/joins/native/scripts/cold.ps1 b/corpus/paragraph-edit/offline/joins/native/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/paragraph-edit/offline/joins/native/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/paragraph-edit/offline/joins/native/scripts/read.ps1 b/corpus/paragraph-edit/offline/joins/native/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/paragraph-edit/offline/joins/native/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/paragraph-edit/offline/joins/native/source.json b/corpus/paragraph-edit/offline/joins/native/source.json index 699cc709a58444d4fb5d3cdaaf8e4edece01bf0c..d41fbf431d1fd6da34602a47e8a4aaccedc09d70 100644 --- a/corpus/paragraph-edit/offline/joins/native/source.json +++ b/corpus/paragraph-edit/offline/joins/native/source.json @@ -1,8 +1,8 @@ [ { "path": "synthetic.one", - "bytes": 150648, - "sha256": "2fd036cddb33de5e42f66cb6a6b7647cbfeac374a4055e9afc15bf3b0d6ec1b2", - "mtime_ns": 1788863184056850411 + "bytes": 152216, + "sha256": "976018f02ca0df2a273659c9d00820c9529578049282470ad89734c0dcf5219a", + "mtime_ns": 1789121620530249300 } ] diff --git a/corpus/paragraph-edit/offline/joins/native/teardown.json b/corpus/paragraph-edit/offline/joins/native/teardown.json deleted file mode 120000 index 47a1192a30ea7da90676d631bb9a2687d829b43e..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/offline/joins/native/teardown.json +++ /dev/null @@ -1 +0,0 @@ -../../../joined/teardown.json \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/joins/native/teardown.json b/corpus/paragraph-edit/offline/joins/native/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/paragraph-edit/offline/joins/native/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/paragraph-edit/offline/splits/candidate/synthetic.one b/corpus/paragraph-edit/offline/splits/candidate/synthetic.one index 66148d4f93647580dd893d2c5fcdac50745a26bb..36022356cf1310d7b38d8adae9b7a0eaa6f11c00 100644 GIT binary patch delta 11237 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 KjOc<)V)B1JGDz|O delta 9395 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 diff --git a/corpus/paragraph-edit/offline/splits/manifest.json b/corpus/paragraph-edit/offline/splits/manifest.json index 262dff2900ded1a50e82606439626bb8b6212703..6ea2bb217c86b2c885e47e9423f5a29ae7899541 100644 --- a/corpus/paragraph-edit/offline/splits/manifest.json +++ b/corpus/paragraph-edit/offline/splits/manifest.json @@ -27,7 +27,7 @@ "text": "{DFE950EF-6BEB-0F5B-2403-7B74F1AE5002},44" }, "remote_prefix": true, - "revision": "{BF0EE2EB-19D1-47B7-B28D-A9ABD19EBAAE},1", + "revision": "{78BFFA33-F39C-4D01-A233-B095DDCB40A9},1", "space": "{FE224563-B517-023E-0D75-9904B1952A26},1" }, { @@ -58,7 +58,7 @@ "text": "{5FB484E2-1E3E-0A9D-1989-271A3EBBEC42},44" }, "remote_prefix": true, - "revision": "{167F0C99-70D5-4B0C-8339-4A5D4FA8D101},1", + "revision": "{56C648B5-7ABD-4BF0-8BF1-D3EE0B42E2EA},1", "space": "{DED48A05-0DB1-0712-086D-09237C982341},1" }, { @@ -89,7 +89,7 @@ "text": "{012ED94B-43B3-079A-3050-B1CBE25C1C09},44" }, "remote_prefix": false, - "revision": "{F45BB0FF-3E33-4039-B5DE-C436C126C52E},1", + "revision": "{CD5794A9-1908-4925-9825-5F65D135A838},1", "space": "{7919E933-0809-00D8-1754-A21684215860},1" }, { @@ -120,7 +120,7 @@ "text": "{DAF723A3-C2A3-0798-2EAB-34613166A794},44" }, "remote_prefix": true, - "revision": "{B408F227-A7DE-4350-8068-D91005E0B8E5},1", + "revision": "{589EE5DA-F344-4995-9CFD-709A0B531774},1", "space": "{927F2809-173C-036E-37B6-60A6568F7723},1" }, { @@ -151,7 +151,7 @@ "text": "{0B467F31-D287-08CD-09F4-A6FBB2F5418F},45" }, "remote_prefix": false, - "revision": "{4F8EB252-1808-40AA-9B37-DB3DE1C5C3F2},1", + "revision": "{3A8B2D38-4664-4CD8-A960-39CC16683FE0},1", "space": "{E4D8C4CC-508B-04D2-36CE-C5B8C9D2FEC4},1" }, { @@ -182,7 +182,7 @@ "text": "{3860EA13-D444-0598-35D6-CF96769C6A21},44" }, "remote_prefix": true, - "revision": "{A291D6A6-08A8-4E06-BF29-0479851E9E12},1", + "revision": "{E3C059AE-8C62-4859-A313-1387284EC436},1", "space": "{7A363D4C-73C2-0ABE-0931-E6F62A90B95E},1" }, { @@ -213,7 +213,7 @@ "text": "{B587CBC6-0BCC-0A23-16F6-E1B0B3C5D061},49" }, "remote_prefix": true, - "revision": "{FFE1F804-FA27-4EFD-B53C-9E1D07384DA6},1", + "revision": "{21DE1101-F7D5-4B21-A1E5-365611F2E002},1", "space": "{3CC2C4DC-651A-07C9-2F7B-375C6663F3CA},1" }, { @@ -244,7 +244,7 @@ "text": "{8C65E427-477C-02ED-1807-2F10E277019D},44" }, "remote_prefix": true, - "revision": "{822FBEAD-035E-47B5-9ED6-CDAE96AA5837},1", + "revision": "{5F644A5F-F718-46D6-AA1A-F5ECA91A8547},1", "space": "{942EF5E4-FFD1-0FE4-23D2-7429899577BD},1" }, { @@ -275,7 +275,7 @@ "text": "{D4ABBE4F-2165-0122-1F9F-ACE3FE92C703},44" }, "remote_prefix": true, - "revision": "{F5ABC207-F9C7-45A3-B213-AA675126A592},1", + "revision": "{B1AD2C82-008E-4DC4-BDA9-353080F82E97},1", "space": "{A4AE40FF-DD80-0003-2856-17D8295C1B91},1" }, { @@ -306,7 +306,7 @@ "text": "{37AA5877-2980-0227-169F-8B1E8EE0795A},44" }, "remote_prefix": true, - "revision": "{8021DAB3-4163-49C4-A7A1-898ACCAB3981},1", + "revision": "{38DCA61F-4B34-4130-B805-BA2419446483},1", "space": "{739DB38B-4239-0A7C-2652-4E525D219638},1" }, { @@ -337,7 +337,7 @@ "text": "{F0832BC9-1578-0A96-08AF-99344644FFB8},50" }, "remote_prefix": true, - "revision": "{0E8285DD-840A-4C8E-BFDB-CA3589436ECD},1", + "revision": "{E938BF0E-529A-4DDB-BCD4-92830E6054E5},1", "space": "{4432E3EC-5E5F-0A04-2108-E9A2C17BDBEC},1" }, { @@ -368,7 +368,7 @@ "text": "{88189BA1-2F19-0282-05ED-A0B83153F143},44" }, "remote_prefix": true, - "revision": "{89D96DD2-2D50-433E-B54B-50018E3C2108},1", + "revision": "{2B1EEBFC-1BAF-4062-B5AC-F345BE47556A},1", "space": "{D8E15673-A45E-0914-291A-7767C3222F19},1" } ] \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/splits/native/commands.jsonl b/corpus/paragraph-edit/offline/splits/native/commands.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..2b79c4dcf2fc51fe74f386d00de0d5aaae220ab9 --- /dev/null +++ b/corpus/paragraph-edit/offline/splits/native/commands.jsonl @@ -0,0 +1,3 @@ +{"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-44FE2535 -ExpectedPages 14", "exit": 0, "stdout": "Read 1 sections and 14 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/paragraph-edit/offline/splits/native/machine.json b/corpus/paragraph-edit/offline/splits/native/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..080de4ebe5f47bba46c5fec3cef4ae5725a96868 --- /dev/null +++ b/corpus/paragraph-edit/offline/splits/native/machine.json @@ -0,0 +1 @@ +{"name": "m6-44fe2535", "hostname": "ONE-M6-44FE2535"} diff --git a/corpus/paragraph-edit/offline/splits/native/notebook/Open Notebook.onetoc2 b/corpus/paragraph-edit/offline/splits/native/notebook/Open Notebook.onetoc2 index e6462b78708e6fcff91d8fb9b4059776e8c1e932..8c552efcf552552f567c7c103140e07d4b29b2ed 100644 GIT binary patch delta 460 zcmX@0dO%fSq5gm8oA1kf<~?Pl@8)3sTxI|X C#<9)- delta 460 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 Q75mVxQ;89spGi#q1NgsW)Bpeg delta 9449 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 - + diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-000.xml b/corpus/paragraph-edit/offline/splits/native/read/page-000.xml index 552bdb1a543eab002e577f984ca924481b2c0415..b1faec9dab8d7655bc2420fb75f223d8b7c87a42 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-000.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-000.xml @@ -1,3 +1,6 @@  - -soft break]]> +☂Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-001.xml b/corpus/paragraph-edit/offline/splits/native/read/page-001.xml index d23d6f76d2f1ee76c8e096c59bacda45afb3626b..600ac843b8526ad507a9019d46e68314ed3049d9 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-001.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-001.xml @@ -1,5 +1,20 @@  -☂Bold]]> italic 🦀 é tail]]> +Bold 🦀 italic é color 東京
    +End
    ]]>
    Fictitious: café, 東京, مرحبا]]>
    diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-002.xml b/corpus/paragraph-edit/offline/splits/native/read/page-002.xml index 302f68bcfd20c4f470d4442980f39ff29626f744..2d23258654f53181a8228a43f941ac2587898421 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-002.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-002.xml @@ -1,6 +1,5 @@  -☂Bo]]>ld Bold italic 🦀 é tail]]> +style='color:#123456' lang=x-none>tail]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-003.xml b/corpus/paragraph-edit/offline/splits/native/read/page-003.xml index 8a6966323f4370b6414fa6d324ed432fc6dee0fd..7ffecd56d6d24e50bdbe6ffbbc377e61eb1ef565 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-003.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-003.xml @@ -1,2 +1,6 @@  - +☂Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-004.xml b/corpus/paragraph-edit/offline/splits/native/read/page-004.xml index 5f29ed91e8c01061ac3d14843d92c35a9d8a5024..f228a5dc3cd66dc24f3b69d421d329fa9a7c266e 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-004.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-004.xml @@ -1,5 +1,6 @@  -☂Bold ☂Bo]]>ld italic 🦀 é tail]]> +style='color:#123456' lang=x-none>tail]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-005.xml b/corpus/paragraph-edit/offline/splits/native/read/page-005.xml index 47a49619f20d80f0cd3ec8a191e25c3ae776898d..ae68430c85d445e7969cce56a67412658d3db6c4 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-005.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-005.xml @@ -1,6 +1,3 @@  -☂Bo]]>ld italic 🦀 é tail]]> +Link label tail]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-006.xml b/corpus/paragraph-edit/offline/splits/native/read/page-006.xml index 20a04fd89bdc80ba54ac6d41499b42fa651fa476..75f2a308582fb2e8d8ad2cb629088914935df8b7 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-006.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-006.xml @@ -1,6 +1,6 @@  -☂Bo]]>☂Bo]]>ld italic 🦀 é tail]]> +style='color:#123456' lang=x-none>tail]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-007.xml b/corpus/paragraph-edit/offline/splits/native/read/page-007.xml index e8e34a6b4409d0ca62fd300775ae8ab05e8e187e..32a35870d50cd31d28ab29626105efb56aa47f06 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-007.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-007.xml @@ -1,6 +1,6 @@  -☂Bo]]>☂Bo]]>ld italic 🦀 é tail]]> +style='color:#123456' lang=x-none>tail]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-008.xml b/corpus/paragraph-edit/offline/splits/native/read/page-008.xml index c98920929247120cedf4f5d8821acde295b9ddd8..2aa6dc258e62c8c98690f8458fa3bd740b23125e 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-008.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-008.xml @@ -1,5 +1,6 @@  -Bold ☂Bo]]>ld italic 🦀 é tail]]> +style='color:#123456' lang=x-none>tail]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-009.xml b/corpus/paragraph-edit/offline/splits/native/read/page-009.xml index 239094503552c6db3c0ad713177654e64e916fe3..13ebe8c874fbe8f2bbf36fcec60f6824664d99e5 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-009.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-009.xml @@ -1,6 +1,5 @@  -☂Bo]]>ld ☂Bold italic 🦀 é tail]]> +style='color:#123456' lang=x-none>tail]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-010.xml b/corpus/paragraph-edit/offline/splits/native/read/page-010.xml index 7589342d47d156ffa1b91da04b0d26bbb452e12a..d0ee05edb7264270e4b961c6d482b30b7103e13a 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-010.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-010.xml @@ -1,6 +1,2 @@  -☂Bo]]>ld italic 🦀 é tail]]> + diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-011.xml b/corpus/paragraph-edit/offline/splits/native/read/page-011.xml index 44401c90c4c34eed1906e8886f606578698472d7..92b67475fa70156b5bb6bdbe6a315888fe6b9e7e 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-011.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-011.xml @@ -1,3 +1,6 @@  -Link label tail]]> +☂Bo]]>ld italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-012.xml b/corpus/paragraph-edit/offline/splits/native/read/page-012.xml index 94b7c097ba40e651efb699b7b83e8f31997e3fbc..43c03390a66282deace641d0f26ff1a2285e243b 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-012.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-012.xml @@ -1,20 +1,5 @@  -Bold 🦀 italic é color 東京
    -End
    ]]>
    Fictitious: café, 東京, مرحبا]]>
    +☂Bold]]> italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/page-013.xml b/corpus/paragraph-edit/offline/splits/native/read/page-013.xml index b45f6367cbe094cff50050a691df1a253377e0df..5bc237449e4b32a66843869340db2f5e14ac83f2 100644 --- a/corpus/paragraph-edit/offline/splits/native/read/page-013.xml +++ b/corpus/paragraph-edit/offline/splits/native/read/page-013.xml @@ -1,6 +1,3 @@  -☂Bo]]>ld italic 🦀 é tail]]> + +soft break]]> diff --git a/corpus/paragraph-edit/offline/splits/native/read/payloads.json b/corpus/paragraph-edit/offline/splits/native/read/payloads.json deleted file mode 120000 index 787b4bae85038cda922f8befac6c8ed361fa8035..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/offline/splits/native/read/payloads.json +++ /dev/null @@ -1 +0,0 @@ -../../../../before/read/payloads.json \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/splits/native/read/payloads.json b/corpus/paragraph-edit/offline/splits/native/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/paragraph-edit/offline/splits/native/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/splits/native/run.json b/corpus/paragraph-edit/offline/splits/native/run.json index b59c126e1d874ea3b45cc19732aef5e66ac457ba..d1e6b48380edf5319f629b2a83725526766b271e 100644 --- a/corpus/paragraph-edit/offline/splits/native/run.json +++ b/corpus/paragraph-edit/offline/splits/native/run.json @@ -1,5 +1,5 @@ { - "notebook": "/Users/clo/dev/one/evidence/m10/offline-paragraph-native-01/splits/candidate", + "notebook": "/private/tmp/m33/offline-paragraph2/splits/candidate", "expected_pages": 14, "author": null, "author_timeout_seconds": 600, diff --git a/corpus/paragraph-edit/offline/splits/native/scripts/cold.ps1 b/corpus/paragraph-edit/offline/splits/native/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/paragraph-edit/offline/splits/native/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/paragraph-edit/offline/splits/native/scripts/read.ps1 b/corpus/paragraph-edit/offline/splits/native/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/paragraph-edit/offline/splits/native/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/paragraph-edit/offline/splits/native/source.json b/corpus/paragraph-edit/offline/splits/native/source.json index efa07a806149800f245ae2315d9a27dcb421ff6e..035e5e4b07b5680d3501927ff54bdeb7e043a992 100644 --- a/corpus/paragraph-edit/offline/splits/native/source.json +++ b/corpus/paragraph-edit/offline/splits/native/source.json @@ -1,8 +1,8 @@ [ { "path": "synthetic.one", - "bytes": 119736, - "sha256": "ea8264bf8df579b69755c47918ab45f77a7fdd4a4cc7564ab84813220def9322", - "mtime_ns": 1788863181033354746 + "bytes": 122856, + "sha256": "93816d43c1e4b1236186f05f706e520c9516a3a93109dba46e5242f694a0fcf2", + "mtime_ns": 1789124047655960208 } ] diff --git a/corpus/paragraph-edit/offline/splits/native/teardown.json b/corpus/paragraph-edit/offline/splits/native/teardown.json deleted file mode 120000 index 47a1192a30ea7da90676d631bb9a2687d829b43e..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/offline/splits/native/teardown.json +++ /dev/null @@ -1 +0,0 @@ -../../../joined/teardown.json \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/splits/native/teardown.json b/corpus/paragraph-edit/offline/splits/native/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/paragraph-edit/offline/splits/native/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/paragraph-edit/offline/tags/candidate/synthetic.one b/corpus/paragraph-edit/offline/tags/candidate/synthetic.one index f14e719947b2b79e1a76d8c9e320f66d883af1c9..9c260887209dab4b05055e2015902a94cb3597fa 100644 GIT binary patch delta 1360 zcmX?bmg&G*rU_Rx0&l+8_kN@AJgbyFJH^iFQZEApyp;Emzwz^q2UK7O#2i3u55#OhYz)LQK+FilmEugxHy3IpFi-ZF5XT&F#X9H6SctXxpmT$H%wFmv+vefPZpV^Az&*}C*a$_=s5SozP~Rtqs1osOnM-2 zhR=V^X0pv>JxrBVljp!}n_Mu(h!tpaIMd|nY~9IMrZ|CR5@&}_ z&YLPGAa?Fv-?|z7-unzfERBydFPq#m-D2~ZseO!KRk73M1?(<<=$>eA;M`ldOI|bn zMLbZ2gTT%7=^Ib)67`#XZ_@IQlRN)UzBAn|OAhE`e}*(5%wfo6$YV%lP+&-8C}k*N z$Y984C<4lYz>zQCzizAwTVe^}GHgj;Xqc!hb2OBFsnep(^TIBQuU!NRJ0$^z1{I(j zNEwE8Ju?&qR5lvPVfkfuXe`e@m zdeUm90j9sIfP&}_nY?S}9Of`cyiMLP%ZL@ohK8ibY%j1(;_S%+4N5;8cT0!4PBQa| zx;$%n#pFM8EjHWC0fr(-@7cNX0*`-hY>#&iabB5txpj?i!aJY}2Z0wSA~U6An%s83 zdwrnuZ(!GCpLwK)q75i`fB+PVL7zT4oK}AC*r8a&UcYJ99rRGdu$G%WeBHIcL5erYBd;H^B7QE1)2{Lr_8ylpYbG=&~pX97Z!2O_#BS zcm?d2_kWmH8$@_`uIhKL>8zHt0w#V3ri=xX`xcinDJ-14dXh9#$HK`ocf8p9qRJbfSr(IhmU2ja%vJxzw$1Yoo8=oW^K2TLH1H2_i|J&X)O5C(b@-vM;sn4Y(NEeK+Ffk_CU-5#Ku4@1H_C#9JO)(@y&%=3Cxo{Cd4sau$jCeEMn3` zGZ0H5%wTfHL@f|=PMyr;4HMNs%sX{9lSL+J2%PS3SG@0Q=QiQ}f}gK)w%woXGwFfA z(k)Rex2$U2`nL)@%)YRD^<4CGBt zoEpHUr8B3ryJFH^H%7J2Eowg*GP!5E#pW|p`xwEhVyDXs%v$i*;x+pPr&XPw zv@e}_76Vk_AYh&FZL-3FDwi!jwnq<~n%X(}&UCjdC7@@67)lw68A=!w7_u1h88R92 zfUHEISP4T0kY5B;apcSQuN$kvmRJJWAh0EYq2Xsi{?x$cW$w*WUkULWJbelZHYEXu z1{I(jNDYQ{Ju?&qs#})N+}0fNHD=)BMO*tD@(!!o^)ahv&@%s&Eka_$?)7 zm(xA}DRVXRmpADuO!k>aY9QKxLI(&yfp|vv?lSd_$Gp3H*zTpRh|fR|L=5Zx%)=6h zy7Tn~%wu-X$nfuXSf}qh?{6uS{^XqbdYGPEHQxZ!U$20I=neq}qTS>NOStMuOCYuo zuYvt`idxECBtu0fLvh$VTMfV%uU$H}C8w?z~6HYNO2bR@n029yAEestQ3m}FV z04c`FnM-*@&{NG0pvuV)XO_ZZ8I)ZRvD~sS2poqu7fzpSv4ls!iB+V|Gis7s|LM}= z%RhU%fLYRkNn_#UbBjuu9xR-^dXhAg$D+weiw|&t%m^^J7|zHznP;hlz@@bzf>Sok z^jnd$X2WXcyG1~a7L$9Ha7bZu`O*@GjvY%TuUld?dBIW*_ZDd_`?|)$Q1sp4^ zR9<;(cIml)F{5~f<(kPwd`a~}lei;q0;1I;sW`$AOH3IjFNLKW{yoyx)v>>%aL$%$@*}b2MP+-5kuH%M1YZ Cz_48a delta 460 zcmX@0dO%fSq5gm8oA1kf<~?6=fFZuwk!3aW#C+DxAJ|n`q%ov{+5}`6rY>Pr0h)bxVgbu!0bUhd zY|20`l77+95PN^eqjiZUu5HXlJns{i7&A_0WE6Ma;A?%n#{MoN$Q=v}iXsgS3@Sk9 zfH=K}PJa;5N%L43bMcqcbIH>h0u2p4K)HZvJ2r)FI`6e(VF?k-p#vQKyp>j zxx@M19xHTiZ@gT8;^5>WzNC7q54$~CFN8Twf4#exn@9a4$Px@^0L22B;&C}5nu|A# zgPq@@<;;b)qm?J#s~SKY2QmugpwCv^dm&L~v+Z8}^js^_9n}hjtnE^?4 Bv(Eqk diff --git a/corpus/paragraph-edit/offline/tags/native/notebook/synthetic.one b/corpus/paragraph-edit/offline/tags/native/notebook/synthetic.one index abb666b9c89afffb0acebc1f74a94ffd641936e5..200fde6a781c6efe24e6b0b6773b4fc8c39d54f5 100644 GIT binary patch delta 1551 zcmb7E2~3k$9Di*^s$0kxRwzdqSA(DerDn=eu-Kw?7Ti$E+yT_YiH>7j30D|1fx*Pm zuMecLQs}%R4jAvwQkE=lVz{@<^B8q_wW6` zXED<)W_rM4>f03!vwg`|jK@m93%fXzSQ^WHAfdz!_e|ME>KFqVkVP;@42-5-gQDJj z_jg2YoLDB6;?V6UuQh7e8HbeNKXq1qTf0I6`})~m>OcE$zX(RrIFuL7 z-JRuq+B%Zw)x9-Ds2-m3tiDY{4sgPq<%b0ThH^l2oCo*!v@gjYti|*#``DXF%S8(? z%H5l)dr43xa6?832uy_i2wM^MAaD?Hh%z?4Pl$Flf;)mQ0zQvZe_lit?36H|M47=z zi?{=gvUC->*CqzaB4IYU(EO2m6r5y{oG#EwT}n@eGDc|xgb zfw<*%)G)KSCLRB5v~ZWXQUC=o!r8JMw*Qq4zTd=mL7CI(u;RUN_n?~N22J@Od z3D0ll6<5@aN5*)^WA;ojdSOFLG!)c_wz&-3Woi|GM6%ug^;*= zy2Us>?2*zouj*Ta^-tkk%fYiRqmGY)chN5goB?^@6bJxvPy&iUHpmBsNQ>8vU)O&# zmdko#?0>=4EKp4bb0*VV^#^oRr_972)M4&|2vE&MI&9{Yu0b70aE*LU{>3rZLe{qU z+Q-Hxa8w;hM0uFIBpxA2>O;PRN8lfGd^qP0j;t8zd4VKH1ANvxm0F@8?5lu{GBLT2RFT40Vg!nw(QEzh~H2k6kTkbkj==kXsF z#ky1*M;cuVC*IzQt(S*Z`T*|@$>IJ+QDuFFcPtuyAwByNRCJfn1G?aV%9mc(1%rAf z_&C;UJX1OixBK^W;ja}h%*&nir@_}Z+@wu^Ocfn5aaT~RXeiY)eb#b!Y`iE|h&~)K zP1f9uB|_22>5D;~r5ony`7pqHODGML_yNv;Pc~fX@jA7t-FEHX$<1WLg>h>Bi|JP! zFW`CkCa;3Jg&upcJhWjS8h%8u;5g#fQGt*w3x)-u4kOB-Tfihc%B>O-c2J$`!C%sTmD+Coc(d}Y$e-|iXNC?{0XmtSE~R3 delta 1523 zcmb7EYfO_@7(Q*sMZ(-?>9}a8MTx7(rLt`6pt8!PmYWw;bPaQ5F&nrB5GZkF1E+4> z8rt%I_zG11_wD%mEnqMTJ&dT&xf^SP~N(k1l>a6XH4tJ19(h zFojNMD1+7*H%{I5W}Ng*noBH7qTmVOpfg?}1B9#+q=|buY@k|kY(ZS$v(8VvC0wn& z20Q2>_NoBh$2@OLipN-s@ivAp#%mZ%3~~vPZQwgT?t?Js7#lFiyymk)ANz@LAq|Ae zqf{pktXW6uRd0|HD~kiUs&F!FDrbUKwUrE~%Xz@4XA>ie%FvmNc!BbF!{WT;@(iTc z&l09S(F^xuKNTo01@If4SG$1+QJzd0G(Fu33e_=QPTu%oDwKT`33t^AG(3Ww#zT;= z2_z;)hqu>cf0%3&ecoJD`TaqVYq|DOO&w*0^{#dk(O_8S{_5jQ=&Js6`^3;s*_gp6 z;=~KUa>$bU(s$l+3~Q=kS}Qod8H>$CQdEpe5DOhg1t<^Y<0uE`N>DBy7h%TD$AAB2 zlVus-!ZF$U#OTywVS#4<8T0NlntA$5oVhvDw#@`O6^6f&9FOhfx=^C*Y^VNmUEqaO zOR2N2>@*X;(M1z%tM@OhT}8VqD@L#16@8HmOS&jek+FJ?r!E;zx*r7k^-a|Am6CzA zA;xR`KO-59sWd#oMgno;;nc+7$i9?1S8&wyqp=IH)XcT>ny`r^<4*G?!f?LQdrfj^ ziupuGP5NMq9y9pF9}CB_`x74QRX1-d=sX?Cg7lW>HIYZUgBxk$Xn@Q7s_k}Kt=#*; z2bTA8-A(k^ZmH!NCPubK6K`f;)#dJ0@Oz^(T9&2MXppo3Trs3gnsm8Sb~{3TDEOdg;GaCV!Xzt9-UCbESs&+O)tm`V$FWjPevwy+AP{ zEuLJI*Wh20Pi42kSi6)u+XmhB8>qr|c)!EpN3OAtGk%yt0e@34G0}5yo!YA3W09P< zcGFx%cp?|%M&I?%I=QI?Rb4ScuQ3J;CdQuMymGqYL|lHA%++&I6%;^ - + diff --git a/corpus/paragraph-edit/offline/tags/native/read/page-000.xml b/corpus/paragraph-edit/offline/tags/native/read/page-000.xml index 9b852a0b5177c4b307766f1da26fd363570f79f2..bebd57b40de4d0664ebc0b669851eb57535460c4 100644 --- a/corpus/paragraph-edit/offline/tags/native/read/page-000.xml +++ b/corpus/paragraph-edit/offline/tags/native/read/page-000.xml @@ -1,20 +1,5 @@  -Bold 🦀 italic é color 東京
    -End
    ]]>
    Fictitious: café, 東京, مرحبا]]>
    +Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/tags/native/read/page-001.xml b/corpus/paragraph-edit/offline/tags/native/read/page-001.xml index a518cfa62728716735c00eba3f549cd8ceed68ed..68ef3f6d1b15e91dac1929ba9c59023a2dc252c8 100644 --- a/corpus/paragraph-edit/offline/tags/native/read/page-001.xml +++ b/corpus/paragraph-edit/offline/tags/native/read/page-001.xml @@ -1,5 +1,5 @@  -☂LeftBold italic 🦀 é tail]]> +Bold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/tags/native/read/page-002.xml b/corpus/paragraph-edit/offline/tags/native/read/page-002.xml index 6c9bad30a1ce9ab4890efd523db2c4d8686fa73d..1c3243aa9fe4fd87aba7ba4f9fcb962358d86b05 100644 --- a/corpus/paragraph-edit/offline/tags/native/read/page-002.xml +++ b/corpus/paragraph-edit/offline/tags/native/read/page-002.xml @@ -1,5 +1,20 @@  -Bold italic 🦀 é tail]]> +Bold 🦀 italic é color 東京
    +End
    ]]>
    Fictitious: café, 東京, مرحبا]]>
    diff --git a/corpus/paragraph-edit/offline/tags/native/read/page-003.xml b/corpus/paragraph-edit/offline/tags/native/read/page-003.xml index f8a75604a6d26a6ae036923d879551df7dbf6ee9..e4a5d558d47c71c2e4b5fa88f5d835384664bfda 100644 --- a/corpus/paragraph-edit/offline/tags/native/read/page-003.xml +++ b/corpus/paragraph-edit/offline/tags/native/read/page-003.xml @@ -1,5 +1,5 @@  -Bold italic 🦀 é tail]]> +☂LeftBold italic 🦀 é tail]]> diff --git a/corpus/paragraph-edit/offline/tags/native/read/payloads.json b/corpus/paragraph-edit/offline/tags/native/read/payloads.json deleted file mode 120000 index 787b4bae85038cda922f8befac6c8ed361fa8035..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/offline/tags/native/read/payloads.json +++ /dev/null @@ -1 +0,0 @@ -../../../../before/read/payloads.json \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/tags/native/read/payloads.json b/corpus/paragraph-edit/offline/tags/native/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/paragraph-edit/offline/tags/native/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/tags/native/run.json b/corpus/paragraph-edit/offline/tags/native/run.json index 5a64074979038e3aff0716e3caf13ae9c03b43f3..d4b1988f68362444a06029d59a2b54a76c9276ad 100644 --- a/corpus/paragraph-edit/offline/tags/native/run.json +++ b/corpus/paragraph-edit/offline/tags/native/run.json @@ -1,5 +1,5 @@ { - "notebook": "/Users/clo/dev/one/evidence/m10/offline-paragraph-native-01/tags/candidate", + "notebook": "/private/tmp/m33/offline-paragraph/tags/candidate", "expected_pages": 4, "author": null, "author_timeout_seconds": 600, diff --git a/corpus/paragraph-edit/offline/tags/native/scripts/cold.ps1 b/corpus/paragraph-edit/offline/tags/native/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/paragraph-edit/offline/tags/native/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/paragraph-edit/offline/tags/native/scripts/read.ps1 b/corpus/paragraph-edit/offline/tags/native/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/paragraph-edit/offline/tags/native/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/paragraph-edit/offline/tags/native/source.json b/corpus/paragraph-edit/offline/tags/native/source.json index 5253d2f66a6d0335f7eac687493ecba83043724c..67a904481d512f560fc5f2a66c5abc45bc0270fc 100644 --- a/corpus/paragraph-edit/offline/tags/native/source.json +++ b/corpus/paragraph-edit/offline/tags/native/source.json @@ -2,7 +2,7 @@ { "path": "synthetic.one", "bytes": 42688, - "sha256": "4d6efc70b84628a281d1a64dbb3cf96d7c682d558ed7fbef708b493c51b01794", - "mtime_ns": 1788863185189921064 + "sha256": "dd0e8e02e4c47ef4a210769e0e7f2a461f453b7c5215bef335ae315ed0798c7d", + "mtime_ns": 1789121622241377768 } ] diff --git a/corpus/paragraph-edit/offline/tags/native/teardown.json b/corpus/paragraph-edit/offline/tags/native/teardown.json deleted file mode 120000 index 47a1192a30ea7da90676d631bb9a2687d829b43e..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/offline/tags/native/teardown.json +++ /dev/null @@ -1 +0,0 @@ -../../../joined/teardown.json \ No newline at end of file diff --git a/corpus/paragraph-edit/offline/tags/native/teardown.json b/corpus/paragraph-edit/offline/tags/native/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/paragraph-edit/offline/tags/native/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/corpus/paragraph-edit/reconciliation/README.md b/corpus/paragraph-edit/reconciliation/README.md index 66f2d1bb8e4dd97316f8c026464ff90f2e368457..d9e71ba59c4cf5aba88e49af2b352dd9874c4487 100644 --- a/corpus/paragraph-edit/reconciliation/README.md +++ b/corpus/paragraph-edit/reconciliation/README.md @@ -13,22 +13,24 @@ changes. Bullets alter ancestry: the first paragraph gains an outline group, and a later bullet becomes a child of its preceding paragraph. Replacing a whole selected sibling creates a new paragraph; the split/join targets retain identity. -`reconciled` retains Rust output and a fresh OneNote cold-open. Six cases publish -automatically; eight publish after explicit review. Each includes a dependent -text edit, with SQLite reopen between local acknowledgements and publications. -The changed empty-left survivor and nonadjacent bulleted join retain conflicts. -Public tests check all 28 receipts, exact active graph/child levels, native -characters/styles, and the saved graph's identities. COM replacement controls -also retain all sixteen local branches across reopen without publishing. +`reconciled` retains Rust output and a fresh OneNote cold-open. Each local +split or join is a page-model save with a dependent text edit, with SQLite +reopen between local acknowledgements and publications. Six cases merge +automatically against the keyboard changes; ten publish after the conflicting +page is reviewed against the remote page. Public tests check all 32 receipts, +exact active graph/child levels, native characters/styles, and the saved +graph's identities. COM replacement controls retain all sixteen local branches +across reopen without publishing. Regenerate keyboard controls with `tools/native_runner.py` on `before/notebook`, using `--expected-pages 17 --inspect --collect-notebook`. Once inspection is ready, run `tools/native_paragraph_reconciliation.py OUTPUT`; it records actions and requests final capture. The runner removes its owned clone. The ignored -Rust test `paragraph::export_native_reconciliation` generates reconciled output +Rust test `export_native_reconciliation` in `crates/notebook/tests/sync_paragraph.rs` +generates reconciled output at a new absolute `ONESTORE_NATIVE_RECONCILIATION_OUTPUT` directory. Cold-open its `candidate` with the same runner, without inspection. Verification lives in -`tools/test_paragraph_edit.py` and the offline crate's `tests/sync.rs`. +`tools/test_paragraph_edit.py` and `crates/notebook/tests/sync_paragraph.rs`. The original COM pass stopped at its fifth case because its tag definition followed page settings. The recorded continuation fixes the schema order and diff --git a/corpus/paragraph-edit/reconciliation/reconciled/candidate/synthetic.one b/corpus/paragraph-edit/reconciliation/reconciled/candidate/synthetic.one index 1d8e772b17c02f0800c4007232b3e463f018afd2..b7b4cfc4be91f37edf05375b0a6f8010ed310d1d 100644 GIT binary patch delta 15923 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 F{$C%GKF9z7 delta 11457 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 diff --git a/corpus/paragraph-edit/reconciliation/reconciled/manifest.json b/corpus/paragraph-edit/reconciliation/reconciled/manifest.json index 8b9e4249a69e21b98eb28554ee01660413e1874c..4043cf9d474af1b56c831209656a7445aaea1313 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/manifest.json +++ b/corpus/paragraph-edit/reconciliation/reconciled/manifest.json @@ -1,323 +1,320 @@ [ { "case": "Split remote prefix", - "dependent_receipt": "{CE7388B9-8702-4628-B5FD-1CB0A86C7579},1", + "dependent_receipt": "{624D42D9-7CE1-4674-8366-6F415872530A},1", "intent": { "author": "Offline author", - "created": 1473355695, "guid": [ - 72, - 3, - 21, - 225, - 173, - 175, - 163, - 66, - 181, - 182, - 27, - 215, - 235, - 175, - 30, - 101 + 10, + 220, + 116, + 136, + 157, + 253, + 179, + 71, + 167, + 131, + 207, + 16, + 211, + 127, + 73, + 37 ], "offset": 2, "text": "{C4C5964A-00F6-06E5-1947-EF9DD9BFF93E},44" }, "outcome": "automatic", - "receipt": "{32C8046A-B530-44D9-932E-964D583CE2DC},1", + "receipt": "{DA0B7BE8-0AFE-48DB-9C72-C1F82CA0BCB6},1", "space": "{A65F69BB-E7E1-008D-3482-4FC58FF0A3B0},1" }, { "case": "Split remote boundary", - "dependent_receipt": "{BA2BDF8F-DCC0-4065-90F1-6983A1F37E15},1", + "dependent_receipt": "{F766B80E-E0EB-4E63-B68B-80B7B28EDE3B},1", "intent": { "author": "Offline author", - "created": 1473355696, "guid": [ - 121, - 163, - 49, - 221, - 144, + 6, + 79, + 119, 2, + 233, + 174, + 171, 69, + 180, + 107, + 226, 72, - 145, - 115, - 17, - 231, - 77, - 231, - 13, - 167 + 157, + 76, + 124, + 140 ], "offset": 2, "text": "{B0EA7EA0-AE25-0921-1069-CBBA308ECFA0},44" }, - "outcome": "reviewed", - "receipt": "{EE6FDF11-A1B9-402D-B1BE-F7EE9004909F},1", + "outcome": "automatic", + "receipt": "{78100DCA-4BA7-42D5-A343-51E7FBCB10F7},1", "space": "{CCEE4619-CA65-0DE0-0D46-E176E0F2DBA1},1" }, { "case": "Split remote child", - "dependent_receipt": "{FFEEB215-51E2-44B6-8D3B-475400347A22},1", + "dependent_receipt": "{AE9BE202-1C1E-4966-B452-0A0080E23DA4},1", "intent": { "author": "Offline author", - "created": 1473355696, "guid": [ - 229, - 160, - 224, - 139, - 80, - 49, - 248, - 79, - 147, - 199, - 22, + 231, + 140, + 15, + 124, + 208, + 58, + 168, + 72, + 176, + 200, + 212, 222, - 227, - 116, - 32, - 195 + 137, + 245, + 202, + 57 ], "offset": 2, "text": "{104C2D57-3EE2-0EAB-30A2-0FC6C9266E5B},44" }, "outcome": "reviewed", - "receipt": "{B3E8433E-8363-4424-8B20-C0F3A9712D81},1", + "receipt": "{D58EDEBC-5061-4CAF-8E2B-888E24934FD1},1", "space": "{285A5A8A-A525-0F77-1A76-DA3EDFB1DA1A},1" }, { "case": "Split remote list", - "dependent_receipt": "{A50CB64F-C580-43E9-B1DF-522FB18B6B51},1", + "dependent_receipt": "{C4328AEA-161E-4527-9BFA-9DA85837DF20},1", "intent": { "author": "Offline author", - "created": 1473355697, "guid": [ - 6, - 118, - 122, - 220, - 71, - 210, - 164, - 79, - 154, - 8, - 22, - 195, - 142, - 16, - 93, - 166 + 29, + 245, + 132, + 230, + 75, + 108, + 5, + 75, + 181, + 91, + 65, + 226, + 219, + 187, + 252, + 161 ], "offset": 2, "text": "{F6421F33-2FD5-0666-003F-813B1C563A01},44" }, - "outcome": "reviewed", - "receipt": "{967507AF-A4FC-4593-85DA-DB4BDB215CB8},1", + "outcome": "automatic", + "receipt": "{664E7D3E-0E87-465A-9D85-D51BCBB7B81E},1", "space": "{7A86454E-A11A-0B10-299D-79506B4F857D},1" }, { "case": "Split remote tag", - "dependent_receipt": "{8C68C1BF-FA7C-414C-B4C8-6D6330816B67},1", + "dependent_receipt": "{B561B184-AACB-4988-AE38-A3E279A6C365},1", "intent": { "author": "Offline author", - "created": 1473355698, "guid": [ - 190, - 238, - 93, - 84, - 186, + 133, + 169, + 135, + 123, + 80, + 219, + 172, + 74, + 134, 28, - 195, - 65, - 140, - 108, - 184, - 101, - 128, - 188, - 55, - 19 + 194, + 231, + 9, + 41, + 107, + 83 ], "offset": 2, "text": "{7DA1F20C-3C1E-0B74-1075-5794C1B3798D},44" }, - "outcome": "reviewed", - "receipt": "{ABF29E0E-5267-416D-BCDC-C6A5E7378D30},1", + "outcome": "automatic", + "receipt": "{AA95BF3E-3113-49F1-A31E-E428CDAE2625},1", "space": "{A08B780C-24AB-0A98-3E62-FB34B130968D},1" }, { "case": "Split remote format", - "dependent_receipt": "{D9948EA1-D7AA-450F-949C-1489C5B37D92},1", + "dependent_receipt": "{1C80B35A-76A0-41F3-A708-FF90718AFF56},1", "intent": { "author": "Offline author", - "created": 1473355698, "guid": [ - 56, - 178, - 113, - 83, - 197, - 69, - 46, - 64, - 181, - 97, - 8, - 109, - 138, - 17, - 10, - 110 + 105, + 214, + 110, + 67, + 145, + 55, + 18, + 70, + 132, + 243, + 118, + 74, + 169, + 169, + 100, + 168 ], "offset": 2, "text": "{902B0337-F0C5-0BBE-0498-8BD6026F456B},44" }, - "outcome": "automatic", - "receipt": "{C93BEE05-161E-45D1-90A7-9EBCB1889577},1", + "outcome": "reviewed", + "receipt": "{1FD6F098-47C7-4675-8646-8CE2156EE47F},1", "space": "{D539675B-7392-04A3-2878-44BCC3D1B3F0},1" }, { "case": "Split remote sibling", - "dependent_receipt": "{971EC3CC-2FD5-4A40-A9DF-A7E250057BF6},1", + "dependent_receipt": "{E61BDF53-29C6-4880-8424-677687E51F09},1", "intent": { "author": "Offline author", - "created": 1473355699, "guid": [ - 29, + 216, + 219, + 151, + 5, + 67, + 148, 215, - 155, - 66, - 220, - 243, - 26, 76, - 178, - 203, - 57, - 141, - 56, - 243, - 174, - 46 + 173, + 248, + 250, + 138, + 108, + 165, + 227, + 176 ], "offset": 2, "text": "{FD3FA68E-ED95-0917-2B3B-5C79ECEB2D0E},44" }, "outcome": "automatic", - "receipt": "{CF2A16BE-1BC9-4A42-BA60-EA637480552C},1", + "receipt": "{448A3901-3088-4212-9113-535221C53361},1", "space": "{21901482-DF06-003E-2716-4BA74B11BB0E},1" }, { "case": "Join remote prefix", - "dependent_receipt": "{2D17C528-B546-40FA-8485-16C9B0DABF6E},1", + "dependent_receipt": "{B3D05B77-033E-45E7-B8A1-6FBBF62BF5E0},1", "intent": { "author": "Offline author", "left": "{E0868E55-9B34-0920-0C68-41DAF36CBB7F},44", "right": "{E0868E55-9B34-0920-0C68-41DAF36CBB7F},50" }, - "outcome": "automatic", - "receipt": "{F63692D3-3D09-43A6-890D-10C65A159B16},1", + "outcome": "reviewed", + "receipt": "{C3AA6D00-CFF5-403D-98C4-EF0F260E0217},1", "space": "{5C69DFAE-0015-0129-319D-6ED27D45DC05},1" }, { "case": "Join left boundary", - "dependent_receipt": "{0CA7FB85-F492-47BD-919C-6A919CFB409E},1", + "dependent_receipt": "{BAA33FFF-9555-48CE-8D5F-8863DF4970EE},1", "intent": { "author": "Offline author", "left": "{27186905-3842-03DE-0E7D-CE7F31737984},44", "right": "{27186905-3842-03DE-0E7D-CE7F31737984},50" }, "outcome": "reviewed", - "receipt": "{166E0BE9-230F-43E9-8555-C6776B5D6183},1", + "receipt": "{7711053D-CAC3-4D4F-95B2-1BD1BB9DD4A5},1", "space": "{450673F7-0AD8-019F-3DEC-E68620129B08},1" }, { "case": "Join right boundary", - "dependent_receipt": "{F89D5093-F20C-4391-9F38-6C716922731D},1", + "dependent_receipt": "{F1A3437F-23AB-4C36-82BC-8D617A292956},1", "intent": { "author": "Offline author", "left": "{819B5D83-38B7-0A56-23F1-11036FB61114},44", "right": "{819B5D83-38B7-0A56-23F1-11036FB61114},50" }, "outcome": "reviewed", - "receipt": "{084D104B-CB74-492A-8EAF-0D9E8E6F6099},1", + "receipt": "{396CA92E-B80A-4DAC-BB86-18972F52E123},1", "space": "{E25678DE-0A10-04EB-3970-C9AC1F1B04C9},1" }, { "case": "Join remote child", - "dependent_receipt": "{2196E1EA-49A6-4A1C-B0FE-3CCBCD1EA993},1", + "dependent_receipt": "{5A43945C-5367-430E-AABB-47CAC7588B09},1", "intent": { "author": "Offline author", "left": "{6BBF566E-180E-0C79-0D86-935FBEE2A4E3},44", "right": "{6BBF566E-180E-0C79-0D86-935FBEE2A4E3},50" }, "outcome": "reviewed", - "receipt": "{69B85C08-6FD0-4756-B20A-39A342BA516C},1", + "receipt": "{8653E3A4-BA68-4FBF-BC76-815C1E4E88FC},1", "space": "{2FE6E22D-9416-0685-182D-8AC8747108BB},1" }, { "case": "Join remote list", + "dependent_receipt": "{8F7BB49D-F28F-45BA-9B24-C33E6D38F016},1", "intent": { "author": "Offline author", "left": "{A6081B82-7DFE-07D6-0C07-981653C0A151},44", "right": "{A6081B82-7DFE-07D6-0C07-981653C0A151},50" }, - "outcome": "retained_conflict", + "outcome": "reviewed", + "receipt": "{5BC4FA0D-45A3-4889-A70E-0422004A21A4},1", "space": "{F2EB9152-3D0C-0AE7-0CC2-ADD3039466B6},1" }, { "case": "Join remote tag", - "dependent_receipt": "{F4EB3C75-AB8C-4E7C-9A64-69593946321E},1", + "dependent_receipt": "{9D14BD20-E597-4EA3-ACD9-0ED56BB2EE12},1", "intent": { "author": "Offline author", "left": "{5AAEA398-E9D5-0C6E-23AD-EA8DBDF6F089},44", "right": "{5AAEA398-E9D5-0C6E-23AD-EA8DBDF6F089},50" }, "outcome": "reviewed", - "receipt": "{5AC635E3-AC61-41EF-9424-737AD0EAAF32},1", + "receipt": "{540BD622-A4FE-41B6-BD8C-8C1810836F27},1", "space": "{CBAD3AB0-2867-0C49-3674-2F3D59E3B4D3},1" }, { "case": "Join remote format", - "dependent_receipt": "{649CC682-7CCB-4A9E-9C26-06DDF3A7F49E},1", + "dependent_receipt": "{AECD8283-0DB5-4B83-A162-52905793BF92},1", "intent": { "author": "Offline author", "left": "{4BA6AC49-6DAB-0961-193C-599E93042581},44", "right": "{4BA6AC49-6DAB-0961-193C-599E93042581},50" }, - "outcome": "automatic", - "receipt": "{F63BD836-C10E-4928-890D-9BCB13C1C3F5},1", + "outcome": "reviewed", + "receipt": "{16C041EB-DEF7-4BB1-A91C-7441877A4C5B},1", "space": "{4DF04E8C-5A2A-0703-2F62-C2283C759F0E},1" }, { "case": "Join remote sibling", - "dependent_receipt": "{2A4C6024-4FF9-46A9-83A1-34F1A7EF62F2},1", + "dependent_receipt": "{D0F895AB-6814-43C9-86F2-06FA8BC7A98D},1", "intent": { "author": "Offline author", "left": "{B59E6ADF-31AD-0C77-1E3A-B6C5DC1FB260},44", "right": "{B59E6ADF-31AD-0C77-1E3A-B6C5DC1FB260},50" }, "outcome": "automatic", - "receipt": "{B29D40A5-BAE2-48BA-9028-25A1B14CF27F},1", + "receipt": "{20D66DD3-A173-4C77-9E56-CF5F6A81E617},1", "space": "{BCA661C5-E70D-076E-3034-C9F4B253A24B},1" }, { "case": "Join empty adoption", + "dependent_receipt": "{0AD9509F-34FE-4317-9606-BCE2079F6772},1", "intent": { "author": "Offline author", "left": "{F7F19A45-79BC-0FF0-3B34-A22033F38FB1},45", "right": "{F7F19A45-79BC-0FF0-3B34-A22033F38FB1},50" }, - "outcome": "retained_conflict", + "outcome": "reviewed", + "receipt": "{14312F31-1AA9-48E1-A133-F9C89B9D63C6},1", "space": "{B1520A77-074F-0821-0405-457528B96164},1" } ] \ No newline at end of file diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/commands.jsonl b/corpus/paragraph-edit/reconciliation/reconciled/native/commands.jsonl index cb3c2a111b21a7326b68fd579f1793e987266689..c79132acca06c265f17d6ec59d73b031459fe3f2 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/commands.jsonl +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/commands.jsonl @@ -1,3 +1,3 @@ {"command": "powershell -NoProfile -Command \"Expand-Archive -LiteralPath C:\\one-tests\\transfer.zip -DestinationPath C:\\one-tests\\runs\\capture\\notebook\"", "exit": 0, "stdout": "", "stderr": "", "error": null} -{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-C4BC54FD -ExpectedPages 17", "exit": 0, "stdout": "Read 1 sections and 17 pages.\r\n", "stderr": "", "error": null} +{"command": "powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -File C:\\one-tests\\read-current.ps1 -Root C:\\one-tests\\runs\\capture -CloneHost ONE-M6-7EAD48EB -ExpectedPages 17", "exit": 0, "stdout": "Read 1 sections and 17 pages.\r\n", "stderr": "", "error": null} {"command": "powershell -NoProfile -Command \"Compress-Archive -Force -Path C:\\one-tests\\runs\\capture\\* -DestinationPath C:\\one-tests\\captured.zip\"", "exit": 0, "stdout": "", "stderr": "", "error": null} diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/machine.json b/corpus/paragraph-edit/reconciliation/reconciled/native/machine.json new file mode 100644 index 0000000000000000000000000000000000000000..b1ce04ed60fad3d86ae50076daefab69e468d1d3 --- /dev/null +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/machine.json @@ -0,0 +1 @@ +{"name": "m6-7ead48eb", "hostname": "ONE-M6-7EAD48EB"} diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/notebook/Open Notebook.onetoc2 b/corpus/paragraph-edit/reconciliation/reconciled/native/notebook/Open Notebook.onetoc2 index b9bab8c52537429d44220695235ee851fb06b25f..c56b4c48e64c367efd87418b511f64fd4d8aaa3a 100644 GIT binary patch delta 460 zcmX@0dO%fSq5gm8oA1kf<~O_St8bTrKZ9`V~ zcuua?I;31b!<(A{0!}vRd}^+|?7e<|wTAZ!cGJm*j53=g82>YA{yck`mD7KkZ?E}m zkGDdt#~6VcSP~iyZ104I3SF6=#XCBcIXlUpG%57hnvZB9V(sOC`VSA1llfF#e&AVLSLyD}y z3#SsV=F}ypzt0sBm|Vn{RPWe&n(0a31^>=1S57_oH<=4$35GL(VhsuNaXDhzHqk5B zMXWrQPkFyU>{mmFssY4tAfsRoax)O}6Rle1KQHFj!^zVQtp>?C8Zh*34(88g1_0TO BtnvT= delta 460 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 JQP5z{{|9coR(AjZ delta 11511 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 diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/environment.json b/corpus/paragraph-edit/reconciliation/reconciled/native/read/environment.json index 65aa2c11c1ebdbd6f42f5804c7aab2e333b85de8..5009213eb33754b0ed4ce5ad9fc7cdaabc6866bb 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/environment.json +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/environment.json @@ -1,7 +1,7 @@ { "powershell": "5.1.14409.1005", "schema": "xs2010", - "hostname": "ONE-M6-C4BC54FD", + "hostname": "ONE-M6-7EAD48EB", "cold": true, "onenote": "14.0.4763.1000" } diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/hierarchy.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/hierarchy.xml index 0441bcc4c362b34c6f9558ee8700e0455d3b0dbf..1acf349e6834af967b346441e8072978329395a0 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/hierarchy.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/hierarchy.xml @@ -1,2 +1,2 @@  - + diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-000.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-000.xml index 81c1ddb53e5bf54933e0d631bcd218afca494a83..026a1eebe8bd2aea1669097386e11c027cb78d94 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-000.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-000.xml @@ -1,4 +1,4 @@  -Xab]]>🦀Cd]]> +ab]]>🦀Cd]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-001.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-001.xml index 1e3c0a44d06f38f8164cd0599202c8bc0e71ae26..e617287e7eb72af365274f1f75a628ca1744aa0e 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-001.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-001.xml @@ -1,4 +1,4 @@  -ab]]>🦀Cd]]> +ab🦀CdRight]]>Native child]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-002.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-002.xml index d3fc936e7fe651db0077215d8b151acaec9f3a81..1391a910ec80e9533dc0b2413ee11a8378bfa181 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-002.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-002.xml @@ -1,3 +1,5 @@  -Right]]> +ab]]>🦀Cd]]>Native child]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-003.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-003.xml index 74ac54b851bf4c5a248faac016ae80a3491f38d8..cd570350009397ee1ee8b4a68bba8452cd56a132 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-003.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-003.xml @@ -1,3 +1,3 @@  -ab🦀CdRight]]> +Xab🦀CdRightY]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-004.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-004.xml index 7f704143d0cd08864436d46fc2d9c435b3b7224c..b5fb5f43a157ccad7de6984d51b25be6821ef5bb 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-004.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-004.xml @@ -1,3 +1,3 @@  -ab🦀CdXRight]]> +ab🦀CdXRight]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-005.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-005.xml index 73e4802abc70716f755ab5abcda28d93156d84b6..c9e44049873f1462e5c0e25bd1146a5b7abbb39c 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-005.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-005.xml @@ -1,4 +1,4 @@  -ab🦀cd]]>Right]]> +ab🦀CdRight]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-006.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-006.xml index 8c186c2049b406f4d2988b54dc6c4ab768fa1a63..bd9f801d6ccc0915ebfb7a88a192786dcc212bbb 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-006.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-006.xml @@ -1,4 +1,4 @@  -abX]]>🦀Cd]]> +ab]]>🦀Cd]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-007.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-007.xml index 6caf646c16101926c31bf4e183e22b1a71fe0bc8..925d7d5dbeb13c73a9bb5863321ab6a062be2ef3 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-007.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-007.xml @@ -1,3 +1,20 @@  -ab🦀CdRight]]> +Bold 🦀 italic é color 東京
    +End
    ]]>
    Fictitious: café, 東京, مرحبا]]>
    diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-008.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-008.xml index a64bd030159d49e5a39d1dea87b50737558f004d..d64db444507a0b48b3447043a29e5ca11702ad54 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-008.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-008.xml @@ -1,4 +1,3 @@  -ab]]>🦀Cd]]> +Iight]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-009.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-009.xml index 574e842905eee4665974e53774334610e01e604d..02c7c9993a6c62ea5281c4618a80e649189085a9 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-009.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-009.xml @@ -1,4 +1,3 @@  -ab]]>🦀Cd]]> +ab🦀CdRight]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-010.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-010.xml index 53ce13775c9a4597cacd837f842cdc5c766c9f57..c9bc66ef04a92a736260f160e44dab73afa5c70d 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-010.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-010.xml @@ -1,4 +1,4 @@  -ab🦀CdRight]]>Native child]]> +Xab]]>🦀Cd]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-011.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-011.xml index 5f9da940793a81e5edd9793998588904f3761844..1e696b47c66d1e600164795ac0692f16e30e3791 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-011.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-011.xml @@ -1,5 +1,4 @@  -ab]]>🦀Cd]]>Native child]]> +ab]]>🦀Cd]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-012.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-012.xml index e0f5b22e79144bbc918089e91c4c232a4304ca4a..9a4942af480e2f18d3bbebbc62c1a6409e906305 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-012.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-012.xml @@ -1,20 +1,4 @@  -Bold 🦀 italic é color 東京
    -End
    ]]>
    Fictitious: café, 東京, مرحبا]]>
    +ab]]>🦀Cd]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-013.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-013.xml index 2674fc5835ded06fdb7c449ffa12c29ea2bad9d2..9a7221855e1e3a5a5f79328ae97679f7c4c0b8e7 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-013.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-013.xml @@ -1,4 +1,4 @@  -ab]]>🦀Cd]]> +abX]]>🦀Cd]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-014.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-014.xml index ea2d860a04647d8391d6e08fcb720119ceeeeb76..32a6c5f5408b45b3ed2017198d12a9a27cbefa75 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-014.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-014.xml @@ -1,3 +1,3 @@  -ab🦀CdXRight]]> +ab🦀CdRight]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-015.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-015.xml index 95b0b9ab9926bf25580ce122c42b43d21e5dbe21..c1169ab868689944ab3ab1d4017c5fc56551ef9d 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-015.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-015.xml @@ -1,4 +1,3 @@  -ab🦀CdRight]]> +ab🦀CdRight]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-016.xml b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-016.xml index fba65e6542efe81eaa6b811b94f4d245b44bdf4c..eb0ba7644c5790a4f2ccbe39e4737b30083e12fb 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-016.xml +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/page-016.xml @@ -1,3 +1,3 @@  -Xab🦀CdRightY]]> +ab🦀CdXRight]]> diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/payloads.json b/corpus/paragraph-edit/reconciliation/reconciled/native/read/payloads.json deleted file mode 120000 index 787b4bae85038cda922f8befac6c8ed361fa8035..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/read/payloads.json +++ /dev/null @@ -1 +0,0 @@ -../../../../before/read/payloads.json \ No newline at end of file diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/read/payloads.json b/corpus/paragraph-edit/reconciliation/reconciled/native/read/payloads.json new file mode 100644 index 0000000000000000000000000000000000000000..1ce91a413d6fff4d58765187b76756f0e97ae843 --- /dev/null +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/read/payloads.json @@ -0,0 +1,3 @@ +[ + +] \ No newline at end of file diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/run.json b/corpus/paragraph-edit/reconciliation/reconciled/native/run.json index 546fce9d6b573ef588180ddb0b1e6da6b0b249c6..f7cb239882f1e38b23db896ef13ffeccbe352b2b 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/run.json +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/run.json @@ -1,5 +1,5 @@ { - "notebook": "/Users/clo/dev/one/evidence/m10/paragraph-native-reconciled-01/candidate", + "notebook": "/private/tmp/m33/reconciliation2/candidate", "expected_pages": 17, "author": null, "author_timeout_seconds": 600, diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/cold.ps1 b/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/cold.ps1 deleted file mode 120000 index 26b7b0452f69923a3f8cb748d6b5206dbee28c45..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/cold.ps1 +++ /dev/null @@ -1 +0,0 @@ -../../../keyboard/scripts/cold.ps1 \ No newline at end of file diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/cold.ps1 b/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/cold.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..a0b99e7aeb86f4dc10032537800501a52ad65b4f --- /dev/null +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/cold.ps1 @@ -0,0 +1,27 @@ +param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '') +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +if (Get-Process ONENOTE -ErrorAction SilentlyContinue) { throw 'Close OneNote before resetting its test cache.' } +$key = 'HKCU:\Software\Microsoft\Office\14.0\OneNote' +if ($CloneHost) { + if ($CloneHost -notmatch '^ONE-[A-Z0-9-]+$' -or [Environment]::MachineName -ne $CloneHost) { + throw 'The disposable clone hostname does not match this machine.' + } + New-Item "$key\Options\Paths" -Force | Out-Null + New-ItemProperty "$key\Options\Paths" -Name UnfiledNotesSection -PropertyType ExpandString -Value 'C:\one-tests\Loose.one' -Force | Out-Null +} elseif ((Get-ItemProperty "$key\Options\Paths").UnfiledNotesSection -ne 'C:\one-tests\Loose.one' -or + -not (Test-Path 'C:\one-tests\profile-original-cache')) { + throw 'Park the personal OneNote profile before resetting the test cache.' +} +$cache = Join-Path $env:LOCALAPPDATA 'Microsoft\OneNote\14.0' +$parked = Join-Path 'C:\one-tests\caches' ([IO.Path]::GetFileName($root)) +if (Test-Path $parked) { throw 'Choose a new run; its parked cache already exists.' } +New-Item -ItemType Directory -Path 'C:\one-tests\caches' -Force | Out-Null +if (Test-Path $cache) { Move-Item -LiteralPath $cache -Destination $parked } +if (Test-Path "$key\OpenNotebooks") { Remove-Item "$key\OpenNotebooks" -Recurse } +New-Item "$key\OpenNotebooks" | Out-Null +New-ItemProperty "$key\OpenNotebooks" -Name '1' -PropertyType String -Value "$root\notebook" | Out-Null diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/read.ps1 b/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/read.ps1 deleted file mode 120000 index 112acdbaf069e052b224eff502f91d8a6b8b626e..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/read.ps1 +++ /dev/null @@ -1 +0,0 @@ -../../../keyboard/scripts/read.ps1 \ No newline at end of file diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/read.ps1 b/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/read.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..476094ab1e0c47077988a6461db2080cf208642b --- /dev/null +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/scripts/read.ps1 @@ -0,0 +1,142 @@ +param( + [Parameter(Mandatory=$true)][string]$Root, + [int]$ExpectedPages = -1, + [switch]$UseCurrentCache, + [switch]$Pdf, + [switch]$KeepOpen, + [string]$CloneHost = '' +) +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$root = [IO.Path]::GetFullPath($Root).TrimEnd('\') +if ([IO.Path]::GetDirectoryName($root) -ne 'C:\one-tests\runs') { + throw 'Choose a run directly below C:\one-tests\runs.' +} +$notebook = Join-Path $root 'notebook' +$output = Join-Path $root 'read' +if (Test-Path $output) { throw 'Choose a new read destination.' } +if ($UseCurrentCache) { + if ((Get-ItemProperty 'HKCU:\Software\Microsoft\Office\14.0\OneNote\Options\Paths').UnfiledNotesSection -ne 'C:\one-tests\Loose.one') { + throw 'Park the personal OneNote profile before reading test notebooks.' + } +} else { + & "$PSScriptRoot\cold-current.ps1" -Root $root -CloneHost $CloneHost +} +New-Item -ItemType Directory -Path $output | Out-Null +$app = New-Object -ComObject OneNote.Application +$notebookId = '' +$failure = $null +try { + $app.OpenHierarchy($notebook, '', [ref]$notebookId, 0) + $process = Get-Process ONENOTE + @{ hostname = [Environment]::MachineName; onenote = $process.MainModule.FileVersionInfo.FileVersion; + powershell = $PSVersionTable.PSVersion.ToString(); schema = 'xs2010'; cold = (-not $UseCurrentCache.IsPresent) } | + ConvertTo-Json | Set-Content (Join-Path $output 'environment.json') -Encoding UTF8 + $sections = @() + foreach ($file in @(Get-ChildItem $notebook -Recurse | Where-Object { $_.Extension -eq '.one' })) { + $id = '' + $app.OpenHierarchy($file.FullName, '', [ref]$id, 0) + $sections += $id + } + $deadline = [DateTime]::UtcNow.AddSeconds(300) + $previous = '' + $lastChange = '' + $stableSince = [DateTime]::UtcNow + $settled = $false + do { + $pages = @{} + foreach ($section in $sections) { + $hierarchy = '' + $app.GetHierarchy($section, 4, [ref]$hierarchy, 1) + [xml]$xml = $hierarchy + foreach ($node in $xml.SelectNodes('//*[@path]')) { + if (-not $node.GetAttribute('path').StartsWith("$notebook\", [StringComparison]::OrdinalIgnoreCase)) { + throw 'OneNote opened a section outside the copied notebook.' + } + } + foreach ($node in $xml.SelectNodes('//*[local-name()="Page"]')) { + $id = $node.GetAttribute('ID') + $content = '' + $app.GetPageContent($id, [ref]$content, 1, 1) + $pages[$id] = $content + } + } + $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] })) + if ($signature -ne $previous) { + $lastChange = $previous + $previous = $signature + $stableSince = [DateTime]::UtcNow + } + if ((($ExpectedPages -ge 0 -and $pages.Count -eq $ExpectedPages) -or + ($ExpectedPages -lt 0 -and $pages.Count -gt 0)) -and + ([DateTime]::UtcNow - $stableSince).TotalSeconds -ge 2) { $settled = $true; break } + Start-Sleep -Milliseconds 250 + } while ([DateTime]::UtcNow -lt $deadline) + if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) { + [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8) + $index = 0 + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + $index++ + } + $hierarchy = '' + $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1) + [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8) + throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled." + } + $index = 0 + $payloads = @() + foreach ($id in @($pages.Keys | Sort-Object)) { + [IO.File]::WriteAllText((Join-Path $output ('page-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8) + if ($Pdf) { + $pdfPath = Join-Path $output ('page-{0:d3}.pdf' -f $index) + $app.NavigateTo($id, '', $false) + $app.Publish($id, $pdfPath, 3, '') + if (-not (Test-Path $pdfPath) -or (Get-Item $pdfPath).Length -eq 0) { throw 'OneNote did not publish the page PDF.' } + } + [xml]$page = $pages[$id] + foreach ($file in $page.SelectNodes('//*[local-name()="InsertedFile" or local-name()="MediaFile"]')) { + $bytes = [IO.File]::ReadAllBytes($file.GetAttribute('pathCache')) + $hash = [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($bytes)).Replace('-', '').ToLowerInvariant() + [IO.File]::WriteAllBytes((Join-Path $output ($hash + '.attachment')), $bytes) + $payloads += @{ page = $id; object = $file.ParentNode.GetAttribute('objectID'); + kind = $file.LocalName; name = $file.GetAttribute('preferredName'); + sha256 = $hash; bytes = $bytes.Length } + } + $index++ + } + [IO.File]::WriteAllText((Join-Path $output 'payloads.json'), (ConvertTo-Json -InputObject $payloads -Depth 4), [Text.Encoding]::UTF8) + $all = '' + $app.GetHierarchy($notebookId, 4, [ref]$all, 1) + [xml]$finalTree = $all + $finalIds = @($finalTree.SelectNodes('//*[local-name()="Page"]') | ForEach-Object { $_.GetAttribute('ID') } | Sort-Object -Unique) + if ($finalIds.Count -ne $pages.Count -or @($finalIds | Where-Object { -not $pages.ContainsKey($_) }).Count -ne 0) { + throw 'The notebook hierarchy changed while collecting page evidence; repeat the cold read.' + } + [IO.File]::WriteAllText((Join-Path $output 'hierarchy.xml'), $all, [Text.Encoding]::UTF8) + Write-Output "Read $($sections.Count) sections and $($pages.Count) pages." +} catch { + $failure = $_ + [IO.File]::WriteAllText((Join-Path $output 'failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + throw +} finally { + try { + try { + if ($notebookId -and $CloneHost) { $app.SyncHierarchy($notebookId) } + if ($notebookId -and -not $KeepOpen -and (-not $UseCurrentCache -or $CloneHost)) { + $app.CloseNotebook($notebookId, $false) + } + } catch { + if ($null -eq $failure) { throw } + [IO.File]::WriteAllText((Join-Path $output 'cleanup-failure.txt'), ($_ | Out-String), [Text.Encoding]::UTF8) + } + } finally { + [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app) + } + $app = $null + [GC]::Collect() + [GC]::WaitForPendingFinalizers() + if (-not $UseCurrentCache -and -not $CloneHost) { + Get-Process ONENOTE -ErrorAction SilentlyContinue | Wait-Process -Timeout 10 + } +} diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/source.json b/corpus/paragraph-edit/reconciliation/reconciled/native/source.json index 7840b52fea33cd3cbab2c8bfb2072069366e8215..97ef9fba64735f859982838c0aa9cb1cf802e21f 100644 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/source.json +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/source.json @@ -1,8 +1,8 @@ [ { "path": "synthetic.one", - "bytes": 171880, - "sha256": "1d35503a9b47fcd2f1e776e77f200a4d7390c6e1d3a63974f4e2b2cea7959692", - "mtime_ns": 1788888504006534380 + "bytes": 182880, + "sha256": "791445173b5bd8e72f6fa79a880ea5a2ad4be1a75e500d0a2ccb9275315bc541", + "mtime_ns": 1789122096097772289 } ] diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/teardown.json b/corpus/paragraph-edit/reconciliation/reconciled/native/teardown.json deleted file mode 120000 index 47a1192a30ea7da90676d631bb9a2687d829b43e..0000000000000000000000000000000000000000 --- a/corpus/paragraph-edit/reconciliation/reconciled/native/teardown.json +++ /dev/null @@ -1 +0,0 @@ -../../../joined/teardown.json \ No newline at end of file diff --git a/corpus/paragraph-edit/reconciliation/reconciled/native/teardown.json b/corpus/paragraph-edit/reconciliation/reconciled/native/teardown.json new file mode 100644 index 0000000000000000000000000000000000000000..05a47793de40f322e745c4c4183727e3590ecf70 --- /dev/null +++ b/corpus/paragraph-edit/reconciliation/reconciled/native/teardown.json @@ -0,0 +1 @@ +{"absent": true} diff --git a/crates/notebook/tests/support/model_ops.rs b/crates/notebook/tests/support/model_ops.rs index 6fe9d2af3b735cbd6b39cb367f61ee4d153df414..62fce890a5c9e3ada246348d6f57d53207befa82 100644 --- a/crates/notebook/tests/support/model_ops.rs +++ b/crates/notebook/tests/support/model_ops.rs @@ -75,10 +75,17 @@ fn text_mut(page: &mut Page, text: ExGuid) -> &mut TextObject { .expect("text object is on the page") } -/// Replaces a UTF-16 range of a text object in the model, inheriting the format at its start. +/// Replaces a UTF-16 range of a text object in the model; the replacement takes the format +/// of the first replaced character, or of the character before an insertion point. pub fn replace_text(page: &mut Page, text: ExGuid, range: Range, replacement: &str) { let target = text_mut(page, text); - let format = target.text.format_at(range.start).unwrap().clone(); + let format = if range.is_empty() { + target.text.format_at(range.start).unwrap().clone() + } else { + target.text.slice(range.clone()).unwrap().spans()[0] + .format + .clone() + }; target .text .apply(Edit { diff --git a/crates/notebook/tests/sync/tree.rs b/crates/notebook/tests/sync/tree.rs index 19f68d937adbc285e64deb251bfc531d51e0dc75..abd11b017dfc1385a44051dac995bd6976d97cde 100644 --- a/crates/notebook/tests/sync/tree.rs +++ b/crates/notebook/tests/sync/tree.rs @@ -613,7 +613,7 @@ fn native_tree_and_layout_changes_reconcile_without_discarding_unreviewed_conten std::fs::create_dir_all(output.join("candidate")).unwrap(); std::fs::write(output.join("candidate/synthetic.one"), &server.durable).unwrap(); std::fs::write( - output.join("manifest.json"), + output.join("cases.json"), serde_json::to_vec_pretty(&records).unwrap(), ) .unwrap(); diff --git a/crates/notebook/tests/sync_outline.rs b/crates/notebook/tests/sync_outline.rs index 763089e08800f434725ca5bd127333f747b43a5c..210b6f1f3519787f1c5ea440cba70863cd3f9281 100644 --- a/crates/notebook/tests/sync_outline.rs +++ b/crates/notebook/tests/sync_outline.rs @@ -7,6 +7,7 @@ use onestore::{ document::Document, page::{Outline, Page, PageObject, PageParagraph}, }; +use serde_json::json; #[path = "support/server.rs"] mod server; @@ -524,17 +525,37 @@ fn native_moves_deletions_and_layout_changes_merge_or_require_review() { let mut reapplied = durable.clone(); change(&mut reapplied); assert_eq!(reapplied, durable, "{name} keeps its reconciled change"); - records.push((name, if merged { "merged" } else { "reviewed" })); + let (object, change) = match name.as_str() { + "Move outline" => (outline, json!({"Position": {"x": 252.0, "y": 288.0}})), + "Resize outline" | "Automatic outline size" | "Delete outline" => ( + outline, + json!({"Width": {"points": 252.0, "user_set": true}}), + ), + _ => ( + paragraph_with(&page_of(BEFORE, space), target).unwrap().id, + json!({"Collapsed": name != "Expand subtree"}), + ), + }; + records.push(json!({ + "name": name, + "outcome": if merged { "merged" } else { "reviewed" }, + "object": object.to_string(), + "change": change, + "dependent_text": dependent.to_string(), + })); } - let reviewed = records.iter().filter(|(_, r)| *r == "reviewed").count(); + let reviewed = records + .iter() + .filter(|record| record["outcome"] == "reviewed") + .count(); assert_eq!((records.len(), reviewed), (14, 7), "{records:?}"); if let Some(output) = std::env::var_os("ONESTORE_OFFLINE_OUTLINE_OUTPUT") { let output = std::path::PathBuf::from(output); assert!(output.is_absolute()); - std::fs::create_dir(&output).unwrap(); - std::fs::write(output.join("synthetic.one"), &server.durable).unwrap(); + std::fs::create_dir_all(output.join("candidate")).unwrap(); + std::fs::write(output.join("candidate/synthetic.one"), &server.durable).unwrap(); std::fs::write( - output.with_extension("json"), + output.join("cases.json"), serde_json::to_vec_pretty(&records).unwrap(), ) .unwrap(); diff --git a/crates/notebook/tests/sync_pages.rs b/crates/notebook/tests/sync_pages.rs index 6d302efc42125e883e43e8adb250d64c5d4382e1..9110551c573e86f28ce274f524e89c45958c2de2 100644 --- a/crates/notebook/tests/sync_pages.rs +++ b/crates/notebook/tests/sync_pages.rs @@ -577,7 +577,7 @@ fn twelve_disjoint_page_batches_merge_with_dependent_bodies_without_review() { PageEdit::set_level(group[2].space(), 2).unwrap(), ]; cache.pages(&source, &edits).unwrap().unwrap(); - let body = format!("Actor {actor} 🦀 é"); + let body = format!("Actor {actor} 🦀 e\u{301}"); let local = cache.snapshot().unwrap(); let mut model = model_ops::page_of(&local, group[1].space()); let text = body_outline(&mut model, &body); diff --git a/crates/notebook/tests/sync_paragraph.rs b/crates/notebook/tests/sync_paragraph.rs index b7dadfba8d0fa8444381ca6543f30d0c35fe8a27..dc3e19bd3042cdd8128fd03f169c6a66f08e15cc 100644 --- a/crates/notebook/tests/sync_paragraph.rs +++ b/crates/notebook/tests/sync_paragraph.rs @@ -496,8 +496,13 @@ fn offline_paragraphs(output: Option<&Path>) { assert_eq!(actual, id); server.fault = Fault::None; reviewed.push(case.clone()); + // The reviewed split sits after the remote's one-unit prefix. + let mut placed = intent.clone(); + if split && entry["remote_prefix"] == true { + placed["offset"] = (intent["offset"].as_u64().unwrap() + 1).into(); + } review_page(&cache, id, origin(&intent, split), |page| { - replay(page, &intent, split) + replay(page, &placed, split) }); } other => panic!("{name} {}: {other:?}", entry["case"]), diff --git a/tools/test_outline_edit.py b/tools/test_outline_edit.py index 12fdc88c555309c8a11f530958b83f04d0c2a893..93b39115f59aaa873021ab4674f38500e47fef1c 100644 --- a/tools/test_outline_edit.py +++ b/tools/test_outline_edit.py @@ -1,4 +1,5 @@ import copy +import collections import json from pathlib import Path import runpy @@ -272,7 +273,7 @@ class OutlineEditTest(unittest.TestCase): models, _ = self.cold_layout(FIXTURE / 'offline') records = json.loads((FIXTURE / 'offline/cases.json').read_text()) self.assertEqual(len(records), 14) - self.assertEqual(sum(row['retained'] for row in records), 4) + self.assertEqual(collections.Counter(row['outcome'] for row in records), {'merged': 7, 'reviewed': 7}) records = {row['name']: row for row in records} with TemporaryDirectory() as temporary: folder = Path(temporary) @@ -290,7 +291,7 @@ class OutlineEditTest(unittest.TestCase): for key in ('children', 'content', 'structure', 'child_level'): self.assertEqual(node[key], before[key], (name, oid, key)) layout = dict(before['layout']) - if record and not record['retained'] and oid == record['object']: + if record and oid == record['object']: change = record['change'] if 'Position' in change: layout.update(change['Position']) @@ -305,11 +306,11 @@ class OutlineEditTest(unittest.TestCase): self.assertEqual(node['layout'], layout) if node['kind']['type'] == 'RichText': expected = before['kind']['text'] - if record and not record['retained'] and oid == record['dependent_text']: + if record and oid == record['dependent_text']: expected = 'Local ' + expected texts += 1 self.assertEqual(node['kind']['text'], expected) - self.assertEqual((changed, texts), (10, 10)) + self.assertEqual((changed, texts), (10, 14)) def preserved_node(self, old, new): expected = dict(old) diff --git a/tools/test_paragraph_edit.py b/tools/test_paragraph_edit.py index a2530729f3cfd50aed366d457775afc2511e60d0..33ea331f5c8c59b09d77163f7fe0b5e344f1b6e3 100644 --- a/tools/test_paragraph_edit.py +++ b/tools/test_paragraph_edit.py @@ -1,3 +1,4 @@ +import collections import json from pathlib import Path import runpy @@ -24,10 +25,10 @@ class ParagraphEditTest(unittest.TestCase): self.assert_cold_graph(result) manifest = json.loads((result / 'manifest.json').read_text()) self.assertEqual(len(manifest), 16) - self.assertEqual({case['case'] for case in manifest if case['outcome'] == 'retained_conflict'}, - {'Join remote list', 'Join empty adoption'}) + self.assertEqual(collections.Counter(case['outcome'] for case in manifest), + {'automatic': 6, 'reviewed': 10}) receipts = [case[key] for case in manifest for key in ('receipt', 'dependent_receipt') if key in case] - self.assertEqual(len(set(receipts)), 28) + self.assertEqual(len(set(receipts)), 32) models, captures = {}, {} with TemporaryDirectory() as temporary: for phase, notebook, read in [('remote', fixture / 'keyboard/notebook', fixture / 'keyboard/read'), @@ -68,12 +69,15 @@ class ParagraphEditTest(unittest.TestCase): left, right = intent['left'], intent['right'] a, = [oid for oid, (_, content, _) in graph.items() if content == [left]] b, = [oid for oid, (_, content, _) in graph.items() if content == [right]] - parent, = [oid for oid, (children, _, _) in graph.items() if a in children] + parent, = [oid for oid, (children, _, _) in graph.items() if b in children] graph[parent][0].remove(b) graph[a][0] += graph[b][0] del graph[b], graph[right] characters[:2] = [characters[0] + characters[1]] - characters[0] = [('C' if char == 'c' else char, style) for char, style in characters[0]] + if any(char == 'c' for char, _ in characters[0]): + characters[0] = [('C' if char == 'c' else char, style) for char, style in characters[0]] + else: + characters[0][1] = ('I', characters[0][1][1]) self.assertEqual(new['nodes'][left]['tags'], old['nodes'][left]['tags']) with self.subTest(case=name): self.assertEqual({oid: [node['children'], node['content'], node['child_level']] @@ -191,7 +195,7 @@ class ParagraphEditTest(unittest.TestCase): def test_offline_boundaries_retain_remote_edits_and_match_native_controls(self): groups = [('splits', 'cold-split/read', 12), ('joins', 'joined/read', 12), - ('inheritance', 'join-edges/joined/read', 5), ('tags', 'join-tags/joined/read', 3)] + ('inheritance', 'join-edges/joined/read', 4), ('tags', 'join-tags/joined/read', 3)] for name, control, count in groups: fixture = FIXTURE / 'offline' / name manifest = json.loads((fixture / 'manifest.json').read_text()) -- 2.54.0