An org type's default ladder can start on a product that confers nothing, and then restoring the default fails #153

Open
opened 2026-09-28 08:23:54 +00:00 by cgalo5758 · 0 comments
Owner

The Default Plan control on the org types page refuses a ladder with no rank-0 tier: the preview renders an error instead. It accepts a ladder whose rank-0 product has no entitlement set. Once such a ladder is an org type's default, restoring the default fails for every organization of that type.

What happens

Restoring the default confers the default ladder's rank-0 product, and core.confer refuses a product with no entitlement set. An operator's revoke of a grant in such an organization fails with:

failed to revoke grant … restore default for pool …: reapply-defaults: confer default grant: confer grant: ERROR: confer: product … has no entitlement set and confers nothing

The operator's confirm dialog then ends without a success notice. The same restore (ReapplyDefaultsIfVacant) also runs after a subscription ends, after a grant expires and after an org-type migration, so those paths meet the same refusal. Only the revoke path was observed failing; the others were not exercised.

How to reproduce

The browser walkthroughs share the app database across runs:

  1. The plan-ladders walkthrough creates a ladder whose two tiers have no entitlement set.
  2. The org-types walkthrough then makes it the personal org type's default.
  3. On the next run, the grant-revoke walkthrough's revoke fails as above.

On a freshly reset database, grant-revoke runs before the other two, so the suite passes.

Where it could be stopped

  • In the default-change preview, alongside the existing refusal of a ladder with no rank-0 tier.
  • Or where a ladder's tiers are chosen, since a rung that confers nothing can never be delivered by any source.

Related: #98 (a product never shows what it delivers).

The Default Plan control on the org types page refuses a ladder with no rank-0 tier: the preview renders an error instead. It accepts a ladder whose rank-0 product has no entitlement set. Once such a ladder is an org type's default, restoring the default fails for every organization of that type. ## What happens Restoring the default confers the default ladder's rank-0 product, and `core.confer` refuses a product with no entitlement set. An operator's revoke of a grant in such an organization fails with: ``` failed to revoke grant … restore default for pool …: reapply-defaults: confer default grant: confer grant: ERROR: confer: product … has no entitlement set and confers nothing ``` The operator's confirm dialog then ends without a success notice. The same restore (`ReapplyDefaultsIfVacant`) also runs after a subscription ends, after a grant expires and after an org-type migration, so those paths meet the same refusal. Only the revoke path was observed failing; the others were not exercised. ## How to reproduce The browser walkthroughs share the app database across runs: 1. The plan-ladders walkthrough creates a ladder whose two tiers have no entitlement set. 2. The org-types walkthrough then makes it the personal org type's default. 3. On the next run, the grant-revoke walkthrough's revoke fails as above. On a freshly reset database, grant-revoke runs before the other two, so the suite passes. ## Where it could be stopped - In the default-change preview, alongside the existing refusal of a ladder with no rank-0 tier. - Or where a ladder's tiers are chosen, since a rung that confers nothing can never be delivered by any source. Related: #98 (a product never shows what it delivers).
cgalo5758 added the
kind
bug
area/entitlementsarea/catalogarea/operator-ui
labels 2026-09-28 08:23:54 +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#153