* feat(mobile): add the RpcOperation descriptor, send, and barrier interpretation
An operation family declares its method, compatible reader, acceptance policy and
interpretation barrier once. The send classifies only a fulfilled envelope; transport
rejection stays on the promise channel as the original error object, so the cutover and
delivery-unknown predicates keep working and a Promise.all group still fails fast.
Multi-request families go through a post-barrier combinator that awaits every raw request
and then interprets in declared order.
No production call site is migrated: this lands as self-contained machinery so runtime
behaviour is provably untouched.
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
* fix(mobile): require a reader for RPC result variants
* refactor(mobile): fence the raw RPC request port behind an inventoried boundary
The raw sender takes an unchecked method string and returns an envelope whose
result is `unknown`; 153 non-test files still reach it and each re-decides
acceptance and decoding for itself. The type system cannot close that today —
`RpcClient` structurally carries `sendRequest` and ~190 files hold a client — so
move the port's declaration into its own module, name it unvalidated, and hold
the boundary as a ratcheted inventory instead.
`SendRequestOptions` is re-exported from rpc-client.ts so the move touches no
call site, and rpc-operation.ts now asks for the port rather than the whole
client: it is the one module allowed to cross it.
Two ratchets, both AST-based:
- the port inventory fails on an unlisted file, a stale entry, and a listed file
whose reference count went up, so the list only shrinks;
- the cast fence bans `as`, `any` and `@ts-` suppressions in the operation
region, which is computed from the imports rather than listed, so step 4's
operation modules land inside it automatically.
Zero runtime change: no wire change, no call site touched.
Claude-Session: https://claude.ai/code/session_01JNnE9qzUZMMnqpZWCqM3nb
* merge: incorporate closed boundary and send-side types
* fix(mobile): preserve RPC decoding invariants across the combined boundary
* fix(mobile): consolidate RPC operation test imports
* refactor(mobile): simplify RPC descriptors and fence the contract module
* fix(mobile): baseline landed notification RPC callers