/**
 * phrases — the prose grammar's CLOSED phrase packs: data, versioned and hashed.
 *
 * Pattern: plain frozen data. The matcher (`matcher.ts · matchPhrase`) is the only code that reads
 *          it, and the hash pins every number measured with it to the grammar it measured
 *          (`bench/negative/RULE.md`).
 * Role:    integrity/ layer (L3), read by `detect.ts` (claims, code and language notes) and
 *          `containment.ts` (source and window markers, unbounded words), and by the free
 *          replay (`bench/negative/`). The answer bench keeps its own registered readers, frozen;
 *          the hedge and source packs began as its lists.
 *
 * A phrase is a list of SLOTS matched against consecutive tokens of one unit, with only spaces
 * between them (so "No, the deploy…" is not "no the"):
 *   - `a|b|c`     — one token, any of the alternatives (tokens are NFC, case-folded);
 *   - a trailing `?` — the slot may be skipped;
 *   - `<word>`    — any token that starts with a letter;
 *   - `!a|b`      — any letter token EXCEPT these;
 *   - `<num>`     — digits, or a number word (`two` … `twenty`);
 *   - `<dur>`     — a look-back spelling (`24h`, `7d`);
 *   - `^`         — only at the start of the unit (first slot only).
 *
 * The packs:
 *   - `none` and `complete` — the CLAIMS: non-existence, and completeness in a frame only
 *     (never a bare "every" or "zero");
 *   - `unbounded` — words that make any claim wider than any search ("never", "anywhere");
 *   - `source` — words that put the negative on the lookup ("the lookup returned nothing"),
 *     which scope a claim to the source, as a `source.said` word does;
 *   - `window` — the window a claim names ("in the last 2 hours");
 *   - `hedge` — words that voice doubt. They are NOT scope: a hedged claim is still a flat claim
 *     (design § 5.2). The pack exists so that law is data a test can walk.
 */
/** One phrase: an id (`<pack>.<name>`) and its slots. */
export interface ClaimPhrase {
    readonly id: string;
    readonly words: readonly string[];
    /** App extensions are literal tokens, never the built-in slot language. */
    readonly literal?: true;
}
/** The six packs, by name. */
export interface NegativeClaimPhrasePacks {
    readonly none: readonly ClaimPhrase[];
    readonly complete: readonly ClaimPhrase[];
    readonly unbounded: readonly ClaimPhrase[];
    readonly source: readonly ClaimPhrase[];
    readonly window: readonly ClaimPhrase[];
    readonly hedge: readonly ClaimPhrase[];
}
/** Bump with ANY edit to the packs or to what a slot means — the test pins version → hash. */
export declare const NEGATIVE_CLAIM_PHRASES_VERSION = "1";
/** The built-in packs — closed and frozen, independent of app extensions. */
export declare const NEGATIVE_CLAIM_PHRASES: NegativeClaimPhrasePacks;
/** sha256 of the packs' stable JSON — what a measured number names. */
export declare const NEGATIVE_CLAIM_PHRASES_HASH: string;
/** Additional literal negative phrases. These extend observation only, never enforcement. */
export interface NegativeClaimPhraseExtensions {
    readonly none?: readonly string[];
    readonly complete?: readonly string[];
}
/** @internal Validated, detached and frozen effective phrase packs. */
export interface ResolvedNegativeClaimPhrases {
    readonly packs: NegativeClaimPhrasePacks;
    readonly version: string;
    readonly hash: string;
}
/** Resolve at configuration time. At most 32 literal phrases of 128 UTF-16
 * units each; regexes and the built-in slot DSL are rejected as patterns.
 * The full effective-pack hash names any extension without changing the
 * built-in version/hash or introducing executable predicates. */
export declare function resolveNegativeClaimPhrases(extensions?: NegativeClaimPhraseExtensions): ResolvedNegativeClaimPhrases;
