@resolveio/server-lib 22.3.174 → 22.3.175

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,6 +1,6 @@
1
1
  import { AIRun, AIRunOutcomeLabel, AIRunSource, AIRunTrainingExample } from './ai-run-evidence';
2
- export type AIRunFailureClass = 'none' | 'infra' | 'compile' | 'route' | '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_business_repair' | 'retry_release_repair' | 'manual_handoff';
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';
4
4
  export interface AIRunEvalExpectedGate {
5
5
  key: string;
6
6
  status?: string;
@@ -72,6 +72,9 @@ function classifyAIRunFailureClass(run) {
72
72
  if (run.outcome === 'release_blocked') {
73
73
  return 'release';
74
74
  }
75
+ if (run.source === 'aicoder_app' && (run.gates || []).some(function (gate) { return gate.key === 'aicoder_journey_contract' && (gate.status === 'blocked' || gate.status === 'fail'); })) {
76
+ return 'journey_contract';
77
+ }
75
78
  if (run.outcome === 'false_pass') {
76
79
  return 'false_pass';
77
80
  }
@@ -402,6 +405,16 @@ function decideAIRunRetry(input) {
402
405
  retryExpectedValue: retryExpectedValue
403
406
  };
404
407
  }
408
+ if (failureClass === 'journey_contract') {
409
+ return {
410
+ action: 'retry_journey_contract',
411
+ failureClass: failureClass,
412
+ repeatedFailure: repeatedFailure,
413
+ reason: 'AICoder Journey Contract is missing or invalid before workflow build/proof.',
414
+ nextAction: input.currentRun.nextAction || 'Generate or repair docs/APP_JOURNEY_CONTRACT.md, validate the north-star workflow, then regenerate workflow QA rows.',
415
+ retryExpectedValue: retryExpectedValue
416
+ };
417
+ }
405
418
  if (failureClass === 'release') {
406
419
  return {
407
420
  action: 'retry_release_repair',
@@ -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| '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_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.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 === '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_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"]}
@@ -466,6 +466,20 @@ function classifyAIRunOutcome(input) {
466
466
  recordedAt: now
467
467
  };
468
468
  }
469
+ var blockedAICoderJourneyContractGate = gates.find(function (gate) { return gate.key === 'aicoder_journey_contract' && (gate.status === 'blocked' || gate.status === 'fail'); });
470
+ if (blockedAICoderJourneyContractGate) {
471
+ var claimedSuccess = input.explicitAccepted === true || input.scorecardPassed === true || statusLooksPassed(input.scorecardStatus) || statusLooksPassed("".concat(input.status || '', " ").concat(input.phase || ''));
472
+ return {
473
+ outcome: claimedSuccess ? 'false_pass' : 'qa_incomplete',
474
+ reason: claimedSuccess
475
+ ? "AICoder run claimed success without a valid Journey Contract: ".concat(blockedAICoderJourneyContractGate.reason)
476
+ : "AICoder workflow is blocked until the Journey Contract validates: ".concat(blockedAICoderJourneyContractGate.reason),
477
+ nextAction: 'Generate or repair docs/APP_JOURNEY_CONTRACT.md, validate first/next/last workflow/data story/QA assertions, then rerun workflow build and workflow QA.',
478
+ gates: gates,
479
+ warnings: warnings,
480
+ recordedAt: now
481
+ };
482
+ }
469
483
  var blockedSupportNextActionContractGate = gates.find(function (gate) { return gate.key === 'support_next_action_contract' && gate.status === 'blocked'; });
470
484
  if (blockedSupportNextActionContractGate
471
485
  && (qa === null || qa === void 0 ? void 0 : qa.outcome) !== 'business_assertion_passed'