You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(approvals)!: rename role approver type to org_membership_level (#3137)
Closes#3133. Renames the last platform surface projecting the ADR-0090 D3 reserved word: `ApproverType.role` → `org_membership_level`, with `role` kept as a deprecated alias for one window (resolves identically, warns). Publishes `xEnumDeprecated` on the node configSchema so Studio drops the deprecated spelling from the approver-type picker. Supersedes #3120/#3122. objectui half: objectstack-ai/objectui#2643 (merged).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Copy file name to clipboardExpand all lines: content/docs/automation/approvals.mdx
+16-10Lines changed: 16 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -53,11 +53,14 @@ defineFlow({
53
53
```
54
54
55
55
<Callouttype="warn">
56
-
**`position` vs `role`.**`{ type: 'position', value: 'finance_manager' }` routes to the
57
-
holders of a position (`sys_user_position`, ADR-0090 D3). The `role` approver type is the
58
-
better-auth **org-membership tier** (`sys_member.role`: `owner`/`admin`/`member`) — a position
59
-
name authored as `type: 'role'` matches nobody and the request stalls; `os lint` flags this
60
-
(`approval-role-not-membership-tier`).
56
+
**`position` vs `org_membership_level`.**`{ type: 'position', value: 'finance_manager' }` routes
57
+
to the holders of a position (`sys_user_position`, ADR-0090 D3). `org_membership_level` is a
58
+
different thing — the better-auth **org-membership tier**, whose only values are
59
+
`owner`/`admin`/`member`. A position name authored there matches nobody and the request stalls;
60
+
`os lint` flags it (`approval-approver-not-membership-tier`).
61
+
62
+
Authored `type: 'role'` on 15.x? That is the deprecated spelling of `org_membership_level`
63
+
(ADR-0090 D3): it still resolves, warns at runtime, and is removed in the next major.
61
64
</Callout>
62
65
63
66
Approving is itself a gated action — model "may approve" as a capability (`approve_invoice`) the approver's permission set grants, and gate the approve action's `requiredPermissions` on it so the gate is enforced on **both** the UI and the server (ADR-0066 D4).
@@ -133,9 +136,11 @@ Only `approvers` is required on the node; everything else has a default
0 commit comments