export interface ResolvedResultPath { /** Per-scraper directory — `{dataDir}/results/{scraperId}` */ readonly dir: string; /** Filename stem (no extension) — either ISO timestamp or sanitized outName */ readonly leafName: string; /** Full path to the .jsonl this run writes — `{dir}/{leafName}.jsonl` */ readonly filePath: string; /** Stable read path for downstream tooling — `{dir}/latest.jsonl` */ readonly latestPath: string; } export interface ResolveOptions { readonly dataDir: string; readonly scraperId: string; /** Optional stable leaf override. Empty string is treated as "not provided". */ readonly outName?: string; /** Injectable clock for deterministic tests. Defaults to `new Date()`. */ readonly now?: Date; } /** * Pure path resolver — no filesystem touched. Builds the on-disk layout * described in the spec: * data/results/{scraperId}/ * 2026-05-21T143012Z.jsonl (timestamped, default) * delhi-exhaustive.jsonl (--out override) * latest.jsonl (symlink updated by Runner on success) */ export declare function resolveResultPath(opts: ResolveOptions): ResolvedResultPath;