Split SSE stop from state wipe, and rename useSseConsumer
stopSseConsumer was doing two jobs at once: flipping the started flag
AND draining every keeper (tree, workspace, inbox). That's only a
coherent pair because every logged-in web session currently happens
to also run the SSE consumer — the invariant "logout implies crypto
wipe" was being enforced by coincidence, not by the type system.
Add any logged-in-but-no-SSE path (offline mode, read-only session)
and the wipe silently stops happening.
Split them. `stopSseConsumer` now only flips the started flag and
clears the proposal-sync debounce state — "no new events will be
applied," nothing more. `wipeState` is the new logout-teardown
method that drains every keeper and drops the cached ContentKeys.
OpakeProvider's unmount effect calls both in order; TopBar's full-
reload logout falls through the same cleanup path. Two separate
test assertions cover the pair.
While I was next door: rename `useSseConsumer` to
`useStartSseConsumer` and document the asymmetric semantics
(start-only, no stop). The provider intentionally doesn't delegate
to this hook because its lifetime is different — made that explicit
in the provider's effect comment.