/** Subset of `gh pr list --json` output we use. */
export interface ClaimPr {
    number: number;
    title: string;
    headRefName?: string;
    updatedAt?: string;
    state?: string;
    files?: Array<{
        path: string;
    }>;
}
export interface ClaimCheckOutput {
    write(text: string): void;
    error(text: string): void;
}
/** Injectable `gh` boundary so the command is unit-testable without the network. */
export interface ClaimCheckDeps {
    /** Run a `gh` invocation and return its parsed JSON stdout (or throw). */
    ghJson(args: string[]): Promise<unknown>;
    /** Read a spec dir; injectable for tests. Defaults to fs. */
    readSpecs?(specsDir: string): Array<{
        file: string;
        head: string;
    }>;
}
export interface DevClaimCheckOptions {
    /** Files you intend to touch (relative to repo root). */
    paths: string[];
    /** Optional keywords to match against docs/specs titles/headers. */
    keywords?: string[];
    /** Look-back window for merged PRs, in days (default 2). */
    mergedDays?: number;
    repo?: string;
    /** Exit 1 when any overlap is found. */
    strict?: boolean;
    /** Repo root for the spec scan (default cwd). */
    rootDir?: string;
    output?: ClaimCheckOutput;
    deps?: ClaimCheckDeps;
}
export interface PrOverlap {
    pr: ClaimPr;
    overlap: string[];
    bucket: 'open' | 'merged';
}
/**
 * Pure: which of `prs` touch any of `targetPaths`?
 * Overlap is exact-path OR directory-prefix in either direction, so claiming
 * `src/core/` collides with a PR touching `src/core/SecretStore.ts` and vice
 * versa.
 */
export declare function findPrOverlaps(targetPaths: string[], prs: ClaimPr[], bucket: 'open' | 'merged'): PrOverlap[];
export interface SpecMatch {
    file: string;
    matched: string[];
}
/**
 * Pure: which spec heads mention any of the keywords (case-insensitive)?
 * Word-ish matching: a keyword hits on substring presence — specs are prose,
 * precision matters less than recall here (the reader judges relevance).
 */
export declare function findSpecMatches(specs: Array<{
    file: string;
    head: string;
}>, keywords: string[]): SpecMatch[];
/** Default spec reader: head of every .md directly under docs/specs/. */
export declare function readSpecHeads(specsDir: string): Array<{
    file: string;
    head: string;
}>;
/**
 * Run the claim check. Returns the process exit code.
 */
export declare function runDevClaimCheck(options: DevClaimCheckOptions): Promise<number>;
//# sourceMappingURL=devClaimCheck.d.ts.map