fix: restrict membership management to org publishers#2285
fix: restrict membership management to org publishers#2285vyctorbrzezowski wants to merge 6 commits into
Conversation
|
@vyctorbrzezowski is attempting to deploy a commit to the Amantus Machina Team on Vercel. A member of the Team first needs to authorize it. |
|
Codex review: needs changes before merge. Latest ClawSweeper review: 2026-05-24 03:27 UTC / May 23, 2026, 11:27 PM ET. Workflow note: Future ClawSweeper reviews update this same comment in place. How this review workflow works
Summary Reproducibility: yes. Source inspection shows current main and the PR head can grant skill version file reads from any getMemberRoleInternal result, while that internal query returns raw publisherMembers roles without checking whether the publisher is a linked personal publisher. PR rating Rank-up moves:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. Real behavior proof Risk before merge
Maintainer options:
Copy recommended automerge instructionNext step before merge Security Review findings
Review detailsBest possible solution: Route every owner-scope access path, including skill version file actions, through linked-user-only personal publisher logic and org membership logic, then merge only after maintainers accept the compatibility tradeoff. Do we have a high-confidence way to reproduce the issue? Yes. Source inspection shows current main and the PR head can grant skill version file reads from any getMemberRoleInternal result, while that internal query returns raw publisherMembers roles without checking whether the publisher is a linked personal publisher. Is this the best way to solve the issue? No, not yet. The linkedUserId-centered approach is the right maintainable direction, but it needs to cover action-side skill version file access before merge. Label justifications:
Full review comments:
Overall correctness: patch is incorrect Security concerns:
Acceptance criteria:
What I checked:
Likely related people:
Codex review notes: model gpt-5.5, reasoning high; reviewed against 963b0a571943. |
7d3ffa9 to
33ffa7f
Compare
33ffa7f to
5f97962
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
5f97962 to
8f08815
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
ClawSweeper PR egg 🔥 Warming up: real-behavior proof passed; findings, security review, or rank-up moves are still in progress. Hatch commandComment Hatchability rules:
What is this egg doing here?
|
16ece38 to
6fd4de1
Compare
Summary
Makes personal publishers behave like account aliases, not shared teams. Old membership rows on someone else's personal publisher no longer let another user publish, transfer, or manage their resources.
What changed
linkedUserId === actorUserId.Public behavior
Publishing, transferring, or managing through a personal publisher now requires that the personal publisher is linked to the acting user. A stale membership row cannot authorize a different user's personal publisher.
Org publisher membership remains valid for org-owned publishing.
Behavior proof
Live Convex runtime proof for the remaining stale personal-membership paths ClawSweeper called out:
This proof creates a stale personal-publisher membership for a non-linked actor and verifies that it cannot authorize direct skill transfer, package appeal submission, or owner-only package moderation status access.
Focused regression suite:
Validation
Current GitHub CI for this head also has
unit,packages,types-build,e2e-http,playwright-smoke, andplaywright-local-authpassing. Thestaticjob currently stops atbun auditon the existing transitivewsadvisoryGHSA-58qx-3vcg-4xpx.