/** * Registry verdict overlay — Layer 1 of the replacement oracle. The * cloudformation-diff verdict (Layer 0) is computed from a stale bundled CDK * resource spec and is retained only as the trigger; every changed property * path is recomputed against the live registry catalogue * (`createOnlyProperties` / `conditionalCreateOnlyProperties`): * * path ∈ createOnly → `will` (destructive) * path ∈ conditionalCreateOnly → `conditional` (destructive worst-case, * pending the Phase 3 change-set escalation) * path in NEITHER → `none` — even where cloudformation-diff * said WILL_REPLACE (kills the false * AWS::RDS::DBInstance.Port replacement) * * Nested-path conservatism: cloudformation-diff reports top-level property * names, so a change to a property with a createOnly SUB-pointer * (`/properties/Foo/Bar`) is `conditional`, never silently `none`. * * Fail-closed degradation: when the oracle is unavailable for a type, the * original diff verdict stands, annotated `verdictSource: "cdk-spec * (unverified)"` — the oracle never fails the deploy. * * Every Layer-0 / Layer-1 disagreement is logged as stale-spec telemetry. */ import type { CfnRegistrySchemaSummary } from "../../../services/infrastructure/CfnRegistryService.js"; import type { CfnRegistrySummaryReader } from "../../../services/infrastructure/CfnRegistryService.js"; import type { ReplacementMode } from "../../../types/deployEvent.js"; import type { StackTemplatePair } from "./buildDeployPlan.js"; import type { DeployPlan, DeployPlanResourceChange } from "./types.js"; type RegistryPathVerdict = "will" | "conditional" | "none"; /** * Advisory interruption notes for in-place updates that still disrupt service. * Keyed `#`. Display-only — never gates. * Exported for the probe-parity pin: any note teaching "pin it" must name a * pair `pinProbeCoverage` covers, or the note teaches a consent the * destruction gate would halt as unprobeable. */ export declare const INTERRUPTION_NOTES: Readonly>; /** Recompute one changed top-level property's verdict from the catalogue. */ export declare function registryVerdictForProperty(propertyName: string, summary: CfnRegistrySchemaSummary): RegistryPathVerdict; /** A Layer-0 vs Layer-1 disagreement — logged as stale-spec telemetry. */ export interface RegistryVerdictDisagreement { stack: string; address: string; resourceType: string; cdkSpecMode: ReplacementMode; registryMode: ReplacementMode; /** The changed property paths whose verdicts drove the registry mode. */ paths: string[]; } export interface OverlayResourceChangeResult { change: DeployPlanResourceChange; disagreement?: RegistryVerdictDisagreement; } /** * Pure per-row recomputation. `summary === undefined` means the oracle was * unavailable — the diff verdict stands, annotated unverified. */ export declare function overlayResourceChange(change: DeployPlanResourceChange, summary: CfnRegistrySchemaSummary | undefined, templateProperties: Record | undefined): OverlayResourceChangeResult; /** Per-action tally — shared with the change-set escalation's recount. */ export declare function recountActions(changes: readonly DeployPlanResourceChange[]): { create: number; update: number; replace: number; delete: number; read: number; "no-op": number; }; export interface ApplyRegistryOverlayParams { plan: DeployPlan; registry: CfnRegistrySummaryReader; /** The diffed template pairs — pinned-name detection reads Properties. */ stacks: readonly StackTemplatePair[]; abortSignal?: AbortSignal; } /** * Apply the registry overlay to a computed plan. Never throws and never * fails the plan: unavailable summaries degrade per-row to * `"cdk-spec (unverified)"`. Summaries are fetched once per distinct resource * type (the service memoises per run underneath). */ export declare function applyRegistryOverlay(params: ApplyRegistryOverlayParams): Promise; export {};