make-mp-data 3.0.4 → 3.0.5

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 (70) hide show
  1. package/README.md +46 -0
  2. package/dungeons/array-of-object-lookup-schema.json +327 -0
  3. package/dungeons/array-of-object-lookup.js +28 -8
  4. package/dungeons/capstone/capstone-ic3.js +291 -0
  5. package/dungeons/capstone/capstone-ic4.js +598 -0
  6. package/dungeons/capstone/capstone-ic5.js +668 -0
  7. package/dungeons/capstone/generate-product-lookup.js +309 -0
  8. package/dungeons/ecommerce-schema.json +462 -0
  9. package/dungeons/{copilot.js → ecommerce.js} +77 -15
  10. package/dungeons/education-schema.json +2409 -0
  11. package/dungeons/education.js +206 -442
  12. package/dungeons/fintech-schema.json +14034 -0
  13. package/dungeons/fintech.js +110 -389
  14. package/dungeons/foobar-schema.json +403 -0
  15. package/dungeons/foobar.js +27 -4
  16. package/dungeons/food-delivery-schema.json +192 -0
  17. package/dungeons/food-delivery.js +602 -0
  18. package/dungeons/food-schema.json +1152 -0
  19. package/dungeons/food.js +150 -383
  20. package/dungeons/gaming-schema.json +1270 -0
  21. package/dungeons/gaming.js +143 -3
  22. package/dungeons/insurance-application-schema.json +204 -0
  23. package/dungeons/insurance-application.js +605 -0
  24. package/dungeons/media-schema.json +906 -0
  25. package/dungeons/media.js +221 -391
  26. package/dungeons/retention-cadence-schema.json +78 -0
  27. package/dungeons/retention-cadence.js +35 -1
  28. package/dungeons/rpg-schema.json +4526 -0
  29. package/dungeons/rpg.js +130 -388
  30. package/dungeons/sanity-schema.json +255 -0
  31. package/dungeons/sanity.js +21 -10
  32. package/dungeons/sass-schema.json +1291 -0
  33. package/dungeons/sass.js +210 -337
  34. package/dungeons/scd-schema.json +919 -0
  35. package/dungeons/scd.js +38 -10
  36. package/dungeons/simple-schema.json +608 -0
  37. package/dungeons/simple.js +48 -11
  38. package/dungeons/simplest-schema.json +1418 -0
  39. package/dungeons/simplest.js +392 -0
  40. package/dungeons/social-schema.json +1118 -0
  41. package/dungeons/social.js +124 -365
  42. package/dungeons/text-generation-schema.json +3096 -0
  43. package/dungeons/text-generation.js +71 -0
  44. package/index.js +6 -3
  45. package/lib/core/config-validator.js +18 -0
  46. package/lib/core/storage.js +5 -5
  47. package/lib/generators/events.js +4 -4
  48. package/lib/orchestrators/mixpanel-sender.js +12 -7
  49. package/lib/orchestrators/user-loop.js +14 -6
  50. package/lib/templates/soup-presets.js +188 -0
  51. package/lib/utils/utils.js +52 -6
  52. package/package.json +1 -1
  53. package/types.d.ts +20 -3
  54. package/dungeons/adspend.js +0 -117
  55. package/dungeons/anon.js +0 -128
  56. package/dungeons/benchmark-heavy.js +0 -240
  57. package/dungeons/benchmark-light.js +0 -126
  58. package/dungeons/big.js +0 -226
  59. package/dungeons/business.js +0 -391
  60. package/dungeons/complex.js +0 -428
  61. package/dungeons/experiments.js +0 -137
  62. package/dungeons/funnels.js +0 -309
  63. package/dungeons/mil.js +0 -323
  64. package/dungeons/mirror.js +0 -160
  65. package/dungeons/soup-test.js +0 -52
  66. package/dungeons/streaming.js +0 -372
  67. package/dungeons/strict-event-test.js +0 -30
  68. package/dungeons/student-teacher.js +0 -438
  69. package/dungeons/too-big-events.js +0 -203
  70. package/dungeons/user-agent.js +0 -209
@@ -11,7 +11,146 @@ const chance = u.initChance(SEED);
11
11
  const num_users = 12_000;
