koala73 / koala73/worldmonitor
ops(billing): Legendary 5-seat deal — re-grant comp seats at 2027-08-12 renewal; seat 5 unassigned
- Dominant language
- TypeScript
- Stars
- 86.6k
- Forks
- 13.1k
- Avg merge
- 8h 4m
- Merged PRs (30d)
- 825
Description
## Context — Legendary 5-seat Standard Pro deal (2026-08-12)
Dodo product `pdt_0NkKmaMPY3grWqiOGtyuG` ("5 × Standard Pro Annual Licenses", $1,596/yr list) was purchased 2026-08-12 by mwachter@legendary.com — subscription `sub_0NlFXgOXerG95LUzA09s4`, customer `cus_0NkbTB5bXe15WHDnXnYnA`, $1,356.60 charged (15% discount), **renews 2027-08-12**, 20-year annual term.
Provisioned 2026-08-14 (all verified in prod):
| Seat | Account | Mechanism | Expires |
|---|---|---|---|
| 1/5 | mwachter@legendary.com (`user_3GraxUC6hGUcNyWQ6m2tNc1rICx`) | attributed subscription (payer) | auto-extends on renewal |
| 2/5 | jgrode@legendary.com (`user_3GvBEZSMnDysr0OIgh2rOxGYL07`) | comp entitlement | 2027-08-12 |
| 3/5 | josh.rivkin@legendary.com (`user_3HpjKwxVCeMafBbdccm15W35lcM`) | comp entitlement | 2027-08-12 |
| 4/5 | mpatel@legendary.com (`user_3HponyaTcQaMGrHqaqEkMig9b7F`) | comp entitlement | 2027-08-12 |
| 5/5 | **unassigned** | — | — |
Product→plan mapping: `productPlans` row (isActive: false) inserted 2026-08-14; durable `LEGACY_PRODUCT_ALIASES` entry in PR #6689.
## Action required around 2027-08-12 (renewal)
The `subscription.renewed` webhook auto-extends **only the payer's** entitlement (attribution resolves via the `customers` row). The three comp seats **do not auto-renew** — after confirming the renewal payment succeeded, re-grant each seat for the new period:
```bash
npx convex run payments/billing:grantComplimentaryEntitlement \
'{"userId":"","planKey":"pro_annual","days":365,"reason":"Legendary 5-seat deal seat N/5 renewal — sub_0NlFXgOXerG95LUzA09s4"}'
```
If the renewal fails/cancels instead, let the comps lapse.
## Open items
- [ ] Seat 5/5 unassigned — assign when Legendary names the fifth user.
- [ ] 2027-08-12: verify renewal charged, then re-grant seats 2–4 (checklist above).
- [ ] Optional: if more deals like this land, consider first-class multi-seat support (the `businessProGrants` machinery is currently `api_business`-only).
https://claude.ai/code/session_01FFuRHjoUEVUA9mkQ5TmCJX
Contributor guide
Research direction
At the 2027-08-12 renewal, first verify that subscription sub_0NlFXgOXerG95LUzA09s4 renewed successfully. Then use payments/billing:grantComplimentaryEntitlement for seats 2–4 with the listed plan, duration, and reason, and confirm the new entitlements. Assign seat 5 only when Legendary provides its user.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- node.js, typescript
- Domain
- payments
- Issue type
- Documentation
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100