import type { Adapter } from "../../adapters/types.js"; import { type Conformance } from "../../query/conformance.js"; export type ConformanceResult = { ran: true; conformance: Conformance; factsSkipped?: string; } | { ran: false; skippedReason: string; }; export interface ConformanceOptions { /** * Target repo checkout root. When given, anchor/test files are resolved * against it (a `met` then means "verified against code", and missing files * become gaps). When omitted, resolution is skipped and declared anchors/tests * are trusted structurally — see `Conformance.repoResolved`. */ repoRoot?: string | undefined; /** * Adapter used to extract queue facts, so `consumes_queues` declarations can * be matched against real code. Omitted ⇒ queue obligations are not checked. */ adapter?: Adapter | undefined; /** B3 content cache dir passthrough for fact extraction (`null` disables). */ cacheDir?: string | null | undefined; } /** * `loopgraph conformance`: MODEL→CODE report card — per node, does the * implementation measure up (anchored + guarded), and where are the gaps. * * Advisory, like `coverage`/`reconcile`: the CLI layer never fails a job on it * by default (a `--strict` opt-in flips gaps into a non-zero exit for local * use). But "don't fail" must never become "report a number that isn't true", * so the same skip discipline as `runCoverage` applies: * - model dir missing/unreadable → `ran: false` (a skip, never "0 graded"). * - EVERY file failed to parse → `ran: false` for the same reason. * - SOME files failed to parse → report, carrying the count through so the * output says the numbers are a lower bound on a partial graph. * * Anchor resolution is `resolveAnchorPresence` — ONE stat, and at most one * read, per unique anchored file (never per anchor), answering both "does the * file exist" and "does it still name this symbol/text". It is the same call * `check` makes, which is the point: before Proposal 016 T6 this command * stat'd files only, so a renamed symbol left the score at `met code✓ test✓` * while `check` warned about it two lines earlier. * * Reading the files costs more than stat'ing them and still lands well inside * the deterministic tier's sub-second, zero-LLM, zero-network budget: measured * on a 60-node model over its real repo (208 anchors deduped to 88 files), the * whole resolution step is ~20ms. It scales with FILES, not anchors, which is * why the dedup in `resolveAnchorPresence` is load-bearing rather than tidy. */ export declare function runConformance(targetDir: string, options?: ConformanceOptions): Promise; //# sourceMappingURL=conformance.d.ts.map