Refuse page edits a reader can no longer make, and say when access changes

When an owner makes an editor a viewer, or removes them, while they have
the strategy open, the app kept committing their edits locally even
though the server refuses them. Now every mutator that commits a user's
edit to page content asks PageEditAccess (ref.canEditPages) first and
changes nothing when the open strategy cannot be edited: agents,
abilities, drawings, text, images, utilities, strategy settings, lineups,
clear, transactions, and undo/redo. Load and merge paths (fromHive,
mergeRemote, clearAll, addRecovered, restoreSnapshot) never ask, and
local strategies can always be edited.

A demotion while the strategy is open shows a toast once. A FORBIDDEN on
a fresh shell read of the open strategy (signed in, not through a share
link) marks access as lost: nothing stays editable, the last known role
is cleared, and a dialog leads back to the library. Edit media and
rename dialogs that are saved after the change close without saving.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7368576ef7Dara Adedeji committed on 10/13/2026, 3:27:56 AMparent50c0f56

Checks

All checks passed
21 files changedLine totals unavailable