Skip to content

feat(den-api): members can create plugins and cloud skills (skill-sharing posture slice) - #3411

Merged
benjaminshafii merged 1 commit into
devfrom
feat/member-plugin-create
Aug 1, 2026
Merged

feat(den-api): members can create plugins and cloud skills (skill-sharing posture slice)#3411
benjaminshafii merged 1 commit into
devfrom
feat/member-plugin-create

Conversation

@benjaminshafii

Copy link
Copy Markdown
Member

What

Members (not just admins/owners) can now create plugins and cloud skills — the create-skill chat flow works for everyone in the org. Slice of the Grant-Native Skill Sharing program (spec on #3410, prds/skill-sharing/grant-native-skill-sharing.md); pairs with #3410's index fix, which makes a created skill immediately usable by its creator.

hasPluginArchCapability was a stub returning isOrgAdmin for every capability (access.ts:101-103). Now:

Capability Member Admin/Owner
plugin.create, config_object.create
marketplace.create, connector_account.create, connector_instance.create

Deliberately NOT opened to members (each gated explicitly):

  • Org-wide publishingorgWide: true on bundles and on access grants now requires admin (route + createPluginBundle + createResourceAccessGrant). Without this, member-create would silently ship the share_org posture; that stays a program decision (P4).
  • GitHub plugin import (importGithubPluginMcps) and connector discovery apply (applyGithubConnectorDiscovery) — both also sat behind plugin.create; pinned to admin at the store level so this PR changes exactly two surfaces: POST /v1/plugins and POST /v1/config-objects.

Member/team-scoped grants by a plugin's own manager keep today's semantics. Marketplace publishing already requires marketplace editor (unchanged). OpenAPI audience docs updated for the two endpoints (documentation-only field — verified unused by enforcement/clients).

Tests (commands + results)

cd ee/apps/den-api
bun test test/plugin-system-member-create.test.ts test/plugin-system-access.test.ts \
         test/plugin-system-create-bundle.test.ts test/plugin-system-cross-org-idor.test.ts \
         test/plugin-system-config-object-ownership.test.ts \
         test/github-plugin-import-schema.test.ts test/github-discovery.test.ts
# → 34 pass / 0 fail (138 assertions)
pnpm exec tsc --noEmit   # clean

New suite test/plugin-system-member-create.test.ts (real MySQL): member creates bundle+skill and holds manager; member orgWide bundle → 403 with zero rows written; member publish to uneditable marketplace → rejected, no rows; member manager grants another member ✅ but org-wide ❌; admin org-wide end-to-end ✅; member GitHub import → 403 pre-fetch; member discovery apply → 403.

Per program-owner decision, proof is spec acceptance suites (no fraimz); reproduce with the commands above (MySQL at 127.0.0.1:3306, suite DB via pnpm --filter @openwork-ee/den-db db:push).

@vercel

vercel Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
openwork-app Ready Ready Preview Aug 1, 2026 3:26pm
openwork-den Ready Ready Preview Aug 1, 2026 3:26pm
openwork-den-worker-proxy Ready Ready Preview Aug 1, 2026 3:26pm
openwork-landing Ready Ready Preview, v0 Aug 1, 2026 3:26pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
openwork-diagnostics Skipped Skipped Aug 1, 2026 3:26pm

@benjaminshafii

Copy link
Copy Markdown
Member Author

Eval run (spec lane) on this branch — 2026-08-01T20:31:22Z

pnpm --dir evals run spec        # full pr project
# → 2 files / 4 tests passed (11.8s): egress specs (this branch adds no UI/wire surface;
#   its acceptance proof is the real-MySQL bun suite reported above: 34/34, incl. member-create
#   grants, org-wide 403s with zero rows written, GitHub import + discovery pinned to admin)

@diff-warden diff-warden Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Warden security clearance: clear. No new security issues found in this diff (03673023a5f6280d90874e41d6046acc3beb6608). Automated clearance satisfies the required-review gate only — a human still reviews and merges. Analysis run

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant