@roarkanalytics/sdk 3.10.0 → 3.12.0

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.
Files changed (101) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/client.d.mts +7 -4
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +7 -4
  5. package/client.d.ts.map +1 -1
  6. package/client.js +3 -0
  7. package/client.js.map +1 -1
  8. package/client.mjs +3 -0
  9. package/client.mjs.map +1 -1
  10. package/package.json +1 -1
  11. package/resources/agent-prompt.d.mts +129 -0
  12. package/resources/agent-prompt.d.mts.map +1 -0
  13. package/resources/agent-prompt.d.ts +129 -0
  14. package/resources/agent-prompt.d.ts.map +1 -0
  15. package/resources/agent-prompt.js +58 -0
  16. package/resources/agent-prompt.js.map +1 -0
  17. package/resources/agent-prompt.mjs +54 -0
  18. package/resources/agent-prompt.mjs.map +1 -0
  19. package/resources/call.d.mts +1 -1
  20. package/resources/call.d.mts.map +1 -1
  21. package/resources/call.d.ts +1 -1
  22. package/resources/call.d.ts.map +1 -1
  23. package/resources/config.d.mts +166 -18
  24. package/resources/config.d.mts.map +1 -1
  25. package/resources/config.d.ts +166 -18
  26. package/resources/config.d.ts.map +1 -1
  27. package/resources/customer-flow-edge-case.d.mts +72 -9
  28. package/resources/customer-flow-edge-case.d.mts.map +1 -1
  29. package/resources/customer-flow-edge-case.d.ts +72 -9
  30. package/resources/customer-flow-edge-case.d.ts.map +1 -1
  31. package/resources/customer-flow.d.mts +2005 -78
  32. package/resources/customer-flow.d.mts.map +1 -1
  33. package/resources/customer-flow.d.ts +2005 -78
  34. package/resources/customer-flow.d.ts.map +1 -1
  35. package/resources/customer-flow.js +18 -0
  36. package/resources/customer-flow.js.map +1 -1
  37. package/resources/customer-flow.mjs +18 -0
  38. package/resources/customer-flow.mjs.map +1 -1
  39. package/resources/index.d.mts +3 -2
  40. package/resources/index.d.mts.map +1 -1
  41. package/resources/index.d.ts +3 -2
  42. package/resources/index.d.ts.map +1 -1
  43. package/resources/index.js +3 -1
  44. package/resources/index.js.map +1 -1
  45. package/resources/index.mjs +1 -0
  46. package/resources/index.mjs.map +1 -1
  47. package/resources/simulation-environment.d.mts +163 -1
  48. package/resources/simulation-environment.d.mts.map +1 -1
  49. package/resources/simulation-environment.d.ts +163 -1
  50. package/resources/simulation-environment.d.ts.map +1 -1
  51. package/resources/simulation-environment.js +51 -0
  52. package/resources/simulation-environment.js.map +1 -1
  53. package/resources/simulation-environment.mjs +51 -0
  54. package/resources/simulation-environment.mjs.map +1 -1
  55. package/resources/simulation-job.d.mts +62 -2
  56. package/resources/simulation-job.d.mts.map +1 -1
  57. package/resources/simulation-job.d.ts +62 -2
  58. package/resources/simulation-job.d.ts.map +1 -1
  59. package/resources/simulation-persona.d.mts +42 -6
  60. package/resources/simulation-persona.d.mts.map +1 -1
  61. package/resources/simulation-persona.d.ts +42 -6
  62. package/resources/simulation-persona.d.ts.map +1 -1
  63. package/resources/simulation-run-plan-job.d.mts +31 -1
  64. package/resources/simulation-run-plan-job.d.mts.map +1 -1
  65. package/resources/simulation-run-plan-job.d.ts +31 -1
  66. package/resources/simulation-run-plan-job.d.ts.map +1 -1
  67. package/resources/simulation-run-plan.d.mts +154 -12
  68. package/resources/simulation-run-plan.d.mts.map +1 -1
  69. package/resources/simulation-run-plan.d.ts +154 -12
  70. package/resources/simulation-run-plan.d.ts.map +1 -1
  71. package/resources/simulation-template.d.mts +10 -0
  72. package/resources/simulation-template.d.mts.map +1 -1
  73. package/resources/simulation-template.d.ts +10 -0
  74. package/resources/simulation-template.d.ts.map +1 -1
  75. package/resources/simulation.d.mts +221 -6
  76. package/resources/simulation.d.mts.map +1 -1
  77. package/resources/simulation.d.ts +221 -6
  78. package/resources/simulation.d.ts.map +1 -1
  79. package/resources/simulation.js +10 -3
  80. package/resources/simulation.js.map +1 -1
  81. package/resources/simulation.mjs +10 -3
  82. package/resources/simulation.mjs.map +1 -1
  83. package/src/client.ts +33 -0
  84. package/src/resources/agent-prompt.ts +183 -0
  85. package/src/resources/call.ts +1 -1
  86. package/src/resources/config.ts +310 -20
  87. package/src/resources/customer-flow-edge-case.ts +180 -9
  88. package/src/resources/customer-flow.ts +3091 -63
  89. package/src/resources/index.ts +15 -0
  90. package/src/resources/simulation-environment.ts +244 -0
  91. package/src/resources/simulation-job.ts +92 -2
  92. package/src/resources/simulation-persona.ts +108 -6
  93. package/src/resources/simulation-run-plan-job.ts +39 -1
  94. package/src/resources/simulation-run-plan.ts +176 -12
  95. package/src/resources/simulation-template.ts +11 -0
  96. package/src/resources/simulation.ts +247 -6
  97. package/src/version.ts +1 -1
  98. package/version.d.mts +1 -1
  99. package/version.d.ts +1 -1
  100. package/version.js +1 -1
  101. package/version.mjs +1 -1
