/**
 * Filesystem `LabeledScenarioStore` adapter. The default capture sink for
 * traces + eval artifacts. Production deployments typically swap for a
 * Turso/SQLite adapter (same interface).
 *
 * Records land as one JSONL file per source under `<root>/<source>.jsonl`.
 * Each line is a `LabeledScenarioRecord`. Append-only — no in-place edits.
 *
 * Safety properties enforced at write-time:
 *
 *   - **Provenance required**: writes without `source`, `sourceVersionHash`,
 *     `capturedAt`, `redactionStatus` are rejected. Closes the alignment
 *     reviewer's data-poisoning gap.
 *   - **Per-source rate limits**: optional `rateLimitBucket` + `maxWritesPerMinute`
 *     stops a single tenant/source from flooding the store.
 *
 * Safety properties enforced at sample-time:
 *
 *   - **Required split + capturedBefore**: substrate refuses to sample without
 *     an explicit `split` ('train' | 'test') AND a temporal cutoff. Eliminates
 *     accidental train/test contamination.
 *   - **Default training-source filter**: when the store is sampled with
 *     `split: 'train'`, production-trace records are EXCLUDED unless the
 *     caller passes `filter.source: 'production-trace'` explicitly. Closes
 *     the contamination-by-default gap flagged by the senior eval engineer.
 */
import type { LabeledScenarioRecord, LabeledScenarioSampleArgs, LabeledScenarioStore, LabeledScenarioWrite, LabelTrust } from '../types';
export interface FsLabeledScenarioStoreOptions {
    /** Root directory for JSONL files. Created if missing. */
    root: string;
    /** Per-source rate limit. When set, writes exceeding the cap are rejected
     *  with a typed error. Default: no limit. */
    maxWritesPerMinutePerBucket?: number;
    /** Test seam — override `Date.now()` for deterministic tests. */
    now?: () => number;
}
export declare class LabeledScenarioStoreError extends Error {
    readonly code: string;
    constructor(code: string, message: string);
}
export declare class FsLabeledScenarioStore implements LabeledScenarioStore {
    private readonly options;
    private readonly now;
    private readonly rateLimits;
    constructor(options: FsLabeledScenarioStoreOptions);
    observe(write: LabeledScenarioWrite): Promise<void>;
    sample(args: LabeledScenarioSampleArgs): Promise<LabeledScenarioRecord[]>;
    size(): Promise<{
        train: number;
        test: number;
        bySource: Record<string, number>;
        byTrust: Record<LabelTrust, number>;
    }>;
    private assertProvenance;
    private assertRateLimit;
    private toRecord;
    private pathForSource;
}
//# sourceMappingURL=fs-adapter.d.ts.map