import { type FunnelContractDiagnostic } from '../validation/funnel-contract-diagnostics.js'; export type StepContractV2MigrationSourceKind = 'manifest' | 'component'; export type StepContractV2MigrationField = 'id' | 'name' | 'type' | 'kind' | 'choice'; export type StepContractV2MigrationRule = 'remove-default-kind' | 'add-name-from-id' | 'restore-reserved-step' | 'sync-manifest-from-component' | 'sync-component-from-manifest'; export type StepContractV2NormalizedMetadata = Readonly<{ id: unknown; name: unknown; type: unknown; kind: unknown; choice: unknown; }>; export type StepContractV2UniqueMetadataSource = { status: 'unique'; sourceId: string; file: string; metadata: StepContractV2NormalizedMetadata; }; export type StepContractV2AmbiguousMetadataSource = { status: 'computed' | 'spread' | 'dynamic' | 'multiple' | 'missing'; sourceId: string; file: string; }; export type StepContractV2MetadataSource = StepContractV2UniqueMetadataSource | StepContractV2AmbiguousMetadataSource; export type StepContractV2MigrationStepInput = { stepKey: string; manifest: StepContractV2MetadataSource; component: StepContractV2MetadataSource; optionIds: 'stable' | 'ambiguous' | 'not-applicable'; }; export type StepContractV2MigrationInput = { steps: readonly StepContractV2MigrationStepInput[]; }; export type StepContractV2MigrationOperation = { source: StepContractV2MigrationSourceKind; sourceId: string; stepKey: string; stepId: string | null; field: StepContractV2MigrationField; action: 'set' | 'remove'; before: unknown; after: unknown; rule: StepContractV2MigrationRule; }; export type StepContractV2MigrationPlan = { operations: readonly StepContractV2MigrationOperation[]; protectedChanges: readonly StepContractV2MigrationOperation[]; diagnostics: readonly FunnelContractDiagnostic[]; valid: boolean; }; export declare const planStepContractV2Migration: (input: StepContractV2MigrationInput) => StepContractV2MigrationPlan;