import type { MigrationRisk, MigrationStrategy, MigratableComponent, EquivalenceStatus, StackComponent } from './analysis.js';
export interface MigrationSpec {
    specId: string;
    title: string;
    sourceComponent: string;
    targetStack: string;
    applicableEquivalences: string[];
    parityChecklist: string[];
    estimatedHours: number;
    risk: MigrationRisk;
    order: number;
}
export interface CircularDependency {
    cycle: string[];
    breakStrategy: string;
}
export interface MigrationPhase {
    order: number;
    name: string;
    description: string;
    components: string[];
}
export interface MigrationPlan {
    sourceStack: string;
    targetStack: string;
    phases: MigrationPhase[];
    specs: MigrationSpec[];
    circularDependencies: CircularDependency[];
    totalEstimatedHours: number;
    riskFactor: number;
    adjustedHours: number;
    generatedAt: string;
}
export interface StranglerFigProxy {
    description: string;
    routingRules: ProxyRoutingRule[];
    implementation: string;
}
export interface ProxyRoutingRule {
    module: string;
    migrated: boolean;
    routeTo: 'old' | 'new';
    condition: string;
}
export interface ParallelRunComparator {
    description: string;
    endpoints: string[];
    tolerances: Record<string, number>;
    nonIdempotentEndpoints: string[];
    excludedFromShadow: string[];
}
export interface MigrationStrategyResult {
    recommended: MigrationStrategy;
    reasoning: string;
    alternatives: {
        strategy: MigrationStrategy;
        reason: string;
    }[];
    stranglerProxy?: StranglerFigProxy;
    parallelComparator?: ParallelRunComparator;
    riskLevel: MigrationRisk;
}
export interface ParityCheckItem {
    category: 'endpoints' | 'request-schema' | 'response-schema' | 'error-codes' | 'side-effects';
    description: string;
    status: 'pending' | 'verified' | 'regression' | 'intentional-change';
    notes?: string;
}
export interface ContractTest {
    endpoint: string;
    method: string;
    sampleInput: Record<string, unknown>;
    expectedOutputPattern: Record<string, unknown>;
    tolerances: string[];
}
export interface ParityValidationResult {
    component: string;
    checklist: ParityCheckItem[];
    contractTests: ContractTest[];
    regressions: string[];
    intentionalChanges: string[];
    validatedAt: string;
}
export interface EquivalenceEntry {
    sourceLib: string;
    targetLib: string;
    category: StackComponent['type'];
    status: EquivalenceStatus;
    differences: string[];
    notes?: string;
}
export interface SortResult {
    order: string[];
    cycles: CircularDependency[];
}
export interface StrategyInput {
    componentCount: number;
    hasActiveUsers: boolean;
    hasHighSla: boolean;
    hasCriticalData: boolean;
    migratableComponents: MigratableComponent[];
    entryPoints: string[];
}
//# sourceMappingURL=planning.d.ts.map