@resolveio/server-lib 22.3.175 → 22.3.177

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "22.3.175",
3
+ "version": "22.3.177",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",
@@ -1,6 +1,6 @@
1
1
  import { AIRun, AIRunOutcomeLabel, AIRunSource, AIRunTrainingExample } from './ai-run-evidence';
2
- export type AIRunFailureClass = 'none' | 'infra' | 'compile' | 'route' | 'journey_contract' | 'business' | 'release' | 'false_pass' | 'assistant_correctness' | 'manual' | 'stopped' | 'unknown';
3
- export type AIRunRetryAction = 'none' | 'stop' | 'retry_infra_repair' | 'retry_build_repair' | 'retry_route_repair' | 'retry_journey_contract' | 'retry_business_repair' | 'retry_release_repair' | 'manual_handoff';
2
+ export type AIRunFailureClass = 'none' | 'infra' | 'compile' | 'route' | 'journey_contract' | 'business' | 'release' | 'false_pass' | 'assistant_missing_evidence' | 'assistant_query_error' | 'assistant_permission' | 'assistant_date_window' | 'assistant_query_shape' | 'assistant_correctness' | 'manual' | 'stopped' | 'unknown';
3
+ export type AIRunRetryAction = 'none' | 'stop' | 'retry_infra_repair' | 'retry_build_repair' | 'retry_route_repair' | 'retry_journey_contract' | 'retry_business_repair' | 'retry_release_repair' | 'retry_assistant_answer_quality' | 'retry_assistant_query' | 'request_assistant_permission' | 'retry_assistant_date_window' | 'retry_assistant_query_shape' | 'manual_handoff';
4
4
  export interface AIRunEvalExpectedGate {
5
5
  key: string;
6
6
  status?: string;
@@ -1,4 +1,15 @@
1
1
  "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
2
13
  var __values = (this && this.__values) || function(o) {
3
14
  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4
15
  if (m) return m.call(o);
@@ -58,6 +69,51 @@ function addUnique(values, value, max) {
58
69
  values.push(normalized);
59
70
  }
60
71
  }
72
+ function normalizedStatus(value) {
73
+ return cleanText(value, 160).toLowerCase().replace(/[\s-]+/g, '_');
74
+ }
75
+ function plainObject(value) {
76
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
77
+ }
78
+ function assistantAnswerQualityMetadata(run) {
79
+ var gate = (run.gates || []).find(function (entry) { return entry.key === 'assistant_answer_quality'; });
80
+ var gateMetadata = plainObject(gate === null || gate === void 0 ? void 0 : gate.metadata);
81
+ var runMetadata = plainObject(run.metadata);
82
+ var answerQuality = plainObject(runMetadata.answerQuality || runMetadata.answer_quality);
83
+ return __assign(__assign({}, gateMetadata), answerQuality);
84
+ }
85
+ function classifyAssistantFailureClass(run) {
86
+ var metadata = assistantAnswerQualityMetadata(run);
87
+ var status = normalizedStatus(metadata.status || metadata.answerQualityStatus || metadata.answer_quality_status);
88
+ var queryStatus = normalizedStatus(metadata.queryStatus || metadata.query_status);
89
+ var missingEvidenceStatuses = new Set([
90
+ 'missing_data_source',
91
+ 'missing_query_status',
92
+ 'missing_query_proof',
93
+ 'missing_citations',
94
+ 'missing_citation',
95
+ 'low_confidence',
96
+ 'missing_next_action',
97
+ 'no_data_unverified',
98
+ 'blocked'
99
+ ]);
100
+ if (queryStatus === 'permission_error' || status === 'permission_error') {
101
+ return 'assistant_permission';
102
+ }
103
+ if (queryStatus === 'query_error' || status === 'query_error') {
104
+ return 'assistant_query_error';
105
+ }
106
+ if (status === 'date_incorrect' || status === 'missing_date_window') {
107
+ return 'assistant_date_window';
108
+ }
109
+ if (status === 'illegal_query_shape') {
110
+ return 'assistant_query_shape';
111
+ }
112
+ if (missingEvidenceStatuses.has(status) || !status) {
113
+ return 'assistant_missing_evidence';
114
+ }
115
+ return 'assistant_correctness';
116
+ }
61
117
  function classifyAIRunFailureClass(run) {
62
118
  var _a, _b, _c, _d, _e;
63
119
  if (run.outcome === 'accepted') {
@@ -85,7 +141,7 @@ function classifyAIRunFailureClass(run) {
85
141
  return 'stopped';
86
142
  }
87
143
  if (run.source === 'ai_assistant' && (run.outcome === 'rejected' || run.outcome === 'qa_incomplete')) {
88
- return 'assistant_correctness';
144
+ return classifyAssistantFailureClass(run);
89
145
  }
90
146
  if (((_a = run.qa) === null || _a === void 0 ? void 0 : _a.outcome) === 'compile_failed') {
91
147
  return 'compile';
@@ -415,6 +471,56 @@ function decideAIRunRetry(input) {
415
471
  retryExpectedValue: retryExpectedValue
416
472
  };
417
473
  }
474
+ if (failureClass === 'assistant_missing_evidence') {
475
+ return {
476
+ action: 'retry_assistant_answer_quality',
477
+ failureClass: failureClass,
478
+ repeatedFailure: repeatedFailure,
479
+ reason: 'Assistant answer is missing structured answerQuality, query proof, citations, confidence, or next-action evidence.',
480
+ nextAction: input.currentRun.nextAction || 'Rebuild the answerQuality record from the exact query/tool evidence before another broad assistant response.',
481
+ retryExpectedValue: retryExpectedValue
482
+ };
483
+ }
484
+ if (failureClass === 'assistant_query_error') {
485
+ return {
486
+ action: 'retry_assistant_query',
487
+ failureClass: failureClass,
488
+ repeatedFailure: repeatedFailure,
489
+ reason: 'Assistant data access failed with a query error.',
490
+ nextAction: input.currentRun.nextAction || 'Repair and rerun the failing query/tool call, then answer only from the new query evidence.',
491
+ retryExpectedValue: retryExpectedValue
492
+ };
493
+ }
494
+ if (failureClass === 'assistant_permission') {
495
+ return {
496
+ action: 'request_assistant_permission',
497
+ failureClass: failureClass,
498
+ repeatedFailure: repeatedFailure,
499
+ reason: 'Assistant data access was blocked by permission or authorization.',
500
+ nextAction: input.currentRun.nextAction || 'Ask for permission, escalate to an authorized user, or answer with the permission blocker instead of claiming no data.',
501
+ retryExpectedValue: retryExpectedValue
502
+ };
503
+ }
504
+ if (failureClass === 'assistant_date_window') {
505
+ return {
506
+ action: 'retry_assistant_date_window',
507
+ failureClass: failureClass,
508
+ repeatedFailure: repeatedFailure,
509
+ reason: 'Assistant date-sensitive answer used the wrong current date or omitted the concrete date window.',
510
+ nextAction: input.currentRun.nextAction || 'Rerun the query using the actual current date and record exact start/end date-window evidence.',
511
+ retryExpectedValue: retryExpectedValue
512
+ };
513
+ }
514
+ if (failureClass === 'assistant_query_shape') {
515
+ return {
516
+ action: 'retry_assistant_query_shape',
517
+ failureClass: failureClass,
518
+ repeatedFailure: repeatedFailure,
519
+ reason: 'Assistant query shape is illegal or unsafe for Mongo.',
520
+ nextAction: input.currentRun.nextAction || 'Rewrite the query with a legal projection or aggregation shape before retrying the data answer.',
521
+ retryExpectedValue: retryExpectedValue
522
+ };
523
+ }
418
524
  if (failureClass === 'release') {
419
525
  return {
420
526
  action: 'retry_release_repair',
@@ -599,6 +705,28 @@ var assistantWrongDateWindow = (0, ai_run_evidence_1.buildAIRun)({
599
705
  observed: 'Used a stale month.'
600
706
  }]
601
707
  }),
708
+ gates: [{
709
+ key: 'assistant_answer_quality',
710
+ label: 'Assistant answer quality',
711
+ status: 'fail',
712
+ reason: 'Assistant answer did not prove it used the actual current date.',
713
+ evidenceRefs: [],
714
+ recordedAt: '2026-06-16T00:00:00.000Z',
715
+ metadata: {
716
+ status: 'date_incorrect',
717
+ queryStatus: 'ok',
718
+ dateBasis: '2026-05-01',
719
+ expectedCurrentDate: '2026-06-16'
720
+ }
721
+ }],
722
+ metadata: {
723
+ answerQuality: {
724
+ status: 'date_incorrect',
725
+ queryStatus: 'ok',
726
+ dateBasis: '2026-05-01',
727
+ expectedCurrentDate: '2026-06-16'
728
+ }
729
+ },
602
730
  rejected: true,
603
731
  terminal: true
604
732
  });
@@ -618,6 +746,26 @@ var assistantIllegalProjection = (0, ai_run_evidence_1.buildAIRun)({
618
746
  observed: 'Used invalid positional projection.'
619
747
  }]
620
748
  }),
749
+ gates: [{
750
+ key: 'assistant_answer_quality',
751
+ label: 'Assistant answer quality',
752
+ status: 'fail',
753
+ reason: 'Assistant must use legal Mongo query/projection shapes before answering.',
754
+ evidenceRefs: [],
755
+ recordedAt: '2026-06-16T00:00:00.000Z',
756
+ metadata: {
757
+ status: 'illegal_query_shape',
758
+ queryStatus: 'ok',
759
+ legalQueryShape: false
760
+ }
761
+ }],
762
+ metadata: {
763
+ answerQuality: {
764
+ status: 'illegal_query_shape',
765
+ queryStatus: 'ok',
766
+ legalQueryShape: false
767
+ }
768
+ },
621
769
  rejected: true,
622
770
  terminal: true
623
771
  });
@@ -795,7 +943,7 @@ exports.AI_RUN_SEED_EVAL_FIXTURES = [
795
943
  title: 'Assistant wrong month/date-window answer',
796
944
  source: 'ai_assistant',
797
945
  run: assistantWrongDateWindow,
798
- expected: { outcome: 'rejected', failureClass: 'assistant_correctness' },
946
+ expected: { outcome: 'rejected', failureClass: 'assistant_date_window' },
799
947
  tags: ['assistant', 'date_window']
800
948
  },
