/**
 * The default deterministic post-check rule set (mmnto-ai/totem#2103, strategy#474
 * slice 4). Each rule is zero-LLM and returns a verdict at its STATIC tier; the
 * aggregator ({@link evaluatePostChecks}) owns rejection. Rule decomposition
 * follows the cohort pre-build round (codex): the OutputContract's three knobs
 * (`schema` / `citationsRequired` / `verifyFallback`) are distinct
 * responsibilities, not one rule.
 *
 * Helpers (containment, citation extraction, line-range) are exported for
 * direct unit testing — they are the load-bearing edge-case surface (agy).
 */
import { type PostCheckRule } from './post-checks.js';
/**
 * Is `citedPath` a relative path nested inside `configRoot`? Rejects absolute
 * paths and Windows drive-letters up front, normalizes separators BEFORE
 * resolving (win32: `src\..\..\etc/passwd` must not slip), then requires the
 * resolved path to stay under the root (agy review on mmnto-ai/totem#2103).
 */
export declare function isContained(configRoot: string, citedPath: string): boolean;
/** A parsed citation token: the path plus an optional 1-indexed line or line range. */
export interface Citation {
    raw: string;
    filePath: string;
    line?: number;
    endLine?: number;
}
/**
 * Conservatively extract `path` / `path:line` / `path:start-end` citations from
 * backticked spans in `content`. Strips fenced code blocks first (their sample
 * paths / command logs would false-fail), and ignores backticked tokens that
 * carry neither a path separator nor a known extension — so `` `main` `` /
 * `` `pnpm test` `` are not treated as citations (agy review on mmnto-ai/totem#2103).
 */
export declare function extractCitations(content: string): Citation[];
/**
 * Is a citation's line reference valid against a file of `totalLines` lines?
 * Path-only citations (no line) always pass the line check. 1-indexed; a range
 * requires `0 < start <= end <= totalLines` (agy boundary matrix).
 */
export declare function lineRefValid(totalLines: number, line?: number, endLine?: number): boolean;
/**
 * Structured-output contract (decidable, all callers). Absent `schema` ⇒
 * abstain (prose output is never treated as malformed JSON). Present ⇒
 * `output.content` must parse as JSON; non-JSON is a decidable fail. NOTE: deep
 * JSON-Schema shape validation is a follow-on — core carries no validator
 * dependency this slice, so the gate is parse-only (codex review: "non-JSON is
 * a decidable fail").
 */
export declare const structuredOutputRule: PostCheckRule;
/**
 * Citation resolution (decidable). Gates only when the caller declared
 * `citationsRequired`. For each cited path: must be in-root, the file must
 * exist, and any line reference must be in range. For a `review` run, a citation
 * outside the delivered grounding bundle is also a fail (review cites what it was
 * given). Claim *support* (does the cited text back the claim) stays sensor-only
 * — out of scope here (ADR-109).
 *
 * Intentional overlap (CR #2177 review): on a `spec` run with `citationsRequired`,
 * an unresolved path is ALSO flagged by spec-verify — both correctly fail it, so the
 * report can carry two decidable findings for one path. The rules are independent by
 * design (different escapes: spec-verify owns the `VERIFY:` fallback, this owns
 * line-range + bundle membership); de-duplicating overlapping decidable fails belongs
 * at the live-wiring / aggregation layer (#2104), not by coupling rules in this slice.
 */
export declare const citationResolvesRule: PostCheckRule;
/**
 * Spec VERIFY requirement (decidable, caller `spec`). A spec that references a
 * path which does not resolve on disk must mark it with `VERIFY:` — otherwise it
 * is a fabricated path (the mmnto-ai/totem#2090/#2091 class). `VERIFY:` is accepted
 * as the escape UNLESS the caller set `outputContract.verifyFallback === false`
 * (the verify-fallback knob, folded here where `VERIFY:` is actually consumed —
 * codex review).
 */
export declare const specVerifyRule: PostCheckRule;
/**
 * Override-memory reappearance (decidable, caller `review`). A finding the
 * operator dispositioned (rejected) must not reappear in a later review. The
 * anchored-span key format lives in the store (mmnto-ai/totem#2105); this rule only
 * asks the injected {@link OverrideSet} whether any reappears. Absent store ⇒
 * abstain (the rule no-ops until #2105 wires a store).
 */
export declare const overrideReappearanceRule: PostCheckRule;
/**
 * Provenance fail-safe-down sensor (SENSOR, all grounded runs; mmnto-ai/totem#2101
 * F2 rider, enforcement test rides #2103). A grounding item whose `provenance`
 * is not a canonical class is surfaced as NOT-upgraded (lowest trust). SENSOR
 * tier: it is telemetry and can NEVER gate — an invented class must not confer,
 * nor deny, trust by gating.
 */
export declare const provenanceSensorRule: PostCheckRule;
/** The default rule set, in execution order. */
export declare const DEFAULT_RULES: readonly PostCheckRule[];
//# sourceMappingURL=post-checks-rules.d.ts.map