@resolveio/server-lib 22.3.189 → 22.3.191

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/ai-run-evidence.ts"],"names":[],"mappings":"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","file":"ai-run-evidence.js","sourcesContent":["export type AIRunSource =\n\t| 'support_ticket'\n\t| 'aicoder_app'\n\t| 'ai_assistant'\n\t| 'qa_runner'\n\t| 'unknown';\n\nexport type AIRunOutcomeLabel =\n\t| 'accepted'\n\t| 'rejected'\n\t| 'qa_incomplete'\n\t| 'qa_infra_failed'\n\t| 'build_failed'\n\t| 'release_blocked'\n\t| 'manual_handoff'\n\t| 'false_pass'\n\t| 'stopped'\n\t| 'unknown';\n\nexport type AIRunEventType =\n\t| 'model_call'\n\t| 'log'\n\t| 'qa_infra'\n\t| 'qa_compile'\n\t| 'qa_route_probe'\n\t| 'qa_business_assertion'\n\t| 'scorecard'\n\t| 'deploy'\n\t| 'publish'\n\t| 'hotfix'\n\t| 'assistant_message'\n\t| 'assistant_query'\n\t| 'git_commit'\n\t| 'usage'\n\t| 'human_intervention';\n\nexport type AIRunGateStatus = 'pass' | 'fail' | 'warn' | 'blocked' | 'skipped';\n\nexport type AIQaCheckStatus = 'pass' | 'fail' | 'blocked' | 'warn' | 'skipped' | 'unknown';\n\nexport type AIQaCompileStatus = 'pass' | 'fail' | 'blocked' | 'stale' | 'skipped' | 'unknown';\n\nexport type AIQaOutcome =\n\t| 'infra_failed'\n\t| 'compile_failed'\n\t| 'route_failed'\n\t| 'route_only_pass'\n\t| 'business_assertion_passed'\n\t| 'business_assertion_failed'\n\t| 'incomplete';\n\nexport interface AIRunEvent {\n\tid?: string;\n\ttype: AIRunEventType;\n\tsource?: AIRunSource | string;\n\tmessage?: string;\n\tcategory?: string;\n\tartifactPaths?: string[];\n\tmetadata?: Record<string, any>;\n\trecordedAt?: Date | string;\n}\n\nexport interface AIRunGateResult {\n\tkey: string;\n\tlabel: string;\n\tstatus: AIRunGateStatus;\n\treason: string;\n\tevidenceRefs: string[];\n\trecordedAt: string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIRunCost {\n\tinputTokens: number;\n\tcachedInputTokens: number;\n\toutputTokens: number;\n\ttotalTokens: number;\n\testimatedUsd: number;\n\tmodels: string[];\n\tcategories: Record<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tsources?: Record<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t\tmanualCount: number;\n\t\tuntrackedCount: number;\n\t}>;\n\tsurfaces?: Record<string, {\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tmanualEstimatedUsd?: number;\n\tuntrackedEstimatedUsd?: number;\n\tuntrackedWarnings?: string[];\n\twallTimeMs?: number;\n\tretries?: number;\n}\n\nexport interface OpenAIUsageCostEntry {\n\tmodel?: string;\n\tcategory?: string;\n\tid_request?: string;\n\tidRequest?: string;\n\tid_conversation?: string;\n\tidConversation?: string;\n\ttimestamp?: Date | string;\n\tinput_tokens?: number;\n\tinputTokens?: number;\n\tcached_input_tokens?: number;\n\tcachedInputTokens?: number;\n\toutput_tokens?: number;\n\toutputTokens?: number;\n\ttotal_tokens?: number;\n\ttotalTokens?: number;\n\tcost_estimate?: number;\n\testimatedUsd?: number;\n\tusage_source?: string;\n\tusageSource?: string;\n\tusage_surface?: string;\n\tusageSurface?: string;\n\tusage_phase?: string;\n\tusagePhase?: string;\n\tcost_basis?: string;\n\tcostBasis?: string;\n\tis_manual?: boolean;\n\tisManual?: boolean;\n\tis_untracked?: boolean;\n\tisUntracked?: boolean;\n\tuntracked_reason?: string;\n\tuntrackedReason?: string;\n\t[key: string]: any;\n}\n\nexport interface AIQaInfraCheck {\n\tname: string;\n\tstatus: AIQaCheckStatus;\n\tmessage?: string;\n\tpath?: string;\n\tdurationMs?: number;\n\tmetadata?: Record<string, any>;\n\tcheckedAt?: Date | string;\n}\n\nexport interface AIQaCompileResult {\n\tstatus: AIQaCompileStatus;\n\tcommand?: string;\n\tartifactPath?: string;\n\tmessage?: string;\n\tdurationMs?: number;\n\tstaleEvidence?: boolean;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaRouteProbe {\n\troute: string;\n\tstatus: AIQaCheckStatus;\n\tscreenshot?: string;\n\tcaption?: string;\n\tshellOnly?: boolean;\n\tauthenticated?: boolean;\n\tconsoleErrors?: string[];\n\tnetworkErrors?: string[];\n\tmessage?: string;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaBusinessAssertion {\n\tassertion: string;\n\tstatus: AIQaCheckStatus;\n\tworkflow?: string;\n\troute?: string;\n\taction?: string;\n\texpected?: string;\n\tobserved?: string;\n\tdataProof?: string;\n\tmongoDelta?: Record<string, any>;\n\tartifactPaths?: string[];\n\tmessage?: string;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaArtifact {\n\ttype: 'screenshot' | 'trace' | 'console_log' | 'network_log' | 'coverage_matrix' | 'seed_data' | 'script' | 'other';\n\tpath?: string;\n\turl?: string;\n\ttitle?: string;\n\tcaption?: string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaRun {\n\toutcome: AIQaOutcome;\n\tinfraChecks: AIQaInfraCheck[];\n\tcompile?: AIQaCompileResult;\n\trouteProbes: AIQaRouteProbe[];\n\tbusinessAssertions: AIQaBusinessAssertion[];\n\tartifacts: AIQaArtifact[];\n\tgateResults: AIRunGateResult[];\n\tupdatedAt: string;\n}\n\nexport interface AIRun {\n\tid?: string;\n\tsource: AIRunSource;\n\tsourceIds: Record<string, string>;\n\ttitle?: string;\n\tstatus?: string;\n\tphase?: string;\n\tstartedAt?: Date | string;\n\tcompletedAt?: Date | string;\n\toutcome: AIRunOutcomeLabel;\n\tevents: AIRunEvent[];\n\tgates: AIRunGateResult[];\n\tqa?: AIQaRun;\n\tcost?: AIRunCost;\n\tnextAction?: string;\n\twarnings?: string[];\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIRunTrainingExample {\n\trunId: string;\n\tsource: AIRunSource;\n\tinputSummary: string;\n\tactionSummary: string;\n\toutcome: AIRunOutcomeLabel;\n\tevidence: string[];\n\tcost?: AIRunCost;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaEvaluationInput {\n\tinfraChecks?: AIQaInfraCheck[];\n\tcompile?: AIQaCompileResult;\n\trouteProbes?: AIQaRouteProbe[];\n\tbusinessAssertions?: AIQaBusinessAssertion[];\n\tartifacts?: AIQaArtifact[];\n\tnow?: Date | string;\n}\n\nexport interface AIRunOutcomeInput {\n\tsource?: AIRunSource;\n\tstatus?: string;\n\tphase?: string;\n\tqa?: AIQaRun | AIQaEvaluationInput;\n\tgates?: AIRunGateResult[];\n\tscorecardPassed?: boolean;\n\tscorecardStatus?: string;\n\tdeployStatus?: string;\n\tpublishStatus?: string;\n\tsampleDataStatus?: string;\n\tmanualHandoff?: boolean;\n\tstopped?: boolean;\n\trejected?: boolean;\n\texplicitAccepted?: boolean;\n\tterminal?: boolean;\n\tnow?: Date | string;\n}\n\nexport interface AIRunOutcomeDecision {\n\toutcome: AIRunOutcomeLabel;\n\treason: string;\n\tnextAction: string;\n\tgates: AIRunGateResult[];\n\twarnings: string[];\n\trecordedAt: string;\n}\n\nfunction isoNow(value?: Date | string): string {\n\tif (value instanceof Date) {\n\t\treturn value.toISOString();\n\t}\n\tconst parsed = value ? new Date(value) : new Date();\n\tif (Number.isFinite(parsed.getTime())) {\n\t\treturn parsed.toISOString();\n\t}\n\treturn new Date().toISOString();\n}\n\nfunction cleanText(value: any, max = 1000): string {\n\treturn String(value || '').replace(/\\s+/g, ' ').trim().slice(0, max);\n}\n\nfunction cleanUsageNumber(value: any): number {\n\tconst parsed = Number(value);\n\treturn Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction cleanUsageDate(value: any): Date | undefined {\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\tconst date = value instanceof Date ? value : new Date(value);\n\treturn Number.isFinite(date.getTime()) ? date : undefined;\n}\n\nexport function isCumulativeCodexUsageEntry(entry: OpenAIUsageCostEntry): boolean {\n\treturn cleanText(entry?.category, 180).toLowerCase().startsWith('ai-dashboard-codex:');\n}\n\nexport function resolveOpenAIUsageThreadKey(entry: OpenAIUsageCostEntry): string {\n\tconst conversationId = cleanText(entry?.id_conversation ?? entry?.idConversation, 240);\n\tif (conversationId) {\n\t\treturn conversationId;\n\t}\n\treturn cleanText(entry?.id_request ?? entry?.idRequest, 240);\n}\n\nexport function normalizeOpenAIUsageRowsForCosting<T extends OpenAIUsageCostEntry>(rows: T[] = []): T[] {\n\tif (!Array.isArray(rows) || !rows.length) {\n\t\treturn [];\n\t}\n\tconst sortedRows = rows\n\t\t.map((row, index) => ({\n\t\t\t...row,\n\t\t\t_sortIndex: index\n\t\t}))\n\t\t.sort((a, b) => {\n\t\t\tconst timeA = cleanUsageDate(a.timestamp)?.getTime() || 0;\n\t\t\tconst timeB = cleanUsageDate(b.timestamp)?.getTime() || 0;\n\t\t\tif (timeA !== timeB) {\n\t\t\t\treturn timeA - timeB;\n\t\t\t}\n\t\t\tconst requestCompare = cleanText(a.id_request ?? a.idRequest, 240)\n\t\t\t\t.localeCompare(cleanText(b.id_request ?? b.idRequest, 240));\n\t\t\tif (requestCompare) {\n\t\t\t\treturn requestCompare;\n\t\t\t}\n\t\t\tconst conversationCompare = cleanText(a.id_conversation ?? a.idConversation, 240)\n\t\t\t\t.localeCompare(cleanText(b.id_conversation ?? b.idConversation, 240));\n\t\t\tif (conversationCompare) {\n\t\t\t\treturn conversationCompare;\n\t\t\t}\n\t\t\treturn cleanUsageNumber(a._sortIndex) - cleanUsageNumber(b._sortIndex);\n\t\t});\n\tconst previousByThread = new Map<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t}>();\n\treturn sortedRows.map((row) => {\n\t\tconst inputTokens = cleanUsageNumber(row.input_tokens ?? row.inputTokens);\n\t\tconst cachedInputTokens = cleanUsageNumber(row.cached_input_tokens ?? row.cachedInputTokens);\n\t\tconst outputTokens = cleanUsageNumber(row.output_tokens ?? row.outputTokens);\n\t\tconst totalTokens = cleanUsageNumber(row.total_tokens ?? row.totalTokens ?? (inputTokens + outputTokens));\n\t\tconst estimatedUsd = cleanUsageNumber(row.cost_estimate ?? row.estimatedUsd);\n\t\tconst threadKey = isCumulativeCodexUsageEntry(row) ? resolveOpenAIUsageThreadKey(row) : '';\n\t\tlet normalizedInputTokens = inputTokens;\n\t\tlet normalizedCachedInputTokens = cachedInputTokens;\n\t\tlet normalizedOutputTokens = outputTokens;\n\t\tlet normalizedTotalTokens = totalTokens;\n\t\tlet normalizedEstimatedUsd = estimatedUsd;\n\t\tif (threadKey) {\n\t\t\tconst previous = previousByThread.get(threadKey);\n\t\t\tif (previous\n\t\t\t\t&& inputTokens >= previous.inputTokens\n\t\t\t\t&& cachedInputTokens >= previous.cachedInputTokens\n\t\t\t\t&& outputTokens >= previous.outputTokens\n\t\t\t\t&& totalTokens >= previous.totalTokens\n\t\t\t\t&& estimatedUsd >= previous.estimatedUsd\n\t\t\t) {\n\t\t\t\tnormalizedInputTokens = Math.max(0, inputTokens - previous.inputTokens);\n\t\t\t\tnormalizedCachedInputTokens = Math.max(0, cachedInputTokens - previous.cachedInputTokens);\n\t\t\t\tnormalizedOutputTokens = Math.max(0, outputTokens - previous.outputTokens);\n\t\t\t\tnormalizedTotalTokens = Math.max(0, totalTokens - previous.totalTokens);\n\t\t\t\tnormalizedEstimatedUsd = Math.max(0, estimatedUsd - previous.estimatedUsd);\n\t\t\t}\n\t\t\tpreviousByThread.set(threadKey, {\n\t\t\t\tinputTokens,\n\t\t\t\tcachedInputTokens,\n\t\t\t\toutputTokens,\n\t\t\t\ttotalTokens,\n\t\t\t\testimatedUsd\n\t\t\t});\n\t\t}\n\t\tconst resolvedTotalTokens = normalizedTotalTokens || (normalizedInputTokens + normalizedOutputTokens);\n\t\tconst resolvedEstimatedUsd = Number(normalizedEstimatedUsd.toFixed(6));\n\t\treturn {\n\t\t\t...row,\n\t\t\tinput_tokens: normalizedInputTokens,\n\t\t\tinputTokens: normalizedInputTokens,\n\t\t\tcached_input_tokens: normalizedCachedInputTokens,\n\t\t\tcachedInputTokens: normalizedCachedInputTokens,\n\t\t\toutput_tokens: normalizedOutputTokens,\n\t\t\toutputTokens: normalizedOutputTokens,\n\t\t\ttotal_tokens: resolvedTotalTokens,\n\t\t\ttotalTokens: resolvedTotalTokens,\n\t\t\tcost_estimate: resolvedEstimatedUsd,\n\t\t\testimatedUsd: resolvedEstimatedUsd\n\t\t} as T;\n\t});\n}\n\nfunction cleanList(values: any, limit = 20, max = 500): string[] {\n\tif (!Array.isArray(values)) {\n\t\treturn [];\n\t}\n\tconst result: string[] = [];\n\tfor (const value of values) {\n\t\tconst normalized = cleanText(value, max);\n\t\tif (normalized && !result.includes(normalized)) {\n\t\t\tresult.push(normalized);\n\t\t}\n\t\tif (result.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction normalizeCheckStatus(value: any): AIQaCheckStatus {\n\tconst normalized = cleanText(value, 40).toLowerCase().replace(/[_\\s-]+/g, '_');\n\tif (normalized === 'passed' || normalized === 'ok' || normalized === 'ready') {\n\t\treturn 'pass';\n\t}\n\tif (normalized === 'failed' || normalized === 'error' || normalized === 'fail') {\n\t\treturn 'fail';\n\t}\n\tif (normalized === 'blocked' || normalized === 'dependency_blocked') {\n\t\treturn 'blocked';\n\t}\n\tif (normalized === 'warning') {\n\t\treturn 'warn';\n\t}\n\tif (normalized === 'skipped' || normalized === 'not_applicable') {\n\t\treturn 'skipped';\n\t}\n\treturn normalized === 'pass' || normalized === 'warn' ? normalized : 'unknown';\n}\n\nfunction normalizeCompileStatus(value: any): AIQaCompileStatus {\n\tconst normalized = cleanText(value, 40).toLowerCase().replace(/[_\\s-]+/g, '_');\n\tif (normalized === 'passed' || normalized === 'ok') {\n\t\treturn 'pass';\n\t}\n\tif (normalized === 'failed' || normalized === 'error') {\n\t\treturn 'fail';\n\t}\n\tif (normalized === 'blocked') {\n\t\treturn 'blocked';\n\t}\n\tif (normalized === 'stale' || normalized === 'stale_evidence') {\n\t\treturn 'stale';\n\t}\n\tif (normalized === 'skipped' || normalized === 'not_applicable') {\n\t\treturn 'skipped';\n\t}\n\treturn normalized === 'pass' || normalized === 'fail' ? normalized : 'unknown';\n}\n\nfunction makeGate(\n\tkey: string,\n\tlabel: string,\n\tstatus: AIRunGateStatus,\n\treason: string,\n\tevidenceRefs: string[] = [],\n\tnow?: Date | string,\n\tmetadata?: Record<string, any>\n): AIRunGateResult {\n\treturn {\n\t\tkey,\n\t\tlabel,\n\t\tstatus,\n\t\treason: cleanText(reason, 1400),\n\t\tevidenceRefs: cleanList(evidenceRefs, 20, 500),\n\t\trecordedAt: isoNow(now),\n\t\t...(metadata ? { metadata } : {})\n\t};\n}\n\nfunction failedOrBlocked(status: AIQaCheckStatus | AIQaCompileStatus): boolean {\n\treturn status === 'fail' || status === 'blocked';\n}\n\nfunction passed(status: AIQaCheckStatus | AIQaCompileStatus): boolean {\n\treturn status === 'pass';\n}\n\nfunction normalizeInfraChecks(values: AIQaInfraCheck[] | undefined): AIQaInfraCheck[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\tname: cleanText(entry?.name, 120) || 'infra_check',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tmessage: cleanText(entry?.message, 1000),\n\t\tpath: cleanText(entry?.path, 500)\n\t}));\n}\n\nfunction normalizeRouteProbes(values: AIQaRouteProbe[] | undefined): AIQaRouteProbe[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\troute: cleanText(entry?.route, 500) || '/',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tscreenshot: cleanText(entry?.screenshot, 500),\n\t\tcaption: cleanText(entry?.caption, 1000),\n\t\tmessage: cleanText(entry?.message, 1000),\n\t\tconsoleErrors: cleanList(entry?.consoleErrors, 30, 500),\n\t\tnetworkErrors: cleanList(entry?.networkErrors, 30, 500)\n\t}));\n}\n\nfunction normalizeBusinessAssertions(values: AIQaBusinessAssertion[] | undefined): AIQaBusinessAssertion[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\tassertion: cleanText(entry?.assertion, 1000) || 'business assertion',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tworkflow: cleanText(entry?.workflow, 400),\n\t\troute: cleanText(entry?.route, 500),\n\t\taction: cleanText(entry?.action, 500),\n\t\texpected: cleanText(entry?.expected, 1000),\n\t\tobserved: cleanText(entry?.observed, 1000),\n\t\tdataProof: cleanText(entry?.dataProof, 1400),\n\t\tartifactPaths: cleanList(entry?.artifactPaths, 30, 500),\n\t\tmessage: cleanText(entry?.message, 1000)\n\t}));\n}\n\nfunction collectBusinessAssertionArtifactPaths(assertions: AIQaBusinessAssertion[]): string[] {\n\tconst paths: string[] = [];\n\tfor (const assertion of assertions) {\n\t\tfor (const artifactPath of assertion.artifactPaths || []) {\n\t\t\tif (artifactPath && !paths.includes(artifactPath)) {\n\t\t\t\tpaths.push(artifactPath);\n\t\t\t}\n\t\t}\n\t}\n\treturn paths;\n}\n\nexport function buildAIQaRun(input: AIQaEvaluationInput = {}): AIQaRun {\n\tconst now = isoNow(input.now);\n\tconst infraChecks = normalizeInfraChecks(input.infraChecks);\n\tconst compile = input.compile\n\t\t? {\n\t\t\t...input.compile,\n\t\t\tstatus: normalizeCompileStatus(input.compile.status),\n\t\t\tcommand: cleanText(input.compile.command, 500),\n\t\t\tartifactPath: cleanText(input.compile.artifactPath, 500),\n\t\t\tmessage: cleanText(input.compile.message, 1000)\n\t\t}\n\t\t: undefined;\n\tconst routeProbes = normalizeRouteProbes(input.routeProbes);\n\tconst businessAssertions = normalizeBusinessAssertions(input.businessAssertions);\n\tconst artifacts = Array.isArray(input.artifacts) ? input.artifacts : [];\n\tconst gateResults: AIRunGateResult[] = [];\n\n\tconst failedInfra = infraChecks.filter((check) => failedOrBlocked(check.status));\n\tif (failedInfra.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_infra',\n\t\t\t'QA infrastructure',\n\t\t\t'blocked',\n\t\t\t`QA infrastructure failed before model/business validation: ${failedInfra.map((check) => `${check.name}: ${check.message || check.status}`).join('; ')}`,\n\t\t\tfailedInfra.map((check) => check.path || '').filter(Boolean),\n\t\t\tnow,\n\t\t\t{ failed_checks: failedInfra.map((check) => check.name) }\n\t\t));\n\t\treturn { outcome: 'infra_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (infraChecks.length) {\n\t\tgateResults.push(makeGate('qa_infra', 'QA infrastructure', 'pass', 'QA infrastructure preflight checks passed.', [], now));\n\t}\n\n\tif (compile && (failedOrBlocked(compile.status) || compile.status === 'stale' || compile.staleEvidence === true)) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_compile',\n\t\t\t'Compile/build',\n\t\t\t'fail',\n\t\t\tcompile.status === 'stale' || compile.staleEvidence === true\n\t\t\t\t? 'Compile/build evidence is stale and cannot be used for acceptance.'\n\t\t\t\t: (compile.message || 'Compile/build failed before browser QA.'),\n\t\t\tcompile.artifactPath ? [compile.artifactPath] : [],\n\t\t\tnow,\n\t\t\t{ command: compile.command || '' }\n\t\t));\n\t\treturn { outcome: 'compile_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (compile && passed(compile.status)) {\n\t\tgateResults.push(makeGate('qa_compile', 'Compile/build', 'pass', 'Compile/build evidence passed.', compile.artifactPath ? [compile.artifactPath] : [], now));\n\t}\n\n\tconst failedRouteProbes = routeProbes.filter((probe) => failedOrBlocked(probe.status) || probe.shellOnly === true);\n\tif (failedRouteProbes.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_route_probe',\n\t\t\t'Browser route probe',\n\t\t\t'fail',\n\t\t\t`Browser route probe failed or showed shell-only UI: ${failedRouteProbes.map((probe) => `${probe.route}: ${probe.message || probe.caption || probe.status}`).join('; ')}`,\n\t\t\tfailedRouteProbes.map((probe) => probe.screenshot || '').filter(Boolean),\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'route_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (routeProbes.some((probe) => passed(probe.status))) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_route_probe',\n\t\t\t'Browser route probe',\n\t\t\t'pass',\n\t\t\t'Browser route reached authenticated application content. This is not business acceptance by itself.',\n\t\t\trouteProbes.map((probe) => probe.screenshot || '').filter(Boolean),\n\t\t\tnow\n\t\t));\n\t}\n\n\tconst failedBusinessAssertions = businessAssertions.filter((assertion) => failedOrBlocked(assertion.status));\n\tif (failedBusinessAssertions.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'fail',\n\t\t\t`Issue-specific workflow assertion failed: ${failedBusinessAssertions.map((assertion) => assertion.message || assertion.observed || assertion.assertion).join('; ')}`,\n\t\t\tcollectBusinessAssertionArtifactPaths(failedBusinessAssertions),\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'business_assertion_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tconst passedBusinessAssertions = businessAssertions.filter((assertion) => passed(assertion.status));\n\tif (passedBusinessAssertions.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'pass',\n\t\t\t'At least one issue-specific workflow/data assertion passed.',\n\t\t\tcollectBusinessAssertionArtifactPaths(passedBusinessAssertions),\n\t\t\tnow,\n\t\t\t{ passed_assertions: passedBusinessAssertions.map((assertion) => assertion.assertion) }\n\t\t));\n\t\treturn { outcome: 'business_assertion_passed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tif (routeProbes.some((probe) => passed(probe.status))) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'blocked',\n\t\t\t'Browser route loaded, but no issue-specific business assertion passed. Route-only proof cannot accept the run.',\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'route_only_pass', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tgateResults.push(makeGate(\n\t\t'qa_business_assertion',\n\t\t'Business assertion',\n\t\t'blocked',\n\t\t'No issue-specific QA assertion was recorded.',\n\t\t[],\n\t\tnow\n\t));\n\treturn { outcome: 'incomplete', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n}\n\nfunction normalizeQaRun(input?: AIQaRun | AIQaEvaluationInput): AIQaRun | undefined {\n\tif (!input) {\n\t\treturn undefined;\n\t}\n\tif ((input as AIQaRun).outcome && Array.isArray((input as AIQaRun).gateResults)) {\n\t\treturn input as AIQaRun;\n\t}\n\treturn buildAIQaRun(input as AIQaEvaluationInput);\n}\n\nfunction statusLooksFailed(value: any): boolean {\n\tconst normalized = cleanText(value, 120).toLowerCase();\n\treturn !!normalized && /(fail|failed|error|blocked|missing|empty|stale|skipped|not ready|not_ready|could not|cannot)/i.test(normalized);\n}\n\nfunction statusLooksPassed(value: any): boolean {\n\tconst normalized = cleanText(value, 120).toLowerCase();\n\treturn !!normalized && /(pass|passed|success|complete|completed|ready|published|deployed|live|merged)/i.test(normalized);\n}\n\nfunction addGateOnce(gates: AIRunGateResult[], gate: AIRunGateResult): void {\n\tif (gates.some((entry) => entry.key === gate.key && entry.status === gate.status && entry.reason === gate.reason)) {\n\t\treturn;\n\t}\n\tgates.push(gate);\n}\n\nexport function classifyAIRunOutcome(input: AIRunOutcomeInput = {}): AIRunOutcomeDecision {\n\tconst now = isoNow(input.now);\n\tconst gates = Array.isArray(input.gates) ? [...input.gates] : [];\n\tconst warnings: string[] = [];\n\tconst qa = normalizeQaRun(input.qa);\n\tif (qa) {\n\t\tfor (const gate of qa.gateResults) {\n\t\t\taddGateOnce(gates, gate);\n\t\t}\n\t}\n\n\tif (input.manualHandoff === true) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: 'Run requires manual handoff.',\n\t\t\tnextAction: 'Ask a human operator to resolve the blocked run.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (input.stopped === true || /stop|stopped|cancel|cancelled|paused/i.test(`${input.status || ''} ${input.phase || ''}`)) {\n\t\treturn {\n\t\t\toutcome: 'stopped',\n\t\t\treason: 'Run was stopped before accepted evidence was recorded.',\n\t\t\tnextAction: 'Resume or restart only if the request is still active.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (input.rejected === true) {\n\t\treturn {\n\t\t\toutcome: 'rejected',\n\t\t\treason: 'Run was explicitly rejected.',\n\t\t\tnextAction: 'Start a repair run from the failing evidence.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst blockedHotfixCommitGate = gates.find((gate) => gate.key === 'hotfix_commit_proof' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (blockedHotfixCommitGate) {\n\t\treturn {\n\t\t\toutcome: 'release_blocked',\n\t\t\treason: `Hotfix cannot be treated as durable until GitHub commit proof passes: ${blockedHotfixCommitGate.reason}`,\n\t\t\tnextAction: 'Commit and push the hotfix to GitHub, record sourceCommitSha/githubCommitUrl/gitCommitStatus/gitPushStatus, then rerun the smallest release gate.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedNoBlindLoopGate = gates.find((gate) => gate.key === 'manager_no_blind_loop_policy' && gate.status === 'blocked');\n\tif (blockedNoBlindLoopGate) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Manager parked the run to avoid a blind loop: ${blockedNoBlindLoopGate.reason}`,\n\t\t\tnextAction: 'Collect new material evidence or approve the specific recovery decision before any more model/code repair.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportDiagnosisBeforeRepairGate = gates.find((gate) => gate.key === 'support_diagnosis_before_repair' && gate.status === 'blocked');\n\tif (blockedSupportDiagnosisBeforeRepairGate) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Support repair is parked until root-cause diagnosis validates: ${blockedSupportDiagnosisBeforeRepairGate.reason}`,\n\t\t\tnextAction: 'Run read-only support diagnosis, record support_diagnosis_gate with owner_files and before/action/after proof, then retry only the owner-scoped repair.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (qa?.outcome === 'infra_failed') {\n\t\treturn {\n\t\t\toutcome: 'qa_infra_failed',\n\t\t\treason: 'QA infrastructure failed before product validation.',\n\t\t\tnextAction: 'Repair QA harness dependencies, ports, browser, Mongo, or startup before another model repair loop.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'compile_failed') {\n\t\treturn {\n\t\t\toutcome: 'build_failed',\n\t\t\treason: 'Compile/build evidence failed or was stale.',\n\t\t\tnextAction: 'Repair compile/build first, then rerun QA from the same failed step.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'route_failed') {\n\t\treturn {\n\t\t\toutcome: 'qa_incomplete',\n\t\t\treason: 'Browser route probe failed before business proof.',\n\t\t\tnextAction: 'Repair route/auth/startup issue and rerun the same browser route probe.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedAICoderJourneyContractGate = gates.find((gate) => gate.key === 'aicoder_journey_contract' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (blockedAICoderJourneyContractGate) {\n\t\tconst claimedSuccess = input.explicitAccepted === true || input.scorecardPassed === true || statusLooksPassed(input.scorecardStatus) || statusLooksPassed(`${input.status || ''} ${input.phase || ''}`);\n\t\treturn {\n\t\t\toutcome: claimedSuccess ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: claimedSuccess\n\t\t\t\t? `AICoder run claimed success without a valid Journey Contract: ${blockedAICoderJourneyContractGate.reason}`\n\t\t\t\t: `AICoder workflow is blocked until the Journey Contract validates: ${blockedAICoderJourneyContractGate.reason}`,\n\t\t\tnextAction: 'Generate or repair docs/APP_JOURNEY_CONTRACT.md, validate first/next/last workflow/data story/QA assertions, then rerun workflow build and workflow QA.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportNextActionContractGate = gates.find((gate) => gate.key === 'support_next_action_contract' && gate.status === 'blocked');\n\tif (\n\t\tblockedSupportNextActionContractGate\n\t\t&& qa?.outcome !== 'business_assertion_passed'\n\t\t&& input.scorecardPassed !== true\n\t\t&& !statusLooksPassed(input.scorecardStatus)\n\t) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Support manager cannot safely continue without a valid next-action contract: ${blockedSupportNextActionContractGate.reason}`,\n\t\t\tnextAction: 'Record one validated next-action contract with safeToAutoRun, canRunWithoutCodexMonitor, codexFallbackRequired, preconditions, stop conditions, and success evidence before another autonomous recovery.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportIssueClassProbePlanGate = gates.find((gate) => gate.key === 'support_issue_class_probe_plan' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (input.source === 'support_ticket' && blockedSupportIssueClassProbePlanGate) {\n\t\tconst claimedSuccess = input.explicitAccepted === true\n\t\t\t|| input.scorecardPassed === true\n\t\t\t|| statusLooksPassed(input.scorecardStatus)\n\t\t\t|| statusLooksPassed(`${input.status || ''} ${input.phase || ''}`);\n\t\treturn {\n\t\t\toutcome: claimedSuccess ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: claimedSuccess\n\t\t\t\t? `Support run claimed success without a valid issue-class probe plan: ${blockedSupportIssueClassProbePlanGate.reason}`\n\t\t\t\t: `Support business proof is blocked until the issue-class probe plan validates: ${blockedSupportIssueClassProbePlanGate.reason}`,\n\t\t\tnextAction: 'Generate or repair the Support IssueClassProbePlan from the diagnosis proof_plan, then rerun issue-specific business proof QA.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'route_only_pass' || qa?.outcome === 'incomplete') {\n\t\treturn {\n\t\t\toutcome: input.scorecardPassed === true ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: input.scorecardPassed === true\n\t\t\t\t? 'Scorecard or workflow status passed without issue-specific business assertion proof.'\n\t\t\t\t: 'QA has not recorded issue-specific business assertion proof.',\n\t\t\tnextAction: 'Add before/action/after workflow proof with screenshot/data assertions before acceptance.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'business_assertion_failed') {\n\t\treturn {\n\t\t\toutcome: input.terminal === true ? 'rejected' : 'qa_incomplete',\n\t\t\treason: 'Issue-specific business assertion failed.',\n\t\t\tnextAction: 'Repair the product/data defect and rerun the failing assertion.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst hasBusinessPass = qa?.outcome === 'business_assertion_passed';\n\tconst scorecardPassed = input.scorecardPassed === true || statusLooksPassed(input.scorecardStatus);\n\tconst releaseBlockers: string[] = [];\n\tif (statusLooksFailed(input.deployStatus)) {\n\t\treleaseBlockers.push(`deploy=${cleanText(input.deployStatus, 120)}`);\n\t}\n\tif (statusLooksFailed(input.publishStatus)) {\n\t\treleaseBlockers.push(`publish=${cleanText(input.publishStatus, 120)}`);\n\t}\n\tif (statusLooksFailed(input.sampleDataStatus)) {\n\t\treleaseBlockers.push(`sample_data=${cleanText(input.sampleDataStatus, 120)}`);\n\t}\n\tif (releaseBlockers.length && (scorecardPassed || hasBusinessPass)) {\n\t\taddGateOnce(gates, makeGate(\n\t\t\t'release',\n\t\t\t'Release/deploy',\n\t\t\t'fail',\n\t\t\t`Final acceptance is blocked after QA/scorecard because release gates failed: ${releaseBlockers.join(', ')}.`,\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn {\n\t\t\toutcome: 'release_blocked',\n\t\t\treason: `Release gates failed after QA/scorecard: ${releaseBlockers.join(', ')}.`,\n\t\t\tnextAction: 'Repair deploy/publish/sample-data coverage before marking the run accepted.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (scorecardPassed && !hasBusinessPass) {\n\t\twarnings.push('scorecard_pass_without_business_assertion');\n\t\taddGateOnce(gates, makeGate(\n\t\t\t'business_assertion_required',\n\t\t\t'Business assertion',\n\t\t\t'blocked',\n\t\t\t'Scorecard passed, but no issue-specific business assertion proof was recorded.',\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn {\n\t\t\toutcome: 'false_pass',\n\t\t\treason: 'Scorecard-only proof is not acceptance.',\n\t\t\tnextAction: 'Record issue-specific workflow/data proof, then reclassify the run.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst statusPhase = `${input.status || ''} ${input.phase || ''}`;\n\tif ((input.explicitAccepted === true || statusLooksPassed(statusPhase) || scorecardPassed) && hasBusinessPass) {\n\t\treturn {\n\t\t\toutcome: 'accepted',\n\t\t\treason: 'Run has terminal success signal and issue-specific business assertion proof.',\n\t\t\tnextAction: 'No repair action required.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (statusLooksFailed(statusPhase)) {\n\t\treturn {\n\t\t\toutcome: 'rejected',\n\t\t\treason: 'Run ended with a failure status and no accepted proof.',\n\t\t\tnextAction: 'Classify the failing gate and rerun the smallest repair step.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\treturn {\n\t\toutcome: 'unknown',\n\t\treason: 'Run does not have enough normalized evidence for a terminal label.',\n\t\tnextAction: 'Ingest QA, deploy, assistant, usage, and commit evidence before using this run for training.',\n\t\tgates,\n\t\twarnings,\n\t\trecordedAt: now\n\t};\n}\n\nexport function buildAIRun(input: Omit<AIRun, 'outcome' | 'gates'> & {\n\toutcome?: AIRunOutcomeLabel;\n\tgates?: AIRunGateResult[];\n\tscorecardPassed?: boolean;\n\tdeployStatus?: string;\n\tpublishStatus?: string;\n\tsampleDataStatus?: string;\n\tmanualHandoff?: boolean;\n\tstopped?: boolean;\n\trejected?: boolean;\n\texplicitAccepted?: boolean;\n\tterminal?: boolean;\n\tnow?: Date | string;\n}): AIRun {\n\tconst decision = input.outcome\n\t\t? {\n\t\t\toutcome: input.outcome,\n\t\t\tgates: input.gates || [],\n\t\t\twarnings: input.warnings || [],\n\t\t\tnextAction: input.nextAction || '',\n\t\t\treason: '',\n\t\t\trecordedAt: isoNow(input.now)\n\t\t}\n\t\t: classifyAIRunOutcome({\n\t\t\tsource: input.source,\n\t\t\tstatus: input.status,\n\t\t\tphase: input.phase,\n\t\t\tqa: input.qa,\n\t\t\tgates: input.gates,\n\t\t\tscorecardPassed: input.scorecardPassed,\n\t\t\tdeployStatus: input.deployStatus,\n\t\t\tpublishStatus: input.publishStatus,\n\t\t\tsampleDataStatus: input.sampleDataStatus,\n\t\t\tmanualHandoff: input.manualHandoff,\n\t\t\tstopped: input.stopped,\n\t\t\trejected: input.rejected,\n\t\t\texplicitAccepted: input.explicitAccepted,\n\t\t\tterminal: input.terminal,\n\t\t\tnow: input.now\n\t\t});\n\treturn {\n\t\tid: input.id,\n\t\tsource: input.source || 'unknown',\n\t\tsourceIds: input.sourceIds || {},\n\t\ttitle: input.title,\n\t\tstatus: input.status,\n\t\tphase: input.phase,\n\t\tstartedAt: input.startedAt,\n\t\tcompletedAt: input.completedAt,\n\t\toutcome: decision.outcome,\n\t\tevents: Array.isArray(input.events) ? input.events : [],\n\t\tgates: decision.gates,\n\t\tqa: normalizeQaRun(input.qa),\n\t\tcost: input.cost,\n\t\tnextAction: decision.nextAction,\n\t\twarnings: decision.warnings,\n\t\tmetadata: input.metadata\n\t};\n}\n\nexport function buildAIRunCost(entries: OpenAIUsageCostEntry[] = []): AIRunCost {\n\tconst cost: AIRunCost = {\n\t\tinputTokens: 0,\n\t\tcachedInputTokens: 0,\n\t\toutputTokens: 0,\n\t\ttotalTokens: 0,\n\t\testimatedUsd: 0,\n\t\tmodels: [],\n\t\tcategories: {},\n\t\tsources: {},\n\t\tsurfaces: {},\n\t\tmanualEstimatedUsd: 0,\n\t\tuntrackedEstimatedUsd: 0,\n\t\tuntrackedWarnings: []\n\t};\n\tfor (const entry of normalizeOpenAIUsageRowsForCosting(entries)) {\n\t\tconst category = cleanText(entry.category, 120) || 'unknown';\n\t\tconst source = cleanText(entry.usage_source ?? entry.usageSource, 80) || 'unknown';\n\t\tconst surface = cleanText(entry.usage_surface ?? entry.usageSurface, 80) || 'unknown';\n\t\tconst isManual = entry.is_manual === true || entry.isManual === true || source === 'manual_codex';\n\t\tconst isUntracked = entry.is_untracked === true || entry.isUntracked === true;\n\t\tconst untrackedReason = cleanText(entry.untracked_reason ?? entry.untrackedReason, 500);\n\t\tconst model = cleanText(entry.model, 120);\n\t\tconst inputTokens = Number(entry.input_tokens ?? entry.inputTokens ?? 0) || 0;\n\t\tconst cachedInputTokens = Number(entry.cached_input_tokens ?? entry.cachedInputTokens ?? 0) || 0;\n\t\tconst outputTokens = Number(entry.output_tokens ?? entry.outputTokens ?? 0) || 0;\n\t\tconst totalTokens = Number(entry.total_tokens ?? entry.totalTokens ?? (inputTokens + outputTokens)) || 0;\n\t\tconst estimatedUsd = Number(entry.cost_estimate ?? entry.estimatedUsd ?? 0) || 0;\n\t\tcost.inputTokens += inputTokens;\n\t\tcost.cachedInputTokens += cachedInputTokens;\n\t\tcost.outputTokens += outputTokens;\n\t\tcost.totalTokens += totalTokens;\n\t\tcost.estimatedUsd += estimatedUsd;\n\t\tif (isManual) {\n\t\t\tcost.manualEstimatedUsd = Number(cost.manualEstimatedUsd || 0) + estimatedUsd;\n\t\t}\n\t\tif (isUntracked) {\n\t\t\tcost.untrackedEstimatedUsd = Number(cost.untrackedEstimatedUsd || 0) + estimatedUsd;\n\t\t\tconst warning = untrackedReason || `${source} usage is an estimate outside managed runner telemetry.`;\n\t\t\tif (warning && !cost.untrackedWarnings?.includes(warning)) {\n\t\t\t\tcost.untrackedWarnings?.push(warning);\n\t\t\t}\n\t\t}\n\t\tif (model && !cost.models.includes(model)) {\n\t\t\tcost.models.push(model);\n\t\t}\n\t\tif (!cost.categories[category]) {\n\t\t\tcost.categories[category] = {\n\t\t\t\tinputTokens: 0,\n\t\t\t\tcachedInputTokens: 0,\n\t\t\t\toutputTokens: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t}\n\t\tcost.categories[category].inputTokens += inputTokens;\n\t\tcost.categories[category].cachedInputTokens += cachedInputTokens;\n\t\tcost.categories[category].outputTokens += outputTokens;\n\t\tcost.categories[category].totalTokens += totalTokens;\n\t\tcost.categories[category].estimatedUsd += estimatedUsd;\n\t\tcost.categories[category].count += 1;\n\t\tif (!cost.sources?.[source]) {\n\t\t\tcost.sources![source] = {\n\t\t\t\tinputTokens: 0,\n\t\t\t\tcachedInputTokens: 0,\n\t\t\t\toutputTokens: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0,\n\t\t\t\tmanualCount: 0,\n\t\t\t\tuntrackedCount: 0\n\t\t\t};\n\t\t}\n\t\tcost.sources[source].inputTokens += inputTokens;\n\t\tcost.sources[source].cachedInputTokens += cachedInputTokens;\n\t\tcost.sources[source].outputTokens += outputTokens;\n\t\tcost.sources[source].totalTokens += totalTokens;\n\t\tcost.sources[source].estimatedUsd += estimatedUsd;\n\t\tcost.sources[source].count += 1;\n\t\tif (isManual) {\n\t\t\tcost.sources[source].manualCount += 1;\n\t\t}\n\t\tif (isUntracked) {\n\t\t\tcost.sources[source].untrackedCount += 1;\n\t\t}\n\t\tif (!cost.surfaces?.[surface]) {\n\t\t\tcost.surfaces![surface] = {\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t}\n\t\tcost.surfaces[surface].totalTokens += totalTokens;\n\t\tcost.surfaces[surface].estimatedUsd += estimatedUsd;\n\t\tcost.surfaces[surface].count += 1;\n\t}\n\tcost.estimatedUsd = Number(cost.estimatedUsd.toFixed(6));\n\tcost.manualEstimatedUsd = Number(Number(cost.manualEstimatedUsd || 0).toFixed(6));\n\tcost.untrackedEstimatedUsd = Number(Number(cost.untrackedEstimatedUsd || 0).toFixed(6));\n\tfor (const category of Object.keys(cost.categories)) {\n\t\tcost.categories[category].estimatedUsd = Number(cost.categories[category].estimatedUsd.toFixed(6));\n\t}\n\tfor (const source of Object.keys(cost.sources || {})) {\n\t\tcost.sources![source].estimatedUsd = Number(cost.sources![source].estimatedUsd.toFixed(6));\n\t}\n\tfor (const surface of Object.keys(cost.surfaces || {})) {\n\t\tcost.surfaces![surface].estimatedUsd = Number(cost.surfaces![surface].estimatedUsd.toFixed(6));\n\t}\n\treturn cost;\n}\n\nexport function redactAIRunTrainingExample(example: AIRunTrainingExample): AIRunTrainingExample {\n\tconst redact = (value: string): string => cleanText(value, 5000)\n\t\t.replace(/mongodb(?:\\+srv)?:\\/\\/[^\\s\"'<>]+/ig, '[redacted-mongo-url]')\n\t\t.replace(/\\b(?:sk|ghp|xoxb|AKIA)[A-Za-z0-9_\\-]{12,}\\b/g, '[redacted-secret]')\n\t\t.replace(/\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z]{2,}\\b/ig, '[redacted-email]');\n\treturn {\n\t\t...example,\n\t\tinputSummary: redact(example.inputSummary),\n\t\tactionSummary: redact(example.actionSummary),\n\t\tevidence: cleanList(example.evidence, 80, 5000).map(redact)\n\t};\n}\n"]}
1
+ {"version":3,"sources":["../../src/util/ai-run-evidence.ts"],"names":[],"mappings":"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","file":"ai-run-evidence.js","sourcesContent":["export type AIRunSource =\n\t| 'support_ticket'\n\t| 'aicoder_app'\n\t| 'ai_assistant'\n\t| 'qa_runner'\n\t| 'unknown';\n\nexport type AIRunOutcomeLabel =\n\t| 'accepted'\n\t| 'rejected'\n\t| 'qa_incomplete'\n\t| 'qa_infra_failed'\n\t| 'build_failed'\n\t| 'release_blocked'\n\t| 'manual_handoff'\n\t| 'false_pass'\n\t| 'stopped'\n\t| 'unknown';\n\nexport type AIRunEventType =\n\t| 'model_call'\n\t| 'log'\n\t| 'qa_infra'\n\t| 'qa_compile'\n\t| 'qa_route_probe'\n\t| 'qa_business_assertion'\n\t| 'scorecard'\n\t| 'deploy'\n\t| 'publish'\n\t| 'hotfix'\n\t| 'assistant_message'\n\t| 'assistant_query'\n\t| 'git_commit'\n\t| 'usage'\n\t| 'human_intervention';\n\nexport type AIRunGateStatus = 'pass' | 'fail' | 'warn' | 'blocked' | 'skipped';\n\nexport type AIQaCheckStatus = 'pass' | 'fail' | 'blocked' | 'warn' | 'skipped' | 'unknown';\n\nexport type AIQaCompileStatus = 'pass' | 'fail' | 'blocked' | 'stale' | 'skipped' | 'unknown';\n\nexport type AIQaOutcome =\n\t| 'infra_failed'\n\t| 'compile_failed'\n\t| 'route_failed'\n\t| 'route_only_pass'\n\t| 'business_assertion_passed'\n\t| 'business_assertion_failed'\n\t| 'incomplete';\n\nexport interface AIRunEvent {\n\tid?: string;\n\ttype: AIRunEventType;\n\tsource?: AIRunSource | string;\n\tmessage?: string;\n\tcategory?: string;\n\tartifactPaths?: string[];\n\tmetadata?: Record<string, any>;\n\trecordedAt?: Date | string;\n}\n\nexport interface AIRunGateResult {\n\tkey: string;\n\tlabel: string;\n\tstatus: AIRunGateStatus;\n\treason: string;\n\tevidenceRefs: string[];\n\trecordedAt: string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIRunCost {\n\tinputTokens: number;\n\tcachedInputTokens: number;\n\toutputTokens: number;\n\ttotalTokens: number;\n\testimatedUsd: number;\n\tmodels: string[];\n\tcategories: Record<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tsources?: Record<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t\tmanualCount: number;\n\t\tuntrackedCount: number;\n\t}>;\n\tsurfaces?: Record<string, {\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tmanualEstimatedUsd?: number;\n\tuntrackedEstimatedUsd?: number;\n\tuntrackedWarnings?: string[];\n\twallTimeMs?: number;\n\tretries?: number;\n}\n\nexport interface OpenAIUsageCostEntry {\n\tmodel?: string;\n\tcategory?: string;\n\tid_request?: string;\n\tidRequest?: string;\n\tid_conversation?: string;\n\tidConversation?: string;\n\ttimestamp?: Date | string;\n\tinput_tokens?: number;\n\tinputTokens?: number;\n\tcached_input_tokens?: number;\n\tcachedInputTokens?: number;\n\toutput_tokens?: number;\n\toutputTokens?: number;\n\ttotal_tokens?: number;\n\ttotalTokens?: number;\n\tcost_estimate?: number;\n\testimatedUsd?: number;\n\tusage_source?: string;\n\tusageSource?: string;\n\tusage_surface?: string;\n\tusageSurface?: string;\n\tusage_phase?: string;\n\tusagePhase?: string;\n\tcost_basis?: string;\n\tcostBasis?: string;\n\tis_manual?: boolean;\n\tisManual?: boolean;\n\tis_untracked?: boolean;\n\tisUntracked?: boolean;\n\tuntracked_reason?: string;\n\tuntrackedReason?: string;\n\t[key: string]: any;\n}\n\nexport interface AIQaInfraCheck {\n\tname: string;\n\tstatus: AIQaCheckStatus;\n\tmessage?: string;\n\tpath?: string;\n\tdurationMs?: number;\n\tmetadata?: Record<string, any>;\n\tcheckedAt?: Date | string;\n}\n\nexport interface AIQaCompileResult {\n\tstatus: AIQaCompileStatus;\n\tcommand?: string;\n\tartifactPath?: string;\n\tmessage?: string;\n\tdurationMs?: number;\n\tstaleEvidence?: boolean;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaRouteProbe {\n\troute: string;\n\tstatus: AIQaCheckStatus;\n\tscreenshot?: string;\n\tcaption?: string;\n\tshellOnly?: boolean;\n\tauthenticated?: boolean;\n\tconsoleErrors?: string[];\n\tnetworkErrors?: string[];\n\tmessage?: string;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaBusinessAssertion {\n\tassertion: string;\n\tstatus: AIQaCheckStatus;\n\tworkflow?: string;\n\troute?: string;\n\taction?: string;\n\texpected?: string;\n\tobserved?: string;\n\tdataProof?: string;\n\tmongoDelta?: Record<string, any>;\n\tartifactPaths?: string[];\n\tmessage?: string;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaArtifact {\n\ttype: 'screenshot' | 'trace' | 'console_log' | 'network_log' | 'coverage_matrix' | 'seed_data' | 'script' | 'other';\n\tpath?: string;\n\turl?: string;\n\ttitle?: string;\n\tcaption?: string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaRun {\n\toutcome: AIQaOutcome;\n\tinfraChecks: AIQaInfraCheck[];\n\tcompile?: AIQaCompileResult;\n\trouteProbes: AIQaRouteProbe[];\n\tbusinessAssertions: AIQaBusinessAssertion[];\n\tartifacts: AIQaArtifact[];\n\tgateResults: AIRunGateResult[];\n\tupdatedAt: string;\n}\n\nexport interface AIRun {\n\tid?: string;\n\tsource: AIRunSource;\n\tsourceIds: Record<string, string>;\n\ttitle?: string;\n\tstatus?: string;\n\tphase?: string;\n\tstartedAt?: Date | string;\n\tcompletedAt?: Date | string;\n\toutcome: AIRunOutcomeLabel;\n\tevents: AIRunEvent[];\n\tgates: AIRunGateResult[];\n\tqa?: AIQaRun;\n\tcost?: AIRunCost;\n\tnextAction?: string;\n\twarnings?: string[];\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIRunTrainingExample {\n\trunId: string;\n\tsource: AIRunSource;\n\tinputSummary: string;\n\tactionSummary: string;\n\toutcome: AIRunOutcomeLabel;\n\tevidence: string[];\n\tcost?: AIRunCost;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaEvaluationInput {\n\tinfraChecks?: AIQaInfraCheck[];\n\tcompile?: AIQaCompileResult;\n\trouteProbes?: AIQaRouteProbe[];\n\tbusinessAssertions?: AIQaBusinessAssertion[];\n\tartifacts?: AIQaArtifact[];\n\tnow?: Date | string;\n}\n\nexport interface AIRunOutcomeInput {\n\tsource?: AIRunSource;\n\tstatus?: string;\n\tphase?: string;\n\tqa?: AIQaRun | AIQaEvaluationInput;\n\tgates?: AIRunGateResult[];\n\tscorecardPassed?: boolean;\n\tscorecardStatus?: string;\n\tdeployStatus?: string;\n\tpublishStatus?: string;\n\tsampleDataStatus?: string;\n\tmanualHandoff?: boolean;\n\tstopped?: boolean;\n\trejected?: boolean;\n\texplicitAccepted?: boolean;\n\tterminal?: boolean;\n\tnow?: Date | string;\n}\n\nexport interface AIRunOutcomeDecision {\n\toutcome: AIRunOutcomeLabel;\n\treason: string;\n\tnextAction: string;\n\tgates: AIRunGateResult[];\n\twarnings: string[];\n\trecordedAt: string;\n}\n\nfunction isoNow(value?: Date | string): string {\n\tif (value instanceof Date) {\n\t\treturn value.toISOString();\n\t}\n\tconst parsed = value ? new Date(value) : new Date();\n\tif (Number.isFinite(parsed.getTime())) {\n\t\treturn parsed.toISOString();\n\t}\n\treturn new Date().toISOString();\n}\n\nfunction cleanText(value: any, max = 1000): string {\n\treturn String(value || '').replace(/\\s+/g, ' ').trim().slice(0, max);\n}\n\nfunction cleanUsageNumber(value: any): number {\n\tconst parsed = Number(value);\n\treturn Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction cleanUsageDate(value: any): Date | undefined {\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\tconst date = value instanceof Date ? value : new Date(value);\n\treturn Number.isFinite(date.getTime()) ? date : undefined;\n}\n\nexport function isCumulativeCodexUsageEntry(entry: OpenAIUsageCostEntry): boolean {\n\treturn cleanText(entry?.category, 180).toLowerCase().startsWith('ai-dashboard-codex:');\n}\n\nexport function resolveOpenAIUsageThreadKey(entry: OpenAIUsageCostEntry): string {\n\tconst conversationId = cleanText(entry?.id_conversation ?? entry?.idConversation, 240);\n\tif (conversationId) {\n\t\treturn conversationId;\n\t}\n\treturn cleanText(entry?.id_request ?? entry?.idRequest, 240);\n}\n\nexport function normalizeOpenAIUsageRowsForCosting<T extends OpenAIUsageCostEntry>(rows: T[] = []): T[] {\n\tif (!Array.isArray(rows) || !rows.length) {\n\t\treturn [];\n\t}\n\tconst sortedRows = rows\n\t\t.map((row, index) => ({\n\t\t\t...row,\n\t\t\t_sortIndex: index\n\t\t}))\n\t\t.sort((a, b) => {\n\t\t\tconst timeA = cleanUsageDate(a.timestamp)?.getTime() || 0;\n\t\t\tconst timeB = cleanUsageDate(b.timestamp)?.getTime() || 0;\n\t\t\tif (timeA !== timeB) {\n\t\t\t\treturn timeA - timeB;\n\t\t\t}\n\t\t\tconst requestCompare = cleanText(a.id_request ?? a.idRequest, 240)\n\t\t\t\t.localeCompare(cleanText(b.id_request ?? b.idRequest, 240));\n\t\t\tif (requestCompare) {\n\t\t\t\treturn requestCompare;\n\t\t\t}\n\t\t\tconst conversationCompare = cleanText(a.id_conversation ?? a.idConversation, 240)\n\t\t\t\t.localeCompare(cleanText(b.id_conversation ?? b.idConversation, 240));\n\t\t\tif (conversationCompare) {\n\t\t\t\treturn conversationCompare;\n\t\t\t}\n\t\t\treturn cleanUsageNumber(a._sortIndex) - cleanUsageNumber(b._sortIndex);\n\t\t});\n\tconst previousByThread = new Map<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t}>();\n\treturn sortedRows.map((row) => {\n\t\tconst inputTokens = cleanUsageNumber(row.input_tokens ?? row.inputTokens);\n\t\tconst cachedInputTokens = cleanUsageNumber(row.cached_input_tokens ?? row.cachedInputTokens);\n\t\tconst outputTokens = cleanUsageNumber(row.output_tokens ?? row.outputTokens);\n\t\tconst totalTokens = cleanUsageNumber(row.total_tokens ?? row.totalTokens ?? (inputTokens + outputTokens));\n\t\tconst estimatedUsd = cleanUsageNumber(row.cost_estimate ?? row.estimatedUsd);\n\t\tconst threadKey = isCumulativeCodexUsageEntry(row) ? resolveOpenAIUsageThreadKey(row) : '';\n\t\tlet normalizedInputTokens = inputTokens;\n\t\tlet normalizedCachedInputTokens = cachedInputTokens;\n\t\tlet normalizedOutputTokens = outputTokens;\n\t\tlet normalizedTotalTokens = totalTokens;\n\t\tlet normalizedEstimatedUsd = estimatedUsd;\n\t\tif (threadKey) {\n\t\t\tconst previous = previousByThread.get(threadKey);\n\t\t\tif (previous\n\t\t\t\t&& inputTokens >= previous.inputTokens\n\t\t\t\t&& cachedInputTokens >= previous.cachedInputTokens\n\t\t\t\t&& outputTokens >= previous.outputTokens\n\t\t\t\t&& totalTokens >= previous.totalTokens\n\t\t\t\t&& estimatedUsd >= previous.estimatedUsd\n\t\t\t) {\n\t\t\t\tnormalizedInputTokens = Math.max(0, inputTokens - previous.inputTokens);\n\t\t\t\tnormalizedCachedInputTokens = Math.max(0, cachedInputTokens - previous.cachedInputTokens);\n\t\t\t\tnormalizedOutputTokens = Math.max(0, outputTokens - previous.outputTokens);\n\t\t\t\tnormalizedTotalTokens = Math.max(0, totalTokens - previous.totalTokens);\n\t\t\t\tnormalizedEstimatedUsd = Math.max(0, estimatedUsd - previous.estimatedUsd);\n\t\t\t}\n\t\t\tpreviousByThread.set(threadKey, {\n\t\t\t\tinputTokens,\n\t\t\t\tcachedInputTokens,\n\t\t\t\toutputTokens,\n\t\t\t\ttotalTokens,\n\t\t\t\testimatedUsd\n\t\t\t});\n\t\t}\n\t\tconst resolvedTotalTokens = normalizedTotalTokens || (normalizedInputTokens + normalizedOutputTokens);\n\t\tconst resolvedEstimatedUsd = Number(normalizedEstimatedUsd.toFixed(6));\n\t\treturn {\n\t\t\t...row,\n\t\t\tinput_tokens: normalizedInputTokens,\n\t\t\tinputTokens: normalizedInputTokens,\n\t\t\tcached_input_tokens: normalizedCachedInputTokens,\n\t\t\tcachedInputTokens: normalizedCachedInputTokens,\n\t\t\toutput_tokens: normalizedOutputTokens,\n\t\t\toutputTokens: normalizedOutputTokens,\n\t\t\ttotal_tokens: resolvedTotalTokens,\n\t\t\ttotalTokens: resolvedTotalTokens,\n\t\t\tcost_estimate: resolvedEstimatedUsd,\n\t\t\testimatedUsd: resolvedEstimatedUsd\n\t\t} as T;\n\t});\n}\n\nfunction cleanList(values: any, limit = 20, max = 500): string[] {\n\tif (!Array.isArray(values)) {\n\t\treturn [];\n\t}\n\tconst result: string[] = [];\n\tfor (const value of values) {\n\t\tconst normalized = cleanText(value, max);\n\t\tif (normalized && !result.includes(normalized)) {\n\t\t\tresult.push(normalized);\n\t\t}\n\t\tif (result.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction normalizeCheckStatus(value: any): AIQaCheckStatus {\n\tconst normalized = cleanText(value, 40).toLowerCase().replace(/[_\\s-]+/g, '_');\n\tif (normalized === 'passed' || normalized === 'ok' || normalized === 'ready') {\n\t\treturn 'pass';\n\t}\n\tif (normalized === 'failed' || normalized === 'error' || normalized === 'fail') {\n\t\treturn 'fail';\n\t}\n\tif (normalized === 'blocked' || normalized === 'dependency_blocked') {\n\t\treturn 'blocked';\n\t}\n\tif (normalized === 'warning') {\n\t\treturn 'warn';\n\t}\n\tif (normalized === 'skipped' || normalized === 'not_applicable') {\n\t\treturn 'skipped';\n\t}\n\treturn normalized === 'pass' || normalized === 'warn' ? normalized : 'unknown';\n}\n\nfunction normalizeCompileStatus(value: any): AIQaCompileStatus {\n\tconst normalized = cleanText(value, 40).toLowerCase().replace(/[_\\s-]+/g, '_');\n\tif (normalized === 'passed' || normalized === 'ok') {\n\t\treturn 'pass';\n\t}\n\tif (normalized === 'failed' || normalized === 'error') {\n\t\treturn 'fail';\n\t}\n\tif (normalized === 'blocked') {\n\t\treturn 'blocked';\n\t}\n\tif (normalized === 'stale' || normalized === 'stale_evidence') {\n\t\treturn 'stale';\n\t}\n\tif (normalized === 'skipped' || normalized === 'not_applicable') {\n\t\treturn 'skipped';\n\t}\n\treturn normalized === 'pass' || normalized === 'fail' ? normalized : 'unknown';\n}\n\nfunction makeGate(\n\tkey: string,\n\tlabel: string,\n\tstatus: AIRunGateStatus,\n\treason: string,\n\tevidenceRefs: string[] = [],\n\tnow?: Date | string,\n\tmetadata?: Record<string, any>\n): AIRunGateResult {\n\treturn {\n\t\tkey,\n\t\tlabel,\n\t\tstatus,\n\t\treason: cleanText(reason, 1400),\n\t\tevidenceRefs: cleanList(evidenceRefs, 20, 500),\n\t\trecordedAt: isoNow(now),\n\t\t...(metadata ? { metadata } : {})\n\t};\n}\n\nfunction failedOrBlocked(status: AIQaCheckStatus | AIQaCompileStatus): boolean {\n\treturn status === 'fail' || status === 'blocked';\n}\n\nfunction passed(status: AIQaCheckStatus | AIQaCompileStatus): boolean {\n\treturn status === 'pass';\n}\n\nfunction normalizeInfraChecks(values: AIQaInfraCheck[] | undefined): AIQaInfraCheck[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\tname: cleanText(entry?.name, 120) || 'infra_check',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tmessage: cleanText(entry?.message, 1000),\n\t\tpath: cleanText(entry?.path, 500)\n\t}));\n}\n\nfunction normalizeRouteProbes(values: AIQaRouteProbe[] | undefined): AIQaRouteProbe[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\troute: cleanText(entry?.route, 500) || '/',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tscreenshot: cleanText(entry?.screenshot, 500),\n\t\tcaption: cleanText(entry?.caption, 1000),\n\t\tmessage: cleanText(entry?.message, 1000),\n\t\tconsoleErrors: cleanList(entry?.consoleErrors, 30, 500),\n\t\tnetworkErrors: cleanList(entry?.networkErrors, 30, 500)\n\t}));\n}\n\nfunction normalizeBusinessAssertions(values: AIQaBusinessAssertion[] | undefined): AIQaBusinessAssertion[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\tassertion: cleanText(entry?.assertion, 1000) || 'business assertion',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tworkflow: cleanText(entry?.workflow, 400),\n\t\troute: cleanText(entry?.route, 500),\n\t\taction: cleanText(entry?.action, 500),\n\t\texpected: cleanText(entry?.expected, 1000),\n\t\tobserved: cleanText(entry?.observed, 1000),\n\t\tdataProof: cleanText(entry?.dataProof, 1400),\n\t\tartifactPaths: cleanList(entry?.artifactPaths, 30, 500),\n\t\tmessage: cleanText(entry?.message, 1000)\n\t}));\n}\n\nfunction collectBusinessAssertionArtifactPaths(assertions: AIQaBusinessAssertion[]): string[] {\n\tconst paths: string[] = [];\n\tfor (const assertion of assertions) {\n\t\tfor (const artifactPath of assertion.artifactPaths || []) {\n\t\t\tif (artifactPath && !paths.includes(artifactPath)) {\n\t\t\t\tpaths.push(artifactPath);\n\t\t\t}\n\t\t}\n\t}\n\treturn paths;\n}\n\nexport function buildAIQaRun(input: AIQaEvaluationInput = {}): AIQaRun {\n\tconst now = isoNow(input.now);\n\tconst infraChecks = normalizeInfraChecks(input.infraChecks);\n\tconst compile = input.compile\n\t\t? {\n\t\t\t...input.compile,\n\t\t\tstatus: normalizeCompileStatus(input.compile.status),\n\t\t\tcommand: cleanText(input.compile.command, 500),\n\t\t\tartifactPath: cleanText(input.compile.artifactPath, 500),\n\t\t\tmessage: cleanText(input.compile.message, 1000)\n\t\t}\n\t\t: undefined;\n\tconst routeProbes = normalizeRouteProbes(input.routeProbes);\n\tconst businessAssertions = normalizeBusinessAssertions(input.businessAssertions);\n\tconst artifacts = Array.isArray(input.artifacts) ? input.artifacts : [];\n\tconst gateResults: AIRunGateResult[] = [];\n\n\tconst failedInfra = infraChecks.filter((check) => failedOrBlocked(check.status));\n\tif (failedInfra.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_infra',\n\t\t\t'QA infrastructure',\n\t\t\t'blocked',\n\t\t\t`QA infrastructure failed before model/business validation: ${failedInfra.map((check) => `${check.name}: ${check.message || check.status}`).join('; ')}`,\n\t\t\tfailedInfra.map((check) => check.path || '').filter(Boolean),\n\t\t\tnow,\n\t\t\t{ failed_checks: failedInfra.map((check) => check.name) }\n\t\t));\n\t\treturn { outcome: 'infra_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (infraChecks.length) {\n\t\tgateResults.push(makeGate('qa_infra', 'QA infrastructure', 'pass', 'QA infrastructure preflight checks passed.', [], now));\n\t}\n\n\tif (compile && (failedOrBlocked(compile.status) || compile.status === 'stale' || compile.staleEvidence === true)) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_compile',\n\t\t\t'Compile/build',\n\t\t\t'fail',\n\t\t\tcompile.status === 'stale' || compile.staleEvidence === true\n\t\t\t\t? 'Compile/build evidence is stale and cannot be used for acceptance.'\n\t\t\t\t: (compile.message || 'Compile/build failed before browser QA.'),\n\t\t\tcompile.artifactPath ? [compile.artifactPath] : [],\n\t\t\tnow,\n\t\t\t{ command: compile.command || '' }\n\t\t));\n\t\treturn { outcome: 'compile_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (compile && passed(compile.status)) {\n\t\tgateResults.push(makeGate('qa_compile', 'Compile/build', 'pass', 'Compile/build evidence passed.', compile.artifactPath ? [compile.artifactPath] : [], now));\n\t}\n\n\tconst failedRouteProbes = routeProbes.filter((probe) => failedOrBlocked(probe.status) || probe.shellOnly === true);\n\tif (failedRouteProbes.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_route_probe',\n\t\t\t'Browser route probe',\n\t\t\t'fail',\n\t\t\t`Browser route probe failed or showed shell-only UI: ${failedRouteProbes.map((probe) => `${probe.route}: ${probe.message || probe.caption || probe.status}`).join('; ')}`,\n\t\t\tfailedRouteProbes.map((probe) => probe.screenshot || '').filter(Boolean),\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'route_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (routeProbes.some((probe) => passed(probe.status))) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_route_probe',\n\t\t\t'Browser route probe',\n\t\t\t'pass',\n\t\t\t'Browser route reached authenticated application content. This is not business acceptance by itself.',\n\t\t\trouteProbes.map((probe) => probe.screenshot || '').filter(Boolean),\n\t\t\tnow\n\t\t));\n\t}\n\n\tconst failedBusinessAssertions = businessAssertions.filter((assertion) => failedOrBlocked(assertion.status));\n\tif (failedBusinessAssertions.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'fail',\n\t\t\t`Issue-specific workflow assertion failed: ${failedBusinessAssertions.map((assertion) => assertion.message || assertion.observed || assertion.assertion).join('; ')}`,\n\t\t\tcollectBusinessAssertionArtifactPaths(failedBusinessAssertions),\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'business_assertion_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tconst passedBusinessAssertions = businessAssertions.filter((assertion) => passed(assertion.status));\n\tif (passedBusinessAssertions.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'pass',\n\t\t\t'At least one issue-specific workflow/data assertion passed.',\n\t\t\tcollectBusinessAssertionArtifactPaths(passedBusinessAssertions),\n\t\t\tnow,\n\t\t\t{ passed_assertions: passedBusinessAssertions.map((assertion) => assertion.assertion) }\n\t\t));\n\t\treturn { outcome: 'business_assertion_passed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tif (routeProbes.some((probe) => passed(probe.status))) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'blocked',\n\t\t\t'Browser route loaded, but no issue-specific business assertion passed. Route-only proof cannot accept the run.',\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'route_only_pass', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tgateResults.push(makeGate(\n\t\t'qa_business_assertion',\n\t\t'Business assertion',\n\t\t'blocked',\n\t\t'No issue-specific QA assertion was recorded.',\n\t\t[],\n\t\tnow\n\t));\n\treturn { outcome: 'incomplete', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n}\n\nfunction normalizeQaRun(input?: AIQaRun | AIQaEvaluationInput): AIQaRun | undefined {\n\tif (!input) {\n\t\treturn undefined;\n\t}\n\tif ((input as AIQaRun).outcome && Array.isArray((input as AIQaRun).gateResults)) {\n\t\treturn input as AIQaRun;\n\t}\n\treturn buildAIQaRun(input as AIQaEvaluationInput);\n}\n\nfunction statusLooksFailed(value: any): boolean {\n\tconst normalized = cleanText(value, 120).toLowerCase();\n\treturn !!normalized && /(fail|failed|error|blocked|missing|empty|stale|skipped|not ready|not_ready|could not|cannot)/i.test(normalized);\n}\n\nfunction statusLooksPassed(value: any): boolean {\n\tconst normalized = cleanText(value, 120).toLowerCase();\n\treturn !!normalized && /(pass|passed|success|complete|completed|ready|published|deployed|live|merged)/i.test(normalized);\n}\n\nfunction addGateOnce(gates: AIRunGateResult[], gate: AIRunGateResult): void {\n\tif (gates.some((entry) => entry.key === gate.key && entry.status === gate.status && entry.reason === gate.reason)) {\n\t\treturn;\n\t}\n\tgates.push(gate);\n}\n\nexport function classifyAIRunOutcome(input: AIRunOutcomeInput = {}): AIRunOutcomeDecision {\n\tconst now = isoNow(input.now);\n\tconst gates = Array.isArray(input.gates) ? [...input.gates] : [];\n\tconst warnings: string[] = [];\n\tconst qa = normalizeQaRun(input.qa);\n\tif (qa) {\n\t\tfor (const gate of qa.gateResults) {\n\t\t\taddGateOnce(gates, gate);\n\t\t}\n\t}\n\n\tif (input.manualHandoff === true) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: 'Run requires manual handoff.',\n\t\t\tnextAction: 'Ask a human operator to resolve the blocked run.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (input.stopped === true || /stop|stopped|cancel|cancelled|paused/i.test(`${input.status || ''} ${input.phase || ''}`)) {\n\t\treturn {\n\t\t\toutcome: 'stopped',\n\t\t\treason: 'Run was stopped before accepted evidence was recorded.',\n\t\t\tnextAction: 'Resume or restart only if the request is still active.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (input.rejected === true) {\n\t\treturn {\n\t\t\toutcome: 'rejected',\n\t\t\treason: 'Run was explicitly rejected.',\n\t\t\tnextAction: 'Start a repair run from the failing evidence.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst blockedHotfixCommitGate = gates.find((gate) => gate.key === 'hotfix_commit_proof' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (blockedHotfixCommitGate) {\n\t\treturn {\n\t\t\toutcome: 'release_blocked',\n\t\t\treason: `Hotfix cannot be treated as durable until GitHub commit proof passes: ${blockedHotfixCommitGate.reason}`,\n\t\t\tnextAction: 'Commit and push the hotfix to GitHub, record sourceCommitSha/githubCommitUrl/gitCommitStatus/gitPushStatus, then rerun the smallest release gate.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedNoBlindLoopGate = gates.find((gate) => gate.key === 'manager_no_blind_loop_policy' && gate.status === 'blocked');\n\tif (blockedNoBlindLoopGate) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Manager parked the run to avoid a blind loop: ${blockedNoBlindLoopGate.reason}`,\n\t\t\tnextAction: 'Collect new material evidence or approve the specific recovery decision before any more model/code repair.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportDiagnosisBeforeRepairGate = gates.find((gate) => gate.key === 'support_diagnosis_before_repair' && gate.status === 'blocked');\n\tif (blockedSupportDiagnosisBeforeRepairGate) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Support repair is parked until root-cause diagnosis validates: ${blockedSupportDiagnosisBeforeRepairGate.reason}`,\n\t\t\tnextAction: 'Run read-only support diagnosis, record support_diagnosis_gate with owner_files and before/action/after proof, then retry only the owner-scoped repair.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (qa?.outcome === 'infra_failed') {\n\t\treturn {\n\t\t\toutcome: 'qa_infra_failed',\n\t\t\treason: 'QA infrastructure failed before product validation.',\n\t\t\tnextAction: 'Repair QA harness dependencies, ports, browser, Mongo, or startup before another model repair loop.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'compile_failed') {\n\t\treturn {\n\t\t\toutcome: 'build_failed',\n\t\t\treason: 'Compile/build evidence failed or was stale.',\n\t\t\tnextAction: 'Repair compile/build first, then rerun QA from the same failed step.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'route_failed') {\n\t\treturn {\n\t\t\toutcome: 'qa_incomplete',\n\t\t\treason: 'Browser route probe failed before business proof.',\n\t\t\tnextAction: 'Repair route/auth/startup issue and rerun the same browser route probe.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedAICoderJourneyContractGate = gates.find((gate) => gate.key === 'aicoder_journey_contract' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (blockedAICoderJourneyContractGate) {\n\t\tconst claimedSuccess = input.explicitAccepted === true || input.scorecardPassed === true || statusLooksPassed(input.scorecardStatus) || statusLooksPassed(`${input.status || ''} ${input.phase || ''}`);\n\t\treturn {\n\t\t\toutcome: claimedSuccess ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: claimedSuccess\n\t\t\t\t? `AICoder run claimed success without a valid Journey Contract: ${blockedAICoderJourneyContractGate.reason}`\n\t\t\t\t: `AICoder workflow is blocked until the Journey Contract validates: ${blockedAICoderJourneyContractGate.reason}`,\n\t\t\tnextAction: 'Generate or repair docs/APP_JOURNEY_CONTRACT.md, validate first/next/last workflow/data story/QA assertions, then rerun workflow build and workflow QA.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportNextActionContractGate = gates.find((gate) => gate.key === 'support_next_action_contract' && gate.status === 'blocked');\n\tif (\n\t\tblockedSupportNextActionContractGate\n\t\t&& qa?.outcome !== 'business_assertion_passed'\n\t\t&& input.scorecardPassed !== true\n\t\t&& !statusLooksPassed(input.scorecardStatus)\n\t) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Support manager cannot safely continue without a valid next-action contract: ${blockedSupportNextActionContractGate.reason}`,\n\t\t\tnextAction: 'Record one validated next-action contract with safeToAutoRun, canRunWithoutCodexMonitor, codexFallbackRequired, preconditions, stop conditions, and success evidence before another autonomous recovery.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportIssueClassProbePlanGate = gates.find((gate) => gate.key === 'support_issue_class_probe_plan' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (input.source === 'support_ticket' && blockedSupportIssueClassProbePlanGate) {\n\t\tconst claimedSuccess = input.explicitAccepted === true\n\t\t\t|| input.scorecardPassed === true\n\t\t\t|| statusLooksPassed(input.scorecardStatus)\n\t\t\t|| statusLooksPassed(`${input.status || ''} ${input.phase || ''}`);\n\t\treturn {\n\t\t\toutcome: claimedSuccess ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: claimedSuccess\n\t\t\t\t? `Support run claimed success without a valid issue-class probe plan: ${blockedSupportIssueClassProbePlanGate.reason}`\n\t\t\t\t: `Support business proof is blocked until the issue-class probe plan validates: ${blockedSupportIssueClassProbePlanGate.reason}`,\n\t\t\tnextAction: 'Generate or repair the Support IssueClassProbePlan from the diagnosis proof_plan, then rerun issue-specific business proof QA.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedAssistantAnswerActionabilityGate = gates.find((gate) => gate.key === 'assistant_answer_actionability' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (input.source === 'ai_assistant' && blockedAssistantAnswerActionabilityGate) {\n\t\tconst claimedSuccess = input.explicitAccepted === true\n\t\t\t|| statusLooksPassed(`${input.status || ''} ${input.phase || ''}`);\n\t\treturn {\n\t\t\toutcome: claimedSuccess ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: claimedSuccess\n\t\t\t\t? `Assistant answer was marked accepted without a valid actionability contract: ${blockedAssistantAnswerActionabilityGate.reason}`\n\t\t\t\t: `Assistant answer is blocked until actionability evidence validates: ${blockedAssistantAnswerActionabilityGate.reason}`,\n\t\t\tnextAction: 'Record verified query/date/permission/citation/confidence evidence and one assistant actionability contract before answering or drafting customer-facing text.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'route_only_pass' || qa?.outcome === 'incomplete') {\n\t\treturn {\n\t\t\toutcome: input.scorecardPassed === true ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: input.scorecardPassed === true\n\t\t\t\t? 'Scorecard or workflow status passed without issue-specific business assertion proof.'\n\t\t\t\t: 'QA has not recorded issue-specific business assertion proof.',\n\t\t\tnextAction: 'Add before/action/after workflow proof with screenshot/data assertions before acceptance.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'business_assertion_failed') {\n\t\treturn {\n\t\t\toutcome: input.terminal === true ? 'rejected' : 'qa_incomplete',\n\t\t\treason: 'Issue-specific business assertion failed.',\n\t\t\tnextAction: 'Repair the product/data defect and rerun the failing assertion.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst hasBusinessPass = qa?.outcome === 'business_assertion_passed';\n\tconst scorecardPassed = input.scorecardPassed === true || statusLooksPassed(input.scorecardStatus);\n\tconst releaseBlockers: string[] = [];\n\tif (statusLooksFailed(input.deployStatus)) {\n\t\treleaseBlockers.push(`deploy=${cleanText(input.deployStatus, 120)}`);\n\t}\n\tif (statusLooksFailed(input.publishStatus)) {\n\t\treleaseBlockers.push(`publish=${cleanText(input.publishStatus, 120)}`);\n\t}\n\tif (statusLooksFailed(input.sampleDataStatus)) {\n\t\treleaseBlockers.push(`sample_data=${cleanText(input.sampleDataStatus, 120)}`);\n\t}\n\tif (releaseBlockers.length && (scorecardPassed || hasBusinessPass)) {\n\t\taddGateOnce(gates, makeGate(\n\t\t\t'release',\n\t\t\t'Release/deploy',\n\t\t\t'fail',\n\t\t\t`Final acceptance is blocked after QA/scorecard because release gates failed: ${releaseBlockers.join(', ')}.`,\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn {\n\t\t\toutcome: 'release_blocked',\n\t\t\treason: `Release gates failed after QA/scorecard: ${releaseBlockers.join(', ')}.`,\n\t\t\tnextAction: 'Repair deploy/publish/sample-data coverage before marking the run accepted.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst blockedAICoderNextActionContractGate = gates.find((gate) => gate.key === 'aicoder_next_action_contract' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (input.source === 'aicoder_app' && blockedAICoderNextActionContractGate) {\n\t\tconst claimedSuccess = input.explicitAccepted === true\n\t\t\t|| input.scorecardPassed === true\n\t\t\t|| statusLooksPassed(input.scorecardStatus)\n\t\t\t|| statusLooksPassed(`${input.status || ''} ${input.phase || ''}`);\n\t\treturn {\n\t\t\toutcome: claimedSuccess ? 'false_pass' : 'manual_handoff',\n\t\t\treason: claimedSuccess\n\t\t\t\t? `AICoder run claimed success without a manager-safe next-action contract: ${blockedAICoderNextActionContractGate.reason}`\n\t\t\t\t: `AICoder manager cannot safely continue without a manager-safe next-action contract: ${blockedAICoderNextActionContractGate.reason}`,\n\t\t\tnextAction: 'Record one validated AICoder next-action contract with safeToAutoRun, canRunWithoutCodexMonitor, codexFallbackRequired, stop conditions, and success evidence before another autonomous loop.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (scorecardPassed && !hasBusinessPass) {\n\t\twarnings.push('scorecard_pass_without_business_assertion');\n\t\taddGateOnce(gates, makeGate(\n\t\t\t'business_assertion_required',\n\t\t\t'Business assertion',\n\t\t\t'blocked',\n\t\t\t'Scorecard passed, but no issue-specific business assertion proof was recorded.',\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn {\n\t\t\toutcome: 'false_pass',\n\t\t\treason: 'Scorecard-only proof is not acceptance.',\n\t\t\tnextAction: 'Record issue-specific workflow/data proof, then reclassify the run.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst statusPhase = `${input.status || ''} ${input.phase || ''}`;\n\tif ((input.explicitAccepted === true || statusLooksPassed(statusPhase) || scorecardPassed) && hasBusinessPass) {\n\t\treturn {\n\t\t\toutcome: 'accepted',\n\t\t\treason: 'Run has terminal success signal and issue-specific business assertion proof.',\n\t\t\tnextAction: 'No repair action required.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (statusLooksFailed(statusPhase)) {\n\t\treturn {\n\t\t\toutcome: 'rejected',\n\t\t\treason: 'Run ended with a failure status and no accepted proof.',\n\t\t\tnextAction: 'Classify the failing gate and rerun the smallest repair step.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\treturn {\n\t\toutcome: 'unknown',\n\t\treason: 'Run does not have enough normalized evidence for a terminal label.',\n\t\tnextAction: 'Ingest QA, deploy, assistant, usage, and commit evidence before using this run for training.',\n\t\tgates,\n\t\twarnings,\n\t\trecordedAt: now\n\t};\n}\n\nexport function buildAIRun(input: Omit<AIRun, 'outcome' | 'gates'> & {\n\toutcome?: AIRunOutcomeLabel;\n\tgates?: AIRunGateResult[];\n\tscorecardPassed?: boolean;\n\tdeployStatus?: string;\n\tpublishStatus?: string;\n\tsampleDataStatus?: string;\n\tmanualHandoff?: boolean;\n\tstopped?: boolean;\n\trejected?: boolean;\n\texplicitAccepted?: boolean;\n\tterminal?: boolean;\n\tnow?: Date | string;\n}): AIRun {\n\tconst decision = input.outcome\n\t\t? {\n\t\t\toutcome: input.outcome,\n\t\t\tgates: input.gates || [],\n\t\t\twarnings: input.warnings || [],\n\t\t\tnextAction: input.nextAction || '',\n\t\t\treason: '',\n\t\t\trecordedAt: isoNow(input.now)\n\t\t}\n\t\t: classifyAIRunOutcome({\n\t\t\tsource: input.source,\n\t\t\tstatus: input.status,\n\t\t\tphase: input.phase,\n\t\t\tqa: input.qa,\n\t\t\tgates: input.gates,\n\t\t\tscorecardPassed: input.scorecardPassed,\n\t\t\tdeployStatus: input.deployStatus,\n\t\t\tpublishStatus: input.publishStatus,\n\t\t\tsampleDataStatus: input.sampleDataStatus,\n\t\t\tmanualHandoff: input.manualHandoff,\n\t\t\tstopped: input.stopped,\n\t\t\trejected: input.rejected,\n\t\t\texplicitAccepted: input.explicitAccepted,\n\t\t\tterminal: input.terminal,\n\t\t\tnow: input.now\n\t\t});\n\treturn {\n\t\tid: input.id,\n\t\tsource: input.source || 'unknown',\n\t\tsourceIds: input.sourceIds || {},\n\t\ttitle: input.title,\n\t\tstatus: input.status,\n\t\tphase: input.phase,\n\t\tstartedAt: input.startedAt,\n\t\tcompletedAt: input.completedAt,\n\t\toutcome: decision.outcome,\n\t\tevents: Array.isArray(input.events) ? input.events : [],\n\t\tgates: decision.gates,\n\t\tqa: normalizeQaRun(input.qa),\n\t\tcost: input.cost,\n\t\tnextAction: decision.nextAction,\n\t\twarnings: decision.warnings,\n\t\tmetadata: input.metadata\n\t};\n}\n\nexport function buildAIRunCost(entries: OpenAIUsageCostEntry[] = []): AIRunCost {\n\tconst cost: AIRunCost = {\n\t\tinputTokens: 0,\n\t\tcachedInputTokens: 0,\n\t\toutputTokens: 0,\n\t\ttotalTokens: 0,\n\t\testimatedUsd: 0,\n\t\tmodels: [],\n\t\tcategories: {},\n\t\tsources: {},\n\t\tsurfaces: {},\n\t\tmanualEstimatedUsd: 0,\n\t\tuntrackedEstimatedUsd: 0,\n\t\tuntrackedWarnings: []\n\t};\n\tfor (const entry of normalizeOpenAIUsageRowsForCosting(entries)) {\n\t\tconst category = cleanText(entry.category, 120) || 'unknown';\n\t\tconst source = cleanText(entry.usage_source ?? entry.usageSource, 80) || 'unknown';\n\t\tconst surface = cleanText(entry.usage_surface ?? entry.usageSurface, 80) || 'unknown';\n\t\tconst isManual = entry.is_manual === true || entry.isManual === true || source === 'manual_codex';\n\t\tconst isUntracked = entry.is_untracked === true || entry.isUntracked === true;\n\t\tconst untrackedReason = cleanText(entry.untracked_reason ?? entry.untrackedReason, 500);\n\t\tconst model = cleanText(entry.model, 120);\n\t\tconst inputTokens = Number(entry.input_tokens ?? entry.inputTokens ?? 0) || 0;\n\t\tconst cachedInputTokens = Number(entry.cached_input_tokens ?? entry.cachedInputTokens ?? 0) || 0;\n\t\tconst outputTokens = Number(entry.output_tokens ?? entry.outputTokens ?? 0) || 0;\n\t\tconst totalTokens = Number(entry.total_tokens ?? entry.totalTokens ?? (inputTokens + outputTokens)) || 0;\n\t\tconst estimatedUsd = Number(entry.cost_estimate ?? entry.estimatedUsd ?? 0) || 0;\n\t\tcost.inputTokens += inputTokens;\n\t\tcost.cachedInputTokens += cachedInputTokens;\n\t\tcost.outputTokens += outputTokens;\n\t\tcost.totalTokens += totalTokens;\n\t\tcost.estimatedUsd += estimatedUsd;\n\t\tif (isManual) {\n\t\t\tcost.manualEstimatedUsd = Number(cost.manualEstimatedUsd || 0) + estimatedUsd;\n\t\t}\n\t\tif (isUntracked) {\n\t\t\tcost.untrackedEstimatedUsd = Number(cost.untrackedEstimatedUsd || 0) + estimatedUsd;\n\t\t\tconst warning = untrackedReason || `${source} usage is an estimate outside managed runner telemetry.`;\n\t\t\tif (warning && !cost.untrackedWarnings?.includes(warning)) {\n\t\t\t\tcost.untrackedWarnings?.push(warning);\n\t\t\t}\n\t\t}\n\t\tif (model && !cost.models.includes(model)) {\n\t\t\tcost.models.push(model);\n\t\t}\n\t\tif (!cost.categories[category]) {\n\t\t\tcost.categories[category] = {\n\t\t\t\tinputTokens: 0,\n\t\t\t\tcachedInputTokens: 0,\n\t\t\t\toutputTokens: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t}\n\t\tcost.categories[category].inputTokens += inputTokens;\n\t\tcost.categories[category].cachedInputTokens += cachedInputTokens;\n\t\tcost.categories[category].outputTokens += outputTokens;\n\t\tcost.categories[category].totalTokens += totalTokens;\n\t\tcost.categories[category].estimatedUsd += estimatedUsd;\n\t\tcost.categories[category].count += 1;\n\t\tif (!cost.sources?.[source]) {\n\t\t\tcost.sources![source] = {\n\t\t\t\tinputTokens: 0,\n\t\t\t\tcachedInputTokens: 0,\n\t\t\t\toutputTokens: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0,\n\t\t\t\tmanualCount: 0,\n\t\t\t\tuntrackedCount: 0\n\t\t\t};\n\t\t}\n\t\tcost.sources[source].inputTokens += inputTokens;\n\t\tcost.sources[source].cachedInputTokens += cachedInputTokens;\n\t\tcost.sources[source].outputTokens += outputTokens;\n\t\tcost.sources[source].totalTokens += totalTokens;\n\t\tcost.sources[source].estimatedUsd += estimatedUsd;\n\t\tcost.sources[source].count += 1;\n\t\tif (isManual) {\n\t\t\tcost.sources[source].manualCount += 1;\n\t\t}\n\t\tif (isUntracked) {\n\t\t\tcost.sources[source].untrackedCount += 1;\n\t\t}\n\t\tif (!cost.surfaces?.[surface]) {\n\t\t\tcost.surfaces![surface] = {\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t}\n\t\tcost.surfaces[surface].totalTokens += totalTokens;\n\t\tcost.surfaces[surface].estimatedUsd += estimatedUsd;\n\t\tcost.surfaces[surface].count += 1;\n\t}\n\tcost.estimatedUsd = Number(cost.estimatedUsd.toFixed(6));\n\tcost.manualEstimatedUsd = Number(Number(cost.manualEstimatedUsd || 0).toFixed(6));\n\tcost.untrackedEstimatedUsd = Number(Number(cost.untrackedEstimatedUsd || 0).toFixed(6));\n\tfor (const category of Object.keys(cost.categories)) {\n\t\tcost.categories[category].estimatedUsd = Number(cost.categories[category].estimatedUsd.toFixed(6));\n\t}\n\tfor (const source of Object.keys(cost.sources || {})) {\n\t\tcost.sources![source].estimatedUsd = Number(cost.sources![source].estimatedUsd.toFixed(6));\n\t}\n\tfor (const surface of Object.keys(cost.surfaces || {})) {\n\t\tcost.surfaces![surface].estimatedUsd = Number(cost.surfaces![surface].estimatedUsd.toFixed(6));\n\t}\n\treturn cost;\n}\n\nexport function redactAIRunTrainingExample(example: AIRunTrainingExample): AIRunTrainingExample {\n\tconst redact = (value: string): string => cleanText(value, 5000)\n\t\t.replace(/mongodb(?:\\+srv)?:\\/\\/[^\\s\"'<>]+/ig, '[redacted-mongo-url]')\n\t\t.replace(/\\b(?:sk|ghp|xoxb|AKIA)[A-Za-z0-9_\\-]{12,}\\b/g, '[redacted-secret]')\n\t\t.replace(/\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z]{2,}\\b/ig, '[redacted-email]');\n\treturn {\n\t\t...example,\n\t\tinputSummary: redact(example.inputSummary),\n\t\tactionSummary: redact(example.actionSummary),\n\t\tevidence: cleanList(example.evidence, 80, 5000).map(redact)\n\t};\n}\n"]}
@@ -239,6 +239,22 @@ export interface ResolveIOSupportCustomerReplyPolicyInput {
239
239
  releasePolicy?: ResolveIOAIManagerHotfixFirstReleasePolicy;
240
240
  releaseGatePassed?: boolean;
241
241
  }
242
+ export type ResolveIOSupportClarificationMissingField = 'reproduction_blocker' | 'expected_result' | 'observed_result' | 'account_customer_context' | 'example_record_or_action_path';
243
+ export interface ResolveIOSupportClarificationContract {
244
+ contractId: string;
245
+ status: 'ready' | 'blocked';
246
+ missingField: ResolveIOSupportClarificationMissingField;
247
+ question: string;
248
+ sourceBlockers: string[];
249
+ oneQuestionOnly: boolean;
250
+ customerFacingDraftAllowed: boolean;
251
+ customerSendAllowed: boolean;
252
+ parksTicketUntilCustomerReply: boolean;
253
+ nextCommands: string[];
254
+ forbiddenActions: string[];
255
+ requiredEvidence: string[];
256
+ createdAt: string;
257
+ }
242
258
  export interface ResolveIOSupportCustomerReplyPolicy {
243
259
  action: ResolveIOSupportCustomerReplyAction;
244
260
  canDraftCustomerReply: boolean;
@@ -248,6 +264,7 @@ export interface ResolveIOSupportCustomerReplyPolicy {
248
264
  reason: string;
249
265
  requiredEvidence: string[];
250
266
  clarificationQuestion?: string;
267
+ clarificationContract?: ResolveIOSupportClarificationContract;
251
268
  humanReviewPacket?: ResolveIOSupportHumanReviewPacket;
252
269
  draftBasis?: {
253
270
  issueClass: ResolveIOSupportIssueClass;
@@ -835,6 +852,13 @@ export declare function validateResolveIOSupportDiagnosisGate(value: any, option
835
852
  maxOwnerFiles?: number;
836
853
  }): ResolveIOSupportDiagnosisGateValidation;
837
854
  export declare function evaluateResolveIOSupportBusinessProofReadiness(input?: ResolveIOSupportBusinessProofReadinessInput): ResolveIOSupportBusinessProofReadiness;
855
+ export declare function buildResolveIOSupportClarificationContract(gate: ResolveIOSupportDiagnosisGate | undefined, blockers?: string[], now?: Date | string): ResolveIOSupportClarificationContract;
856
+ export declare function validateResolveIOSupportClarificationContract(value: any): {
857
+ valid: boolean;
858
+ status: 'ready' | 'blocked';
859
+ blockers: string[];
860
+ normalized: ResolveIOSupportClarificationContract;
861
+ };
838
862
  export declare function decideResolveIOSupportCustomerReplyPolicy(input?: ResolveIOSupportCustomerReplyPolicyInput): ResolveIOSupportCustomerReplyPolicy;
839
863
  export declare function buildResolveIOSupportIssueClassProbes(value: any): ResolveIOSupportIssueClassProbe[];
840
864
  export declare function validateResolveIOSupportIssueClassProbePlan(value: any, diagnosisGate?: any, now?: Date | string): ResolveIOSupportIssueClassProbePlanValidation;
@@ -55,6 +55,8 @@ exports.normalizeResolveIOSupportDiagnosisGate = normalizeResolveIOSupportDiagno
55
55
  exports.extractResolveIOSupportDiagnosisGateFromText = extractResolveIOSupportDiagnosisGateFromText;
56
56
  exports.validateResolveIOSupportDiagnosisGate = validateResolveIOSupportDiagnosisGate;
57
57
  exports.evaluateResolveIOSupportBusinessProofReadiness = evaluateResolveIOSupportBusinessProofReadiness;
58
+ exports.buildResolveIOSupportClarificationContract = buildResolveIOSupportClarificationContract;
59
+ exports.validateResolveIOSupportClarificationContract = validateResolveIOSupportClarificationContract;
58
60
  exports.decideResolveIOSupportCustomerReplyPolicy = decideResolveIOSupportCustomerReplyPolicy;
59
61
  exports.buildResolveIOSupportIssueClassProbes = buildResolveIOSupportIssueClassProbes;
60
62
  exports.validateResolveIOSupportIssueClassProbePlan = validateResolveIOSupportIssueClassProbePlan;
@@ -1628,6 +1630,105 @@ function buildSupportClarificationQuestion(gate, blockers) {
1628
1630
  }
1629
1631
  return 'Can you send one concrete example record, screen, or action path where this issue still occurs?';
1630
1632
  }
1633
+ function resolveSupportClarificationMissingField(gate, blockers) {
1634
+ if ((gate === null || gate === void 0 ? void 0 : gate.issue_case.reproduction_status) === 'blocked' && gate.issue_case.reproduction_blocker) {
1635
+ return 'reproduction_blocker';
1636
+ }
1637
+ if (blockers.some(function (blocker) { return /expected_result/.test(blocker); })) {
1638
+ return 'expected_result';
1639
+ }
1640
+ if (blockers.some(function (blocker) { return /observed_result/.test(blocker); })) {
1641
+ return 'observed_result';
1642
+ }
1643
+ if (blockers.some(function (blocker) { return /account_customer_context/.test(blocker); })) {
1644
+ return 'account_customer_context';
1645
+ }
1646
+ return 'example_record_or_action_path';
1647
+ }
1648
+ function buildResolveIOSupportClarificationContract(gate, blockers, now) {
1649
+ if (blockers === void 0) { blockers = []; }
1650
+ var sourceBlockers = cleanList(blockers, 20, 500);
1651
+ var missingField = resolveSupportClarificationMissingField(gate, sourceBlockers);
1652
+ var question = buildSupportClarificationQuestion(gate, sourceBlockers);
1653
+ var createdAt = isoNow(now);
1654
+ return {
1655
+ contractId: "support-clarification-".concat(hashResolveIOSupportV5Evidence({
1656
+ missingField: missingField,
1657
+ question: question,
1658
+ sourceBlockers: sourceBlockers,
1659
+ ticketRoute: gate === null || gate === void 0 ? void 0 : gate.issue_case.route_module,
1660
+ createdAt: createdAt.slice(0, 16)
1661
+ }).slice(0, 16)),
1662
+ status: 'ready',
1663
+ missingField: missingField,
1664
+ question: question,
1665
+ sourceBlockers: sourceBlockers,
1666
+ oneQuestionOnly: (question.match(/\?/g) || []).length === 1,
1667
+ customerFacingDraftAllowed: true,
1668
+ customerSendAllowed: false,
1669
+ parksTicketUntilCustomerReply: true,
1670
+ nextCommands: ['review_customer_clarification', 'send_after_human_review', 'park_ticket_until_customer_reply'],
1671
+ forbiddenActions: [
1672
+ 'Do not run product repair from a guessed reproduction path.',
1673
+ 'Do not ask multiple customer questions in one automated clarification.',
1674
+ 'Do not mark the ticket resolved from a clarification draft.'
1675
+ ],
1676
+ requiredEvidence: [
1677
+ "missing_field=".concat(missingField),
1678
+ 'one customer-facing question',
1679
+ 'human approval before send',
1680
+ 'park_ticket_until_customer_reply'
1681
+ ],
1682
+ createdAt: createdAt
1683
+ };
1684
+ }
1685
+ function validateResolveIOSupportClarificationContract(value) {
1686
+ var source = cleanObject(value);
1687
+ var missingField = cleanText(source.missingField || source.missing_field, 120);
1688
+ var question = cleanText(source.question, 1000);
1689
+ var sourceBlockers = cleanList(source.sourceBlockers || source.source_blockers, 20, 500);
1690
+ var questionMarkCount = (question.match(/\?/g) || []).length;
1691
+ var normalized = {
1692
+ contractId: cleanText(source.contractId || source.contract_id, 160),
1693
+ status: source.status === 'ready' ? 'ready' : 'blocked',
1694
+ missingField: missingField,
1695
+ question: question,
1696
+ sourceBlockers: sourceBlockers,
1697
+ oneQuestionOnly: source.oneQuestionOnly === true || source.one_question_only === true || questionMarkCount === 1,
1698
+ customerFacingDraftAllowed: source.customerFacingDraftAllowed === true || source.customer_facing_draft_allowed === true,
1699
+ customerSendAllowed: source.customerSendAllowed === true || source.customer_send_allowed === true,
1700
+ parksTicketUntilCustomerReply: source.parksTicketUntilCustomerReply === true || source.parks_ticket_until_customer_reply === true,
1701
+ nextCommands: cleanList(source.nextCommands || source.next_commands, 12, 200),
1702
+ forbiddenActions: cleanList(source.forbiddenActions || source.forbidden_actions, 12, 500),
1703
+ requiredEvidence: cleanList(source.requiredEvidence || source.required_evidence, 12, 500),
1704
+ createdAt: cleanText(source.createdAt || source.created_at, 120)
1705
+ };
1706
+ var validMissingFields = [
1707
+ 'reproduction_blocker',
1708
+ 'expected_result',
1709
+ 'observed_result',
1710
+ 'account_customer_context',
1711
+ 'example_record_or_action_path'
1712
+ ];
1713
+ var blockers = [
1714
+ normalized.contractId ? '' : 'Clarification contract is missing contractId.',
1715
+ validMissingFields.includes(normalized.missingField) ? '' : 'Clarification contract is missing a valid missingField.',
1716
+ question.length >= 20 && question.length <= 500 ? '' : 'Clarification question must be 20-500 characters.',
1717
+ questionMarkCount === 1 && normalized.oneQuestionOnly ? '' : 'Clarification contract must contain exactly one customer question.',
1718
+ normalized.customerFacingDraftAllowed === true ? '' : 'Clarification draft must be customer-facing so the operator can review it.',
1719
+ normalized.customerSendAllowed === false ? '' : 'Clarification contract must never allow automatic customer send.',
1720
+ normalized.parksTicketUntilCustomerReply === true ? '' : 'Clarification contract must park the ticket until customer reply.',
1721
+ normalized.nextCommands.includes('park_ticket_until_customer_reply') ? '' : 'Clarification nextCommands must include park_ticket_until_customer_reply.',
1722
+ normalized.forbiddenActions.length ? '' : 'Clarification contract must include forbiddenActions.'
1723
+ ].filter(Boolean);
1724
+ normalized.status = blockers.length ? 'blocked' : 'ready';
1725
+ return {
1726
+ valid: blockers.length === 0,
1727
+ status: normalized.status,
1728
+ blockers: blockers,
1729
+ normalized: normalized
1730
+ };
1731
+ }
1631
1732
  function buildResolveIOSupportHumanReviewPacket(input) {
1632
1733
  return {
1633
1734
  reviewType: input.reviewType,
@@ -1708,7 +1809,33 @@ function decideResolveIOSupportCustomerReplyPolicy(input) {
1708
1809
  var canAskCustomer = (gate === null || gate === void 0 ? void 0 : gate.issue_case.reproduction_status) === 'blocked'
1709
1810
  || diagnosisValidation.blockers.some(function (blocker) { return /expected_result|observed_result|account_customer_context/.test(blocker); });
1710
1811
  if (canAskCustomer) {
1711
- var clarificationQuestion = buildSupportClarificationQuestion(gate, diagnosisValidation.blockers);
1812
+ var clarificationValidation = validateResolveIOSupportClarificationContract(buildResolveIOSupportClarificationContract(gate, diagnosisValidation.blockers));
1813
+ var clarificationContract = clarificationValidation.normalized;
1814
+ if (!clarificationValidation.valid) {
1815
+ return {
1816
+ action: 'hold_internal',
1817
+ canDraftCustomerReply: false,
1818
+ canSendCustomerReply: false,
1819
+ confidenceLevel: confidenceLevel,
1820
+ safety: 'internal_hold',
1821
+ reason: 'support_reply_clarification_contract_invalid',
1822
+ requiredEvidence: requiredEvidence,
1823
+ clarificationContract: clarificationContract,
1824
+ humanReviewPacket: buildResolveIOSupportHumanReviewPacket({
1825
+ reviewType: 'internal_hold',
1826
+ title: 'Repair Clarification Contract',
1827
+ summary: 'Customer clarification is blocked until the one-question clarification contract validates.',
1828
+ primaryAction: 'repair_support_clarification_contract',
1829
+ safety: 'internal_hold',
1830
+ reason: 'support_reply_clarification_contract_invalid',
1831
+ blockers: clarificationValidation.blockers,
1832
+ requiredEvidence: requiredEvidence,
1833
+ nextCommands: ['repair_clarification_contract', 'rerun_reply_policy'],
1834
+ forbiddenActions: ['Do not send a malformed or multi-question clarification.'],
1835
+ costRisk: 'free_or_deterministic'
1836
+ })
1837
+ };
1838
+ }
1712
1839
  return {
1713
1840
  action: 'ask_clarification',
1714
1841
  canDraftCustomerReply: true,
@@ -1716,21 +1843,22 @@ function decideResolveIOSupportCustomerReplyPolicy(input) {
1716
1843
  confidenceLevel: confidenceLevel,
1717
1844
  safety: 'needs_clarification',
1718
1845
  reason: 'support_reply_waiting_on_customer_reproduction_detail',
1719
- requiredEvidence: requiredEvidence,
1720
- clarificationQuestion: clarificationQuestion,
1846
+ requiredEvidence: Array.from(new Set(__spreadArray(__spreadArray([], __read(requiredEvidence), false), __read(clarificationContract.requiredEvidence), false))),
1847
+ clarificationQuestion: clarificationContract.question,
1848
+ clarificationContract: clarificationContract,
1721
1849
  humanReviewPacket: buildResolveIOSupportHumanReviewPacket({
1722
1850
  reviewType: 'customer_clarification',
1723
1851
  title: 'Review Customer Clarification',
1724
1852
  summary: 'The runner needs one customer detail before it can reproduce or continue safely.',
1725
1853
  primaryAction: 'review_customer_clarification',
1726
- question: clarificationQuestion,
1727
- customerFacingDraftAllowed: true,
1854
+ question: clarificationContract.question,
1855
+ customerFacingDraftAllowed: clarificationContract.customerFacingDraftAllowed,
1728
1856
  safety: 'needs_clarification',
1729
1857
  reason: 'support_reply_waiting_on_customer_reproduction_detail',
1730
- blockers: diagnosisValidation.blockers,
1731
- requiredEvidence: requiredEvidence,
1732
- nextCommands: ['edit_clarification_question', 'send_after_human_review', 'park_ticket_until_customer_reply'],
1733
- forbiddenActions: ['Do not run repair from a guessed reproduction path.'],
1858
+ blockers: clarificationContract.sourceBlockers,
1859
+ requiredEvidence: clarificationContract.requiredEvidence,
1860
+ nextCommands: clarificationContract.nextCommands,
1861
+ forbiddenActions: clarificationContract.forbiddenActions,
1734
1862
  costRisk: 'release_or_customer_send'
1735
1863
  })
1736
1864
  };