@resolveio/server-lib 22.3.173 → 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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "22.3.173",
3
+ "version": "22.3.175",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",
@@ -1513,6 +1513,40 @@ function supportNextActionContractObject(ticket, job, evidence) {
1513
1513
  || ticket.support_v5_autonomous_decision);
1514
1514
  return evidenceObject(autonomousDecision.nextActionContract, autonomousDecision.next_action_contract, job.supportV5NextActionContract, job.support_v5_next_action_contract, job.nextActionContract, job.next_action_contract, evidence.supportV5NextActionContract, evidence.support_v5_next_action_contract, evidence.nextActionContract, evidence.next_action_contract, ticket.supportV5NextActionContract, ticket.support_v5_next_action_contract, ticket.nextActionContract, ticket.next_action_contract, ticketManager.nextActionContract, ticketManager.next_action_contract);
1515
1515
  }
1516
+ function supportNextActionContractRequired(ticket, job, evidence) {
1517
+ var ticketAutomation = plainObject(ticket.automation);
1518
+ var ticketManager = plainObject(ticketAutomation.manager || ticket.manager);
1519
+ var workflowMarkers = [
1520
+ job.supportWorkflowMode,
1521
+ job.workflowMode,
1522
+ job.workflow_mode,
1523
+ job.supportWorkflowVersion,
1524
+ job.support_workflow_version,
1525
+ ticket.supportWorkflowMode,
1526
+ ticket.workflowMode,
1527
+ ticket.workflow_mode
1528
+ ].map(function (value) { return cleanText(value, 80).toLowerCase(); });
1529
+ return workflowMarkers.some(function (value) { return value === 'support_v5' || value === 'v5'; })
1530
+ || !!job.supportV5SupervisorState
1531
+ || !!job.supportV5MicrotaskLedger
1532
+ || !!job.supportV5StepHistory
1533
+ || !!job.supportV5DiagnosisGate
1534
+ || !!job.supportV5DiagnosisEvidencePack
1535
+ || !!job.support_v5_supervisor_state
1536
+ || !!job.support_v5_microtask_ledger
1537
+ || !!job.support_v5_step_history
1538
+ || !!job.support_v5_diagnosis_gate
1539
+ || !!job.support_v5_diagnosis_evidence_pack
1540
+ || !!job.supportRootCauseEntryContract
1541
+ || !!job.support_root_cause_entry_contract
1542
+ || !!evidence.supportV5AutonomousDecision
1543
+ || !!evidence.support_v5_autonomous_decision
1544
+ || !!evidence.rootCauseReadiness
1545
+ || !!evidence.root_cause_readiness
1546
+ || !!ticketManager.root_cause_entry_contract
1547
+ || !!ticketManager.rootCauseEntryContract
1548
+ || !!ticketManager.last_watchdog_decision;
1549
+ }
1516
1550
  function supportNextActionContractMetadata(contract) {
1517
1551
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
1518
1552
  var decisionBasis = plainObject(contract.decisionBasis || contract.decision_basis);
@@ -1558,9 +1592,31 @@ function supportNextActionContractMetadata(contract) {
1558
1592
  };
1559
1593
  return source;
1560
1594
  }
