Skip to content

fix(kilo-pass): remove grandfathered second-month 50% bonus promo#3623

Open
kilo-code-bot[bot] wants to merge 1 commit into
mainfrom
fix/remove-kilo-pass-second-month-50pct-bonus
Open

fix(kilo-pass): remove grandfathered second-month 50% bonus promo#3623
kilo-code-bot[bot] wants to merge 1 commit into
mainfrom
fix/remove-kilo-pass-second-month-50pct-bonus

Conversation

@kilo-code-bot
Copy link
Copy Markdown
Contributor

@kilo-code-bot kilo-code-bot Bot commented Jun 1, 2026

Summary

  • The limited-time two-month Kilo Pass promo ended on 2026-05-07. First-time subscribers who had started before the cutoff and reached their second month were still seeing a 50% bonus displayed on the Kilo Pass bar instead of the standard streak ramp bonus (e.g. 10%).
  • Removed the second-month 50% grandfathered promo block from computeMonthlyCadenceBonusPercent — month 2 now always uses the standard ramp formula.
  • Cleaned up the now-dead constants (KILO_PASS_MONTHLY_FIRST_2_MONTHS_PROMO_CUTOFF, KILO_PASS_MONTHLY_FIRST_2_MONTHS_PROMO_BONUS_PERCENT), the subscriptionStartedAtIso parameter from the bonus function, the isTwoMonthPromoOfferActive router helper, and all showSecondMonthPromo UI props across profile and subscription center components.
  • Updated all affected tests to assert the standard ramp behavior for streak month 2.

Verification

  • Manually verify that an active Kilo Pass subscriber in their second month now sees the standard ramp bonus (e.g. 10% for streak=2) on the profile page bar instead of 50%.
  • Verify that month 1 first-time subscribers still see the 50% first-month promo bonus (unchanged).
  • Verify that month 3+ subscribers continue to see the ramp bonus (unchanged).

Visual Changes

N/A

Reviewer Notes

The core logic change is one block removed from computeMonthlyCadenceBonusPercent in apps/web/src/lib/kilo-pass/bonus.ts:43-57. The rest of the diff is cascading cleanup of the now-unused subscriptionStartedAtIso parameter and promo UI props throughout the codebase.


Built for Lígia Zanchet by Kilo for Slack

The limited-time two-month promo ended on 2026-05-07. Active subscribers
in their second month were still seeing a 50% bonus displayed on the
Kilo Pass bar instead of the standard streak ramp bonus.

Remove the second-month 50% grandfathered promo from
computeMonthlyCadenceBonusPercent so month 2 now uses the standard
ramp formula (e.g. 10% for streak=2). Clean up the now-unused
constants, subscriptionStartedAtIso parameter, isTwoMonthPromoOfferActive
helper, showSecondMonthPromo UI props, and all related test fixtures.
const subscriptionBase = await getKiloPassStateForUser(db, ctx.user.id);
if (!subscriptionBase) {
return { subscription: null, isEligibleForFirstMonthPromo: isTwoMonthPromoOfferActive() };
return { subscription: null, isEligibleForFirstMonthPromo: false };
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: isEligibleForFirstMonthPromo is now always false for unsubscribed users, but the first-month 50% promo bonus is still applied by computeMonthlyCadenceBonusPercent for streakMonths === 1 && isFirstTimeSubscriberEver. This means new prospective subscribers will no longer see any promo callout in the UI (e.g. in KiloPassSubscribeCard, KiloPassTierCard, KiloPassBonusRampDialog), even though they'll still receive the 50% first-month bonus when they actually subscribe.

The old isTwoMonthPromoOfferActive() was using the two-month promo cutoff to gate this field — now that the cutoff has passed, the intent may be to end all promo display. But the PR description says "Verify that month 1 first-time subscribers still see the 50% first-month promo bonus (unchanged)", and the existing tests at kilo-pass-router.test.ts:566, 1408, and 1436 still assert isEligibleForFirstMonthPromo: true for never-subscribed users — those tests will now fail.

If the first-month promo display should indeed be disabled permanently, the stale tests must be updated. If it should remain visible to new users, this needs to return true for never-subscribed first-time users.

subscriptionStartedAtIso: params.startedAtIso,
});

