/**
 * Binder Victim → Server Root-cause Chain (Spark Plan 12)
 *
 * Joins client-side and server-side binder transactions and walks the chain
 * back to the deepest blocker, producing a `BinderRootCauseChainContract`.
 *
 * Inputs are deliberately minimal: a flat list of hops keyed by transaction
 * id, plus per-hop `blockedOn` strings the caller derives from
 * thread_state aggregations. The walker just sequences hops and picks the
 * leaf when one exists; otherwise it marks the chain truncated rather than
 * inventing a root cause.
 */
import { type BinderRootCauseChainContract } from '../types/sparkContracts';
export interface BinderHopInput {
    step: number;
    side: 'client' | 'server';
    pid: number;
    tid: number;
    process?: string;
    thread?: string;
    method?: string;
    startNs: number;
    endNs: number;
    blockedOn?: string;
    evidenceArtifactId?: string;
}
export interface BuildBinderChainOptions {
    victim: BinderHopInput;
    /** Server-side hops in step order (closest hop first). */
    chain: BinderHopInput[];
}
/**
 * Build the full chain. The deepest hop becomes `rootCause`; if every hop
 * is blocked on something but there is still a downstream hop pending,
 * the contract is marked truncated.
 */
export declare function buildBinderRootCauseChain(options: BuildBinderChainOptions): BinderRootCauseChainContract;
//# sourceMappingURL=binderRootCauseChain.d.ts.map