Record sharing 8/14: inherited objects follow their parent - #25439
Draft
martmull wants to merge 3 commits into
Draft
Record sharing 8/14: inherited objects follow their parent#25439martmull wants to merge 3 commits into
martmull wants to merge 3 commits into
Conversation
Contributor
App docs drift check
|
Add readabilityParentFieldUniversalIdentifiers on objectMetadata (uuid array, set by the standard application and by app manifests) and the INHERITED readability level: a row is readable when one of the parent records it points to is readable, with morph relation siblings expanded automatically. Six standard objects follow their target: attachment, timelineActivity, noteTarget, taskTarget, messageThreadTarget and calendarEventTarget. An INHERITED object that resolves no parent field denies reads instead of falling open.
martmull
force-pushed
the
claude/adversarial-agents-impl-vq7601-pr8
branch
from
September 4, 2026 23:42
e934ade to
fd8cc09
Compare
This was referenced Sep 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Seventh PR of the record-sharing stack in merge order (plan number 8), stacked on #25438 (call recording goes PRIVATE). Inert until a parent object is PRIVATE and
IS_RECORD_SHARING_ENABLEDis on.What changes
objectMetadata.readabilityParentFieldUniversalIdentifiers(uuid array, nullable) names the MANY_TO_ONE relation fields anINHERITEDobject follows. Declared in app manifests asreadabilityParentFieldUniversalIdentifiers, synced by the standard application (compared and stringified), exposed read-only on the metadata API. Fast instance command2-39-instance-command-fast-1788560886501-add-readability-parent-fields-to-object-metadata.INHERITEDalias the repository builds one condition per parent column:(every parent column IS NULL) OR (col IS NOT NULL AND <parent readable>), where an OPEN parent needs nothing, a PRIVATE parent needs a share row on the parent record at the operation's access level (so updating an attachment needs READ_WRITE on its note), an INHERITED parent recurses (depth capped at 3), and a SYSTEM or APPLICATION parent contributes nothing. Declaring one morph relation field expands to every sibling of the same morph (custom objects added as targets included). When every parent is OPEN the condition is omitted entirely.INHERITEDobject that resolves no parent field (unknown identifier, wrong object, not MANY_TO_ONE) is refused likeSYSTEM, instead of silently behaving asOPEN.INHERITEDfrom their target morph: attachment (targetNote), timelineActivity (targetPerson), noteTarget (note), taskTarget (task), messageThreadTarget (messageThread), calendarEventTarget (calendarEvent).Things to know
INHERITEDobjects from the standard-application sync. Existing workspaces keep themOPEN(today's behaviour) until the settings PR ships themake-standard-child-objects-inheritedworkspace command; the flip is harmless to defer since no standard parent is user-private before then.INHERITEDas open: subscriptions, webhooks and workflow triggers on an attachment of a private note still fire. It will be addressed with the timeline guard (PR 7 of the plan), which is the point where a user can make notes private.Tests
inherited-readability-object-records-permissions.integration-spec.ts(8 cases): attachments of a private note hidden from the unshared member and visible to the shared one, morph sibling on an open person still visible, update and delete refused with READ and allowed with READ_WRITE on the note, ordering by the parent relation keeps the gate, all-null parents visible, zero resolved parents refused.Stack