1561
- function supportNextActionContractGate(contract, now) {
1595
+ function supportNextActionContractGate(contract, now, required) {
1596
+ if (required === void 0) { required = false; }
1562
1597
  if (!contract || !Object.keys(contract).length) {
1563
- return undefined;
1598
+ if (!required) {
1599
+ return undefined;
1600
+ }
1601
+ var blocker = 'Support V5 run is missing a validated next-action contract, so the manager cannot prove one safe primary action without external Codex monitoring.';
1602
+ return {
1603
+ key: 'support_next_action_contract',
1604
+ label: 'Support next-action contract',
1605
+ status: 'blocked',
1606
+ reason: blocker,
1607
+ evidenceRefs: [],
1608
+ recordedAt: isoNow(now),
1609
+ metadata: {
1610
+ required: true,
1611
+ missingContract: true,
1612
+ safeToAutoRun: false,
1613
+ canRunWithoutCodexMonitor: false,
1614
+ codexFallbackRequired: true,
1615
+ codexFallbackReason: 'missing_support_next_action_contract',
1616
+ blockers: [blocker],
1617
+ missingSafetyFlags: ['safeToAutoRun', 'canRunWithoutCodexMonitor', 'codexFallbackRequired']
1618
+ }
1619
+ };
1564
1620
  }
1565
1621
  var metadata = supportNextActionContractMetadata(contract);
1566
1622
  var blockers = cleanStringList(metadata.blockers, 40, 500);
@@ -1724,6 +1780,16 @@ function buildAICoderQaEvidence(input) {
1724
1780
  || job.journey_contract_markdown
1725
1781
  || app.journeyContractMarkdown
1726
1782
  || app.journey_contract_markdown;
1783
+ evidence.journeyContractPath = firstNonEmptyText([
1784
+ evidence.journeyContractPath,
1785
+ evidence.journey_contract_path,
1786
+ workflowMemory.journeyContractPath,
1787
+ workflowMemory.journey_contract_path,
1788
+ job.journeyContractPath,
1789
+ job.journey_contract_path,
1790
+ app.journeyContractPath,
1791
+ app.journey_contract_path
1792
+ ], 500) || 'docs/APP_JOURNEY_CONTRACT.md';
1727
1793
  evidence.deployStatus = firstNonEmptyText([
1728
1794
  evidence.deployStatus,
1729
1795
  evidence.deploy_status,
@@ -1785,6 +1851,71 @@ function normalizeAICoderWorkflowProofReadiness(value, now) {
1785
1851
  evaluatedAt: isoNow(now || value.evaluatedAt || value.evaluated_at || value.recordedAt || value.recorded_at)
1786
1852
  };
1787
1853
  }
1854
+ function aicoderJourneyContractValidationFromEvidence(evidence) {
1855
+ var journeyInput = evidence.journeyContract !== undefined && evidence.journeyContract !== null
1856
+ ? evidence.journeyContract
1857
+ : evidence.journeyContractMarkdown;
1858
+ var hasJourneyInput = journeyInput !== undefined && journeyInput !== null && cleanText(journeyInput, 100).length > 0;
1859
+ if (!hasJourneyInput) {
1860
+ return {
1861
+ valid: false,
1862
+ contract: null,
1863
+ issues: [{
1864
+ code: 'missing_contract',
1865
+ path: cleanText(evidence.journeyContractPath, 500) || 'docs/APP_JOURNEY_CONTRACT.md',
1866
+ message: 'docs/APP_JOURNEY_CONTRACT.md with structured journey_contract JSON is required before AICoder build, workflow QA, wow UI, publish, or acceptance.',
1867
+ severity: 'error'
1868
+ }],
1869
+ workflowQaRows: [],
1870
+ primaryWorkflowId: ''
1871
+ };
1872
+ }
1873
+ return (0, aicoder_runner_v6_1.validateResolveIOAICoderJourneyContract)(journeyInput, {
1874
+ requireMarkdownEnvelope: typeof journeyInput === 'string'
1875
+ });
1876
+ }
1877
+ function aicoderJourneyContractGate(validation, evidence, now) {
1878
+ var errorIssues = validation.issues.filter(function (issue) { return issue.severity === 'error'; });
1879
+ var warningIssues = validation.issues.filter(function (issue) { return issue.severity === 'warning'; });
1880
+ var status = validation.valid
1881
+ ? (warningIssues.length ? 'warn' : 'pass')
1882
+ : 'blocked';
1883
+ var path = cleanText(evidence.journeyContractPath, 500) || 'docs/APP_JOURNEY_CONTRACT.md';
1884
+ return {
1885
+ key: 'aicoder_journey_contract',
1886
+ label: 'AICoder journey contract',
1887
+ status: status,
1888
+ reason: validation.valid
1889
+ ? (warningIssues.length
1890
+ ? "Journey contract is valid with warnings: ".concat(warningIssues.map(function (issue) { return issue.message; }).slice(0, 3).join(' | '))
1891
+ : 'Journey contract validates first/next/last workflow, data story, completion states, and QA assertions.')
1892
+ : (errorIssues.map(function (issue) { return issue.message; }).slice(0, 5).join(' | ') || 'AICoder Journey Contract is missing or invalid.'),
1893
+ evidenceRefs: [path],
1894
+ recordedAt: isoNow(now),
1895
+ metadata: {
1896
+ path: path,
1897
+ valid: validation.valid,
1898
+ primaryWorkflowId: cleanText(validation.primaryWorkflowId, 200),
1899
+ workflowQaRowCount: validation.workflowQaRows.length,
1900
+ errorCount: errorIssues.length,
1901
+ warningCount: warningIssues.length,
1902
+ issueCodes: cleanStringList(validation.issues.map(function (issue) { return issue.code; }), 40, 120),
1903
+ issues: validation.issues.slice(0, 20).map(function (issue) { return ({
1904
+ code: cleanText(issue.code, 120),
1905
+ path: cleanText(issue.path, 500),
1906
+ severity: issue.severity,
1907
+ message: cleanText(issue.message, 800)
1908
+ }); }),
1909
+ blocksBuildUntilValid: !validation.valid,
1910
+ blocksWorkflowQaUntilValid: !validation.valid,
1911
+ blocksWowUiUntilWorkflowProof: !validation.valid,
1912
+ blocksPublishUntilWorkflowProof: !validation.valid,
1913
+ nextAction: validation.valid
1914
+ ? 'Generate workflow QA rows from journey_contract.qa_assertions and execute the north-star workflow.'
1915
+ : 'Generate or repair docs/APP_JOURNEY_CONTRACT.md before app build, wow UI, publish, or acceptance.'
1916
+ }
1917
+ };
1918
+ }
1788
1919
  function aicoderWorkflowProofReadinessGate(readiness, now) {
1789
1920
  var status = readiness.ready
1790
1921
  ? 'pass'
@@ -2370,7 +2501,8 @@ function buildSupportAIRunFromEvidence(input) {
2370
2501
  });
2371
2502
  }
2372
2503
  var nextActionContract = supportNextActionContractObject(ticket, job, evidence);
2373
- var nextActionContractGate = supportNextActionContractGate(nextActionContract, input.now);
2504
+ var nextActionContractRequired = supportNextActionContractRequired(ticket, job, evidence);
2505
+ var nextActionContractGate = supportNextActionContractGate(nextActionContract, input.now, nextActionContractRequired);
2374
2506
  if (nextActionContractGate) {
2375
2507
  gates.push(nextActionContractGate);
2376
2508
  pushEvent(events, {
@@ -2566,7 +2698,7 @@ function buildSupportAIRunFromEvidence(input) {
2566
2698
  }
2567
2699
  function buildAICoderAIRunFromEvidence(input) {
2568
2700
  var e_30, _a;
2569
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
2701
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6;
2570
2702
  var app = input.app || {};
2571
2703
  var job = input.job || {};
2572
2704
  var evidence = buildAICoderQaEvidence(input);
@@ -2577,8 +2709,8 @@ function buildAICoderAIRunFromEvidence(input) {
2577
2709
  addSourceId(sourceIds, 'jobId', job._id || job.id || job.jobId);
2578
2710
  addSourceId(sourceIds, 'domain', app.domain || app.customDomain || job.domain);
2579
2711
  try {
2580
- for (var _v = __values(asArray(input.logs)), _w = _v.next(); !_w.done; _w = _v.next()) {
2581
- var log = _w.value;
2712
+ for (var _7 = __values(asArray(input.logs)), _8 = _7.next(); !_8.done; _8 = _7.next()) {
2713
+ var log = _8.value;
2582
2714
  pushEvent(events, {
2583
2715
  type: log.type === 'scorecard' ? 'scorecard' : 'log',
2584
2716
  category: cleanText(log.category || log.phase || log.level, 160),
@@ -2596,7 +2728,7 @@ function buildAICoderAIRunFromEvidence(input) {
2596
2728
  catch (e_30_1) { e_30 = { error: e_30_1 }; }
2597
2729
  finally {
2598
2730
  try {
2599
- if (_w && !_w.done && (_a = _v.return)) _a.call(_v);
2731
+ if (_8 && !_8.done && (_a = _7.return)) _a.call(_7);
2600
2732
  }
2601
2733
  finally { if (e_30) throw e_30.error; }
2602
2734
  }
@@ -2615,6 +2747,17 @@ function buildAICoderAIRunFromEvidence(input) {
2615
2747
  });
2616
2748
  }
2617
2749
  var cost = collectUsageEvents(asArray(input.usageLedger), events);
2750
+ var journeyContractValidation = aicoderJourneyContractValidationFromEvidence(evidence);
2751
+ var journeyContractGate = aicoderJourneyContractGate(journeyContractValidation, evidence, input.now);
2752
+ gates.push(journeyContractGate);
2753
+ pushEvent(events, {
2754
+ type: 'log',
2755
+ category: 'aicoder_journey_contract',
2756
+ message: journeyContractGate.reason,
2757
+ artifactPaths: journeyContractGate.evidenceRefs,
2758
+ recordedAt: journeyContractGate.recordedAt,
2759
+ metadata: journeyContractGate.metadata
2760
+ });
2618
2761
  var scorecardPassed = evidence.scorecardPassed === true
2619
2762
  || evidence.scorecardStatus === 'pass'
2620
2763
  || (Number((_c = (_b = evidence.score) !== null && _b !== void 0 ? _b : evidence.qualityScore) !== null && _c !== void 0 ? _c : 0) >= Number((_e = (_d = evidence.scoreThreshold) !== null && _d !== void 0 ? _d : job.scoreThreshold) !== null && _e !== void 0 ? _e : 90));
@@ -2708,6 +2851,21 @@ function buildAICoderAIRunFromEvidence(input) {
2708
2851
  wowScore: (_g = evidence.wowScore) !== null && _g !== void 0 ? _g : job.wowScore,
2709
2852
  score: (_h = evidence.score) !== null && _h !== void 0 ? _h : evidence.qualityScore,
2710
2853
  managerNoBlindLoopPolicy: managerNoBlindLoopMetadata(noBlindLoopGate),
2854
+ journeyContract: {
2855
+ status: journeyContractGate.status,
2856
+ valid: ((_j = journeyContractGate.metadata) === null || _j === void 0 ? void 0 : _j.valid) === true,
2857
+ path: cleanText((_k = journeyContractGate.metadata) === null || _k === void 0 ? void 0 : _k.path, 500),
2858
+ primaryWorkflowId: cleanText((_l = journeyContractGate.metadata) === null || _l === void 0 ? void 0 : _l.primaryWorkflowId, 200),
2859
+ workflowQaRowCount: Number(((_m = journeyContractGate.metadata) === null || _m === void 0 ? void 0 : _m.workflowQaRowCount) || 0),
2860
+ errorCount: Number(((_o = journeyContractGate.metadata) === null || _o === void 0 ? void 0 : _o.errorCount) || 0),
2861
+ warningCount: Number(((_p = journeyContractGate.metadata) === null || _p === void 0 ? void 0 : _p.warningCount) || 0),
2862
+ issueCodes: cleanStringList((_q = journeyContractGate.metadata) === null || _q === void 0 ? void 0 : _q.issueCodes, 40, 120),
2863
+ blocksBuildUntilValid: ((_r = journeyContractGate.metadata) === null || _r === void 0 ? void 0 : _r.blocksBuildUntilValid) === true,
2864
+ blocksWorkflowQaUntilValid: ((_s = journeyContractGate.metadata) === null || _s === void 0 ? void 0 : _s.blocksWorkflowQaUntilValid) === true,
2865
+ blocksWowUiUntilWorkflowProof: ((_t = journeyContractGate.metadata) === null || _t === void 0 ? void 0 : _t.blocksWowUiUntilWorkflowProof) === true,
2866
+ blocksPublishUntilWorkflowProof: ((_u = journeyContractGate.metadata) === null || _u === void 0 ? void 0 : _u.blocksPublishUntilWorkflowProof) === true,
2867
+ nextAction: cleanText((_v = journeyContractGate.metadata) === null || _v === void 0 ? void 0 : _v.nextAction, 1000)
2868
+ },
2711
2869
  workflowProofReadiness: {
2712
2870
  ready: workflowReadiness.ready,
2713
2871
  status: workflowReadiness.status,
@@ -2724,18 +2882,18 @@ function buildAICoderAIRunFromEvidence(input) {
2724
2882
  proofFreshness: workflowReadiness.proofFreshness
2725
2883
  },
2726
2884
  workflowProofCheckpoint: workflowProofCheckpointGate ? {
2727
- status: cleanText((_j = workflowProofCheckpointGate.metadata) === null || _j === void 0 ? void 0 : _j.status, 120),
2885
+ status: cleanText((_w = workflowProofCheckpointGate.metadata) === null || _w === void 0 ? void 0 : _w.status, 120),
2728
2886
  gateStatus: workflowProofCheckpointGate.status,
2729
- readinessStatus: cleanText((_k = workflowProofCheckpointGate.metadata) === null || _k === void 0 ? void 0 : _k.readinessStatus, 120),
2730
- nextGate: cleanText((_l = workflowProofCheckpointGate.metadata) === null || _l === void 0 ? void 0 : _l.nextGate, 120),
2731
- nextAction: cleanText((_m = workflowProofCheckpointGate.metadata) === null || _m === void 0 ? void 0 : _m.nextAction, 1000),
2732
- blocksProductRepairUntilJourneyContract: ((_o = workflowProofCheckpointGate.metadata) === null || _o === void 0 ? void 0 : _o.blocksProductRepairUntilJourneyContract) === true,
2733
- blocksPublishUntilWorkflowProof: ((_p = workflowProofCheckpointGate.metadata) === null || _p === void 0 ? void 0 : _p.blocksPublishUntilWorkflowProof) === true,
2734
- blocksPublishUntilReleaseGate: ((_q = workflowProofCheckpointGate.metadata) === null || _q === void 0 ? void 0 : _q.blocksPublishUntilReleaseGate) === true,
2735
- blocksWowUiUntilWorkflowProof: ((_r = workflowProofCheckpointGate.metadata) === null || _r === void 0 ? void 0 : _r.blocksWowUiUntilWorkflowProof) === true,
2736
- workflowProofFingerprint: cleanText((_s = workflowProofCheckpointGate.metadata) === null || _s === void 0 ? void 0 : _s.workflowProofFingerprint, 200),
2737
- artifactFingerprint: cleanText((_t = workflowProofCheckpointGate.metadata) === null || _t === void 0 ? void 0 : _t.artifactFingerprint, 200),
2738
- blockers: cleanStringList((_u = workflowProofCheckpointGate.metadata) === null || _u === void 0 ? void 0 : _u.blockers, 20, 500)
2887
+ readinessStatus: cleanText((_x = workflowProofCheckpointGate.metadata) === null || _x === void 0 ? void 0 : _x.readinessStatus, 120),
2888
+ nextGate: cleanText((_y = workflowProofCheckpointGate.metadata) === null || _y === void 0 ? void 0 : _y.nextGate, 120),
2889
+ nextAction: cleanText((_z = workflowProofCheckpointGate.metadata) === null || _z === void 0 ? void 0 : _z.nextAction, 1000),
2890
+ blocksProductRepairUntilJourneyContract: ((_0 = workflowProofCheckpointGate.metadata) === null || _0 === void 0 ? void 0 : _0.blocksProductRepairUntilJourneyContract) === true,
2891
+ blocksPublishUntilWorkflowProof: ((_1 = workflowProofCheckpointGate.metadata) === null || _1 === void 0 ? void 0 : _1.blocksPublishUntilWorkflowProof) === true,
2892
+ blocksPublishUntilReleaseGate: ((_2 = workflowProofCheckpointGate.metadata) === null || _2 === void 0 ? void 0 : _2.blocksPublishUntilReleaseGate) === true,
2893
+ blocksWowUiUntilWorkflowProof: ((_3 = workflowProofCheckpointGate.metadata) === null || _3 === void 0 ? void 0 : _3.blocksWowUiUntilWorkflowProof) === true,
2894
+ workflowProofFingerprint: cleanText((_4 = workflowProofCheckpointGate.metadata) === null || _4 === void 0 ? void 0 : _4.workflowProofFingerprint, 200),
2895
+ artifactFingerprint: cleanText((_5 = workflowProofCheckpointGate.metadata) === null || _5 === void 0 ? void 0 : _5.artifactFingerprint, 200),
2896
+ blockers: cleanStringList((_6 = workflowProofCheckpointGate.metadata) === null || _6 === void 0 ? void 0 : _6.blockers, 20, 500)
2739
2897
  } : undefined
2740
2898
  }
2741
2899
  });