On the nym branches (nym_core_hardening and ancestors), the send gate is (mixnetView === null || !mixnetView.sendBlocked) in components/Send/Send.tsx:874-877, and LoadedApp sets mixnetView: null on every non-Android platform (app/LoadedApp/LoadedApp.tsx:843-845). iOS therefore has no mixnet transport, a wallet permanently reporting Off, and an OPEN send gate — the exact unconsented-clearnet posture the five-state work exists to prevent.
Until the converged gate lands on iOS, the null case must fail closed (send blocked, with a "mixnet unavailable on this platform" narration) or the platform must record explicit clearnet consent.
Found by the 2026-07-28 consumer-convergence audit; see ADR 0024 on the zingolib branch zingo-cli-over-nym (docs/adr/0024-consumers-converge-on-a-zingolib-owned-mixnet-surface.md). This fix is independent of, and ahead of, the convergence phases.
On the nym branches (nym_core_hardening and ancestors), the send gate is
(mixnetView === null || !mixnetView.sendBlocked)incomponents/Send/Send.tsx:874-877, and LoadedApp setsmixnetView: nullon every non-Android platform (app/LoadedApp/LoadedApp.tsx:843-845). iOS therefore has no mixnet transport, a wallet permanently reporting Off, and an OPEN send gate — the exact unconsented-clearnet posture the five-state work exists to prevent.Until the converged gate lands on iOS, the null case must fail closed (send blocked, with a "mixnet unavailable on this platform" narration) or the platform must record explicit clearnet consent.
Found by the 2026-07-28 consumer-convergence audit; see ADR 0024 on the zingolib branch
zingo-cli-over-nym(docs/adr/0024-consumers-converge-on-a-zingolib-owned-mixnet-surface.md). This fix is independent of, and ahead of, the convergence phases.