From e6918d08a416c35b4c7ffa837db7d79bf20cacfa Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 16 Oct 2026 17:36:29 +0000 Subject: [PATCH 1/2] docs(permissions): name where a high-privilege anchor binding is refused; spec patch changeset for the anchor docblock The authorization page said the everyone/guest anchor bindings reject high-privilege sets "at the data layer for every caller". That gate retired with sys_position_permission_set. The sentence now names the measured refusal points: the confirm door (403), every derivation of the everyone definition, and the author-time rule on the CLI and the runtime publish gate (422); no door binds a set to guest yet. Adds the '@objectstack/spec' patch changeset the anchor docblock on EVERYONE_POSITION / GUEST_POSITION owed: the text ships in src/**/*.zod.ts and in dist/*.d.ts. Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude --- .changeset/23887-anchor-docblock-guest-no-door.md | 13 +++++++++++++ content/docs/permissions/authorization.mdx | 14 +++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 .changeset/23887-anchor-docblock-guest-no-door.md diff --git a/.changeset/23887-anchor-docblock-guest-no-door.md b/.changeset/23887-anchor-docblock-guest-no-door.md new file mode 100644 index 00000000000..a0b5f77d276 --- /dev/null +++ b/.changeset/23887-anchor-docblock-guest-no-door.md @@ -0,0 +1,13 @@ +--- +'@objectstack/spec': patch +--- + +Clause-②: no + +The docblock on `EVERYONE_POSITION` and `GUEST_POSITION` no longer says that packages suggest +bindings to both audience anchors. It now reads that packages suggest bindings to `everyone` at +install time and the admin confirms each one, never auto-bound, and that no door binds a +permission set to `guest` until ADR-0138 D3 item 5's bind door is built, an act of the +environment's administrator and never of a package. The docblock ships in the package's +`src/**/*.zod.ts` files and in the JSDoc of `dist/*.d.ts`, so it is the hover text an author or an +AI reads on the two constants. No key, schema, export or accepted value changes. diff --git a/content/docs/permissions/authorization.mdx b/content/docs/permissions/authorization.mdx index c0ca0d24f4b..cab5bd4a0f5 100644 --- a/content/docs/permissions/authorization.mdx +++ b/content/docs/permissions/authorization.mdx @@ -65,9 +65,17 @@ session from protected resources while keeping remediation reachable), and since ADR-0090 D12 every RBAC-table write is additionally checked by the **[delegated-admin gate](/docs/permissions/delegated-administration)**: tenant admins pass, delegates are confined to their `adminScope` (BU subtree + assignable-set allowlist, no self-escalation, -strict containment for scope grants), and everyone else is denied. The -`everyone`/`guest` audience-anchor bindings reject high-privilege sets at the -data layer for every caller. +strict containment for scope grants), and everyone else is denied. No caller +writes either audience anchor's definition (`everyone`, `guest`), and a +high-privilege set is refused at each point where one can reach `everyone`: +accepting a package's `isDefault` suggestion answers `403 PERMISSION_DENIED`; +every derivation of the anchor's definition (boot, accept, revoke, uninstall, +package publish) leaves out a baseline, accepted or host-declared set that +carries a forbidden bit and logs it; and the author-time rule +`security-anchor-high-privilege` rejects such an `isDefault` set in +`os validate`, `os build` and `os lint` and at the metadata door's publish +(`422`). No door binds a set to `guest` until ADR-0138 D3 item 5's bind door is +built ([Permission sets](/docs/permissions/permission-sets#package-suggestion--isdefault-adr-0090-d5)). ### The MCP execution surface (ADR-0096 / ADR-0101) From 240caf9b612b08e6286caf99462c07e69d78fa2e Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 16 Oct 2026 17:39:00 +0000 Subject: [PATCH 2/2] docs(permissions): say the anchor rule reports an error on the CLI and the metadata door refuses the publish Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude --- content/docs/permissions/authorization.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/docs/permissions/authorization.mdx b/content/docs/permissions/authorization.mdx index cab5bd4a0f5..921324282bf 100644 --- a/content/docs/permissions/authorization.mdx +++ b/content/docs/permissions/authorization.mdx @@ -72,10 +72,10 @@ accepting a package's `isDefault` suggestion answers `403 PERMISSION_DENIED`; every derivation of the anchor's definition (boot, accept, revoke, uninstall, package publish) leaves out a baseline, accepted or host-declared set that carries a forbidden bit and logs it; and the author-time rule -`security-anchor-high-privilege` rejects such an `isDefault` set in -`os validate`, `os build` and `os lint` and at the metadata door's publish -(`422`). No door binds a set to `guest` until ADR-0138 D3 item 5's bind door is -built ([Permission sets](/docs/permissions/permission-sets#package-suggestion--isdefault-adr-0090-d5)). +`security-anchor-high-privilege` reports such an `isDefault` set as an error in +`os validate`, `os build` and `os lint`, and the metadata door refuses to +publish it (`422`). No door binds a set to `guest` until ADR-0138 D3 item 5's +bind door is built ([Permission sets](/docs/permissions/permission-sets#package-suggestion--isdefault-adr-0090-d5)). ### The MCP execution surface (ADR-0096 / ADR-0101)