@@ -216,6 +216,12 @@ export namespace SimulationRunPlanJobGetByIDResponse {
216
216
  */
217
217
  createdAt: string;
218
218
 
219
+ /**
220
+ * Present when the run was invalidated: it keeps its transcript and recording, but
221
+ * nothing scored it and it is excluded from every run total.
222
+ */
223
+ invalidation: SimulationJob.Invalidation | null;
224
+
219
225
  persona: SimulationJob.Persona;
220
226
 
221
227
  /**
@@ -313,6 +319,28 @@ export namespace SimulationRunPlanJobGetByIDResponse {
313
319
  | 'DAILY';
314
320
  }
315
321
 
322
+ /**
323
+ * Present when the run was invalidated: it keeps its transcript and recording, but
324
+ * nothing scored it and it is excluded from every run total.
325
+ */
326
+ export interface Invalidation {
327
+ /**
328
+ * When the run was invalidated.
329
+ */
330
+ invalidatedAt: string;
331
+
332
+ /**
333
+ * Why the result does not count. `SCRIPT_DIVERGED`: a strict flow went off script
334
+ * at a step whose off-script policy is HANG_UP_INVALIDATE.
335
+ */
336
+ reason: 'SCRIPT_DIVERGED';
337
+
338
+ /**
339
+ * One sentence: where the script was left and what your agent did instead.
340
+ */
341
+ detail?: string | null;
342
+ }
343
+
316
344
  export interface Persona {
317
345
  /**
318
346
  * Unique identifier of the persona
@@ -377,7 +405,10 @@ export namespace SimulationRunPlanJobGetByIDResponse {
377
405
  | 'FRUSTRATED'
378
406
  | 'SKEPTICAL'
379
407
  | 'RUSHED'
380
- | 'DISTRACTED';
408
+ | 'DISTRACTED'
409
+ | 'ANGRY'
410
+ | 'ANXIOUS'
411
+ | 'SAD';
381
412
 
382
413
  /**
383
414
  * How the persona confirms information
@@ -519,6 +550,13 @@ export namespace SimulationRunPlanJobGetByIDResponse {
519
550
  */
520
551
  description?: string | null;
521
552
 
553
+ /**
554
+ * Label shown in place of the name across the dashboard (e.g. a short descriptor
555
+ * like "Irate Escalator"). The persona still identifies as `name` on calls. Omit
556
+ * or set null to display the name itself.
557
+ */
558
+ displayName?: string | null;
559
+
522
560
  /**
523
561
  * Secondary language ISO 639-1 code for code-switching (e.g., Hinglish, Spanglish)
524
562
  */
@@ -179,12 +179,25 @@ export namespace SimulationRunPlanCreateResponse {
179
179
  */
180
180
  flows: Array<RunPlan.Flow>;
181
181
 
182
+ /**
183
+ * Whether this plan lets a run add metrics by itself off the attached flows, on
184
+ * top of its own list. False means the `metrics` list is the whole answer.
185
+ */
186
+ includeAutomaticMetrics: boolean;
187
+
182
188
  /**
183
189
  * Whether this plan also collects each attached flow's own metrics, on top of its
184
190
  * own list.
185
191
  */
186
192
  includeFlowMetrics: boolean;
187
193
 
194
+ /**
195
+ * Whether this plan is managed by config as code. A managed plan is reconciled
196
+ * from your config: PUT and DELETE on it return 409, and changes belong in the
197
+ * config file.
198
+ */
199
+ isConfigManaged: boolean;
200
+
188
201
  /**
189
202
  * Number of iterations to run for each test case
190
203
  */
@@ -262,7 +275,7 @@ export namespace SimulationRunPlanCreateResponse {
262
275
  /**
263
276
  * The customer flow to run.
264
277
  */
265
- id: string;
278
+ id?: string;
266
279
 
267
280
  /**
268
281
  * `"ALL"` runs every edge case the flow has when the run starts, so one added
@@ -281,6 +294,13 @@ export namespace SimulationRunPlanCreateResponse {
281
294
  */
282
295
  personaOverrideId?: string | null;
283
296
 
297
+ /**
298
+ * The Roark-curated flow to run, by its stable slug. Use instead of `id` for a run
299
+ * you keep in version control: a curated flow’s id differs between deployments,
300
+ * its slug does not. Your own flows have no slug and are named by `id`.
301
+ */
302
+ slug?: string;
303
+
284
304
  /**
285
305
  * Values for everything it resolves.
286
306
  */
@@ -292,13 +312,21 @@ export namespace SimulationRunPlanCreateResponse {
292
312
  /**
293
313
  * The edge case to run.
294
314
  */
295
- id: string;
315
+ id?: string;
296
316
 
297
317
  /**
298
318
  * Run this one as that persona instead of its own.
299
319
  */
300
320
  personaOverrideId?: string | null;
301
321
 
322
+ /**
323
+ * The edge case to run, by its stable slug, matched within this flow. Use instead
324
+ * of `id` for a run you keep in version control: a curated edge case’s id differs
325
+ * between deployments and changes outright if it is renamed. Your own edge cases
326
+ * have no slug and are named by `id`.
327
+ */
328
+ slug?: string;
329
+
302
330
  /**
303
331
  * Values for this one only.
304
332
  */
@@ -433,12 +461,25 @@ export namespace SimulationRunPlanUpdateResponse {
433
461
  */
434
462
  flows: Array<Data.Flow>;
435
463
 
464
+ /**
465
+ * Whether this plan lets a run add metrics by itself off the attached flows, on
466
+ * top of its own list. False means the `metrics` list is the whole answer.
467
+ */
468
+ includeAutomaticMetrics: boolean;
469
+
436
470
  /**
437
471
  * Whether this plan also collects each attached flow's own metrics, on top of its
438
472
  * own list.
439
473
  */
440
474
  includeFlowMetrics: boolean;
441
475
 
476
+ /**
477
+ * Whether this plan is managed by config as code. A managed plan is reconciled
478
+ * from your config: PUT and DELETE on it return 409, and changes belong in the
479
+ * config file.
480
+ */
481
+ isConfigManaged: boolean;
482
+
442
483
  /**
443
484
  * Number of iterations to run for each test case
444
485
  */
@@ -516,7 +557,7 @@ export namespace SimulationRunPlanUpdateResponse {
516
557
  /**
517
558
  * The customer flow to run.
518
559
  */
519
- id: string;
560
+ id?: string;
520
561
 
521
562
  /**
522
563
  * `"ALL"` runs every edge case the flow has when the run starts, so one added
@@ -535,6 +576,13 @@ export namespace SimulationRunPlanUpdateResponse {
535
576
  */
536
577
  personaOverrideId?: string | null;
537
578
 
579
+ /**
580
+ * The Roark-curated flow to run, by its stable slug. Use instead of `id` for a run
581
+ * you keep in version control: a curated flow’s id differs between deployments,
582
+ * its slug does not. Your own flows have no slug and are named by `id`.
583
+ */
584
+ slug?: string;
585
+
538
586
  /**
539
587
  * Values for everything it resolves.
540
588
  */
@@ -546,13 +594,21 @@ export namespace SimulationRunPlanUpdateResponse {
546
594
  /**
547
595
  * The edge case to run.
548
596
  */
549
- id: string;
597
+ id?: string;
550
598
 
551
599
  /**
552
600
  * Run this one as that persona instead of its own.
553
601
  */
554
602
  personaOverrideId?: string | null;
555
603
 
604
+ /**
605
+ * The edge case to run, by its stable slug, matched within this flow. Use instead
606
+ * of `id` for a run you keep in version control: a curated edge case’s id differs
607
+ * between deployments and changes outright if it is renamed. Your own edge cases
608
+ * have no slug and are named by `id`.
609
+ */
610
+ slug?: string;
611
+
556
612
  /**
557
613
  * Values for this one only.
558
614
  */
@@ -651,12 +707,25 @@ export namespace SimulationRunPlanListResponse {
651
707
  */
652
708
  flows: Array<Data.Flow>;
653
709
 
710
+ /**
711
+ * Whether this plan lets a run add metrics by itself off the attached flows, on
712
+ * top of its own list. False means the `metrics` list is the whole answer.
713
+ */
714
+ includeAutomaticMetrics: boolean;
715
+
654
716
  /**
655
717
  * Whether this plan also collects each attached flow's own metrics, on top of its
656
718
  * own list.
657
719
  */
658
720
  includeFlowMetrics: boolean;
659
721
 
722
+ /**
723
+ * Whether this plan is managed by config as code. A managed plan is reconciled
724
+ * from your config: PUT and DELETE on it return 409, and changes belong in the
725
+ * config file.
726
+ */
727
+ isConfigManaged: boolean;
728
+
660
729
  /**
661
730
  * Number of iterations to run for each test case
662
731
  */
@@ -734,7 +803,7 @@ export namespace SimulationRunPlanListResponse {
734
803
  /**
735
804
  * The customer flow to run.
736
805
  */
737
- id: string;
806
+ id?: string;
738
807
 
739
808
  /**
740
809
  * `"ALL"` runs every edge case the flow has when the run starts, so one added
@@ -753,6 +822,13 @@ export namespace SimulationRunPlanListResponse {
753
822
  */
754
823
  personaOverrideId?: string | null;
755
824
 
825
+ /**
826
+ * The Roark-curated flow to run, by its stable slug. Use instead of `id` for a run
827
+ * you keep in version control: a curated flow’s id differs between deployments,
828
+ * its slug does not. Your own flows have no slug and are named by `id`.
829
+ */
830
+ slug?: string;
831
+
756
832
  /**
757
833
  * Values for everything it resolves.
758
834
  */
@@ -764,13 +840,21 @@ export namespace SimulationRunPlanListResponse {
764
840
  /**
765
841
  * The edge case to run.
766
842
  */
767
- id: string;
843
+ id?: string;
768
844
 
769
845
  /**
770
846
  * Run this one as that persona instead of its own.
771
847
  */
772
848
  personaOverrideId?: string | null;
773
849
 
850
+ /**
851
+ * The edge case to run, by its stable slug, matched within this flow. Use instead
852
+ * of `id` for a run you keep in version control: a curated edge case’s id differs
853
+ * between deployments and changes outright if it is renamed. Your own edge cases
854
+ * have no slug and are named by `id`.
855
+ */
856
+ slug?: string;
857
+
774
858
  /**
775
859
  * Values for this one only.
776
860
  */
@@ -897,12 +981,25 @@ export namespace SimulationRunPlanGetByIDResponse {
897
981
  */
898
982
  flows: Array<Data.Flow>;
899
983
 
984
+ /**
985
+ * Whether this plan lets a run add metrics by itself off the attached flows, on
986
+ * top of its own list. False means the `metrics` list is the whole answer.
987
+ */
988
+ includeAutomaticMetrics: boolean;
989
+
900
990
  /**
901
991
  * Whether this plan also collects each attached flow's own metrics, on top of its
902
992
  * own list.
903
993
  */
904
994
  includeFlowMetrics: boolean;
905
995
 
996
+ /**
997
+ * Whether this plan is managed by config as code. A managed plan is reconciled
998
+ * from your config: PUT and DELETE on it return 409, and changes belong in the
999
+ * config file.
1000
+ */
1001
+ isConfigManaged: boolean;
1002
+
906
1003
  /**
907
1004
  * Number of iterations to run for each test case
908
1005
  */
@@ -980,7 +1077,7 @@ export namespace SimulationRunPlanGetByIDResponse {
980
1077
  /**
981
1078
  * The customer flow to run.
982
1079
  */
983
- id: string;
1080
+ id?: string;
984
1081
 
985
1082
  /**
986
1083
  * `"ALL"` runs every edge case the flow has when the run starts, so one added
@@ -999,6 +1096,13 @@ export namespace SimulationRunPlanGetByIDResponse {
999
1096
  */
1000
1097
  personaOverrideId?: string | null;
1001
1098
 
1099
+ /**
1100
+ * The Roark-curated flow to run, by its stable slug. Use instead of `id` for a run
1101
+ * you keep in version control: a curated flow’s id differs between deployments,
1102
+ * its slug does not. Your own flows have no slug and are named by `id`.
1103
+ */
1104
+ slug?: string;
1105
+
1002
1106
  /**
1003
1107
  * Values for everything it resolves.
1004
1108
  */
@@ -1010,13 +1114,21 @@ export namespace SimulationRunPlanGetByIDResponse {
1010
1114
  /**
1011
1115
  * The edge case to run.
1012
1116
  */
1013
- id: string;
1117
+ id?: string;
1014
1118
 
1015
1119
  /**
1016
1120
  * Run this one as that persona instead of its own.
1017
1121
  */
1018
1122
  personaOverrideId?: string | null;
1019
1123
 
1124
+ /**
1125
+ * The edge case to run, by its stable slug, matched within this flow. Use instead
1126
+ * of `id` for a run you keep in version control: a curated edge case’s id differs
1127
+ * between deployments and changes outright if it is renamed. Your own edge cases
1128
+ * have no slug and are named by `id`.
1129
+ */
1130
+ slug?: string;
1131
+
1020
1132
  /**
1021
1133
  * Values for this one only.
1022
1134
  */
@@ -1127,6 +1239,22 @@ export interface SimulationRunPlanCreateParams {
1127
1239
  */
1128
1240
  flows?: Array<SimulationRunPlanCreateParams.Flow>;
1129
1241
 
1242
+ /**
1243
+ * Let the run add metrics by itself off the attached flows, on top of the
1244
+ * `metrics` named here.
1245
+ *
1246
+ * Two attach this way today: Agent Expectations wherever an attached flow has
1247
+ * agent expectations written on it, and Keypad Entry wherever one has steps where
1248
+ * the agent is expected to press keys. Both grade something authored on the flow
1249
+ * that nothing else measures, which is why it is on by default.
1250
+ *
1251
+ * Set false when the `metrics` list is meant to be exhaustive: a plan testing only
1252
+ * whether the caller can complete the flow may not want the agent graded on its
1253
+ * expectations as well. False also pins the plan against any automatic metric
1254
+ * Roark adds later.
1255
+ */
1256
+ includeAutomaticMetrics?: boolean;
1257
+
1130
1258
  /**
1131
1259
  * Also collect each attached flow's own metrics, on top of the `metrics` named
1132
1260
  * here.
@@ -1216,7 +1344,7 @@ export namespace SimulationRunPlanCreateParams {
1216
1344
  /**
1217
1345
  * The customer flow to run.
1218
1346
  */
1219
- id: string;
1347
+ id?: string;
1220
1348
 
1221
1349
  /**
1222
1350
  * `"ALL"` runs every edge case the flow has when the run starts, so one added
@@ -1235,6 +1363,13 @@ export namespace SimulationRunPlanCreateParams {
1235
1363
  */
1236
1364
  personaOverrideId?: string | null;
1237
1365
 
1366
+ /**
1367
+ * The Roark-curated flow to run, by its stable slug. Use instead of `id` for a run
1368
+ * you keep in version control: a curated flow’s id differs between deployments,
1369
+ * its slug does not. Your own flows have no slug and are named by `id`.
1370
+ */
1371
+ slug?: string;
1372
+
1238
1373
  /**
1239
1374
  * Values for everything it resolves.
1240
1375
  */
@@ -1246,13 +1381,21 @@ export namespace SimulationRunPlanCreateParams {
1246
1381
  /**
1247
1382
  * The edge case to run.
1248
1383
  */
1249
- id: string;
1384
+ id?: string;
1250
1385
 
1251
1386
  /**
1252
1387
  * Run this one as that persona instead of its own.
1253
1388
  */
1254
1389
  personaOverrideId?: string | null;
1255
1390
 
1391
+ /**
1392
+ * The edge case to run, by its stable slug, matched within this flow. Use instead
1393
+ * of `id` for a run you keep in version control: a curated edge case’s id differs
1394
+ * between deployments and changes outright if it is renamed. Your own edge cases
1395
+ * have no slug and are named by `id`.
1396
+ */
1397
+ slug?: string;
1398
+
1256
1399
  /**
1257
1400
  * Values for this one only.
1258
1401
  */
@@ -1322,6 +1465,12 @@ export interface SimulationRunPlanUpdateParams {
1322
1465
  */
1323
1466
  flows?: Array<SimulationRunPlanUpdateParams.Flow>;
1324
1467
 
1468
+ /**
1469
+ * Whether to let the run add metrics by itself off the attached flows. See
1470
+ * `POST /v1/simulation/plan`.
1471
+ */
1472
+ includeAutomaticMetrics?: boolean;
1473
+
1325
1474
  /**
1326
1475
  * Whether to also collect each attached flow's own metrics, on top of this plan's
1327
1476
  * list.
@@ -1397,7 +1546,7 @@ export namespace SimulationRunPlanUpdateParams {
1397
1546
  /**
1398
1547
  * The customer flow to run.
1399
1548
  */
1400
- id: string;
1549
+ id?: string;
1401
1550
 
1402
1551
  /**
1403
1552
  * `"ALL"` runs every edge case the flow has when the run starts, so one added
@@ -1416,6 +1565,13 @@ export namespace SimulationRunPlanUpdateParams {
1416
1565
  */
1417
1566
  personaOverrideId?: string | null;
1418
1567
 
1568
+ /**
1569
+ * The Roark-curated flow to run, by its stable slug. Use instead of `id` for a run
1570
+ * you keep in version control: a curated flow’s id differs between deployments,
1571
+ * its slug does not. Your own flows have no slug and are named by `id`.
1572
+ */
1573
+ slug?: string;
1574
+
1419
1575
  /**
1420
1576
  * Values for everything it resolves.
1421
1577
  */
@@ -1427,13 +1583,21 @@ export namespace SimulationRunPlanUpdateParams {
1427
1583
  /**
1428
1584
  * The edge case to run.
1429
1585
  */
1430
- id: string;
1586
+ id?: string;
1431
1587
 
1432
1588
  /**
1433
1589
  * Run this one as that persona instead of its own.
1434
1590
  */
1435
1591
  personaOverrideId?: string | null;
1436
1592
 
1593
+ /**
1594
+ * The edge case to run, by its stable slug, matched within this flow. Use instead
1595
+ * of `id` for a run you keep in version control: a curated edge case’s id differs
1596
+ * between deployments and changes outright if it is renamed. Your own edge cases
1597
+ * have no slug and are named by `id`.
1598
+ */
1599
+ slug?: string;
1600
+
1437
1601
  /**
1438
1602
  * Values for this one only.
1439
1603
  */
@@ -47,6 +47,17 @@ export namespace SimulationTemplateListResponse {
47
47
  */
48
48
  category: string;
49
49
 
50
+ /**
51
+ * The end-call conditions a run from this template uses unless the request sets
52
+ * its own.
53
+ *
54
+ * Empty for templates whose calls end when the agent says goodbye. Non-empty where
55
+ * the template runs scripted flows that finish on a verdict: the simulated caller
56
+ * hangs up on an end-call phrase or one of these, so a run that discards them
57
+ * would stay on the line until the duration cap.
58
+ */
59
+ defaultEndCallReasons: Array<string>;
60
+
50
61
  /**
51
62
  * The per-simulation cap a run from this template uses unless the request sets its
52
63
  * own.