/** * Cross-artifact check: do requirements, design and tasks agree before code is * written? * * Pure — no I/O. It compares citations only, and reads them with the parsers * the gates already use (`parseRequirements`, `parseTasks`, `scanContent`), so * the check and the gates can never disagree about what a file says (DD2). * * A report, never a gate: nothing in `gate` or `transition` imports this * module, and the command that renders it exits 0 whatever it finds (AC-16). * Retired criteria are silent here — `aidlc amend --impact` already reports * their citations with the right reopen advice (DD4). * * Requirements: cross-artifact-check/AC-1..AC-13 */ export type Artifact = 'requirements.md' | 'design.md' | 'tasks.md'; export interface Gap { /** The artifact that holds the subject. */ from: Artifact; /** The artifact the subject is missing from, or disagrees with. */ to: Artifact; /** `AC-4` or `T7`. */ subject: string; detail: string; } export interface CrossCheckInput { instance: string; /** File content, or null when the file is missing or unreadable. */ requirements: string | null; design: string | null; tasks: string | null; } export interface CrossCheckReport { /** Set when there is nothing to check against (AC-12); gaps is then empty. */ nothingToCheck: string | null; /** Artifacts actually compared, in fixed order (AC-11). */ compared: Artifact[]; /** One line per missing artifact naming the skipped checks (AC-13). */ skipped: string[]; /** Tasks gaps, then design gaps, each ascending by id (AC-9). */ gaps: Gap[]; /** Parser near-misses, prefixed with their artifact (AC-10). */ warnings: string[]; } /** * Compare one instance's requirements, design and tasks. * * Never throws: every parser it calls is total. */ export declare function analyze(input: CrossCheckInput): CrossCheckReport; /** Render a report as the lines `aidlc cross-check` prints. */ export declare function renderReport(instance: string, report: CrossCheckReport): string[]; //# sourceMappingURL=analyze.d.ts.map