/**
 * 回退路由 — 管线阶段间回退目标路由。
 *
 * 管理两类管线回退路径:
 * 新系统: 架构设计→需求分析, 任务规划→架构设计, 详细设计→需求分析, 编码与单元测试→详细设计, 代码审查→编码与单元测试, 联调验证→架构设计
 * 老系统: 架构设计→现有系统分析, 任务规划→架构设计, 现有系统分析→需求分析, 详细设计→架构设计, 编码与单元测试→架构设计, 代码审查→编码与单元测试, 联调验证→编码与单元测试
 */
import { debug } from "../core/logger.js";
/** 新系统回退路径 */
const NEW_SYSTEM_ROLLBACKS = [
    { from_stage: "架构设计", to_stage: "需求分析", kind: "rollback_annotate", reason_zh: "架构设计发现需求不明确，标注待确认项回退" },
    { from_stage: "任务规划", to_stage: "架构设计", kind: "rollback_annotate", reason_zh: "任务规划发现架构设计有缺陷，需补充设计" },
    { from_stage: "详细设计", to_stage: "需求分析", kind: "rollback_annotate", reason_zh: "详细设计发现逻辑死角，标注原型说明等人确认" },
    { from_stage: "编码与单元测试", to_stage: "详细设计", kind: "rollback", reason_zh: "编码过程中发现设计接口不合理" },
    { from_stage: "代码审查", to_stage: "编码与单元测试", kind: "rollback", reason_zh: "代码审查发现严重问题，需重新编码" },
    { from_stage: "联调验证", to_stage: "架构设计", kind: "rollback", reason_zh: "联调暴露严重设计缺陷，需重新评审系统底座" },
];
/** 老系统回退路径 */
const EXISTING_SYSTEM_ROLLBACKS = [
    { from_stage: "架构设计", to_stage: "现有系统分析", kind: "rollback_annotate", reason_zh: "架构设计发现现有系统分析不充分，需补充走查" },
    { from_stage: "任务规划", to_stage: "架构设计", kind: "rollback_annotate", reason_zh: "任务规划发现架构设计有缺陷，需补充设计" },
    { from_stage: "现有系统分析", to_stage: "需求分析", kind: "rollback", reason_zh: "走查发现老链路有重大系统崩溃风险" },
    { from_stage: "详细设计", to_stage: "架构设计", kind: "rollback_annotate", reason_zh: "详细设计发现架构不完整，需补充" },
    { from_stage: "编码与单元测试", to_stage: "架构设计", kind: "rollback", reason_zh: "编码时发现老代码严重耦合无法单独测试" },
    { from_stage: "代码审查", to_stage: "编码与单元测试", kind: "rollback", reason_zh: "代码审查发现严重问题，需重新编码" },
    { from_stage: "联调验证", to_stage: "编码与单元测试", kind: "rollback", reason_zh: "小流量试运行监控指标飙升，触发一键开关回退" },
];
/**
 * 根据当前阶段和系统类型解析回退目标。
 */
export function resolveRollbackTarget(currentStage, systemType, reason) {
    const rollbacks = systemType === "老系统"
        ? EXISTING_SYSTEM_ROLLBACKS
        : NEW_SYSTEM_ROLLBACKS;
    const target = rollbacks.find((r) => r.from_stage === currentStage);
    if (target) {
        debug("回退路由", "解析回退目标, 从=%s 到=%s 类型=%s 原因=%s", target.from_stage, target.to_stage, target.kind, reason ?? target.reason_zh);
    }
    else {
        debug("回退路由", "无可用的回退目标, 阶段=%s 系统类型=%s", currentStage, systemType);
    }
    return target ?? null;
}
/**
 * 执行回退，返回目标阶段和指令。
 */
export function executeRollback(currentStage, systemType, reason) {
    const target = resolveRollbackTarget(currentStage, systemType, reason);
    if (!target)
        return null;
    return {
        directive: target.kind === "rollback_annotate" ? "回退并标注" : "回退",
        target_stage: target.to_stage,
        reason_zh: reason ?? target.reason_zh,
    };
}
//# sourceMappingURL=rollback_router.js.map