Skip to content

feat(serve): thread api.enforceProjectMembership to the dispatcher (ADR-0024 D9)#2329

Merged
os-zhuang merged 1 commit into
mainfrom
feat/thread-enforce-membership
Jun 25, 2026
Merged

feat(serve): thread api.enforceProjectMembership to the dispatcher (ADR-0024 D9)#2329
os-zhuang merged 1 commit into
mainfrom
feat/thread-enforce-membership

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Threads api.enforceProjectMembership from the served app's config through to createDispatcherPlugin (it was sourcing enableProjectScoping/projectResolution but silently dropping membership).

Why: enforceProjectMembership defaults to scoping.enableProjectScoping — so the sys_environment_member 403 gate was forced ON for any project-scoped host with no way to opt out. ADR-0024 D9 makes env-native auth the membership (a valid env session = a member; cross-env is already protected by per-env sessions), so a host needs to disable the redundant cloud-mirror gate. This adds that seam.

Backward-compatible: apiConfig.enforceProjectMembership is undefined for every app that doesn't set it → the dispatcher keeps its existing default (= enableProjectScoping). Only an app that explicitly sets api.enforceProjectMembership: false changes behavior.

Consumed by cloud objectos-stack (forthcoming PR) to retire the sys_environment_member access gate.

🤖 Generated with Claude Code

…DR-0024 D9)

serve.ts built the dispatcher with `scoping` but never threaded
`enforceProjectMembership`, so per-project membership (the `sys_environment_member`
403 gate) was always forced ON whenever project-scoping was on. Read it from the
app's `api` config and pass it through, so a host can opt OUT — env-native auth
IS the membership (ADR-0024 D9) — via `api.enforceProjectMembership: false`.
Undefined keeps the existing default (= `enableProjectScoping`): backward-compatible.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 25, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jun 25, 2026 3:49pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/cli.

15 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/concepts/cloud-artifact-api.mdx (via packages/cli)
  • content/docs/concepts/implementation-status.mdx (via @objectstack/cli)
  • content/docs/concepts/packages.mdx (via @objectstack/cli)
  • content/docs/getting-started/cli.mdx (via @objectstack/cli)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/cli)
  • content/docs/guides/authentication.mdx (via @objectstack/cli)
  • content/docs/guides/client-sdk.mdx (via @objectstack/cli)
  • content/docs/guides/hook-bodies.mdx (via packages/cli)
  • content/docs/guides/packages.mdx (via @objectstack/cli)
  • content/docs/guides/project-scoping.mdx (via @objectstack/cli)
  • content/docs/guides/runtime-services/data-service.mdx (via packages/cli)
  • content/docs/guides/runtime-services/index.mdx (via packages/cli)
  • content/docs/guides/skills.mdx (via packages/cli)
  • content/docs/protocol/objectos/plugin-spec.mdx (via @objectstack/cli)
  • content/docs/protocol/objectos/realtime-protocol.mdx (via @objectstack/cli)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-zhuang
os-zhuang merged commit a6f0b7f into main Jun 25, 2026
16 checks passed
@os-zhuang
os-zhuang deleted the feat/thread-enforce-membership branch June 25, 2026 15:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant