/** * Where a per-service cap sits between what the plan keeps and what it moves. * * Both figures are the container's statements at their busiest window, in * the unit the cap is written in. The cap sits at the geometric mean of the * largest kept statement and the smallest moved one, so each side has the * same ratio of margin: the kept statement can grow by that factor before it * is held, and the moved one is that factor above the limit. When the * smallest moved statement is no busier than the largest kept one, no cap * separates them; the cap stays at the largest kept statement and the plan * says so. */ export interface ServiceCapPlacement { /** The cap, in the unit of its inputs. */ cap: number; keptMax: number; movedMin?: number; /** True when the cap sits strictly between the two. */ separated: boolean; /** cap / keptMax, which equals movedMin / cap, when separated. */ margin?: number; } export declare function placeServiceCap(keptMax: number, movedMin: number | undefined): ServiceCapPlacement; /** "1.6x", no trailing zero. */ export declare function fmtMargin(m: number): string; /** * The margin in the reader's terms, one sentence per service, or undefined * when the service keeps nothing or moves nothing. */ export declare function marginSentence(service: string, p: Pick, keptNoun: string): string | undefined;