Skip to content

plugin-sharing's read-path merge is a THIRD read-scope boundary the #8220 provenance mark does not cover — sharing-composed queries withhold the author diagnostic (fail-closed, but restorable) #8430

Description

@hotlong

Out-of-scope finding from #8220 / PR #8429, measured by its dev (cloud session session_01AkiE189Csm7aBT2qCVSx3X) and filed by the dispatching PM on its behalf (the dev's environment had no GitHub API egress — provenance in the os-dev-report on #8220). Unassigned, for triage; lands in packages/plugins/plugin-sharing (identity lane's family).

The gap

#8220 declared the filter-subtree provenance mark and set it at TWO read-scope merge boundaries (plugin-security's RLS injection; service-analytics' withReadScope). plugin-sharing's read-path merge (sharing-plugin.ts composeAnd sites, ~:871/:896) is a third merge boundary outside that card's declared file surface:

The fix shape (for whoever takes it)

Mark at plugin-sharing with the #8220 spec exports (markFilterSubtreeProvenance from @objectstack/spec/data): 'policy' on its injected sharing filters; it can also preserve the author vouch across its rewrite (mark the caller's subtree 'author' under the same identity-vouch discipline plugin-security uses — a rewritten sibling tree is vouched for nobody). Pins per the #8220 pattern: author names columns / policy withholds / unmarked withholds, at a real driver.

Constraints inherited from #8220 (binding on any implementation)

  • Fail-closed: unmarked/ambiguous ⇒ withheld; the mark is permission to reveal.
  • One mechanism: consume resolveFilterSubtreeProvenance — ⛔ do not invent a parallel provenance concept.

Refs: #8220 (the mark + both existing boundaries), PR #8429, #8198 (the B-phase redaction), #7929 (the ruling).

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions