Storage, backend constructors, the active signer and the reply question.
A MessagingRegistry.
const messaging = createDefaultMessaging({ storage: localStorage });
messaging.get('private')?.availability; // { available: false, reason: 'sign-in-required' }
messaging.get('ratchet')?.availability; // { available: false, reason: 'no-runtime' }
messaging.get('group')?.availability; // { available: false, reason: 'no-runtime' }
The shell's messaging registry with kernl's four providers registered and preferences persisted at
kernl:messaging:v1.createKernlpasses the account-signer backends for all four providers and the active account's signer, so each follows the account:sign-in-requiredwhile nobody is signed in,signer-cannot-encryptwhile the signer lacks the encryption the format needs. A provider given no backend stays unavailable:no-runtimeforratchetandgroup,sign-in-requiredfor the others. The shell describes, it does not pretend.The providers start in the order private, legacy, ratchet, group, with
privateandlegacyswitched on for someone who has never chosen; each starts as soon as an account that can run it signs in. The user's own choices, order, reply rule and per-person answers are saved and win.