import type { HarneryRegisteredStorageFamily } from "./contract.js"; import type { HarneryLogMetricsDelta } from "./metrics.js"; export interface HarneryLogSegmentV1 { sequence: number; file: string; bytes: number; records: number; first_emitted_at?: string; last_emitted_at?: string; sealed_at: string; sha256: string; } export interface HarneryLogManifestV1 { schema: "harnery.log-manifest/v1"; family_id: string; policy_version: string; /** Highest lifetime sequence intentionally expired by retention. */ pruned_through_sequence?: number; next_sequence: number; segments: readonly HarneryLogSegmentV1[]; } export interface PruneSealedLogSegmentOptions { directory: string; family: HarneryRegisteredStorageFamily; sequence: number; file: string; expected_bytes: number; /** Digest of the compressed file at the exact target path. */ expected_file_sha256: string; /** Digest of the uncompressed JSONL recorded by the manifest. */ expected_content_sha256: string; /** Semantic fingerprint of the exact manifest state frozen at planning. */ expected_manifest_fingerprint: string; /** Semantic fingerprint of the reduced manifest committed by this action. */ result_manifest_fingerprint: string; lease_timeout_ms?: number; lease_retry_ms?: number; lease_stale_ms?: number; /** Fault-injection seam after the manifest commit and before unlink. */ after_manifest_commit?: () => void; } export interface SegmentAppendOptions { directory: string; family: HarneryRegisteredStorageFamily; max_segment_bytes?: number; max_open_age_ms?: number; minimum_day_segment_bytes?: number; lease_timeout_ms?: number; lease_retry_ms?: number; lease_stale_ms?: number; /** Fault-injection seam; production callers use the default syscall. */ write_sync?: SegmentWriteSync; } export type SegmentWriteSync = (fd: number, buffer: Buffer, offset: number, length: number) => number; export interface SegmentAppendResult { appended_records: number; appended_bytes: number; rotated: boolean; synced: boolean; } export declare class HarneryLogLeaseError extends Error { readonly reason: "timeout" | "wrong_type" | "invalid_owner"; constructor(reason: "timeout" | "wrong_type" | "invalid_owner", message: string); } export declare function familyLogDirectory(family: HarneryRegisteredStorageFamily): string; export declare class FileSegmentSink { #private; constructor(options: SegmentAppendOptions); append(records: readonly Buffer[], metrics?: HarneryLogMetricsDelta, durable?: boolean, now?: Date): Promise; } export declare function readSegmentManifest(directory: string, family?: HarneryRegisteredStorageFamily): HarneryLogManifestV1; export declare function logManifestFingerprint(manifest: HarneryLogManifestV1): string; /** * Expire exactly the oldest retained segment. The manifest is authoritative, * so it commits before unlink. Replays cover all four crash states without * ever accepting an absent source from an old manifest. */ export declare function pruneSealedLogSegment(options: PruneSealedLogSegmentOptions): Promise<"applied" | "already_applied">; export declare function withFamilyLease(directory: string, policy: { lease_timeout_ms: number; lease_retry_ms: number; lease_stale_ms: number; }, operation: () => Promise | T): Promise; //# sourceMappingURL=segments.d.ts.map