From f1f120498ccc15583cbbed8f45e91486ff4fbae6 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Thu, 25 Jun 2020 15:06:06 -0500 Subject: [PATCH 1/3] fix(ABtest): important parens --- test/common/fns/randomDrop.test.js | 1 + website/common/script/fns/randomDrop.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/test/common/fns/randomDrop.test.js b/test/common/fns/randomDrop.test.js index 4752fa0cca..3ce03286b1 100644 --- a/test/common/fns/randomDrop.test.js +++ b/test/common/fns/randomDrop.test.js @@ -17,6 +17,7 @@ describe('common.fns.randomDrop', () => { user._tmp = user._tmp ? user._tmp : {}; user.items.eggs.Wolf = 0; user.items.food.Meat = 0; + user._id = `a${user._id.slice(1)}`; task = generateTodo({ userId: user._id }); predictableRandom = sandbox.stub().returns(0.5); }); diff --git a/website/common/script/fns/randomDrop.js b/website/common/script/fns/randomDrop.js index ef47ba4380..b4e418ad07 100644 --- a/website/common/script/fns/randomDrop.js +++ b/website/common/script/fns/randomDrop.js @@ -47,7 +47,7 @@ export default function randomDrop (user, options, req = {}, analytics) { let chance = min([Math.abs(task.value - 21.27), 37.5]) / 150 + 0.02; chance *= task.priority // Task priority: +50% for Medium, +100% for Hard // A/B test experiment: start users with +75% drops, diminishing by 5% per level gained - * '12345678'.indexOf(user._id.slice(0, 1)) !== -1 ? (1 + Math.max(0, 80 - (5 * user.stats.lvl)) / 100) : 1 + * ('12345678'.indexOf(user._id.slice(0, 1)) !== -1 ? (1 + Math.max(0, 80 - (5 * user.stats.lvl)) / 100) : 1) * (1 + (task.streak / 100 || 0)) // Streak bonus: +1% per streak * (1 + statsComputed(user).per / 100) // PERception: +1% per point * (1 + (user.contributor.level / 40 || 0)) // Contrib levels: +2.5% per level From b641414a56a2d3a6790d9841393c39c0fea81d5f Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Fri, 26 Jun 2020 15:16:22 -0500 Subject: [PATCH 2/3] fix(ABtest): record test group at registration --- website/server/libs/auth/index.js | 1 + website/server/libs/auth/social.js | 1 + 2 files changed, 2 insertions(+) diff --git a/website/server/libs/auth/index.js b/website/server/libs/auth/index.js index e8e60824f3..54e4e595f6 100644 --- a/website/server/libs/auth/index.js +++ b/website/server/libs/auth/index.js @@ -207,6 +207,7 @@ async function registerLocal (req, res, { isV3 = false }) { .catch(err => logger.error(err)); if (!existingUser) { + savedUser._ABtests['20200625_drops'] = '12345678'.indexOf(savedUser._id.slice(0, 1)) !== -1 ? 'boosted' : 'control'; res.analytics.track('register', { category: 'acquisition', type: 'local', diff --git a/website/server/libs/auth/social.js b/website/server/libs/auth/social.js index 02e4d64faf..9b3878d68c 100644 --- a/website/server/libs/auth/social.js +++ b/website/server/libs/auth/social.js @@ -112,6 +112,7 @@ export async function loginSocial (req, res) { // eslint-disable-line import/pre } if (!existingUser) { + savedUser._ABtests['20200625_drops'] = '12345678'.indexOf(savedUser._id.slice(0, 1)) !== -1 ? 'boosted' : 'control'; res.analytics.track('register', { category: 'acquisition', type: network, From 6b3ba83d4f7e884495c166df6a5467a3b4f30d55 Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Fri, 26 Jun 2020 15:18:38 -0500 Subject: [PATCH 3/3] 4.146.7 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 99532db324..2a99f33253 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "habitica", - "version": "4.146.6", + "version": "4.146.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 35a272eaf7..21684d5847 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "habitica", "description": "A habit tracker app which treats your goals like a Role Playing Game.", - "version": "4.146.6", + "version": "4.146.7", "main": "./website/server/index.js", "dependencies": { "@babel/core": "^7.10.3",