# feat: write hyperlinks through the page model · clo/snowbound

[View on GitCafe](https://git.cafe/clo/snowbound/commit/8b4f45b5b7a6d9b8555e7234a123c9887495d265)

Repository: [clo/snowbound](https://git.cafe/clo/snowbound)

Visibility: public

Requested revision: 8b4f45b5b7a6d9b8555e7234a123c9887495d265

Requested commit: 8b4f45b5b7a6d9b8555e7234a123c9887495d265

Commit: 8b4f45b5b7a6d9b8555e7234a123c9887495d265

Tree: eb27d721da9a0b2911611aa13b5a46ead0696b50

Author: clover caruso

Committer: clover caruso

## Message

```
feat: write hyperlinks through the page model

A hyperlink in the page model is what OneNote stores: a hidden field-code
run (U+FDDF HYPERLINK "url") followed by the visible label, both flagged as
hyperlink runs. The text and formatting writers now treat hidden and
hyperlink runs as ordinary text with flags instead of refusing them, and the
page writer lowers the hidden, hyperlink and hyperlink-label flags as run
attributes; equations, embedded objects and runs with associated data stay
refused. Boolean run flags compare as absent-equals-false, so clearing a flag
to an absent value writes false once and a rewritten run does not churn.

corpus/link-edit is the native gate: a Rust-authored page whose paragraph
gained a link, cold-read by OneNote 2010 as an anchor with the URL and label;
tools/test_link_edit.py checks it without a VM.

Assisted-by: claude-fable-5.1

```

## Parents

- [190fb2d10c46ced562a7f0d96f63aa803f4b47d4](https://git.cafe/clo/snowbound/commit/190fb2d10c46ced562a7f0d96f63aa803f4b47d4?format=markdown)

[Source at this commit](https://git.cafe/clo/snowbound/tree/8b4f45b5b7a6d9b8555e7234a123c9887495d265?format=markdown)
