Context
Author-owned follow-up from the cross-family review of PR #15601 (github-pat auth mode, merged) — Vega's APPROVE+FOLLOW-UP verdict (PRR_kwDODSospM8AAAABGjxJiQ): the code is merge-safe (defaults are secure), but two security-posture documentation gaps remain. The gaps only bite because GitHub is a public identity surface — unlike the private-tenant deployment gitlab-pat was built for, any GitHub user can mint a valid PAT.
Live latest-open sweep: checked latest 20 open issues at 2026-07-20T13:20Z — no equivalent. A2A in-flight sweep: no competing claim.
The Problem
- Silent posture requirement: with an empty
allowedUsers (the default), a github-pat deployment authenticates any github.com user — read-tier MCP access plus identity-less add_memory (graph-gated tools still fail-closed since github-pat is not in the default autoProvisionIdentitySources). The docs do not flag that a github-pat deployment SHOULD set allowedUsers unless it deliberately serves the public.
- Unrecorded exclusion rationale:
autoProvisionIdentitySources defaults to ['gitlab-pat'] — correctly excluding github-pat — but the leaf carries no comment recording WHY. A future maintainer could add 'github-pat' and open AgentIdentity auto-provisioning to any valid GitHub PAT holder, without the trade-off being visible at the decision point.
The Architectural Reality
ai/configBase.mjs auth section — the autoProvisionIdentitySources leaf (NEO_AUTH_AUTO_PROVISION_IDENTITY_SOURCES, default ['gitlab-pat']) and the shared allowedUsers leaf.
learn/agentos/cloud-deployment/Security.md — the GitHub bearer mode bullet added by PR #15601.
- The auth≠admission relationship:
#14388 (auth success without a bound AgentIdentity leaves graph-gated tools failing) — the reason the default exclusion is safe, and the thing to link from the leaf comment.
The Fix
- Security.md — extend the GitHub bearer mode bullet: a
github-pat deployment SHOULD set NEO_AUTH_ALLOWED_USERS (or front the surface with an equivalently scoped allowlist/GHES boundary); with the default empty allowlist, ANY GitHub user authenticates at read tier with identity-less writes.
- configBase.mjs — extend the
autoProvisionIdentitySources leaf comment: record the deliberate exclusion — github-pat is a public identity surface, so auto-provisioning is opt-in only for deployments that scope their caller set (allowlist, GHES, or private network); link the #14388 auth≠admission relationship.
Decision Record impact
none — documentation + comment-only; no behavior change.
Acceptance Criteria
Out of Scope
- Fetch-timeout hardening on the PAT verifiers (tracked separately).
- Any change to the default
autoProvisionIdentitySources value or the allowlist mechanics.
Related
- Parent:
#15598 (github-pat auth mode) / PR #15601
- Review verdict: Vega's APPROVE+FOLLOW-UP on PR
#15601
#14388 (auto-provision AgentIdentity — the auth≠admission precedent)
Origin Session ID: 8d4ce1c3-0bf2-4bb0-bad9-e49836248afe
Retrieval Hint: "github-pat security posture allowedUsers public identity surface auto-provision exclusion"
Context
Author-owned follow-up from the cross-family review of PR
#15601(github-pat auth mode, merged) — Vega's APPROVE+FOLLOW-UP verdict (PRR_kwDODSospM8AAAABGjxJiQ): the code is merge-safe (defaults are secure), but two security-posture documentation gaps remain. The gaps only bite because GitHub is a public identity surface — unlike the private-tenant deploymentgitlab-patwas built for, any GitHub user can mint a valid PAT.Live latest-open sweep: checked latest 20 open issues at 2026-07-20T13:20Z — no equivalent. A2A in-flight sweep: no competing claim.
The Problem
allowedUsers(the default), agithub-patdeployment authenticates any github.com user — read-tier MCP access plus identity-lessadd_memory(graph-gated tools still fail-closed sincegithub-patis not in the defaultautoProvisionIdentitySources). The docs do not flag that a github-pat deployment SHOULD setallowedUsersunless it deliberately serves the public.autoProvisionIdentitySourcesdefaults to['gitlab-pat']— correctly excludinggithub-pat— but the leaf carries no comment recording WHY. A future maintainer could add'github-pat'and open AgentIdentity auto-provisioning to any valid GitHub PAT holder, without the trade-off being visible at the decision point.The Architectural Reality
ai/configBase.mjsauth section — theautoProvisionIdentitySourcesleaf (NEO_AUTH_AUTO_PROVISION_IDENTITY_SOURCES, default['gitlab-pat']) and the sharedallowedUsersleaf.learn/agentos/cloud-deployment/Security.md— the GitHub bearer mode bullet added by PR#15601.#14388(auth success without a bound AgentIdentity leaves graph-gated tools failing) — the reason the default exclusion is safe, and the thing to link from the leaf comment.The Fix
github-patdeployment SHOULD setNEO_AUTH_ALLOWED_USERS(or front the surface with an equivalently scoped allowlist/GHES boundary); with the default empty allowlist, ANY GitHub user authenticates at read tier with identity-less writes.autoProvisionIdentitySourcesleaf comment: record the deliberate exclusion —github-patis a public identity surface, so auto-provisioning is opt-in only for deployments that scope their caller set (allowlist, GHES, or private network); link the#14388auth≠admission relationship.Decision Record impact
none— documentation + comment-only; no behavior change.Acceptance Criteria
autoProvisionIdentitySourcesleaf comment records the exclusion WHY + the#14388relationshipOut of Scope
autoProvisionIdentitySourcesvalue or the allowlist mechanics.Related
#15598(github-pat auth mode) / PR#15601#15601#14388(auto-provision AgentIdentity — the auth≠admission precedent)Origin Session ID: 8d4ce1c3-0bf2-4bb0-bad9-e49836248afe
Retrieval Hint: "github-pat security posture allowedUsers public identity surface auto-provision exclusion"