authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-09-07 21:38:05-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-09-07 21:38:05-07:00
log49bc9b2d95d93ceb9f25de3e238e89ce6fbfb21e
treed1a7020f27ecc5ceebf8cf1e7c8b2d3b316bb55c
parent3a32cbb2aad5a83965908734e6595ea252557f7f
signature Signed by SSH key SHA256:52mNGHRsVFBDED9IAX5pe+LRWUefqTbxEReunq21QvU

feat: publish formatted insertions as one durable intent

Add nonoverlapping UTF-16 styles to paragraph and outline insertion without a second revision or offline queue entry. Preserve intent identities through serialization, replay and placement review; reject malformed spans before source parsing. Validate native cold reads, controlled reverse edits and direct keyboard editing, empty-style continuation, historical preservation, interrupted publication, old-cache compatibility, twelve-client mixed editing and offline recovery. Retain public native fixtures and stateful sanitizer coverage. Assisted-by: gpt-6-astra

140 files changed, 2765 insertions(+), 40 deletions(-)

corpus/formatted-insertion/README.md created+31
......@@ -0,0 +1,31 @@
1# Atomic formatted insertions
2
3Synthetic Rust paragraph/outline insertions with independent OneNote 2010 cold
4reads. The native paragraph and table inputs descend from the public
5`native/20260905-05` corpus. `manifest.json` records stable intents and file hashes;
6each capture retains its native environment and run provenance. Attachment exports
7link to existing identical public payloads.
8
9Generate new candidates with the ignored `export_native_formatted_insertions` test
10and `ONESTORE_INSERT_OUTPUT` set to a new absolute directory. Each child directory
11is a separate notebook: the candidates can share source section identities.
12Use `tools/native_runner.py` with one child directory and `--expected-pages 1`.
13`tools/native/formatted-insertion.ps1` performs an unchanged native HTML round trip
14followed by a native prefix edit for the four nonempty cases.
15
16The unchanged round trip establishes native font substitution before checking the
17edit's exact character styles. Table updates omit the outline's measured `Size`:
18resubmitting it made two unlocked columns oscillate in native XML, including after
19a fresh cache reopen. Those unsettled captures are excluded. The retained table
20reverse capture omits that measurement; paragraph and ordinary outline captures
21retain it.
22
23`native-cell/ui` records a direct keyboard prefix edit, without HTML resubmission.
24Its native XML settles, preserves every prior character's style, and the resulting
25file passes the same model oracle. The capture includes the keyboard script and
26screenshot.
27
28COM omits the empty outline. Its cold-reopened file retains the empty rich-text
29object and style; `empty/typed-after-cold` adds text to that retained object and
30verifies the 18-point italic result in another independent native cold read.
31`tools/test_formatted_insertion.py` checks these captures without a live VM.
corpus/formatted-insertion/empty-typed/candidate/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/empty-typed/candidate/synthetic.one differ
corpus/formatted-insertion/empty-typed/cold/notebook/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/empty-typed/cold/notebook/synthetic.one differ
corpus/formatted-insertion/empty-typed/cold/read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-7135C1A2",
5 "cold": true,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/empty-typed/cold/read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{B38138D7-F157-4B10-8B91-349F1179632C}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T04:49:19.000Z" color="#B49EDE"><one:Section name="synthetic" ID="{A42E0040-CACE-0692-3494-76901850CE52}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T04:49:19.000Z" color="#8AA8E4"><one:Page ID="{7D48D92B-74D0-0597-050C-7AF738E2B7E0}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:49:19.000Z" pageLevel="1"/></one:Section></one:Notebook>
corpus/formatted-insertion/empty-typed/cold/read/page-000.xml created+3
......@@ -0,0 +1,3 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{7D48D92B-74D0-0597-050C-7AF738E2B7E0}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:49:19.000Z" pageLevel="1" style="font-family:Calibri;font-size:11.0pt" lang="en-US"><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="Author" lastModifiedBy="Author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{A42E0040-CACE-0692-3494-76901850CE52}{23}{B0}"><one:Position x="36.0" y="36.0" z="0"/><one:Size width="101.66748046875" height="13.4277172088623"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{A42E0040-CACE-0692-3494-76901850CE52}{24}{B0}" alignment="left"><one:T><![CDATA[Original]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline style="font-family:Calibri;font-size:18.0pt" author="Rich author" lastModifiedBy="Rich author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{3BFCF1C3-BFC6-0049-1138-D820866F0C0D}{1}{B0}"><one:Position x="72.0" y="144.0" z="1"/><one:Size width="158.7714996337891" height="21.9726734161377"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{3BFCF1C3-BFC6-0049-1138-D820866F0C0D}{3}{B0}" alignment="left"><one:T><![CDATA[<span
3style='font-style:italic'>Typed café &#129408;</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/empty-typed/cold/read/payloads.json created+3
......@@ -0,0 +1,3 @@
1[
2
3]
\ No newline at end of file
corpus/formatted-insertion/empty-typed/cold/run.json created+18
......@@ -0,0 +1,18 @@
1{
2 "notebook": "/Users/clo/dev/one/evidence/m10/formatted-insertion-isolated/empty-typed",
3 "expected_pages": 1,
4 "author": null,
5 "author_timeout_seconds": 600,
6 "inspect": false,
7 "collect_notebook": true,
8 "base": {
9 "file": "win7-office-base.qcow2",
10 "format": "qcow2",
11 "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346",
12 "virtual_size": 68719476736
13 },
14 "scripts": {
15 "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331",
16 "read.ps1": "086789e467779add0fc071ad8c524c2b02d3d0d609aea4a41f3128cadba371e8"
17 }
18}
corpus/formatted-insertion/empty-typed/cold/source.json created+8
......@@ -0,0 +1,8 @@
1[
2 {
3 "path": "synthetic.one",
4 "bytes": 6016,
5 "sha256": "855460055414c52034d0cf62b2e855b460deaedc17d1f276d6b3738458608f2e",
6 "mtime_ns": 1788842844349962032
7 }
8]
corpus/formatted-insertion/empty-typed/cold/teardown.json created+1
......@@ -0,0 +1 @@
1{"absent": true}
corpus/formatted-insertion/empty-typed/reverse/control-before.xml created+3
......@@ -0,0 +1,3 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{16390213-3B15-03C0-2FEB-38DCB7F70E1A}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:06:46.000Z" pageLevel="1" style="font-family:Calibri;font-size:11.0pt" lang="en-US"><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="Author" lastModifiedBy="Author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{CF5FDB78-850B-00C5-1E73-34BB974577A8}{23}{B0}"><one:Position x="36.0" y="36.0" z="0"/><one:Size width="101.66748046875" height="13.4277172088623"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{CF5FDB78-850B-00C5-1E73-34BB974577A8}{24}{B0}" alignment="left"><one:T><![CDATA[Original]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline style="font-family:Calibri;font-size:18.0pt" author="Rich author" lastModifiedBy="Rich author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{508D2AFB-F003-061E-3BDF-9A0B097AB5F7}{1}{B0}"><one:Position x="72.0" y="144.0" z="1"/><one:Size width="158.7714996337891" height="21.9726734161377"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{508D2AFB-F003-061E-3BDF-9A0B097AB5F7}{3}{B0}" alignment="left"><one:T><![CDATA[<span
3style='font-style:italic'>Typed café &#129408;</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/empty-typed/reverse/control-update.xml created+2
......@@ -0,0 +1,2 @@
1<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{16390213-3B15-03C0-2FEB-38DCB7F70E1A}{1}{B0}"><one:Outline style="font-family:Calibri;font-size:18.0pt" author="Rich author" lastModifiedBy="Rich author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{508D2AFB-F003-061E-3BDF-9A0B097AB5F7}{1}{B0}" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote"><one:Position x="72.0" y="144.0" z="1" /><one:Size width="158.7714996337891" height="21.9726734161377" /><one:Indents><one:Indent level="0" indent="0.0" /></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{508D2AFB-F003-061E-3BDF-9A0B097AB5F7}{3}{B0}" alignment="left"><one:T><![CDATA[<span
2style='font-style:italic'>Typed café &#129408;</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
\ No newline at end of file
corpus/formatted-insertion/empty-typed/reverse/edit-before.xml created+3
......@@ -0,0 +1,3 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{16390213-3B15-03C0-2FEB-38DCB7F70E1A}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:06:46.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline style="font-family:Calibri;font-size:11.0pt" author="Author" lastModifiedBy="Author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{CF5FDB78-850B-00C5-1E73-34BB974577A8}{23}{B0}"><one:Position x="36.0" y="36.0" z="1"/><one:Size width="101.66748046875" height="13.4277172088623"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{CF5FDB78-850B-00C5-1E73-34BB974577A8}{24}{B0}" alignment="left"><one:T><![CDATA[Original]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="Rich author" lastModifiedBy="virtual" lastModifiedByInitials="V" lastModifiedTime="2026-09-08T05:06:55.000Z" objectID="{508D2AFB-F003-061E-3BDF-9A0B097AB5F7}{1}{B0}"><one:Position x="72.0" y="144.0" z="0"/><one:Size width="158.7714996337891" height="21.9726734161377"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:06:55.000Z" objectID="{508D2AFB-F003-061E-3BDF-9A0B097AB5F7}{3}{B0}" alignment="left" quickStyleIndex="0" style="font-family:Calibri;font-size:18.0pt"><one:T><![CDATA[<span
3style='font-style:italic'>Typed café &#129408;</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/empty-typed/reverse/edit-update.xml created+2
......@@ -0,0 +1,2 @@
1<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{16390213-3B15-03C0-2FEB-38DCB7F70E1A}{1}{B0}"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" /><one:Outline author="Rich author" lastModifiedBy="virtual" lastModifiedByInitials="V" lastModifiedTime="2026-09-08T05:06:55.000Z" objectID="{508D2AFB-F003-061E-3BDF-9A0B097AB5F7}{1}{B0}" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote"><one:Position x="72.0" y="144.0" z="0" /><one:Size width="158.7714996337891" height="21.9726734161377" /><one:Indents><one:Indent level="0" indent="0.0" /></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:06:55.000Z" objectID="{508D2AFB-F003-061E-3BDF-9A0B097AB5F7}{3}{B0}" alignment="left" quickStyleIndex="0" style="font-family:Calibri;font-size:18.0pt"><one:T>&lt;span
2style='font-style:italic'&gt;Native Typed café &amp;#129408;&lt;/span&gt;</one:T></one:OE></one:OEChildren></one:Outline></one:Page>
\ No newline at end of file
corpus/formatted-insertion/empty-typed/reverse/notebook/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/empty-typed/reverse/notebook/synthetic.one differ
corpus/formatted-insertion/empty-typed/reverse/read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-8F1E54CA",
5 "cold": false,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/empty-typed/reverse/read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{F9BA22F6-DA01-4734-87A1-B4C6DD99C88D}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T05:07:07.000Z" color="#B49EDE"><one:Section name="synthetic" ID="{3639FAA6-1E08-0FC0-3700-B846335A2C86}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T05:07:07.000Z" color="#8AA8E4"><one:Page ID="{EF5F23CD-A016-0CC5-0698-B42113E85534}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:07:07.000Z" pageLevel="1"/></one:Section></one:Notebook>
corpus/formatted-insertion/empty-typed/reverse/read/page-000.xml created+3
......@@ -0,0 +1,3 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{EF5F23CD-A016-0CC5-0698-B42113E85534}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:07:07.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline style="font-family:Calibri;font-size:11.0pt" author="Author" lastModifiedBy="Author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{3639FAA6-1E08-0FC0-3700-B846335A2C86}{23}{B0}"><one:Position x="36.0" y="36.0" z="1"/><one:Size width="101.66748046875" height="13.4277172088623"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{3639FAA6-1E08-0FC0-3700-B846335A2C86}{24}{B0}" alignment="left"><one:T><![CDATA[Original]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="Rich author" lastModifiedBy="virtual" lastModifiedByInitials="V" lastModifiedTime="2026-09-08T05:06:55.000Z" objectID="{A9EB0B25-6B00-091B-12AC-16F6AD65EED9}{1}{B0}"><one:Position x="72.0" y="144.0" z="0"/><one:Size width="158.7714996337891" height="43.9453468322754"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:06:55.000Z" objectID="{A9EB0B25-6B00-091B-12AC-16F6AD65EED9}{3}{B0}" alignment="left" quickStyleIndex="0" style="font-family:Calibri;font-size:18.0pt"><one:T><![CDATA[<span
3style='font-style:italic'>Native Typed café &#129408;</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/empty-typed/reverse/read/payloads.json created+3
......@@ -0,0 +1,3 @@
1[
2
3]
\ No newline at end of file
corpus/formatted-insertion/empty-typed/reverse/reverse-verification.json created+5
......@@ -0,0 +1,5 @@
1{
2 "paragraphs": 2,
3 "characters": 27,
4 "exact_native_character_styles_after_control": true
5}
corpus/formatted-insertion/empty-typed/reverse/run.json created+19
......@@ -0,0 +1,19 @@
1{
2 "notebook": "/Users/clo/dev/one/evidence/m10/formatted-insertion-isolated/empty-typed",
3 "expected_pages": 1,
4 "author": "evidence/m10/formatted-reverse-controlled.ps1",
5 "author_timeout_seconds": 600,
6 "inspect": false,
7 "collect_notebook": true,
8 "base": {
9 "file": "win7-office-base.qcow2",
10 "format": "qcow2",
11 "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346",
12 "virtual_size": 68719476736
13 },
14 "scripts": {
15 "author.ps1": "4362d0ba551eb00b2eca1c5563d76352469f85d3981155bf2682c159a03ddedb",
16 "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331",
17 "read.ps1": "df4244a18ab3e9c21083b8df61b08b863e8cce0ec4bf0c9cd742a8ee6f79877d"
18 }
19}
corpus/formatted-insertion/empty-typed/reverse/source.json created+8
......@@ -0,0 +1,8 @@
1[
2 {
3 "path": "synthetic.one",
4 "bytes": 6016,
5 "sha256": "855460055414c52034d0cf62b2e855b460deaedc17d1f276d6b3738458608f2e",
6 "mtime_ns": 1788842844349962032
7 }
8]
corpus/formatted-insertion/empty-typed/reverse/teardown.json created+1
......@@ -0,0 +1 @@
1{"absent": true}
corpus/formatted-insertion/empty/candidate/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/empty/candidate/synthetic.one differ
corpus/formatted-insertion/empty/cold/notebook/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/empty/cold/notebook/synthetic.one differ
corpus/formatted-insertion/empty/cold/read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-6DB25082",
5 "cold": true,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/empty/cold/read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{A60F5D0F-AE39-49B1-B687-94A26771424E}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T04:49:17.000Z" color="#B49EDE"><one:Section name="synthetic" ID="{8EAF1BA2-D0D2-0DEF-0CDD-B07549372B65}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T04:49:17.000Z" color="#8AA8E4"><one:Page ID="{57C9C2C9-6ECC-0EEA-3D45-BC12698552D7}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:49:17.000Z" pageLevel="1"/></one:Section></one:Notebook>
corpus/formatted-insertion/empty/cold/read/page-000.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{57C9C2C9-6ECC-0EEA-3D45-BC12698552D7}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:49:17.000Z" pageLevel="1" style="font-family:Calibri;font-size:11.0pt" lang="en-US"><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="Author" lastModifiedBy="Author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{8EAF1BA2-D0D2-0DEF-0CDD-B07549372B65}{23}{B0}"><one:Position x="36.0" y="36.0" z="0"/><one:Size width="101.66748046875" height="13.4277172088623"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{8EAF1BA2-D0D2-0DEF-0CDD-B07549372B65}{24}{B0}" alignment="left"><one:T><![CDATA[Original]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/empty/cold/read/payloads.json created+3
......@@ -0,0 +1,3 @@
1[
2
3]
\ No newline at end of file
corpus/formatted-insertion/empty/cold/run.json created+18
......@@ -0,0 +1,18 @@
1{
2 "notebook": "/Users/clo/dev/one/evidence/m10/formatted-insertion-isolated/empty",
3 "expected_pages": 1,
4 "author": null,
5 "author_timeout_seconds": 600,
6 "inspect": false,
7 "collect_notebook": true,
8 "base": {
9 "file": "win7-office-base.qcow2",
10 "format": "qcow2",
11 "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346",
12 "virtual_size": 68719476736
13 },
14 "scripts": {
15 "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331",
16 "read.ps1": "086789e467779add0fc071ad8c524c2b02d3d0d609aea4a41f3128cadba371e8"
17 }
18}
corpus/formatted-insertion/empty/cold/source.json created+8
......@@ -0,0 +1,8 @@
1[
2 {
3 "path": "synthetic.one",
4 "bytes": 5624,
5 "sha256": "bd592be42dc93e95444174ceceb19d1fc718fbe53c08403f87b6dec3207dc38d",
6 "mtime_ns": 1788842844347041269
7 }
8]
corpus/formatted-insertion/empty/cold/teardown.json created+1
......@@ -0,0 +1 @@
1{"absent": true}
corpus/formatted-insertion/empty/typed-after-cold/candidate/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/empty/typed-after-cold/candidate/synthetic.one differ
corpus/formatted-insertion/empty/typed-after-cold/read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-2A09ABA3",
5 "cold": true,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/empty/typed-after-cold/read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{57C8FDE8-BE28-4C01-8B6F-A901BAEA2926}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T04:57:05.000Z" color="#B49EDE"><one:Section name="synthetic" ID="{AE4499B4-D894-042B-2496-FDB9EA794340}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T04:57:05.000Z" color="#8AA8E4"><one:Page ID="{772240DF-668A-072E-150E-F1DECACB3AF2}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:57:05.000Z" pageLevel="1"/></one:Section></one:Notebook>
corpus/formatted-insertion/empty/typed-after-cold/read/page-000.xml created+3
......@@ -0,0 +1,3 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{772240DF-668A-072E-150E-F1DECACB3AF2}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:57:05.000Z" pageLevel="1" style="font-family:Calibri;font-size:11.0pt" lang="en-US"><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="Author" lastModifiedBy="Author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{AE4499B4-D894-042B-2496-FDB9EA794340}{23}{B0}"><one:Position x="36.0" y="36.0" z="0"/><one:Size width="101.66748046875" height="13.4277172088623"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{AE4499B4-D894-042B-2496-FDB9EA794340}{24}{B0}" alignment="left"><one:T><![CDATA[Original]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline style="font-family:Calibri;font-size:18.0pt" author="Rich author" lastModifiedBy="Rich author" lastModifiedTime="2026-09-08T04:53:58.000Z" objectID="{6EC06BD8-3CC0-0838-13B5-8BFED2119B71}{1}{B0}"><one:Position x="72.0" y="144.0" z="1"/><one:Size width="268.0195007324219" height="21.9726734161377"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:53:58.000Z" objectID="{6EC06BD8-3CC0-0838-13B5-8BFED2119B71}{3}{B0}" alignment="left"><one:T><![CDATA[<span
3style='font-style:italic'>Typed after native reopen &#129408;</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/empty/typed-after-cold/read/payloads.json created+3
......@@ -0,0 +1,3 @@
1[
2
3]
\ No newline at end of file
corpus/formatted-insertion/manifest.json created+963
......@@ -0,0 +1,963 @@
1{
2 "generator": "crates/onestore/tests/insertion.rs:export_native_formatted_insertions",
3 "cases": [
4 {
5 "intent": {
6 "author": "Rich author",
7 "created": 1473310044,
8 "formats": [
9 {
10 "attributes": [
11 {
12 "Bold": true
13 },
14 {
15 "Underline": true
16 }
17 ],
18 "guid": [
19 207,
20 169,
21 223,
22 216,
23 230,
24 235,
25 235,
26 75,
27 185,
28 94,
29 69,
30 228,
31 117,
32 205,
33 151,
34 134
35 ],
36 "range": {
37 "end": 4,
38 "start": 0
39 }
40 },
41 {
42 "attributes": [
43 {
44 "Font": "Arial"
45 },
46 {
47 "FontSize": 13.5
48 }
49 ],
50 "guid": [
51 233,
52 34,
53 183,
54 44,
55 7,
56 99,
57 201,
58 75,
59 140,
60 220,
61 83,
62 226,
63 209,
64 176,
65 83,
66 88
67 ],
68 "range": {
69 "end": 7,
70 "start": 5
71 }
72 },
73 {
74 "attributes": [
75 {
76 "Italic": true
77 },
78 {
79 "Strike": true
80 }
81 ],
82 "guid": [
83 30,
84 196,
85 121,
86 136,
87 27,
88 75,
89 93,
90 79,
91 181,
92 130,
93 25,
94 17,
95 13,
96 139,
97 35,
98 217
99 ],
100 "range": {
101 "end": 14,
102 "start": 8
103 }
104 },
105 {
106 "attributes": [
107 {
108 "Superscript": true
109 }
110 ],
111 "guid": [
112 101,
113 236,
114 26,
115 203,
116 134,
117 120,
118 215,
119 67,
120 170,
121 155,
122 81,
123 250,
124 86,
125 214,
126 214,
127 111
128 ],
129 "range": {
130 "end": 17,
131 "start": 15
132 }
133 },
134 {
135 "attributes": [
136 {
137 "Color": [
138 12,
139 34,
140 56
141 ]
142 },
143 {
144 "Highlight": [
145 255,
146 255,
147 0
148 ]
149 }
150 ],
151 "guid": [
152 57,
153 2,
154 72,
155 237,
156 92,
157 155,
158 100,
159 72,
160 130,
161 100,
162 120,
163 181,
164 179,
165 69,
166 97,
167 11
168 ],
169 "range": {
170 "end": 23,
171 "start": 18
172 }
173 },
174 {
175 "attributes": [
176 {
177 "Subscript": true
178 }
179 ],
180 "guid": [
181 189,
182 73,
183 14,
184 147,
185 222,
186 140,
187 144,
188 65,
189 176,
190 86,
191 229,
192 249,
193 220,
194 119,
195 252,
196 192
197 ],
198 "range": {
199 "end": 26,
200 "start": 24
201 }
202 },
203 {
204 "attributes": [
205 {
206 "Bold": false
207 },
208 {
209 "Italic": false
210 },
211 {
212 "Color": null
213 },
214 {
215 "Highlight": null
216 }
217 ],
218 "guid": [
219 165,
220 80,
221 86,
222 53,
223 207,
224 121,
225 164,
226 68,
227 169,
228 152,
229 106,
230 34,
231 115,
232 110,
233 230,
234 151
235 ],
236 "range": {
237 "end": 30,
238 "start": 27
239 }
240 }
241 ],
242 "guid": [
243 205,
244 161,
245 237,
246 192,
247 33,
248 131,
249 161,
250 64,
251 168,
252 94,
253 233,
254 150,
255 178,
256 37,
257 36,
258 190
259 ],
260 "parent": "{71AF36A5-6150-452F-B7F3-66BFFF4C3582},22",
261 "placement": {
262 "Outline": {
263 "x": 72.0,
264 "y": 144.0
265 }
266 },
267 "text": "Bold \ud83e\udd80 italic e\u0301 color \u6771\u4eac\rEnd"
268 },
269 "name": "outline",
270 "space": "{A8C9EFCE-DF4E-462A-866B-6AD8DFFE4C30},1",
271 "candidate_sha256": "76f6b743caa9dc2b5ab342d6e6a742125ecbcd0ca2372062b42acbd08b5ebb4c",
272 "cold_sha256": "151a49d8cf2e607a10a9c948286ce7eb3eb754fa90e9557a74a2cb1f1f0204cb",
273 "reverse_sha256": "8127b63d52ecbc2ad88a0d4f0eccb7fc8b086983f25db40b5f3396616f39cc53",
274 "omitted_table_outline_size": false
275 },
276 {
277 "intent": {
278 "author": "Rich author",
279 "created": 1473310044,
280 "formats": [
281 {
282 "attributes": [
283 {
284 "Bold": true
285 },
286 {
287 "Underline": true
288 }
289 ],
290 "guid": [
291 141,
292 194,
293 83,
294 170,
295 169,
296 68,
297 33,
298 76,
299 139,
300 83,
301 12,
302 156,
303 72,
304 95,
305 145,
306 140
307 ],
308 "range": {
309 "end": 4,
310 "start": 0
311 }
312 },
313 {
314 "attributes": [
315 {
316 "Font": "Arial"
317 },
318 {
319 "FontSize": 13.5
320 }
321 ],
322 "guid": [
323 168,
324 249,
325 0,
326 182,
327 1,
328 200,
329 117,
330 66,
331 179,
332 210,
333 69,
334 6,
335 83,
336 62,
337 157,
338 171
339 ],
340 "range": {
341 "end": 7,
342 "start": 5
343 }
344 },
345 {
346 "attributes": [
347 {
348 "Italic": true
349 },
350 {
351 "Strike": true
352 }
353 ],
354 "guid": [
355 152,
356 84,
357 172,
358 67,
359 218,
360 72,
361 77,
362 67,
363 143,
364 158,
365 58,
366 16,
367 177,
368 251,
369 222,
370 20
371 ],
372 "range": {
373 "end": 14,
374 "start": 8
375 }
376 },
377 {
378 "attributes": [
379 {
380 "Superscript": true
381 }
382 ],
383 "guid": [
384 29,
385 165,
386 47,
387 217,
388 107,
389 120,
390 31,
391 79,
392 148,
393 67,
394 148,
395 232,
396 78,
397 245,
398 157,
399 68
400 ],
401 "range": {
402 "end": 17,
403 "start": 15
404 }
405 },
406 {
407 "attributes": [
408 {
409 "Color": [
410 12,
411 34,
412 56
413 ]
414 },
415 {
416 "Highlight": [
417 255,
418 255,
419 0
420 ]
421 }
422 ],
423 "guid": [
424 165,
425 189,
426 67,
427 237,
428 2,
429 56,
430 67,
431 70,
432 169,
433 71,
434 239,
435 10,
436 236,
437 192,
438 119,
439 48
440 ],
441 "range": {
442 "end": 23,
443 "start": 18
444 }
445 },
446 {
447 "attributes": [
448 {
449 "Subscript": true
450 }
451 ],
452 "guid": [
453 116,
454 118,
455 37,
456 115,
457 74,
458 111,
459 247,
460 70,
461 172,
462 126,
463 100,
464 131,
465 159,
466 151,
467 38,
468 234
469 ],
470 "range": {
471 "end": 26,
472 "start": 24
473 }
474 },
475 {
476 "attributes": [
477 {
478 "Bold": false
479 },
480 {
481 "Italic": false
482 },
483 {
484 "Color": null
485 },
486 {
487 "Highlight": null
488 }
489 ],
490 "guid": [
491 32,
492 151,
493 42,
494 7,
495 76,
496 55,
497 143,
498 75,
499 178,
500 217,
501 234,
502 71,
503 135,
504 25,
505 75,
506 145
507 ],
508 "range": {
509 "end": 30,
510 "start": 27
511 }
512 }
513 ],
514 "guid": [
515 191,
516 62,
517 177,
518 4,
519 17,
520 246,
521 2,
522 68,
523 130,
524 157,
525 199,
526 46,
527 35,
528 34,
529 28,
530 139
531 ],
532 "parent": "{03D49648-056C-0F08-32C9-0424E8496E7D},10",
533 "placement": {
534 "Paragraph": {
535 "before": "{03D49648-056C-0F08-32C9-0424E8496E7D},11"
536 }
537 },
538 "text": "Bold \ud83e\udd80 italic e\u0301 color \u6771\u4eac\rEnd"
539 },
540 "name": "native-paragraph",
541 "space": "{64183EF4-4E19-0CBE-3D3B-88FF17D58B1C},1",
542 "candidate_sha256": "202823512283be980b6a139adcf5f4f369d15f17d60ed7b23f9f2289513aa4e9",
543 "cold_sha256": "efb61aaedbe12cb00434f7e581259d112480158cacb66961d4168081b77a1112",
544 "reverse_sha256": "753b320528748faa1ae11ee5eb710530d15636361674aab37f4c442ee5b9dd7b",
545 "omitted_table_outline_size": false
546 },
547 {
548 "intent": {
549 "author": "Rich author",
550 "created": 1473310044,
551 "formats": [
552 {
553 "attributes": [
554 {
555 "Bold": true
556 },
557 {
558 "Underline": true
559 }
560 ],
561 "guid": [
562 148,
563 53,
564 156,
565 113,
566 44,
567 188,
568 95,
569 71,
570 170,
571 198,
572 38,
573 41,
574 148,
575 201,
576 99,
577 234
578 ],
579 "range": {
580 "end": 4,
581 "start": 0
582 }
583 },
584 {
585 "attributes": [
586 {
587 "Font": "Arial"
588 },
589 {
590 "FontSize": 13.5
591 }
592 ],
593 "guid": [
594 17,
595 187,
596 223,
597 32,
598 237,
599 203,
600 222,
601 66,
602 134,
603 24,
604 65,
605 131,
606 32,
607 188,
608 202,
609 177
610 ],
611 "range": {
612 "end": 7,
613 "start": 5
614 }
615 },
616 {
617 "attributes": [
618 {
619 "Italic": true
620 },
621 {
622 "Strike": true
623 }
624 ],
625 "guid": [
626 201,
627 233,
628 230,
629 86,
630 91,
631 117,
632 20,
633 68,
634 142,
635 220,
636 224,
637 178,
638 139,
639 52,
640 180,
641 203
642 ],
643 "range": {
644 "end": 14,
645 "start": 8
646 }
647 },
648 {
649 "attributes": [
650 {
651 "Superscript": true
652 }
653 ],
654 "guid": [
655 145,
656 203,
657 90,
658 115,
659 34,
660 107,
661 73,
662 66,
663 160,
664 157,
665 25,
666 141,
667 249,
668 128,
669 72,
670 159
671 ],
672 "range": {
673 "end": 17,
674 "start": 15
675 }
676 },
677 {
678 "attributes": [
679 {
680 "Color": [
681 12,
682 34,
683 56
684 ]
685 },
686 {
687 "Highlight": [
688 255,
689 255,
690 0
691 ]
692 }
693 ],
694 "guid": [
695 53,
696 51,
697 180,
698 64,
699 45,
700 92,
701 153,
702 70,
703 163,
704 88,
705 171,
706 172,
707 200,
708 222,
709 35,
710 19
711 ],
712 "range": {
713 "end": 23,
714 "start": 18
715 }
716 },
717 {
718 "attributes": [
719 {
720 "Subscript": true
721 }
722 ],
723 "guid": [
724 249,
725 231,
726 26,
727 88,
728 247,
729 6,
730 107,
731 65,
732 131,
733 6,
734 89,
735 211,
736 188,
737 246,
738 100,
739 155
740 ],
741 "range": {
742 "end": 26,
743 "start": 24
744 }
745 },
746 {
747 "attributes": [
748 {
749 "Bold": false
750 },
751 {
752 "Italic": false
753 },
754 {
755 "Color": null
756 },
757 {
758 "Highlight": null
759 }
760 ],
761 "guid": [
762 136,
763 160,
764 124,
765 20,
766 185,
767 141,
768 156,
769 75,
770 163,
771 89,
772 177,
773 152,
774 149,
775 251,
776 1,
777 204
778 ],
779 "range": {
780 "end": 30,
781 "start": 27
782 }
783 }
784 ],
785 "guid": [
786 245,
787 178,
788 40,
789 105,
790 54,
791 125,
792 175,
793 68,
794 190,
795 59,
796 54,
797 206,
798 186,
799 206,
800 134,
801 87
802 ],
803 "parent": "{C38843E2-F74B-04BD-24AA-A8F3BCAAF6CF},14",
804 "placement": {
805 "Paragraph": {
806 "before": null
807 }
808 },
809 "text": "Bold \ud83e\udd80 italic e\u0301 color \u6771\u4eac\rEnd"
810 },
811 "name": "native-cell",
812 "space": "{64183EF4-4E19-0CBE-3D3B-88FF17D58B1C},1",
813 "candidate_sha256": "2d01da4a2c8a0cba582d97460b708c77eca38617f9103f4a3cc9eea33f0e0351",
814 "cold_sha256": "b7324075349e45f31d9e9fb8638691f58efff1989be65f12f7711dc359898a64",
815 "reverse_sha256": "04134b8db9b52aaf43dc5dfc90464d54802890e5d4966e7163a977e2ebd77e1e",
816 "omitted_table_outline_size": true,
817 "ui_sha256": "d67b70016af71db07a8012b85a5016897c08b715c6db8953e1fc45cfe008bc27"
818 },
819 {
820 "intent": {
821 "author": "Rich author",
822 "created": 1473310044,
823 "formats": [
824 {
825 "attributes": [
826 {
827 "Italic": true
828 },
829 {
830 "FontSize": 18.0
831 }
832 ],
833 "guid": [
834 135,
835 82,
836 13,
837 244,
838 205,
839 187,
840 105,
841 65,
842 153,
843 17,
844 70,
845 241,
846 83,
847 89,
848 99,
849 163
850 ],
851 "range": {
852 "end": 0,
853 "start": 0
854 }
855 }
856 ],
857 "guid": [
858 201,
859 196,
860 43,
861 177,
862 4,
863 133,
864 60,
865 73,
866 128,
867 208,
868 16,
869 248,
870 199,
871 36,
872 237,
873 179
874 ],
875 "parent": "{71AF36A5-6150-452F-B7F3-66BFFF4C3582},22",
876 "placement": {
877 "Outline": {
878 "x": 72.0,
879 "y": 144.0
880 }
881 },
882 "text": ""
883 },
884 "name": "empty",
885 "space": "{A8C9EFCE-DF4E-462A-866B-6AD8DFFE4C30},1",
886 "candidate_sha256": "bd592be42dc93e95444174ceceb19d1fc718fbe53c08403f87b6dec3207dc38d",
887 "cold_sha256": "a0a59d1c5676e2b6742e13791f888c91a3e0494c980b66fb6ef0a3bf324fac7a"
888 },
889 {
890 "intent": {
891 "author": "Rich author",
892 "created": 1473310044,
893 "formats": [
894 {
895 "attributes": [
896 {
897 "Italic": true
898 },
899 {
900 "FontSize": 18.0
901 }
902 ],
903 "guid": [
904 183,
905 9,
906 145,
907 10,
908 11,
909 69,
910 244,
911 73,
912 144,
913 49,
914 203,
915 207,
916 41,
917 174,
918 161,
919 107
920 ],
921 "range": {
922 "end": 0,
923 "start": 0
924 }
925 }
926 ],
927 "guid": [
928 38,
929 199,
930 125,
931 238,
932 88,
933 20,
934 244,
935 67,
936 146,
937 95,
938 200,
939 15,
940 97,
941 115,
942 247,
943 221
944 ],
945 "parent": "{71AF36A5-6150-452F-B7F3-66BFFF4C3582},22",
946 "placement": {
947 "Outline": {
948 "x": 72.0,
949 "y": 144.0
950 }
951 },
952 "text": ""
953 },
954 "name": "empty-typed",
955 "space": "{A8C9EFCE-DF4E-462A-866B-6AD8DFFE4C30},1",
956 "candidate_sha256": "855460055414c52034d0cf62b2e855b460deaedc17d1f276d6b3738458608f2e",
957 "cold_sha256": "12dcec5c696b989e0f78d76db6af8542104dec82e90b705269d53a8c52332871",
958 "reverse_sha256": "bc64aba71aba93596edff6ed270ea8ff17285c31cb79e357a5640edf6e934112",
959 "omitted_table_outline_size": false
960 }
961 ],
962 "native_author": "tools/native/formatted-insertion.ps1"
963}
corpus/formatted-insertion/native-cell/candidate/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/native-cell/candidate/synthetic.one differ
corpus/formatted-insertion/native-cell/cold/notebook/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/native-cell/cold/notebook/synthetic.one differ
corpus/formatted-insertion/native-cell/cold/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment created+1
......@@ -0,0 +1 @@
1../../../../append/round-01/native/append-01-complex/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment
\ No newline at end of file
corpus/formatted-insertion/native-cell/cold/read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-382BC211",
5 "cold": true,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/native-cell/cold/read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{C908BAFF-4738-41AD-8781-DF368EC1A41C}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T04:49:18.000Z" color="#B49EDE"><one:Section name="synthetic" ID="{00A6EA90-3D33-0BF5-1CBF-DA0341FB877E}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T04:49:18.000Z" color="#8AA8E4"><one:Page ID="{2CEF1916-B4F8-48E4-9BD8-7292BDC39B61}{1}{B0}" name="Fictitious: café, 東京, مرحبا" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T04:49:18.000Z" pageLevel="1"/></one:Section></one:Notebook>
corpus/formatted-insertion/native-cell/cold/read/page-000.xml created+21
......@@ -0,0 +1,21 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{2CEF1916-B4F8-48E4-9BD8-7292BDC39B61}{1}{B0}" name="Fictitious: café, 東京, مرحبا" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T04:49:18.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{4B23B1AA-FF8D-4B52-942A-FE49425F7E00}{10}{B0}"><one:Position x="36.0" y="14.40000057220459" z="0"/><one:Size width="127.5136947631836" height="14.30000114440918"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{4B23B1AA-FF8D-4B52-942A-FE49425F7E00}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
3style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
4style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
5style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
6style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
7lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:57.000Z" objectID="{1D936DBF-4CD8-410F-8E9C-7CC1E6539A49}{10}{B0}"><one:Position x="144.0" y="96.0" z="1"/><one:Size width="167.0449523925781" height="13.42771339416504"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:57.000Z" lastModifiedTime="2026-09-05T05:06:57.000Z" objectID="{1D936DBF-4CD8-410F-8E9C-7CC1E6539A49}{11}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Fictitious positioned outline.]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{20BA0530-AA42-48A1-B8EC-D7350A3ED2C7}{10}{B0}"><one:Position x="144.0" y="192.0" z="2"/><one:Size width="72.0" height="0.750005722045898"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:58.000Z" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{20BA0530-AA42-48A1-B8EC-D7350A3ED2C7}{11}{B0}" alignment="left"><one:Image format="png" originalPageNumber="0"><one:Data>iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAusB9Y9J1uoA
8AAAASUVORK5CYII=</one:Data></one:Image></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{A5A01D50-6C3A-4B67-9D41-B0CB3EEF1DF4}{10}{B0}"><one:Position x="264.0" y="192.0" z="3"/><one:Size width="72.00001525878906" height="63.0"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:59.000Z" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{A5A01D50-6C3A-4B67-9D41-B0CB3EEF1DF4}{11}{B0}" alignment="left"><one:InsertedFile pathCache="C:\Users\clover\AppData\Local\Microsoft\OneNote\14.0\OneNoteOfflineCache_Files\458001d8-0f1e-451f-81cb-621828fc0b39.txt" pathSource="C:\one-tests\runs\20260905-05\assets\fictitious-attachment.txt" preferredName="fictitious-attachment.txt"/></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{8B7F6400-0DAA-40E7-8249-529E16BCE6B2}{10}{B0}"><one:Position x="144.0" y="312.0" z="4"/><one:Size width="182.6545715332031" height="50.55070495605469"/><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{8B7F6400-0DAA-40E7-8249-529E16BCE6B2}{11}{B0}" alignment="left"><one:Table bordersVisible="true" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{8B7F6400-0DAA-40E7-8249-529E16BCE6B2}{12}{B0}"><one:Columns><one:Column index="0" width="129.3788909912109"/><one:Column index="1" width="45.14567184448242"/></one:Columns><one:Row objectID="{8B7F6400-0DAA-40E7-8249-529E16BCE6B2}{13}{B0}" lastModifiedTime="2026-09-08T04:47:24.000Z"><one:Cell lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{8B7F6400-0DAA-40E7-8249-529E16BCE6B2}{14}{B0}" lastModifiedByInitials="S"><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{8B7F6400-0DAA-40E7-8249-529E16BCE6B2}{17}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Left cell]]></one:T></one:OE><one:OE author="Rich author" lastModifiedBy="Rich author" creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{21DF9517-87D7-00F5-18D8-CCA310D8962A}{1}{B0}" alignment="left"><one:T><![CDATA[<span style='font-weight:bold;
9text-decoration:underline;font-family:Calibri;font-size:11.0pt'>Bold</span><span
10style='font-family:Calibri;font-size:11.0pt'> </span><span style='font-family:
11Arial;font-size:13.5pt'>&#129408;</span><span style='font-family:Calibri;
12font-size:11.0pt'> </span><span style='font-style:italic;text-decoration:line-through;
13font-family:Calibri;font-size:11.0pt'>italic</span><span style='font-family:
14Calibri;font-size:11.0pt'> </span><span style='vertical-align:super;font-family:
15Calibri;font-size:11.0pt'>é</span><span style='font-family:Calibri;font-size:
1611.0pt'> </span><span style='font-family:Calibri;font-size:11.0pt;color:#0C2238;
17background:yellow;mso-highlight:yellow'>color</span><span style='font-family:
18Calibri;font-size:11.0pt'> </span><span style='vertical-align:sub;font-family:
19Calibri;font-size:11.0pt'>東京</span><span style='font-family:Calibri;font-size:
2011.0pt'><br>
21End</span>]]></one:T></one:OE></one:OEChildren></one:Cell><one:Cell lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{8B7F6400-0DAA-40E7-8249-529E16BCE6B2}{22}{B0}" lastModifiedByInitials="S"><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{8B7F6400-0DAA-40E7-8249-529E16BCE6B2}{25}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Right cell]]></one:T></one:OE></one:OEChildren></one:Cell></one:Row></one:Table></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/native-cell/cold/read/payloads.json created+10
......@@ -0,0 +1,10 @@
1[
2 {
3 "sha256": "af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7",
4 "name": "fictitious-attachment.txt",
5 "object": "{A5A01D50-6C3A-4B67-9D41-B0CB3EEF1DF4}{11}{B0}",
6 "kind": "InsertedFile",
7 "page": "{2CEF1916-B4F8-48E4-9BD8-7292BDC39B61}{1}{B0}",
8 "bytes": 43
9 }
10]
\ No newline at end of file
corpus/formatted-insertion/native-cell/cold/run.json created+18
......@@ -0,0 +1,18 @@
1{
2 "notebook": "/Users/clo/dev/one/evidence/m10/formatted-insertion-isolated/native-cell",
3 "expected_pages": 1,
4 "author": null,
5 "author_timeout_seconds": 600,
6 "inspect": false,
7 "collect_notebook": true,
8 "base": {
9 "file": "win7-office-base.qcow2",
10 "format": "qcow2",
11 "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346",
12 "virtual_size": 68719476736
13 },
14 "scripts": {
15 "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331",
16 "read.ps1": "086789e467779add0fc071ad8c524c2b02d3d0d609aea4a41f3128cadba371e8"
17 }
18}
corpus/formatted-insertion/native-cell/cold/source.json created+8
......@@ -0,0 +1,8 @@
1[
2 {
3 "path": "synthetic.one",
4 "bytes": 27800,
5 "sha256": "2d01da4a2c8a0cba582d97460b708c77eca38617f9103f4a3cc9eea33f0e0351",
6 "mtime_ns": 1788842844345306887
7 }
8]
corpus/formatted-insertion/native-cell/cold/teardown.json created+1
......@@ -0,0 +1 @@
1{"absent": true}
corpus/formatted-insertion/native-cell/reverse/control-before.xml created+21
......@@ -0,0 +1,21 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{BE914D0C-20F2-4E33-AE0F-7458034A05F5}{1}{B0}" name="Fictitious: café, 東京, مرحبا" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:09:10.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{D95DE5B0-6B87-4D85-A1FD-F883FCD6E094}{10}{B0}"><one:Position x="36.0" y="14.40000057220459" z="0"/><one:Size width="127.5136947631836" height="14.30000114440918"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{D95DE5B0-6B87-4D85-A1FD-F883FCD6E094}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
3style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
4style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
5style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
6style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
7lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:57.000Z" objectID="{8FED39A5-D8D2-47D8-BB4B-7A0B58DA04DD}{10}{B0}"><one:Position x="144.0" y="96.0" z="1"/><one:Size width="167.0449523925781" height="13.42771339416504"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:57.000Z" lastModifiedTime="2026-09-05T05:06:57.000Z" objectID="{8FED39A5-D8D2-47D8-BB4B-7A0B58DA04DD}{11}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Fictitious positioned outline.]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{B2C4512A-3E48-4E76-8D3B-D1FFB4B74C53}{10}{B0}"><one:Position x="144.0" y="192.0" z="2"/><one:Size width="72.0" height="0.750005722045898"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:58.000Z" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{B2C4512A-3E48-4E76-8D3B-D1FFB4B74C53}{11}{B0}" alignment="left"><one:Image format="png" originalPageNumber="0"><one:Data>iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAusB9Y9J1uoA
8AAAASUVORK5CYII=</one:Data></one:Image></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{37DE494A-F830-4DB0-A896-B60180668360}{10}{B0}"><one:Position x="264.0" y="192.0" z="3"/><one:Size width="72.00001525878906" height="63.0"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:59.000Z" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{37DE494A-F830-4DB0-A896-B60180668360}{11}{B0}" alignment="left"><one:InsertedFile pathCache="C:\Users\clover\AppData\Local\Microsoft\OneNote\14.0\OneNoteOfflineCache_Files\458001d8-0f1e-451f-81cb-621828fc0b39.txt" pathSource="C:\one-tests\runs\20260905-05\assets\fictitious-attachment.txt" preferredName="fictitious-attachment.txt"/></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{10}{B0}"><one:Position x="144.0" y="312.0" z="4"/><one:Size width="183.4246368408203" height="50.55070495605469"/><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{11}{B0}" alignment="left"><one:Table bordersVisible="true" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{12}{B0}"><one:Columns><one:Column index="0" width="130.1489715576172"/><one:Column index="1" width="45.14567184448242"/></one:Columns><one:Row objectID="{1901301A-99A0-4630-B79E-5454A8357826}{13}{B0}" lastModifiedTime="2026-09-08T04:47:24.000Z"><one:Cell lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{14}{B0}" lastModifiedByInitials="S"><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{17}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Left cell]]></one:T></one:OE><one:OE author="Rich author" lastModifiedBy="Rich author" creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{B3A1C10D-13DD-0622-2D0F-CA69AE5108BE}{1}{B0}" alignment="left"><one:T><![CDATA[<span style='font-weight:bold;
9text-decoration:underline;font-family:Calibri;font-size:11.0pt'>Bold</span><span
10style='font-family:Calibri;font-size:11.0pt'> </span><span style='font-family:
11Arial;font-size:13.5pt'>&#129408;</span><span style='font-family:Calibri;
12font-size:11.0pt'> </span><span style='font-style:italic;text-decoration:line-through;
13font-family:Calibri;font-size:11.0pt'>italic</span><span style='font-family:
14Calibri;font-size:11.0pt'> </span><span style='vertical-align:super;font-family:
15Calibri;font-size:11.0pt'>é</span><span style='font-family:Calibri;font-size:
1611.0pt'> </span><span style='font-family:Calibri;font-size:11.0pt;color:#0C2238;
17background:yellow;mso-highlight:yellow'>color</span><span style='font-family:
18Calibri;font-size:11.0pt'> </span><span style='vertical-align:sub;font-family:
19Calibri;font-size:11.0pt'>東京</span><span style='font-family:Calibri;font-size:
2011.0pt'><br>
21End</span>]]></one:T></one:OE></one:OEChildren></one:Cell><one:Cell lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{22}{B0}" lastModifiedByInitials="S"><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{25}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Right cell]]></one:T></one:OE></one:OEChildren></one:Cell></one:Row></one:Table></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/native-cell/reverse/control-update.xml created+14
......@@ -0,0 +1,14 @@
1<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{BE914D0C-20F2-4E33-AE0F-7458034A05F5}{1}{B0}"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" /><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{10}{B0}" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote"><one:Position x="144.0" y="312.0" z="4" /><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{11}{B0}" alignment="left"><one:Table bordersVisible="true" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{12}{B0}"><one:Columns><one:Column index="0" width="130.1489715576172" /><one:Column index="1" width="45.14567184448242" /></one:Columns><one:Row objectID="{1901301A-99A0-4630-B79E-5454A8357826}{13}{B0}" lastModifiedTime="2026-09-08T04:47:24.000Z"><one:Cell lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{14}{B0}" lastModifiedByInitials="S"><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{17}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Left cell]]></one:T></one:OE><one:OE author="Rich author" lastModifiedBy="Rich author" creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{B3A1C10D-13DD-0622-2D0F-CA69AE5108BE}{1}{B0}" alignment="left"><one:T><![CDATA[<span style='font-weight:bold;
2text-decoration:underline;font-family:Calibri;font-size:11.0pt'>Bold</span><span
3style='font-family:Calibri;font-size:11.0pt'> </span><span style='font-family:
4Arial;font-size:13.5pt'>&#129408;</span><span style='font-family:Calibri;
5font-size:11.0pt'> </span><span style='font-style:italic;text-decoration:line-through;
6font-family:Calibri;font-size:11.0pt'>italic</span><span style='font-family:
7Calibri;font-size:11.0pt'> </span><span style='vertical-align:super;font-family:
8Calibri;font-size:11.0pt'>é</span><span style='font-family:Calibri;font-size:
911.0pt'> </span><span style='font-family:Calibri;font-size:11.0pt;color:#0C2238;
10background:yellow;mso-highlight:yellow'>color</span><span style='font-family:
11Calibri;font-size:11.0pt'> </span><span style='vertical-align:sub;font-family:
12Calibri;font-size:11.0pt'>東京</span><span style='font-family:Calibri;font-size:
1311.0pt'><br>
14End</span>]]></one:T></one:OE></one:OEChildren></one:Cell><one:Cell lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{22}{B0}" lastModifiedByInitials="S"><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{25}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Right cell]]></one:T></one:OE></one:OEChildren></one:Cell></one:Row></one:Table></one:OE></one:OEChildren></one:Outline></one:Page>
\ No newline at end of file
corpus/formatted-insertion/native-cell/reverse/edit-before.xml created+23
......@@ -0,0 +1,23 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{BE914D0C-20F2-4E33-AE0F-7458034A05F5}{1}{B0}" name="Fictitious: café, 東京, مرحبا" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:09:10.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{D95DE5B0-6B87-4D85-A1FD-F883FCD6E094}{10}{B0}"><one:Position x="36.0" y="14.40000057220459" z="1"/><one:Size width="127.5136947631836" height="14.30000114440918"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{D95DE5B0-6B87-4D85-A1FD-F883FCD6E094}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
3style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
4style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
5style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
6style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
7lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:57.000Z" objectID="{8FED39A5-D8D2-47D8-BB4B-7A0B58DA04DD}{10}{B0}"><one:Position x="144.0" y="96.0" z="2"/><one:Size width="167.0449523925781" height="13.42771339416504"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:57.000Z" lastModifiedTime="2026-09-05T05:06:57.000Z" objectID="{8FED39A5-D8D2-47D8-BB4B-7A0B58DA04DD}{11}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Fictitious positioned outline.]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{B2C4512A-3E48-4E76-8D3B-D1FFB4B74C53}{10}{B0}"><one:Position x="144.0" y="192.0" z="3"/><one:Size width="72.0" height="0.750005722045898"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:58.000Z" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{B2C4512A-3E48-4E76-8D3B-D1FFB4B74C53}{11}{B0}" alignment="left"><one:Image format="png" originalPageNumber="0"><one:Data>iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAusB9Y9J1uoA
8AAAASUVORK5CYII=</one:Data></one:Image></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{37DE494A-F830-4DB0-A896-B60180668360}{10}{B0}"><one:Position x="264.0" y="192.0" z="4"/><one:Size width="72.00001525878906" height="63.0"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:59.000Z" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{37DE494A-F830-4DB0-A896-B60180668360}{11}{B0}" alignment="left"><one:InsertedFile pathCache="C:\Users\clover\AppData\Local\Microsoft\OneNote\14.0\OneNoteOfflineCache_Files\458001d8-0f1e-451f-81cb-621828fc0b39.txt" pathSource="C:\one-tests\runs\20260905-05\assets\fictitious-attachment.txt" preferredName="fictitious-attachment.txt"/></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{10}{B0}"><one:Position x="144.0" y="312.0" z="0"/><one:Size width="186.5719451904297" height="51.85495376586914"/><one:OEChildren><one:OE creationTime="2026-09-08T05:09:16.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{B9A78589-7D39-4DF3-8EE7-24F5FF45921B}{16}{B0}" alignment="left"><one:Table bordersVisible="true" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{B9A78589-7D39-4DF3-8EE7-24F5FF45921B}{17}{B0}"><one:Columns><one:Column index="0" width="133.2962799072266"/><one:Column index="1" width="45.14567184448242"/></one:Columns><one:Row objectID="{B9A78589-7D39-4DF3-8EE7-24F5FF45921B}{18}{B0}" lastModifiedTime="2026-09-08T05:09:19.000Z"><one:Cell lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{B9A78589-7D39-4DF3-8EE7-24F5FF45921B}{19}{B0}" lastModifiedByInitials="V"><one:OEChildren><one:OE creationTime="2026-09-08T05:09:19.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{17}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Left cell]]></one:T></one:OE><one:OE author="Rich author" authorInitials="S" creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{B3A1C10D-13DD-0622-2D0F-CA69AE5108BE}{1}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[<span style='font-weight:bold;
9text-decoration:underline;font-family:Calibri;font-size:11.0pt' lang=en-US>Bold</span><span
10style='font-family:Calibri;font-size:11.0pt' lang=en-US> </span><span
11style='font-family:Calibri;font-size:13.5pt' lang=en-US>&#129408;</span><span
12style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
13style='font-style:italic;text-decoration:line-through;font-family:Calibri;
14font-size:11.0pt' lang=x-none>italic</span><span style='font-family:Calibri;
15font-size:11.0pt' lang=x-none> </span><span style='vertical-align:super;
16font-family:Calibri;font-size:11.0pt' lang=x-none>é</span><span
17style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
18style='font-family:Calibri;font-size:11.0pt;color:#0C2238;background:yellow;
19mso-highlight:yellow' lang=x-none>color</span><span style='font-family:Calibri;
20font-size:11.0pt' lang=x-none> </span><span style='vertical-align:sub;
21font-family:SimSun;font-size:11.0pt' lang=x-none>東京</span><span
22style='font-family:Calibri;font-size:11.0pt' lang=en-US><br>
23End</span>]]></one:T></one:OE></one:OEChildren></one:Cell><one:Cell lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{B9A78589-7D39-4DF3-8EE7-24F5FF45921B}{39}{B0}" lastModifiedByInitials="V"><one:OEChildren><one:OE creationTime="2026-09-08T05:09:19.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{25}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Right cell]]></one:T></one:OE></one:OEChildren></one:Cell></one:Row></one:Table></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/native-cell/reverse/edit-update.xml created+16
......@@ -0,0 +1,16 @@
1<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{BE914D0C-20F2-4E33-AE0F-7458034A05F5}{1}{B0}"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" /><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{10}{B0}" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote"><one:Position x="144.0" y="312.0" z="0" /><one:OEChildren><one:OE creationTime="2026-09-08T05:09:16.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{B9A78589-7D39-4DF3-8EE7-24F5FF45921B}{16}{B0}" alignment="left"><one:Table bordersVisible="true" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{B9A78589-7D39-4DF3-8EE7-24F5FF45921B}{17}{B0}"><one:Columns><one:Column index="0" width="133.2962799072266" /><one:Column index="1" width="45.14567184448242" /></one:Columns><one:Row objectID="{B9A78589-7D39-4DF3-8EE7-24F5FF45921B}{18}{B0}" lastModifiedTime="2026-09-08T05:09:19.000Z"><one:Cell lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{B9A78589-7D39-4DF3-8EE7-24F5FF45921B}{19}{B0}" lastModifiedByInitials="V"><one:OEChildren><one:OE creationTime="2026-09-08T05:09:19.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{17}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Left cell]]></one:T></one:OE><one:OE author="Rich author" authorInitials="S" creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{B3A1C10D-13DD-0622-2D0F-CA69AE5108BE}{1}{B0}" alignment="left" quickStyleIndex="0"><one:T>&lt;span style='font-weight:bold;
2text-decoration:underline;font-family:Calibri;font-size:11.0pt' lang=en-US&gt;Native Bold&lt;/span&gt;&lt;span
3style='font-family:Calibri;font-size:11.0pt' lang=en-US&gt; &lt;/span&gt;&lt;span
4style='font-family:Calibri;font-size:13.5pt' lang=en-US&gt;&amp;#129408;&lt;/span&gt;&lt;span
5style='font-family:Calibri;font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span
6style='font-style:italic;text-decoration:line-through;font-family:Calibri;
7font-size:11.0pt' lang=x-none&gt;italic&lt;/span&gt;&lt;span style='font-family:Calibri;
8font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span style='vertical-align:super;
9font-family:Calibri;font-size:11.0pt' lang=x-none&gt;é&lt;/span&gt;&lt;span
10style='font-family:Calibri;font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span
11style='font-family:Calibri;font-size:11.0pt;color:#0C2238;background:yellow;
12mso-highlight:yellow' lang=x-none&gt;color&lt;/span&gt;&lt;span style='font-family:Calibri;
13font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span style='vertical-align:sub;
14font-family:SimSun;font-size:11.0pt' lang=x-none&gt;東京&lt;/span&gt;&lt;span
15style='font-family:Calibri;font-size:11.0pt' lang=en-US&gt;&lt;br&gt;
16End&lt;/span&gt;</one:T></one:OE></one:OEChildren></one:Cell><one:Cell lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{B9A78589-7D39-4DF3-8EE7-24F5FF45921B}{39}{B0}" lastModifiedByInitials="V"><one:OEChildren><one:OE creationTime="2026-09-08T05:09:19.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{1901301A-99A0-4630-B79E-5454A8357826}{25}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Right cell]]></one:T></one:OE></one:OEChildren></one:Cell></one:Row></one:Table></one:OE></one:OEChildren></one:Outline></one:Page>
\ No newline at end of file
corpus/formatted-insertion/native-cell/reverse/notebook/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/native-cell/reverse/notebook/synthetic.one differ
corpus/formatted-insertion/native-cell/reverse/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment created+1
......@@ -0,0 +1 @@
1../../../../append/round-01/native/append-01-complex/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment
\ No newline at end of file
corpus/formatted-insertion/native-cell/reverse/read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-0BC5CBA6",
5 "cold": false,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/native-cell/reverse/read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{1D5CE013-2ABD-43D2-AEFD-1F7020778E2F}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T05:09:31.000Z" color="#B49EDE"><one:Section name="synthetic" ID="{B21D4528-7E27-0476-2024-E7DD43378AE0}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T05:09:31.000Z" color="#8AA8E4"><one:Page ID="{9E54B6AE-F7EC-4767-A743-4F4CBF0F96FF}{1}{B0}" name="Fictitious: café, 東京, مرحبا" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:09:31.000Z" pageLevel="1"/></one:Section></one:Notebook>
corpus/formatted-insertion/native-cell/reverse/read/page-000.xml created+23
......@@ -0,0 +1,23 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{9E54B6AE-F7EC-4767-A743-4F4CBF0F96FF}{1}{B0}" name="Fictitious: café, 東京, مرحبا" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:09:31.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{F9981E12-BC99-44D1-A8B1-C3974093739E}{10}{B0}"><one:Position x="36.0" y="14.40000057220459" z="1"/><one:Size width="127.5136947631836" height="14.30000114440918"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{F9981E12-BC99-44D1-A8B1-C3974093739E}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
3style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
4style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
5style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
6style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
7lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:57.000Z" objectID="{AF28C207-0FCC-4E8C-B207-411FE49F97D7}{10}{B0}"><one:Position x="144.0" y="96.0" z="2"/><one:Size width="167.0449523925781" height="13.42771339416504"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:57.000Z" lastModifiedTime="2026-09-05T05:06:57.000Z" objectID="{AF28C207-0FCC-4E8C-B207-411FE49F97D7}{11}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Fictitious positioned outline.]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{9201AA88-E956-4722-8477-EAEB08F2DF59}{10}{B0}"><one:Position x="144.0" y="192.0" z="3"/><one:Size width="72.0" height="0.750005722045898"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:58.000Z" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{9201AA88-E956-4722-8477-EAEB08F2DF59}{11}{B0}" alignment="left"><one:Image format="png" originalPageNumber="0"><one:Data>iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAusB9Y9J1uoA
8AAAASUVORK5CYII=</one:Data></one:Image></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{171BB2E8-2F2E-44E4-A1DA-8D153C23106A}{10}{B0}"><one:Position x="264.0" y="192.0" z="4"/><one:Size width="72.00001525878906" height="63.0"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:59.000Z" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{171BB2E8-2F2E-44E4-A1DA-8D153C23106A}{11}{B0}" alignment="left"><one:InsertedFile pathCache="C:\Users\clover\AppData\Local\Microsoft\OneNote\14.0\OneNoteOfflineCache_Files\458001d8-0f1e-451f-81cb-621828fc0b39.txt" pathSource="C:\one-tests\runs\20260905-05\assets\fictitious-attachment.txt" preferredName="fictitious-attachment.txt"/></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{39C4CBB8-4EBE-4F64-BED2-6F401470EB2C}{10}{B0}"><one:Position x="144.0" y="312.0" z="0"/><one:Size width="218.9918212890625" height="51.85495376586914"/><one:OEChildren><one:OE creationTime="2026-09-08T05:09:19.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{99627E2B-AA27-44A7-87AB-1FE143000111}{51}{B0}" alignment="left"><one:Table bordersVisible="true" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{99627E2B-AA27-44A7-87AB-1FE143000111}{52}{B0}"><one:Columns><one:Column index="0" width="165.7161407470703"/><one:Column index="1" width="45.14567184448242"/></one:Columns><one:Row objectID="{99627E2B-AA27-44A7-87AB-1FE143000111}{53}{B0}" lastModifiedTime="2026-09-08T05:09:19.000Z"><one:Cell lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{99627E2B-AA27-44A7-87AB-1FE143000111}{54}{B0}" lastModifiedByInitials="V"><one:OEChildren><one:OE creationTime="2026-09-08T05:09:19.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{39C4CBB8-4EBE-4F64-BED2-6F401470EB2C}{17}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Left cell]]></one:T></one:OE><one:OE author="Rich author" authorInitials="S" creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{93643AAF-C4C3-0F76-2443-F17D12149BB4}{1}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[<span style='font-weight:bold;
9text-decoration:underline;font-family:Calibri;font-size:11.0pt' lang=en-US>Native Bold</span><span
10style='font-family:Calibri;font-size:11.0pt' lang=en-US> </span><span
11style='font-family:Calibri;font-size:13.5pt' lang=en-US>&#129408;</span><span
12style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
13style='font-style:italic;text-decoration:line-through;font-family:Calibri;
14font-size:11.0pt' lang=x-none>italic</span><span style='font-family:Calibri;
15font-size:11.0pt' lang=x-none> </span><span style='vertical-align:super;
16font-family:Calibri;font-size:11.0pt' lang=x-none>é</span><span
17style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
18style='font-family:Calibri;font-size:11.0pt;color:#0C2238;background:yellow;
19mso-highlight:yellow' lang=x-none>color</span><span style='font-family:Calibri;
20font-size:11.0pt' lang=x-none> </span><span style='vertical-align:sub;
21font-family:SimSun;font-size:11.0pt' lang=x-none>東京</span><span
22style='font-family:Calibri;font-size:11.0pt' lang=en-US><br>
23End</span>]]></one:T></one:OE></one:OEChildren></one:Cell><one:Cell lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{99627E2B-AA27-44A7-87AB-1FE143000111}{68}{B0}" lastModifiedByInitials="V"><one:OEChildren><one:OE creationTime="2026-09-08T05:09:19.000Z" lastModifiedTime="2026-09-08T05:09:19.000Z" objectID="{39C4CBB8-4EBE-4F64-BED2-6F401470EB2C}{25}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Right cell]]></one:T></one:OE></one:OEChildren></one:Cell></one:Row></one:Table></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/native-cell/reverse/read/payloads.json created+10
......@@ -0,0 +1,10 @@
1[
2 {
3 "sha256": "af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7",
4 "name": "fictitious-attachment.txt",
5 "object": "{171BB2E8-2F2E-44E4-A1DA-8D153C23106A}{11}{B0}",
6 "kind": "InsertedFile",
7 "page": "{9E54B6AE-F7EC-4767-A743-4F4CBF0F96FF}{1}{B0}",
8 "bytes": 43
9 }
10]
\ No newline at end of file
corpus/formatted-insertion/native-cell/reverse/reverse-verification.json created+5
......@@ -0,0 +1,5 @@
1{
2 "paragraphs": 5,
3 "characters": 112,
4 "exact_native_character_styles_after_control": true
5}
corpus/formatted-insertion/native-cell/reverse/run.json created+19
......@@ -0,0 +1,19 @@
1{
2 "notebook": "/Users/clo/dev/one/evidence/m10/formatted-insertion-isolated/native-cell",
3 "expected_pages": 1,
4 "author": "evidence/m10/formatted-reverse-auto-size.ps1",
5 "author_timeout_seconds": 600,
6 "inspect": false,
7 "collect_notebook": true,
8 "base": {
9 "file": "win7-office-base.qcow2",
10 "format": "qcow2",
11 "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346",
12 "virtual_size": 68719476736
13 },
14 "scripts": {
15 "author.ps1": "c5ebc74731fd4813803623b014ce9d6dbd6d2564918189865731807e6c458f9a",
16 "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331",
17 "read.ps1": "df4244a18ab3e9c21083b8df61b08b863e8cce0ec4bf0c9cd742a8ee6f79877d"
18 }
19}
corpus/formatted-insertion/native-cell/reverse/source.json created+8
......@@ -0,0 +1,8 @@
1[
2 {
3 "path": "synthetic.one",
4 "bytes": 27800,
5 "sha256": "2d01da4a2c8a0cba582d97460b708c77eca38617f9103f4a3cc9eea33f0e0351",
6 "mtime_ns": 1788842844345306887
7 }
8]
corpus/formatted-insertion/native-cell/reverse/teardown.json created+1
......@@ -0,0 +1 @@
1{"absent": true}
corpus/formatted-insertion/native-cell/ui/before-read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment created+1
......@@ -0,0 +1 @@
1../../../../append/round-01/native/append-01-complex/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment
\ No newline at end of file
corpus/formatted-insertion/native-cell/ui/before-read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-1DC21C3F",
5 "cold": true,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/native-cell/ui/before-read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{9335E9A4-2BB5-44D1-BA50-B989AA6E0C31}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T05:17:48.000Z" color="#B49EDE"><one:Section name="synthetic" ID="{7E619436-410B-0C9C-22EE-6EC96252B880}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T05:17:48.000Z" color="#8AA8E4"><one:Page ID="{522867B0-C8C0-4F8D-A589-C6589E6AA49F}{1}{B0}" name="Fictitious: café, 東京, مرحبا" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:17:48.000Z" pageLevel="1"/></one:Section></one:Notebook>
corpus/formatted-insertion/native-cell/ui/before-read/page-000.xml created+21
......@@ -0,0 +1,21 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{522867B0-C8C0-4F8D-A589-C6589E6AA49F}{1}{B0}" name="Fictitious: café, 東京, مرحبا" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:17:48.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{35E4CF0C-83B5-4C3B-AA7B-4A8361F641FE}{10}{B0}"><one:Position x="36.0" y="14.40000057220459" z="0"/><one:Size width="127.5136947631836" height="14.30000114440918"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{35E4CF0C-83B5-4C3B-AA7B-4A8361F641FE}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
3style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
4style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
5style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
6style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
7lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:57.000Z" objectID="{63541319-30E0-4666-B0CD-C80BC5FAA5B7}{10}{B0}"><one:Position x="144.0" y="96.0" z="1"/><one:Size width="167.0449523925781" height="13.42771339416504"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:57.000Z" lastModifiedTime="2026-09-05T05:06:57.000Z" objectID="{63541319-30E0-4666-B0CD-C80BC5FAA5B7}{11}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Fictitious positioned outline.]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{5E7D7B96-D67A-4FC8-86BD-63FF2997ED39}{10}{B0}"><one:Position x="144.0" y="192.0" z="2"/><one:Size width="72.0" height="0.750005722045898"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:58.000Z" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{5E7D7B96-D67A-4FC8-86BD-63FF2997ED39}{11}{B0}" alignment="left"><one:Image format="png" originalPageNumber="0"><one:Data>iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAusB9Y9J1uoA
8AAAASUVORK5CYII=</one:Data></one:Image></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{DB6763F6-1002-4C0E-A310-04011D46220A}{10}{B0}"><one:Position x="264.0" y="192.0" z="3"/><one:Size width="72.00001525878906" height="63.0"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:59.000Z" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{DB6763F6-1002-4C0E-A310-04011D46220A}{11}{B0}" alignment="left"><one:InsertedFile pathCache="C:\Users\clover\AppData\Local\Microsoft\OneNote\14.0\OneNoteOfflineCache_Files\458001d8-0f1e-451f-81cb-621828fc0b39.txt" pathSource="C:\one-tests\runs\20260905-05\assets\fictitious-attachment.txt" preferredName="fictitious-attachment.txt"/></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{10}{B0}"><one:Position x="144.0" y="312.0" z="4"/><one:Size width="182.6545715332031" height="50.55070495605469"/><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{11}{B0}" alignment="left"><one:Table bordersVisible="true" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{12}{B0}"><one:Columns><one:Column index="0" width="129.3788909912109"/><one:Column index="1" width="45.14567184448242"/></one:Columns><one:Row objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{13}{B0}" lastModifiedTime="2026-09-08T04:47:24.000Z"><one:Cell lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{14}{B0}" lastModifiedByInitials="S"><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{17}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Left cell]]></one:T></one:OE><one:OE author="Rich author" lastModifiedBy="Rich author" creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{5F18EBB1-FBEF-079C-2689-78693371A9D4}{1}{B0}" alignment="left"><one:T><![CDATA[<span style='font-weight:bold;
9text-decoration:underline;font-family:Calibri;font-size:11.0pt'>Bold</span><span
10style='font-family:Calibri;font-size:11.0pt'> </span><span style='font-family:
11Arial;font-size:13.5pt'>&#129408;</span><span style='font-family:Calibri;
12font-size:11.0pt'> </span><span style='font-style:italic;text-decoration:line-through;
13font-family:Calibri;font-size:11.0pt'>italic</span><span style='font-family:
14Calibri;font-size:11.0pt'> </span><span style='vertical-align:super;font-family:
15Calibri;font-size:11.0pt'>é</span><span style='font-family:Calibri;font-size:
1611.0pt'> </span><span style='font-family:Calibri;font-size:11.0pt;color:#0C2238;
17background:yellow;mso-highlight:yellow'>color</span><span style='font-family:
18Calibri;font-size:11.0pt'> </span><span style='vertical-align:sub;font-family:
19Calibri;font-size:11.0pt'>東京</span><span style='font-family:Calibri;font-size:
2011.0pt'><br>
21End</span>]]></one:T></one:OE></one:OEChildren></one:Cell><one:Cell lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{22}{B0}" lastModifiedByInitials="S"><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-05T05:07:00.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{25}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Right cell]]></one:T></one:OE></one:OEChildren></one:Cell></one:Row></one:Table></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/native-cell/ui/before-read/payloads.json created+10
......@@ -0,0 +1,10 @@
1[
2 {
3 "sha256": "af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7",
4 "name": "fictitious-attachment.txt",
5 "object": "{DB6763F6-1002-4C0E-A310-04011D46220A}{11}{B0}",
6 "kind": "InsertedFile",
7 "page": "{522867B0-C8C0-4F8D-A589-C6589E6AA49F}{1}{B0}",
8 "bytes": 43
9 }
10]
\ No newline at end of file
corpus/formatted-insertion/native-cell/ui/edit.ahk created+10
......@@ -0,0 +1,10 @@
1#Requires AutoHotkey v2.0
2OnError((exception, mode) => (FileAppend(exception.Message, "**"), ExitApp(1)))
3hwnd := WinExist("ahk_class Framework::CFrame ahk_exe ONENOTE.EXE")
4if !hwnd
5 throw Error("OneNote window is missing")
6WinActivate(hwnd)
7if !WinWaitActive(hwnd,, 5)
8 throw Error("OneNote window is not active")
9Send "{Left}"
10SendText "UI "
corpus/formatted-insertion/native-cell/ui/edit.json created+13
......@@ -0,0 +1,13 @@
1{
2 "exit": 0,
3 "stdout": "",
4 "stderr": "",
5 "w": 1280,
6 "h": 720,
7 "error": null,
8 "win": {
9 "title": "Fictitious: caf\u00e9, \u6771\u4eac, \u0645\u0631\u062d\u0628\u0627 - Microsoft OneNote",
10 "class": "Framework::CFrame",
11 "dialog": false
12 }
13}
\ No newline at end of file
corpus/formatted-insertion/native-cell/ui/edit.png created
Binary files /dev/null and b/corpus/formatted-insertion/native-cell/ui/edit.png differ
corpus/formatted-insertion/native-cell/ui/navigate.ahk created+20
......@@ -0,0 +1,20 @@
1#Requires AutoHotkey v2.0
2OnError((exception, mode) => (FileAppend(exception.Message, "**"), ExitApp(1)))
3dm := Buffer(220, 0)
4NumPut("UShort", 220, dm, 68)
5if !DllCall("EnumDisplaySettingsW", "Ptr", 0, "UInt", 0xFFFFFFFF, "Ptr", dm)
6 throw Error("Cannot inspect display mode")
7NumPut("UInt", NumGet(dm, 72, "UInt") | 0x180000, dm, 72)
8NumPut("UInt", 1280, dm, 172)
9NumPut("UInt", 720, dm, 176)
10if DllCall("ChangeDisplaySettingsW", "Ptr", dm, "UInt", 0, "Int") != 0
11 throw Error("Display mode rejected")
12app := ComObject("OneNote.Application")
13app.NavigateTo("{522867B0-C8C0-4F8D-A589-C6589E6AA49F}{1}{B0}", "{5F18EBB1-FBEF-079C-2689-78693371A9D4}{1}{B0}", false)
14hwnd := WinWait("ahk_class Framework::CFrame ahk_exe ONENOTE.EXE",, 10)
15if !hwnd
16 throw Error("OneNote window did not appear")
17WinMaximize(hwnd)
18WinActivate(hwnd)
19if !WinWaitActive(hwnd,, 10)
20 throw Error("OneNote window did not become active")
corpus/formatted-insertion/native-cell/ui/navigate.json created+13
......@@ -0,0 +1,13 @@
1{
2 "exit": 0,
3 "stdout": "",
4 "stderr": "",
5 "w": 1280,
6 "h": 720,
7 "error": null,
8 "win": {
9 "title": "Fictitious: caf\u00e9, \u6771\u4eac, \u0645\u0631\u062d\u0628\u0627 - Microsoft OneNote",
10 "class": "Framework::CFrame",
11 "dialog": false
12 }
13}
\ No newline at end of file
corpus/formatted-insertion/native-cell/ui/notebook/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/native-cell/ui/notebook/synthetic.one differ
corpus/formatted-insertion/native-cell/ui/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment created+1
......@@ -0,0 +1 @@
1../../../../append/round-01/native/append-01-complex/read/af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7.attachment
\ No newline at end of file
corpus/formatted-insertion/native-cell/ui/read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-1DC21C3F",
5 "cold": false,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/native-cell/ui/read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{9335E9A4-2BB5-44D1-BA50-B989AA6E0C31}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T05:21:04.000Z" color="#B49EDE" isCurrentlyViewed="true"><one:Section name="synthetic" ID="{7E619436-410B-0C9C-22EE-6EC96252B880}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T05:21:04.000Z" color="#8AA8E4" isCurrentlyViewed="true"><one:Page ID="{522867B0-C8C0-4F8D-A589-C6589E6AA49F}{1}{B0}" name="Fictitious: café, 東京, مرحبا" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:20:59.000Z" pageLevel="1" isCurrentlyViewed="true"/></one:Section></one:Notebook>
corpus/formatted-insertion/native-cell/ui/read/page-000.xml created+21
......@@ -0,0 +1,21 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{522867B0-C8C0-4F8D-A589-C6589E6AA49F}{1}{B0}" name="Fictitious: café, 東京, مرحبا" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:21:45.000Z" pageLevel="1" isCurrentlyViewed="true" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{35E4CF0C-83B5-4C3B-AA7B-4A8361F641FE}{10}{B0}"><one:Position x="36.0" y="14.40000057220459" z="0"/><one:Size width="127.5136947631836" height="14.30000114440918"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{35E4CF0C-83B5-4C3B-AA7B-4A8361F641FE}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
3style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
4style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
5style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
6style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
7lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-08T05:20:08.000Z" objectID="{63541319-30E0-4666-B0CD-C80BC5FAA5B7}{10}{B0}"><one:Position x="144.0" y="96.0" z="1"/><one:Size width="167.0449523925781" height="13.42771339416504"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:57.000Z" lastModifiedTime="2026-09-08T05:20:08.000Z" objectID="{63541319-30E0-4666-B0CD-C80BC5FAA5B7}{11}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Fictitious positioned outline.]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{5E7D7B96-D67A-4FC8-86BD-63FF2997ED39}{10}{B0}"><one:Position x="144.0" y="192.0" z="2"/><one:Size width="72.0" height="0.750005722045898"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:58.000Z" lastModifiedTime="2026-09-05T05:06:58.000Z" objectID="{5E7D7B96-D67A-4FC8-86BD-63FF2997ED39}{11}{B0}" alignment="left"><one:Image format="png" originalPageNumber="0"><one:Data>iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAusB9Y9J1uoA
8AAAASUVORK5CYII=</one:Data></one:Image></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{DB6763F6-1002-4C0E-A310-04011D46220A}{10}{B0}"><one:Position x="264.0" y="192.0" z="3"/><one:Size width="72.00001525878906" height="63.0"/><one:OEChildren><one:OE creationTime="2026-09-05T05:06:59.000Z" lastModifiedTime="2026-09-05T05:06:59.000Z" objectID="{DB6763F6-1002-4C0E-A310-04011D46220A}{11}{B0}" alignment="left"><one:InsertedFile pathCache="C:\Users\clover\AppData\Local\Microsoft\OneNote\14.0\OneNoteOfflineCache_Files\458001d8-0f1e-451f-81cb-621828fc0b39.txt" pathSource="C:\one-tests\runs\20260905-05\assets\fictitious-attachment.txt" preferredName="fictitious-attachment.txt"/></one:OE></one:OEChildren></one:Outline><one:Outline author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" lastModifiedTime="2026-09-08T05:20:59.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{10}{B0}"><one:Position x="144.0" y="312.0" z="4"/><one:Size width="195.2552032470703" height="50.55070495605469"/><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-08T05:20:59.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{11}{B0}" alignment="left"><one:Table bordersVisible="true" lastModifiedTime="2026-09-08T05:20:59.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{12}{B0}"><one:Columns><one:Column index="0" width="141.9795227050781"/><one:Column index="1" width="45.14567184448242"/></one:Columns><one:Row objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{13}{B0}" lastModifiedTime="2026-09-08T05:20:59.000Z"><one:Cell lastModifiedTime="2026-09-08T05:20:59.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{14}{B0}" lastModifiedByInitials="S"><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-08T05:20:08.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{17}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Left cell]]></one:T></one:OE><one:OE author="Rich author" lastModifiedBy="virtual" lastModifiedByInitials="V" creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:20:59.000Z" objectID="{5F18EBB1-FBEF-079C-2689-78693371A9D4}{1}{B0}" alignment="left"><one:T><![CDATA[<span style='font-weight:bold;
9text-decoration:underline;font-family:Calibri;font-size:11.0pt'>UI Bold</span><span
10style='font-family:Calibri;font-size:11.0pt'> </span><span style='font-family:
11Arial;font-size:13.5pt'>&#129408;</span><span style='font-family:Calibri;
12font-size:11.0pt'> </span><span style='font-style:italic;text-decoration:line-through;
13font-family:Calibri;font-size:11.0pt'>italic</span><span style='font-family:
14Calibri;font-size:11.0pt'> </span><span style='vertical-align:super;font-family:
15Calibri;font-size:11.0pt'>é</span><span style='font-family:Calibri;font-size:
1611.0pt'> </span><span style='font-family:Calibri;font-size:11.0pt;color:#0C2238;
17background:yellow;mso-highlight:yellow'>color</span><span style='font-family:
18Calibri;font-size:11.0pt'> </span><span style='vertical-align:sub;font-family:
19Calibri;font-size:11.0pt'>東京</span><span style='font-family:Calibri;font-size:
2011.0pt'><br>
21End</span>]]></one:T></one:OE></one:OEChildren></one:Cell><one:Cell lastModifiedTime="2026-09-08T05:20:08.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{22}{B0}" lastModifiedByInitials="S"><one:OEChildren><one:OE creationTime="2026-09-05T05:07:00.000Z" lastModifiedTime="2026-09-08T05:20:08.000Z" objectID="{F5B81AA6-7192-478E-BC18-E6543515D94C}{25}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[Right cell]]></one:T></one:OE></one:OEChildren></one:Cell></one:Row></one:Table></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/native-cell/ui/read/payloads.json created+10
......@@ -0,0 +1,10 @@
1[
2 {
3 "sha256": "af1af4b8987109ce1e335e538910fb3860b7c57eb3b6110a06aa2114e06d69a7",
4 "name": "fictitious-attachment.txt",
5 "object": "{DB6763F6-1002-4C0E-A310-04011D46220A}{11}{B0}",
6 "kind": "InsertedFile",
7 "page": "{522867B0-C8C0-4F8D-A589-C6589E6AA49F}{1}{B0}",
8 "bytes": 43
9 }
10]
\ No newline at end of file
corpus/formatted-insertion/native-cell/ui/run.json created+18
......@@ -0,0 +1,18 @@
1{
2 "notebook": "/Users/clo/dev/one/corpus/formatted-insertion/native-cell/candidate",
3 "expected_pages": 1,
4 "author": null,
5 "author_timeout_seconds": 600,
6 "inspect": true,
7 "collect_notebook": true,
8 "base": {
9 "file": "win7-office-base.qcow2",
10 "format": "qcow2",
11 "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346",
12 "virtual_size": 68719476736
13 },
14 "scripts": {
15 "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331",
16 "read.ps1": "df4244a18ab3e9c21083b8df61b08b863e8cce0ec4bf0c9cd742a8ee6f79877d"
17 }
18}
corpus/formatted-insertion/native-cell/ui/source.json created+8
......@@ -0,0 +1,8 @@
1[
2 {
3 "path": "synthetic.one",
4 "bytes": 27800,
5 "sha256": "2d01da4a2c8a0cba582d97460b708c77eca38617f9103f4a3cc9eea33f0e0351",
6 "mtime_ns": 1788844254905915500
7 }
8]
corpus/formatted-insertion/native-cell/ui/teardown.json created+1
......@@ -0,0 +1 @@
1{"absent": true}
corpus/formatted-insertion/native-paragraph/candidate/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/native-paragraph/candidate/synthetic.one differ
corpus/formatted-insertion/native-paragraph/cold/notebook/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/native-paragraph/cold/notebook/synthetic.one differ
corpus/formatted-insertion/native-paragraph/cold/read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-3A29493B",
5 "cold": true,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/native-paragraph/cold/read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{94392AC7-D3ED-4D43-A6F0-56DDDBDC19F9}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T04:52:44.000Z" color="#B49EDE"><one:Section name="synthetic" ID="{D26EFE31-822A-0358-00F3-8768C1B3CD8C}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T04:52:44.000Z" color="#8AA8E4"><one:Page ID="{FE270DB7-0BE1-4049-8794-2FF93D8BD193}{1}{B0}" name="Bold 🦀 italic é color 東京" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T04:52:44.000Z" pageLevel="1"/></one:Section></one:Notebook>
corpus/formatted-insertion/native-paragraph/cold/read/page-000.xml created+20
......@@ -0,0 +1,20 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{FE270DB7-0BE1-4049-8794-2FF93D8BD193}{1}{B0}" name="Bold 🦀 italic é color 東京" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T04:52:44.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="Rich author" lastModifiedBy="Rich author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{99EBA50B-4094-43FF-8866-A322C21734F2}{10}{B0}"><one:Position x="36.0" y="14.40000057220459" z="0"/><one:Size width="127.5136947631836" height="42.90299224853515"/><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{9E8E0DFC-B3E9-08F5-3832-6028097C4604}{1}{B0}" alignment="left"><one:T><![CDATA[<span style='font-weight:bold;
3text-decoration:underline;font-family:Calibri;font-size:11.0pt'>Bold</span><span
4style='font-family:Calibri;font-size:11.0pt'> </span><span style='font-family:
5Arial;font-size:13.5pt'>&#129408;</span><span style='font-family:Calibri;
6font-size:11.0pt'> </span><span style='font-style:italic;text-decoration:line-through;
7font-family:Calibri;font-size:11.0pt'>italic</span><span style='font-family:
8Calibri;font-size:11.0pt'> </span><span style='vertical-align:super;font-family:
9Calibri;font-size:11.0pt'>é</span><span style='font-family:Calibri;font-size:
1011.0pt'> </span><span style='font-family:Calibri;font-size:11.0pt;color:#0C2238;
11background:yellow;mso-highlight:yellow'>color</span><span style='font-family:
12Calibri;font-size:11.0pt'> </span><span style='vertical-align:sub;font-family:
13Calibri;font-size:11.0pt'>東京</span><span style='font-family:Calibri;font-size:
1411.0pt'><br>
15End</span>]]></one:T></one:OE><one:OE author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{99EBA50B-4094-43FF-8866-A322C21734F2}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
16style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
17style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
18style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
19style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
20lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/native-paragraph/cold/read/payloads.json created+3
......@@ -0,0 +1,3 @@
1[
2
3]
\ No newline at end of file
corpus/formatted-insertion/native-paragraph/cold/run.json created+18
......@@ -0,0 +1,18 @@
1{
2 "notebook": "/Users/clo/dev/one/evidence/m10/formatted-insertion-isolated/native-paragraph",
3 "expected_pages": 1,
4 "author": null,
5 "author_timeout_seconds": 600,
6 "inspect": false,
7 "collect_notebook": true,
8 "base": {
9 "file": "win7-office-base.qcow2",
10 "format": "qcow2",
11 "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346",
12 "virtual_size": 68719476736
13 },
14 "scripts": {
15 "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331",
16 "read.ps1": "086789e467779add0fc071ad8c524c2b02d3d0d609aea4a41f3128cadba371e8"
17 }
18}
corpus/formatted-insertion/native-paragraph/cold/source.json created+8
......@@ -0,0 +1,8 @@
1[
2 {
3 "path": "synthetic.one",
4 "bytes": 18672,
5 "sha256": "202823512283be980b6a139adcf5f4f369d15f17d60ed7b23f9f2289513aa4e9",
6 "mtime_ns": 1788842844336692559
7 }
8]
corpus/formatted-insertion/native-paragraph/cold/teardown.json created+1
......@@ -0,0 +1 @@
1{"absent": true}
corpus/formatted-insertion/native-paragraph/reverse/control-before.xml created+20
......@@ -0,0 +1,20 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{1B7A8098-ED5A-422F-B4CC-AF462C16CB92}{1}{B0}" name="Bold 🦀 italic é color 東京" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:00:42.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="Rich author" lastModifiedBy="Rich author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{7CB62824-A62F-4199-BB3E-239DD38A2EF3}{10}{B0}"><one:Position x="36.0" y="14.40000057220459" z="0"/><one:Size width="127.5136947631836" height="42.90299224853515"/><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{7BD380D3-5552-0A93-0B6A-E09718E15C05}{1}{B0}" alignment="left"><one:T><![CDATA[<span style='font-weight:bold;
3text-decoration:underline;font-family:Calibri;font-size:11.0pt'>Bold</span><span
4style='font-family:Calibri;font-size:11.0pt'> </span><span style='font-family:
5Arial;font-size:13.5pt'>&#129408;</span><span style='font-family:Calibri;
6font-size:11.0pt'> </span><span style='font-style:italic;text-decoration:line-through;
7font-family:Calibri;font-size:11.0pt'>italic</span><span style='font-family:
8Calibri;font-size:11.0pt'> </span><span style='vertical-align:super;font-family:
9Calibri;font-size:11.0pt'>é</span><span style='font-family:Calibri;font-size:
1011.0pt'> </span><span style='font-family:Calibri;font-size:11.0pt;color:#0C2238;
11background:yellow;mso-highlight:yellow'>color</span><span style='font-family:
12Calibri;font-size:11.0pt'> </span><span style='vertical-align:sub;font-family:
13Calibri;font-size:11.0pt'>東京</span><span style='font-family:Calibri;font-size:
1411.0pt'><br>
15End</span>]]></one:T></one:OE><one:OE author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{7CB62824-A62F-4199-BB3E-239DD38A2EF3}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
16style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
17style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
18style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
19style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
20lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/native-paragraph/reverse/control-update.xml created+19
......@@ -0,0 +1,19 @@
1<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{1B7A8098-ED5A-422F-B4CC-AF462C16CB92}{1}{B0}"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" /><one:Outline author="Rich author" lastModifiedBy="Rich author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{7CB62824-A62F-4199-BB3E-239DD38A2EF3}{10}{B0}" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote"><one:Position x="36.0" y="14.40000057220459" z="0" /><one:Size width="127.5136947631836" height="42.90299224853515" /><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{7BD380D3-5552-0A93-0B6A-E09718E15C05}{1}{B0}" alignment="left"><one:T><![CDATA[<span style='font-weight:bold;
2text-decoration:underline;font-family:Calibri;font-size:11.0pt'>Bold</span><span
3style='font-family:Calibri;font-size:11.0pt'> </span><span style='font-family:
4Arial;font-size:13.5pt'>&#129408;</span><span style='font-family:Calibri;
5font-size:11.0pt'> </span><span style='font-style:italic;text-decoration:line-through;
6font-family:Calibri;font-size:11.0pt'>italic</span><span style='font-family:
7Calibri;font-size:11.0pt'> </span><span style='vertical-align:super;font-family:
8Calibri;font-size:11.0pt'>é</span><span style='font-family:Calibri;font-size:
911.0pt'> </span><span style='font-family:Calibri;font-size:11.0pt;color:#0C2238;
10background:yellow;mso-highlight:yellow'>color</span><span style='font-family:
11Calibri;font-size:11.0pt'> </span><span style='vertical-align:sub;font-family:
12Calibri;font-size:11.0pt'>東京</span><span style='font-family:Calibri;font-size:
1311.0pt'><br>
14End</span>]]></one:T></one:OE><one:OE author="snow" authorInitials="S" lastModifiedBy="snow" lastModifiedByInitials="S" creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-05T05:06:56.000Z" objectID="{7CB62824-A62F-4199-BB3E-239DD38A2EF3}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
15style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
16style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
17style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
18style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
19lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
\ No newline at end of file
corpus/formatted-insertion/native-paragraph/reverse/edit-before.xml created+22
......@@ -0,0 +1,22 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{1B7A8098-ED5A-422F-B4CC-AF462C16CB92}{1}{B0}" name="Bold 🦀 italic é color 東京" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:00:50.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="Rich author" lastModifiedBy="virtual" lastModifiedByInitials="V" lastModifiedTime="2026-09-08T05:00:50.000Z" objectID="{7CB62824-A62F-4199-BB3E-239DD38A2EF3}{10}{B0}"><one:Position x="36.0" y="14.40000057220459" z="0"/><one:Size width="127.5136947631836" height="43.3349609375"/><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:00:50.000Z" objectID="{7BD380D3-5552-0A93-0B6A-E09718E15C05}{1}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[<span style='font-weight:bold;
3text-decoration:underline;font-family:Calibri;font-size:11.0pt' lang=en-US>Bold</span><span
4style='font-family:Calibri;font-size:11.0pt' lang=en-US> </span><span
5style='font-family:Calibri;font-size:13.5pt' lang=en-US>&#129408;</span><span
6style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
7style='font-style:italic;text-decoration:line-through;font-family:Calibri;
8font-size:11.0pt' lang=x-none>italic</span><span style='font-family:Calibri;
9font-size:11.0pt' lang=x-none> </span><span style='vertical-align:super;
10font-family:Calibri;font-size:11.0pt' lang=x-none>é</span><span
11style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
12style='font-family:Calibri;font-size:11.0pt;color:#0C2238;background:yellow;
13mso-highlight:yellow' lang=x-none>color</span><span style='font-family:Calibri;
14font-size:11.0pt' lang=x-none> </span><span style='vertical-align:sub;
15font-family:SimSun;font-size:11.0pt' lang=x-none>東京</span><span
16style='font-family:Calibri;font-size:11.0pt' lang=en-US><br>
17End</span>]]></one:T></one:OE><one:OE author="snow" authorInitials="S" creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-08T05:00:50.000Z" objectID="{7CB62824-A62F-4199-BB3E-239DD38A2EF3}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
18style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
19style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
20style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
21style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
22lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/native-paragraph/reverse/edit-update.xml created+21
......@@ -0,0 +1,21 @@
1<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{1B7A8098-ED5A-422F-B4CC-AF462C16CB92}{1}{B0}"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" /><one:Outline author="Rich author" lastModifiedBy="virtual" lastModifiedByInitials="V" lastModifiedTime="2026-09-08T05:00:50.000Z" objectID="{7CB62824-A62F-4199-BB3E-239DD38A2EF3}{10}{B0}" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote"><one:Position x="36.0" y="14.40000057220459" z="0" /><one:Size width="127.5136947631836" height="43.3349609375" /><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:00:50.000Z" objectID="{7BD380D3-5552-0A93-0B6A-E09718E15C05}{1}{B0}" alignment="left" quickStyleIndex="0"><one:T>&lt;span style='font-weight:bold;
2text-decoration:underline;font-family:Calibri;font-size:11.0pt' lang=en-US&gt;Native Bold&lt;/span&gt;&lt;span
3style='font-family:Calibri;font-size:11.0pt' lang=en-US&gt; &lt;/span&gt;&lt;span
4style='font-family:Calibri;font-size:13.5pt' lang=en-US&gt;&amp;#129408;&lt;/span&gt;&lt;span
5style='font-family:Calibri;font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span
6style='font-style:italic;text-decoration:line-through;font-family:Calibri;
7font-size:11.0pt' lang=x-none&gt;italic&lt;/span&gt;&lt;span style='font-family:Calibri;
8font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span style='vertical-align:super;
9font-family:Calibri;font-size:11.0pt' lang=x-none&gt;é&lt;/span&gt;&lt;span
10style='font-family:Calibri;font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span
11style='font-family:Calibri;font-size:11.0pt;color:#0C2238;background:yellow;
12mso-highlight:yellow' lang=x-none&gt;color&lt;/span&gt;&lt;span style='font-family:Calibri;
13font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span style='vertical-align:sub;
14font-family:SimSun;font-size:11.0pt' lang=x-none&gt;東京&lt;/span&gt;&lt;span
15style='font-family:Calibri;font-size:11.0pt' lang=en-US&gt;&lt;br&gt;
16End&lt;/span&gt;</one:T></one:OE><one:OE author="snow" authorInitials="S" creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-08T05:00:50.000Z" objectID="{7CB62824-A62F-4199-BB3E-239DD38A2EF3}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
17style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
18style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
19style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
20style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
21lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
\ No newline at end of file
corpus/formatted-insertion/native-paragraph/reverse/notebook/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/native-paragraph/reverse/notebook/synthetic.one differ
corpus/formatted-insertion/native-paragraph/reverse/read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-E17E9EEE",
5 "cold": false,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/native-paragraph/reverse/read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{643EE131-1C57-48AE-A2E3-79A6724309F6}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T05:02:00.000Z" color="#B49EDE"><one:Section name="synthetic" ID="{F55CE73E-E1CC-04D6-18B6-DF16A6EFDE4A}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T05:02:00.000Z" color="#8AA8E4"><one:Page ID="{D91514B8-6807-47C7-9FD1-77875AD7C255}{1}{B0}" name="Native Bold 🦀 italic é color 東京" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:02:00.000Z" pageLevel="1"/></one:Section></one:Notebook>
corpus/formatted-insertion/native-paragraph/reverse/read/page-000.xml created+22
......@@ -0,0 +1,22 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{D91514B8-6807-47C7-9FD1-77875AD7C255}{1}{B0}" name="Native Bold 🦀 italic é color 東京" dateTime="2026-09-05T05:06:54.000Z" lastModifiedTime="2026-09-08T05:02:00.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline author="Rich author" lastModifiedBy="virtual" lastModifiedByInitials="V" lastModifiedTime="2026-09-08T05:00:50.000Z" objectID="{BED9BC04-2372-4471-9023-FB5CA54B2734}{10}{B0}"><one:Position x="36.0" y="14.40000057220459" z="0"/><one:Size width="127.5136947631836" height="57.63496017456055"/><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:00:50.000Z" objectID="{B9BC14F3-D00F-0F7B-2077-38566E2055C2}{1}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[<span style='font-weight:bold;
3text-decoration:underline;font-family:Calibri;font-size:11.0pt' lang=en-US>Native Bold</span><span
4style='font-family:Calibri;font-size:11.0pt' lang=en-US> </span><span
5style='font-family:Calibri;font-size:13.5pt' lang=en-US>&#129408;</span><span
6style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
7style='font-style:italic;text-decoration:line-through;font-family:Calibri;
8font-size:11.0pt' lang=x-none>italic</span><span style='font-family:Calibri;
9font-size:11.0pt' lang=x-none> </span><span style='vertical-align:super;
10font-family:Calibri;font-size:11.0pt' lang=x-none>é</span><span
11style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
12style='font-family:Calibri;font-size:11.0pt;color:#0C2238;background:yellow;
13mso-highlight:yellow' lang=x-none>color</span><span style='font-family:Calibri;
14font-size:11.0pt' lang=x-none> </span><span style='vertical-align:sub;
15font-family:SimSun;font-size:11.0pt' lang=x-none>東京</span><span
16style='font-family:Calibri;font-size:11.0pt' lang=en-US><br>
17End</span>]]></one:T></one:OE><one:OE author="snow" authorInitials="S" creationTime="2026-09-05T05:06:55.000Z" lastModifiedTime="2026-09-08T05:00:50.000Z" objectID="{BED9BC04-2372-4471-9023-FB5CA54B2734}{11}{B0}" alignment="left" quickStyleIndex="0" style="font-size:11.0pt;color:#1F4E79"><one:T><![CDATA[<span
18style='font-weight:bold;font-family:Calibri' lang=en-US>Fictitious: café, </span><span
19style='font-weight:bold;font-family:SimSun' lang=en-US>東京</span><span
20style='font-weight:bold;font-family:Calibri' lang=en-US>, </span><span
21style='font-weight:bold;font-family:Arial;direction:rtl;unicode-bidi:embed'
22lang=ar-SA>مرحبا</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/native-paragraph/reverse/read/payloads.json created+3
......@@ -0,0 +1,3 @@
1[
2
3]
\ No newline at end of file
corpus/formatted-insertion/native-paragraph/reverse/reverse-verification.json created+5
......@@ -0,0 +1,5 @@
1{
2 "paragraphs": 2,
3 "characters": 63,
4 "exact_native_character_styles_after_control": true
5}
corpus/formatted-insertion/native-paragraph/reverse/run.json created+19
......@@ -0,0 +1,19 @@
1{
2 "notebook": "/Users/clo/dev/one/evidence/m10/formatted-insertion-isolated/native-paragraph",
3 "expected_pages": 1,
4 "author": "evidence/m10/formatted-reverse-controlled.ps1",
5 "author_timeout_seconds": 600,
6 "inspect": false,
7 "collect_notebook": true,
8 "base": {
9 "file": "win7-office-base.qcow2",
10 "format": "qcow2",
11 "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346",
12 "virtual_size": 68719476736
13 },
14 "scripts": {
15 "author.ps1": "4362d0ba551eb00b2eca1c5563d76352469f85d3981155bf2682c159a03ddedb",
16 "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331",
17 "read.ps1": "086789e467779add0fc071ad8c524c2b02d3d0d609aea4a41f3128cadba371e8"
18 }
19}
corpus/formatted-insertion/native-paragraph/reverse/source.json created+8
......@@ -0,0 +1,8 @@
1[
2 {
3 "path": "synthetic.one",
4 "bytes": 18672,
5 "sha256": "202823512283be980b6a139adcf5f4f369d15f17d60ed7b23f9f2289513aa4e9",
6 "mtime_ns": 1788842844336692559
7 }
8]
corpus/formatted-insertion/native-paragraph/reverse/teardown.json created+1
......@@ -0,0 +1 @@
1{"absent": true}
corpus/formatted-insertion/outline/candidate/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/outline/candidate/synthetic.one differ
corpus/formatted-insertion/outline/cold/notebook/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/outline/cold/notebook/synthetic.one differ
corpus/formatted-insertion/outline/cold/read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-21E15CBC",
5 "cold": true,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/outline/cold/read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{FD9B23E7-27DD-42DA-B9EB-7D7C38E67AC6}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T04:53:07.000Z" color="#B49EDE"><one:Section name="synthetic" ID="{BF888060-5534-0692-36B6-7F1D9A763BAE}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T04:53:07.000Z" color="#8AA8E4"><one:Page ID="{66EE590B-EB2A-0597-072E-737ABAC4421C}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:52:56.000Z" pageLevel="1"/></one:Section></one:Notebook>
corpus/formatted-insertion/outline/cold/read/page-000.xml created+15
......@@ -0,0 +1,15 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{66EE590B-EB2A-0597-072E-737ABAC4421C}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:52:56.000Z" pageLevel="1" lang="en-US"><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline style="font-family:Calibri;font-size:11.0pt" author="Author" lastModifiedBy="Author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{BF888060-5534-0692-36B6-7F1D9A763BAE}{23}{B0}"><one:Position x="36.0" y="36.0" z="0"/><one:Size width="101.66748046875" height="13.4277172088623"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{BF888060-5534-0692-36B6-7F1D9A763BAE}{24}{B0}" alignment="left"><one:T><![CDATA[Original]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="Rich author" lastModifiedBy="Rich author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{0ECA1708-B745-031C-291B-F034D71F2A92}{1}{B0}"><one:Position x="72.0" y="144.0" z="1"/><one:Size width="468.0" height="28.60299110412598"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{0ECA1708-B745-031C-291B-F034D71F2A92}{3}{B0}" alignment="left"><one:T><![CDATA[<span style='font-weight:bold;
3text-decoration:underline;font-family:Calibri;font-size:11.0pt'>Bold</span><span
4style='font-family:Calibri;font-size:11.0pt'> </span><span style='font-family:
5Arial;font-size:13.5pt'>&#129408;</span><span style='font-family:Calibri;
6font-size:11.0pt'> </span><span style='font-style:italic;text-decoration:line-through;
7font-family:Calibri;font-size:11.0pt'>italic</span><span style='font-family:
8Calibri;font-size:11.0pt'> </span><span style='vertical-align:super;font-family:
9Calibri;font-size:11.0pt'>é</span><span style='font-family:Calibri;font-size:
1011.0pt'> </span><span style='font-family:Calibri;font-size:11.0pt;color:#0C2238;
11background:yellow;mso-highlight:yellow'>color</span><span style='font-family:
12Calibri;font-size:11.0pt'> </span><span style='vertical-align:sub;font-family:
13Calibri;font-size:11.0pt'>東京</span><span style='font-family:Calibri;font-size:
1411.0pt'><br>
15End</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/outline/cold/read/payloads.json created+3
......@@ -0,0 +1,3 @@
1[
2
3]
\ No newline at end of file
corpus/formatted-insertion/outline/cold/run.json created+18
......@@ -0,0 +1,18 @@
1{
2 "notebook": "/Users/clo/dev/one/evidence/m10/formatted-insertion-isolated/outline",
3 "expected_pages": 1,
4 "author": null,
5 "author_timeout_seconds": 600,
6 "inspect": false,
7 "collect_notebook": true,
8 "base": {
9 "file": "win7-office-base.qcow2",
10 "format": "qcow2",
11 "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346",
12 "virtual_size": 68719476736
13 },
14 "scripts": {
15 "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331",
16 "read.ps1": "086789e467779add0fc071ad8c524c2b02d3d0d609aea4a41f3128cadba371e8"
17 }
18}
corpus/formatted-insertion/outline/cold/source.json created+8
......@@ -0,0 +1,8 @@
1[
2 {
3 "path": "synthetic.one",
4 "bytes": 7776,
5 "sha256": "76f6b743caa9dc2b5ab342d6e6a742125ecbcd0ca2372062b42acbd08b5ebb4c",
6 "mtime_ns": 1788842844332249915
7 }
8]
corpus/formatted-insertion/outline/cold/teardown.json created+1
......@@ -0,0 +1 @@
1{"absent": true}
corpus/formatted-insertion/outline/reverse/control-before.xml created+15
......@@ -0,0 +1,15 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{1ADF0406-C7FD-03BA-0A13-462805F7226D}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:04:19.000Z" pageLevel="1" lang="en-US"><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline style="font-family:Calibri;font-size:11.0pt" author="Author" lastModifiedBy="Author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{C3B9DD6D-79E3-00BF-3B8B-4A4F25455BDF}{23}{B0}"><one:Position x="36.0" y="36.0" z="0"/><one:Size width="101.66748046875" height="13.4277172088623"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{C3B9DD6D-79E3-00BF-3B8B-4A4F25455BDF}{24}{B0}" alignment="left"><one:T><![CDATA[Original]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="Rich author" lastModifiedBy="Rich author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{72FB4A05-9B92-0531-2426-C566682C4AE3}{1}{B0}"><one:Position x="72.0" y="144.0" z="1"/><one:Size width="468.0" height="28.60299110412598"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{72FB4A05-9B92-0531-2426-C566682C4AE3}{3}{B0}" alignment="left"><one:T><![CDATA[<span style='font-weight:bold;
3text-decoration:underline;font-family:Calibri;font-size:11.0pt'>Bold</span><span
4style='font-family:Calibri;font-size:11.0pt'> </span><span style='font-family:
5Arial;font-size:13.5pt'>&#129408;</span><span style='font-family:Calibri;
6font-size:11.0pt'> </span><span style='font-style:italic;text-decoration:line-through;
7font-family:Calibri;font-size:11.0pt'>italic</span><span style='font-family:
8Calibri;font-size:11.0pt'> </span><span style='vertical-align:super;font-family:
9Calibri;font-size:11.0pt'>é</span><span style='font-family:Calibri;font-size:
1011.0pt'> </span><span style='font-family:Calibri;font-size:11.0pt;color:#0C2238;
11background:yellow;mso-highlight:yellow'>color</span><span style='font-family:
12Calibri;font-size:11.0pt'> </span><span style='vertical-align:sub;font-family:
13Calibri;font-size:11.0pt'>東京</span><span style='font-family:Calibri;font-size:
1411.0pt'><br>
15End</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/outline/reverse/control-update.xml created+14
......@@ -0,0 +1,14 @@
1<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{1ADF0406-C7FD-03BA-0A13-462805F7226D}{1}{B0}"><one:Outline author="Rich author" lastModifiedBy="Rich author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{72FB4A05-9B92-0531-2426-C566682C4AE3}{1}{B0}" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote"><one:Position x="72.0" y="144.0" z="1" /><one:Size width="468.0" height="28.60299110412598" /><one:Indents><one:Indent level="0" indent="0.0" /></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{72FB4A05-9B92-0531-2426-C566682C4AE3}{3}{B0}" alignment="left"><one:T><![CDATA[<span style='font-weight:bold;
2text-decoration:underline;font-family:Calibri;font-size:11.0pt'>Bold</span><span
3style='font-family:Calibri;font-size:11.0pt'> </span><span style='font-family:
4Arial;font-size:13.5pt'>&#129408;</span><span style='font-family:Calibri;
5font-size:11.0pt'> </span><span style='font-style:italic;text-decoration:line-through;
6font-family:Calibri;font-size:11.0pt'>italic</span><span style='font-family:
7Calibri;font-size:11.0pt'> </span><span style='vertical-align:super;font-family:
8Calibri;font-size:11.0pt'>é</span><span style='font-family:Calibri;font-size:
911.0pt'> </span><span style='font-family:Calibri;font-size:11.0pt;color:#0C2238;
10background:yellow;mso-highlight:yellow'>color</span><span style='font-family:
11Calibri;font-size:11.0pt'> </span><span style='vertical-align:sub;font-family:
12Calibri;font-size:11.0pt'>東京</span><span style='font-family:Calibri;font-size:
1311.0pt'><br>
14End</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
\ No newline at end of file
corpus/formatted-insertion/outline/reverse/edit-before.xml created+17
......@@ -0,0 +1,17 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{1ADF0406-C7FD-03BA-0A13-462805F7226D}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:04:19.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline style="font-family:Calibri;font-size:11.0pt" author="Author" lastModifiedBy="Author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{C3B9DD6D-79E3-00BF-3B8B-4A4F25455BDF}{23}{B0}"><one:Position x="36.0" y="36.0" z="1"/><one:Size width="101.66748046875" height="13.4277172088623"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{C3B9DD6D-79E3-00BF-3B8B-4A4F25455BDF}{24}{B0}" alignment="left"><one:T><![CDATA[Original]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="Rich author" lastModifiedBy="virtual" lastModifiedByInitials="V" lastModifiedTime="2026-09-08T05:04:27.000Z" objectID="{72FB4A05-9B92-0531-2426-C566682C4AE3}{1}{B0}"><one:Position x="72.0" y="144.0" z="0"/><one:Size width="468.0" height="29.90723991394043"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:04:27.000Z" objectID="{72FB4A05-9B92-0531-2426-C566682C4AE3}{3}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[<span style='font-weight:bold;
3text-decoration:underline;font-family:Calibri;font-size:11.0pt' lang=en-US>Bold</span><span
4style='font-family:Calibri;font-size:11.0pt' lang=en-US> </span><span
5style='font-family:Calibri;font-size:13.5pt' lang=en-US>&#129408;</span><span
6style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
7style='font-style:italic;text-decoration:line-through;font-family:Calibri;
8font-size:11.0pt' lang=x-none>italic</span><span style='font-family:Calibri;
9font-size:11.0pt' lang=x-none> </span><span style='vertical-align:super;
10font-family:Calibri;font-size:11.0pt' lang=x-none>é</span><span
11style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
12style='font-family:Calibri;font-size:11.0pt;color:#0C2238;background:yellow;
13mso-highlight:yellow' lang=x-none>color</span><span style='font-family:Calibri;
14font-size:11.0pt' lang=x-none> </span><span style='vertical-align:sub;
15font-family:SimSun;font-size:11.0pt' lang=x-none>東京</span><span
16style='font-family:Calibri;font-size:11.0pt' lang=en-US><br>
17End</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/outline/reverse/edit-update.xml created+16
......@@ -0,0 +1,16 @@
1<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{1ADF0406-C7FD-03BA-0A13-462805F7226D}{1}{B0}"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" /><one:Outline author="Rich author" lastModifiedBy="virtual" lastModifiedByInitials="V" lastModifiedTime="2026-09-08T05:04:27.000Z" objectID="{72FB4A05-9B92-0531-2426-C566682C4AE3}{1}{B0}" xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote"><one:Position x="72.0" y="144.0" z="0" /><one:Size width="468.0" height="29.90723991394043" /><one:Indents><one:Indent level="0" indent="0.0" /></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:04:27.000Z" objectID="{72FB4A05-9B92-0531-2426-C566682C4AE3}{3}{B0}" alignment="left" quickStyleIndex="0"><one:T>&lt;span style='font-weight:bold;
2text-decoration:underline;font-family:Calibri;font-size:11.0pt' lang=en-US&gt;Native Bold&lt;/span&gt;&lt;span
3style='font-family:Calibri;font-size:11.0pt' lang=en-US&gt; &lt;/span&gt;&lt;span
4style='font-family:Calibri;font-size:13.5pt' lang=en-US&gt;&amp;#129408;&lt;/span&gt;&lt;span
5style='font-family:Calibri;font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span
6style='font-style:italic;text-decoration:line-through;font-family:Calibri;
7font-size:11.0pt' lang=x-none&gt;italic&lt;/span&gt;&lt;span style='font-family:Calibri;
8font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span style='vertical-align:super;
9font-family:Calibri;font-size:11.0pt' lang=x-none&gt;é&lt;/span&gt;&lt;span
10style='font-family:Calibri;font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span
11style='font-family:Calibri;font-size:11.0pt;color:#0C2238;background:yellow;
12mso-highlight:yellow' lang=x-none&gt;color&lt;/span&gt;&lt;span style='font-family:Calibri;
13font-size:11.0pt' lang=x-none&gt; &lt;/span&gt;&lt;span style='vertical-align:sub;
14font-family:SimSun;font-size:11.0pt' lang=x-none&gt;東京&lt;/span&gt;&lt;span
15style='font-family:Calibri;font-size:11.0pt' lang=en-US&gt;&lt;br&gt;
16End&lt;/span&gt;</one:T></one:OE></one:OEChildren></one:Outline></one:Page>
\ No newline at end of file
corpus/formatted-insertion/outline/reverse/notebook/synthetic.one created
Binary files /dev/null and b/corpus/formatted-insertion/outline/reverse/notebook/synthetic.one differ
corpus/formatted-insertion/outline/reverse/read/environment.json created+7
......@@ -0,0 +1,7 @@
1{
2 "powershell": "5.1.14409.1005",
3 "schema": "xs2010",
4 "hostname": "ONE-M6-129C20F7",
5 "cold": false,
6 "onenote": "14.0.4763.1000"
7}
corpus/formatted-insertion/outline/reverse/read/hierarchy.xml created+2
......@@ -0,0 +1,2 @@
1<?xml version="1.0"?>
2<one:Notebook xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" name="notebook" nickname="notebook" ID="{ACF9AA90-C944-4381-97F0-8AAE2DE5FAEF}{1}{B0}" path="C:\one-tests\runs\capture\notebook" lastModifiedTime="2026-09-08T05:04:40.000Z" color="#B49EDE"><one:Section name="synthetic" ID="{D32B2090-2B9E-07F2-3796-17BEC4F45F8E}{1}{B0}" path="C:\one-tests\runs\capture\notebook\synthetic.one" lastModifiedTime="2026-09-08T05:04:40.000Z" color="#8AA8E4"><one:Page ID="{0A4DF9FB-9580-04F7-060E-1BD9E446263C}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:04:40.000Z" pageLevel="1"/></one:Section></one:Notebook>
corpus/formatted-insertion/outline/reverse/read/page-000.xml created+17
......@@ -0,0 +1,17 @@
1<?xml version="1.0"?>
2<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="{0A4DF9FB-9580-04F7-060E-1BD9E446263C}{1}{B0}" name="Original" dateTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:04:40.000Z" pageLevel="1" lang="en-US"><one:QuickStyleDef index="0" name="p" fontColor="automatic" highlightColor="automatic" font="Calibri" fontSize="11.0" spaceBefore="0.0" spaceAfter="0.0"/><one:PageSettings RTL="false" color="automatic"><one:PageSize><one:Automatic/></one:PageSize><one:RuleLines visible="false"/></one:PageSettings><one:Outline style="font-family:Calibri;font-size:11.0pt" author="Author" lastModifiedBy="Author" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{D32B2090-2B9E-07F2-3796-17BEC4F45F8E}{23}{B0}"><one:Position x="36.0" y="36.0" z="1"/><one:Size width="101.66748046875" height="13.4277172088623"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T04:47:24.000Z" objectID="{D32B2090-2B9E-07F2-3796-17BEC4F45F8E}{24}{B0}" alignment="left"><one:T><![CDATA[Original]]></one:T></one:OE></one:OEChildren></one:Outline><one:Outline author="Rich author" lastModifiedBy="virtual" lastModifiedByInitials="V" lastModifiedTime="2026-09-08T05:04:27.000Z" objectID="{6269B7F8-C9EF-027C-283B-9897899D4EB2}{1}{B0}"><one:Position x="72.0" y="144.0" z="0"/><one:Size width="468.0" height="29.90723991394043"/><one:Indents><one:Indent level="0" indent="0.0"/></one:Indents><one:OEChildren><one:OE creationTime="2026-09-08T04:47:24.000Z" lastModifiedTime="2026-09-08T05:04:27.000Z" objectID="{6269B7F8-C9EF-027C-283B-9897899D4EB2}{3}{B0}" alignment="left" quickStyleIndex="0"><one:T><![CDATA[<span style='font-weight:bold;
3text-decoration:underline;font-family:Calibri;font-size:11.0pt' lang=en-US>Native Bold</span><span
4style='font-family:Calibri;font-size:11.0pt' lang=en-US> </span><span
5style='font-family:Calibri;font-size:13.5pt' lang=en-US>&#129408;</span><span
6style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
7style='font-style:italic;text-decoration:line-through;font-family:Calibri;
8font-size:11.0pt' lang=x-none>italic</span><span style='font-family:Calibri;
9font-size:11.0pt' lang=x-none> </span><span style='vertical-align:super;
10font-family:Calibri;font-size:11.0pt' lang=x-none>é</span><span
11style='font-family:Calibri;font-size:11.0pt' lang=x-none> </span><span
12style='font-family:Calibri;font-size:11.0pt;color:#0C2238;background:yellow;
13mso-highlight:yellow' lang=x-none>color</span><span style='font-family:Calibri;
14font-size:11.0pt' lang=x-none> </span><span style='vertical-align:sub;
15font-family:SimSun;font-size:11.0pt' lang=x-none>東京</span><span
16style='font-family:Calibri;font-size:11.0pt' lang=en-US><br>
17End</span>]]></one:T></one:OE></one:OEChildren></one:Outline></one:Page>
corpus/formatted-insertion/outline/reverse/read/payloads.json created+3
......@@ -0,0 +1,3 @@
1[
2
3]
\ No newline at end of file
corpus/formatted-insertion/outline/reverse/reverse-verification.json created+5
......@@ -0,0 +1,5 @@
1{
2 "paragraphs": 2,
3 "characters": 44,
4 "exact_native_character_styles_after_control": true
5}
corpus/formatted-insertion/outline/reverse/run.json created+19
......@@ -0,0 +1,19 @@
1{
2 "notebook": "/Users/clo/dev/one/evidence/m10/formatted-insertion-isolated/outline",
3 "expected_pages": 1,
4 "author": "evidence/m10/formatted-reverse-controlled.ps1",
5 "author_timeout_seconds": 600,
6 "inspect": false,
7 "collect_notebook": true,
8 "base": {
9 "file": "win7-office-base.qcow2",
10 "format": "qcow2",
11 "sha256": "a1a4f8fab782ee14885ff801ca2f6347c208fdcfc3513637096f314315c89346",
12 "virtual_size": 68719476736
13 },
14 "scripts": {
15 "author.ps1": "4362d0ba551eb00b2eca1c5563d76352469f85d3981155bf2682c159a03ddedb",
16 "cold.ps1": "c177fc72ae6c2634d186f5671a880de20b09f9716532c37c69cb13aa15c7e331",
17 "read.ps1": "086789e467779add0fc071ad8c524c2b02d3d0d609aea4a41f3128cadba371e8"
18 }
19}
corpus/formatted-insertion/outline/reverse/source.json created+8
......@@ -0,0 +1,8 @@
1[
2 {
3 "path": "synthetic.one",
4 "bytes": 7776,
5 "sha256": "76f6b743caa9dc2b5ab342d6e6a742125ecbcd0ca2372062b42acbd08b5ebb4c",
6 "mtime_ns": 1788842844332249915
7 }
8]
corpus/formatted-insertion/outline/reverse/teardown.json created+1
......@@ -0,0 +1 @@
1{"absent": true}
crates/onestore-offline/README.md+4-6
......@@ -26,7 +26,8 @@ assert_eq!(pending.last().map(|edit| edit.id), local_id);
2626```
2727
2828`insert` accepts the core library's `Insertion` value and durably retains its
29object identities. Keep that value across retries; its `text_object()` identifies
29intent identities. `Insertion::with_formatting` queues text and
30its styles as one intent and one publication. Keep that value across retries; its `text_object()` identifies
3031the new text for subsequent offline edits. Pending entries expose
3132`Operation::Text(TextEdit)`, `Operation::Insert(Insertion)` or
3233`Operation::Format(FormatEdit)` through their
......@@ -47,12 +48,9 @@ use onestore::{ExGuid, Insertion, TextAttribute};
4748use onestore_offline::{EditStatus, Replica};
4849# fn add_outline(cache: &Replica, space: ExGuid, page: ExGuid)
4950# -> Result<(), Box<dyn std::error::Error>> {
50let outline = Insertion::outline(page, 144.0, 216.0, "Offline outline", "Author")?;
51let outline = Insertion::outline(page, 144.0, 216.0, "Offline outline", "Author")?
52 .with_formatting(0..7, &[TextAttribute::Bold(true)])?;
5153let id = cache.insert(&cache.snapshot()?, space, &outline)?;
52cache.format(
53 &cache.snapshot()?, space, outline.text_object(), 0..7,
54 &[TextAttribute::Bold(true)],
55)?;
5654if let Some(id) = id {
5755 // A running worker may already have advanced this state.
5856 match cache.status(id)? {
crates/onestore-offline/examples/smb_offline_client.rs+8-1
......@@ -301,7 +301,14 @@ fn queue_document(
301301 &text,
302302 "Offline document writer",
303303 )?
304 };
304 }
305 .with_formatting(
306 0..u32::try_from(text.encode_utf16().count())?,
307 &[
308 TextAttribute::FontSize(13.5),
309 TextAttribute::Color(Some([0x44, 0x55, 0x66])),
310 ],
311 )?;
305312 let parent = if operation.is_multiple_of(2) {
306313 insertion.object()
307314 } else {
crates/onestore-offline/tests/cache.rs+14-1
......@@ -609,7 +609,9 @@ fn twelve_local_clients_preserve_inserted_identities_and_dependent_edits() {
609609 "Author",
610610 )
611611 .unwrap()
612 };
612 }
613 .with_formatting(0..6, &[onestore::TextAttribute::Italic(true)])
614 .unwrap();
613615 loop {
614616 assert!(
615617 Instant::now() < deadline,
......@@ -691,6 +693,17 @@ fn twelve_local_clients_preserve_inserted_identities_and_dependent_edits() {
691693 format!("Edited Paragraph {client}:{sequence}")
692694 };
693695 assert!(matches!(&v.nodes[id].kind,Kind::RichText{text,..} if *text==wanted));
696 let runs = v.text_runs(*id).unwrap();
697 assert_eq!(runs[0].format.italic, Some(true));
698 assert_eq!(
699 runs[0].text,
700 if sequence == 0 {
701 "Client"
702 } else {
703 "Edited Paragr"
704 }
705 );
706 assert!(runs[1..].iter().all(|run| run.format.italic != Some(true)));
694707 }
695708 }
696709}
crates/onestore-offline/tests/sync.rs+35-5
......@@ -1736,8 +1736,10 @@ fn offline_insertions_survive_reopen_rebase_and_dependent_text_edits() {
17361736 let doc = Document::parse(&index).unwrap();
17371737 let (_, page) = doc.pages().unwrap()[0];
17381738 let cache = Replica::create(&path, &source).unwrap();
1739 let outline =
1740 Insertion::outline(page, 72.0, 144.0, "Offline outline", "Offline author").unwrap();
1739 let outline = Insertion::outline(page, 72.0, 144.0, "Offline outline", "Offline author")
1740 .unwrap()
1741 .with_formatting(0..7, &[onestore::TextAttribute::Italic(true)])
1742 .unwrap();
17411743 let first = cache.insert(&source, sid, &outline).unwrap().unwrap();
17421744 let snapshot = cache.snapshot().unwrap();
17431745 let paragraph = Insertion::paragraph(
......@@ -1746,6 +1748,8 @@ fn offline_insertions_survive_reopen_rebase_and_dependent_text_edits() {
17461748 "Offline paragraph 🦀",
17471749 "Offline author",
17481750 )
1751 .unwrap()
1752 .with_formatting(8..17, &[onestore::TextAttribute::Bold(true)])
17491753 .unwrap();
17501754 let second = cache.insert(&snapshot, sid, &paragraph).unwrap().unwrap();
17511755 let third = cache
......@@ -1786,6 +1790,12 @@ fn offline_insertions_survive_reopen_rebase_and_dependent_text_edits() {
17861790 ] {
17871791 assert!(matches!(&v.nodes[&id].kind,Kind::RichText{text,..} if text==wanted));
17881792 }
1793 let outline_runs = v.text_runs(outline.text_object()).unwrap();
1794 assert_eq!(outline_runs[0].text, "Offline");
1795 assert_eq!(outline_runs[0].format.italic, Some(true));
1796 let runs = v.text_runs(paragraph.text_object()).unwrap();
1797 assert_eq!(runs[1].text, "paragraph");
1798 assert_eq!(runs[1].format.bold, Some(true));
17891799 assert_eq!(
17901800 v.nodes[&outline.object()].children.last(),
17911801 Some(&paragraph.object())
......@@ -1811,8 +1821,12 @@ fn uncertain_insertions_reconcile_the_original_revision_without_duplicate_object
18111821 let doc = Document::parse(&index).unwrap();
18121822 let (sid, page) = doc.pages().unwrap()[0];
18131823 let cache = Replica::create(&path, &source).unwrap();
1814 let insertion =
1815 Insertion::outline(page, 144.0, 144.0, "Uncertain insertion", "Author").unwrap();
1824 let insertion = Insertion::outline(page, 144.0, 144.0, "Uncertain insertion", "Author")
1825 .unwrap()
1826 .with_formatting(0..9, &[onestore::TextAttribute::Bold(true)])
1827 .unwrap()
1828 .with_formatting(10..19, &[onestore::TextAttribute::Italic(true)])
1829 .unwrap();
18161830 let id = cache.insert(&source, sid, &insertion).unwrap().unwrap();
18171831 let local = cache.snapshot().unwrap();
18181832 let mut server = Server::new(&source);
......@@ -1860,6 +1874,15 @@ fn uncertain_insertions_reconcile_the_original_revision_without_duplicate_object
18601874 let v = &s.revisions[&s.contexts[&ExGuid::default()]];
18611875 assert_eq!(v.nodes.values().filter(|node|matches!(&node.kind,Kind::RichText{text,..} if text=="Uncertain insertion")).count(),1);
18621876 assert!(v.nodes.contains_key(&insertion.object()));
1877 let runs = v.text_runs(insertion.text_object()).unwrap();
1878 assert_eq!(runs.len(), 3);
1879 assert_eq!(runs[0].text, "Uncertain");
1880 assert_eq!(runs[0].format.bold, Some(true));
1881 assert_eq!(runs[1].text, " ");
1882 assert_ne!(runs[1].format.bold, Some(true));
1883 assert_ne!(runs[1].format.italic, Some(true));
1884 assert_eq!(runs[2].text, "insertion");
1885 assert_eq!(runs[2].format.italic, Some(true));
18631886 assert!(cache.pending().unwrap().is_empty());
18641887 }
18651888 }
......@@ -2668,7 +2691,9 @@ fn reviewed_insertion_placements_preserve_identity_and_dependent_operations() {
26682691 Insertion::outline(page, 144.0, 144.0, "Offline", "Author").unwrap()
26692692 } else {
26702693 Insertion::paragraph(parent, Some(anchor.object()), "Offline", "Author").unwrap()
2671 };
2694 }
2695 .with_formatting(0..7, &[A::Italic(true)])
2696 .unwrap();
26722697 let cache = Replica::create(&path, &source).unwrap();
26732698 let first = cache.insert(&source, sid, &insertion).unwrap().unwrap();
26742699 let second = cache
......@@ -2754,6 +2779,10 @@ fn reviewed_insertion_placements_preserve_identity_and_dependent_operations() {
27542779 };
27552780 assert_eq!(rebased.object(), insertion.object());
27562781 assert_eq!(rebased.text_object(), insertion.text_object());
2782 assert_eq!(
2783 serde_json::to_value(&rebased).unwrap()["formats"],
2784 serde_json::to_value(&insertion).unwrap()["formats"]
2785 );
27572786 assert_eq!(cache.status(first).unwrap(), Some(EditStatus::Pending));
27582787 drop(cache);
27592788 let cache = Replica::open(&path).unwrap();
......@@ -2775,6 +2804,7 @@ fn reviewed_insertion_placements_preserve_identity_and_dependent_operations() {
27752804 "Offline 🦀"
27762805 );
27772806 assert!(runs.iter().all(|r| r.format.bold == Some(true)));
2807 assert!(runs.iter().all(|r| r.format.italic == Some(true)));
27782808 if outline_case {
27792809 assert_eq!(
27802810 (
crates/onestore/README.md+3-1
......@@ -71,7 +71,9 @@ passwords, unsupported protection profiles and work-limit failures remain distin
7171The source stays encrypted; protected writes are rejected.
7272Insertions update child references, reference counts, modification times and automatic
7373titles atomically. Paragraphs can be nested or inserted into table cells; outline
74coordinates use points. Retain the `Insertion` value for rebasing: creating another
74coordinates use points. `Insertion::with_formatting` includes nonoverlapping UTF-16
75spans in that same publication; gaps keep the default insertion style. Empty text
76accepts one `0..0` span for subsequent typing. Retain the `Insertion` value for rebasing: creating another
7577value creates different object identities. Duplicate insertion identities require
7678reconciliation. Formatting accepts explicit attributes, preserves inherited values,
7779and gives retired immutable styles zero current references while retaining history.
crates/onestore/src/formatting.rs+28-20
......@@ -91,26 +91,7 @@ pub(crate) fn format_text(
9191 "Select a text range and at least one formatting attribute",
9292 ));
9393 }
94 let mut values = Vec::new();
95 let mut seen = BTreeSet::new();
96 for attribute in attributes {
97 let (id, value) = attribute.property()?;
98 if !seen.insert(id & 0x7fffffff) {
99 return Err(invalid("Specify each formatting attribute once"));
100 }
101 values.push((id, value));
102 }
103 if attributes.contains(&TextAttribute::Superscript(true))
104 && attributes.contains(&TextAttribute::Subscript(true))
105 {
106 return Err(invalid("Text cannot be both superscript and subscript"));
107 }
108 // Setting either script position clears its mutually exclusive counterpart.
109 for (set, opposite) in [(0x88001c08, 0x08001c09), (0x88001c09, 0x08001c08)] {
110 if values.iter().any(|(id, _)| *id == set) && !seen.contains(&opposite) {
111 values.push((opposite, Vec::new()));
112 }
113 }
94 let values = attribute_values(attributes)?;
11495 let store = Store::parse(source)?;
11596 let index = RevisionIndex::parse(&store)?;
11697 index.validate_current()?;
......@@ -286,3 +267,30 @@ pub(crate) fn format_text(
286267 Ok(changed)
287268 })
288269}
270
271pub(crate) fn attribute_values(attributes: &[TextAttribute]) -> Result<Vec<(u32, Vec<u8>)>, Error> {
272 if attributes.is_empty() {
273 return Err(invalid("Choose at least one formatting attribute"));
274 }
275 let mut values = Vec::new();
276 let mut seen = BTreeSet::new();
277 for attribute in attributes {
278 let (id, value) = attribute.property()?;
279 if !seen.insert(id & 0x7fffffff) {
280 return Err(invalid("Specify each formatting attribute once"));
281 }
282 values.push((id, value));
283 }
284 if attributes.contains(&TextAttribute::Superscript(true))
285 && attributes.contains(&TextAttribute::Subscript(true))
286 {
287 return Err(invalid("Text cannot be both superscript and subscript"));
288 }
289 // Setting either script position clears its mutually exclusive counterpart.
290 for (set, opposite) in [(0x88001c08, 0x08001c09), (0x88001c09, 0x08001c08)] {
291 if values.iter().any(|(id, _)| *id == set) && !seen.contains(&opposite) {
292 values.push((opposite, Vec::new()));
293 }
294 }
295 Ok(values)
296}
crates/onestore/src/insertion.rs+110
......@@ -8,6 +8,7 @@ use crate::{
88use serde::{Deserialize, Serialize};
99use std::{
1010 collections::{BTreeMap, BTreeSet},
11 ops::Range,
1112 sync::Arc,
1213};
1314
......@@ -22,6 +23,14 @@ enum Placement {
2223 Outline { x: f32, y: f32 },
2324}
2425
26#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
27#[serde(deny_unknown_fields)]
28struct FormatSpan {
29 guid: [u8; 16],
30 range: Range<u32>,
31 attributes: Vec<crate::TextAttribute>,
32}
33
2534/// A paragraph or outline insertion with stable object identities and creation time.
2635/// Retain this intent across rebases; constructing another intent allocates different identities.
2736#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
......@@ -33,9 +42,29 @@ pub struct Insertion {
3342 text: String,
3443 author: String,
3544 created: u32,
45 #[serde(default, skip_serializing_if = "Vec::is_empty")]
46 formats: Vec<FormatSpan>,
3647}
3748
3849impl Insertion {
50 /// Adds a nonoverlapping UTF-16 formatting span, retaining all existing identities.
51 /// Gaps use the ordinary insertion style; only empty text accepts a zero-length span.
52 pub fn with_formatting(
53 &self,
54 range: Range<u32>,
55 attributes: &[crate::TextAttribute],
56 ) -> Result<Self, Error> {
57 let mut intent = self.clone();
58 intent.formats.push(FormatSpan {
59 guid: fresh_guid()?,
60 range,
61 attributes: attributes.to_vec(),
62 });
63 intent.formats.sort_by_key(|span| span.range.start);
64 intent.validate()?;
65 Ok(intent)
66 }
67
3968 /// Inserts before a direct child, or appends when `before` is None.
4069 /// The parent must be an editable outline, paragraph, outline group or table cell.
4170 /// Carriage returns represent soft line breaks; line feeds and embedded-field markers are rejected.
......@@ -89,6 +118,7 @@ impl Insertion {
89118 text: text.to_owned(),
90119 author: author.to_owned(),
91120 created: current_timestamps()?.0,
121 formats: Vec::new(),
92122 };
93123 intent.validate()?;
94124 Ok(intent)
......@@ -125,6 +155,37 @@ impl Insertion {
125155 {
126156 return Err(invalid("Outline coordinates must be finite"));
127157 }
158 if !self.formats.is_empty() {
159 let units: Vec<_> = self.text.encode_utf16().collect();
160 let length = u32::try_from(units.len())
161 .map_err(|_| invalid("Text exceeds UTF-16 offset range"))?;
162 let mut identities = BTreeSet::from([self.guid]);
163 let mut end = 0;
164 for span in &self.formats {
165 if span.guid == [0; 16] || !identities.insert(span.guid) {
166 return Err(invalid("Formatting identities must be distinct"));
167 }
168 if span.range.start > span.range.end
169 || span.range.end > length
170 || span.range.start < end
171 || (span.range.is_empty() && (!units.is_empty() || self.formats.len() != 1))
172 {
173 return Err(invalid(
174 "Formatting spans must be nonoverlapping ranges within the new text",
175 ));
176 }
177 for boundary in [span.range.start, span.range.end] {
178 if boundary > 0
179 && boundary < length
180 && (0xd800..=0xdbff).contains(&units[boundary as usize - 1])
181 {
182 return Err(invalid("Formatting boundary splits a surrogate pair"));
183 }
184 }
185 crate::formatting::attribute_values(&span.attributes)?;
186 end = span.range.end;
187 }
188 }
128189 Ok(())
129190 }
130191
......@@ -243,6 +304,55 @@ impl Insertion {
243304 },
244305 );
245306 }
307 if !self.formats.is_empty() {
308 let default = ExGuid {
309 guid: self.guid,
310 n: 5,
311 };
312 let mut segments = Vec::new();
313 let mut end = 0;
314 for span in &self.formats {
315 if end < span.range.start {
316 segments.push((span.range.start, default));
317 }
318 let id = ExGuid {
319 guid: span.guid,
320 n: 1,
321 };
322 let mut style = PropertyObject {
323 jcid: 0x12004d,
324 bytes: properties(&default_text_style())?,
325 global_ids: Arc::new(BTreeMap::from([(0, span.guid)])),
326 };
327 let values = crate::formatting::attribute_values(&span.attributes)?;
328 style.set(
329 &values
330 .iter()
331 .map(|(id, value)| (*id, value.as_slice()))
332 .collect::<Vec<_>>(),
333 )?;
334 new.insert(id, style);
335 segments.push((span.range.end, id));
336 end = span.range.end;
337 }
338 let length = u32::try_from(self.text.encode_utf16().count())
339 .map_err(|_| invalid("Text exceeds UTF-16 offset range"))?;
340 if end < length {
341 segments.push((length, default));
342 }
343 if !segments.iter().any(|(_, id)| *id == default) {
344 new.remove(&default);
345 }
346 let target = new.get_mut(&self.text_object()).unwrap();
347 let mut references = Vec::new();
348 let mut ends = Vec::new();
349 for (end, id) in segments {
350 references.extend_from_slice(&target.reference(id)?);
351 ends.extend_from_slice(&end.to_le_bytes());
352 }
353 ends.truncate(ends.len() - 4);
354 target.set(&[(0x24001e13, &references), (0x1c001e12, &ends)])?;
355 }
246356 if let Placement::Outline { x, y } = self.placement {
247357 new.insert(
248358 self.object(),
crates/onestore/tests/insertion.rs+354-4
......@@ -6,7 +6,7 @@ mod current;
66mod disk;
77
88use onestore::{
9 ExGuid, Insertion, PreparedEdit, RevisionIndex, Store,
9 ExGuid, Insertion, PreparedEdit, RevisionIndex, Store, TextAttribute as A,
1010 document::{Document, Kind},
1111};
1212
......@@ -28,6 +28,335 @@ fn targets(source: &[u8]) -> (ExGuid, ExGuid, ExGuid, ExGuid, ExGuid) {
2828 (sid, page, outline, paragraph, text)
2929}
3030
31#[test]
32fn atomic_formatted_insertions_match_a_character_model_and_preserve_history() {
33 use serde_json::json;
34 let source = onestore::create_section("rich.one", "Original", "Author").unwrap();
35 let (sid, page, outline, _, _) = targets(&source);
36 let text = "ab🦀 e\u{301} 東京\rEnd\t!";
37 let plain = Insertion::paragraph(outline, None, text, "Author").unwrap();
38 assert!(
39 serde_json::to_value(&plain)
40 .unwrap()
41 .get("formats")
42 .is_none()
43 );
44 let restored: Insertion = serde_json::from_slice(&serde_json::to_vec(&plain).unwrap()).unwrap();
45 assert_eq!(plain, restored);
46 let base = PreparedEdit::insert(&source, sid, &plain).unwrap();
47 let base_store = Store::parse(base.as_bytes()).unwrap();
48 let base_index = RevisionIndex::parse(&base_store).unwrap();
49 let base_doc = Document::parse(&base_index).unwrap();
50 let base_space = &base_doc.spaces[&sid];
51 let base_view = &base_space.revisions[&base_space.contexts[&ExGuid::default()]];
52 let default =
53 serde_json::to_value(&base_view.text_runs(plain.text_object()).unwrap()[0].format).unwrap();
54 let offsets: Vec<u32> = std::iter::once(0)
55 .chain(text.chars().scan(0, |n, c| {
56 *n += c.len_utf16() as u32;
57 Some(*n)
58 }))
59 .collect();
60 let old_store = Store::parse(&source).unwrap();
61 let old_index = RevisionIndex::parse(&old_store).unwrap();
62 for seed in 1..=48_u64 {
63 let mut random = seed;
64 let mut expected: Vec<_> = text.chars().map(|c| (c, default.clone())).collect();
65 let mut intent = if seed % 2 == 0 {
66 Insertion::outline(page, 72.0, 144.0, text, "Author").unwrap()
67 } else {
68 plain.clone()
69 };
70 // Descending construction also exercises persisted ordering independently of call order.
71 for i in (0..expected.len()).rev() {
72 random ^= random << 13;
73 random ^= random >> 7;
74 random ^= random << 17;
75 let (attributes, values) = match random % 8 {
76 0 => continue,
77 1 => (
78 vec![A::Bold(true), A::Underline(true)],
79 json!({"bold":true,"underline":true}),
80 ),
81 2 => (
82 vec![A::Italic(true), A::Strike(true)],
83 json!({"italic":true,"strike":true}),
84 ),
85 3 => (
86 vec![A::Font("Arial".into()), A::FontSize(13.5)],
87 json!({"font":"Arial","font_size":13.5}),
88 ),
89 4 => (
90 vec![
91 A::Color(Some([12, 34, 56])),
92 A::Highlight(Some([255, 255, 0])),
93 ],
94 json!({"color":0x38220c,"highlight":0x00ffff}),
95 ),
96 5 => (
97 vec![A::Superscript(true)],
98 json!({"superscript":true,"subscript":false}),
99 ),
100 6 => (
101 vec![A::Subscript(true)],
102 json!({"subscript":true,"superscript":false}),
103 ),
104 _ => (
105 vec![A::Bold(false), A::Color(None), A::Highlight(None)],
106 json!({"bold":false,"color":0xff000000_u32,"highlight":0xff000000_u32}),
107 ),
108 };
109 intent = intent
110 .with_formatting(offsets[i]..offsets[i + 1], &attributes)
111 .unwrap();
112 for (key, value) in values.as_object().unwrap() {
113 expected[i].1[key] = value.clone();
114 }
115 }
116 let restored: Insertion =
117 serde_json::from_slice(&serde_json::to_vec(&intent).unwrap()).unwrap();
118 assert_eq!(restored, intent);
119 let edited = PreparedEdit::insert(&source, sid, &restored).unwrap();
120 let store = Store::parse(edited.as_bytes()).unwrap();
121 assert_eq!(
122 store.header.transaction_count,
123 old_store.header.transaction_count + 1
124 );
125 let index = RevisionIndex::parse(&store).unwrap();
126 index.validate_current().unwrap();
127 assert_eq!(
128 index.spaces[&sid].revisions.len(),
129 old_index.spaces[&sid].revisions.len() + 1
130 );
131 for (space, old) in &old_index.spaces {
132 for revision in old.revisions.keys() {
133 assert_eq!(
134 format!("{:?}", old_index.resolve(*space, *revision).unwrap()),
135 format!("{:?}", index.resolve(*space, *revision).unwrap())
136 );
137 }
138 }
139 let document = Document::parse(&index).unwrap();
140 let space = &document.spaces[&sid];
141 let view = &space.revisions[&space.contexts[&ExGuid::default()]];
142 let actual: Vec<_> = view
143 .text_runs(intent.text_object())
144 .unwrap()
145 .into_iter()
146 .flat_map(|run| {
147 let format = serde_json::to_value(run.format).unwrap();
148 run.text.chars().map(move |c| (c, format.clone()))
149 })
150 .collect();
151 assert_eq!(actual, expected, "seed {seed}");
152 }
153}
154
155#[test]
156fn invalid_or_forged_insertion_formats_fail_before_source_parsing() {
157 use serde_json::json;
158 let source = onestore::create_section("invalid-rich.one", "Original", "Author").unwrap();
159 let (sid, _, outline, _, _) = targets(&source);
160 let plain = Insertion::paragraph(outline, None, "a🦀e\u{301}b", "Author").unwrap();
161 for (start, end) in [(0, 0), (2, 3), (1, 2), (4, 3), (0, 7)] {
162 let range = start..end;
163 assert!(plain.with_formatting(range, &[A::Bold(true)]).is_err());
164 }
165 for attributes in [
166 vec![],
167 vec![A::Bold(true), A::Bold(false)],
168 vec![A::FontSize(f32::NAN)],
169 vec![A::FontSize(5.5)],
170 vec![A::Font("a\0b".into())],
171 vec![A::Superscript(true), A::Subscript(true)],
172 ] {
173 assert!(plain.with_formatting(1..3, &attributes).is_err());
174 }
175 let formatted = plain.with_formatting(1..3, &[A::Bold(true)]).unwrap();
176 for range in [0..3, 1..3, 1..4] {
177 assert!(
178 formatted
179 .with_formatting(range, &[A::Italic(true)])
180 .is_err()
181 );
182 }
183 let encoded = serde_json::to_value(&formatted).unwrap();
184 for mutate in 0..6 {
185 let mut value = encoded.clone();
186 match mutate {
187 0 => value["formats"][0]["guid"] = serde_json::to_value([0; 16]).unwrap(),
188 1 => value["formats"][0]["guid"] = value["guid"].clone(),
189 2 => {
190 let duplicate = value["formats"][0].clone();
191 value["formats"].as_array_mut().unwrap().push(duplicate);
192 }
193 3 => value["formats"][0]["range"] = json!({"start":2,"end":3}),
194 4 => value["formats"][0]["attributes"] = json!([]),
195 _ => value["formats"][0]["range"] = json!({"start":0,"end":u32::MAX}),
196 }
197 let forged: Insertion = serde_json::from_value(value).unwrap();
198 let error = PreparedEdit::insert(&[], sid, &forged).err().unwrap();
199 assert_eq!(
200 error,
201 PreparedEdit::insert(&source, sid, &forged).err().unwrap()
202 );
203 }
204}
205
206#[test]
207fn formatted_empty_insertions_preserve_the_insertion_style_for_later_typing() {
208 let source = onestore::create_section("empty-rich.one", "Original", "Author").unwrap();
209 let (sid, page, outline, _, _) = targets(&source);
210 for plain in [
211 Insertion::outline(page, 72.0, 144.0, "", "Author").unwrap(),
212 Insertion::paragraph(outline, None, "", "Author").unwrap(),
213 ] {
214 let intent = plain
215 .with_formatting(0..0, &[A::Italic(true), A::FontSize(18.0)])
216 .unwrap();
217 assert!(intent.with_formatting(0..0, &[A::Bold(true)]).is_err());
218 let inserted = PreparedEdit::insert(&source, sid, &intent).unwrap();
219 let typed = PreparedEdit::text(
220 inserted.as_bytes(),
221 sid,
222 intent.text_object(),
223 0..0,
224 "Typed 🦀",
225 )
226 .unwrap();
227 for (bytes, text) in [(inserted.as_bytes(), ""), (typed.as_bytes(), "Typed 🦀")] {
228 let store = Store::parse(bytes).unwrap();
229 let index = RevisionIndex::parse(&store).unwrap();
230 index.validate_current().unwrap();
231 let document = Document::parse(&index).unwrap();
232 let space = &document.spaces[&sid];
233 let view = &space.revisions[&space.contexts[&ExGuid::default()]];
234 let runs = view.text_runs(intent.text_object()).unwrap();
235 assert_eq!(runs.len(), 1);
236 assert_eq!(runs[0].text, text);
237 assert_eq!(runs[0].format.italic, Some(true));
238 assert_eq!(runs[0].format.font_size, Some(18.0));
239 }
240 }
241}
242
243#[test]
244#[ignore = "exports formatted insertion candidates for cold native validation"]
245fn export_native_formatted_insertions() {
246 use std::{fs, path::PathBuf};
247 let output = PathBuf::from(std::env::var_os("ONESTORE_INSERT_OUTPUT").unwrap());
248 assert!(output.is_absolute());
249 fs::create_dir(&output).unwrap();
250 let generated = onestore::create_section("rich.one", "Original", "Author").unwrap();
251 let unicode = include_bytes!(
252 "../../../corpus/native/20260905-05/snapshots/03-format-unicode/notebook/synthetic.one"
253 );
254 let table = include_bytes!(
255 "../../../corpus/native/20260905-05/snapshots/07-table/notebook/synthetic.one"
256 );
257 let text = "Bold 🦀 italic e\u{301} color 東京\rEnd";
258 let mut manifest = Vec::new();
259 for (name, source, empty) in [
260 ("outline", generated.as_slice(), false),
261 ("native-paragraph", unicode.as_slice(), false),
262 ("native-cell", table.as_slice(), false),
263 ("empty", generated.as_slice(), true),
264 ("empty-typed", generated.as_slice(), true),
265 ] {
266 let (sid, page, outline, paragraph, _) = targets(source);
267 let insertion = match name {
268 "native-paragraph" => {
269 Insertion::paragraph(outline, Some(paragraph), text, "Rich author")
270 }
271 "native-cell" => {
272 let store = Store::parse(source).unwrap();
273 let index = RevisionIndex::parse(&store).unwrap();
274 let document = Document::parse(&index).unwrap();
275 let space = &document.spaces[&sid];
276 let view = &space.revisions[&space.contexts[&ExGuid::default()]];
277 let cell = *view
278 .nodes
279 .iter()
280 .find(|(_, node)| matches!(node.kind, Kind::Cell { .. }))
281 .unwrap()
282 .0;
283 Insertion::paragraph(cell, None, text, "Rich author")
284 }
285 _ => Insertion::outline(
286 page,
287 72.0,
288 144.0,
289 if empty { "" } else { text },
290 "Rich author",
291 ),
292 }
293 .unwrap();
294 let mut intent = insertion;
295 if empty {
296 intent = intent
297 .with_formatting(0..0, &[A::Italic(true), A::FontSize(18.0)])
298 .unwrap();
299 } else {
300 for (label, attributes) in [
301 ("Bold", vec![A::Bold(true), A::Underline(true)]),
302 ("🦀", vec![A::Font("Arial".into()), A::FontSize(13.5)]),
303 ("italic", vec![A::Italic(true), A::Strike(true)]),
304 ("e\u{301}", vec![A::Superscript(true)]),
305 (
306 "color",
307 vec![
308 A::Color(Some([12, 34, 56])),
309 A::Highlight(Some([255, 255, 0])),
310 ],
311 ),
312 ("東京", vec![A::Subscript(true)]),
313 (
314 "End",
315 vec![
316 A::Bold(false),
317 A::Italic(false),
318 A::Color(None),
319 A::Highlight(None),
320 ],
321 ),
322 ] {
323 let start = text[..text.find(label).unwrap()].encode_utf16().count() as u32;
324 intent = intent
325 .with_formatting(
326 start..start + label.encode_utf16().count() as u32,
327 &attributes,
328 )
329 .unwrap();
330 }
331 }
332 let inserted = PreparedEdit::insert(source, sid, &intent).unwrap();
333 let bytes = if name == "empty-typed" {
334 PreparedEdit::text(
335 inserted.as_bytes(),
336 sid,
337 intent.text_object(),
338 0..0,
339 "Typed café 🦀",
340 )
341 .unwrap()
342 .as_bytes()
343 .to_vec()
344 } else {
345 inserted.as_bytes().to_vec()
346 };
347 current::current(&bytes);
348 let notebook = output.join(name);
349 fs::create_dir(&notebook).unwrap();
350 fs::write(notebook.join("synthetic.one"), &bytes).unwrap();
351 manifest.push(serde_json::json!({"name":name,"space":sid,"intent":intent}));
352 }
353 fs::write(
354 output.join("manifest.json"),
355 serde_json::to_vec_pretty(&manifest).unwrap(),
356 )
357 .unwrap();
358}
359
31360#[test]
32361fn paragraph_and_outline_insertions_publish_metadata_and_references_together() {
33362 let source = onestore::create_section("insertion.one", "Original", "Original author").unwrap();
......@@ -165,11 +494,15 @@ fn repeated_insertions_and_formatting_share_immutable_objects() {
165494fn serialized_insertions_rebase_with_the_same_objects_and_preserve_remote_edits() {
166495 let source = onestore::create_section("rebase.one", "Original", "Author").unwrap();
167496 let (sid, _, outline, paragraph, text) = targets(&source);
168 let intent = Insertion::paragraph(outline, Some(paragraph), "Inserted", "Author").unwrap();
497 let intent = Insertion::paragraph(outline, Some(paragraph), "Inserted", "Author")
498 .unwrap()
499 .with_formatting(0..3, &[A::Bold(true), A::Color(Some([12, 34, 56]))])
500 .unwrap();
169501 let encoded = serde_json::to_vec(&intent).unwrap();
170502 let restored: Insertion = serde_json::from_slice(&encoded).unwrap();
171503 assert_eq!(intent.object(), restored.object());
172504 assert_eq!(intent.text_object(), restored.text_object());
505 assert_eq!(intent, restored);
173506 let original_preparation = PreparedEdit::insert(&source, sid, &intent).unwrap();
174507 let remote = PreparedEdit::text(&source, sid, text, 0..0, "Remote ").unwrap();
175508 let updated = PreparedEdit::insert(remote.as_bytes(), sid, &restored).unwrap();
......@@ -188,6 +521,12 @@ fn serialized_insertions_rebase_with_the_same_objects_and_preserve_remote_edits(
188521 assert!(
189522 matches!(&view.nodes[&restored.text_object()].kind, Kind::RichText { text, .. } if text == "Inserted")
190523 );
524 let runs = view.text_runs(restored.text_object()).unwrap();
525 assert_eq!(runs[0].text, "Ins");
526 assert_eq!(runs[0].format.bold, Some(true));
527 assert_eq!(runs[0].format.color, Some(0x38220c));
528 assert_eq!(runs[1].text, "erted");
529 assert_ne!(runs[1].format.bold, Some(true));
191530 assert!(PreparedEdit::insert(original_preparation.as_bytes(), sid, &restored).is_err());
192531 assert!(PreparedEdit::insert(updated.as_bytes(), sid, &restored).is_err());
193532}
......@@ -196,8 +535,14 @@ fn serialized_insertions_rebase_with_the_same_objects_and_preserve_remote_edits(
196535fn repositioning_preserves_intent_identity_and_kind() {
197536 let source = onestore::create_section("placement.one", "Original", "Author").unwrap();
198537 let (sid, page, outline, paragraph, _) = targets(&source);
199 let p = Insertion::paragraph(outline, Some(paragraph), "Inserted", "Author").unwrap();
200 let o = Insertion::outline(page, 144.0, 144.0, "Inserted", "Author").unwrap();
538 let p = Insertion::paragraph(outline, Some(paragraph), "Inserted", "Author")
539 .unwrap()
540 .with_formatting(1..4, &[A::Italic(true)])
541 .unwrap();
542 let o = Insertion::outline(page, 144.0, 144.0, "Inserted", "Author")
543 .unwrap()
544 .with_formatting(0..8, &[A::FontSize(18.0)])
545 .unwrap();
201546 assert!(p.reposition_outline(page, 72.0, 72.0).is_err());
202547 assert!(o.reposition_paragraph(outline, None).is_err());
203548 assert!(p.reposition_paragraph(ExGuid::default(), None).is_err());
......@@ -344,6 +689,11 @@ fn insertion_publication_faults_expose_only_complete_graphs_and_title_caches() {
344689 Insertion::paragraph(outline, Some(paragraph), "First 🦀", "New author").unwrap(),
345690 Insertion::outline(page, 0.0, 0.0, "First 🦀", "New author").unwrap(),
346691 ] {
692 let intent = intent
693 .with_formatting(0..3, &[A::Bold(true), A::FontSize(18.0)])
694 .unwrap()
695 .with_formatting(6..8, &[A::Italic(true), A::Highlight(Some([255, 255, 0]))])
696 .unwrap();
347697 let edit = PreparedEdit::insert(source, sid, &intent).unwrap();
348698 let before = current::current(source);
349699 let after = current::current(edit.as_bytes());
fuzz/Cargo.toml+7
......@@ -77,3 +77,10 @@ path = "fuzz_targets/edit_text.rs"
7777test = false
7878doc = false
7979bench = false
80
81[[bin]]
82name = "insert"
83path = "fuzz_targets/insert.rs"
84test = false
85doc = false
86bench = false
fuzz/fuzz_targets/insert.rs created+135
......@@ -0,0 +1,135 @@
1#![no_main]
2use libfuzzer_sys::fuzz_target;
3use onestore::{
4 CommitState, ExGuid, Insertion, PreparedEdit, RevisionIndex, Store, TextAttribute as A,
5 document::{Document, Kind},
6};
7use std::sync::LazyLock;
8
9#[path = "../../crates/onestore/tests/support/current.rs"]
10mod current;
11#[path = "../../crates/onestore/tests/support/disk.rs"]
12mod disk;
13
14static SOURCE: LazyLock<(Vec<u8>, ExGuid, ExGuid, ExGuid)> = LazyLock::new(|| {
15 let bytes = include_bytes!(
16 "../../corpus/native/20260905-05/snapshots/03-format-unicode/notebook/synthetic.one"
17 )
18 .to_vec();
19 let store = Store::parse(&bytes).unwrap();
20 let index = RevisionIndex::parse(&store).unwrap();
21 let document = Document::parse(&index).unwrap();
22 let (space, page) = document.pages().unwrap()[0];
23 let s = &document.spaces[&space];
24 let view = &s.revisions[&s.contexts[&ExGuid::default()]];
25 let outline = *view.nodes[&page]
26 .children
27 .iter()
28 .find(|id| matches!(view.nodes[id].kind, Kind::Outline { .. }))
29 .unwrap();
30 (bytes, space, page, outline)
31});
32
33fuzz_target!(|input: &[u8]| {
34 let (source, space, page, outline) = &*SOURCE;
35 if let Ok(intent) = serde_json::from_slice::<Insertion>(input)
36 && let Ok(prepared) = PreparedEdit::insert(source, *space, &intent)
37 {
38 current::current(prepared.as_bytes());
39 }
40 let mut persisted = source.clone();
41 let mut caches = std::array::from_fn::<_, 12, _>(|_| source.clone());
42 for step in input.chunks_exact(8).take(12) {
43 let actor = usize::from(step[0]) % caches.len();
44 if step[1] % 4 == 0 {
45 caches[actor].clone_from(&persisted);
46 }
47 let source = &caches[actor];
48 let text =
49 ["", "ab", "🦀e\u{301}東京\rEnd", "same style same style"][usize::from(step[2]) % 4];
50 let offsets: Vec<u32> = std::iter::once(0)
51 .chain(text.chars().scan(0, |n, c| {
52 *n += c.len_utf16() as u32;
53 Some(*n)
54 }))
55 .collect();
56 let first = usize::from(step[3]) % offsets.len();
57 let second = usize::from(step[4]) % offsets.len();
58 let (start, end) = (first.min(second), first.max(second));
59 let plain = if step[1] & 1 == 0 {
60 Insertion::paragraph(*outline, None, text, "Insertion fuzz").unwrap()
61 } else {
62 Insertion::outline(*page, 72.0, 144.0, text, "Insertion fuzz").unwrap()
63 };
64 let enabled = step[5] & 1 != 0;
65 let intent = if start != end || text.is_empty() {
66 plain
67 .with_formatting(
68 offsets[start]..offsets[end],
69 &[A::Bold(enabled), A::FontSize(18.0)],
70 )
71 .unwrap()
72 } else {
73 plain
74 };
75 let encoded = serde_json::to_vec(&intent).unwrap();
76 let intent: Insertion = serde_json::from_slice(&encoded).unwrap();
77 let edit = PreparedEdit::insert(source, *space, &intent).unwrap();
78 let store = Store::parse(edit.as_bytes()).unwrap();
79 let index = RevisionIndex::parse(&store).unwrap();
80 let document = Document::parse(&index).unwrap();
81 let s = &document.spaces[space];
82 let view = &s.revisions[&s.contexts[&ExGuid::default()]];
83 let actual: Vec<_> = view
84 .text_runs(intent.text_object())
85 .unwrap()
86 .into_iter()
87 .flat_map(|run| {
88 run.text.chars().map(move |c| {
89 (
90 c,
91 run.format.bold.unwrap_or(false),
92 run.format.font_size.unwrap(),
93 )
94 })
95 })
96 .collect();
97 let expected: Vec<_> = text
98 .chars()
99 .enumerate()
100 .map(|(i, c)| {
101 if (start..end).contains(&i) {
102 (c, enabled, 18.0)
103 } else {
104 (c, false, 11.0)
105 }
106 })
107 .collect();
108 assert_eq!(actual, expected);
109 let before = current::current(&persisted);
110 let after = current::current(edit.as_bytes());
111 let mut disk = disk::Disk {
112 visible: persisted.clone(),
113 durable: persisted.clone(),
114 operation: 0,
115 fail_at: (step[6] != 0).then_some(usize::from(step[6])),
116 write_limit: if step[7] & 1 == 0 { 17 } else { 4096 },
117 random: u64::from(step[7]) + 1,
118 };
119 let result = edit.commit(&mut disk);
120 let observed = current::current(&disk.durable);
121 match result {
122 Ok(()) => assert_eq!(observed, after),
123 Err(error) => {
124 assert!(observed == before || observed == after);
125 if error.state == CommitState::NotCommitted {
126 assert_eq!(observed, before);
127 }
128 if error.state == CommitState::Committed {
129 assert_eq!(observed, after);
130 }
131 }
132 }
133 persisted = disk.durable;
134 }
135});
tools/native/formatted-insertion.ps1 created+53
......@@ -0,0 +1,53 @@
1param([Parameter(Mandatory=$true)][string]$Root, [string]$CloneHost = '')
2Set-StrictMode -Version Latest
3$ErrorActionPreference = 'Stop'
4& "$PSScriptRoot\cold-current.ps1" -Root $Root -CloneHost $CloneHost
5$app = New-Object -ComObject OneNote.Application
6$notebook = ''
7try {
8 $app.OpenHierarchy((Join-Path $Root 'notebook'), '', [ref]$notebook, 0)
9 $section = ''
10 $app.OpenHierarchy('synthetic.one', $notebook, [ref]$section, 0)
11 $deadline = [DateTime]::UtcNow.AddSeconds(60)
12 do {
13 $hierarchy = ''
14 $app.GetHierarchy($section, 4, [ref]$hierarchy, 1)
15 [xml]$tree = $hierarchy
16 $pages = @($tree.SelectNodes('//*[local-name()="Page"]'))
17 if ($pages.Count -eq 1) { break }
18 Start-Sleep -Milliseconds 250
19 } while ([DateTime]::UtcNow -lt $deadline)
20 if ($pages.Count -ne 1) { throw 'Expected one fixture page.' }
21 $pageId = $pages[0].GetAttribute('ID')
22 foreach ($phase in @('control', 'edit')) {
23 $content = ''
24 $app.GetPageContent($pageId, [ref]$content, 1, 1)
25 [IO.File]::WriteAllText((Join-Path $Root ($phase + '-before.xml')), $content, [Text.Encoding]::UTF8)
26 [xml]$page = $content
27 $matches = @($page.SelectNodes('//*[local-name()="T"]') | Where-Object {
28 $plain = [regex]::Replace($_.InnerText, '<[^>]*>', '')
29 $plain.StartsWith('Bold ') -or $plain.StartsWith('Typed ')
30 })
31 if ($matches.Count -ne 1) { throw 'Expected one inserted rich paragraph.' }
32 $target = $matches[0]
33 if ($phase -eq 'edit') { $target.InnerText = $target.InnerText.Replace('Bold', 'Native Bold').Replace('Typed', 'Native Typed') }
34 $outline = $target
35 while ($outline.LocalName -ne 'Outline') { $outline = $outline.ParentNode }
36 $update = '<one:Page xmlns:one="http://schemas.microsoft.com/office/onenote/2010/onenote" ID="' + $pageId + '">'
37 foreach ($style in $page.SelectNodes('/*/*[local-name()="QuickStyleDef"]')) { $update += $style.OuterXml }
38 if ($outline.SelectSingleNode('.//*[local-name()="Table"]')) {
39 # Resubmitting measured outline size constrains native table auto-fit.
40 foreach ($size in @($outline.SelectNodes('*[local-name()="Size"]'))) { [void]$outline.RemoveChild($size) }
41 }
42 $update += $outline.OuterXml + '</one:Page>'
43 [IO.File]::WriteAllText((Join-Path $Root ($phase + '-update.xml')), $update, [Text.Encoding]::UTF8)
44 $app.UpdatePageContent($update, [DateTime]::MinValue, 1, $false)
45 }
46 $app.SyncHierarchy($notebook)
47} finally {
48 if ($notebook) { $app.CloseNotebook($notebook, $false) }
49 [void][Runtime.InteropServices.Marshal]::FinalReleaseComObject($app)
50 $app = $null
51 [GC]::Collect()
52 [GC]::WaitForPendingFinalizers()
53}
tools/native/read.ps1+4-1
......@@ -40,6 +40,7 @@ try {
4040 }
4141 $deadline = [DateTime]::UtcNow.AddSeconds(300)
4242 $previous = ''
43 $lastChange = ''
4344 $stableSince = [DateTime]::UtcNow
4445 $settled = $false
4546 do {
......@@ -62,6 +63,7 @@ try {
6263 }
6364 $signature = [String]::Join('|', @($pages.Keys | Sort-Object | ForEach-Object { $_ + $pages[$_] }))
6465 if ($signature -ne $previous) {
66 $lastChange = $previous
6567 $previous = $signature
6668 $stableSince = [DateTime]::UtcNow
6769 }
......@@ -71,6 +73,7 @@ try {
7173 Start-Sleep -Milliseconds 250
7274 } while ([DateTime]::UtcNow -lt $deadline)
7375 if (-not $settled -or ($ExpectedPages -ge 0 -and $pages.Count -ne $ExpectedPages) -or ($ExpectedPages -lt 0 -and $pages.Count -eq 0)) {
76 [IO.File]::WriteAllText((Join-Path $output 'previous-signature.txt'), $lastChange, [Text.Encoding]::UTF8)
7477 $index = 0
7578 foreach ($id in @($pages.Keys | Sort-Object)) {
7679 [IO.File]::WriteAllText((Join-Path $output ('unsettled-{0:d3}.xml' -f $index)), $pages[$id], [Text.Encoding]::UTF8)
......@@ -79,7 +82,7 @@ try {
7982 $hierarchy = ''
8083 $app.GetHierarchy($notebookId, 4, [ref]$hierarchy, 1)
8184 [IO.File]::WriteAllText((Join-Path $output 'unsettled-hierarchy.xml'), $hierarchy, [Text.Encoding]::UTF8)
82 throw "Expected $ExpectedPages pages; OneNote returned $($pages.Count)."
85 throw "Expected $ExpectedPages stable pages; OneNote returned $($pages.Count), settled=$settled."
8386 }
8487 $index = 0
8588 $payloads = @()
tools/offline_document_history.py+6-1
......@@ -80,6 +80,11 @@ def document_history(logs, operations):
8080 assert formatted['range'] == [1, len(text.encode('utf-16-le')) // 2 - 2]
8181 assert formatted['attributes'] == [{'Bold': True}, {'FontSize': 18 + number % 9}, {'Color': [18, 52, 86]}]
8282 old = [(char, False, 11, 0xff000000) for char in text]
83 if insertion.get('formats'):
84 span, = insertion['formats']
85 assert span['range'] == {'start': 0, 'end': len(text.encode('utf-16-le')) // 2}, 'Initial formatting range differs from workload'
86 assert span['attributes'] == [{'FontSize': 13.5}, {'Color': [68, 85, 102]}], 'Initial formatting attributes differ from workload'
87 old = [(char, False, 13.5, 0x665544) for char in text]
8388 new = [(char, True, 18 + number % 9, 0x563412) if 0 < i < len(text)-1 else old[i] for i, char in enumerate(text)]
8489 assert target not in documents, 'Two insertion intents share an object identity'
8590 created, changed = linked[inserted['id']], linked[formatted['id']]
......@@ -158,6 +163,6 @@ def verify_native(paragraphs, documents):
158163 if color == 0xff000000:
159164 assert native_color in ('automatic', None), 'Native automatic color changed'
160165 else:
161 assert ImageColor.getrgb(native_color) == (18, 52, 86), 'Native color differs from intent'
166 assert ImageColor.getrgb(native_color) == (color & 255, (color >> 8) & 255, (color >> 16) & 255), 'Native color differs from intent'
162167 checks += 3
163168 return checks
tools/test_formatted_insertion.py created+57
......@@ -0,0 +1,57 @@
1import json
2from pathlib import Path
3import runpy
4import shutil
5from tempfile import TemporaryDirectory
6import unittest
7import xml.etree.ElementTree as ET
8
9from native_format import native_characters
10from native_xml import ns
11
12ROOT = Path(__file__).resolve().parent.parent
13FIXTURE = ROOT / 'corpus/formatted-insertion'
14compare = runpy.run_path(str(ROOT / 'tools/verify-document.py'))['compare']
15
16
17class FormattedInsertionTest(unittest.TestCase):
18 def test_cold_native_content_and_formatting(self):
19 manifest = json.loads((FIXTURE / 'manifest.json').read_text())
20 for case in manifest['cases']:
21 with self.subTest(case=case['name']), TemporaryDirectory() as temporary:
22 fixture = FIXTURE / case['name']
23 native = Path(temporary) / 'read'
24 shutil.copytree(fixture / 'cold/read', native)
25 compare(fixture / 'candidate', native)
26 with TemporaryDirectory() as temporary:
27 fixture = FIXTURE / 'empty/typed-after-cold'
28 native = Path(temporary) / 'read'
29 shutil.copytree(fixture / 'read', native)
30 compare(fixture / 'candidate', native)
31
32 def test_native_edits_preserve_the_observed_character_styles(self):
33 manifest = json.loads((FIXTURE / 'manifest.json').read_text())
34 for case in manifest['cases']:
35 for variant, before_file, prefix in [('reverse', 'edit-before.xml', 'Native '),
36 ('ui', 'before-read/page-000.xml', 'UI ')]:
37 if variant + '_sha256' not in case:
38 continue
39 with self.subTest(case=case['name'], variant=variant), TemporaryDirectory() as temporary:
40 fixture = FIXTURE / case['name'] / variant
41 native = Path(temporary) / 'read'
42 shutil.copytree(fixture / 'read', native)
43 compare(fixture / 'notebook', native)
44 before = ET.parse(fixture / before_file).getroot()
45 after = ET.parse(native / 'page-000.xml').getroot()
46 expected = native_characters(before, before.findall('one:Outline', ns))
47 changed = 0
48 for index, paragraph in enumerate(expected):
49 if ''.join(char for char, _ in paragraph).startswith(('Bold ', 'Typed ')):
50 expected[index] = [(char, paragraph[0][1]) for char in prefix] + paragraph
51 changed += 1
52 self.assertEqual(changed, 1)
53 self.assertEqual(native_characters(after, after.findall('one:Outline', ns)), expected)
54
55
56if __name__ == '__main__':
57 unittest.main()
tools/test_offline_document_history.py+28
......@@ -60,6 +60,34 @@ class DocumentHistoryTests(unittest.TestCase):
6060 events.remove(next(row for row in events if row['event'] == name))
6161 with self.subTest(event=name), self.assertRaises(AssertionError): document_history(logs, 2)
6262
63 def test_formatted_insertions_are_atomic_in_every_observed_snapshot(self):
64 for events in self.logs.values():
65 for row in events:
66 insertion = row.get('insertion')
67 if insertion:
68 insertion['formats'] = [{'guid': list(uuid.uuid4().bytes_le),
69 'range': {'start': 0, 'end': len(insertion['text'].encode('utf-16-le')) // 2},
70 'attributes': [{'FontSize': 13.5}, {'Color': [68, 85, 102]}]}]
71 for key in ('documents', 'document_changes'):
72 for document in (row.get(key) or {}).values():
73 for run in document['runs']:
74 if run['size'] == 11:
75 run['size'] = 13.5
76 run['color'] = 0x665544
77 documents = document_history(self.logs, 2)
78 paragraphs = [[(char, {'bold': bold, 'font_size': size,
79 'color': '#123456' if color == 0x563412 else '#445566'})
80 for char, bold, size, color in row['new']] for row in documents.values()]
81 self.assertEqual(verify_native(paragraphs, documents), sum(len(row['new'])*3 for row in documents.values()))
82 baseline = copy.deepcopy(self.logs)
83 for event, key in [('remote_attempt', 'document_changes'), ('read', 'documents')]:
84 for field, value in [('size', 11), ('color', 0xff000000)]:
85 logs = copy.deepcopy(baseline)
86 row = next(row for row in logs['w0'] if row['event'] == event)
87 next(iter(row[key].values()))['runs'][0][field] = value
88 with self.subTest(event=event, field=field), self.assertRaises(AssertionError):
89 document_history(logs, 2)
90
6391 def test_retired_format_receipt_requires_current_revision_and_exact_observed_effect(self):
6492 events = self.logs['w0']
6593 attempt = next(row for row in events if row['event'] == 'remote_attempt' and row['revision'] == 'revision-3')