09047ec69c
Client half of #91684. The approval bar (approval.tsx) and the native notification action path (native-notifications.ts) sent approval.respond on the AMBIENT gateway socket. Ambient follows foreground focus; for an approval raised by a cross-profile or tile-owned session it points at a backend that never held the approval, so Run/Reject silently failed after a profile swap or reconnect. - New knownOwnerForSession/requestForOwnedSession in store/session-states.ts: resolve the owner sync (tile owner route -> known session profile via row or open-time hint; runtime ids translated to stored ids first) and dispatch via requestForSessionProfile. Ambient only when no owner is known — never a fall-back to "active". - approval.tsx and native-notifications.ts respond through it, binding the ambient dispatcher so the no-owner path keeps the exact 2-arg call shape. - Tests: owner resolution (tile route first, row-profile fallback, undefined for unknown/null) and ambient arity preservation in session-states.test.ts; existing approval + native-notification suites still pass unchanged on the ambient path. Maintainer commit (cluster salvage).