801
949
  {
@@ -803,7 +951,7 @@ exports.AI_RUN_SEED_EVAL_FIXTURES = [
803
951
  title: 'Assistant illegal Mongo positional projection',
804
952
  source: 'ai_assistant',
805
953
  run: assistantIllegalProjection,
806
- expected: { outcome: 'rejected', failureClass: 'assistant_correctness' },
954
+ expected: { outcome: 'rejected', failureClass: 'assistant_query_shape' },
807
955
  tags: ['assistant', 'mongo_query']
808
956
  },
809
957
  {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/ai-run-evidence-eval.ts"],"names":[],"mappings":"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","file":"ai-run-evidence-eval.js","sourcesContent":["import {\n\tAIRun,\n\tAIRunOutcomeLabel,\n\tAIRunSource,\n\tAIRunTrainingExample,\n\tbuildAIRun,\n\tbuildAIQaRun,\n\tredactAIRunTrainingExample\n} from './ai-run-evidence';\n\nexport type AIRunFailureClass =\n\t| 'none'\n\t| 'infra'\n\t| 'compile'\n\t| 'route'\n\t| 'journey_contract'\n\t| 'business'\n\t| 'release'\n\t| 'false_pass'\n\t| 'assistant_correctness'\n\t| 'manual'\n\t| 'stopped'\n\t| 'unknown';\n\nexport type AIRunRetryAction =\n\t| 'none'\n\t| 'stop'\n\t| 'retry_infra_repair'\n\t| 'retry_build_repair'\n\t| 'retry_route_repair'\n\t| 'retry_journey_contract'\n\t| 'retry_business_repair'\n\t| 'retry_release_repair'\n\t| 'manual_handoff';\n\nexport interface AIRunEvalExpectedGate {\n\tkey: string;\n\tstatus?: string;\n}\n\nexport interface AIRunEvalExpected {\n\toutcome: AIRunOutcomeLabel;\n\tfailureClass?: AIRunFailureClass;\n\tnextActionIncludes?: string;\n\tgates?: AIRunEvalExpectedGate[];\n}\n\nexport interface AIRunEvalFixture {\n\tid: string;\n\ttitle: string;\n\tsource: AIRunSource;\n\trun: AIRun;\n\texpected: AIRunEvalExpected;\n\ttags: string[];\n}\n\nexport interface AIRunEvalResult {\n\tid: string;\n\ttitle: string;\n\tsource: AIRunSource;\n\tpassed: boolean;\n\tactualOutcome: AIRunOutcomeLabel;\n\texpectedOutcome: AIRunOutcomeLabel;\n\tactualFailureClass: AIRunFailureClass;\n\texpectedFailureClass?: AIRunFailureClass;\n\tfailures: string[];\n\ttags: string[];\n}\n\nexport interface AIRunEvalSummary {\n\tpassed: boolean;\n\ttotal: number;\n\tpassedCount: number;\n\tfailedCount: number;\n\tresults: AIRunEvalResult[];\n\tfailuresByTag: Record<string, number>;\n\toutcomes: Record<string, number>;\n}\n\nexport interface AIRunDatasetExport {\n\tgeneratedAt: string;\n\ttotalRuns: number;\n\tsummary: {\n\t\tbySource: Record<string, number>;\n\t\tbyOutcome: Record<string, number>;\n\t\tbyFailureClass: Record<string, number>;\n\t\testimatedUsd: number;\n\t\ttotalTokens: number;\n\t};\n\truns: AIRun[];\n\ttrainingExamples: AIRunTrainingExample[];\n}\n\nexport interface AIRunDatasetExportOptions {\n\tredact?: boolean;\n\tincludeRuns?: boolean;\n\tmaxEvidenceItems?: number;\n\tnow?: Date | string;\n}\n\nexport interface AIRunRetryPolicyInput {\n\tcurrentRun: AIRun;\n\tpreviousRun?: AIRun;\n\tnewEvidenceCount?: number;\n\tunchangedFailureLimit?: number;\n\tsameFailureCount?: number;\n\thistoricalAcceptanceRate?: number;\n\testimatedNextRetryCostUsd?: number;\n\tminRetryExpectedValue?: number;\n}\n\nexport interface AIRunRetryDecision {\n\taction: AIRunRetryAction;\n\tfailureClass: AIRunFailureClass;\n\trepeatedFailure: boolean;\n\treason: string;\n\tnextAction: string;\n\tretryExpectedValue?: number;\n}\n\nfunction cleanText(value: any, max = 1000): string {\n\treturn String(value || '').replace(/\\s+/g, ' ').trim().slice(0, max);\n}\n\nfunction countBy<T extends string>(values: T[]): Record<string, number> {\n\tconst result: Record<string, number> = {};\n\tfor (const value of values) {\n\t\tresult[value] = (result[value] || 0) + 1;\n\t}\n\treturn result;\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 addUnique(values: string[], value: any, max = 1000): void {\n\tconst normalized = cleanText(value, max);\n\tif (normalized && !values.includes(normalized)) {\n\t\tvalues.push(normalized);\n\t}\n}\n\nexport function classifyAIRunFailureClass(run: AIRun): AIRunFailureClass {\n\tif (run.outcome === 'accepted') {\n\t\treturn 'none';\n\t}\n\tif (run.outcome === 'qa_infra_failed') {\n\t\treturn 'infra';\n\t}\n\tif (run.outcome === 'build_failed') {\n\t\treturn 'compile';\n\t}\n\tif (run.outcome === 'release_blocked') {\n\t\treturn 'release';\n\t}\n\tif (run.source === 'aicoder_app' && (run.gates || []).some((gate) => gate.key === 'aicoder_journey_contract' && (gate.status === 'blocked' || gate.status === 'fail'))) {\n\t\treturn 'journey_contract';\n\t}\n\tif (run.outcome === 'false_pass') {\n\t\treturn 'false_pass';\n\t}\n\tif (run.outcome === 'manual_handoff') {\n\t\treturn 'manual';\n\t}\n\tif (run.outcome === 'stopped') {\n\t\treturn 'stopped';\n\t}\n\tif (run.source === 'ai_assistant' && (run.outcome === 'rejected' || run.outcome === 'qa_incomplete')) {\n\t\treturn 'assistant_correctness';\n\t}\n\tif (run.qa?.outcome === 'compile_failed') {\n\t\treturn 'compile';\n\t}\n\tif (run.qa?.outcome === 'route_failed') {\n\t\treturn 'route';\n\t}\n\tif (run.qa?.outcome === 'route_only_pass' || run.qa?.outcome === 'incomplete') {\n\t\treturn 'business';\n\t}\n\tif (run.qa?.outcome === 'business_assertion_failed') {\n\t\treturn 'business';\n\t}\n\tif (run.outcome === 'qa_incomplete') {\n\t\treturn 'business';\n\t}\n\tif (run.outcome === 'rejected') {\n\t\treturn 'business';\n\t}\n\treturn 'unknown';\n}\n\nexport function evaluateAIRunFixture(fixture: AIRunEvalFixture): AIRunEvalResult {\n\tconst failures: string[] = [];\n\tconst actualFailureClass = classifyAIRunFailureClass(fixture.run);\n\tif (fixture.run.outcome !== fixture.expected.outcome) {\n\t\tfailures.push(`Expected outcome ${fixture.expected.outcome}, got ${fixture.run.outcome}.`);\n\t}\n\tif (fixture.expected.failureClass && actualFailureClass !== fixture.expected.failureClass) {\n\t\tfailures.push(`Expected failure class ${fixture.expected.failureClass}, got ${actualFailureClass}.`);\n\t}\n\tif (fixture.expected.nextActionIncludes) {\n\t\tconst expectedText = fixture.expected.nextActionIncludes.toLowerCase();\n\t\tconst actualText = cleanText(fixture.run.nextAction, 2000).toLowerCase();\n\t\tif (!actualText.includes(expectedText)) {\n\t\t\tfailures.push(`Expected next action to include \"${fixture.expected.nextActionIncludes}\", got \"${fixture.run.nextAction || ''}\".`);\n\t\t}\n\t}\n\tconst gatesByKey: Record<string, string> = {};\n\tfor (const gate of fixture.run.gates || []) {\n\t\tgatesByKey[gate.key] = gate.status;\n\t}\n\tfor (const expectedGate of fixture.expected.gates || []) {\n\t\tif (!gatesByKey[expectedGate.key]) {\n\t\t\tfailures.push(`Expected gate ${expectedGate.key} to be present.`);\n\t\t}\n\t\telse if (expectedGate.status && gatesByKey[expectedGate.key] !== expectedGate.status) {\n\t\t\tfailures.push(`Expected gate ${expectedGate.key} status ${expectedGate.status}, got ${gatesByKey[expectedGate.key]}.`);\n\t\t}\n\t}\n\treturn {\n\t\tid: fixture.id,\n\t\ttitle: fixture.title,\n\t\tsource: fixture.source,\n\t\tpassed: failures.length === 0,\n\t\tactualOutcome: fixture.run.outcome,\n\t\texpectedOutcome: fixture.expected.outcome,\n\t\tactualFailureClass,\n\t\texpectedFailureClass: fixture.expected.failureClass,\n\t\tfailures,\n\t\ttags: fixture.tags\n\t};\n}\n\nexport function evaluateAIRunFixtures(fixtures: AIRunEvalFixture[] = AI_RUN_SEED_EVAL_FIXTURES): AIRunEvalSummary {\n\tconst results = fixtures.map((fixture) => evaluateAIRunFixture(fixture));\n\tconst failuresByTag: Record<string, number> = {};\n\tfor (const result of results) {\n\t\tif (result.passed) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const tag of result.tags) {\n\t\t\tfailuresByTag[tag] = (failuresByTag[tag] || 0) + 1;\n\t\t}\n\t}\n\tconst outcomes = countBy(results.map((result) => result.actualOutcome));\n\tconst passedCount = results.filter((result) => result.passed).length;\n\treturn {\n\t\tpassed: passedCount === results.length,\n\t\ttotal: results.length,\n\t\tpassedCount,\n\t\tfailedCount: results.length - passedCount,\n\t\tresults,\n\t\tfailuresByTag,\n\t\toutcomes\n\t};\n}\n\nexport function buildAIRunTrainingExampleFromRun(run: AIRun, maxEvidenceItems = 30): AIRunTrainingExample {\n\tconst evidence: string[] = [];\n\tfor (const gate of run.gates || []) {\n\t\taddUnique(evidence, `${gate.key}:${gate.status}: ${gate.reason}`, 1600);\n\t}\n\tfor (const event of run.events || []) {\n\t\taddUnique(evidence, `${event.type}:${event.category || ''}: ${event.message || ''}`, 1400);\n\t\tif (evidence.length >= maxEvidenceItems) {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (evidence.length < maxEvidenceItems) {\n\t\tfor (const assertion of run.qa?.businessAssertions || []) {\n\t\t\taddUnique(evidence, `assertion:${assertion.status}: ${assertion.assertion} observed=${assertion.observed || assertion.dataProof || assertion.message || ''}`, 1600);\n\t\t\tif (evidence.length >= maxEvidenceItems) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\trunId: run.id || run.sourceIds.jobId || run.sourceIds.ticketId || run.sourceIds.appId || run.sourceIds.conversationId || `${run.source}:unknown`,\n\t\tsource: run.source,\n\t\tinputSummary: [\n\t\t\t`source=${run.source}`,\n\t\t\t`title=${run.title || ''}`,\n\t\t\t`status=${run.status || ''}`,\n\t\t\t`phase=${run.phase || ''}`,\n\t\t\t`ids=${JSON.stringify(run.sourceIds || {})}`\n\t\t].join(' | '),\n\t\tactionSummary: [\n\t\t\t`outcome=${run.outcome}`,\n\t\t\t`failureClass=${classifyAIRunFailureClass(run)}`,\n\t\t\t`nextAction=${run.nextAction || ''}`\n\t\t].join(' | '),\n\t\toutcome: run.outcome,\n\t\tevidence: evidence.slice(0, maxEvidenceItems),\n\t\tcost: run.cost,\n\t\tmetadata: {\n\t\t\twarnings: run.warnings || [],\n\t\t\tgateCount: (run.gates || []).length,\n\t\t\teventCount: (run.events || []).length,\n\t\t\tqaOutcome: run.qa?.outcome\n\t\t}\n\t};\n}\n\nexport function buildAIRunDatasetExport(runs: AIRun[], options: AIRunDatasetExportOptions = {}): AIRunDatasetExport {\n\tconst generatedAt = isoNow(options.now);\n\tconst trainingExamples = runs.map((run) => {\n\t\tconst example = buildAIRunTrainingExampleFromRun(run, options.maxEvidenceItems || 30);\n\t\treturn options.redact === false ? example : redactAIRunTrainingExample(example);\n\t});\n\tconst estimatedUsd = runs.reduce((sum, run) => sum + (Number(run.cost?.estimatedUsd) || 0), 0);\n\tconst totalTokens = runs.reduce((sum, run) => sum + (Number(run.cost?.totalTokens) || 0), 0);\n\treturn {\n\t\tgeneratedAt,\n\t\ttotalRuns: runs.length,\n\t\tsummary: {\n\t\t\tbySource: countBy(runs.map((run) => run.source)),\n\t\t\tbyOutcome: countBy(runs.map((run) => run.outcome)),\n\t\t\tbyFailureClass: countBy(runs.map((run) => classifyAIRunFailureClass(run))),\n\t\t\testimatedUsd: Number(estimatedUsd.toFixed(6)),\n\t\t\ttotalTokens\n\t\t},\n\t\truns: options.includeRuns === false ? [] : runs,\n\t\ttrainingExamples\n\t};\n}\n\nexport function decideAIRunRetry(input: AIRunRetryPolicyInput): AIRunRetryDecision {\n\tconst failureClass = classifyAIRunFailureClass(input.currentRun);\n\tconst previousFailureClass = input.previousRun ? classifyAIRunFailureClass(input.previousRun) : undefined;\n\tconst sameFailureCount = Number(input.sameFailureCount || 0);\n\tconst unchangedFailureLimit = Number(input.unchangedFailureLimit || 2);\n\tconst repeatedFailure = previousFailureClass === failureClass && (Number(input.newEvidenceCount || 0) <= 0 || sameFailureCount >= unchangedFailureLimit);\n\tlet retryExpectedValue: number | undefined;\n\tif (input.historicalAcceptanceRate !== undefined && input.estimatedNextRetryCostUsd !== undefined) {\n\t\tretryExpectedValue = Number((Number(input.historicalAcceptanceRate) - Number(input.estimatedNextRetryCostUsd)).toFixed(6));\n\t}\n\tif (input.currentRun.outcome === 'accepted') {\n\t\treturn {\n\t\t\taction: 'none',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure: false,\n\t\t\treason: 'Run is already accepted.',\n\t\t\tnextAction: 'No retry required.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'manual') {\n\t\treturn {\n\t\t\taction: 'manual_handoff',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Run is marked for manual handoff.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Ask an operator to resolve the run.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'stopped') {\n\t\treturn {\n\t\t\taction: 'stop',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Run was stopped before accepted evidence was recorded.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Do not spend another model cycle unless the request is resumed.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (repeatedFailure) {\n\t\treturn {\n\t\t\taction: 'stop',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'The same failure class repeated with no new evidence. Stop model loops until the evidence changes.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Inspect the failing gate before retrying.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (retryExpectedValue !== undefined && retryExpectedValue < Number(input.minRetryExpectedValue || 0)) {\n\t\treturn {\n\t\t\taction: 'stop',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Historical retry expected value is below the configured threshold.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Do not retry without new evidence or a cheaper targeted repair.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'infra') {\n\t\treturn {\n\t\t\taction: 'retry_infra_repair',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'QA infrastructure failed before business validation.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Repair browser, settings, Mongo, ports, or startup before model repair.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'compile') {\n\t\treturn {\n\t\t\taction: 'retry_build_repair',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Compile/build evidence failed or was stale.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Repair build before browser QA.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'route') {\n\t\treturn {\n\t\t\taction: 'retry_route_repair',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Route probe failed before business proof.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Repair route/auth/startup and rerun the exact probe.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'journey_contract') {\n\t\treturn {\n\t\t\taction: 'retry_journey_contract',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'AICoder Journey Contract is missing or invalid before workflow build/proof.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Generate or repair docs/APP_JOURNEY_CONTRACT.md, validate the north-star workflow, then regenerate workflow QA rows.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'release') {\n\t\treturn {\n\t\t\taction: 'retry_release_repair',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Business proof exists but deploy, publish, or sample-data gates block release.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Repair release gates without another broad model planning loop.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'business' || failureClass === 'false_pass' || failureClass === 'assistant_correctness') {\n\t\treturn {\n\t\t\taction: 'retry_business_repair',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Business or assistant correctness proof failed or is missing.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Repair the exact failing workflow/query and rerun the deterministic assertion.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\treturn {\n\t\taction: 'manual_handoff',\n\t\tfailureClass,\n\t\trepeatedFailure,\n\t\treason: 'Run lacks enough normalized evidence to choose a safe retry lane.',\n\t\tnextAction: input.currentRun.nextAction || 'Ingest more run evidence before retrying.',\n\t\tretryExpectedValue\n\t};\n}\n\nconst supportAccepted004131 = buildAIRun({\n\tid: 'support-004131',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004131', ticketId: 'ticket-004131' },\n\ttitle: '004131 accepted support fix',\n\tstatus: 'Resolved',\n\tphase: 'COMPLETE',\n\tevents: [{ type: 'git_commit', message: 'Fix support workflow and verified before/action/after proof.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass', artifactPath: '.build-output/build-server.log' },\n\t\trouteProbes: [{ route: '/support/004131', status: 'pass', screenshot: 'qa-artifacts/004131-after.jpg' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Before/action/after workflow proves the ticket fix.',\n\t\t\tstatus: 'pass',\n\t\t\taction: 'Run the ticket workflow against seeded data.',\n\t\t\texpected: 'The corrected state is visible.',\n\t\t\tobserved: 'The corrected state is visible after the action.',\n\t\t\tartifactPaths: ['qa-artifacts/004131-proof.json']\n\t\t}]\n\t}),\n\texplicitAccepted: true,\n\tterminal: true\n});\n\nconst supportBuildFailed004333 = buildAIRun({\n\tid: 'support-004333',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004333', ticketId: 'ticket-004333' },\n\ttitle: '004333 compile failure',\n\tstatus: 'Running',\n\tphase: 'QA',\n\tevents: [{ type: 'log', message: 'Angular build failed before browser QA.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'fail', artifactPath: '.build-output/build-client.log', message: 'TypeScript compile failed.' }\n\t})\n});\n\nconst supportInfraFailed004341 = buildAIRun({\n\tid: 'support-004341',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004341', ticketId: 'ticket-004341' },\n\ttitle: '004341 missing Puppeteer',\n\tstatus: 'Running',\n\tphase: 'QA',\n\tevents: [{ type: 'qa_infra', message: 'Puppeteer module could not be loaded.' }],\n\tqa: buildAIQaRun({\n\t\tinfraChecks: [{ name: 'puppeteer_require', status: 'blocked', message: 'Cannot find module puppeteer.' }]\n\t})\n});\n\nconst supportFalsePass004421 = buildAIRun({\n\tid: 'support-004421',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004421', ticketId: 'ticket-004421' },\n\ttitle: '004421 route-only support QA',\n\tstatus: 'Passed',\n\tphase: 'QA',\n\tevents: [{ type: 'scorecard', message: 'Scorecard passed after route loaded.' }],\n\tqa: buildAIQaRun({\n\t\tinfraChecks: [{ name: 'chrome_launch', status: 'pass' }],\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/support/004421', status: 'pass', screenshot: 'qa-artifacts/004421-route.jpg' }]\n\t}),\n\tscorecardPassed: true\n});\n\nconst supportBusinessFailed004423 = buildAIRun({\n\tid: 'support-004423',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004423', ticketId: 'ticket-004423' },\n\ttitle: '004423 business assertion failed',\n\tstatus: 'Running',\n\tphase: 'QA',\n\tevents: [{ type: 'qa_business_assertion', message: 'The expected workflow state did not change.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/support/004423', status: 'pass' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Ticket workflow changes the requested field.',\n\t\t\tstatus: 'fail',\n\t\t\texpected: 'Field updates after save.',\n\t\t\tobserved: 'Field stayed unchanged.'\n\t\t}]\n\t})\n});\n\nconst supportStaleBuild004430 = buildAIRun({\n\tid: 'support-004430',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004430', ticketId: 'ticket-004430' },\n\ttitle: '004430 stale build evidence',\n\tstatus: 'Running',\n\tphase: 'QA',\n\tevents: [{ type: 'qa_compile', message: 'Build log predates the final code diff.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'stale', staleEvidence: true, artifactPath: '.build-output/build-client.log' }\n\t})\n});\n\nconst cryptoPortfolioAccepted = buildAIRun({\n\tid: 'aicoder-crypto-v6-golden',\n\tsource: 'aicoder_app',\n\tsourceIds: { appId: 'crypto-v6-golden', jobId: 'crypto-job-golden' },\n\ttitle: 'Crypto Portfolio Tracker V6 Golden',\n\tstatus: 'Passed',\n\tphase: 'COMPLETE',\n\tevents: [{ type: 'scorecard', message: 'Quality scorecard passed with workflow proof.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/portfolio', status: 'pass', screenshot: 'qa-artifacts/crypto-dashboard.jpg' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Portfolio dashboard calculates seeded crypto holdings.',\n\t\t\tstatus: 'pass',\n\t\t\tdataProof: 'Seeded BTC and ETH holdings render totals, allocation, and change.'\n\t\t}]\n\t}),\n\tscorecardPassed: true,\n\tdeployStatus: 'pass',\n\tpublishStatus: 'published',\n\tsampleDataStatus: 'pass',\n\tterminal: true\n});\n\nconst layflatReleaseBlocked = buildAIRun({\n\tid: 'aicoder-layflat-pressure-optimizer',\n\tsource: 'aicoder_app',\n\tsourceIds: { appId: 'layflat-pressure-optimizer', jobId: 'layflat-job' },\n\ttitle: 'Layflat Pressure Optimizer',\n\tstatus: 'Passed',\n\tphase: 'COMPLETE',\n\tevents: [{ type: 'scorecard', message: 'Scorecard passed but sample data/publish gate failed.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/optimizer', status: 'pass', screenshot: 'qa-artifacts/layflat-route.jpg' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Pressure optimizer computes a layflat hose result.',\n\t\t\tstatus: 'pass',\n\t\t\tdataProof: 'A seeded hose diameter and flow rate produce PSI loss.'\n\t\t}]\n\t}),\n\tscorecardPassed: true,\n\tdeployStatus: 'pass',\n\tpublishStatus: 'publish failed',\n\tsampleDataStatus: 'empty seed collections',\n\tterminal: true\n});\n\nconst assistantWrongDateWindow = buildAIRun({\n\tid: 'assistant-wrong-month-window',\n\tsource: 'ai_assistant',\n\tsourceIds: { conversationId: 'assistant-date-window' },\n\ttitle: 'Assistant wrong month/date-window answer',\n\tstatus: 'Closed',\n\tphase: 'ANSWERED',\n\tevents: [{ type: 'assistant_message', message: 'Answered with the wrong month for today-sensitive invoice data.' }],\n\tqa: buildAIQaRun({\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Assistant date window uses the actual current date.',\n\t\t\tstatus: 'fail',\n\t\t\texpected: 'Use June 2026 for current-month windows.',\n\t\t\tobserved: 'Used a stale month.'\n\t\t}]\n\t}),\n\trejected: true,\n\tterminal: true\n});\n\nconst assistantIllegalProjection = buildAIRun({\n\tid: 'assistant-illegal-mongo-projection',\n\tsource: 'ai_assistant',\n\tsourceIds: { conversationId: 'assistant-positional-projection' },\n\ttitle: 'Assistant illegal Mongo positional projection',\n\tstatus: 'Closed',\n\tphase: 'ANSWERED',\n\tevents: [{ type: 'assistant_message', message: 'Mongo query used an illegal positional projection shape.' }],\n\tqa: buildAIQaRun({\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Assistant avoids illegal Mongo positional projection.',\n\t\t\tstatus: 'fail',\n\t\t\texpected: 'Use legal aggregation or field projection shape.',\n\t\t\tobserved: 'Used invalid positional projection.'\n\t\t}]\n\t}),\n\trejected: true,\n\tterminal: true\n});\n\nconst qaMissingPuppeteer = buildAIRun({\n\tid: 'qa-missing-puppeteer',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-missing-puppeteer' },\n\ttitle: 'QA runner missing Puppeteer',\n\tstatus: 'Running',\n\tphase: 'PREFLIGHT',\n\tevents: [{ type: 'qa_infra', message: 'Puppeteer failed to require.' }],\n\tqa: buildAIQaRun({\n\t\tinfraChecks: [{ name: 'puppeteer_require', status: 'blocked', message: 'Cannot find module puppeteer.' }]\n\t})\n});\n\nconst qaBadChromePath = buildAIRun({\n\tid: 'qa-bad-chrome-path',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-bad-chrome-path' },\n\ttitle: 'QA runner bad Chrome path',\n\tstatus: 'Running',\n\tphase: 'PREFLIGHT',\n\tevents: [{ type: 'qa_infra', message: 'Chrome executable path was missing.' }],\n\tqa: buildAIQaRun({\n\t\tinfraChecks: [{ name: 'chrome_executable', status: 'fail', message: 'Chrome executable not found.', path: '/bad/chrome' }]\n\t})\n});\n\nconst qaCompileFailure = buildAIRun({\n\tid: 'qa-compile-failure',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-compile-failure' },\n\ttitle: 'QA runner compile failure',\n\tstatus: 'Running',\n\tphase: 'COMPILE',\n\tevents: [{ type: 'qa_compile', message: 'Compile failed before browser QA.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'fail', command: 'npm run build', artifactPath: '.build-output/build.log' }\n\t})\n});\n\nconst qaRouteOnlyPass = buildAIRun({\n\tid: 'qa-route-only-pass',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-route-only-pass' },\n\ttitle: 'QA runner route-only pass',\n\tstatus: 'Passed',\n\tphase: 'BROWSER_QA',\n\tevents: [{ type: 'qa_route_probe', message: 'Route loaded but no business proof exists.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/dashboard', status: 'pass', screenshot: 'qa-artifacts/dashboard.jpg' }]\n\t}),\n\tscorecardPassed: true\n});\n\nconst qaShellOnlyPage = buildAIRun({\n\tid: 'qa-shell-only-page',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-shell-only-page' },\n\ttitle: 'QA runner shell-only page',\n\tstatus: 'Running',\n\tphase: 'BROWSER_QA',\n\tevents: [{ type: 'qa_route_probe', message: 'Shell-only route loaded.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/dashboard', status: 'pass', shellOnly: true, screenshot: 'qa-artifacts/shell.jpg' }]\n\t})\n});\n\nconst qaEmptyData = buildAIRun({\n\tid: 'qa-empty-data',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-empty-data' },\n\ttitle: 'QA runner empty data',\n\tstatus: 'Failed',\n\tphase: 'BROWSER_QA',\n\tevents: [{ type: 'qa_business_assertion', message: 'Workflow rendered empty data.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/invoices', status: 'pass' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Invoice dashboard renders non-empty meaningful data.',\n\t\t\tstatus: 'fail',\n\t\t\texpected: 'At least one meaningful invoice row.',\n\t\t\tobserved: 'Empty table.'\n\t\t}]\n\t}),\n\tterminal: true\n});\n\nconst qaPublishFailureAfterScorecard = buildAIRun({\n\tid: 'qa-scorecard-pass-publish-failure',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-publish-failure' },\n\ttitle: 'QA scorecard pass followed by publish failure',\n\tstatus: 'Passed',\n\tphase: 'RELEASE',\n\tevents: [{ type: 'publish', message: 'Scorecard passed but publish failed.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/app', status: 'pass' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Primary app workflow runs.',\n\t\t\tstatus: 'pass',\n\t\t\tdataProof: 'Workflow action returned expected state.'\n\t\t}]\n\t}),\n\tscorecardPassed: true,\n\tpublishStatus: 'publish failed',\n\tsampleDataStatus: 'pass'\n});\n\nexport const AI_RUN_SEED_EVAL_FIXTURES: AIRunEvalFixture[] = [\n\t{\n\t\tid: 'support-004131',\n\t\ttitle: 'Support 004131 accepted proof',\n\t\tsource: 'support_ticket',\n\t\trun: supportAccepted004131,\n\t\texpected: { outcome: 'accepted', failureClass: 'none', gates: [{ key: 'qa_business_assertion', status: 'pass' }] },\n\t\ttags: ['support', 'accepted', 'business_assertion']\n\t},\n\t{\n\t\tid: 'support-004333',\n\t\ttitle: 'Support 004333 compile failure',\n\t\tsource: 'support_ticket',\n\t\trun: supportBuildFailed004333,\n\t\texpected: { outcome: 'build_failed', failureClass: 'compile', nextActionIncludes: 'compile' },\n\t\ttags: ['support', 'compile']\n\t},\n\t{\n\t\tid: 'support-004341',\n\t\ttitle: 'Support 004341 Puppeteer infra failure',\n\t\tsource: 'support_ticket',\n\t\trun: supportInfraFailed004341,\n\t\texpected: { outcome: 'qa_infra_failed', failureClass: 'infra', nextActionIncludes: 'browser' },\n\t\ttags: ['support', 'infra', 'puppeteer']\n\t},\n\t{\n\t\tid: 'support-004421',\n\t\ttitle: 'Support 004421 route-only false pass',\n\t\tsource: 'support_ticket',\n\t\trun: supportFalsePass004421,\n\t\texpected: { outcome: 'false_pass', failureClass: 'false_pass', gates: [{ key: 'qa_business_assertion', status: 'blocked' }] },\n\t\ttags: ['support', 'route_only', 'false_pass']\n\t},\n\t{\n\t\tid: 'support-004423',\n\t\ttitle: 'Support 004423 business assertion failed',\n\t\tsource: 'support_ticket',\n\t\trun: supportBusinessFailed004423,\n\t\texpected: { outcome: 'qa_incomplete', failureClass: 'business', nextActionIncludes: 'assertion' },\n\t\ttags: ['support', 'business_assertion']\n\t},\n\t{\n\t\tid: 'support-004430',\n\t\ttitle: 'Support 004430 stale build evidence',\n\t\tsource: 'support_ticket',\n\t\trun: supportStaleBuild004430,\n\t\texpected: { outcome: 'build_failed', failureClass: 'compile', nextActionIncludes: 'build' },\n\t\ttags: ['support', 'compile', 'stale_build']\n\t},\n\t{\n\t\tid: 'aicoder-crypto-v6-golden',\n\t\ttitle: 'AICoder Crypto Portfolio Tracker V6 Golden',\n\t\tsource: 'aicoder_app',\n\t\trun: cryptoPortfolioAccepted,\n\t\texpected: { outcome: 'accepted', failureClass: 'none', gates: [{ key: 'qa_business_assertion', status: 'pass' }] },\n\t\ttags: ['aicoder', 'crypto', 'accepted']\n\t},\n\t{\n\t\tid: 'aicoder-layflat-pressure-optimizer',\n\t\ttitle: 'AICoder Layflat Pressure Optimizer release blocked',\n\t\tsource: 'aicoder_app',\n\t\trun: layflatReleaseBlocked,\n\t\texpected: { outcome: 'release_blocked', failureClass: 'release', gates: [{ key: 'release', status: 'fail' }] },\n\t\ttags: ['aicoder', 'layflat', 'release_blocked', 'sample_data']\n\t},\n\t{\n\t\tid: 'assistant-wrong-month-window',\n\t\ttitle: 'Assistant wrong month/date-window answer',\n\t\tsource: 'ai_assistant',\n\t\trun: assistantWrongDateWindow,\n\t\texpected: { outcome: 'rejected', failureClass: 'assistant_correctness' },\n\t\ttags: ['assistant', 'date_window']\n\t},\n\t{\n\t\tid: 'assistant-illegal-mongo-projection',\n\t\ttitle: 'Assistant illegal Mongo positional projection',\n\t\tsource: 'ai_assistant',\n\t\trun: assistantIllegalProjection,\n\t\texpected: { outcome: 'rejected', failureClass: 'assistant_correctness' },\n\t\ttags: ['assistant', 'mongo_query']\n\t},\n\t{\n\t\tid: 'qa-missing-puppeteer',\n\t\ttitle: 'QA missing Puppeteer',\n\t\tsource: 'qa_runner',\n\t\trun: qaMissingPuppeteer,\n\t\texpected: { outcome: 'qa_infra_failed', failureClass: 'infra' },\n\t\ttags: ['qa_runner', 'infra', 'puppeteer']\n\t},\n\t{\n\t\tid: 'qa-bad-chrome-path',\n\t\ttitle: 'QA bad Chrome path',\n\t\tsource: 'qa_runner',\n\t\trun: qaBadChromePath,\n\t\texpected: { outcome: 'qa_infra_failed', failureClass: 'infra' },\n\t\ttags: ['qa_runner', 'infra', 'chrome']\n\t},\n\t{\n\t\tid: 'qa-compile-failure',\n\t\ttitle: 'QA compile failure',\n\t\tsource: 'qa_runner',\n\t\trun: qaCompileFailure,\n\t\texpected: { outcome: 'build_failed', failureClass: 'compile' },\n\t\ttags: ['qa_runner', 'compile']\n\t},\n\t{\n\t\tid: 'qa-route-only-pass',\n\t\ttitle: 'QA route-only pass',\n\t\tsource: 'qa_runner',\n\t\trun: qaRouteOnlyPass,\n\t\texpected: { outcome: 'false_pass', failureClass: 'false_pass' },\n\t\ttags: ['qa_runner', 'route_only', 'false_pass']\n\t},\n\t{\n\t\tid: 'qa-shell-only-page',\n\t\ttitle: 'QA shell-only page',\n\t\tsource: 'qa_runner',\n\t\trun: qaShellOnlyPage,\n\t\texpected: { outcome: 'qa_incomplete', failureClass: 'route' },\n\t\ttags: ['qa_runner', 'route', 'shell_only']\n\t},\n\t{\n\t\tid: 'qa-empty-data',\n\t\ttitle: 'QA empty data',\n\t\tsource: 'qa_runner',\n\t\trun: qaEmptyData,\n\t\texpected: { outcome: 'rejected', failureClass: 'business' },\n\t\ttags: ['qa_runner', 'empty_data', 'business_assertion']\n\t},\n\t{\n\t\tid: 'qa-scorecard-pass-publish-failure',\n\t\ttitle: 'QA scorecard pass followed by publish failure',\n\t\tsource: 'qa_runner',\n\t\trun: qaPublishFailureAfterScorecard,\n\t\texpected: { outcome: 'release_blocked', failureClass: 'release' },\n\t\ttags: ['qa_runner', 'release_blocked', 'publish']\n\t}\n];\n"]}
1
+ {"version":3,"sources":["../../src/util/ai-run-evidence-eval.ts"],"names":[],"mappings":"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","file":"ai-run-evidence-eval.js","sourcesContent":["import {\n\tAIRun,\n\tAIRunOutcomeLabel,\n\tAIRunSource,\n\tAIRunTrainingExample,\n\tbuildAIRun,\n\tbuildAIQaRun,\n\tredactAIRunTrainingExample\n} from './ai-run-evidence';\n\nexport type AIRunFailureClass =\n\t| 'none'\n\t| 'infra'\n\t| 'compile'\n\t| 'route'\n\t| 'journey_contract'\n\t| 'business'\n\t| 'release'\n\t| 'false_pass'\n\t| 'assistant_missing_evidence'\n\t| 'assistant_query_error'\n\t| 'assistant_permission'\n\t| 'assistant_date_window'\n\t| 'assistant_query_shape'\n\t| 'assistant_correctness'\n\t| 'manual'\n\t| 'stopped'\n\t| 'unknown';\n\nexport type AIRunRetryAction =\n\t| 'none'\n\t| 'stop'\n\t| 'retry_infra_repair'\n\t| 'retry_build_repair'\n\t| 'retry_route_repair'\n\t| 'retry_journey_contract'\n\t| 'retry_business_repair'\n\t| 'retry_release_repair'\n\t| 'retry_assistant_answer_quality'\n\t| 'retry_assistant_query'\n\t| 'request_assistant_permission'\n\t| 'retry_assistant_date_window'\n\t| 'retry_assistant_query_shape'\n\t| 'manual_handoff';\n\nexport interface AIRunEvalExpectedGate {\n\tkey: string;\n\tstatus?: string;\n}\n\nexport interface AIRunEvalExpected {\n\toutcome: AIRunOutcomeLabel;\n\tfailureClass?: AIRunFailureClass;\n\tnextActionIncludes?: string;\n\tgates?: AIRunEvalExpectedGate[];\n}\n\nexport interface AIRunEvalFixture {\n\tid: string;\n\ttitle: string;\n\tsource: AIRunSource;\n\trun: AIRun;\n\texpected: AIRunEvalExpected;\n\ttags: string[];\n}\n\nexport interface AIRunEvalResult {\n\tid: string;\n\ttitle: string;\n\tsource: AIRunSource;\n\tpassed: boolean;\n\tactualOutcome: AIRunOutcomeLabel;\n\texpectedOutcome: AIRunOutcomeLabel;\n\tactualFailureClass: AIRunFailureClass;\n\texpectedFailureClass?: AIRunFailureClass;\n\tfailures: string[];\n\ttags: string[];\n}\n\nexport interface AIRunEvalSummary {\n\tpassed: boolean;\n\ttotal: number;\n\tpassedCount: number;\n\tfailedCount: number;\n\tresults: AIRunEvalResult[];\n\tfailuresByTag: Record<string, number>;\n\toutcomes: Record<string, number>;\n}\n\nexport interface AIRunDatasetExport {\n\tgeneratedAt: string;\n\ttotalRuns: number;\n\tsummary: {\n\t\tbySource: Record<string, number>;\n\t\tbyOutcome: Record<string, number>;\n\t\tbyFailureClass: Record<string, number>;\n\t\testimatedUsd: number;\n\t\ttotalTokens: number;\n\t};\n\truns: AIRun[];\n\ttrainingExamples: AIRunTrainingExample[];\n}\n\nexport interface AIRunDatasetExportOptions {\n\tredact?: boolean;\n\tincludeRuns?: boolean;\n\tmaxEvidenceItems?: number;\n\tnow?: Date | string;\n}\n\nexport interface AIRunRetryPolicyInput {\n\tcurrentRun: AIRun;\n\tpreviousRun?: AIRun;\n\tnewEvidenceCount?: number;\n\tunchangedFailureLimit?: number;\n\tsameFailureCount?: number;\n\thistoricalAcceptanceRate?: number;\n\testimatedNextRetryCostUsd?: number;\n\tminRetryExpectedValue?: number;\n}\n\nexport interface AIRunRetryDecision {\n\taction: AIRunRetryAction;\n\tfailureClass: AIRunFailureClass;\n\trepeatedFailure: boolean;\n\treason: string;\n\tnextAction: string;\n\tretryExpectedValue?: number;\n}\n\nfunction cleanText(value: any, max = 1000): string {\n\treturn String(value || '').replace(/\\s+/g, ' ').trim().slice(0, max);\n}\n\nfunction countBy<T extends string>(values: T[]): Record<string, number> {\n\tconst result: Record<string, number> = {};\n\tfor (const value of values) {\n\t\tresult[value] = (result[value] || 0) + 1;\n\t}\n\treturn result;\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 addUnique(values: string[], value: any, max = 1000): void {\n\tconst normalized = cleanText(value, max);\n\tif (normalized && !values.includes(normalized)) {\n\t\tvalues.push(normalized);\n\t}\n}\n\nfunction normalizedStatus(value: any): string {\n\treturn cleanText(value, 160).toLowerCase().replace(/[\\s-]+/g, '_');\n}\n\nfunction plainObject(value: any): Record<string, any> {\n\treturn value && typeof value === 'object' && !Array.isArray(value) ? value : {};\n}\n\nfunction assistantAnswerQualityMetadata(run: AIRun): Record<string, any> {\n\tconst gate = (run.gates || []).find((entry) => entry.key === 'assistant_answer_quality');\n\tconst gateMetadata = plainObject(gate?.metadata);\n\tconst runMetadata = plainObject(run.metadata);\n\tconst answerQuality = plainObject(runMetadata.answerQuality || runMetadata.answer_quality);\n\treturn {\n\t\t...gateMetadata,\n\t\t...answerQuality\n\t};\n}\n\nfunction classifyAssistantFailureClass(run: AIRun): AIRunFailureClass {\n\tconst metadata = assistantAnswerQualityMetadata(run);\n\tconst status = normalizedStatus(metadata.status || metadata.answerQualityStatus || metadata.answer_quality_status);\n\tconst queryStatus = normalizedStatus(metadata.queryStatus || metadata.query_status);\n\tconst missingEvidenceStatuses = new Set([\n\t\t'missing_data_source',\n\t\t'missing_query_status',\n\t\t'missing_query_proof',\n\t\t'missing_citations',\n\t\t'missing_citation',\n\t\t'low_confidence',\n\t\t'missing_next_action',\n\t\t'no_data_unverified',\n\t\t'blocked'\n\t]);\n\tif (queryStatus === 'permission_error' || status === 'permission_error') {\n\t\treturn 'assistant_permission';\n\t}\n\tif (queryStatus === 'query_error' || status === 'query_error') {\n\t\treturn 'assistant_query_error';\n\t}\n\tif (status === 'date_incorrect' || status === 'missing_date_window') {\n\t\treturn 'assistant_date_window';\n\t}\n\tif (status === 'illegal_query_shape') {\n\t\treturn 'assistant_query_shape';\n\t}\n\tif (missingEvidenceStatuses.has(status) || !status) {\n\t\treturn 'assistant_missing_evidence';\n\t}\n\treturn 'assistant_correctness';\n}\n\nexport function classifyAIRunFailureClass(run: AIRun): AIRunFailureClass {\n\tif (run.outcome === 'accepted') {\n\t\treturn 'none';\n\t}\n\tif (run.outcome === 'qa_infra_failed') {\n\t\treturn 'infra';\n\t}\n\tif (run.outcome === 'build_failed') {\n\t\treturn 'compile';\n\t}\n\tif (run.outcome === 'release_blocked') {\n\t\treturn 'release';\n\t}\n\tif (run.source === 'aicoder_app' && (run.gates || []).some((gate) => gate.key === 'aicoder_journey_contract' && (gate.status === 'blocked' || gate.status === 'fail'))) {\n\t\treturn 'journey_contract';\n\t}\n\tif (run.outcome === 'false_pass') {\n\t\treturn 'false_pass';\n\t}\n\tif (run.outcome === 'manual_handoff') {\n\t\treturn 'manual';\n\t}\n\tif (run.outcome === 'stopped') {\n\t\treturn 'stopped';\n\t}\n\tif (run.source === 'ai_assistant' && (run.outcome === 'rejected' || run.outcome === 'qa_incomplete')) {\n\t\treturn classifyAssistantFailureClass(run);\n\t}\n\tif (run.qa?.outcome === 'compile_failed') {\n\t\treturn 'compile';\n\t}\n\tif (run.qa?.outcome === 'route_failed') {\n\t\treturn 'route';\n\t}\n\tif (run.qa?.outcome === 'route_only_pass' || run.qa?.outcome === 'incomplete') {\n\t\treturn 'business';\n\t}\n\tif (run.qa?.outcome === 'business_assertion_failed') {\n\t\treturn 'business';\n\t}\n\tif (run.outcome === 'qa_incomplete') {\n\t\treturn 'business';\n\t}\n\tif (run.outcome === 'rejected') {\n\t\treturn 'business';\n\t}\n\treturn 'unknown';\n}\n\nexport function evaluateAIRunFixture(fixture: AIRunEvalFixture): AIRunEvalResult {\n\tconst failures: string[] = [];\n\tconst actualFailureClass = classifyAIRunFailureClass(fixture.run);\n\tif (fixture.run.outcome !== fixture.expected.outcome) {\n\t\tfailures.push(`Expected outcome ${fixture.expected.outcome}, got ${fixture.run.outcome}.`);\n\t}\n\tif (fixture.expected.failureClass && actualFailureClass !== fixture.expected.failureClass) {\n\t\tfailures.push(`Expected failure class ${fixture.expected.failureClass}, got ${actualFailureClass}.`);\n\t}\n\tif (fixture.expected.nextActionIncludes) {\n\t\tconst expectedText = fixture.expected.nextActionIncludes.toLowerCase();\n\t\tconst actualText = cleanText(fixture.run.nextAction, 2000).toLowerCase();\n\t\tif (!actualText.includes(expectedText)) {\n\t\t\tfailures.push(`Expected next action to include \"${fixture.expected.nextActionIncludes}\", got \"${fixture.run.nextAction || ''}\".`);\n\t\t}\n\t}\n\tconst gatesByKey: Record<string, string> = {};\n\tfor (const gate of fixture.run.gates || []) {\n\t\tgatesByKey[gate.key] = gate.status;\n\t}\n\tfor (const expectedGate of fixture.expected.gates || []) {\n\t\tif (!gatesByKey[expectedGate.key]) {\n\t\t\tfailures.push(`Expected gate ${expectedGate.key} to be present.`);\n\t\t}\n\t\telse if (expectedGate.status && gatesByKey[expectedGate.key] !== expectedGate.status) {\n\t\t\tfailures.push(`Expected gate ${expectedGate.key} status ${expectedGate.status}, got ${gatesByKey[expectedGate.key]}.`);\n\t\t}\n\t}\n\treturn {\n\t\tid: fixture.id,\n\t\ttitle: fixture.title,\n\t\tsource: fixture.source,\n\t\tpassed: failures.length === 0,\n\t\tactualOutcome: fixture.run.outcome,\n\t\texpectedOutcome: fixture.expected.outcome,\n\t\tactualFailureClass,\n\t\texpectedFailureClass: fixture.expected.failureClass,\n\t\tfailures,\n\t\ttags: fixture.tags\n\t};\n}\n\nexport function evaluateAIRunFixtures(fixtures: AIRunEvalFixture[] = AI_RUN_SEED_EVAL_FIXTURES): AIRunEvalSummary {\n\tconst results = fixtures.map((fixture) => evaluateAIRunFixture(fixture));\n\tconst failuresByTag: Record<string, number> = {};\n\tfor (const result of results) {\n\t\tif (result.passed) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const tag of result.tags) {\n\t\t\tfailuresByTag[tag] = (failuresByTag[tag] || 0) + 1;\n\t\t}\n\t}\n\tconst outcomes = countBy(results.map((result) => result.actualOutcome));\n\tconst passedCount = results.filter((result) => result.passed).length;\n\treturn {\n\t\tpassed: passedCount === results.length,\n\t\ttotal: results.length,\n\t\tpassedCount,\n\t\tfailedCount: results.length - passedCount,\n\t\tresults,\n\t\tfailuresByTag,\n\t\toutcomes\n\t};\n}\n\nexport function buildAIRunTrainingExampleFromRun(run: AIRun, maxEvidenceItems = 30): AIRunTrainingExample {\n\tconst evidence: string[] = [];\n\tfor (const gate of run.gates || []) {\n\t\taddUnique(evidence, `${gate.key}:${gate.status}: ${gate.reason}`, 1600);\n\t}\n\tfor (const event of run.events || []) {\n\t\taddUnique(evidence, `${event.type}:${event.category || ''}: ${event.message || ''}`, 1400);\n\t\tif (evidence.length >= maxEvidenceItems) {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (evidence.length < maxEvidenceItems) {\n\t\tfor (const assertion of run.qa?.businessAssertions || []) {\n\t\t\taddUnique(evidence, `assertion:${assertion.status}: ${assertion.assertion} observed=${assertion.observed || assertion.dataProof || assertion.message || ''}`, 1600);\n\t\t\tif (evidence.length >= maxEvidenceItems) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\trunId: run.id || run.sourceIds.jobId || run.sourceIds.ticketId || run.sourceIds.appId || run.sourceIds.conversationId || `${run.source}:unknown`,\n\t\tsource: run.source,\n\t\tinputSummary: [\n\t\t\t`source=${run.source}`,\n\t\t\t`title=${run.title || ''}`,\n\t\t\t`status=${run.status || ''}`,\n\t\t\t`phase=${run.phase || ''}`,\n\t\t\t`ids=${JSON.stringify(run.sourceIds || {})}`\n\t\t].join(' | '),\n\t\tactionSummary: [\n\t\t\t`outcome=${run.outcome}`,\n\t\t\t`failureClass=${classifyAIRunFailureClass(run)}`,\n\t\t\t`nextAction=${run.nextAction || ''}`\n\t\t].join(' | '),\n\t\toutcome: run.outcome,\n\t\tevidence: evidence.slice(0, maxEvidenceItems),\n\t\tcost: run.cost,\n\t\tmetadata: {\n\t\t\twarnings: run.warnings || [],\n\t\t\tgateCount: (run.gates || []).length,\n\t\t\teventCount: (run.events || []).length,\n\t\t\tqaOutcome: run.qa?.outcome\n\t\t}\n\t};\n}\n\nexport function buildAIRunDatasetExport(runs: AIRun[], options: AIRunDatasetExportOptions = {}): AIRunDatasetExport {\n\tconst generatedAt = isoNow(options.now);\n\tconst trainingExamples = runs.map((run) => {\n\t\tconst example = buildAIRunTrainingExampleFromRun(run, options.maxEvidenceItems || 30);\n\t\treturn options.redact === false ? example : redactAIRunTrainingExample(example);\n\t});\n\tconst estimatedUsd = runs.reduce((sum, run) => sum + (Number(run.cost?.estimatedUsd) || 0), 0);\n\tconst totalTokens = runs.reduce((sum, run) => sum + (Number(run.cost?.totalTokens) || 0), 0);\n\treturn {\n\t\tgeneratedAt,\n\t\ttotalRuns: runs.length,\n\t\tsummary: {\n\t\t\tbySource: countBy(runs.map((run) => run.source)),\n\t\t\tbyOutcome: countBy(runs.map((run) => run.outcome)),\n\t\t\tbyFailureClass: countBy(runs.map((run) => classifyAIRunFailureClass(run))),\n\t\t\testimatedUsd: Number(estimatedUsd.toFixed(6)),\n\t\t\ttotalTokens\n\t\t},\n\t\truns: options.includeRuns === false ? [] : runs,\n\t\ttrainingExamples\n\t};\n}\n\nexport function decideAIRunRetry(input: AIRunRetryPolicyInput): AIRunRetryDecision {\n\tconst failureClass = classifyAIRunFailureClass(input.currentRun);\n\tconst previousFailureClass = input.previousRun ? classifyAIRunFailureClass(input.previousRun) : undefined;\n\tconst sameFailureCount = Number(input.sameFailureCount || 0);\n\tconst unchangedFailureLimit = Number(input.unchangedFailureLimit || 2);\n\tconst repeatedFailure = previousFailureClass === failureClass && (Number(input.newEvidenceCount || 0) <= 0 || sameFailureCount >= unchangedFailureLimit);\n\tlet retryExpectedValue: number | undefined;\n\tif (input.historicalAcceptanceRate !== undefined && input.estimatedNextRetryCostUsd !== undefined) {\n\t\tretryExpectedValue = Number((Number(input.historicalAcceptanceRate) - Number(input.estimatedNextRetryCostUsd)).toFixed(6));\n\t}\n\tif (input.currentRun.outcome === 'accepted') {\n\t\treturn {\n\t\t\taction: 'none',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure: false,\n\t\t\treason: 'Run is already accepted.',\n\t\t\tnextAction: 'No retry required.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'manual') {\n\t\treturn {\n\t\t\taction: 'manual_handoff',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Run is marked for manual handoff.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Ask an operator to resolve the run.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'stopped') {\n\t\treturn {\n\t\t\taction: 'stop',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Run was stopped before accepted evidence was recorded.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Do not spend another model cycle unless the request is resumed.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (repeatedFailure) {\n\t\treturn {\n\t\t\taction: 'stop',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'The same failure class repeated with no new evidence. Stop model loops until the evidence changes.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Inspect the failing gate before retrying.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (retryExpectedValue !== undefined && retryExpectedValue < Number(input.minRetryExpectedValue || 0)) {\n\t\treturn {\n\t\t\taction: 'stop',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Historical retry expected value is below the configured threshold.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Do not retry without new evidence or a cheaper targeted repair.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'infra') {\n\t\treturn {\n\t\t\taction: 'retry_infra_repair',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'QA infrastructure failed before business validation.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Repair browser, settings, Mongo, ports, or startup before model repair.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'compile') {\n\t\treturn {\n\t\t\taction: 'retry_build_repair',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Compile/build evidence failed or was stale.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Repair build before browser QA.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'route') {\n\t\treturn {\n\t\t\taction: 'retry_route_repair',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Route probe failed before business proof.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Repair route/auth/startup and rerun the exact probe.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'journey_contract') {\n\t\treturn {\n\t\t\taction: 'retry_journey_contract',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'AICoder Journey Contract is missing or invalid before workflow build/proof.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Generate or repair docs/APP_JOURNEY_CONTRACT.md, validate the north-star workflow, then regenerate workflow QA rows.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'assistant_missing_evidence') {\n\t\treturn {\n\t\t\taction: 'retry_assistant_answer_quality',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Assistant answer is missing structured answerQuality, query proof, citations, confidence, or next-action evidence.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Rebuild the answerQuality record from the exact query/tool evidence before another broad assistant response.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'assistant_query_error') {\n\t\treturn {\n\t\t\taction: 'retry_assistant_query',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Assistant data access failed with a query error.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Repair and rerun the failing query/tool call, then answer only from the new query evidence.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'assistant_permission') {\n\t\treturn {\n\t\t\taction: 'request_assistant_permission',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Assistant data access was blocked by permission or authorization.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Ask for permission, escalate to an authorized user, or answer with the permission blocker instead of claiming no data.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'assistant_date_window') {\n\t\treturn {\n\t\t\taction: 'retry_assistant_date_window',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Assistant date-sensitive answer used the wrong current date or omitted the concrete date window.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Rerun the query using the actual current date and record exact start/end date-window evidence.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'assistant_query_shape') {\n\t\treturn {\n\t\t\taction: 'retry_assistant_query_shape',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Assistant query shape is illegal or unsafe for Mongo.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Rewrite the query with a legal projection or aggregation shape before retrying the data answer.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'release') {\n\t\treturn {\n\t\t\taction: 'retry_release_repair',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Business proof exists but deploy, publish, or sample-data gates block release.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Repair release gates without another broad model planning loop.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\tif (failureClass === 'business' || failureClass === 'false_pass' || failureClass === 'assistant_correctness') {\n\t\treturn {\n\t\t\taction: 'retry_business_repair',\n\t\t\tfailureClass,\n\t\t\trepeatedFailure,\n\t\t\treason: 'Business or assistant correctness proof failed or is missing.',\n\t\t\tnextAction: input.currentRun.nextAction || 'Repair the exact failing workflow/query and rerun the deterministic assertion.',\n\t\t\tretryExpectedValue\n\t\t};\n\t}\n\treturn {\n\t\taction: 'manual_handoff',\n\t\tfailureClass,\n\t\trepeatedFailure,\n\t\treason: 'Run lacks enough normalized evidence to choose a safe retry lane.',\n\t\tnextAction: input.currentRun.nextAction || 'Ingest more run evidence before retrying.',\n\t\tretryExpectedValue\n\t};\n}\n\nconst supportAccepted004131 = buildAIRun({\n\tid: 'support-004131',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004131', ticketId: 'ticket-004131' },\n\ttitle: '004131 accepted support fix',\n\tstatus: 'Resolved',\n\tphase: 'COMPLETE',\n\tevents: [{ type: 'git_commit', message: 'Fix support workflow and verified before/action/after proof.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass', artifactPath: '.build-output/build-server.log' },\n\t\trouteProbes: [{ route: '/support/004131', status: 'pass', screenshot: 'qa-artifacts/004131-after.jpg' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Before/action/after workflow proves the ticket fix.',\n\t\t\tstatus: 'pass',\n\t\t\taction: 'Run the ticket workflow against seeded data.',\n\t\t\texpected: 'The corrected state is visible.',\n\t\t\tobserved: 'The corrected state is visible after the action.',\n\t\t\tartifactPaths: ['qa-artifacts/004131-proof.json']\n\t\t}]\n\t}),\n\texplicitAccepted: true,\n\tterminal: true\n});\n\nconst supportBuildFailed004333 = buildAIRun({\n\tid: 'support-004333',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004333', ticketId: 'ticket-004333' },\n\ttitle: '004333 compile failure',\n\tstatus: 'Running',\n\tphase: 'QA',\n\tevents: [{ type: 'log', message: 'Angular build failed before browser QA.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'fail', artifactPath: '.build-output/build-client.log', message: 'TypeScript compile failed.' }\n\t})\n});\n\nconst supportInfraFailed004341 = buildAIRun({\n\tid: 'support-004341',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004341', ticketId: 'ticket-004341' },\n\ttitle: '004341 missing Puppeteer',\n\tstatus: 'Running',\n\tphase: 'QA',\n\tevents: [{ type: 'qa_infra', message: 'Puppeteer module could not be loaded.' }],\n\tqa: buildAIQaRun({\n\t\tinfraChecks: [{ name: 'puppeteer_require', status: 'blocked', message: 'Cannot find module puppeteer.' }]\n\t})\n});\n\nconst supportFalsePass004421 = buildAIRun({\n\tid: 'support-004421',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004421', ticketId: 'ticket-004421' },\n\ttitle: '004421 route-only support QA',\n\tstatus: 'Passed',\n\tphase: 'QA',\n\tevents: [{ type: 'scorecard', message: 'Scorecard passed after route loaded.' }],\n\tqa: buildAIQaRun({\n\t\tinfraChecks: [{ name: 'chrome_launch', status: 'pass' }],\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/support/004421', status: 'pass', screenshot: 'qa-artifacts/004421-route.jpg' }]\n\t}),\n\tscorecardPassed: true\n});\n\nconst supportBusinessFailed004423 = buildAIRun({\n\tid: 'support-004423',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004423', ticketId: 'ticket-004423' },\n\ttitle: '004423 business assertion failed',\n\tstatus: 'Running',\n\tphase: 'QA',\n\tevents: [{ type: 'qa_business_assertion', message: 'The expected workflow state did not change.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/support/004423', status: 'pass' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Ticket workflow changes the requested field.',\n\t\t\tstatus: 'fail',\n\t\t\texpected: 'Field updates after save.',\n\t\t\tobserved: 'Field stayed unchanged.'\n\t\t}]\n\t})\n});\n\nconst supportStaleBuild004430 = buildAIRun({\n\tid: 'support-004430',\n\tsource: 'support_ticket',\n\tsourceIds: { ticketNumber: '004430', ticketId: 'ticket-004430' },\n\ttitle: '004430 stale build evidence',\n\tstatus: 'Running',\n\tphase: 'QA',\n\tevents: [{ type: 'qa_compile', message: 'Build log predates the final code diff.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'stale', staleEvidence: true, artifactPath: '.build-output/build-client.log' }\n\t})\n});\n\nconst cryptoPortfolioAccepted = buildAIRun({\n\tid: 'aicoder-crypto-v6-golden',\n\tsource: 'aicoder_app',\n\tsourceIds: { appId: 'crypto-v6-golden', jobId: 'crypto-job-golden' },\n\ttitle: 'Crypto Portfolio Tracker V6 Golden',\n\tstatus: 'Passed',\n\tphase: 'COMPLETE',\n\tevents: [{ type: 'scorecard', message: 'Quality scorecard passed with workflow proof.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/portfolio', status: 'pass', screenshot: 'qa-artifacts/crypto-dashboard.jpg' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Portfolio dashboard calculates seeded crypto holdings.',\n\t\t\tstatus: 'pass',\n\t\t\tdataProof: 'Seeded BTC and ETH holdings render totals, allocation, and change.'\n\t\t}]\n\t}),\n\tscorecardPassed: true,\n\tdeployStatus: 'pass',\n\tpublishStatus: 'published',\n\tsampleDataStatus: 'pass',\n\tterminal: true\n});\n\nconst layflatReleaseBlocked = buildAIRun({\n\tid: 'aicoder-layflat-pressure-optimizer',\n\tsource: 'aicoder_app',\n\tsourceIds: { appId: 'layflat-pressure-optimizer', jobId: 'layflat-job' },\n\ttitle: 'Layflat Pressure Optimizer',\n\tstatus: 'Passed',\n\tphase: 'COMPLETE',\n\tevents: [{ type: 'scorecard', message: 'Scorecard passed but sample data/publish gate failed.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/optimizer', status: 'pass', screenshot: 'qa-artifacts/layflat-route.jpg' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Pressure optimizer computes a layflat hose result.',\n\t\t\tstatus: 'pass',\n\t\t\tdataProof: 'A seeded hose diameter and flow rate produce PSI loss.'\n\t\t}]\n\t}),\n\tscorecardPassed: true,\n\tdeployStatus: 'pass',\n\tpublishStatus: 'publish failed',\n\tsampleDataStatus: 'empty seed collections',\n\tterminal: true\n});\n\nconst assistantWrongDateWindow = buildAIRun({\n\tid: 'assistant-wrong-month-window',\n\tsource: 'ai_assistant',\n\tsourceIds: { conversationId: 'assistant-date-window' },\n\ttitle: 'Assistant wrong month/date-window answer',\n\tstatus: 'Closed',\n\tphase: 'ANSWERED',\n\tevents: [{ type: 'assistant_message', message: 'Answered with the wrong month for today-sensitive invoice data.' }],\n\tqa: buildAIQaRun({\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Assistant date window uses the actual current date.',\n\t\t\tstatus: 'fail',\n\t\t\texpected: 'Use June 2026 for current-month windows.',\n\t\t\tobserved: 'Used a stale month.'\n\t\t}]\n\t}),\n\tgates: [{\n\t\tkey: 'assistant_answer_quality',\n\t\tlabel: 'Assistant answer quality',\n\t\tstatus: 'fail',\n\t\treason: 'Assistant answer did not prove it used the actual current date.',\n\t\tevidenceRefs: [],\n\t\trecordedAt: '2026-06-16T00:00:00.000Z',\n\t\tmetadata: {\n\t\t\tstatus: 'date_incorrect',\n\t\t\tqueryStatus: 'ok',\n\t\t\tdateBasis: '2026-05-01',\n\t\t\texpectedCurrentDate: '2026-06-16'\n\t\t}\n\t}],\n\tmetadata: {\n\t\tanswerQuality: {\n\t\t\tstatus: 'date_incorrect',\n\t\t\tqueryStatus: 'ok',\n\t\t\tdateBasis: '2026-05-01',\n\t\t\texpectedCurrentDate: '2026-06-16'\n\t\t}\n\t},\n\trejected: true,\n\tterminal: true\n});\n\nconst assistantIllegalProjection = buildAIRun({\n\tid: 'assistant-illegal-mongo-projection',\n\tsource: 'ai_assistant',\n\tsourceIds: { conversationId: 'assistant-positional-projection' },\n\ttitle: 'Assistant illegal Mongo positional projection',\n\tstatus: 'Closed',\n\tphase: 'ANSWERED',\n\tevents: [{ type: 'assistant_message', message: 'Mongo query used an illegal positional projection shape.' }],\n\tqa: buildAIQaRun({\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Assistant avoids illegal Mongo positional projection.',\n\t\t\tstatus: 'fail',\n\t\t\texpected: 'Use legal aggregation or field projection shape.',\n\t\t\tobserved: 'Used invalid positional projection.'\n\t\t}]\n\t}),\n\tgates: [{\n\t\tkey: 'assistant_answer_quality',\n\t\tlabel: 'Assistant answer quality',\n\t\tstatus: 'fail',\n\t\treason: 'Assistant must use legal Mongo query/projection shapes before answering.',\n\t\tevidenceRefs: [],\n\t\trecordedAt: '2026-06-16T00:00:00.000Z',\n\t\tmetadata: {\n\t\t\tstatus: 'illegal_query_shape',\n\t\t\tqueryStatus: 'ok',\n\t\t\tlegalQueryShape: false\n\t\t}\n\t}],\n\tmetadata: {\n\t\tanswerQuality: {\n\t\t\tstatus: 'illegal_query_shape',\n\t\t\tqueryStatus: 'ok',\n\t\t\tlegalQueryShape: false\n\t\t}\n\t},\n\trejected: true,\n\tterminal: true\n});\n\nconst qaMissingPuppeteer = buildAIRun({\n\tid: 'qa-missing-puppeteer',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-missing-puppeteer' },\n\ttitle: 'QA runner missing Puppeteer',\n\tstatus: 'Running',\n\tphase: 'PREFLIGHT',\n\tevents: [{ type: 'qa_infra', message: 'Puppeteer failed to require.' }],\n\tqa: buildAIQaRun({\n\t\tinfraChecks: [{ name: 'puppeteer_require', status: 'blocked', message: 'Cannot find module puppeteer.' }]\n\t})\n});\n\nconst qaBadChromePath = buildAIRun({\n\tid: 'qa-bad-chrome-path',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-bad-chrome-path' },\n\ttitle: 'QA runner bad Chrome path',\n\tstatus: 'Running',\n\tphase: 'PREFLIGHT',\n\tevents: [{ type: 'qa_infra', message: 'Chrome executable path was missing.' }],\n\tqa: buildAIQaRun({\n\t\tinfraChecks: [{ name: 'chrome_executable', status: 'fail', message: 'Chrome executable not found.', path: '/bad/chrome' }]\n\t})\n});\n\nconst qaCompileFailure = buildAIRun({\n\tid: 'qa-compile-failure',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-compile-failure' },\n\ttitle: 'QA runner compile failure',\n\tstatus: 'Running',\n\tphase: 'COMPILE',\n\tevents: [{ type: 'qa_compile', message: 'Compile failed before browser QA.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'fail', command: 'npm run build', artifactPath: '.build-output/build.log' }\n\t})\n});\n\nconst qaRouteOnlyPass = buildAIRun({\n\tid: 'qa-route-only-pass',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-route-only-pass' },\n\ttitle: 'QA runner route-only pass',\n\tstatus: 'Passed',\n\tphase: 'BROWSER_QA',\n\tevents: [{ type: 'qa_route_probe', message: 'Route loaded but no business proof exists.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/dashboard', status: 'pass', screenshot: 'qa-artifacts/dashboard.jpg' }]\n\t}),\n\tscorecardPassed: true\n});\n\nconst qaShellOnlyPage = buildAIRun({\n\tid: 'qa-shell-only-page',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-shell-only-page' },\n\ttitle: 'QA runner shell-only page',\n\tstatus: 'Running',\n\tphase: 'BROWSER_QA',\n\tevents: [{ type: 'qa_route_probe', message: 'Shell-only route loaded.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/dashboard', status: 'pass', shellOnly: true, screenshot: 'qa-artifacts/shell.jpg' }]\n\t})\n});\n\nconst qaEmptyData = buildAIRun({\n\tid: 'qa-empty-data',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-empty-data' },\n\ttitle: 'QA runner empty data',\n\tstatus: 'Failed',\n\tphase: 'BROWSER_QA',\n\tevents: [{ type: 'qa_business_assertion', message: 'Workflow rendered empty data.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/invoices', status: 'pass' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Invoice dashboard renders non-empty meaningful data.',\n\t\t\tstatus: 'fail',\n\t\t\texpected: 'At least one meaningful invoice row.',\n\t\t\tobserved: 'Empty table.'\n\t\t}]\n\t}),\n\tterminal: true\n});\n\nconst qaPublishFailureAfterScorecard = buildAIRun({\n\tid: 'qa-scorecard-pass-publish-failure',\n\tsource: 'qa_runner',\n\tsourceIds: { jobId: 'qa-publish-failure' },\n\ttitle: 'QA scorecard pass followed by publish failure',\n\tstatus: 'Passed',\n\tphase: 'RELEASE',\n\tevents: [{ type: 'publish', message: 'Scorecard passed but publish failed.' }],\n\tqa: buildAIQaRun({\n\t\tcompile: { status: 'pass' },\n\t\trouteProbes: [{ route: '/app', status: 'pass' }],\n\t\tbusinessAssertions: [{\n\t\t\tassertion: 'Primary app workflow runs.',\n\t\t\tstatus: 'pass',\n\t\t\tdataProof: 'Workflow action returned expected state.'\n\t\t}]\n\t}),\n\tscorecardPassed: true,\n\tpublishStatus: 'publish failed',\n\tsampleDataStatus: 'pass'\n});\n\nexport const AI_RUN_SEED_EVAL_FIXTURES: AIRunEvalFixture[] = [\n\t{\n\t\tid: 'support-004131',\n\t\ttitle: 'Support 004131 accepted proof',\n\t\tsource: 'support_ticket',\n\t\trun: supportAccepted004131,\n\t\texpected: { outcome: 'accepted', failureClass: 'none', gates: [{ key: 'qa_business_assertion', status: 'pass' }] },\n\t\ttags: ['support', 'accepted', 'business_assertion']\n\t},\n\t{\n\t\tid: 'support-004333',\n\t\ttitle: 'Support 004333 compile failure',\n\t\tsource: 'support_ticket',\n\t\trun: supportBuildFailed004333,\n\t\texpected: { outcome: 'build_failed', failureClass: 'compile', nextActionIncludes: 'compile' },\n\t\ttags: ['support', 'compile']\n\t},\n\t{\n\t\tid: 'support-004341',\n\t\ttitle: 'Support 004341 Puppeteer infra failure',\n\t\tsource: 'support_ticket',\n\t\trun: supportInfraFailed004341,\n\t\texpected: { outcome: 'qa_infra_failed', failureClass: 'infra', nextActionIncludes: 'browser' },\n\t\ttags: ['support', 'infra', 'puppeteer']\n\t},\n\t{\n\t\tid: 'support-004421',\n\t\ttitle: 'Support 004421 route-only false pass',\n\t\tsource: 'support_ticket',\n\t\trun: supportFalsePass004421,\n\t\texpected: { outcome: 'false_pass', failureClass: 'false_pass', gates: [{ key: 'qa_business_assertion', status: 'blocked' }] },\n\t\ttags: ['support', 'route_only', 'false_pass']\n\t},\n\t{\n\t\tid: 'support-004423',\n\t\ttitle: 'Support 004423 business assertion failed',\n\t\tsource: 'support_ticket',\n\t\trun: supportBusinessFailed004423,\n\t\texpected: { outcome: 'qa_incomplete', failureClass: 'business', nextActionIncludes: 'assertion' },\n\t\ttags: ['support', 'business_assertion']\n\t},\n\t{\n\t\tid: 'support-004430',\n\t\ttitle: 'Support 004430 stale build evidence',\n\t\tsource: 'support_ticket',\n\t\trun: supportStaleBuild004430,\n\t\texpected: { outcome: 'build_failed', failureClass: 'compile', nextActionIncludes: 'build' },\n\t\ttags: ['support', 'compile', 'stale_build']\n\t},\n\t{\n\t\tid: 'aicoder-crypto-v6-golden',\n\t\ttitle: 'AICoder Crypto Portfolio Tracker V6 Golden',\n\t\tsource: 'aicoder_app',\n\t\trun: cryptoPortfolioAccepted,\n\t\texpected: { outcome: 'accepted', failureClass: 'none', gates: [{ key: 'qa_business_assertion', status: 'pass' }] },\n\t\ttags: ['aicoder', 'crypto', 'accepted']\n\t},\n\t{\n\t\tid: 'aicoder-layflat-pressure-optimizer',\n\t\ttitle: 'AICoder Layflat Pressure Optimizer release blocked',\n\t\tsource: 'aicoder_app',\n\t\trun: layflatReleaseBlocked,\n\t\texpected: { outcome: 'release_blocked', failureClass: 'release', gates: [{ key: 'release', status: 'fail' }] },\n\t\ttags: ['aicoder', 'layflat', 'release_blocked', 'sample_data']\n\t},\n\t{\n\t\tid: 'assistant-wrong-month-window',\n\t\ttitle: 'Assistant wrong month/date-window answer',\n\t\tsource: 'ai_assistant',\n\t\trun: assistantWrongDateWindow,\n\t\texpected: { outcome: 'rejected', failureClass: 'assistant_date_window' },\n\t\ttags: ['assistant', 'date_window']\n\t},\n\t{\n\t\tid: 'assistant-illegal-mongo-projection',\n\t\ttitle: 'Assistant illegal Mongo positional projection',\n\t\tsource: 'ai_assistant',\n\t\trun: assistantIllegalProjection,\n\t\texpected: { outcome: 'rejected', failureClass: 'assistant_query_shape' },\n\t\ttags: ['assistant', 'mongo_query']\n\t},\n\t{\n\t\tid: 'qa-missing-puppeteer',\n\t\ttitle: 'QA missing Puppeteer',\n\t\tsource: 'qa_runner',\n\t\trun: qaMissingPuppeteer,\n\t\texpected: { outcome: 'qa_infra_failed', failureClass: 'infra' },\n\t\ttags: ['qa_runner', 'infra', 'puppeteer']\n\t},\n\t{\n\t\tid: 'qa-bad-chrome-path',\n\t\ttitle: 'QA bad Chrome path',\n\t\tsource: 'qa_runner',\n\t\trun: qaBadChromePath,\n\t\texpected: { outcome: 'qa_infra_failed', failureClass: 'infra' },\n\t\ttags: ['qa_runner', 'infra', 'chrome']\n\t},\n\t{\n\t\tid: 'qa-compile-failure',\n\t\ttitle: 'QA compile failure',\n\t\tsource: 'qa_runner',\n\t\trun: qaCompileFailure,\n\t\texpected: { outcome: 'build_failed', failureClass: 'compile' },\n\t\ttags: ['qa_runner', 'compile']\n\t},\n\t{\n\t\tid: 'qa-route-only-pass',\n\t\ttitle: 'QA route-only pass',\n\t\tsource: 'qa_runner',\n\t\trun: qaRouteOnlyPass,\n\t\texpected: { outcome: 'false_pass', failureClass: 'false_pass' },\n\t\ttags: ['qa_runner', 'route_only', 'false_pass']\n\t},\n\t{\n\t\tid: 'qa-shell-only-page',\n\t\ttitle: 'QA shell-only page',\n\t\tsource: 'qa_runner',\n\t\trun: qaShellOnlyPage,\n\t\texpected: { outcome: 'qa_incomplete', failureClass: 'route' },\n\t\ttags: ['qa_runner', 'route', 'shell_only']\n\t},\n\t{\n\t\tid: 'qa-empty-data',\n\t\ttitle: 'QA empty data',\n\t\tsource: 'qa_runner',\n\t\trun: qaEmptyData,\n\t\texpected: { outcome: 'rejected', failureClass: 'business' },\n\t\ttags: ['qa_runner', 'empty_data', 'business_assertion']\n\t},\n\t{\n\t\tid: 'qa-scorecard-pass-publish-failure',\n\t\ttitle: 'QA scorecard pass followed by publish failure',\n\t\tsource: 'qa_runner',\n\t\trun: qaPublishFailureAfterScorecard,\n\t\texpected: { outcome: 'release_blocked', failureClass: 'release' },\n\t\ttags: ['qa_runner', 'release_blocked', 'publish']\n\t}\n];\n"]}