Relationships
#3503 whoami reports a superseded trial as expired, and a Personal License does not end the trial for private extensions
Opened by skunk-ape · 10/15/2026· Shipped 10/15/2026
Problem
Two small gaps in how swamp-club reports a collective's trial. Together they make the CLI, the registry and the web's private toggle misreport standing. Found while triaging swamp-club#3463 (whoami log mode) and swamp-club#3311 (extension push --private).
1. whoami reports a superseded trial as expired
The web hides a trial that a team's plan or trial superseded (components/collective/TrialStatus.tsx: "trial ended" would misreport the person's standing). whoami still sends it: lib/app/views/whoami-view.ts removes supersededAt and supersededBy and reports the trial with state "expired", because "the cli contract predates supersession". So every CLI prints trial expired for a covered personal namespace. In production:
skunk-ape Free trial expired
swamp Admin2. Taking a Personal License does not end the trial for private extensions
A Personal License does not include private extensions. A paid plan ends the trial's say in entitlement: a paying collective stands on its plan, and a former customer never falls back to its trial (everGrantedAccess, #1235). A Personal License has no such effect. collectiveStanding() in lib/domain/billing/standing.ts never reads personalLicenseAt, and takePersonalLicense leaves the trial fields alone. So, found by reading the code and not yet reproduced:
- while the trial runs, a license holder may mark extensions private (the trial grants it);
- once it runs out, privateExtensionVerdict() returns "trial-ended". The registry refusal and the web toggle then say "Your free trial has ended", and swamp-club#3311's CLI push message says the free trial has ended. The web hides that trial for license holders (toShownTrialView), so the message contradicts the page.
Expected
- whoami reports a superseded trial as
trial: null, the way it already does for paid, Personal License and admin collectives. The field shape does not change and--jsonstays schema-compatible, so every installed CLI stops printingtrial expiredfor a superseded trial. - Taking a Personal License ends the trial for entitlement, just as purchasing a paid plan does. A license holder is never granted private extensions by the trial and is never told a trial ended. The private-extensions verdict for a licensed collective is "paywalled", whose message already names the paid plan.
Notes
- Keep the change small: no new whoami fields and no model refactor.
- Open question: after a license is revoked (personalLicenseRevokedAt), should the old trial count again? A former customer's does not.
- Start with a test that reproduces the license-holder verdict.
- swamp-club#3463 (CLI log-mode wording) follows this issue, and swamp-club#3311 can ship either side of it.
Shipped
Click a lifecycle step above to view its details.
system commented 10/15/2026, 4:40:07 PM
Classified automatically when this issue was filed.
- Source: Swamp Club
If you feel this classification is incorrect, add a ripple to tell us so.
Sign in to post a ripple.