/**
 * CMP.3 — compression-candidate collector (wedge extension, Seam 1).
 *
 * Authoritative spec: `docs/tasks/T-compression.md` CMP.3 + pre-research
 * §3 Seam 1 (`docs/research/T-compression-pre-research-2026-05-27.md`).
 *
 * The locked design: compression IS lesson-formation, so it rides the
 * SAME wedge cadence. After a lesson is PROMOTED (Stage 2), the memory
 * ids cited in that lesson's causal narrative (the engine's
 * `EvidenceRef::Memory` evidence refs, surfaced via `lesson.promote`'s
 * `cited_memory_ids`) are nominated as compression candidates: those
 * memories have now "earned a gist" by contributing to a graduated
 * lesson. The orchestrator (CMP.4) later reads these windows — gated by
 * the satisfaction probe (CMP.2) — and compresses them.
 *
 * OFF THE CRITICAL PATH: a candidate-collection failure must NEVER fail
 * or delay a lesson promotion. The caller wraps `collectCandidates` in a
 * best-effort try/catch; this module itself only ever appends to a
 * buffer (it does not promote, delete, or call the engine).
 *
 * Dedup: ids within a single window are deduped; the orchestrator
 * additionally dedups across windows in a group when it reads.
 *
 * Storage: `~/.opensquid/sessions/<sessionId>/compression-candidates.jsonl`
 * (OPENSQUID_HOME-overridable so tests isolate to a mkdtemp). Same
 * append-only automation-buffer pattern as the satisfaction probe.
 *
 * Imports from: node:fs/promises, node:path, ../paths.js.
 * Imported by: src/functions/lessons.ts (emit after promote);
 *   src/runtime/compression_orchestrator.ts (read path, CMP.4).
 */
/**
 * One compression-candidate window: the memory ids cited by a promoted
 * lesson, keyed by the feature group so the orchestrator can release
 * them when that group's satisfaction probe comes back "satisfied".
 */
export interface CompressionCandidateWindow {
    group: string;
    ids: string[];
    promotedLessonId: string;
    collected_at: string;
}
/** Buffer path. OPENSQUID_HOME-aware so tests isolate to mkdtemp. */
export declare function candidatesBufferPath(sessionId: string): string;
/**
 * Collect a promoted lesson's cited memory ids into a candidate window
 * appended to the per-session buffer. NO-OP when the lesson cites no
 * memories (no window emitted — nothing to compress). Ids are deduped
 * within the window. Append-only; never blocks; never touches the
 * engine.
 */
export declare function collectCandidates(sessionId: string, lesson: {
    id: string;
    citedMemoryIds: string[];
    group: string;
}, nowIso?: () => string): Promise<void>;
/**
 * Read the candidate windows for `group` — what the orchestrator
 * (CMP.4) consumes. `[]` on absent/malformed buffer (fail-closed →
 * nothing to compress).
 */
export declare function readCandidates(sessionId: string, group: string): Promise<CompressionCandidateWindow[]>;
//# sourceMappingURL=compress_candidates.d.ts.map