import type { SeoReport, SeoWorkflow } from "./types.js"; /** * Derive a write-once, collision-free `reportId` from `now` + `workflow` + * a short hash of `target`. PURE — never reads the clock itself (`now` is * caller-injected). `now` is sanitized into a filename-safe slug (mirrors * `buildAuditDescriptor`'s slug, `security-audit.ts:78`); `target` is * hashed (not embedded raw) so an arbitrary target string can never break * the id shape or collide across two different targets. */ export declare function deriveReportId(now: string, workflow: SeoWorkflow, target: string): string; export declare class SeoReportStore { /** * Write `report` atomically (temp file + POSIX-atomic rename) under * `.bober/seo/reports/`. Overwrites any existing report with the same * `reportId`. Throws on an unrecoverable fs failure — callers (the * runner) are expected to catch and fail closed. */ save(projectRoot: string, report: SeoReport): Promise; /** * Read a persisted `SeoReport` by id. Returns `null` on a missing file — * NEVER throws (mirrors `readSecurityAudit`, `security-audit-state.ts:51-55`). */ read(projectRoot: string, reportId: string): Promise; /** * List all persisted report ids, sorted by filename. Returns `[]` if the * reports directory does not exist — never throws. */ list(projectRoot: string): Promise; } //# sourceMappingURL=report-store.d.ts.map