corpus/link-edit/README.md | 22 +++++ corpus/link-edit/internal/candidate/Open Notebook.onetoc2 | Bin 0 -> 1604 bytes corpus/link-edit/internal/candidate/links.one | Bin 0 -> 9200 bytes corpus/link-edit/internal/cold/commands.jsonl | 3 + corpus/link-edit/internal/cold/machine.json | 1 + corpus/link-edit/internal/cold/notebook/Open Notebook.onetoc2 | Bin 0 -> 3764 bytes corpus/link-edit/internal/cold/notebook/links.one | Bin 0 -> 9200 bytes corpus/link-edit/internal/cold/read/environment.json | 7 ++ corpus/link-edit/internal/cold/read/hierarchy.xml | 2 + corpus/link-edit/internal/cold/read/page-000.xml | 2 + corpus/link-edit/internal/cold/read/page-001.xml | 3 + corpus/link-edit/internal/cold/read/payloads.json | 3 + corpus/link-edit/internal/cold/run.json | 18 ++++ corpus/link-edit/internal/cold/scripts/cold.ps1 | 27 ++++++ corpus/link-edit/internal/cold/scripts/read.ps1 | 142 ++++++++++++++++++++++++++++++ corpus/link-edit/internal/cold/source.json | 14 +++ corpus/link-edit/internal/cold/teardown.json | 1 + corpus/link-edit/native-links/before.xml | 3 + corpus/link-edit/native-links/commands.jsonl | 4 + corpus/link-edit/native-links/links.json | 7 ++ corpus/link-edit/native-links/machine.json | 1 + corpus/link-edit/native-links/notebook/Open Notebook.onetoc2 | Bin 0 -> 3764 bytes corpus/link-edit/native-links/notebook/links.one | Bin 0 -> 19416 bytes corpus/link-edit/native-links/read/environment.json | 7 ++ corpus/link-edit/native-links/read/hierarchy.xml | 2 + corpus/link-edit/native-links/read/page-000.xml | 6 ++ corpus/link-edit/native-links/read/page-001.xml | 2 + corpus/link-edit/native-links/read/payloads.json | 3 + corpus/link-edit/native-links/run.json | 19 ++++ corpus/link-edit/native-links/scripts/author.ps1 | 63 ++++++++++++++ corpus/link-edit/native-links/scripts/cold.ps1 | 27 ++++++ corpus/link-edit/native-links/scripts/read.ps1 | 142 ++++++++++++++++++++++++++++++ corpus/link-edit/native-links/source.json | 14 +++ corpus/link-edit/native-links/teardown.json | 1 + corpus/link-edit/native-links/update.xml | 2 + corpus/tag-edit/README.md | 5 +- corpus/tag-edit/candidate/Open Notebook.onetoc2 | Bin 1596 -> 1596 bytes corpus/tag-edit/candidate/tags.one | Bin 8352 -> 8368 bytes corpus/tag-edit/cold/commands.jsonl | 2 +- corpus/tag-edit/cold/machine.json | 2 +- corpus/tag-edit/cold/notebook/Open Notebook.onetoc2 | Bin 3748 -> 3748 bytes corpus/tag-edit/cold/notebook/tags.one | Bin 8352 -> 8368 bytes corpus/tag-edit/cold/read/environment.json | 2 +- corpus/tag-edit/cold/read/hierarchy.xml | 2 +- corpus/tag-edit/cold/read/page-000.xml | 2 +- corpus/tag-edit/cold/source.json | 10 +-- crates/canvas/src/editor.rs | 4 + crates/canvas/src/gpu/page.rs | 7 ++ crates/notebook/README.md | 5 +- crates/notebook/src/merge.rs | 1 + crates/notebook/src/session.rs | 6 ++ crates/onestore/README.md | 2 +- crates/onestore/src/page/link.rs | 77 ++++++++++++++++ crates/onestore/src/page/mod.rs | 51 +++++++---- crates/onestore/tests/page_links.rs | 150 +++++++++++++++++++++++++++++++- crates/onestore/tests/page_tags.rs | 10 ++- crates/snowbound/src/accessibility.rs | 2 + crates/snowbound/src/main.rs | 4 + tools/native/page-link.ps1 | 63 ++++++++++++++ tools/test_link_edit.py | 26 ++++++ tools/test_tag_edit.py | 5 +- 61 files changed, 952 insertions(+), 34 deletions(-)