export type ParentUpgradeOptions = { parentUpgradeIntervalMs?: number; parentUpgradeLeafOnly?: boolean; parentUpgradeMinLevelGain?: number; parentUpgradeRootMinLevelGain?: number; parentUpgradeRootMinSubtreeGain?: number; parentUpgradeNonRootMinLevelGain?: number; parentUpgradeMinFreeSlots?: number; parentUpgradeRootMinFreeSlots?: number; parentUpgradeMaxChildLoadRatio?: number; parentUpgradeRootMaxChildLoadRatio?: number; parentUpgradeCooldownMs?: number; parentUpgradeFailedBackoffMinMs?: number; parentUpgradeFailedBackoffMaxMs?: number; parentUpgradeQuietMs?: number; parentUpgradeRepairQuietMs?: number; parentUpgradeMaxPerPeer?: number; parentUpgradeRepairGuard?: boolean; parentUpgradeDataGuard?: boolean; parentUpgradeMode?: ParentUpgradeMode; parentUpgradeVerifyStaleRootCapacity?: boolean; parentUpgradeStaleRootProbeProbability?: number; parentProbeTimeoutMs?: number; parentProbeMaxPerRound?: number; parentProbeMaxLagMessages?: number; parentProbeRejectCooldownMs?: number; parentProbeRejectCooldownMaxMs?: number; parentShadowObserveMs?: number; parentShadowMinObservations?: number; parentShadowDualPathMs?: number; parentShadowDualPathMinMessages?: number; }; export type ParentUpgradeSkipReason = "leaf" | "repair" | "data" | "cooldown" | "quiet" | "budget"; export type ParentUpgradeMode = "direct" | "probe" | "shadow"; export type ParentUpgradePolicy = { intervalMs: number; leafOnly: boolean; minLevelGain: number; rootMinLevelGain: number; rootMinSubtreeGain: number; nonRootMinLevelGain: number; minFreeSlots: number; rootMinFreeSlots: number; maxChildLoadRatio: number; rootMaxChildLoadRatio: number; staleRootProbeProbability: number; cooldownMs: number; quietMs: number; repairQuietMs: number; maxPerPeer: number; repairGuard: boolean; dataGuard: boolean; mode: ParentUpgradeMode; verifyStaleRootCapacity: boolean; failedBackoff: { minMs: number; maxMs: number; }; probe: { timeoutMs: number; maxPerRound: number; maxLagMessages: number; rejectCooldownMs: number; rejectCooldownMaxMs: number; }; shadow: { observeMs: number; minObservations: number; dualPathMs: number; dualPathMinMessages: number; }; }; export type ParentUpgradeGateState = { children: { size: number; }; missingSeqs: { size: number; }; lastRepairSentAt: number; endSeqExclusive: number; parentUpgradeRetryAfterSeq: number; maxSeqSeen: number; parentUpgradeCount: number; parentUpgradeBackoffUntil: number; parentUpgradeLastAt: number; lastParentDataAt: number; lastParentUpgradeActivityAt?: number; }; export type ParentUpgradeGateOptions = { leafOnly: boolean; repairGuard: boolean; dataGuard: boolean; endedAndComplete: boolean; maxPerPeer: number; cooldownMs: number; quietMs: number; repairQuietMs: number; now: number; }; export type ParentUpgradeSkipMetrics = { reparentUpgradeSkipLeaf: number; reparentUpgradeSkipRepair: number; reparentUpgradeSkipData: number; reparentUpgradeSkipCooldown: number; reparentUpgradeSkipQuiet: number; reparentUpgradeSkipBudget: number; }; export declare const normalizeParentUpgradePolicy: (options: ParentUpgradeOptions) => ParentUpgradePolicy; export declare const evaluateParentUpgradeGate: (state: ParentUpgradeGateState, options: ParentUpgradeGateOptions) => { run: true; } | { run: false; reason: ParentUpgradeSkipReason; }; export declare const recordParentUpgradeSkip: (metrics: ParentUpgradeSkipMetrics, reason: ParentUpgradeSkipReason) => void; //# sourceMappingURL=fanout-tree-parent-upgrade.d.ts.map