/** * JoinedHandle — the full-record access point for a base↔satellite pair * declared with `joined:` (#591, Task 7). Deliberately narrow (spec § The * model): get/put/delete/list/describe only, never a `Collection` cast — * reactive members (`subscribe`, `live`, …) are simply absent from the * returned object, not stubbed. * * Reads compose under existence authority (spec § Convergence & existence * authority, rule 1): the base row alone decides whether a record exists at * all — `get`/`list` check it via an undecrypted adapter read * (`isBaseLive`/`liveBaseIdSet`) before merging in the satellite side, so a * base-absent-or-tombstoned id reads as fully gone even if a satellite * envelope still lingers. Writes/deletes delegate wholesale to the Task 6 * fan-out (`joinedPut`/`pairDelete`), which already holds the pair lock and * reverts on partial failure — this module adds no write logic of its own. */ import type { JoinedHandle, SatelliteSpec } from './types.js'; import type { FanoutDeps } from './fanout.js'; export declare function makeJoinedHandle>(spec: SatelliteSpec, deps: FanoutDeps): JoinedHandle;