interface GenerateOptions {
    coverageTarget?: number;
}
/**
 * Generate rubric.md markdown from spec.md content.
 */
export declare function generateRubric(incrementId: string, specContent: string, options?: GenerateOptions): string;
/**
 * Generate rubric.md and write to the increment ROOT directory.
 *
 * Writes unconditionally (overwrites). Use {@link ensureRubricFile} for the
 * idempotent, no-clobber path that respects an existing user-authored rubric.
 */
export declare function generateRubricFile(incrementId: string, incrementPath: string, options?: GenerateOptions): Promise<void>;
export interface EnsureRubricResult {
    /** Whether the root rubric.md was (re)written. */
    written: boolean;
    /** Absolute path to the root rubric.md. */
    rubricPath: string;
    /** Why generation was skipped, when `written` is false. */
    skippedReason?: 'exists-non-template' | 'no-acs';
}
export interface EnsureRubricOptions extends GenerateOptions {
    /** Overwrite an existing non-template rubric.md. Default false (no-clobber). */
    refresh?: boolean;
}
/**
 * Idempotently ensure a non-template `rubric.md` exists at the increment ROOT.
 *
 * - If a non-template root rubric.md already exists and `refresh` is false,
 *   it is left untouched (no clobber).
 * - A `status: template` placeholder is always replaced.
 * - With `refresh: true`, the rubric is regenerated from the current spec.md.
 *
 * Writing to the ROOT (not `reports/`) is intentional — the closure gate in
 * `completion-validator.ts` reads the root rubric.md.
 */
export declare function ensureRubricFile(incrementId: string, incrementPath: string, options?: EnsureRubricOptions): Promise<EnsureRubricResult>;
export {};
//# sourceMappingURL=rubric-generator.d.ts.map