Skip to content

Commit b1e9de6

Browse files
committed
docs(adr): ADR-0131 D6 charts sharing_rule under regime C (ruling A supersedes B′); D7 ledger note names sharing rules as a fifth reader
The D6 note is rewritten from regime O to regime C per ruling of record 6258883445, which supersedes 6257388265: declared rules read-only and clonable, switch-off through a sys_metadata_activation row of type sharing_rule (deployment-level, operator-gated under a wall), customising by clone plus base-off, same-name shadowing retired, and the ceremony migrating customised copies. The D7 activation-ledger reading note gains sharing rules as a ruled, not-yet-shipped fifth reader. The three D7 lines for the identity-mail/secret/settings-audit ruling are unchanged. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TvNEqnkE9Lfbp3N2zvaqHQ
1 parent 2261458 commit b1e9de6

1 file changed

Lines changed: 16 additions & 14 deletions

File tree

‎docs/adr/0131-total-organization-ownership-no-null-organization-id.md‎

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -431,18 +431,19 @@ spelling moves: the copy-once import, full editability, no upgrade channel and t
431431
naming the posture: a template import would hand every tenant an editable shared schema. Under `single`
432432
it is how a customer takes an app and makes it theirs wholesale — Salesforce's unmanaged package.
433433

434-
> **Note (2026-10-19, ruling of record `6257388265` on #24378, letter B′) — `sharing_rule` is charted
435-
> under regime O, guarded.** A stored `sys_sharing_rule` row carrying a declared rule's name, in its
436-
> scope, replaces the declared rule **whole**; `active: false` on that row is the switch-off; D10's
437-
> ownership ceremony deletes only uncustomised mirrors. The row is made by editing the declared rule's
438-
> projected row in Setup. A sharing rule an organization writes stays its row (D3), so under a wall an
439-
> organization's overlay is its own and under `single` the one overlay answers everywhere (ruling item 4).
440-
> Two rules guard the regime. **The guard:** a write that creates a `sys_sharing_rule` row, or renames
441-
> one, to a declared rule's name in that scope, and is not an edit of the projected row, is refused at
442-
> the write door with the vendor rule named. **The immediate reconcile:** a same-name write (the
443-
> customised copy's creation, or its `active` change) reconciles the shadowed declaration's name-keyed
444-
> grants at once, not at the next boot's `sweepOrphanedRuleGrants`. Both are built by #24421. ⛔ Sharing
445-
> rules get no activation-ledger type, and same-name rows are not refused as a class.
434+
> **Note (2026-10-19, ruling of record `6258883445` on #24378, letter A, which supersedes ruling
435+
> `6257388265`, letter B′) — `sharing_rule` is charted under regime C.** A managed declared sharing rule
436+
> is read-only and clonable. **Switching it off** is the `active` bit of a `sys_metadata_activation` row
437+
> of type `sharing_rule`. Like the bit for flows and actions, it is deployment-level and operator-gated
438+
> under a wall. There is no per-organization switch-off, and organizations still author their own rules
439+
> (D3). **Customising** is a clone under a new name, plus the base switched off. **Same-name shadowing is
440+
> retired.** A `sys_sharing_rule` row that takes a declared rule's name in its scope is refused, whether
441+
> it is new or renamed. A declaration that arrives over an authored row, as in a package upgrade, is
442+
> reported loudly at load and never becomes an overlay. **D10's ownership ceremony** migrates each
443+
> existing customised copy to a clone plus the base switched off, and deletes the uncustomised mirrors
444+
> (fate 2). The promise that a customised copy keeps answering and a switch-off survives redeploys is
445+
> kept by that migration and the ledger, not by shadowing. This is a ruled decision that #24421 builds;
446+
> it has not shipped.
446447
447448
Creating one's own item — a new permission set, position, view, flow — is environment authoring
448449
(Studio, or Setup acting as a metadata editor under `single`), gated as D2/D3 describe and refused to
@@ -520,8 +521,9 @@ configuration; a tenant-less object holds only values an operator must change wi
520521
> retirement list, and its reserved organization column was dropped before 17.3. It is a member of this
521522
> paragraph's family. The code follows this reading: the object is declared with
522523
> `systemFields: { tenant: false }` (`packages/platform-objects/src/system/sys-metadata-activation.object.ts`),
523-
> and flows, actions, positions and permission sets read it. The clause stays as written, and this note
524-
> governs how it is read.
524+
> and flows, actions, positions and permission sets read it. Sharing rules join them as a fifth reader by
525+
> ruling `6258883445` on #24378, which is ruled and not yet shipped (the D6 note above). The clause stays
526+
> as written, and this note governs how it is read.
525527
526528
⚠️ **Membership in this list is decided by the writer, not by the object's name.** The read-side ledger
527529
grouped `sys_http_delivery`, `sys_inbox_message`, `sys_notification*` and `sys_email` as "plumbing"; the

0 commit comments

Comments
 (0)