@ak--47/dungeon-master 1.1.0 → 1.2.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 (67) hide show
  1. package/dungeons/technical/ad-spend-schema.json +2 -2
  2. package/dungeons/technical/ad-spend.js +1 -1
  3. package/dungeons/technical/anonymous-users-schema.json +4 -3
  4. package/dungeons/technical/anonymous-users.js +1 -1
  5. package/dungeons/technical/array-of-object-lookup-schema.json +1 -1
  6. package/dungeons/technical/array-of-object-lookup.js +1 -1
  7. package/dungeons/technical/experiments-schema.json +25 -19
  8. package/dungeons/technical/experiments.js +1 -1
  9. package/dungeons/technical/foobar.js +1 -1
  10. package/dungeons/technical/group-analytics-schema.json +92 -0
  11. package/dungeons/technical/group-analytics.js +1 -1
  12. package/dungeons/technical/mirror-strategies-schema.json +4 -4
  13. package/dungeons/technical/mirror-strategies.js +1 -1
  14. package/dungeons/technical/nested-objects.js +1 -1
  15. package/dungeons/technical/retention-cadence.js +1 -2
  16. package/dungeons/technical/sanity-schema.json +22 -22
  17. package/dungeons/technical/sanity.js +1 -0
  18. package/dungeons/technical/scale-test.js +1 -1
  19. package/dungeons/technical/scd-schema.json +230 -33
  20. package/dungeons/technical/scd.js +1 -0
  21. package/dungeons/technical/simple-schema.json +132 -48
  22. package/dungeons/technical/simple.js +1 -1
  23. package/dungeons/technical/simplest-schema.json +168 -79
  24. package/dungeons/technical/simplest.js +1 -1
  25. package/dungeons/technical/text-generation-schema.json +7 -4
  26. package/dungeons/technical/text-generation.js +1 -2
  27. package/dungeons/vertical/community-schema.json +71 -49
  28. package/dungeons/vertical/community.js +8 -2
  29. package/dungeons/vertical/devtools-schema.json +69 -48
  30. package/dungeons/vertical/devtools.js +8 -2
  31. package/dungeons/vertical/ecommerce-schema.json +126 -108
  32. package/dungeons/vertical/ecommerce.js +9 -2
  33. package/dungeons/vertical/education-schema.json +5261 -272
  34. package/dungeons/vertical/education.js +16 -3
  35. package/dungeons/vertical/fintech-schema.json +165 -98
  36. package/dungeons/vertical/fintech.js +16 -3
  37. package/dungeons/vertical/fitness-schema.json +69 -47
  38. package/dungeons/vertical/fitness.js +8 -2
  39. package/dungeons/vertical/food-delivery-schema.json +36237 -187
  40. package/dungeons/vertical/food-delivery.js +16 -3
  41. package/dungeons/vertical/gaming-schema.json +103 -59
  42. package/dungeons/vertical/gaming.js +20 -9
  43. package/dungeons/vertical/healthcare-schema.json +70 -48
  44. package/dungeons/vertical/healthcare.js +8 -2
  45. package/dungeons/vertical/insurance-application-schema.json +66 -47
  46. package/dungeons/vertical/insurance-application.js +8 -2
  47. package/dungeons/vertical/logistics-schema.json +60 -38
  48. package/dungeons/vertical/logistics.js +8 -2
  49. package/dungeons/vertical/marketplace-schema.json +65 -43
  50. package/dungeons/vertical/marketplace.js +8 -2
  51. package/dungeons/vertical/media-schema.json +4085 -123
  52. package/dungeons/vertical/media.js +9 -3
  53. package/dungeons/vertical/rpg-schema.json +1984 -147
  54. package/dungeons/vertical/rpg.js +9 -3
  55. package/dungeons/vertical/sass-schema.json +2622 -147
  56. package/dungeons/vertical/sass.js +16 -3
  57. package/dungeons/vertical/social-schema.json +146 -78
  58. package/dungeons/vertical/social.js +16 -3
  59. package/dungeons/vertical/travel-schema.json +57 -35
  60. package/dungeons/vertical/travel.js +8 -2
  61. package/index.js +1 -1
  62. package/lib/core/context.js +9 -0
  63. package/lib/core/storage.js +2 -0
  64. package/lib/orchestrators/user-loop.js +4 -1
  65. package/package.json +1 -1
  66. package/scripts/extract-dungeon-schema.mjs +64 -18
  67. package/types.d.ts +3 -0
