import { type AcceptanceDecision } from "../baseline-evidence/acceptance.js"; import { type BaselineCatalogId } from "../baseline-evidence/catalogs.js"; import type { BaselineEvidenceLock } from "../baseline-evidence/schema.js"; import type { BaselineAuthorization } from "../baseline-evidence/verify.js"; import type { Posture } from "../config/posture.js"; export interface InstallablePostureResult { installed: number; installedComponentIds: string[]; held: Array<{ componentId: string; codes: string[]; }>; ledgerPath: string; previewEscapes: string[]; previewSkippedReason?: string; } export interface InstallableCatalogReport { pin: string; profile: string; qualifiedProfiles: string[]; postures: Record; ok: boolean; } export interface InstallableBaselineReport { catalogs: Record; ok: boolean; } export interface CheckInstallableBaselineInput { /** Vendor evidence lock to evaluate (e.g. the shipped `vendor-lock.json` or a frozen fixture). */ lock: BaselineEvidenceLock; /** Restrict every install to throwaway fixture HOMEs/projects; never the real dev seat. */ fixtureOnly?: boolean; /** Target CLI to record in the fixture registration ledger. */ cli?: string; /** Signed accepted-with-conditions decisions; defaults to the shipped artifact. */ acceptanceDecisions?: readonly AcceptanceDecision[]; } /** Order-sensitive string-array equality; reused for both path lists and sorted component-id lists. */ export declare function samePaths(left: readonly string[], right: readonly string[]): boolean; /** * Per-catalog, per-posture pass criteria (issue #438; each branch is pinned with tests). * * - Catalogs with an installer runtime (ECC today): byte-for-byte the original ECC criterion — at * least one authorized component, the installer runtime itself authorized, the fixture ledger * matches the authorized set, every held component is named with codes, and no install-preview * destination escapes the fixture. * - Catalogs without an installer runtime (Superpowers today): zero authorized components is a * LEGAL, GREEN state — honestly-blocked evidence is a truthful report, not a gate failure. The * gate only turns red when the fixture ledger disagrees with what evidence authorized, a held * component is missing its codes, or a held component's code names missing/drifted evidence * (`baseline.evidence-missing` / `baseline.evidence-mismatch`). Preview-escape findings gate * every catalog that ships a preview artifact, independent of the installer requirement. */ export declare function postureOkForCatalog(input: { catalogId: BaselineCatalogId; authorizations: readonly BaselineAuthorization[]; held: ReadonlyArray<{ componentId: string; codes: string[]; }>; ledgerMatches: boolean; previewEscapeCount: number; }): boolean; /** * Run the shipped baseline evidence through a real fixture-HOME install gate, for every catalog in * `BASELINE_CATALOG_IDS` and every posture, and report per-catalog whether the pinned lock installs * a useful, ledger-backed component set (issue #438: every catalog is evaluated, not just ECC). * Overall `ok` is true only when every catalog's `ok` is true; see `postureOkForCatalog` for the * per-catalog pass criteria. */ export declare function checkInstallableBaseline(input: CheckInstallableBaselineInput): Promise;