Parent: #877
Question
The streak tier drop logic in lib/airdrop/streak.ts needs verification against the proposal spec.
Current behavior (snaps to current tier threshold):
- Streak 55 → miss a day → set to 50 (stays in same tier)
- Streak 50 → miss a day → set to 50 (stays in same tier, no penalty)
- Streak 49 → miss a day → set to 30
Proposal intended ("drop one tier"):
- Streak 55 → miss a day → set to 30 (drops from 50-day tier to 30-day tier)
- Streak 50 → miss a day → set to 30
- Streak 49 → miss a day → set to 14
The current implementation means missing a day at exactly a tier boundary (e.g., streak=50) has ZERO penalty. The proposal intended dropping to the previous tier's threshold.
Fix
In lib/airdrop/streak.ts, the dropOneTier() function should find the user's current tier and return the previous tier's threshold:
Current tier thresholds: [7, 14, 30, 50, 100]
streak 100+ → drop to 50
streak 50-99 → drop to 30
streak 30-49 → drop to 14
streak 14-29 → drop to 7
streak 7-13 → drop to 0
streak 0-6 → stays 0
Files
lib/airdrop/streak.ts — dropOneTier() function
Acceptance Criteria
Parent: #877
Question
The streak tier drop logic in
lib/airdrop/streak.tsneeds verification against the proposal spec.Current behavior (snaps to current tier threshold):
Proposal intended ("drop one tier"):
The current implementation means missing a day at exactly a tier boundary (e.g., streak=50) has ZERO penalty. The proposal intended dropping to the previous tier's threshold.
Fix
In
lib/airdrop/streak.ts, thedropOneTier()function should find the user's current tier and return the previous tier's threshold:Files
lib/airdrop/streak.ts—dropOneTier()functionAcceptance Criteria