01 · Before and afterThe pattern
Keep entitlement decisions in one derived value and let both the gate and the reset read it.
const canUsePro$ = subscription$.map(s => s?.status === 'active'); // no platform exceptions here
function selectModel(m: Model) { if (m.isPro && !canUsePro$.value) return; selected.set(m.id); }
canUsePro$.subscribe(ok => { if (!ok && current()?.isPro) selected.set(undefined); });
// before: `if (!isIOS && !ok && m.isPro)` in both places, so the reset never ran on iOS02 · Run it on your appThe check
When a paid plan expires, does every persisted “pro” choice in your app reset, on every platform?
If the honest answer is no or not sure, this is worth a look before it reaches production.