Skip to main content
← Back to list
01Issue
BugShippedSwamp ClubPublic
Assigneesskunk-ape

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      Admin

2. 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

  1. 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 --json stays schema-compatible, so every installed CLI stops printing trial expired for a superseded trial.
  2. 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.
02Bog Flow
✓OPEN✓TRIAGED✓IN PROGRESS✓SHIPPED+ 1 MOREASSIGNED+ 5 MOREREVIEW+ 5 MOREPR_MERGED+ 2 MORESESSION_SUMMARIZED

Shipped

10/15/2026, 7:58:51 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
skunk-ape assigned skunk-ape10/15/2026, 4:41:31 PM
Editable. Press Enter to edit.

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.