@@ -10,7 +10,7 @@ const chance = u.initChance(SEED);
10
10
  const num_users = 5_000;
11
11
  const days = 100;
12
12
 
13
- /** @typedef {import("../types.d.ts").Dungeon} Config */
13
+ /** @typedef {import("../../types").Dungeon} Config */
14
14
 
15
15
  /*
16
16
  * ═══════════════════════════════════════════════════════════════════════════════
@@ -176,10 +176,23 @@ const config = {
176
176
  hasAdSpend: false,
177
177
  percentUsersBornInDataset: 50,
178
178
  hasAvatar: true,
179
- batchSize: 2_500_000,
180
179
  concurrency: 1,
181
180
  writeToDisk: false,
182
- scdProps: {},
181
+ scdProps: {
182
+ subscription_tier: {
183
+ values: ["free", "trial", "monthly", "annual"],
184
+ frequency: "month",
185
+ timing: "fuzzy",
186
+ max: 6
187
+ },
188
+ restaurant_tier: {
189
+ values: ["new", "verified", "featured", "premium"],
190
+ frequency: "month",
191
+ timing: "fixed",
192
+ max: 6,
193
+ type: "restaurant_id"
194
+ }
195
+ },
183
196
 
184
197
  funnels: [
185
198
  {
@@ -69,12 +69,14 @@
69
69
  5
70
70
  ]
71
71
  },
72
- "used hint": {
73
- "$type": "array"
74
- },
75
- "used boost": {
76
- "$type": "array"
77
- },
72
+ "used hint": [
73
+ "no",
74
+ "yes"
75
+ ],
76
+ "used boost": [
77
+ "no",
78
+ "yes"
79
+ ],
78
80
  "level at start": {
79
81
  "$range": [
80
82
  2,
@@ -99,15 +101,18 @@
99
101
  451
100
102
  ]
101
103
  },
102
- "quest success": {
103
- "$type": "array"
104
- },
105
- "used hint": {
106
- "$type": "array"
107
- },
108
- "used boost": {
109
- "$type": "array"
110
- },
104
+ "quest success": [
105
+ "yes",
106
+ "no"
107
+ ],
108
+ "used hint": [
109
+ "no",
110
+ "yes"
111
+ ],
112
+ "used boost": [
113
+ "no",
114
+ "yes"
115
+ ],
111
116
  "number of deaths": [
112
117
  1,
113
118
  3
@@ -247,6 +252,49 @@
247
252
  }
248
253
  }
249
254
  ],
255
+ "funnels": [
256
+ {
257
+ "sequence": [
258
+ "app install",
259
+ "character creation",
260
+ "join party"
261
+ ],
262
+ "isFirstFunnel": true,
263
+ "conversionRate": 0.8,
264
+ "timeToConvert": 0.25
265
+ },
266
+ {
267
+ "sequence": [
268
+ "start quest",
269
+ "gameplay summary",
270
+ "complete quest"
271
+ ],
272
+ "conversionRate": 0.99,
273
+ "timeToConvert": 1,
274
+ "props": {
275
+ "quest type": [
276
+ "Rescue",
277
+ "Retrieve",
278
+ "Explore",
279
+ "Destroy",
280
+ "Investigate"
281
+ ],
282
+ "quest difficulty": [
283
+ "Easy",
284
+ "Medium",
285
+ "Hard",
286
+ "Legendary"
287
+ ],
288
+ "quest location": [
289
+ "Forest",
290
+ "Dungeon",
291
+ "Mountain",
292
+ "City",
293
+ "Desert"
294
+ ]
295
+ }
296
+ }
297
+ ],
250
298
  "superProps": {
251
299
  "platform": [
252
300
  "Mobile",
@@ -319,8 +367,8 @@
319
367
  ],
320
368
  "level": {
321
369
  "$range": [
322
- 2,
323
- 17
370
+ 3,
371
+ 15
324
372
  ]
325
373
  },
326
374
  "background": [
@@ -340,55 +388,51 @@
340
388
  ],
341
389
  "subscription MRR": {
342
390
  "$range": [
343
- 1,
344
- 221
391
+ 0,
392
+ 244
345
393
  ]
346
394
  },
347
395
  "archetype": [
348
396
  "neutral"
349
397
  ]
350
398
  },
351
- "funnels": [
352
- {
353
- "sequence": [
354
- "app install",
355
- "character creation",
356
- "join party"
357
- ],
358
- "isFirstFunnel": true,
359
- "conversionRate": 0.8,
360
- "timeToConvert": 0.25
361
- },
362
- {
363
- "sequence": [
364
- "start quest",
365
- "gameplay summary",
366
- "complete quest"
367
- ],
368
- "conversionRate": 0.99,
369
- "timeToConvert": 1,
370
- "props": {
371
- "quest type": [
372
- "Rescue",
373
- "Retrieve",
374
- "Explore",
375
- "Destroy",
376
- "Investigate"
377
- ],
378
- "quest difficulty": [
379
- "Easy",
380
- "Medium",
381
- "Hard",
382
- "Legendary"
383
- ],
384
- "quest location": [
385
- "Forest",
386
- "Dungeon",
387
- "Mountain",
388
- "City",
389
- "Desert"
399
+ "scdProps": {
400
+ "subscription MRR": {
401
+ "type": "user",
402
+ "frequency": "week",
403
+ "timing": "fixed",
404
+ "max": 250,
405
+ "values": {
406
+ "$range": [
407
+ 1,
408
+ 221
390
409
  ]
391
410
  }
411
+ },
412
+ "player_rank": {
413
+ "type": "user",
414
+ "frequency": "week",
415
+ "timing": "fuzzy",
416
+ "max": 250,
417
+ "values": [
418
+ "bronze",
419
+ "silver",
420
+ "gold",
421
+ "diamond",
422
+ "legendary"
423
+ ]
424
+ },
425
+ "guild_rank": {
426
+ "type": "guild_id",
427
+ "frequency": "month",
428
+ "timing": "fixed",
429
+ "max": 6,
430
+ "values": [
431
+ "bronze",
432
+ "silver",
433
+ "gold",
434
+ "legendary"
435
+ ]
392
436
  }
393
- ]
437
+ }
394
438
  }
@@ -11,7 +11,7 @@ const chance = u.initChance(SEED);
11
11
  const num_users = 12_000;
12
12
  const days = 180;
13
13
 
14
- /** @typedef {import("../types.d.ts").Dungeon} Config */
14
+ /** @typedef {import("../../types").Dungeon} Config */
15
15
 
