The WeakSet keyed optimistic-row tracking on object identity, but SessionInfo
rows are re-spread by value on ordinary user paths (touchSessionActivity on
send, applySessionTitle on rename). A copy carried the painted `pinned` while
losing WeakSet membership, so the next reconcile read it as a page agreeing
with our write and released the guard while the PATCH was still in flight —
re-opening the revert #128198 closes. Stamp the row with an enumerable symbol
instead: identity no longer matters, and only a row a real list page delivered
(a fresh object without the stamp) can confirm the guard.
Also covers the unpin half in the failed-write comment.
Found by @Enough1122 review on #128198.