Skip to content

docs(contextual-access): document group-based tool access - #1185

Draft
andrewconnor-arcade wants to merge 4 commits into
mainfrom
andrewconnor/plt-3234-group-access-docs
Draft

docs(contextual-access): document group-based tool access#1185
andrewconnor-arcade wants to merge 4 commits into
mainfrom
andrewconnor/plt-3234-group-access-docs

Conversation

@andrewconnor-arcade

@andrewconnor-arcade andrewconnor-arcade commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Public configuration page for the group_access contextual-access extension, alongside the existing rate limiting page and following its structure.

Draft until the engine work merges. The feature ships as a stack in the monorepo (PLT-3229 through PLT-3234); this page describes behavior that is built and green but not yet on main. Holding it in draft so the docs never describe something a customer cannot use yet.

What it covers

Enforcement at the tool access hook point and why it governs both discovery and execution, tool matcher precedence, the three identity backends and what access each needs, Dashboard and API setup, the staleness model, and fail-closed behavior with the per-rule opt-out.

Two things given deliberate weight

Both fail silently rather than loudly, which is what makes them worth a customer's attention up front:

  • Identity matching. The backend looks a caller up by the identity the request carries, so an Arcade user ID that does not equal the directory login matches nothing, and fail-closed behavior turns that into tools quietly missing rather than an error anyone can act on.
  • SailPoint's API client rights. idn:access-profiles:read and idn:roles:read sound like the right rights and are not sufficient: they authorize reading access profile and role definitions, not which identity holds them. A client granted only those authenticates successfully and then fails every membership lookup. This is the single most likely misconfiguration, so it gets a warning callout rather than a footnote.

The page also states that a tool no rule matches stays visible, so a mistyped matcher governs nothing instead of hiding everything, and recommends gating on the provisioned Okta or Entra group where SailPoint provisions into one, since that is simpler to operate and closer to real time.

Checks

Vale is clean of errors on the new page. The remaining warnings are Microsoft's own field names (application (client) ID, GroupMember.Read.All application permission) and heading-case rules the sibling rate-limiting page also trips; I matched the section's existing conventions rather than diverging from its neighbor. Pre-commit hooks (Vale, _meta.tsx key validation, redirect check, Ultracite) passed.

Refs PLT-3234.


Note

Low Risk
Documentation-only changes; no application or engine code in this diff.

Overview
Adds a Group-Based Tool Access doc under contextual access, wired into the section nav via _meta.tsx and listed in public/llms.txt.

The new page documents the native group_access extension: enforcement at the tool access hook (discovery and execution), tool matcher precedence, Okta / Entra / SailPoint backends and credentials, Dashboard and plugins API setup, cache staleness, and fail-closed behavior with per-rule allow_on_unavailable. It highlights operational pitfalls—Arcade user ID must match directory login, Entra object IDs for sensitive rules, SailPoint API scopes that look correct but are insufficient, and that unmatched tools stay visible.

Reviewed by Cursor Bugbot for commit f1e4853. Bugbot is set up for automated code reviews on this repo. Configure here.

Adds the public configuration page for the group_access extension, alongside
the existing rate-limiting page: how visibility gating is enforced, tool
matcher precedence, the three identity backends, Dashboard and API setup, the
staleness model, and fail-closed behavior.

Two things get more space than their size suggests, because both fail silently
rather than loudly:

- identity matching. The backend looks a caller up by the identity the request
  carries, so an Arcade user ID that does not equal the directory login
  matches nothing, and fail-closed turns that into tools quietly missing.
- SailPoint's API client rights. `idn:access-profiles:read` and
  `idn:roles:read` sound correct and are not sufficient; they authorize
  reading definitions rather than assignments, so a client with only those
  authenticates and then fails every lookup.

Also records that a tool no rule matches stays visible, so a mistyped matcher
governs nothing instead of hiding everything.

Refs PLT-3234.

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

vercel Bot commented Sep 8, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated
docs Ready Ready Preview Sep 8, 2026 7:52pm UTC

Request Review

The page said a required group is a group name for both Okta and Entra ID.
That is no longer accurate for Entra: a rule may carry the group's object ID,
and a display name is honoured only for a security group that is not a
Microsoft 365 group.

The reason is worth an operator's attention rather than a footnote. Entra does
not require display names to be unique and many tenants let ordinary members
create groups, so a display-name rule can be satisfied by someone who creates
a group with that name and joins it. Restricting the match to ordinary
security groups removes the surface most members can add to but is not a
guarantee, so the page recommends the object ID for anything sensitive and
says where to copy it from.

Also notes that this does not apply to Okta or SailPoint, where creating a
group, access profile, or role is an administrative action.

Refs PLT-3234.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The page said rules match access profile and role names. That is right for a
role and wrong for an access profile, and wrong in a way that would send an
operator to configure something that cannot work.

SailPoint's access-items response documents `displayName` as the role display
name on a role, but as the identity's display name on an access profile, and
it carries no access profile name at all. There is nothing for a profile-name
rule to match, so the rule carries the profile's ID. The page now states which
value each rule shape matches, says where to copy the ID from, and explains
why we do not resolve names for you: it would need `idn:access-profiles:read`,
which the required-rights section deliberately excludes.

Refs PLT-3234.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@andrewconnor-arcade
andrewconnor-arcade marked this pull request as ready for review September 8, 2026 20:00
@andrewconnor-arcade
andrewconnor-arcade marked this pull request as draft September 8, 2026 20:01
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