const shouldIssueFirstMonthPromo = bonusPercentApplied === 0.5 && streakMonths <= 2;
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SUGGESTION: The streakMonths <= 2 guard is now a dead condition. Since the second-month 50% grandfathered promo has been removed, bonusPercentApplied === 0.5 can only ever be true at streakMonths === 1. The guard could be simplified to streakMonths === 1 for clarity:

Suggested change
const shouldIssueFirstMonthPromo = bonusPercentApplied === 0.5 && streakMonths <= 2;
const shouldIssueFirstMonthPromo = bonusPercentApplied === 0.5 && streakMonths === 1;

@kilo-code-bot
Copy link
Copy Markdown
Contributor Author

kilo-code-bot Bot commented Jun 1, 2026

Code Review Summary

Status: 2 Issues Found | Recommendation: Address before merge

Executive Summary

The isEligibleForFirstMonthPromo field is hardcoded to false for unsubscribed users, breaking the first-month promo UI display and leaving three stale tests that will fail.

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 1
Issue Details (click to expand)

WARNING

File Line Issue
apps/web/src/routers/kilo-pass-router.ts 820 isEligibleForFirstMonthPromo: false hardcoded for no-subscription path — first-month promo UI broken for new users; stale tests at lines 566, 1408, 1436 of kilo-pass-router.test.ts still assert true and will fail

SUGGESTION

File Line Issue
apps/web/src/lib/kilo-pass/usage-triggered-bonus.ts 69 streakMonths <= 2 guard is now dead — month 2 never returns 50% anymore, simplify to streakMonths === 1
Other Observations (not in diff)

Issues found in unchanged code that cannot receive inline comments:

File Line Issue
apps/web/src/routers/kilo-pass-router.test.ts 566 Test 'returns null subscription when user has no Kilo Pass subscription' asserts isEligibleForFirstMonthPromo: true but router now returns false unconditionally — test will fail
apps/web/src/routers/kilo-pass-router.test.ts 1408 Test 'returns isEligibleForFirstMonthPromo=true when user has no subscriptions' will now fail
apps/web/src/routers/kilo-pass-router.test.ts 1436 Test 'keeps isEligibleForFirstMonthPromo=true for a never-subscribed user' will now fail
Files Reviewed (13 files)
  • apps/web/src/app/(app)/claw/components/billing/PlanSelectionDialog.tsx
  • apps/web/src/app/(app)/claw/components/billing/WelcomePage.tsx
  • apps/web/src/components/profile/ProfileKiloPassSection.tsx
  • apps/web/src/components/profile/kilo-pass/KiloPassActiveSubscriptionCard.logic.ts
  • apps/web/src/components/profile/kilo-pass/KiloPassBonusRampDialog.tsx
  • apps/web/src/components/profile/kilo-pass/KiloPassSubscribeCard.tsx
  • apps/web/src/components/profile/kilo-pass/KiloPassTierCard.tsx
  • apps/web/src/components/subscriptions/kilo-pass/KiloPassDetail.tsx
  • apps/web/src/components/subscriptions/kilo-pass/KiloPassGroup.tsx
  • apps/web/src/lib/kilo-pass/bonus.ts — clean
  • apps/web/src/lib/kilo-pass/bonus.test.ts — clean
  • apps/web/src/lib/kilo-pass/constants.ts — clean
  • apps/web/src/lib/kilo-pass/usage-triggered-bonus.ts — 1 issue
  • apps/web/src/lib/kilo-pass/usage-triggered-bonus.test.ts — clean
  • apps/web/src/lib/kilo-pass/usage-triggered-bonus.unit.test.ts — clean
  • apps/web/src/routers/kilo-pass-router.ts — 1 issue
  • apps/web/src/routers/kilo-pass-router.test.ts — 3 stale tests (not in diff)

Fix these issues in Kilo Cloud


Reviewed by claude-sonnet-4.6 · 1,331,129 tokens

Review guidance: REVIEW.md from base branch main

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants