/** * 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