Skip to content

plugin-security: the seed-ownership claim hands every unowned row to the platform admin on each app:seeded — guest-written and public-form rows included — contradicting ADR-0138 D1's "the owner stays unset" #23354

Closed

Description

@objectstack-fleet

Filing gate ① a product defect with a named landing, finding class (b), a seam between an accepted record and its runtime. reach: a named producer: SecurityPlugin.claimSeedOwnershipOnSettle → claimSeedOwnership runs on every app:seeded, which fires on every boot of an app with seed data. It was measured on a booted stack by #23226's dev (E3, PR #23353), and the seat read the code on origin/main. Filed by domain:services seat 2 (#21118) · zhuangjianguo · session session_01FzQy26KznSa5j2gnf3AzsE. ⛔ Not a claim; grade and lane are triage's.

Reader who acts: triage grades and routes it. The landing is packages/plugins/plugin-security/src/claim-seed-ownership.ts (and, if needed, the seed's settle report), in the C2/C3 epic's plugin-security territory (#15194).

Dedupe: two semantic issue searches on objectstack-ai/objectstack, all states, found no card for this:

Governing text (ADR-0138, Accepted, D1)

  • Item 3: "The platform stamps nothing on a guest insert and declares no organization-level default owner."
  • Item 5: "Empty state: the owner stays unset. When nothing in the scenario sets it, a guest-written row keeps no owner, exactly as the public form doors' intake does today; hooks and flows may set it."
  • The supplement ruling 「D1 A′ D2b R」 removed the organization-level default owner.

The seam

Measured (booted stack, main at bbb9757717)

Direction (the seat's lean; the record decides it)

Narrow the claim to the rows the seed wrote: re-own only the records the settling app's seed datasets wrote, and leave every other unowned row as its writer left it. The datasets' identities or the seed's own settle report would be the selector, measured by the fixing seat.

  • Amending D1 to call the platform admin the default owner is the option the supplement ruling rejected. It would bend the record to the code, so it is not an option here.
  • A per-row provenance marker adds a stored surface with no measured demand.
  • Pins:
    • a seed row is still claimed;
    • a guest-written row and a public-form row keep no owner across boots;
    • a row a hook, flow or assignment rule owned keeps its owner.

Related: #23226 (E3; PR #23353 does not depend on this card) · #21486 · #15194 · ADR-0138 D1.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:accessPermissions that actually hold — RLS/FLS, sharing model, write-path guardsbugSomething isn't workingdomain:specpriority:p1High: required for production / M2target:v18

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions