/** * Red-line catalog — the 5 P0 red lines shipped in L2.1, plus the marker * patterns that the classifier uses to discover them in markdown. * * The catalog is hand-maintained. New enforcers (L2.2/2.3/2.4) add entries * here and the backing-detector picks them up automatically. */ import type { RedLineMarker } from './types.js'; export interface RedLineCatalogEntry { /** Stable id, e.g. "rl-code-ban-001". */ readonly id: string; readonly rule: string; /** Markers that, if found near the rule's text, identify this red line. */ readonly markers: readonly RedLineMarker[]; /** Substring(s) that must appear in the surrounding ±2 lines. */ readonly phrases: readonly string[]; /** Relative path to the enforcement file (or null when prose-only). */ readonly enforcerRef: string | null; } export declare const RED_LINE_CATALOG: readonly RedLineCatalogEntry[]; /** * Catalog entries for enforcers whose source code is shipped in this slice * but whose integration is deferred to subsequent slices (L2.1.1 or later). * * The backing-detector downgrades these to `prose-only` at runtime because * the integration seam is missing. When the integration lands, the entry * is removed from this set in a single-line follow-up commit. * * L2.1 final state: Tasks 5 (code-ban) + 6 (no-root-pollution) are * wired into peaks hook handle (Tasks 1-4: framework + 3 enforcers also * integrated). Tasks 3 (tech-doc-presence) and 4 (mock-placement) are * deferred — their request-transition / slice-check integrations are * tracked separately. */ export declare const DEFERRED_ENFORCERS: ReadonlySet; /** * A red line's catalog id is the join key. If a discovered red line in a * markdown file matches no catalog entry, it stays as `prose-only`. * * Match policy: phrase-only for identity. Markers (MANDATORY / BLOCKING / * MUST NOT / RED LINE) are too generic to disambiguate — every catalog * entry shares the same marker set, so a marker-only match would always * return the first catalog entry regardless of the rule. * * Deferred enforcers (Tasks 4-6 integration pending) are matched by * phrase but tagged with enforcerRef=null so the backing-detector * downgrades them to prose-only at runtime. They are NOT removed from * the catalog so future integration commits can re-tag them with a * single source-of-truth change. */ export declare function findCatalogEntry(rule: string, _markers: readonly RedLineMarker[]): RedLineCatalogEntry | null;