Skip to content

Commit 033fc75

Browse files
committed
docs(plugin-security): two docblock sentences describe the master-edit gate as it now answers every write shape
Comment-only: the RlsFilterOptions coverage-vouch bullet and step 2.7's superset parenthetical no longer say the gate returns early when no single row is addressed. No code token changes. Claude-Session: https://claude.ai/code/session_011TdZ8GjixNZFLz1xJD9zzK Co-authored-by: Claude <noreply@anthropic.com>
1 parent c6f26ea commit 033fc75

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

‎packages/plugins/plugin-security/src/security-plugin.ts‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -485,8 +485,11 @@ interface RlsFilterOptions {
485485
* the walk covers that master's write is stated once, at that call site's
486486
* `masterGateCoversThisWrite` bullet — not restated here;
487487
* • the BULK write path does NOT, and must not: with no single id,
488-
* `assertControlledByParentWrite` returns early and nothing replaces the
489-
* floor. Reading the posture alone here would have widened bulk writes on
488+
* `assertControlledByParentWrite` judges every master the write reaches
489+
* and refuses on the first the caller may not edit, but that is a
490+
* verdict, not a row scope, so the floor stays — dropping it here would
491+
* widen the rows a member writes, a separate decision. Reading the
492+
* posture alone here would have widened bulk writes on
490493
* every `controlled_by_parent` detail to "any row under a READABLE
491494
* master", which no gate had authorized;
492495
* • `getReadFilter` and `checkAuthoredRowWrite` do not, and need not: the
@@ -3071,7 +3074,8 @@ export class SecurityPlugin implements Plugin {
30713074
// master gate (step 2.8, immediately below) run on the same middleware
30723075
// pass, and 2.8's condition is a strict SUPERSET of this one: the same
30733076
// `permissionSets.length > 0 && userId && this.ql` triple, the same
3074-
// single target id (`extractSingleId`, or it returns early), and one
3077+
// single target id (`extractSingleId`; with none, 2.8 judges every
3078+
// master the write reaches instead), and one
30753079
// additional operation (`insert`, which has no pre-image and so no
30763080
// floor to drop). Reaching this line therefore PROVES the master gate
30773081
// will answer the same write — the maintainer's precondition, held

0 commit comments

Comments
 (0)