Skip to content

Commit cf15bad

Browse files
committed
docs: say "membership tier" instead of the reserved word (ADR-0090 D3 ratchet)
The role-word ratchet caught this PR's own prose growing the count it exists to shrink — in the docs for the change that closes the vocabulary, which is about as pointed as a lint failure gets. Every avoidable use is now "membership tier". What remains in the two touched files is the better-auth boundary itself (`sys_member.role`, the wire field in the invite sample), which D3 keeps as its documented exception. authentication.mdx lands at 4, below its baseline of 5, so the baseline ratchets down one. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0186LhwkUBupmLJUUAMda5hU
1 parent f907c1a commit cf15bad

3 files changed

Lines changed: 7 additions & 7 deletions

File tree

content/docs/permissions/authentication.mdx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,7 @@ an audit stamp (`granted_by`), a validity window, and a scope check that a tier
684684
never had.
685685

686686
To invite someone straight into a position, put it in the invitation's
687-
*placement* rather than its role:
687+
*placement* rather than its membership tier:
688688

689689
```http
690690
POST /api/v1/auth/organization/invite-member
@@ -703,10 +703,10 @@ admins only. On acceptance the positions become real `sys_user_position` rows.
703703

704704
<Callout type="warn">
705705
Earlier releases registered every declared position and permission-set name as
706-
a valid `role` value, so `{ "role": "sales_rep" }` was accepted. That path is
707-
removed: because every value stored in `sys_member.role` is projected into
708-
`current_user.positions`, it granted capability with none of the controls
709-
above. An invitation naming a position as its `role` is now refused with
706+
a valid membership tier, so naming one directly in the invitation was accepted.
707+
That path is removed: because every value stored in the tier column is
708+
projected into `current_user.positions`, it granted capability with none of the
709+
controls above. Naming a position as an invitation's tier is now refused with
710710
`ROLE_NOT_FOUND`. Use `positions` as shown.
711711
</Callout>
712712

content/docs/permissions/positions.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ of their own** — they only decide *who gets which sets*.
2020
> `owner`, `admin`, `delegated_admin`, `member` and nothing else (ADR-0108). A
2121
> tier decides what you can *reach*; a position decides what you may *do*. To
2222
> invite someone straight into a position, use the invitation's `positions`
23-
> placement, not its role — see
23+
> placement, not its membership tier — see
2424
> [Authentication](/docs/permissions/authentication#membership-tiers-are-a-closed-list).
2525
2626
```typescript

scripts/role-word-baseline.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"content/docs/kernel/contracts/data-engine.mdx": 1,
1414
"content/docs/kernel/events.mdx": 1,
1515
"content/docs/kernel/services-checklist.mdx": 4,
16-
"content/docs/permissions/authentication.mdx": 5,
16+
"content/docs/permissions/authentication.mdx": 4,
1717
"content/docs/permissions/authorization.mdx": 3,
1818
"content/docs/permissions/delegated-administration.mdx": 11,
1919
"content/docs/permissions/index.mdx": 1,

0 commit comments

Comments
 (0)