An operator cannot issue a grant that waits under the organization's own plan and takes over when that plan stops covering it #281

Open
opened 2026-10-28 01:12:23 +00:00 by cgalo5758 · 0 comments
Owner

What a person cannot do today

Some terms first. A plan ladder is a ranked sequence of tiers, and an organization holds one tier per ladder at a time. A grant is an operator's record that gives an organization a tier without payment.

Issuing a grant always takes effect at once. The Issue grant form has no start, and the new grant takes the ladder from whatever holds it, a tier the organization pays for included (whose billing #269 pauses while the grant holds). So an operator cannot record a promise such as "if you ever leave Pro, you keep Plus": issuing Plus now replaces the paid Pro at once.

The console supports this only in the opposite order. An organization that already holds a Plus grant marked Resumes, and then buys Pro, gets Plus back when Pro ends. Only the end of the plan above brings it back; a downgrade of that plan to a tier below Plus does not.

#117 asks for a grant that starts on a date. This one starts on an event: when the organization's own plan on the ladder stops covering the grant's tier.

What they should be able to do

Issue a grant that waits under the plan the organization holds on that ladder. While it waits it is shown as waiting on the organization's page and in the grants list, can be revoked, and delivers nothing. It takes the ladder when the plan above stops covering its tier. Which events count is the open part:

  • When the plan above ends (a cancellation, a revocation, an expiry). This is what a marked grant already does once a plan has replaced it, so the waiting grant could be issued in that state and reuse the same rules.
  • Also when the plan above drops below the grant's tier, for example a downgrade from Pro to Basic. The grant then works as a floor for that organization: it takes the ladder, and the subscription below it is paused as #269 pauses any subscription a grant displaces.

Why it matters

Arrangements like a sponsorship's minimum, a legacy member's guaranteed tier, or a cooperative's member benefit promise a tier under whatever the organization pays for. Without a waiting grant the promise lives in someone's memory, the same gap #117 names for dates.

Where

The Issue grant form (internal/server/operator_enrollment_forms.go); the conferral (core.confer) and grant resumption (core.grant_waits, core.resumable_grants, internal/entitlements/grant_resumption.go); the rules in docs/models/plan-ladders-transitions.md (supersession, grant resumption). Related: #117 (a grant that starts on a date), #154 (an org type's default as a standing grant that always resumes, the same idea for the default), #269 (pausing a subscription a grant displaces).

Done when

Issue grant can issue a grant that waits under the organization's current plan; the organization's page and the grants list show it as waiting; it delivers nothing while the plan above covers its tier and takes the ladder when that plan ends (and, if the floor form is chosen, when that plan drops below the grant's tier); docs/models/plan-ladders-transitions.md states the rule; and tests drive each event that hands it the ladder.

### What a person cannot do today Some terms first. A plan ladder is a ranked sequence of tiers, and an organization holds one tier per ladder at a time. A grant is an operator's record that gives an organization a tier without payment. Issuing a grant always takes effect at once. The Issue grant form has no start, and the new grant takes the ladder from whatever holds it, a tier the organization pays for included (whose billing #269 pauses while the grant holds). So an operator cannot record a promise such as "if you ever leave Pro, you keep Plus": issuing Plus now replaces the paid Pro at once. The console supports this only in the opposite order. An organization that already holds a Plus grant marked Resumes, and then buys Pro, gets Plus back when Pro ends. Only the end of the plan above brings it back; a downgrade of that plan to a tier below Plus does not. #117 asks for a grant that starts on a date. This one starts on an event: when the organization's own plan on the ladder stops covering the grant's tier. ### What they should be able to do Issue a grant that waits under the plan the organization holds on that ladder. While it waits it is shown as waiting on the organization's page and in the grants list, can be revoked, and delivers nothing. It takes the ladder when the plan above stops covering its tier. Which events count is the open part: - **When the plan above ends** (a cancellation, a revocation, an expiry). This is what a marked grant already does once a plan has replaced it, so the waiting grant could be issued in that state and reuse the same rules. - **Also when the plan above drops below the grant's tier**, for example a downgrade from Pro to Basic. The grant then works as a floor for that organization: it takes the ladder, and the subscription below it is paused as #269 pauses any subscription a grant displaces. ### Why it matters Arrangements like a sponsorship's minimum, a legacy member's guaranteed tier, or a cooperative's member benefit promise a tier under whatever the organization pays for. Without a waiting grant the promise lives in someone's memory, the same gap #117 names for dates. ### Where The Issue grant form (`internal/server/operator_enrollment_forms.go`); the conferral (`core.confer`) and grant resumption (`core.grant_waits`, `core.resumable_grants`, `internal/entitlements/grant_resumption.go`); the rules in `docs/models/plan-ladders-transitions.md` (supersession, grant resumption). Related: #117 (a grant that starts on a date), #154 (an org type's default as a standing grant that always resumes, the same idea for the default), #269 (pausing a subscription a grant displaces). ### Done when Issue grant can issue a grant that waits under the organization's current plan; the organization's page and the grants list show it as waiting; it delivers nothing while the plan above covers its tier and takes the ladder when that plan ends (and, if the floor form is chosen, when that plan drops below the grant's tier); `docs/models/plan-ladders-transitions.md` states the rule; and tests drive each event that hands it the ladder.
cgalo5758 added the
kind
enhancement
area/entitlementsarea/operator-ui
labels 2026-10-28 01:12:23 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wiki-cafe/member-console#281