/**
 * mergeRegistry — deterministic semantic merge of two MachineRegistry objects
 * when `machines/registry.json` hits a rebase/merge conflict.
 *
 * The 2026-05-27 divergence: machine A committed a lease-epoch bump while
 * machine B concurrently committed its own join (a new `machines` entry). When
 * both push, the loser's rebase conflicts on registry.json — and GitSync's
 * `tryAutoResolve` had no registry case, so it fell to LLM/manual and the
 * mesh stayed split (A saw 1 machine, B saw 2). This merge makes that conflict
 * resolve deterministically + losslessly:
 *
 *   - machines: UNION by machineId. Never drop a machine. On a same-id clash,
 *     keep the entry with the later `lastSeen` (the fresher view), but a
 *     `revoked` status on EITHER side is sticky (a revocation must not be
 *     resurrected by a stale active entry).
 *   - lease: the higher `epoch` wins (epoch is the fencing authority clock).
 *     A same-epoch tie is broken deterministically by signature-byte lexical
 *     order, so both machines compute the identical winner without coordination.
 *   - version: max of the two (forward-compatible).
 *
 * Pure + deterministic: mergeRegistry(a,b) === mergeRegistry(b,a) for the
 * fields that matter (machines union is symmetric; lease + version pick a
 * canonical winner regardless of argument order). No I/O, never throws on
 * well-formed input.
 */
import type { MachineRegistry } from './types.js';
export declare function mergeRegistry(ours: MachineRegistry, theirs: MachineRegistry): MachineRegistry;
//# sourceMappingURL=mergeRegistry.d.ts.map