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
Observation-class finding, no user-visible impact today. Surfaced while implementing #4288 inside sweep #4328; recorded rather than fixed, because retiring a second published type is its own judgement call and would have put a row in that PR's diff that its member table does not have.
What
ObjectLevelPermission (packages/types/src/permissions.ts) had exactly one structural referent in this repository: the RoleDefinition.permissions field. #4288 retires that field, so after it lands the type is referenced only by the two barrels that re-export it:
packages/types/src/index.ts (the @object-ui/types public surface)
packages/permissions/src/index.ts (re-export)
Nothing constructs one, nothing accepts one, nothing reads one. PermissionCondition is one step further out: its only referent is ObjectLevelPermission.conditions, so it inherits the same status transitively. (PermissionEffect is not in this set — FieldLevelPermission.effect still uses it, and that type is live.)
The grants the evaluator actually applies come from ObjectPermissionConfig.roles, whose inner shape is declared inline and does not use ObjectLevelPermission.
Why it is an observation and not a defect
An exported type with no consumers costs nobody a wrong answer. It is worth a card because it is the same declared-but-unread shape #4288 was, one hop out, and because leaving it named in the public surface invites the next author to reach for it as if role-attached grants were a thing the runtime honours — which is exactly what #4288 removed.
Keep as vocabulary if role-attached grants are a direction the platform intends to build, and let the types return with the reader. Worth an explicit note in that case, since "declared, no reader" is what got the field retired.
Deliberately not judged here: which of those is right depends on whether role-direct grants have a business pull, and that is a product call rather than a code one.
Dedupe
Searched open issues for ObjectLevelPermission, PermissionCondition, and role-permission type retirement: no existing card. #4288 covers the field only; its member row is closed by #4328's PR.
Observation-class finding, no user-visible impact today. Surfaced while implementing #4288 inside sweep #4328; recorded rather than fixed, because retiring a second published type is its own judgement call and would have put a row in that PR's diff that its member table does not have.
What
ObjectLevelPermission(packages/types/src/permissions.ts) had exactly one structural referent in this repository: theRoleDefinition.permissionsfield. #4288 retires that field, so after it lands the type is referenced only by the two barrels that re-export it:packages/types/src/index.ts(the@object-ui/typespublic surface)packages/permissions/src/index.ts(re-export)Nothing constructs one, nothing accepts one, nothing reads one.
PermissionConditionis one step further out: its only referent isObjectLevelPermission.conditions, so it inherits the same status transitively. (PermissionEffectis not in this set —FieldLevelPermission.effectstill uses it, and that type is live.)The grants the evaluator actually applies come from
ObjectPermissionConfig.roles, whose inner shape is declared inline and does not useObjectLevelPermission.Why it is an observation and not a defect
An exported type with no consumers costs nobody a wrong answer. It is worth a card because it is the same declared-but-unread shape #4288 was, one hop out, and because leaving it named in the public surface invites the next author to reach for it as if role-attached grants were a thing the runtime honours — which is exactly what #4288 removed.
Directions (for triage, none advocated here)
ObjectLevelPermission,PermissionCondition) as a follow-on dead-surface row. Same criterion as the sweep, and both are@object-ui/typesexports so the changeset shape matches sweep: dead-surface deletions batch 3 — 3 zero-consumer items, one claim, one PR (findings-triage 2026-08-11) #4328's.Deliberately not judged here: which of those is right depends on whether role-direct grants have a business pull, and that is a product call rather than a code one.
Dedupe
Searched open issues for
ObjectLevelPermission,PermissionCondition, and role-permission type retirement: no existing card. #4288 covers the field only; its member row is closed by #4328's PR.