16
16
  /*
17
17
  * ═══════════════════════════════════════════════════════════════════════════════
@@ -175,7 +175,6 @@ const config = {
175
175
 
176
176
  hasAvatar: true,
177
177
 
178
- batchSize: 2_500_000,
179
178
  concurrency: 1,
180
179
  writeToDisk: false,
181
180
  funnels: [
@@ -384,13 +383,25 @@ const config = {
384
383
 
385
384
  },
386
385
  scdProps: {
387
- // "subscription MRR" : {
388
- // "frequency": "week",
389
- // "type": "number",
390
- // values: u.weighNumRange(0, 250, 1, 200),
391
- // timing: "fixed",
392
- // max: 250,
393
- // }
386
+ "subscription MRR" : {
387
+ frequency: "week",
388
+ values: u.weighNumRange(0, 250, 1, 200),
389
+ timing: "fixed",
390
+ max: 250,
391
+ },
392
+ player_rank: {
393
+ values: ["bronze", "silver", "gold", "diamond", "legendary"],
394
+ frequency: "week",
395
+ timing: "fuzzy",
396
+ max: 250
397
+ },
398
+ guild_rank: {
399
+ values: ["bronze", "silver", "gold", "legendary"],
400
+ frequency: "month",
401
+ timing: "fixed",
402
+ max: 6,
403
+ type: "guild_id"
404
+ }
394
405
  },
395
406
  userProps: {
396
407
  experiment: [
@@ -411,6 +411,9 @@
411
411
  },
412
412
  {
413
413
  "event": "account deactivated",
414
+ "isChurnEvent": true,
415
+ "returnLikelihood": 0.15,
416
+ "isStrictEvent": true,
414
417
  "properties": {
415
418
  "reason": [
416
419
  "switched_provider",
@@ -422,53 +425,6 @@
422
425
  }
423
426
  }
424
427
  ],
425
- "superProps": {
426
- "subscription_tier": [
427
- "free",
428
- "basic",
429
- "premium"
430
- ],
431
- "platform": [
432
- "ios",
433
- "android",
434
- "web"
435
- ]
436
- },
437
- "userProps": {
438
- "role": [
439
- "patient",
440
- "nurse",
441
- "doctor"
442
- ],
443
- "specialty": [
444
- "none"
445
- ],
446
- "years_experience": {
447
- "$range": [
448
- 0,
449
- 5
450
- ]
451
- },
452
- "preferred_language": [
453
- "en",
454
- "es",
455
- "pt",
456
- "de",
457
- "fr"
458
- ],
459
- "has_chronic_condition": [
460
- false,
461
- true
462
- ],
463
- "age_range": [
464
- "18-25",
465
- "26-35",
466
- "36-45",
467
- "46-55",
468
- "56-65",
469
- "65+"
470
- ]
471
- },
472
428
  "funnels": [
473
429
  {
474
430
  "sequence": [
@@ -477,6 +433,7 @@
477
433
  "symptom search",
478
434
  "appointment booked"
479
435
  ],
436
+ "name": "Onboarding Flow",
480
437
  "isFirstFunnel": true,
481
438
  "conversionRate": 45,
482
439
  "timeToConvert": 72,
@@ -488,6 +445,7 @@
488
445
  "appointment booked",
489
446
  "consultation completed"
490
447
  ],
448
+ "name": "Booking to Consultation",
491
449
  "conversionRate": 40,
492
450
  "timeToConvert": 48,
493
451
  "weight": 5
@@ -499,6 +457,7 @@
499
457
  "prescription issued",
500
458
  "follow up scheduled"
501
459
  ],
460
+ "name": "Full Care Journey",
502
461
  "conversionRate": 30,
503
462
  "timeToConvert": 168,
504
463
  "weight": 3
@@ -509,6 +468,7 @@
509
468
  "prescription refill",
510
469
  "payment processed"
511
470
  ],
471
+ "name": "Prescription Lifecycle",
512
472
  "conversionRate": 55,
513
473
  "timeToConvert": 720,
514
474
  "weight": 2
@@ -519,9 +479,71 @@
519
479
  "provider rated",
520
480
  "follow up scheduled"
521
481
  ],
482
+ "name": "Patient Satisfaction",
522
483
  "conversionRate": 25,
523
484
  "timeToConvert": 72,
524
485
  "weight": 2
525
486
  }
526
- ]
487
+ ],
488
+ "superProps": {
489
+ "subscription_tier": [
490
+ "free",
491
+ "basic",
492
+ "premium"
493
+ ],
494
+ "platform": [
495
+ "ios",
496
+ "android",
497
+ "web"
498
+ ]
499
+ },
500
+ "userProps": {
501
+ "role": [
502
+ "patient",
503
+ "nurse",
504
+ "doctor"
505
+ ],
506
+ "specialty": [
507
+ "none"
508
+ ],
509
+ "years_experience": {
510
+ "$range": [
511
+ 0,
512
+ 5
513
+ ]
514
+ },
515
+ "preferred_language": [
516
+ "en",
517
+ "es",
518
+ "pt",
519
+ "de",
520
+ "fr"
521
+ ],
522
+ "has_chronic_condition": [
523
+ false,
524
+ true
525
+ ],
526
+ "age_range": [
527
+ "18-25",
528
+ "26-35",
529
+ "36-45",
530
+ "46-55",
531
+ "56-65",
532
+ "65+"
533
+ ]
534
+ },
535
+ "scdProps": {
536
+ "care_plan": {
537
+ "type": "user",
538
+ "frequency": "month",
539
+ "timing": "fuzzy",
540
+ "max": 8,
541
+ "values": [
542
+ "preventive",
543
+ "routine",
544
+ "chronic",
545
+ "acute"
546
+ ]
547
+ }
548
+ }
527
549
  }
@@ -254,10 +254,16 @@ const config = {
254
254
  hasAdSpend: false,
255
255
  percentUsersBornInDataset: 35,
256
256
  hasAvatar: true,
257
- batchSize: 2_500_000,
258
257
  concurrency: 1,
259
258
  writeToDisk: false,
260
- scdProps: {},
259
+ scdProps: {
260
+ care_plan: {
261
+ values: ["preventive", "routine", "chronic", "acute"],
262
+ frequency: "month",
263
+ timing: "fuzzy",
264
+ max: 8
265
+ }
266
+ },
261
267
  mirrorProps: {},
262
268
  lookupTables: [],
263
269
 
@@ -364,52 +364,6 @@
364
364
  }
365
365
  }
366
366
  ],
367
- "superProps": {
368
- "platform": [
369
- "web",
370
- "ios",
371
- "android"
372
- ],
373
- "insurance_type": [
374
- "auto",
375
- "home",
376
- "life",
377
- "health",
378
- "renters"
379
- ],
380
- "app_version": [
381
- "2.10"
382
- ]
383
- },
384
- "userProps": {
385
- "age_range": [
386
- "18-25",
387
- "26-35",
388
- "36-45",
389
- "46-55",
390
- "56-65",
391
- "65+"
392
- ],
393
- "risk_profile": [
394
- "low",
395
- "medium",
396
- "high"
397
- ],
398
- "policy_count": [
399
- 3
400
- ],
401
- "lifetime_premium": {
402
- "$range": [
403
- 8131,
404
- 43291
405
- ]
406
- },
407
- "preferred_contact": [
408
- "email",
409
- "phone",
410
- "app_notification"
411
- ]
412
- },
413
367
  "funnels": [
414
368
  {
415
369
  "sequence": [
@@ -417,6 +371,7 @@
417
371
  "page viewed",
418
372
  "quote requested"
419
373
  ],
374
+ "name": "Onboarding",
420
375
  "isFirstFunnel": true,
421
376
  "conversionRate": 85,
422
377
  "timeToConvert": 0.5
@@ -428,6 +383,7 @@
428
383
  "document uploaded",
429
384
  "application submitted"
430
385
  ],
386
+ "name": "Application Completion",
431
387
  "conversionRate": 60,
432
388
  "timeToConvert": 48,
433
389
  "weight": 4
@@ -438,6 +394,7 @@
438
394
  "application approved",
439
395
  "policy activated"
440
396
  ],
397
+ "name": "Application Approval",
441
398
  "conversionRate": 70,
442
399
  "timeToConvert": 72,
443
400
  "weight": 3
@@ -448,6 +405,7 @@
448
405
  "claim status checked",
449
406
  "support ticket created"
450
407
  ],
408
+ "name": "Claims Process",
451
409
  "conversionRate": 50,
452
410
  "timeToConvert": 24,
453
411
  "weight": 2
@@ -458,9 +416,70 @@
458
416
  "payment made",
459
417
  "renewal completed"
460
418
  ],
419
+ "name": "Policy Renewal",
461
420
  "conversionRate": 65,
462
421
  "timeToConvert": 72,
463
422
  "weight": 3
464
423
  }
465
- ]
424
+ ],
425
+ "superProps": {
426
+ "platform": [
427
+ "web",
428
+ "ios",
429
+ "android"
430
+ ],
431
+ "insurance_type": [
432
+ "auto",
433
+ "home",
434
+ "life",
435
+ "health",
436
+ "renters"
437
+ ],
438
+ "app_version": [
439
+ "2.10"
440
+ ]
441
+ },
442
+ "userProps": {
443
+ "age_range": [
444
+ "18-25",
445
+ "26-35",
446
+ "36-45",
447
+ "46-55",
448
+ "56-65",
449
+ "65+"
450
+ ],
451
+ "risk_profile": [
452
+ "low",
453
+ "medium",
454
+ "high"
455
+ ],
456
+ "policy_count": [
457
+ 3
458
+ ],
459
+ "lifetime_premium": {
460
+ "$range": [
461
+ 8131,
462
+ 43291
463
+ ]
464
+ },
465
+ "preferred_contact": [
466
+ "email",
467
+ "phone",
468
+ "app_notification"
469
+ ]
470
+ },
471
+ "scdProps": {
472
+ "policy_status": {
473
+ "type": "user",
474
+ "frequency": "month",
475
+ "timing": "fuzzy",
476
+ "max": 8,
477
+ "values": [
478
+ "pending",
479
+ "active",
480
+ "lapsed",
481
+ "renewed"
482
+ ]
483
+ }
484
+ }
466
485
  }
@@ -153,11 +153,17 @@ const config = {
153
153
  hasAdSpend: false,
154
154
  percentUsersBornInDataset: 35,
155
155
  hasAvatar: true,
156
- batchSize: 2_500_000,
157
156
  concurrency: 1,
158
157
  writeToDisk: false,
159
158
 
160
- scdProps: {},
159
+ scdProps: {
160
+ policy_status: {
161
+ values: ["pending", "active", "lapsed", "renewed"],
162
+ frequency: "month",
163
+ timing: "fuzzy",
164
+ max: 8
165
+ }
166
+ },
161
167
  mirrorProps: {},
162
168
  lookupTables: [],
163
169