@ak--47/dungeon-master 1.2.3 → 1.3.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.
- package/CHANGELOG.md +42 -0
- package/README.md +51 -13
- package/dungeons/technical/ad-spend.js +2 -2
- package/dungeons/technical/anonymous-users.js +2 -2
- package/dungeons/technical/array-of-object-lookup.js +2 -2
- package/dungeons/technical/experiments.js +2 -2
- package/dungeons/technical/foobar.js +2 -2
- package/dungeons/technical/group-analytics.js +2 -2
- package/dungeons/technical/mirror-strategies.js +2 -2
- package/dungeons/technical/nested-objects.js +2 -2
- package/dungeons/technical/retention-cadence.js +2 -3
- package/dungeons/technical/sanity.js +2 -2
- package/dungeons/technical/scale-test.js +2 -2
- package/dungeons/technical/scd.js +2 -2
- package/dungeons/technical/simple.js +2 -2
- package/dungeons/technical/simplest.js +2 -2
- package/dungeons/technical/text-generation.js +2 -2
- package/dungeons/vertical/ai-platform-schema.json +617 -0
- package/dungeons/vertical/ai-platform.js +799 -0
- package/dungeons/vertical/community.js +40 -26
- package/dungeons/vertical/crypto-schema.json +546 -0
- package/dungeons/vertical/crypto.js +721 -0
- package/dungeons/vertical/dating-schema.json +401 -0
- package/dungeons/vertical/dating.js +798 -0
- package/dungeons/vertical/devtools.js +13 -9
- package/dungeons/vertical/ecommerce.js +2 -3
- package/dungeons/vertical/education.js +4 -5
- package/dungeons/vertical/fintech.js +32 -29
- package/dungeons/vertical/fitness.js +2 -3
- package/dungeons/vertical/food-delivery.js +37 -43
- package/dungeons/vertical/gaming-schema.json +2495 -230
- package/dungeons/vertical/gaming.js +771 -388
- package/dungeons/vertical/healthcare.js +2 -3
- package/dungeons/vertical/insurance-application.js +2 -3
- package/dungeons/vertical/logistics.js +20 -14
- package/dungeons/vertical/marketplace.js +22 -14
- package/dungeons/vertical/media.js +39 -30
- package/dungeons/vertical/real-estate-schema.json +527 -0
- package/dungeons/vertical/real-estate.js +774 -0
- package/dungeons/vertical/sass.js +2 -3
- package/dungeons/vertical/social.js +15 -13
- package/dungeons/vertical/travel.js +59 -26
- package/lib/core/config-validator.js +71 -15
- package/lib/orchestrators/user-loop.js +39 -5
- package/lib/templates/macro-presets.js +111 -0
- package/lib/templates/soup-presets.js +19 -36
- package/package.json +8 -2
- package/types.d.ts +219 -42
- package/dungeons/user/.gitkeep +0 -0
- package/dungeons/vertical/rpg-schema.json +0 -2491
- package/dungeons/vertical/rpg.js +0 -976
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@ak--47/dungeon-master`.
|
|
4
|
+
|
|
5
|
+
## 1.3.0 — 2026-04-28
|
|
6
|
+
|
|
7
|
+
The "no more end-of-dataset blowup" release. Rewrote how per-user event budgets and big-picture trends are decided so the default chart looks flat with a weekly cycle, instead of meteoric ramp + cliff in the final ~14 days.
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **`avgEventsPerUserPerDay` (canonical event-volume primitive).** Per-user event budgets now scale with each user's active days (`rate × user_active_days`), so users born late in the dataset don't compress their entire event budget into a tiny window. `numEvents` still works as a fallback target — see [`research/1.3.0-upgrade-guide.md`](research/1.3.0-upgrade-guide.md).
|
|
12
|
+
- **`macro` preset system.** Big-picture trend across the whole window. Default: `"flat"`. Other presets: `"steady"`, `"growth"`, `"viral"`, `"decline"`. Accepts a string, `{ preset, ...overrides }`, or a fully custom object.
|
|
13
|
+
- **`preExistingSpread` config field.** `"uniform"` (default in `flat`) spreads pre-existing users' first event time across `[FIXED_BEGIN-30d, FIXED_BEGIN]`. `"pinned"` (legacy, used by `growth`/`viral`) stacks them all at `FIXED_BEGIN`.
|
|
14
|
+
- **Future-event guard.** End of `lib/orchestrators/user-loop.js` drops any event whose timestamp landed past `MAX_TIME` after the everything hook runs. Mixpanel rejects future-dated events; this catches hook-injected duplicates that overflow.
|
|
15
|
+
- **Public type aliases.** `Soup`, `Macro`, `ResolvedMacro`, plus per-hook-type meta interfaces (`HookMetaEvent`, `HookMetaUser`, `HookMetaEverything`, etc.) for users who want to narrow inside their hooks.
|
|
16
|
+
- **Validator hardening.** Rejects `numUsers <= 0` and explicit `numDays <= 0`; clamps `bornRecentBias` to `[-1, 1]`; coerces non-finite `bornRecentBias` to `0`.
|
|
17
|
+
- **`engines.node: ">=18.0.0"`** declared in `package.json`.
|
|
18
|
+
- **`tests/macro-and-rate.test.js`** and **`tests/integration-1.3.0.test.js`** — 34 new tests covering the rate primitive, macro resolution, validator guards, future-event guard, per-user budget, and `preExistingSpread`.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- **Default trend is now `flat`.** Previously the implicit trend (via the `growth` soup preset) used `bornRecentBias: 0.3` and `percentUsersBornInDataset: 15`. New default produces a level chart with weekly oscillation. To recover the old shape, set `macro: "growth"`.
|
|
23
|
+
- **Soup presets are now intra-week / intra-day only.** `bornRecentBias` and `percentUsersBornInDataset` were removed from soup presets and live on `macro` instead. Soup preset names are unchanged.
|
|
24
|
+
- **`dungeons/vertical/questforge.js` → `dungeons/vertical/gaming.js`.** File names follow the vertical convention; the product/app name lives inside file comments.
|
|
25
|
+
- **Auto-batch ordering bug fixed.** The `numEvents >= 2_000_000` auto-batch check in `config-validator.js` now runs AFTER rate→numEvents resolution, so dungeons that set only `avgEventsPerUserPerDay` correctly trigger batch mode.
|
|
26
|
+
- **Validator no longer mutates the caller's config.** Macro-resolved values (`bornRecentBias`, `percentUsersBornInDataset`, `preExistingSpread`) are stored in local vars and added to the output, instead of being written back onto the input object.
|
|
27
|
+
- **All 36 dungeons migrated** via `scripts/experiments/migrate-dungeons.mjs` to use `avgEventsPerUserPerDay`. Hook bugs surfaced by `/verify-hooks` (13 failures) fixed across `dating`, `social`, `travel`, `community`, `logistics`, `media`, `fintech`, `food-delivery`, `education`, `real-estate`, `devtools`, and `marketplace`.
|
|
28
|
+
- **npm publish surface trimmed.** `dungeons/user/` and `scripts/experiments/` excluded from the published package.
|
|
29
|
+
|
|
30
|
+
### Documentation
|
|
31
|
+
|
|
32
|
+
- **`research/1.3.0-upgrade-guide.md`** — full upgrade guide for AI agents, including hook-writing learnings from the verify-hooks pass.
|
|
33
|
+
- **`research/end-bunchiness.md`** — full diagnosis, experiment data, before/after numbers.
|
|
34
|
+
- **`research/hook-results.md`** — consolidated PASS/WEAK/FAIL report for ~160 hooks across 20 vertical dungeons.
|
|
35
|
+
- **`CLAUDE.md`** and **`.claude/skills/create-dungeon/SKILL.md`** updated with the new two-tier preset API and hook-writing rules.
|
|
36
|
+
|
|
37
|
+
### Backward compatibility
|
|
38
|
+
|
|
39
|
+
- Dungeons that set only `numEvents` continue to work — the per-day rate is derived. They render with the new `flat` macro defaults; add `macro: "growth"` to restore the old growth-bias.
|
|
40
|
+
- Dungeons that set `bornRecentBias` / `percentUsersBornInDataset` directly continue to work — those values override the macro preset.
|
|
41
|
+
- Soup preset names are unchanged. Hook semantics are unchanged. Output file naming is unchanged.
|
|
42
|
+
- `numEvents` is **not deprecated** — it remains the right primitive for fixed total-volume targets.
|
package/README.md
CHANGED
|
@@ -272,24 +272,54 @@ hook: function(record, type, meta) {
|
|
|
272
272
|
4. to drop events, use the `everything` hook and return a filtered array. don't return `{}` from event hooks (creates broken events)
|
|
273
273
|
5. the `everything` hook is the most powerful. it sees all events for one user, has access to `meta.profile`, and can correlate across event types
|
|
274
274
|
|
|
275
|
-
##
|
|
275
|
+
## time shape — macro and soup
|
|
276
276
|
|
|
277
|
-
|
|
277
|
+
two orthogonal axes shape how events are distributed in time:
|
|
278
|
+
|
|
279
|
+
- **`macro`** — big-picture trend across the whole window (births, growth, decline). default: `"flat"`.
|
|
280
|
+
- **`soup`** — intra-week and intra-day rhythm (DOW/HOD weights, peak count, deviation). default: `"growth"`.
|
|
281
|
+
|
|
282
|
+
mix and match. most dungeons want `macro: "flat"` (the chart doesn't blow up at the right edge) plus a soup that gives the desired weekly/daily texture.
|
|
283
|
+
|
|
284
|
+
### per-user-per-day rate
|
|
285
|
+
|
|
286
|
+
`avgEventsPerUserPerDay` is the canonical event-volume primitive. born-late users get `rate × remaining_days`, not a full per-user budget compressed into a small window — that's what prevents the meteoric ramp at the right edge of the chart. `numEvents` still works as a fallback (the rate is derived from `numEvents / numUsers / numDays`), but new dungeons should set the rate directly.
|
|
287
|
+
|
|
288
|
+
### macro presets
|
|
289
|
+
|
|
290
|
+
| preset | trend shape | use case |
|
|
291
|
+
|--------|-------------|----------|
|
|
292
|
+
| `"flat"` (default) | pure weekly oscillation, no net trend | mature product; let hooks supply the story |
|
|
293
|
+
| `"steady"` | slight uptrend | lightly-growing saas |
|
|
294
|
+
| `"growth"` | visible acquisition story (no spike) | startup acquisition narrative |
|
|
295
|
+
| `"viral"` | hockey-stick acquisition | pair with persona / feature hooks |
|
|
296
|
+
| `"decline"` | sunsetting product | pair with churn hooks |
|
|
297
|
+
|
|
298
|
+
```javascript
|
|
299
|
+
macro: 'flat' // default
|
|
300
|
+
macro: 'growth' // preset string
|
|
301
|
+
macro: { preset: 'growth', percentUsersBornInDataset: 40 } // preset + override
|
|
302
|
+
macro: { bornRecentBias: 0, percentUsersBornInDataset: 15, preExistingSpread: 'uniform' } // fully custom
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## timesoup (intra-week / intra-day rhythm)
|
|
306
|
+
|
|
307
|
+
timesoup controls the texture of events inside the macro trend. it uses gaussian cluster sampling layered with day-of-week and hour-of-day weighting derived from... i won't tell you. a prize goes to whoever can guess. the result is realistic temporal patterns: weekday peaks, weekend valleys, morning surges, afternoon dips.
|
|
278
308
|
|
|
279
309
|
### presets
|
|
280
310
|
|
|
281
311
|
```javascript
|
|
282
|
-
soup: 'growth' // default.
|
|
312
|
+
soup: 'growth' // default. real-world weekly + daily rhythm
|
|
283
313
|
```
|
|
284
314
|
|
|
285
315
|
| preset | pattern | use case |
|
|
286
316
|
|--------|---------|----------|
|
|
287
|
-
| `"steady"` |
|
|
288
|
-
| `"growth"` |
|
|
317
|
+
| `"steady"` | tighter clustering | mature saas, utility apps |
|
|
318
|
+
| `"growth"` | standard intra-week rhythm | general purpose (default) |
|
|
289
319
|
| `"spiky"` | dramatic peaks and valleys | gaming, social, viral products |
|
|
290
320
|
| `"seasonal"` | 3-4 major waves | ecommerce, education |
|
|
291
321
|
| `"global"` | flat DOW + flat HOD | global saas, infrastructure |
|
|
292
|
-
| `"churny"` |
|
|
322
|
+
| `"churny"` | standard rhythm | pair with `macro: "decline"` for declining shape |
|
|
293
323
|
| `"chaotic"` | wild variation | anomaly detection, incident response |
|
|
294
324
|
|
|
295
325
|
### custom configuration
|
|
@@ -401,13 +431,18 @@ ordering strategies: `sequential`, `random`, `first-fixed`, `last-fixed`, `first
|
|
|
401
431
|
|
|
402
432
|
## user generation
|
|
403
433
|
|
|
404
|
-
users are generated with configurable birth distributions
|
|
434
|
+
users are generated with configurable birth distributions, normally controlled via the `macro` preset (see "time shape" above). these three knobs can also be set directly on the dungeon config — they override the preset's values.
|
|
435
|
+
|
|
436
|
+
| knob | range | effect |
|
|
437
|
+
|------|-------|--------|
|
|
438
|
+
| `percentUsersBornInDataset` | 0..100 | share of users created inside the window vs pre-existing |
|
|
439
|
+
| `bornRecentBias` | -1..1 | birth-date skew. negative = early, 0 = uniform, positive = recent |
|
|
440
|
+
| `preExistingSpread` | `"uniform"` \| `"pinned"` | placement of pre-existing users' first event time |
|
|
405
441
|
|
|
406
442
|
```javascript
|
|
407
443
|
{
|
|
408
444
|
numUsers: 10_000,
|
|
409
|
-
|
|
410
|
-
bornRecentBias: 0.5 // new users skew toward recent dates
|
|
445
|
+
macro: { preset: 'growth', percentUsersBornInDataset: 40, bornRecentBias: 0.5 }
|
|
411
446
|
}
|
|
412
447
|
```
|
|
413
448
|
|
|
@@ -482,7 +517,8 @@ see [types.d.ts](types.d.ts) for the complete `Dungeon` interface. here are the
|
|
|
482
517
|
| property | type | default | description |
|
|
483
518
|
|----------|------|---------|-------------|
|
|
484
519
|
| `numUsers` | number | 1000 | number of users to generate |
|
|
485
|
-
| `numEvents` | number | 100000 | target event count |
|
|
520
|
+
| `numEvents` | number | 100000 | target event count (legacy fallback; derived from `avgEventsPerUserPerDay` when set) |
|
|
521
|
+
| `avgEventsPerUserPerDay` | number | derived | per-user-per-day rate (canonical event-volume primitive) |
|
|
486
522
|
| `numDays` | number | 30 | days the dataset spans |
|
|
487
523
|
| `seed` | string | random | RNG seed for reproducibility |
|
|
488
524
|
| `format` | string | `'csv'` | output format (csv, json, parquet) |
|
|
@@ -494,9 +530,11 @@ see [types.d.ts](types.d.ts) for the complete `Dungeon` interface. here are the
|
|
|
494
530
|
| `strictEventCount` | boolean | false | stop at exact numEvents |
|
|
495
531
|
| `batchSize` | number | 2500000 | records before auto-flush |
|
|
496
532
|
| `concurrency` | number | 1 | parallel user generation |
|
|
497
|
-
| `
|
|
498
|
-
| `
|
|
499
|
-
| `
|
|
533
|
+
| `macro` | string/object | `'flat'` | big-picture trend preset (flat/steady/growth/viral/decline) |
|
|
534
|
+
| `soup` | string/object | `'growth'` | intra-week / intra-day rhythm preset |
|
|
535
|
+
| `bornRecentBias` | number | 0 (from macro `flat`) | user birth date skew (-1..1) |
|
|
536
|
+
| `percentUsersBornInDataset` | number | 15 (from macro `flat`) | % of users born in time window |
|
|
537
|
+
| `preExistingSpread` | string | `'uniform'` (from macro `flat`) | placement of pre-existing users' first event |
|
|
500
538
|
| `hook` | function/string | passthrough | data transformation function |
|
|
501
539
|
| `hasLocation` | boolean | false | include geo properties |
|
|
502
540
|
| `hasCampaigns` | boolean | false | include UTM properties |
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "ad spend test";
|
|
3
3
|
const num_days = 90;
|
|
4
4
|
const num_users = 1_000;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 0.56;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -39,7 +39,7 @@ const config = {
|
|
|
39
39
|
seed: SEED,
|
|
40
40
|
name: "ad-spend",
|
|
41
41
|
numDays: num_days,
|
|
42
|
-
|
|
42
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
43
43
|
numUsers: num_users,
|
|
44
44
|
format: 'json',
|
|
45
45
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "anonymous-users";
|
|
3
3
|
const num_days = 180;
|
|
4
4
|
const num_users = 1_000;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 0.28;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -30,7 +30,7 @@ const config = {
|
|
|
30
30
|
token,
|
|
31
31
|
seed: SEED,
|
|
32
32
|
numDays: num_days,
|
|
33
|
-
|
|
33
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
34
34
|
numUsers: num_users,
|
|
35
35
|
format: "json",
|
|
36
36
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "dm4-array-of-object-lookup";
|
|
3
3
|
const num_days = 60;
|
|
4
4
|
const num_users = 1_000;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 1.67;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -54,7 +54,7 @@ const config = {
|
|
|
54
54
|
seed: SEED,
|
|
55
55
|
name: "array-of-object-lookup",
|
|
56
56
|
numDays: num_days,
|
|
57
|
-
|
|
57
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
58
58
|
numUsers: num_users,
|
|
59
59
|
format: 'json', //csv or json
|
|
60
60
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "experiments";
|
|
3
3
|
const num_days = 60;
|
|
4
4
|
const num_users = 2_000;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 0.83;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -30,7 +30,7 @@ const config = {
|
|
|
30
30
|
token,
|
|
31
31
|
seed: SEED,
|
|
32
32
|
numDays: num_days,
|
|
33
|
-
|
|
33
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
34
34
|
numUsers: num_users,
|
|
35
35
|
format: "json",
|
|
36
36
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "dm4-foobar";
|
|
3
3
|
const num_days = 30;
|
|
4
4
|
const num_users = 4_000_000;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 16.67;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -166,7 +166,7 @@ const config = {
|
|
|
166
166
|
token,
|
|
167
167
|
seed: SEED,
|
|
168
168
|
numDays: num_days,
|
|
169
|
-
|
|
169
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
170
170
|
numUsers: num_users,
|
|
171
171
|
format: 'json', //csv or json
|
|
172
172
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "group-analytics";
|
|
3
3
|
const num_days = 60;
|
|
4
4
|
const num_users = 500;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 1;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -30,7 +30,7 @@ const config = {
|
|
|
30
30
|
token,
|
|
31
31
|
seed: SEED,
|
|
32
32
|
numDays: num_days,
|
|
33
|
-
|
|
33
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
34
34
|
numUsers: num_users,
|
|
35
35
|
format: "json",
|
|
36
36
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "mirror-strategies";
|
|
3
3
|
const num_days = 30;
|
|
4
4
|
const num_users = 500;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 2;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -29,7 +29,7 @@ const config = {
|
|
|
29
29
|
token,
|
|
30
30
|
seed: SEED,
|
|
31
31
|
numDays: num_days,
|
|
32
|
-
|
|
32
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
33
33
|
numUsers: num_users,
|
|
34
34
|
format: "json",
|
|
35
35
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "dm4-nested-objects";
|
|
3
3
|
const num_days = 30;
|
|
4
4
|
const num_users = 500;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 2;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -44,7 +44,7 @@ const config = {
|
|
|
44
44
|
seed: SEED,
|
|
45
45
|
name: "nested-objects",
|
|
46
46
|
numDays: num_days,
|
|
47
|
-
|
|
47
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
48
48
|
numUsers: num_users,
|
|
49
49
|
format: 'json',
|
|
50
50
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "kurby-retention";
|
|
3
3
|
const num_days = 360;
|
|
4
4
|
const num_users = 100;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 0.14;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -110,7 +110,7 @@ const config = {
|
|
|
110
110
|
token,
|
|
111
111
|
seed: SEED,
|
|
112
112
|
numDays: num_days,
|
|
113
|
-
|
|
113
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
114
114
|
numUsers: num_users,
|
|
115
115
|
hasAnonIds: false,
|
|
116
116
|
hasSessionIds: false,
|
|
@@ -127,7 +127,6 @@ const config = {
|
|
|
127
127
|
hasAvatar: false,
|
|
128
128
|
concurrency: 1,
|
|
129
129
|
writeToDisk: false,
|
|
130
|
-
percentUsersBornInDataset: 100,
|
|
131
130
|
|
|
132
131
|
funnels: [],
|
|
133
132
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "foo bar";
|
|
3
3
|
const num_days = 90;
|
|
4
4
|
const num_users = 500;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 1.11;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -43,7 +43,7 @@ const config = {
|
|
|
43
43
|
token,
|
|
44
44
|
seed: SEED,
|
|
45
45
|
numDays: num_days,
|
|
46
|
-
|
|
46
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
47
47
|
numUsers: num_users,
|
|
48
48
|
format: 'json', //csv or json
|
|
49
49
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "scale test";
|
|
3
3
|
const num_days = 365;
|
|
4
4
|
const num_users = 10_000;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 0.14;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -38,7 +38,7 @@ const config = {
|
|
|
38
38
|
seed: SEED,
|
|
39
39
|
name: "scale-test",
|
|
40
40
|
numDays: num_days,
|
|
41
|
-
|
|
41
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
42
42
|
numUsers: num_users,
|
|
43
43
|
format: 'json',
|
|
44
44
|
gzip: true,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "simple is best";
|
|
3
3
|
const num_days = 30;
|
|
4
4
|
const num_users = 500;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 3.33;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -64,7 +64,7 @@ const config = {
|
|
|
64
64
|
token,
|
|
65
65
|
seed: SEED,
|
|
66
66
|
numDays: num_days,
|
|
67
|
-
|
|
67
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
68
68
|
numUsers: num_users,
|
|
69
69
|
format: 'csv', //csv or json
|
|
70
70
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "simple is best";
|
|
3
3
|
const num_days = 100;
|
|
4
4
|
const num_users = 5_000;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 1;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -73,7 +73,7 @@ const config = {
|
|
|
73
73
|
token,
|
|
74
74
|
seed: SEED,
|
|
75
75
|
numDays: num_days,
|
|
76
|
-
|
|
76
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
77
77
|
numUsers: num_users,
|
|
78
78
|
format: 'json', //csv or json
|
|
79
79
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "simple is best";
|
|
3
3
|
const num_days = 100;
|
|
4
4
|
const num_users = 2_500;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 1;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -47,7 +47,7 @@ const config = {
|
|
|
47
47
|
token,
|
|
48
48
|
seed: SEED,
|
|
49
49
|
numDays: num_days,
|
|
50
|
-
|
|
50
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
51
51
|
numUsers: num_users,
|
|
52
52
|
format: 'json', //csv or json
|
|
53
53
|
region: "US",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const SEED = "SUPER DUPER DANGEROUS BROOO";
|
|
3
3
|
const num_days = 92;
|
|
4
4
|
const num_users = 8_000;
|
|
5
|
-
const
|
|
5
|
+
const avg_events_per_user_per_day = 1.3;
|
|
6
6
|
let token = "your-mixpanel-token";
|
|
7
7
|
|
|
8
8
|
// ── env overrides ──
|
|
@@ -407,7 +407,7 @@ const dungeon = {
|
|
|
407
407
|
seed: SEED,
|
|
408
408
|
token,
|
|
409
409
|
numDays: num_days,
|
|
410
|
-
|
|
410
|
+
avgEventsPerUserPerDay: avg_events_per_user_per_day,
|
|
411
411
|
numUsers: num_users,
|
|
412
412
|
hasAnonIds: false,
|
|
413
413
|
hasSessionIds: true, // Enable for chat flow tracking
|