/** * Emit machine-readable registries from a compiled IR. * * Schemas: * - docs/spec/registry/commands.schema.json * - docs/spec/registry/entities.schema.json * * Manifest emits these as the inventory surface for any governed * downstream application; CI gates (`manifest audit-governance`) read them * to enforce route drift, missing-tests, and bypass-violation rules. * * Validation: this module emits pure data; the CLI (`manifest emit * registries`) is responsible for Ajv validation against the JSON schemas * to keep the runtime/IR core free of validator dependencies. */ import type { IR } from '../ir'; export type EntityClassification = 'governed' | 'read_only_projection' | 'infrastructure' | 'bypass_allowed' | 'unknown_nonconforming'; export interface CommandRegistryEntry { entity: string; command: string; commandId: string; policies: string[]; guardCount: number; emits: string[]; effects: string[]; } export interface EntityRegistryEntry { name: string; classification: EntityClassification; tenantScoped: boolean; commands: string[]; properties: string[]; } export interface CommandRegistry { irHash: string; compilerVersion: string; commands: CommandRegistryEntry[]; } export interface EntityRegistry { irHash: string; compilerVersion: string; entities: EntityRegistryEntry[]; } /** * Sentinel entity name used for module-level commands that do not declare an * owning entity. They appear in the registry under this synthetic name. */ export declare const UNOWNED_ENTITY_NAME = "__unowned__"; export declare function emitRegistries(ir: IR): { commands: CommandRegistry; entities: EntityRegistry; }; //# sourceMappingURL=emit.d.ts.map