diff --git a/library/composables/useViewAddress.js b/library/composables/useViewAddress.js index b361ef0b2..0af04344f 100644 --- a/library/composables/useViewAddress.js +++ b/library/composables/useViewAddress.js @@ -18,8 +18,11 @@ * absent a partner's page: nothing is written; links are still READ (readViewKeys works everywhere). * A nested element never writes: it announces its choice upward (announceView) and the owner records it. * - * ★ THE ONE HISTORY WRITE: commitUrl(). Every write to the address bar goes through it (useShareableView's filter - * writes included), so two modules can never undo each other. It keeps `history.state` and sets its `current` to the + * ★ THE ONE HISTORY WRITE: commitUrl(). The view keys and useShareableView's filters both write through it, so those + * two can never undo each other. The tree's other history writers are pinned by check:view-address's census and move + * onto commitUrl in later phases. On a push, commitUrl copies the previous entry's state (Vue Router's `position` and + * `back` included). That is correct for a replace. A Vue Router page is a 'host' owner, so its router does its own + * pushes. It keeps `history.state` and sets its `current` to the * new URL. MEASURED on a Vue Router host (2026-09-30): a pushState that drops Router's state fields makes the next * in-app navigation rewrite the entry back to Router's last-known URL, and the link is lost. It writes nothing when * the URL would not change. A user's tab/pane/place change is a push (one Back step); first paint, link