clearAll is the security-zero path: each .free() in its own try/catch so a single throwing handle can't leave the others un-zeroed; state is fully reset regardless. setOrg frees any prior handle for the same org before overwriting so a re-unlock can't orphan an un-zeroed WASM key. Tests updated to the best-effort contract (session.test.ts) plus independent-mock, throwing-free, and re-unlock cases (org-session.test.ts). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014s527M917W47LDrfQ4t47g