Skip to content

Update stacklok/toolhive to v0.23.1#759

Merged
rdimitrov merged 5 commits intomainfrom
renovate/stacklok-toolhive-0.x
Apr 21, 2026
Merged

Update stacklok/toolhive to v0.23.1#759
rdimitrov merged 5 commits intomainfrom
renovate/stacklok-toolhive-0.x

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate Bot commented Apr 21, 2026

This PR contains the following updates:

Package Update Change
stacklok/toolhive minor v0.22.0v0.23.1

After this PR opens, .github/workflows/upstream-release-docs.yml adds source-verified content edits for the new release. For stacklok/toolhive, the same workflow also syncs reference assets (CLI help, Swagger) and regenerates the CRD MDX pages.


Release Notes

stacklok/toolhive (stacklok/toolhive)

v0.23.1

Compare Source

What's Changed

Full Changelog: stacklok/toolhive@v0.23.0...v0.23.1

v0.23.0

Compare Source

🚀 Toolhive v0.23.0 is live!

A milestone release: ToolHive's CRD API graduates from v1alpha1 to v1beta1, signaling API stability — with a zero-downtime upgrade path that keeps existing v1alpha1 resources working untouched. Two targeted operator bug fixes round out the release.

🔄 Deprecations

  • toolhive.stacklok.dev/v1alpha1 deprecated in favour of toolhive.stacklok.dev/v1beta1 — will be removed in a future release (#​4849). Both versions are served simultaneously; existing resources continue to work untouched. kubectl now prints a deprecation warning on every access to a v1alpha1 resource — migrate manifests to apiVersion: toolhive.stacklok.dev/v1beta1 at your own pace.
Migration guide: CRD graduation to v1beta1

All 12 ToolHive CRD kinds (MCPServer, MCPGroup, MCPRegistry, MCPRemoteProxy, MCPToolConfig, MCPExternalAuthConfig, VirtualMCPServer, VirtualMCPGroup, VirtualMCPCompositeToolDefinition, and their peers) are now served at both v1alpha1 and v1beta1. The schemas are identical — only the version string differs — so there is no data-format migration to perform.

Who is affected: anyone with manifests pinned to apiVersion: toolhive.stacklok.dev/v1alpha1.

Before
apiVersion: toolhive.stacklok.dev/v1alpha1
kind: MCPServer
metadata:
  name: my-server
spec:
  # ...
After
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
  name: my-server
spec:
  # ...
Migration steps
  1. Upgrade the operator and CRDs charts to v0.23.0 — no resource deletion or recreation is required. All existing v1alpha1 resources survive the upgrade with unchanged Deployment UIDs.
  2. Update your manifests to use apiVersion: toolhive.stacklok.dev/v1beta1 and re-apply them. Kubernetes stores the new version in etcd; the object's status.storedVersions will advance to include v1beta1.
  3. Once all stored objects have been re-applied at v1beta1, a future release will drop the v1alpha1 entry from the CRDs. Migrate at your convenience before then.

PR: #​4849 — Closes #​2556

🆕 New Features

  • CRDs now serve toolhive.stacklok.dev/v1beta1 as the storage version, with v1alpha1 kept served-and-deprecated for zero-downtime upgrades (#​4849).
  • Server-scoped Cedar policies like resource in MCP::"<server-name>" now work — resource entities (Tool, Prompt, Resource) carry the MCP server as a parent UID so Cedar's in operator can traverse the hierarchy (#​4965).

🐛 Bug Fixes

  • MCPExternalAuthConfig upstream providers with redirectUri omitted now get the documented {resourceUrl}/oauth/callback default applied by the operator, instead of failing at runtime with redirect_uri is required. Applies to both MCPServer and VirtualMCPServer flows (#​4905).
Full commit log

What's Changed

🔗 Full changelog: stacklok/toolhive@v0.22.0...v0.23.0


Configuration

📅 Schedule: (in timezone America/New_York)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Never, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.


Content additions by upstream-release-docs

Source-verified against stacklok/toolhive at tag v0.23.1 (was v0.22.0). Two Claude Opus sessions produced this update: a generation pass running the upstream-release-docs skill over all six phases, then a fresh-context editorial pass running docs-review over the changed files. Prettier and ESLint auto-fixes were applied afterward.

Review guidance

Machine-generated reference files under docs/toolhive/reference/cli/, static/api-specs/, and docs/toolhive/reference/crds/ are synced or regenerated from upstream release assets (separate commit, titled "Refresh reference assets") and should be spot-checked only. Commits authored by the skill contain hand-edited prose; review those for accuracy, not just style. If the "Gaps needing human context" section below is populated, each entry includes a Helper prompt for local Claude that a reviewer can paste verbatim into their local Claude Code session to resolve the gap. Fill those in before merging.

Reviewers below are non-bot commit authors in the release range who are also collaborators on this repo.

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 21, 2026

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

Project Deployment Actions Updated (UTC)
docs-website Ready Ready Preview, Comment Apr 21, 2026 10:57pm

Request Review

@renovate renovate Bot added the dependencies Pull requests that update a dependency file label Apr 21, 2026
@github-actions github-actions Bot requested a review from rdimitrov April 21, 2026 20:23
@github-actions
Copy link
Copy Markdown
Contributor

Automated docs augmentation failed. Run: https://github.com/stacklok/docs-website/actions/runs/24743776702

Retry via the Upstream Release Docs workflow with pr_number=759 once the underlying issue is resolved.

rdimitrov added a commit that referenced this pull request Apr 21, 2026
Two fixes to get the Renovate-triggered skill runs actually working
and observable:

1. `allowed_bots: renovate` — without this, claude-code-action
   refuses to run any workflow initiated by a bot identity with
   "Workflow initiated by non-human actor: renovate (type: Bot)."
   This is the action's default safety behavior. We deliberately
   allow Renovate (the whole point of the pipeline) but leave the
   list narrow — other bots still blocked.

2. `track_progress: true` + `display_report: true` — these expose
   live progress during long skill runs:
     - track_progress posts a sticky tracking comment on the PR that
       updates as the skill works through each phase
     - display_report surfaces the Claude Code Report in the Actions
       Step Summary as the step runs, not just after completion

   Skill runs that previously went silent for 20-45 min now stream
   live status.

The track_progress change was supposed to ship in #757 but was
pushed after the squash-merge and got orphaned on the branch.

Seen on run 24743776702 — Renovate PR #759's workflow failed with
the bot-actor rejection.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@renovate
Copy link
Copy Markdown
Contributor Author

renovate Bot commented Apr 21, 2026

Edited/Blocked Notification

Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.

You can manually request rebase by checking the rebase/retry box above.

⚠️ Warning: custom changes will be lost.

rdimitrov added a commit that referenced this pull request Apr 21, 2026
Two bugs from the first real Renovate run (#759) and its retry:

1. workflow_dispatch retry failed at "Resolve PR number and head ref"
   with "failed to run git: fatal: not a git repository". The step
   runs BEFORE actions/checkout, so `gh pr view` has no git context
   to infer the repo from. Added `--repo "$GITHUB_REPOSITORY"` to the
   three gh pr view calls that run pre-checkout (HEAD_REF + AUTHOR
   in the retry branch of step "pr", plus BASE in the retry branch of
   step "eff"). The error message we initially saw ("author ... is
   not an accepted bot") was just the shell source being echoed by
   `bash -x`-like output; the actual runtime never got to that point.

2. The refresh commit (~38 files, reference-asset regeneration) was
   only pushed at the END of the workflow, after the skill. When the
   skill failed or was cancelled — which it did repeatedly today —
   the refresh commit died with the runner and PRs ended up with only
   the one-line YAML bump. Now push the refresh commit as soon as
   it's created, so the reference-asset work lands on the PR branch
   independent of skill outcome. This was a pending commit that got
   orphaned by #760's squash-merge; re-shipping.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@rdimitrov rdimitrov closed this Apr 21, 2026
@rdimitrov rdimitrov reopened this Apr 21, 2026
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Apr 21, 2026

Claude finished @rdimitrov's task in 17m 54s —— View job


Upstream release docs update for v0.23.1

  • Gather context: analyze v0.22.0 → v0.23.1 changes
  • Phase 1-3: Discovery, deep dive, and impact map
  • Phase 4: Implementation
    • Bulk update v1alpha1v1beta1 in all guide examples (174 occurrences, 40 files)
    • Add v0.23.0 section to migrate-to-v1beta1.mdx (API version graduation)
    • Add redirectUri default documentation to auth-k8s.mdx
  • Phase 5: Docs review applied, facts re-verified against source schemas
  • Pass 3: Technical re-verification complete (all 7 claims verified)
  • Committed and pushed

What changed

v0.23.0 / v0.23.1 documentation updates, source-verified against stacklok/toolhive@v0.23.1:

1. apiVersion updated across 40 guide files

All YAML examples in guides, integrations, tutorials, and MCP server guides now use apiVersion: toolhive.stacklok.dev/v1beta1. The migrate-to-v1beta1.mdx migration guide retains v1alpha1 intentionally (it's the "before" state in migration examples).

2. New v0.23.0 section in guides-k8s/migrate-to-v1beta1.mdx

Documents the CRD API graduation: deprecation notice, zero-downtime upgrade path, and 3-step migration procedure. The change summary table now includes v0.23.0.

3. New "Callback URL for upstream providers" section in guides-k8s/auth-k8s.mdx

Documents that when redirectUri is omitted from an MCPExternalAuthConfig upstream provider, the operator defaults it to {resourceUrl}/oauth/callback. Users need to register this URL with their OAuth2/OIDC provider.

4. Cedar server-scoped policies: already correctly documented; PR #4965 was a bug fix that makes existing docs accurate. No doc changes needed.

No gaps requiring human context - all changes had clear, verifiable documentation paths.
| Branch

rdimitrov added a commit that referenced this pull request Apr 21, 2026
…764)

* Gitignore claude-code-action's .claude-pr/ scratch dir

PR #759 got a bad "Add upstream-release-docs content for toolhive
v0.23.1" commit carrying 17 files of leakage from
.claude-pr/.claude/* + .claude-pr/CLAUDE.md + .claude-pr/.husky/.
That directory is created by anthropics/claude-code-action@v1 as
scratch workspace during skill runs — it clones our own .claude/
skill configs into a sibling dir for its own use. None of it
belongs on the repo's main branch.

Our workflow's "Commit and push" step runs `git add -A` after the
skill, which scooped up the scratch dir alongside any legitimate
content.

Ignoring /.claude-pr at the root so it never gets staged. The legit
content from the skill (guide updates, v1alpha1 → v1beta1 migration
docs) lands as intended via claude-code-action's own auto-commit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Switch skill to Opus and split generation from editorial review

Two changes to the claude-code-action invocation:

1. Switch to Opus 4.7 via `claude_args: --model claude-opus-4-7`.
   Generation benefits from the stronger model on long multi-file
   edits and source verification, and docs-review benefits from the
   same quality. The default is Sonnet.

2. Split the single "multi-pass" skill step into two separate
   claude-code-action invocations:
     - `skill_gen`: runs /upstream-release-docs end-to-end (all 6
       phases, including the skill's own internal docs-review in
       Phase 5).
     - `skill_review`: runs /docs-review over the files the previous
       commit changed, in a fresh context with no exposure to the
       generation session's internal reasoning.

   Dan's hypothesis: fresh context for the editorial pass tends to
   catch style and structure issues the generation pass rationalized
   away. This was previously a same-session Pass 2 after the skill.

The removed Pass 3 (Phase 5 re-verification) was redundant with the
skill's own Phase 5 and is dropped.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@rdimitrov rdimitrov force-pushed the renovate/stacklok-toolhive-0.x branch from 49b7bbd to 3098350 Compare April 21, 2026 21:48
@rdimitrov rdimitrov closed this Apr 21, 2026
@rdimitrov rdimitrov reopened this Apr 21, 2026
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Apr 21, 2026

Claude finished @rdimitrov's task in 17m 17s —— View job


Upstream release docs update for v0.23.1

Implementing changes

  • Phase 1: Discovery — categorized v0.23.0 and v0.23.1 changes
  • Phase 2: Deep dive — verified against source at tag v0.23.1
    • PR #4849 (graduation v1alpha1→v1beta1): verified storageversion markers on all 12 v1beta1 types; deprecatedversion markers on all v1alpha1 types; v1alpha1 package imports Spec/Status from v1beta1 (identical schemas)
    • PR #4905 (redirectUri default): verified defaultRedirectURI in pkg/controllerutil/authserver.go applies {resourceURL}/oauth/callback when provider RedirectURI is empty and resourceURL is non-empty; applies to OIDC and OAuth2 upstream providers
    • PR #4965 (Cedar resource in MCP::"..."): verified EntityFactory.CreateEntitiesForRequest now appends MCP parent UID to resource entity — existing docs already reference this syntax, so this is a silent bug fix
    • PR #4981 (v0.23.1 stale-cache auth propagation): internal registry provider behavior, no user-facing docs impact
  • Phase 3: Impact map built (see details below)
  • Phase 4: Implement doc changes
  • Phase 5: Validation (build, lint)
  • Phase 6: Commit + push

Impact map

  1. Bulk apiVersion bump: 178 toolhive.stacklok.dev/v1alpha1 occurrences across 41 docs files need to become v1beta1. The migrate-to-v1beta1.mdx file intentionally shows v1alpha1 in some examples (as the "before" state) — those four lines must stay at v1alpha1.
  2. New v0.23.0 section in guides-k8s/migrate-to-v1beta1.mdx documenting the CRD graduation (deprecation + zero-downtime migration).
  3. New "Default callback URL" subsection in guides-k8s/auth-k8s.mdx documenting the {resourceUrl}/oauth/callback default.
  4. Cedar/authz docs: no changes needed — PR #4965 is a bug fix making existing docs accurate.
    | Branch

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Apr 21, 2026

Claude finished @rdimitrov's task in 6m 9s —— View job


Docs review for v0.23.1 release docs

  • Identify hand-edited files from previous commit (40 MDX files; only 2 have new prose)
  • Run editorial review on those files
  • Verify factual claims against upstream source at /tmp/tmp.bIPE6VrlZ2/upstream
  • Apply actionable fixes
  • Commit and push (dc7ec91)

Summary

Reviewed the two files with substantive new prose (migrate-to-v1beta1.mdx v0.23.0 section, auth-k8s.mdx "Default callback URL" section). The other 38 modified files are mechanical apiVersion bumps — nothing editorial to do there. Verified all factual claims against the upstream source tree and the generated CRD manifests.

Factual verification (all claims hold)

  • 12 CRD kinds: cmd/thv-operator/api/v1beta1/*_types.go — 12 types, matches the doc's enumerated list (EmbeddingServer, MCPExternalAuthConfig, MCPGroup, MCPOIDCConfig, MCPRegistry, MCPRemoteProxy, MCPServer, MCPServerEntry, MCPTelemetryConfig, MCPToolConfig, VirtualMCPCompositeToolDefinition, VirtualMCPServer). The PR body mentions VirtualMCPGroup but no such kind exists; doc ignores this and is correct.
  • Warning text: toolhive.stacklok.dev/v1alpha1 is deprecated; use v1beta1 — exact match with //+kubebuilder:deprecatedversion:warning=... on all 12 v1alpha1 types.
  • None conversion strategy: No conversion: block in any generated CRD YAML; Kubernetes defaults to None when unset. Correct.
  • v1alpha1 passthrough: v1alpha1/types.go re-exports all Spec/Status types from v1beta1. Correct.
  • redirectUri default: pkg/controllerutil/authserver.go:643-687defaultRedirectURI is strings.TrimRight(resourceURL, "/") + "/oauth/callback", applied only when redirectURI == "" && resourceURL != "", covering both OIDC and OAuth2 upstream providers. The "no default if resourceUrl unset" caveat is accurate.
  • resourceUrl source: MCPOIDCConfigReference.ResourceURL on MCPServer.spec.oidcConfigRef — the JSON path in the doc is accurate.

Edits applied

docs/toolhive/guides-k8s/migrate-to-v1beta1.mdx:

  1. Spaced-hyphen separators in prose (style guide: avoid em dashes; spaced hyphens allowed only in list-style contexts). Replaced two instances with full stops / new sentences.
  2. "the v1beta1 API group""v1beta1". v1beta1 is a version; the API group is toolhive.stacklok.dev.
  3. "will remain served for at least one additional minor release""will be removed in a future release". The upstream release notes say "will be removed in a future release" without committing to a specific horizon. The original wording invented a stronger commitment than the source supports.

docs/toolhive/guides-k8s/auth-k8s.mdx:

  1. Spaced-hyphen parenthetical in the "whichever value ends up in effect - defaulted or explicit - " sentence. Rephrased as "The effective redirect URI, whether defaulted or explicit, ...".

Not changed

  • Section placement of the new auth callback subsection (under Set up embedded authorization server authentication → upstream providers) is correct.
  • The Cedar/authz docs weren't touched by this PR; prior pass confirmed no changes needed.
  • Existing v1alpha1 examples in migrate-to-v1beta1.mdx (the "before" blocks for prior releases) are correctly preserved.
    | Branch

danbarr
danbarr previously approved these changes Apr 21, 2026
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Apr 21, 2026

Claude finished @rdimitrov's task in 10m 11s —— View job


Upstream release docs for v0.23.1 (re-run on PR reopen)

  • Phase 1: Discovery — categorized v0.23.0 / v0.23.1 changes
  • Phase 2: Deep dive — source-verified at v0.23.1 via gh api
  • Phase 3: Impact map
  • Phase 4: Implement
  • Phase 5: Re-verify prose against source; style check (no em dashes, no smart quotes)
  • Phase 6: Committed and pushed (5d734ad)

What changed

Branch state note: only the Renovate bump (9ba0b5c) and refresh commit (3de26c6) were on the branch when this run started. The hand-edited prose from earlier runs had been dropped from the branch, so this run re-applied it.

1. apiVersion bump across 40 MDX files (guides-cli/, guides-k8s/, guides-mcp/, guides-registry/, guides-vmcp/, integrations/, tutorials/). Replaced 174 occurrences of toolhive.stacklok.dev/v1alpha1 with v1beta1. migrate-to-v1beta1.mdx was intentionally skipped — its four remaining v1alpha1 references are historical "before" examples for pre-v0.23.0 migrations.

2. New v0.23.0 section in guides-k8s/migrate-to-v1beta1.mdx

Covers the CRD API graduation (all 12 CRD kinds served at both versions, v1beta1 as storage, identical schemas), zero-downtime behavior, and the manifest-update steps. Includes two discovery commands for finding remaining v1alpha1 usage in Git and in the cluster. The change-summary table and the page's frontmatter description now cover v0.15.0 through v0.23.0.

3. New "Default callback URL for upstream providers" subsection in guides-k8s/auth-k8s.mdx

Documents that when redirectUri is omitted on an upstream provider, the operator defaults it to {resourceUrl}/oauth/callback, and calls out the edge case where resourceUrl is also unset (no default applied). Includes a worked example.

4. Cedar / authz docs: no changes. PR #4965 is a bug fix that makes the existing resource in MCP::"..." syntax work as documented.

5. Auto-generated reference (reference/cli/, static/api-specs/, reference/crds/): not hand-edited — regenerated in the earlier 3de26c6 refresh commit.

Source verification (all claims)

  • +kubebuilder:storageversion on v1beta1 types, +kubebuilder:deprecatedversion:warning="toolhive.stacklok.dev/v1alpha1 is deprecated; use v1beta1" on v1alpha1 — cmd/thv-operator/api/v1{alpha1,beta1}/*_types.go
  • 12 CRD kinds, identical schemas via re-export — cmd/thv-operator/api/v1alpha1/types.go
  • defaultRedirectURI = strings.TrimRight(resourceURL, "/") + "/oauth/callback" applied when redirectURI == "" && resourceURL != "" for both OIDC and OAuth2 upstream providers — cmd/thv-operator/pkg/controllerutil/authserver.go:643-687
  • resourceUrl source field on MCPOIDCConfigReferencecmd/thv-operator/api/v1beta1/mcpoidcconfig_types.go:251
  • Cedar MCP parent entity wiring — pkg/authz/authorizers/cedar/entity.go:160-166

Gaps

No GAPS.md file created. Every feature's "why" and mechanics were resolvable from the release notes, PR descriptions, and source at the tag.

Validation notes

npm run prettier, npm run build, and npm run eslint are blocked by the sandbox. Formatting and linting will run via the repo's pre-commit hook on any subsequent edit and via CI on this PR.
| Branch

Source-verified against stacklok/toolhive@v0.23.1.

- Bump apiVersion from v1alpha1 to v1beta1 across 40 guide,
  integration, and tutorial MDX files. migrate-to-v1beta1.mdx
  is excluded so historical "before" examples stay accurate.
- Add v0.23.0 section to migrate-to-v1beta1.mdx covering the
  CRD API graduation, zero-downtime upgrade behavior, and
  manifest migration steps.
- Add "Default callback URL for upstream providers" subsection
  to auth-k8s.mdx documenting the {resourceUrl}/oauth/callback
  default applied when redirectUri is omitted.
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Apr 21, 2026

Claude finished @rdimitrov's task in 5m 26s —— View job


Docs review for v0.23.1 release docs

  • Identify hand-edited vs. mechanical files from HEAD (2 files with new prose; 38 others are mechanical apiVersion bumps only)
  • Editorial review of hand-edited prose
  • Re-verify factual claims against upstream source at v0.23.1 via gh api
  • Apply actionable fixes
  • Commit and push (a31972b)

Summary

Reviewed the two files with substantive new prose in 5d734ad. The other 38 modified files are mechanical apiVersion bumps - spot-checked with a filtered diff to confirm no other content changed. Verified all factual claims against the upstream source at v0.23.1.

Factual verification (all claims hold)

  • 12 CRD kinds. cmd/thv-operator/api/v1beta1/*_types.go has 12 *_types.go files, matches the doc's enumerated list.
  • Deprecation warning text. cmd/thv-operator/api/v1alpha1/types.go — all 12 v1alpha1 types carry //+kubebuilder:deprecatedversion:warning="toolhive.stacklok.dev/v1alpha1 is deprecated; use v1beta1". Identical wording in doc.
  • +kubebuilder:storageversion present on v1beta1 types; verified on mcpserver_types.go.
  • v1alpha1 re-exports from v1beta1. Single v1alpha1/types.go file wires all 12 Spec/Status aliases back to v1beta1 (identical schemas).
  • redirectUri default. cmd/thv-operator/pkg/controllerutil/authserver.go:640-645defaultRedirectURI(resourceURL) is strings.TrimRight(resourceURL, "/") + "/oauth/callback". Applied at lines 664-666 (OIDC) and 685-687 (OAuth2) only when redirectURI == "" && resourceURL != "".
  • Five ConfigRef field names. mcpserver_types.gooidcConfigRef, toolConfigRef, externalAuthConfigRef, authServerRef, telemetryConfigRef all exist on MCPServer.spec.

Edits applied

docs/toolhive/guides-k8s/migrate-to-v1beta1.mdx:

  • Replaced the second discovery command. The original kubectl get -A --raw "/apis/toolhive.stacklok.dev/v1alpha1" | jq '.resources[].name' claimed to "find v1alpha1 resources already in the cluster and identify which kinds still need re-applying," but it actually just lists the kinds served at v1alpha1 (which remains all 12 until the version is removed, regardless of which resources have been re-applied). Replaced with a jq query over kubectl get crds that filters on the toolhive.stacklok.dev group and prints each CRD's status.storedVersions, which is the actual signal for "this CRD still holds at least one resource stored at v1alpha1."

docs/toolhive/guides-k8s/auth-k8s.mdx:

  • Smoothed the "Default callback URL" example flow. The original structure had a leading-ellipsis sentence ("...resolves to ...") after a YAML block, reading as a fragment. Merged the resolution statement into the sentence that introduces the YAML, and rephrased the trailing parenthetical so the paragraph reads cleanly as prose.

Not changed

  • No em dashes, en dashes, or smart quotes in either file.
  • Heading placement for the new auth-k8s.mdx H3 (under "Set up embedded authorization server authentication") is correct.
  • The other 38 apiVersion-only bumps are mechanical and correct — all reference live v1beta1 kinds.
    | Branch

github-actions Bot and others added 2 commits April 21, 2026 22:56
- migrate-to-v1beta1.mdx: replace the kubectl --raw API
  discovery command with a jq query over CRD
  status.storedVersions, which actually identifies CRDs
  still holding v1alpha1-stored resources (the previous
  command only listed kinds served at v1alpha1, always
  all of them).
- auth-k8s.mdx: smooth out the awkward leading-ellipsis
  sentence in the "Default callback URL for upstream
  providers" section by merging it into the preceding
  sentence and dropping the parenthetical em-dash-like
  aside in favor of a natural "for example" clause.

Co-authored-by: Radoslav Dimitrov <undefined@users.noreply.github.com>
@rdimitrov rdimitrov merged commit f89e5b1 into main Apr 21, 2026
4 checks passed
@rdimitrov rdimitrov deleted the renovate/stacklok-toolhive-0.x branch April 21, 2026 23:01
rdimitrov added a commit that referenced this pull request Apr 22, 2026
Replaces the upfront `gh api repos/X/collaborators/Y` filter with
per-user `gh pr edit --add-reviewer` attempts. Routes GitHub's own
rejection (422) into the mention list instead of relying on our
filter to pre-compute the split.

Why: on PR #759 the collaborator check returned 404 for Stacklok
employees who ARE collaborators via the `stackers` team (push
permission on docs-website) -- `ChrisJBurns`, `jhrozek`, `reyortiz3`,
`tgrunnagle`. Only `rdimitrov` passed, so four reviewers silently
vanished. A local check with a PAT that has read:org confirms all
five are collaborators; the discrepancy appears to be GITHUB_TOKEN
treating team-based access differently at the collaborator endpoint,
though we haven't pinned the exact rule.

The authoritative answer is "will GitHub accept this person as a
reviewer right now" -- asking that question directly (via the
add-reviewer API) avoids the filter being wrong. Each attempt is
independent, so one rejection doesn't kill the batch.

The separate "Add reviewers" step is now redundant -- assignments
happen inline during candidate iteration. Dropped.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
rdimitrov added a commit that referenced this pull request Apr 22, 2026
… paths (#776)

* @-mention non-collaborator release contributors; widen toolhive docs paths

Two independent but related improvements to the upstream-release-docs
pipeline:

1. Reviewer routing: @-mention contributors we can't auto-assign

   The existing reviewer-extract step batched all non-bot release
   commit authors and filtered to docs-website collaborators. On
   PR #759 that filter silently dropped four of five candidates
   (`reyortiz3`, `ChrisJBurns`, `jhroz`, `tgrunnag` are all upstream
   toolhive contributors but not collaborators on docs-website).
   The filter is mandatory because `gh pr edit --add-reviewer`
   returns 422 for any non-collaborator in the list, dropping the
   valid reviewers alongside the invalid ones.

   Now split the candidates:
     - ASSIGN_LIST (collaborators): batch-assigned as reviewers
       via `--add-reviewer`. Unchanged behavior.
     - MENTION_LIST (everyone else): @-mentioned in a new
       "Release contributors" section of the PR body so they see
       the PR documenting their work even though we can't request
       their review via the API.

   Detecting Stacklok employees directly (e.g. via the `stackers`
   team) requires a PAT with read:org scope -- `GITHUB_TOKEN`
   doesn't have it, and public-org-membership checks only see
   members with public membership. Deferred; noted in a comment.

2. Expand toolhive docs_paths hints

   The `toolhive` upstream is a monorepo shipping the CLI, the
   Kubernetes operator, and the vMCP gateway, plus cross-cutting
   features that land in concepts/, integrations/, tutorials/,
   and hand-written reference pages. The previous hints listed
   only the three guides-* folders. In practice the skill's
   Phase 3 impact map expanded beyond the hints (PR #759 touched
   concepts/, integrations/, tutorials/), so this is a focus
   improvement rather than a bug fix -- more accurate hints let
   Phase 2's source reading home in on the right areas without
   re-scanning unrelated docs.

   Other projects' hints are already accurate for their scope.
   toolhive-cloud-ui intentionally keeps docs_paths: [] -- no
   associated docs in this repo yet.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Assign reviewers per-user instead of pre-filtering by collaborator API

Replaces the upfront `gh api repos/X/collaborators/Y` filter with
per-user `gh pr edit --add-reviewer` attempts. Routes GitHub's own
rejection (422) into the mention list instead of relying on our
filter to pre-compute the split.

Why: on PR #759 the collaborator check returned 404 for Stacklok
employees who ARE collaborators via the `stackers` team (push
permission on docs-website) -- `ChrisJBurns`, `jhrozek`, `reyortiz3`,
`tgrunnagle`. Only `rdimitrov` passed, so four reviewers silently
vanished. A local check with a PAT that has read:org confirms all
five are collaborators; the discrepancy appears to be GITHUB_TOKEN
treating team-based access differently at the collaborator endpoint,
though we haven't pinned the exact rule.

The authoritative answer is "will GitHub accept this person as a
reviewer right now" -- asking that question directly (via the
add-reviewer API) avoids the filter being wrong. Each attempt is
independent, so one rejection doesn't kill the batch.

The separate "Add reviewers" step is now redundant -- assignments
happen inline during candidate iteration. Dropped.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
claude Bot added a commit that referenced this pull request Apr 22, 2026
Re-applies the documentation changes from PR #759 (reverted in 8406977)
that cover the upstream toolhive v0.23.0 release:

- Add v0.23.0 section to the v1beta1 migration guide covering the CRD
  API graduation from v1alpha1 to v1beta1.
- Document the default callback URL for MCPExternalAuthConfig upstream
  providers in the Kubernetes auth guide.
- Bump apiVersion to toolhive.stacklok.dev/v1beta1 across manifest
  examples in guides, integrations, and tutorials.

Auto-generated CRD reference assets were already refreshed in 4ac41c0
and are not re-applied here.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants