@resolveio/server-lib 22.3.193 → 22.3.195

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.193",
3
+ "version": "22.3.195",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",
@@ -272,6 +272,57 @@ function managerNoBlindLoopGateFromHistory(history, budgetSource, now) {
272
272
  }
273
273
  };
274
274
  }
275
+ function managerRecoveryExecutionProofGate(proof, now) {
276
+ if (!proof || !Object.keys(proof).length) {
277
+ return undefined;
278
+ }
279
+ var validation = (0, ai_runner_manager_policy_1.validateResolveIOAIManagerRecoveryExecutionProofContract)(proof);
280
+ var normalized = validation.normalized;
281
+ var statusText = cleanText(normalized.status, 120);
282
+ var gateStatus = validation.valid && normalized.canContinueRun === true && statusText === 'proof_ready'
283
+ ? 'pass'
284
+ : statusText === 'manual_handoff'
285
+ ? 'warn'
286
+ : 'blocked';
287
+ return {
288
+ key: 'manager_recovery_execution_proof',
289
+ label: 'Manager recovery execution proof',
290
+ status: gateStatus,
291
+ reason: normalized.blockers[0] || validation.blockers[0] || statusText || 'Manager recovery execution proof recorded.',
292
+ evidenceRefs: normalized.artifactPaths,
293
+ recordedAt: isoNow(now || normalized.createdAt),
294
+ metadata: {
295
+ contractId: normalized.contractId,
296
+ directiveId: normalized.directiveId,
297
+ surface: normalized.surface,
298
+ dispatchAction: normalized.dispatchAction,
299
+ phase: normalized.phase,
300
+ status: statusText,
301
+ canContinueRun: normalized.canContinueRun,
302
+ canRunProductRepair: normalized.canRunProductRepair,
303
+ canRunExpensiveModel: normalized.canRunExpensiveModel,
304
+ canResetLoopBudget: normalized.canResetLoopBudget,
305
+ proofRequiredBeforeContinuation: normalized.proofRequiredBeforeContinuation,
306
+ requiresNewEvidence: normalized.requiresNewEvidence,
307
+ newEvidence: normalized.newEvidence,
308
+ materialEvidence: normalized.materialEvidence,
309
+ evidenceStrength: normalized.evidenceStrength,
310
+ evidenceSignals: normalized.evidenceSignals,
311
+ startingFailureClass: normalized.startingFailureClass,
312
+ startingBlockerFingerprint: normalized.startingBlockerFingerprint,
313
+ startingEvidenceHash: normalized.startingEvidenceHash,
314
+ latestFailureClass: normalized.latestFailureClass,
315
+ latestBlockerFingerprint: normalized.latestBlockerFingerprint,
316
+ latestEvidenceHash: normalized.latestEvidenceHash,
317
+ requiredEvidence: normalized.requiredEvidence,
318
+ missingEvidence: normalized.missingEvidence,
319
+ changedFiles: normalized.changedFiles,
320
+ blockers: Array.from(new Set(__spreadArray(__spreadArray([], __read(normalized.blockers), false), __read(validation.blockers), false))),
321
+ nextAllowedAction: normalized.nextAllowedAction,
322
+ forbiddenActions: normalized.forbiddenActions
323
+ }
324
+ };
325
+ }
275
326
  function supportManagerNoBlindLoopGate(job, evidence, now) {
276
327
  return managerNoBlindLoopGateFromHistory(supportManagerFailureRecords(job, evidence), job.supportV5Budget || job.support_v5_budget || evidence.supportV5Budget || evidence.support_v5_budget, now);
277
328
  }
@@ -1622,6 +1673,8 @@ function buildSupportQaEvidence(input) {
1622
1673
  var ticket = input.ticket || {};
1623
1674
  var qaCursor = plainObject(job.supportQaValidationCursor || job.support_qa_validation_cursor);
1624
1675
  var autonomousDecision = plainObject(job.supportV5AutonomousDecision || job.support_v5_autonomous_decision);
1676
+ var ticketAutomation = plainObject(ticket.automation);
1677
+ var ticketManager = plainObject(ticketAutomation.manager || ticket.manager);
1625
1678
  var preflightGate = supportPreflightGateObject(ticket, job, __assign(__assign({}, plainObject(input.qaEvidence)), { supportV5AutonomousDecision: autonomousDecision }));
1626
1679
  var businessProofReadiness = plainObject(autonomousDecision.businessProofReadiness
1627
1680
  || autonomousDecision.business_proof_readiness
@@ -1631,6 +1684,20 @@ function buildSupportQaEvidence(input) {
1631
1684
  || autonomousDecision.customer_reply_policy
1632
1685
  || job.customerReplyPolicy
1633
1686
  || job.customer_reply_policy);
1687
+ var customerReplyReadiness = plainObject(autonomousDecision.customerReplyReadiness
1688
+ || autonomousDecision.customer_reply_readiness
1689
+ || customerReplyPolicy.readinessContract
1690
+ || customerReplyPolicy.readiness_contract
1691
+ || job.customerReplyReadiness
1692
+ || job.customer_reply_readiness);
1693
+ var managerRecoveryExecutionProof = plainObject(job.managerRecoveryExecutionProof
1694
+ || job.manager_recovery_execution_proof
1695
+ || job.supportManagerRecoveryExecutionProof
1696
+ || job.support_manager_recovery_execution_proof
1697
+ || autonomousDecision.recoveryExecutionProof
1698
+ || autonomousDecision.recovery_execution_proof
1699
+ || ticketManager.last_recovery_execution_proof
1700
+ || ticketManager.recovery_execution_proof);
1634
1701
  var humanReviewPacket = plainObject(autonomousDecision.humanReviewPacket
1635
1702
  || autonomousDecision.human_review_packet
1636
1703
  || customerReplyPolicy.humanReviewPacket
@@ -1651,6 +1718,12 @@ function buildSupportQaEvidence(input) {
1651
1718
  else if (Object.keys(humanReviewPacket).length) {
1652
1719
  evidence.customerReplyPolicy = { humanReviewPacket: humanReviewPacket };
1653
1720
  }
1721
+ if (Object.keys(customerReplyReadiness).length) {
1722
+ evidence.customerReplyReadiness = customerReplyReadiness;
1723
+ }
1724
+ if (Object.keys(managerRecoveryExecutionProof).length) {
1725
+ evidence.managerRecoveryExecutionProof = managerRecoveryExecutionProof;
1726
+ }
1654
1727
  if (Object.keys(preflightGate).length) {
1655
1728
  evidence.supportV5PreflightGate = preflightGate;
1656
1729
  applySupportPreflightGateToQaEvidence(evidence, preflightGate);
@@ -1874,6 +1947,47 @@ function supportCustomerReplyPolicyGate(policy, now) {
1874
1947
  }
1875
1948
  };
1876
1949
  }
1950
+ function supportCustomerReplyReadinessGate(contract, now) {
1951
+ if (!contract || !Object.keys(contract).length) {
1952
+ return undefined;
1953
+ }
1954
+ var validation = (0, support_runner_v5_1.validateResolveIOSupportCustomerReplyReadinessContract)(contract);
1955
+ var normalized = validation.normalized;
1956
+ var status = cleanText(normalized.status, 120);
1957
+ var gateStatus = normalized.canSendCustomerReply
1958
+ ? 'blocked'
1959
+ : validation.valid && (status === 'draft_ready' || status === 'clarification_required')
1960
+ ? 'warn'
1961
+ : 'blocked';
1962
+ return {
1963
+ key: 'support_customer_reply_readiness',
1964
+ label: 'Support customer reply readiness',
1965
+ status: gateStatus,
1966
+ reason: normalized.reason || validation.blockers.join('; ') || status || 'Support customer reply readiness recorded.',
1967
+ evidenceRefs: normalized.evidenceRefs,
1968
+ recordedAt: isoNow(now || normalized.createdAt),
1969
+ metadata: {
1970
+ contractId: normalized.contractId,
1971
+ status: status,
1972
+ policyAction: normalized.policyAction,
1973
+ reviewType: normalized.reviewType,
1974
+ primaryCommand: normalized.primaryCommand,
1975
+ canDraftCustomerReply: normalized.canDraftCustomerReply,
1976
+ canSendCustomerReply: normalized.canSendCustomerReply,
1977
+ requiresHumanApproval: normalized.requiresHumanApproval,
1978
+ proofBacked: normalized.proofBacked,
1979
+ businessProofReady: normalized.businessProofReady,
1980
+ releaseReady: normalized.releaseReady,
1981
+ diagnosisReady: normalized.diagnosisReady,
1982
+ issueClassProbePlanReady: normalized.issueClassProbePlanReady,
1983
+ clarificationRequired: normalized.clarificationRequired,
1984
+ blockers: Array.from(new Set(__spreadArray(__spreadArray([], __read(normalized.blockers), false), __read(validation.blockers), false))),
1985
+ requiredEvidence: normalized.requiredEvidence,
1986
+ nextCommands: normalized.nextCommands,
1987
+ forbiddenActions: normalized.forbiddenActions
1988
+ }
1989
+ };
1990
+ }
1877
1991
  function supportNextActionContractObject(ticket, job, evidence) {
1878
1992
  var ticketAutomation = plainObject(ticket.automation);
1879
1993
  var ticketManager = plainObject(ticketAutomation.manager || ticket.manager);
@@ -3121,7 +3235,7 @@ function applyAssistantAnswerQualityGate(qa, decision, now) {
3121
3235
  }
3122
3236
  function buildSupportAIRunFromEvidence(input) {
3123
3237
  var e_32, _a, e_33, _b;
3124
- var _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, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51;
3238
+ var _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, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72;
3125
3239
  var ticket = input.ticket || {};
3126
3240
  var job = input.job || {};
3127
3241
  var evidence = buildSupportQaEvidence(input);
@@ -3133,8 +3247,8 @@ function buildSupportAIRunFromEvidence(input) {
3133
3247
  addSourceId(sourceIds, 'jobId', job._id || job.id || job.jobId);
3134
3248
  addSourceId(sourceIds, 'buildPlanId', job.buildPlanId || ticket.buildPlanId);
3135
3249
  try {
3136
- for (var _52 = __values(asArray(input.taskEvents)), _53 = _52.next(); !_53.done; _53 = _52.next()) {
3137
- var event_1 = _53.value;
3250
+ for (var _73 = __values(asArray(input.taskEvents)), _74 = _73.next(); !_74.done; _74 = _73.next()) {
3251
+ var event_1 = _74.value;
3138
3252
  pushEvent(events, {
3139
3253
  type: event_1.type === 'human_intervention' ? 'human_intervention' : 'log',
3140
3254
  category: cleanText(event_1.category || event_1.phase || event_1.type, 160),
@@ -3151,13 +3265,13 @@ function buildSupportAIRunFromEvidence(input) {
3151
3265
  catch (e_32_1) { e_32 = { error: e_32_1 }; }
3152
3266
  finally {
3153
3267
  try {
3154
- if (_53 && !_53.done && (_a = _52.return)) _a.call(_52);
3268
+ if (_74 && !_74.done && (_a = _73.return)) _a.call(_73);
3155
3269
  }
3156
3270
  finally { if (e_32) throw e_32.error; }
3157
3271
  }
3158
3272
  try {
3159
- for (var _54 = __values(asArray(input.aiJobs)), _55 = _54.next(); !_55.done; _55 = _54.next()) {
3160
- var aiJob = _55.value;
3273
+ for (var _75 = __values(asArray(input.aiJobs)), _76 = _75.next(); !_76.done; _76 = _75.next()) {
3274
+ var aiJob = _76.value;
3161
3275
  pushEvent(events, {
3162
3276
  type: aiJob.model ? 'model_call' : 'log',
3163
3277
  category: cleanText(aiJob.category || aiJob.phase || aiJob.runner, 160),
@@ -3175,7 +3289,7 @@ function buildSupportAIRunFromEvidence(input) {
3175
3289
  catch (e_33_1) { e_33 = { error: e_33_1 }; }
3176
3290
  finally {
3177
3291
  try {
3178
- if (_55 && !_55.done && (_b = _54.return)) _b.call(_54);
3292
+ if (_76 && !_76.done && (_b = _75.return)) _b.call(_75);
3179
3293
  }
3180
3294
  finally { if (e_33) throw e_33.error; }
3181
3295
  }
@@ -3219,6 +3333,22 @@ function buildSupportAIRunFromEvidence(input) {
3219
3333
  metadata: customerReplyPolicyGate.metadata
3220
3334
  });
3221
3335
  }
3336
+ var customerReplyReadiness = plainObject(evidence.customerReplyReadiness
3337
+ || evidence.customer_reply_readiness
3338
+ || customerReplyPolicy.readinessContract
3339
+ || customerReplyPolicy.readiness_contract);
3340
+ var customerReplyReadinessGate = supportCustomerReplyReadinessGate(customerReplyReadiness, input.now);
3341
+ if (customerReplyReadinessGate) {
3342
+ gates.push(customerReplyReadinessGate);
3343
+ pushEvent(events, {
3344
+ type: 'human_intervention',
3345
+ category: 'support_customer_reply_readiness',
3346
+ message: customerReplyReadinessGate.reason,
3347
+ artifactPaths: customerReplyReadinessGate.evidenceRefs,
3348
+ recordedAt: customerReplyReadinessGate.recordedAt,
3349
+ metadata: customerReplyReadinessGate.metadata
3350
+ });
3351
+ }
3222
3352
  var nextActionContract = supportNextActionContractObject(ticket, job, evidence);
3223
3353
  var nextActionContractRequired = supportNextActionContractRequired(ticket, job, evidence);
3224
3354
  var nextActionContractGate = supportNextActionContractGate(nextActionContract, input.now, nextActionContractRequired);
@@ -3233,6 +3363,19 @@ function buildSupportAIRunFromEvidence(input) {
3233
3363
  metadata: nextActionContractGate.metadata
3234
3364
  });
3235
3365
  }
3366
+ var managerRecoveryExecutionProof = plainObject(evidence.managerRecoveryExecutionProof || evidence.manager_recovery_execution_proof);
3367
+ var recoveryExecutionProofGate = managerRecoveryExecutionProofGate(managerRecoveryExecutionProof, input.now);
3368
+ if (recoveryExecutionProofGate) {
3369
+ gates.push(recoveryExecutionProofGate);
3370
+ pushEvent(events, {
3371
+ type: 'log',
3372
+ category: 'manager_recovery_execution_proof',
3373
+ message: recoveryExecutionProofGate.reason,
3374
+ artifactPaths: recoveryExecutionProofGate.evidenceRefs,
3375
+ recordedAt: recoveryExecutionProofGate.recordedAt,
3376
+ metadata: recoveryExecutionProofGate.metadata
3377
+ });
3378
+ }
3236
3379
  var ticketAutomation = plainObject(ticket.automation);
3237
3380
  var ticketManagerState = plainObject(ticketAutomation.manager || ticket.manager);
3238
3381
  var rootCauseEntryContract = evidenceObject(job.supportRootCauseEntryContract, job.support_root_cause_entry_contract, job.rootCauseEntryContract, ticket.supportRootCauseEntryContract, ticket.rootCauseEntryContract, ticketManagerState.root_cause_entry_contract, ticketManagerState.rootCauseEntryContract, evidence.rootCauseEntryContract, evidence.root_cause_entry_contract);
@@ -3469,24 +3612,51 @@ function buildSupportAIRunFromEvidence(input) {
3469
3612
  sameFailureCount: Number(((_36 = nextActionContractGate.metadata) === null || _36 === void 0 ? void 0 : _36.sameFailureCount) || 0),
3470
3613
  blockers: cleanStringList((_37 = nextActionContractGate.metadata) === null || _37 === void 0 ? void 0 : _37.blockers, 20, 500)
3471
3614
  } : undefined,
3615
+ managerRecoveryExecutionProof: recoveryExecutionProofGate ? {
3616
+ status: cleanText((_38 = recoveryExecutionProofGate.metadata) === null || _38 === void 0 ? void 0 : _38.status, 120),
3617
+ gateStatus: recoveryExecutionProofGate.status,
3618
+ canContinueRun: ((_39 = recoveryExecutionProofGate.metadata) === null || _39 === void 0 ? void 0 : _39.canContinueRun) === true,
3619
+ canRunProductRepair: ((_40 = recoveryExecutionProofGate.metadata) === null || _40 === void 0 ? void 0 : _40.canRunProductRepair) === true,
3620
+ canRunExpensiveModel: ((_41 = recoveryExecutionProofGate.metadata) === null || _41 === void 0 ? void 0 : _41.canRunExpensiveModel) === true,
3621
+ canResetLoopBudget: ((_42 = recoveryExecutionProofGate.metadata) === null || _42 === void 0 ? void 0 : _42.canResetLoopBudget) === true,
3622
+ newEvidence: ((_43 = recoveryExecutionProofGate.metadata) === null || _43 === void 0 ? void 0 : _43.newEvidence) === true,
3623
+ materialEvidence: ((_44 = recoveryExecutionProofGate.metadata) === null || _44 === void 0 ? void 0 : _44.materialEvidence) === true,
3624
+ evidenceStrength: cleanText((_45 = recoveryExecutionProofGate.metadata) === null || _45 === void 0 ? void 0 : _45.evidenceStrength, 120),
3625
+ nextAllowedAction: cleanText((_46 = recoveryExecutionProofGate.metadata) === null || _46 === void 0 ? void 0 : _46.nextAllowedAction, 180),
3626
+ missingEvidence: cleanStringList((_47 = recoveryExecutionProofGate.metadata) === null || _47 === void 0 ? void 0 : _47.missingEvidence, 20, 500),
3627
+ blockers: cleanStringList((_48 = recoveryExecutionProofGate.metadata) === null || _48 === void 0 ? void 0 : _48.blockers, 20, 500)
3628
+ } : undefined,
3472
3629
  customerReplyPolicy: Object.keys(customerReplyPolicy).length ? {
3473
3630
  action: cleanText(customerReplyPolicy.action, 120),
3474
3631
  safety: cleanText(customerReplyPolicy.safety, 120),
3475
3632
  canDraftCustomerReply: customerReplyPolicy.canDraftCustomerReply === true || customerReplyPolicy.can_draft_customer_reply === true,
3476
3633
  canSendCustomerReply: customerReplyPolicy.canSendCustomerReply === true || customerReplyPolicy.can_send_customer_reply === true,
3477
3634
  reason: cleanText(customerReplyPolicy.reason, 1000),
3478
- reviewType: cleanText(((_38 = customerReplyPolicy.humanReviewPacket) === null || _38 === void 0 ? void 0 : _38.reviewType)
3479
- || ((_39 = customerReplyPolicy.human_review_packet) === null || _39 === void 0 ? void 0 : _39.review_type)
3480
- || ((_40 = customerReplyPolicy.human_review_packet) === null || _40 === void 0 ? void 0 : _40.reviewType), 160),
3481
- primaryAction: cleanText(((_41 = customerReplyPolicy.humanReviewPacket) === null || _41 === void 0 ? void 0 : _41.primaryAction)
3482
- || ((_42 = customerReplyPolicy.human_review_packet) === null || _42 === void 0 ? void 0 : _42.primary_action)
3483
- || ((_43 = customerReplyPolicy.human_review_packet) === null || _43 === void 0 ? void 0 : _43.primaryAction), 160),
3635
+ reviewType: cleanText(((_49 = customerReplyPolicy.humanReviewPacket) === null || _49 === void 0 ? void 0 : _49.reviewType)
3636
+ || ((_50 = customerReplyPolicy.human_review_packet) === null || _50 === void 0 ? void 0 : _50.review_type)
3637
+ || ((_51 = customerReplyPolicy.human_review_packet) === null || _51 === void 0 ? void 0 : _51.reviewType), 160),
3638
+ primaryAction: cleanText(((_52 = customerReplyPolicy.humanReviewPacket) === null || _52 === void 0 ? void 0 : _52.primaryAction)
3639
+ || ((_53 = customerReplyPolicy.human_review_packet) === null || _53 === void 0 ? void 0 : _53.primary_action)
3640
+ || ((_54 = customerReplyPolicy.human_review_packet) === null || _54 === void 0 ? void 0 : _54.primaryAction), 160),
3484
3641
  clarificationContract: customerReplyPolicy.clarificationContract || customerReplyPolicy.clarification_contract ? {
3485
- status: cleanText(((_44 = customerReplyPolicy.clarificationContract) === null || _44 === void 0 ? void 0 : _44.status) || ((_45 = customerReplyPolicy.clarification_contract) === null || _45 === void 0 ? void 0 : _45.status), 120),
3486
- missingField: cleanText(((_46 = customerReplyPolicy.clarificationContract) === null || _46 === void 0 ? void 0 : _46.missingField) || ((_47 = customerReplyPolicy.clarification_contract) === null || _47 === void 0 ? void 0 : _47.missing_field), 120),
3487
- oneQuestionOnly: ((_48 = customerReplyPolicy.clarificationContract) === null || _48 === void 0 ? void 0 : _48.oneQuestionOnly) === true || ((_49 = customerReplyPolicy.clarification_contract) === null || _49 === void 0 ? void 0 : _49.one_question_only) === true,
3488
- parksTicketUntilCustomerReply: ((_50 = customerReplyPolicy.clarificationContract) === null || _50 === void 0 ? void 0 : _50.parksTicketUntilCustomerReply) === true || ((_51 = customerReplyPolicy.clarification_contract) === null || _51 === void 0 ? void 0 : _51.parks_ticket_until_customer_reply) === true
3642
+ status: cleanText(((_55 = customerReplyPolicy.clarificationContract) === null || _55 === void 0 ? void 0 : _55.status) || ((_56 = customerReplyPolicy.clarification_contract) === null || _56 === void 0 ? void 0 : _56.status), 120),
3643
+ missingField: cleanText(((_57 = customerReplyPolicy.clarificationContract) === null || _57 === void 0 ? void 0 : _57.missingField) || ((_58 = customerReplyPolicy.clarification_contract) === null || _58 === void 0 ? void 0 : _58.missing_field), 120),
3644
+ oneQuestionOnly: ((_59 = customerReplyPolicy.clarificationContract) === null || _59 === void 0 ? void 0 : _59.oneQuestionOnly) === true || ((_60 = customerReplyPolicy.clarification_contract) === null || _60 === void 0 ? void 0 : _60.one_question_only) === true,
3645
+ parksTicketUntilCustomerReply: ((_61 = customerReplyPolicy.clarificationContract) === null || _61 === void 0 ? void 0 : _61.parksTicketUntilCustomerReply) === true || ((_62 = customerReplyPolicy.clarification_contract) === null || _62 === void 0 ? void 0 : _62.parks_ticket_until_customer_reply) === true
3489
3646
  } : undefined
3647
+ } : undefined,
3648
+ customerReplyReadiness: customerReplyReadinessGate ? {
3649
+ status: cleanText((_63 = customerReplyReadinessGate.metadata) === null || _63 === void 0 ? void 0 : _63.status, 120),
3650
+ gateStatus: customerReplyReadinessGate.status,
3651
+ primaryCommand: cleanText((_64 = customerReplyReadinessGate.metadata) === null || _64 === void 0 ? void 0 : _64.primaryCommand, 180),
3652
+ policyAction: cleanText((_65 = customerReplyReadinessGate.metadata) === null || _65 === void 0 ? void 0 : _65.policyAction, 120),
3653
+ canDraftCustomerReply: ((_66 = customerReplyReadinessGate.metadata) === null || _66 === void 0 ? void 0 : _66.canDraftCustomerReply) === true,
3654
+ canSendCustomerReply: ((_67 = customerReplyReadinessGate.metadata) === null || _67 === void 0 ? void 0 : _67.canSendCustomerReply) === true,
3655
+ requiresHumanApproval: ((_68 = customerReplyReadinessGate.metadata) === null || _68 === void 0 ? void 0 : _68.requiresHumanApproval) === true,
3656
+ proofBacked: ((_69 = customerReplyReadinessGate.metadata) === null || _69 === void 0 ? void 0 : _69.proofBacked) === true,
3657
+ businessProofReady: ((_70 = customerReplyReadinessGate.metadata) === null || _70 === void 0 ? void 0 : _70.businessProofReady) === true,
3658
+ releaseReady: ((_71 = customerReplyReadinessGate.metadata) === null || _71 === void 0 ? void 0 : _71.releaseReady) === true,
3659
+ blockers: cleanStringList((_72 = customerReplyReadinessGate.metadata) === null || _72 === void 0 ? void 0 : _72.blockers, 20, 500)
3490
3660
  } : undefined
3491
3661
  }
3492
3662
  });