import type { NarrativeQaReport, ReleaseGateReport, SimulationRunResult, } from '../../types'; export function buildReleaseGateReport(params: { qaReport: NarrativeQaReport | null | undefined; simulationResults: SimulationRunResult[]; unresolvedThreadCount: number; }) { const issueCount = params.qaReport?.issues.length ?? 0; const blockingIssues = [ ...(params.qaReport?.issues.filter((issue) => issue.severity === 'high').map((issue) => issue.summary) ?? []), ...(params.unresolvedThreadCount > 5 ? ['活跃线程过多,可能会导致结局收束不稳。'] : []), ]; const status = blockingIssues.length > 0 ? 'block' : issueCount > 0 ? 'warn' : 'pass'; return { generatedAt: new Date().toISOString(), status, summary: status === 'pass' ? '当前版本通过 narrative release gate。' : status === 'warn' ? '当前版本可继续观察,但仍有若干 narrative 风险。' : '当前版本存在 narrative 阻断问题,不建议发布。', blockingIssues, simulationCoverage: params.simulationResults.length, } satisfies ReleaseGateReport; }