Repository navigation
docs(adr): the EXTERNAL rung admits explicit grants — ADR-0095, 0099, 0090 and 0135 record ruling 6355206139 B - #25557
Conversation
…, letter B) The Tier H text for #25233. ADR-0095 D2 and D3, ADR-0099's EXTERNAL column, D3 and I7, and ADR-0090 D11 now say what #25541 enforces: an external is a member who holds the `external` organization role, and it reaches rows through shares and share links, sharing rules, and the grants it holds with their RLS, never the OWD baseline. ADR-0090 D11's external-audience matrix column is retired, and ADR-0135 gains a dated note on the third population. The core floor's docblock stops listing controlled_by_parent among the models it closes. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AZbN6PU5Xz4WTi6NKmyKhN
📓 Docs Drift Check
What this run could not see
Coarse fallback — 28 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
… 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
维护者速读
席位核对 · ACCEPT(待人批) ·
|
Requested by Tesla · project thread
Refs #25233 (closed by #25541). This is the Tier H ADR text for the ruling of record 6355206139, letter B, item 2. It stays a draft for the maintainer to merge (
docs/adr/**is a governed surface).Clause-②: no
Metadata-protocol: none
What this does
The ADRs now say what #25515 and #25541 enforce. An EXTERNAL principal is a member of the organization's member pool who holds the
externalorganization role. It reaches rows through explicit grants only: shares and share links, sharing rules, and the position and permission-set grants it holds, with their RLS evaluated. It never reaches the OWD baseline.controlled_by_parentexemption, and the named limit: an ownerless object with a public effective model is under no OWD for any principal. The original wording is quoted.org_externalposition, which the resolver projects fromsys_member.role = external. As withrole='admin', the role is the source of a position, and enforcement reads the posture.guest→EXTERNALdebugger mapping. I3 gains a dated note: EXTERNAL is the one exception to "only from capability grants", derived from the reservedorg_externalposition by the resolver alone. I7 reads through the floor.externalSharingModeland audience is a property of the principal.externalrole, marked by role onsys_memberand not bysys_user.source. D4's markings are unchanged, and cloud ADR-0024's text is not amended.One source line rides along:
packages/core/src/security/external-owd-floor.ts's docblock no longer listscontrolled_by_parentamong the models the floor closes (the seat's carry note on #25541). It takes apatchchangeset on@objectstack/core, comment only.Acceptance notes
mainat 45f9962:owdForAudienceandowdForPrincipal(the cbp exemption),holdsExternalIdentityandderivePosture,external_default's owner-only write floor, and the authz-matrix EXTERNAL column.Notes for review:
Verification: all 69 derived gates were run and reconciled with
dispatch-gates --ran(0 not measured), includingcheck-adr-links,check:adr-anchors,check-adr-symbol-anchorsandcheck:doc-authoring. The diff is 6 files. The I3 note (f653505) re-derives the same 69, and the ADR, citation and doc-authoring gates re-pass on it.🤖 Generated with Claude Code
https://claude.ai/code/session_01AZbN6PU5Xz4WTi6NKmyKhN