/** * Arch-rules check (Phase 3) — runs the emitted architecture-rule config * against the target project during implement-stage verification. * * The config is generated by pi-chirpi (`arch-rules.ts`) and lives in the * target project: `.dependency-cruiser.json` (TS/JS) or `.importlinter` * (Python). This module never installs the tools: when the tool is absent * the check reports toolAvailable=false so the caller can warn-and-continue * with an honest message instead of silently skipping. */ export type ArchRulesTool = "dependency-cruiser" | "import-linter"; export interface ArchRulesResult { /** An emitted config file exists in the project root. */ configFound: boolean; tool: ArchRulesTool | null; /** Project-relative config path when found. */ configPath: string | null; toolAvailable: boolean; /** The tool actually ran (config found + tool available). */ ran: boolean; violations: string[]; } export type ArchRulesExecFn = (cmd: string, args: string[], cwd: string) => Promise<{ code: number; output: string; }>; /** Run the emitted arch-rules config when the matching tool is installed. * The exec function is injectable so tests can mock the runner instead of * installing dependency-cruiser / import-linter. */ export declare function checkArchRules(cwd: string, execFn?: ArchRulesExecFn): Promise;