12
12
  const days = 180;
13
13
 
14
- /** @typedef {import("../types.js").Dungeon} Config */
14
+ /** @typedef {import("../types.d.ts").Dungeon} Config */
15
+
16
+ /*
17
+ * ═══════════════════════════════════════════════════════════════════════════════
18
+ * DATASET OVERVIEW
19
+ * ═══════════════════════════════════════════════════════════════════════════════
20
+ *
21
+ * QuestForge — A D&D-inspired action RPG where players create characters,
22
+ * join parties, embark on quests, fight bosses, and level up. Think Baldur's
23
+ * Gate meets a mobile RPG with in-game purchases and seasonal content.
24
+ *
25
+ * CORE USER LOOP:
26
+ * Players install the app, create a character (race + class + alignment),
27
+ * and join a party. They then cycle through quests — starting quests,
28
+ * engaging in gameplay (attacks, defenses, enemy defeats), completing quests
29
+ * for gold rewards, fighting bosses, and leveling up. In-game purchases
30
+ * (gold, gems, weapons, armor, boosts) monetize the experience.
31
+ *
32
+ * SCALE: 12,000 users, ~1.08M events, 180 days
33
+ *
34
+ * KEY DIMENSIONS:
35
+ * - Platform: Mobile, Xbox, Playstation, Switch, Web
36
+ * - Game mode: Single Player vs Multiplayer (biased toward Multiplayer)
37
+ * - Character: 9 races, 12 classes, 9 alignments, 13 backgrounds
38
+ * - Quests: 5 types, 4 difficulties, 5 locations
39
+ * - Experiment: fast leveling / tension economy / free trial with A/B/C/Control
40
+ *
41
+ * FUNNELS:
42
+ * 1. Onboarding: app install → character creation → join party (80% conversion)
43
+ * 2. Quest loop: start quest → gameplay summary → complete quest (99% conversion)
44
+ */
45
+
46
+ /*
47
+ * ═══════════════════════════════════════════════════════════════════════════════
48
+ * ANALYTICS HOOKS
49
+ * ═══════════════════════════════════════════════════════════════════════════════
50
+ *
51
+ * This dungeon has 3 deliberate patterns engineered via hooks:
52
+ *
53
+ * ───────────────────────────────────────────────────────────────────────────────
54
+ * 1. GOLD SCALING BY LEVEL (event hook)
55
+ * ───────────────────────────────────────────────────────────────────────────────
56
+ *
57
+ * PATTERN: On "complete quest" events, the quest reward (gold) is multiplied by
58
+ * (1 + level * 0.1), so a level-10 player earns 2x gold and a level-20 player
59
+ * earns 3x gold compared to level-1.
60
+ *
61
+ * HOW TO FIND IT IN MIXPANEL:
62
+ * - Report type: Insights
63
+ * - Event: "complete quest"
64
+ * - Measure: Average of "quest reward (gold)"
65
+ * - Breakdown: "level at end"
66
+ * - Expected: Linear increase — level 1 ≈ 55 gold, level 10 ≈ 110 gold,
67
+ * level 20 ≈ 165 gold. Clear positive correlation between level and reward.
68
+ *
69
+ * ───────────────────────────────────────────────────────────────────────────────
70
+ * 2. WHALE PURCHASES (event hook)
71
+ * ───────────────────────────────────────────────────────────────────────────────
72
+ *
73
+ * PATTERN: ~33% of users (determined by first character of user_id hash) are
74
+ * "whales" who spend 1.8x on in-game purchases and are tagged is_whale: true.
75
+ *
76
+ * HOW TO FIND IT IN MIXPANEL:
77
+ *
78
+ * Report 1: Whale vs Normal Purchase Amounts
79
+ * - Report type: Insights
80
+ * - Event: "in-game purchase"
81
+ * - Measure: Average of "purchase amount"
82
+ * - Breakdown: "is_whale"
83
+ * - Expected: is_whale=true shows ~1.8x higher avg purchase amount than
84
+ * is_whale=false (e.g., ~18 vs ~10)
85
+ *
86
+ * Report 2: Revenue Concentration
87
+ * - Report type: Insights
88
+ * - Event: "in-game purchase"
89
+ * - Measure: Sum of "purchase amount"
90
+ * - Breakdown: "is_whale"
91
+ * - Expected: ~33% of users (whales) contribute disproportionate total revenue
92
+ *
93
+ * ───────────────────────────────────────────────────────────────────────────────
94
+ * 3. ALIGNMENT ARCHETYPE (user hook)
95
+ * ───────────────────────────────────────────────────────────────────────────────
96
+ *
97
+ * PATTERN: User profiles are enriched with an "archetype" property based on
98
+ * alignment. Evil alignments → "villain", Good alignments → "hero", others → "neutral".
99
+ *
100
+ * HOW TO FIND IT IN MIXPANEL:
101
+ *
102
+ * Report 1: Archetype Distribution
103
+ * - Report type: Insights
104
+ * - Event: Any event (e.g., "complete quest")
105
+ * - Measure: Total unique users
106
+ * - Breakdown: User profile "archetype"
107
+ * - Expected: Three segments — "hero" (~22%), "villain" (~22%), "neutral" (~56%)
108
+ * matching the 2/9, 2/9, 5/9 alignment split
109
+ *
110
+ * Report 2: Archetype Behavior Comparison
111
+ * - Report type: Insights
112
+ * - Event: "fight boss"
113
+ * - Measure: Total events per user
114
+ * - Breakdown: User profile "archetype"
115
+ * - Expected: All three archetypes should show similar event volumes
116
+ * (archetype doesn't affect gameplay — just a profiling hook)
117
+ *
118
+ * ═══════════════════════════════════════════════════════════════════════════════
119
+ * EXPECTED METRICS SUMMARY
120
+ * ═══════════════════════════════════════════════════════════════════════════════
121
+ *
122
+ * Hook | Metric | Baseline | Hook Effect | Ratio
123
+ * ────────────────────────|─────────────────────────|──────────|──────────────|──────
124
+ * Gold Scaling | Avg gold at level 1 | ~55 | ~55 | 1.0x
125
+ * Gold Scaling | Avg gold at level 10 | ~55 | ~110 | 2.0x
126
+ * Gold Scaling | Avg gold at level 20 | ~55 | ~165 | 3.0x
127
+ * Whale Purchases | Avg purchase (whale) | ~10 | ~18 | 1.8x
128
+ * Whale Purchases | Revenue share (whale) | ~33% | >50% | disprop.
129
+ * Alignment Archetype | Hero users | — | ~22% | 2/9
130
+ * Alignment Archetype | Villain users | — | ~22% | 2/9
131
+ * Alignment Archetype | Neutral users | — | ~56% | 5/9
132
+ *
133
+ * ═══════════════════════════════════════════════════════════════════════════════
134
+ * ADVANCED ANALYSIS IDEAS
135
+ * ═══════════════════════════════════════════════════════════════════════════════
136
+ *
137
+ * 1. Gold Economy Analysis: Plot avg gold earned by level AND quest difficulty.
138
+ * Do Legendary quests at high levels create outsized gold rewards?
139
+ *
140
+ * 2. Whale Segmentation: Cross-reference is_whale with platform and game mode.
141
+ * Are whales concentrated on mobile? Do multiplayer whales spend more?
142
+ *
143
+ * 3. Archetype × Class Matrix: Do certain class/archetype combos correlate
144
+ * with higher boss fight rates or quest completion?
145
+ *
146
+ * 4. Experiment Impact: Compare "fast leveling" vs "tension economy" vs
147
+ * "free trial" on purchase amounts, level progression, and retention.
148
+ *
149
+ * 5. Quest Difficulty Funnel: How does quest difficulty affect completion
150
+ * rate, death count, and hint/boost usage? Is "Legendary" too hard?
151
+ *
152
+ * ═══════════════════════════════════════════════════════════════════════════════
153
+ */
15
154
 
