/**
 * Lane coherence / domain-spread signal (TRL-117 AC5).
 *
 * Reuses Idea Garden context-switch affinity (directory overlap) applied live
 * to a single lane journal. When spread > 1 domain, suggest `lane split`.
 */
import type { LaneMeta } from './lane.js';
import type { VcsOp } from './types.js';
export interface LaneDomain {
    /** Stable label for display (dir affinity, issue, or lane name). */
    label: string;
    /** Files in this affinity group. */
    files: string[];
    /** How the domain was derived. */
    source: 'affinity' | 'issue' | 'name' | 'intent';
}
export interface LaneCoherence {
    domainCount: number;
    domains: LaneDomain[];
    repoCount: number;
    repos: string[];
    /** True when more than one domain affinity group is present. */
    suggestSplit: boolean;
    reason?: string;
}
/** Partition consecutive file ops into directory-affinity groups (Garden heuristic). */
export declare function partitionFileOpsByAffinity(ops: VcsOp[]): VcsOp[][];
/** Infer repo roots touched by relative / absolute / parent paths. */
export declare function inferReposFromPaths(filePaths: string[]): string[];
/**
 * Live coherence report for one lane.
 * Domain spread > 1 → suggest `trellis lane split`.
 */
export declare function analyzeLaneCoherence(meta: LaneMeta, ops: VcsOp[], filePaths: string[]): LaneCoherence;
//# sourceMappingURL=lane-coherence.d.ts.map