/** * API-lib tag validator (two-way) * * Keeps the `role:api-lib` tag and the CODE in sync, both directions: * - a project tagged `role:api-lib` MUST export ≥1 API contract (an `abstract class` carrying * `@ApiPath`/`@Rpc`/`@PubSub`) — else the tag is a lie; * - a project that DOES export such a contract MUST be tagged `role:api-lib` — else the arch * graph, the edge line-styles, and validate-api-relations can't treat it as an api-lib. * * "Exports an API contract" is answered by the same source scan that owns apiRelations * (scan.apiLibProjects), so the tag can never drift from the code. */ import { ProjectInfo } from '../project-info'; import { ApiScanResult } from './api-scanner'; /** * A tag/code mismatch: * - 'missing-tag' — exports an API contract but is not tagged role:api-lib. * - 'unnecessary-tag' — tagged role:api-lib but exports no API contract. */ export interface ApiLibTagViolation { project: string; kind: 'missing-tag' | 'unnecessary-tag'; } /** Both-directions tag ⇔ code check. Uses the scan's detected api-lib set as ground truth. */ export declare function findApiLibTagViolations(projectInfos: Map, scan: ApiScanResult): ApiLibTagViolation[]; /** Human-readable, fix-oriented report for one tag/code mismatch. */ export declare function describeApiLibTagViolation(violation: ApiLibTagViolation): string;