16
155
  /** @type {Config} */
17
156
  const config = {
@@ -190,7 +329,7 @@ const config = {
190
329
  "Impossible",
191
330
  ],
192
331
  "fight duration (mins)": u.weighNumRange(1, 60),
193
-
332
+
194
333
  },
195
334
  },
196
335
  {
@@ -249,7 +388,7 @@ const config = {
249
388
  // "type": "number",
250
389
  // values: u.weighNumRange(0, 250, 1, 200),
251
390
  // timing: "fixed",
252
- // max: 250,
391
+ // max: 250,
253
392
  // }
254
393
  },
255
394
  userProps: {
@@ -314,6 +453,7 @@ const config = {
314
453
  ],
315
454
  "subscription MRR": u.weighNumRange(0, 250, 1, 200)
316
455
  },
456
+ // HOOK: 3 patterns — gold scaling by level, whale purchases, alignment archetype
317
457
  hook: function (record, type, meta) {
318
458
 
319
459
  if (type === "event") {
@@ -0,0 +1,204 @@
1
+ {
2
+ "events": [
3
+ {
4
+ "event": "account created",
5
+ "weight": 1,
6
+ "isFirstEvent": true,
7
+ "properties": {
8
+ "signup_source": ["web", "mobile", "agent_referral", "partner"],
9
+ "account_type": ["individual", "family", "business"]
10
+ }
11
+ },
12
+ {
13
+ "event": "page viewed",
14
+ "weight": 10,
15
+ "properties": {
16
+ "page_name": ["home", "quotes", "coverage_options", "claims", "faq", "profile", "payment", "documents"],
17
+ "referrer": ["direct", "google", "email", "social_media"]
18
+ }
19
+ },
20
+ {
21
+ "event": "quote requested",
22
+ "weight": 5,
23
+ "properties": {
24
+ "coverage_level": ["basic", "standard", "premium"],
25
+ "deductible": { "$range": [250, 5000] }
26
+ }
27
+ },
28
+ {
29
+ "event": "quote received",
30
+ "weight": 4,
31
+ "properties": {
32
+ "monthly_premium": { "$range": [30, 800] },
33
+ "coverage_amount": { "$range": [10000, 500000] },
34
+ "quote_comparison_count": { "$range": [1, 5] }
35
+ }
36
+ },
37
+ {
38
+ "event": "application started",
39
+ "weight": 4,
40
+ "properties": {
41
+ "coverage_level": ["basic", "standard", "premium"],
42
+ "estimated_premium": { "$range": [30, 800] }
43
+ }
44
+ },
45
+ {
46
+ "event": "application step completed",
47
+ "weight": 6,
48
+ "properties": {
49
+ "step_name": ["personal_info", "coverage_selection", "medical_history", "vehicle_info", "beneficiary", "review"],
50
+ "step_number": { "$range": [1, 6] },
51
+ "time_on_step_sec": { "$range": [15, 600] }
52
+ }
53
+ },
54
+ {
55
+ "event": "document uploaded",
56
+ "weight": 3,
57
+ "properties": {
58
+ "document_type": ["drivers_license", "proof_of_address", "vehicle_registration", "medical_records", "property_photos"],
59
+ "file_size_kb": { "$range": [50, 5000] }
60
+ }
61
+ },
62
+ {
63
+ "event": "application submitted",
64
+ "weight": 3,
65
+ "properties": {
66
+ "documents_attached": { "$range": [1, 5] },
67
+ "application_time_min": { "$range": [5, 60] }
68
+ }
69
+ },
70
+ {
71
+ "event": "application approved",
72
+ "weight": 2,
73
+ "properties": {
74
+ "approved_premium": { "$range": [30, 800] },
75
+ "approval_time_hours": { "$range": [1, 72] }
76
+ }
77
+ },
78
+ {
79
+ "event": "policy activated",
80
+ "weight": 2,
81
+ "properties": {
82
+ "policy_term_months": [6, 12, 12, 12, 24],
83
+ "effective_date_offset_days": { "$range": [0, 30] }
84
+ }
85
+ },
86
+ {
87
+ "event": "claim filed",
88
+ "weight": 2,
89
+ "properties": {
90
+ "claim_type": ["collision", "theft", "water_damage", "fire", "medical", "liability"],
91
+ "estimated_amount": { "$range": [100, 50000] }
92
+ }
93
+ },
94
+ {
95
+ "event": "claim status checked",
96
+ "weight": 4,
97
+ "properties": {
98
+ "claim_status": ["submitted", "under_review", "approved", "denied", "payment_pending"],
99
+ "days_since_filed": { "$range": [1, 60] }
100
+ }
101
+ },
102
+ {
103
+ "event": "payment made",
104
+ "weight": 5,
105
+ "properties": {
106
+ "payment_method": ["credit_card", "bank_transfer", "auto_pay", "check"],
107
+ "amount": { "$range": [30, 800] },
108
+ "payment_status": ["success", "success", "success", "success", "failed"]
109
+ }
110
+ },
111
+ {
112
+ "event": "support ticket created",
113
+ "weight": 4,
114
+ "properties": {
115
+ "issue_category": ["billing", "claims", "coverage", "technical", "policy_change"],
116
+ "priority": ["low", "medium", "medium", "high"],
117
+ "channel": ["chat", "phone", "email", "web_form"]
118
+ }
119
+ },
120
+ {
121
+ "event": "support ticket resolved",
122
+ "weight": 3,
123
+ "properties": {
124
+ "resolution_type": ["self_service", "agent_assisted", "escalated", "auto_resolved"],
125
+ "satisfaction_score": { "$range": [1, 5] },
126
+ "resolution_time_hours": { "$range": [1, 72] }
127
+ }
128
+ },
129
+ {
130
+ "event": "coverage reviewed",
131
+ "weight": 4,
132
+ "properties": {
133
+ "current_premium": { "$range": [30, 800] },
134
+ "coverage_adequate": [true, true, true, false]
135
+ }
136
+ },
137
+ {
138
+ "event": "profile updated",
139
+ "weight": 2,
140
+ "properties": {
141
+ "field_updated": ["address", "phone", "email", "beneficiary", "payment_method", "vehicle_info"]
142
+ }
143
+ },
144
+ {
145
+ "event": "renewal completed",
146
+ "weight": 2,
147
+ "properties": {
148
+ "renewal_premium": { "$range": [30, 800] },
149
+ "premium_change_pct": { "$range": [-15, 20] },
150
+ "auto_renewed": [true, true, false]
151
+ }
152
+ }
153
+ ],
154
+ "superProps": {
155
+ "platform": ["web", "ios", "android"],
156
+ "insurance_type": ["auto", "home", "life", "health", "renters"]
157
+ },
158
+ "userProps": {
159
+ "age_range": ["18-25", "26-35", "36-45", "46-55", "56-65", "65+"],
160
+ "risk_profile": ["low", "medium", "high"],
161
+ "policy_count": { "$range": [0, 5] },
162
+ "lifetime_premium": { "$range": [0, 50000] },
163
+ "preferred_contact": ["email", "phone", "app_notification"]
164
+ },
165
+ "funnels": [
166
+ {
167
+ "name": "Onboarding",
168
+ "sequence": ["account created", "page viewed", "quote requested"],
169
+ "isFirstFunnel": true,
170
+ "conversionRate": 85,
171
+ "timeToConvert": 0.5
172
+ },
173
+ {
174
+ "name": "Application Completion",
175
+ "sequence": ["application started", "application step completed", "document uploaded", "application submitted"],
176
+ "conversionRate": 60,
177
+ "timeToConvert": 48,
178
+ "weight": 4,
179
+ "order": "sequential"
180
+ },
181
+ {
182
+ "name": "Application Approval",
183
+ "sequence": ["application submitted", "application approved", "policy activated"],
184
+ "conversionRate": 70,
185
+ "timeToConvert": 72,
186
+ "weight": 3,
187
+ "order": "sequential"
188
+ },
189
+ {
190
+ "name": "Claims Process",
191
+ "sequence": ["claim filed", "claim status checked", "support ticket created"],
192
+ "conversionRate": 50,
193
+ "timeToConvert": 24,
194
+ "weight": 2
195
+ },
196
+ {
197
+ "name": "Policy Renewal",
198
+ "sequence": ["coverage reviewed", "payment made", "renewal completed"],
199
+ "conversionRate": 65,
200
+ "timeToConvert": 72,
201
+ "weight": 3
202
+ }
203
+ ]
204
+ }