Skip to content

Commit f653505

Browse files
committed
docs(adr-0099): I3 names EXTERNAL as the one posture not derived from capability grants
EXTERNAL derives from the reserved org_external position, which the resolver projects from sys_member.role = external. I3 said every posture derives only from capability grants; a dated note records the exception, and ADR-0095 D3's bullet points to it. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AZbN6PU5Xz4WTi6NKmyKhN
1 parent e9bb178 commit f653505

2 files changed

Lines changed: 6 additions & 1 deletion

File tree

‎docs/adr/0095-authz-kernel-tenant-layer-and-posture-ladder.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ enum AuthzPosture {
271271
source of a position; enforcement reads the posture, never the role. It is
272272
the one rung whose evidence is an identity position rather than a
273273
capability bit, and it outranks `TENANT_ADMIN` (only `PLATFORM_ADMIN`
274-
precedes it).
274+
precedes it). ADR-0099 I3 records the exception.
275275
- **No enforcement-time code path may consult the better-auth role directly.**
276276
This removes dual-track adjudication: #2836-class conflicts (explicit deny
277277
from one track out-composing a wildcard allow from the other) become

‎docs/adr/0099-posture-adjudicated-tiering-and-external-rung.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,11 @@ Invariants (each carries a matrix cell):
174174
- **I3** — Posture is derived only by the resolver, only from capability
175175
grants (ADR-0095 D3); no enforcement site re-derives tier at the point of
176176
decision (fallback probe excepted, per D1, and it may only narrow).
177+
_Amended 2026-10-23 (ruling of record 6355206139 on #25233, letter B):
178+
`EXTERNAL` is the one exception to "only from capability grants". It
179+
derives from the reserved `org_external` position, which the resolver
180+
projects from `sys_member.role = external` (ADR-0095 D3); the resolver
181+
stays the only deriver, and no enforcement site reads the role._
177182
- **I4** — Enforcement and explain read the same carried value; a divergence
178183
is a defect, not a display issue.
179184
- **I5** — Posture selects tier, never side: no rung grants a read or write

0 commit comments

Comments
 (0)