# feat: notebook structure, change detection, link resolution, reviewed release of uncertain saves · clo/snowbound

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

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

Visibility: public

Requested revision: 75e67fc117387e3301560b6a3ee21075f3487b71

Requested commit: 75e67fc117387e3301560b6a3ee21075f3487b71

Commit: 75e67fc117387e3301560b6a3ee21075f3487b71

Tree: 80f39d3880472ba3eac1f33123f9a1e9d2a0df55

Author: clover caruso

Committer: clover caruso

## Message

```
feat: notebook structure, change detection, link resolution, reviewed release of uncertain saves

Table of contents editing (`onestore::TocEdit`, `PreparedEdit::table_of_contents`) adds,
renames, colours, orders and removes section and group entries as one revision, and
`notebook::session::Notebook` creates sections and groups, renames, colours, reorders and
deletes into `OneNote_RecycleBin` the way OneNote does. Two writer rules came out of the
cold reads: OneNote re-identifies any file whose header ancestor is not the parent TOC's
identity or whose name CRC is not its file or folder name (`onestore::place_file` sets
both on create, rename and delete), and a TOC revision manifest carries one global id
table, or OneNote applies a revised entry's order to the wrong entry.

`Notebook::refresh` now reports what another client changed, keyed by file identity
(`Change::{Added, Removed, Moved, Reordered}`), keeping the last catalog when the
notebook is unreachable. `page::link::parse_internal_link` and `Notebook::find_page`
resolve stored links by identity across renamed, moved and stale sections. A stored
attachment's shown name, source path and icon size edit in place. With the `protected`
feature, `Notebook::unlock` reads a locked section's pages.

An uncertain publication is released by review, never replay: `Replica::release_attempt`
(`Section::release`) exports the branch to a new archive, then either continues from a
reviewed page under the same id or abandons the branch, whose ids report
`EditStatus::Archived { archive }` (cache schema 13). No receipt is ever written for the
uncertain attempt.

Cold reads: `corpus/notebook-edit/{structured,deleted}` (written order, colours, recycle
bin, stable identities), `corpus/notebook-edit/native-reorder` (COM cannot reorder),
`corpus/attachment-edit/renamed`.

Assisted-by: claude-fable-5.1

```

## Parents

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

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