Repository navigation
Conversation
Move the budgets API, pricing catalog, spend monitoring, console budget flow, and audit shipper sections into partials so a second gateway section can reuse them. The budgets endpoints are served by Enterprise Manager, so the examples use an Enterprise Manager placeholder. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Alejandro Ponce <aponcedeleonch@stacklok.com>
Add a self-contained section for AI Gateway v2 that mirrors the AI Gateway page set: providers, routing and model access, budgets, screening, audit logs, telemetry, an endpoints reference, and a migration guide. Add a platform setup page and wire the section into the navbar, sidebars, platform overview, and visual tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Alejandro Ponce <aponcedeleonch@stacklok.com>
Make status codes, egress rules, value path conventions, and the migration mapping agree across the AI Gateway v2 pages and the setup page, and document where scan decisions land in audit records. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Alejandro Ponce <aponcedeleonch@stacklok.com>
The shared partials carried over errors from the v1 pages. Pricing writes go through per-entry PUT with If-Match, budget subjects are directory UUIDs, and the Fluent Bit and Promtail filters dropped every audit record. Also cover service account budgets and bulk import precedence, which exist on platform main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add the cluster OIDC issuer and groupsResolutionIssuer to setup, document disconnect through the API since the console hides it for v2-only installs, and correct migration mappings, error tables, and failure classes against source. Also apply repo style conventions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Snapshot capture also persists bodies, ready pods don't prove a working budgets or provider setup, and removing a provider's Secret must wait for the rollout so old pods keep their credentials. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Capture stores log-only matches and fail-open requests unredacted, so turning on scanning alone doesn't protect captured bodies. Name the settings that do. Most country-specific Presidio recognizers ship disabled in the bundled registry, so listing IN_AADHAAR or AU_TFN fails the adapter rollout rather than enabling detection. Drop service account caller content (budgets, 403 cause, and the workloadIssuers migration row) until workload callers are documented. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Trim operational detail the v1 pages don't carry: reason-code, span, metric, and error tables, troubleshooting entries without a v1 counterpart, and repeated rollout explanations, which now live once in "How configuration changes apply". Keep sections for v2-only features. Fill v1 gaps where v2 behaves the same, verified against platform main: NIST audit fields, the Kubernetes API audit log pointer, Vertex region and credential notes, the Connector Gateway link, the directory namespace note, content screening posture, and the private CA note. Restore the v1 organization default sentence dropped in 5c2a0d7, and fix the budgets probe check, since a first-try success logs nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Document the new implementation as the AI Gateway at the unqualified /ai-gateway URLs and move the operator-based implementation under /ai-gateway/legacy, with one navbar entry and one sidebar. Reader-facing prose no longer says "v2"; literal chart and value names keep it. Budgets get one shared home (budgets-and-pricing, manage-budgets), and each gateway gets a budget-enforcement page for its own connection and verification steps. The legacy setup page moves to platform/enterprise-platform/legacy/configure-ai-gateway. Every legacy page carries a pointer to its current counterpart and to a new "Identify your deployment" section, and current task pages point back to their legacy counterparts. The retired management API URL redirects to its legacy location. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A samplingRate of 0 keeps every root span, and a sampled inbound traceparent is always kept, so the rate is not a fixed fraction of traffic. The migration guide also lacked a mapping for the legacy directoryGrpcEndpoint group label lookup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The gateway dials TLS by default and trusts only the system store, but the directory listener it calls is cleartext on 9091, so the examples without insecure: true failed every directory call and refused all traffic. Match the dev and staging setup: port 9091, insecure: true, and a projected token, which the gateway still sends. Also scope the virtual API key management API note to the legacy gateway, which is the only one that deploys it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Title the operator chart references as legacy and the gateway chart as the AI Gateway, in the hand-written Helm index, the sidebar, and the upstream-projects config that sets the generated titles at the next release sync. The legacy setup page now names clusterOidcIssuer alongside the allowlist step, since the Enterprise Manager verifies the legacy gateway's ServiceAccount tokens against it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cover every scanning failure setting the chart exposes, including the hook failure policy and the extraction and mutation failure actions, with the status codes clients see. Add the global placeholder and shadow mode, and a minimal KEDA setup that scales Presidio on the adapter's in-flight metric. Add migration notes learned from running both gateways in staging: shared tokens and caches, model access, overlapping Presidio metrics, per-provider Secrets, and Enterprise Manager allowlist overrides. Describe how the gateway validates JWTs and virtual API keys. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The budget enforcement page repeated the bring-up steps and the budgets page. Move its probe check and CA bundle note into Configure the AI Gateway, and its catalog mapping and 402 details into Budgets and pricing. The page itself was removed in the previous commit. Inline the single-use budget partials, also removed in the previous commit, back into their pages. Only the audit shippers partial is shared, so it stays. Remove conversation capture, which is an unreleased beta feature. Document how to authenticate to the Enterprise Manager API and point the budget examples' placeholders at it. Add the scanning hook's failure policy to the screening posture section. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fix the doubled URL scheme, audit field and telemetry gaps, route timeout claim, and budget duplication. Drop cross-section sidebar entries. Add a model access guide, pricing and protection checks, and overview starting points. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Verified against the dev cluster and the platform chart and sprout source. Covers directory provisioning for token callers, workload issuers, model access defaults, client API changes from inputSchema, token metric and claim label mapping, missing CRD fields, and corrects the screening comparison. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove claims that the directory or budgets behave differently between the AI Gateway and the legacy gateway, drop the stray user-group sentence from the migration guide, and move the overview's test request after budgets and model access. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bedrock Guardrails can't screen /v1/responses on either gateway, since both run the same adapter. Drop it from the migration guide's behavior differences and add the caveat to the legacy screening page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add a service accounts guide for administrators and a page on calling the AI Gateway from Kubernetes workloads, covering stacklok/ stacklok-enterprise-platform#4934. Add the cluster prerequisites to Configure the AI Gateway, and cover service accounts in the budgets, model access, audit log, groups, virtual key, and directory pages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Describe service accounts reaching connectors through their groups, limited to None, Bearer token, and Header injection authentication, and the Access tab warning for connectors that can't serve them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Match the console label the trusted issuers table already uses for the issuer of the cluster Stacklok Enterprise runs in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Move the model access and budget rules into the wizard step where the reader decides them, fold activation into account creation, link to the canonical charge order instead of repeating it, and rephrase negative statements as positive ones. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The console starts the in-cluster issuer with an empty Issuer URL, so the reader enters the issuer the cluster publishes instead of checking a prefilled value. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mention service accounts in the gateway intros and the AI Gateway authentication reference, link both handle-errors sections, and align the Connector Gateway 401 wording with the AI Gateway page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@claude please review this PR as a subject matter expert and technical writer, following Focus on accuracy, clarity, information architecture (placement, duplication, inbound links to the two new Kubernetes workloads pages), and compliance with Already known, so don't re-raise:
Post one body-level review comment with primary and secondary issues. Don't push commits. |
|
Claude finished @peppescg's task in 2m 23s —— View job Review: Document service accountsVerdict: needs a few changes, then it's ready. The three new pages are tightly written, follow Diataxis, and end with Next steps, Related information, and Troubleshooting in the right order. The Kubernetes workloads pages are linked from more than the sidebar. The Copilot fixes in e203b7f hold up: suspend-first revocation, the pod-creation caveat on pinned bindings, I skipped the 60-minute lifetime and the Primary issues1. 2. Trusted issuer guidance is split across two audiences, and the security reason is on the wrong page
Ask: Keep the full guidance in one place: the This cluster bullet in 3. JWKS key rotation is on the cluster admin page but done in the console 4. Revocation: the token-lifetime paragraph can read as if suspending doesn't take effect right away Secondary issues
What works well
Out of scope
I didn't push any commits. |
Move issuer choice and JWKS rotation to the service accounts page, link service accounts from the client rollout page, clarify revocation, and keep Helm keys and connector auth rules in one place each. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@claude thanks for the review. Commit 5f7a7a5 addresses every primary and secondary issue from it. Please review the PR again with the same criteria (
Already tracked in the PR's Keep in draft until list, so don't re-raise:
Post one body-level review comment. Don't push commits. |
|
Claude finished @peppescg's task in 1m 21s —— View job Re-review: Document service accountsVerdict: ready once two small fixes land. 5f7a7a5 fixes every primary issue from the last review, and all but one secondary issue. The moved This cluster and key-rotation content reads well on the service accounts page, and both configure pages now point to it. One meaning got lost in the move (item 1 below), and the connector auth-type rule is still restated in more places than needed. I skipped the 60-minute lifetime, the Previous findings
Primary issues1. The move dropped "its own" issuer URL for clusters registered as Another issuer The bullet just above gives the reason this matters: clusters often share the default issuer URL. A reader whose clusters all use the default Ask: Restore the requirement and make the scope explicit. For example: "When gateways or workloads span clusters, add every cluster this way, including the one that runs Stacklok Enterprise. Each cluster needs its own issuer URL, so a cluster that uses the default issuer needs a unique one set first." Please confirm the uniqueness requirement upstream, since I couldn't. 2. The connector auth-type list still appears in five places
If a new auth type works for service accounts, all five need an edit. The commit message says these rules are kept "in one place each," but they're not yet. Ask: In Secondary issues (new in 5f7a7a5)
What works well
I didn't push any commits. |
Require a distinct issuer URL per cluster, scope This cluster to the gateways' placement as the code does, link the rotation subsection directly, and point remaining connector auth-type lists to one section. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@claude commit c5182ba addresses your re-review. Please check it once more with the same criteria and post one body-level comment. Don't push commits. What changed, verified against stacklok-enterprise-platform v0.26.0:
Still tracked in Keep in draft until, so don't re-raise them: #4933, #5519, and the v0.26.0 Helm reference sync. |
|
Claude finished @peppescg's task in 1m 16s —— View job Third review: Document service accountsVerdict: ready to merge once the draft blockers clear. c5182ba resolves both primary issues and all six secondary issues from the re-review. Two small wording problems came in with the reworked Trust the cluster's issuer step. Neither blocks the PR, but both are cheap to fix. I skipped #4933, #5519, and the v0.26.0 Helm reference sync, as you asked. I still can't read Re-review findings
The 30-second poll in "Both gateways pick up a new or changed issuer" ( New issues (minor)1. "Another issuer trusts any other cluster" now contradicts the next sentence. 2. The This cluster reason covers only the shared-URL risk. 3. Changing 4. Nit: What works well
I didn't push any commits. |
Describe Another issuer by how it works, state both outcomes of a gateway outside the cluster, and keep the old issuer when adding one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The directory serves trusted issuers only on the Enterprise Manager's TLS gRPC port, so document the TLS connection, the snapshot poll log states, the Cedar exposure of unconstrained policies, the MCP session header, and the console's account tabs and confirmations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@claude commit 15af88e adds content from a code audit against stacklok-enterprise-platform v0.26.0. Please review it with the same criteria ( What changed, with the code evidence:
Already tracked in Keep in draft until, so don't re-raise them: #4933, #5519, and the v0.26.0 Helm reference sync. |
|
Claude finished @peppescg's task in 3m 19s —— View job Fourth review: Document service accounts (15af88e)Verdict: ready once the draft blockers clear. One placement fix in the new TLS step is worth making first. The audit additions are accurate where I could check them, and they fill real gaps. The TLS requirement explains a failure that would otherwise be silent: users and virtual keys keep working while every workload gets I skipped #4933, #5519, and the v0.26.0 Helm reference sync, as you asked. I still can't read
Primary issues1. The TLS step sends AI Gateway administrators to the Connector Gateway page for two shared settings
Ask:
2. The Cedar warning gives only one way to fix the problem it describes Ask: Add one sentence on conditioning the principal on group membership, for example: "To admit only members of certain groups, users and service accounts alike, scope the principal to those groups." Please confirm the entity type name upstream before adding a code example. The two shorter mentions ( Secondary issues
What works well
I didn't push any commits. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@claude please review the latest commit (363db0b), which addresses your fourth review. As before, skip #4933, #5519, and the v0.26.0 Helm reference sync. You can't read
|
|
Claude finished @peppescg's task in 1m 18s —— View job Fifth review: Document service accounts (363db0b)Verdict: ready to merge once the draft blockers clear. 363db0b fixes both primary issues and all six secondary issues from the fourth review. I found one small accuracy gap in the new inline CA step, plus two nits. None of them block the PR. As you asked, I skipped #4933, #5519, and the v0.26.0 Helm reference sync. I took the cert-manager Fourth-review findings
New issues (minor)1. The AI Gateway CA step says a rotated CA needs no restart, but leaves out that the copy goes stale. Ask: Add one sentence before the reconnect sentence, for example: "A copied Secret goes stale when cert-manager rotates the CA, so update it then, or keep it in sync with a tool such as trust-manager. The gateway reads the Secret again at every reconnect, so an updated CA needs no restart." 2. Nit: the page doesn't say where to find 3. Nit: What works well
I didn't push any commits. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
danbarr
left a comment
There was a problem hiding this comment.
Content approved. The model-discovery correction resolves my remaining finding, and I have no further editorial changes to request.
Please hold the merge until the documented service account behavior ships in the stable channel, including the console availability and 60-minute token ceiling. v0.25.0 is the current stable version; v0.26.0 is on the beta channel. The generated references should continue to follow stable releases and be synced when the corresponding version reaches stable.
Description
Documents service accounts in Stacklok Enterprise, following the acceptance criteria in stacklok/stacklok-enterprise-platform#4934. A service account gives a Kubernetes workload its own directory identity, groups, model set grants, and budget. The workload authenticates to both the AI Gateway and the Connector Gateway with its pod's projected ServiceAccount token, so there's no static key.
New pages:
platform/enterprise-directory/service-accounts.mdx(AC4.1, AC4.5, AC4.6): when to use a service account instead of a virtual API key, trusting a cluster's issuer, the creation wizard, pinned and name-only bindings (including reassign), activation, revocation and deletion, and what an account can reach depending on model access, budgets, and connector authentication.ai-gateway/kubernetes-workloads.mdx(AC4.2): the projected token volume, audience andexpirationSeconds: 1800,Authorization: Beareronly, what401,402,403, and503mean, and where an administrator finds the reason behind a refusal.connector-gateway/kubernetes-workloads.mdx: the same token on/gw/mcp, acurlcheck, which connectors and tools an account gets (None, Bearer token, and Header injection connectors granted to its groups, no connections to make), and the gateway's401,403, and503.Updated pages:
configure-ai-gateway.mdx: new "Accept service account workloads" section with the cluster administrator's prerequisites (AC4.3).configure-connector-gateway.mdx: new "Accept service account workloads" section (on by default over TLS, what the chart sets up, egress rules, turning it off, accounts shared with the AI Gateway), plus theworkloadTrustSaSubjectAllowlistrow for a renamed gateway.users-and-groups,manage-budgets,budgets-and-pricing,virtual-api-keys(AC4.4).control-model-access,connector-policies,connectors(service accounts on the Activity tab), bothforward-audit-logspages (service account subjects), the console and directory index pages, andsidebars.ts.Every claim was checked against
stacklok-enterprise-platformmain(v0.26.0), including the Connector Gateway work in stacklok/stacklok-enterprise-platform#5799, #5849, #5855, #5930, and #5963.Keep in draft until
service_accountsconsole flag removed. stacklok/stacklok-enterprise-platform#5519 merged on 2026-11-04, but no tag contains it yet; v0.26.0 still defaults the flag to off.mainstill has 2 hours.0.25.0, so it lacksglobal.stacklok.connectorGateway.workloadIdentity.enabled,connector-gateway.enterpriseConfig.workloadIdentity.pollInterval, and the Connector Gateway entry in theworkloadTrustSaSubjectAllowlistdefault.Resolved: the Connector Gateway accepts workload tokens (v0.26.0), the console labels the in-cluster issuer This cluster (stacklok/stacklok-enterprise-platform#5543), and #1244 merged.
Where the pages follow the code instead of #4934
401: an invalid token gets401, while a valid token without an active binding gets403. The pages cover both, with the auditreason_codevalues and the Enterprise Manager'sworkload.resolutionsmetric and debug log.system:service-account-issuer-discovery, so it's documented as a check, not a manual step.stacklok-enterprise-platformas the example.valid_for.Type of change
Related issues/PRs
Screenshots
None. No page in the platform, AI Gateway, or Connector Gateway sections uses screenshots.
Submitter checklist
Content and formatting
Navigation
sidebars.ts) updated for added, deleted, reordered, or renamed filesvercel.jsonfor moved, renamed, or deleted pages (no URLs changed, so none needed)Reviewer checklist
Content
🤖 Generated with Claude Code