/** The retention boundary. A ledger row is prunable iff `dispatchedAt < cutoff`. * Deterministic in `now` so the boundary is unit-testable; the returned ISO * string is handed straight to the Cypher `WHERE d.dispatchedAt < $cutoff` * clause, which is this comparison lifted into the store. */ export declare function pruneCutoffIso(now: number, retentionMs: number): string; export interface PruneSessionLike { run(query: string, params?: Record): Promise<{ records: Array<{ get(key: string): unknown; }>; }>; } /** Delete every `:PassiveDispatch` older than `cutoffIso` and return the count * removed. DETACH so a stray future edge can never make the cleanup throw. */ export declare function deletePrunableDispatches(session: PruneSessionLike, cutoffIso: string): Promise; export interface PassiveDispatchPruneDeps { neo4jUri: string; neo4jUser: string; neo4jPassword: string; logger: (line: string) => void; /** Rows older than this are pruned. Must exceed the audit's windowMs. */ retentionMs: number; } /** Run one prune pass and log `op=ledger-prune removed=`. Best-effort Neo4j — * absent env or an erroring delete logs `op=unavailable` and never throws * (Neo4j may not be up at boot). `removed=0` is logged for liveness. */ export declare function emitPassiveDispatchPrune(deps: PassiveDispatchPruneDeps): Promise; export interface PassiveDispatchPrune { start(): void; stop(): void; } /** Standing periodic prune. Unref'd interval so it never holds the process open; * each tick re-emits best-effort. Mirrors createPassiveIntakeAudit. */ export declare function createPassiveDispatchPrune(deps: PassiveDispatchPruneDeps & { intervalMs: number; }): PassiveDispatchPrune; //# sourceMappingURL=passive-dispatch-prune.d.ts.map