21074 Commits

Author SHA1 Message Date
Fredrik Adelöw 291b3df579 Update changeset to cover catalog table loading UX changes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-22 12:00:53 +02:00
Aramis Sennyey ac410b1d26 feat(skill): automatically onboard to openapi tooling (#34179)
* feat(skill): automatically onboard to openapi tooling

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>

* test skill against notifications backend

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>

* update URLs to point to main repo and describe multiple client types

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>

* address PR feedback

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>

* revert erroneous changes

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>

* add changeset

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>

* address review feedback: skill doc fixes and entityRef schema dedup

Disambiguate generated entityRef/orderField types and correct skill
guidance on operationId casing and OpenAPI version support.

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>

* note in skill that handler-side validation should be stripped

Reviewers may forget that manual InputError guards and primitive-type
checks become dead weight once the OpenAPI validator runs.

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>

---------

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
2026-05-21 23:01:16 -04:00
Patrik Oldsberg a7d7542432 Merge pull request #31837 from the-serious-programmer/feature/catalog-export
Feature: catalog export
2026-05-21 19:50:30 +02:00
Fredrik Adelöw bcbc92d2ad Bump changeset to minor for config schema change
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-21 17:59:30 +02:00
Fredrik Adelöw dc7678cdcc fix(catalog-backend): remove immediate mode stitching
Remove the immediate stitching strategy from the catalog-backend plugin.
All stitching now uses the deferred mode exclusively, which processes
entities asynchronously via a worker queue. This simplifies the stitching
subsystem by removing dead-weight code paths and the strategy parameter
threading, and fixes a bug where deleteWithEagerPruningOfChildren
hardcoded immediate-mode semantics regardless of configured mode.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-21 17:59:30 +02:00
Fredrik Adelöw d8757b158c catalog-react: split entity list and count into parallel requests
Reapply the split-count concept on top of the refactored
useEntityListProvider (from #34324). The list fetch now uses
totalItems: 'exclude' to skip the expensive count, and a separate
useAsyncFn fetches the count only when filters change — page
navigation no longer re-runs the count query.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-21 17:02:49 +02:00
Fredrik Adelöw 4cc7231379 Update changeset to reflect delta on top of #34323
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-21 16:52:47 +02:00
Fredrik Adelöw 8f20cc2f52 Add totalItems mode, sort key lowercasing, and simplified ordering
Layer the remaining concepts from the original PR on top of the
split-query foundation:

- totalItems parameter on REST API (GET and POST) and CatalogApi
- TotalItemsMode type replacing internal skipTotalItems boolean
- Sort field key lowercasing for search table comparison
- whereNotNull(search.value) on the list CTE to exclude truncated values
- Simplified ORDER BY (NULLS LAST removed since NULL values are
  already excluded by whereNotNull)
- New tests for NULL sort field values and multi-valued sort field
  totalItems accuracy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-21 16:52:47 +02:00
Fredrik Adelöw 74c5fbbafd Merge pull request #34324 from backstage/freben/fix-entity-list-triple-fetch
fix(catalog-react): eliminate redundant entity list fetches during filter initialization
2026-05-21 16:48:32 +02:00
Fredrik Adelöw 5dca781385 Replace mountedRoutes-based wrapping with mountPath option
Address review feedback: mountedRoutes are for abstract route targets
the test subject links to, not for the subject itself. Add a dedicated
mountPath option that wraps the test element in a single Route with
the given path pattern, enabling useParams(). When mountPath is set
and initialRouteEntries is not, the initial entry defaults to mountPath.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-21 13:39:52 +02:00
Vincenzo Scamporlino 80b4370413 Add instructions for enabling the catalog-unprocessed-entities page
Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
2026-05-21 12:48:15 +02:00
1337 9929df3d8c Merge branch 'backstage:master' into feature/catalog-export 2026-05-20 20:32:27 +02:00
Fredrik Adelöw 7c205457b6 Add changeset for entity list triple-fetch fix
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-20 17:31:38 +02:00
Fredrik Adelöw 0119806204 Update changeset to document totalItems semantic fix
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-20 16:29:17 +02:00
Fredrik Adelöw 4829e8961e fix(catalog-backend): split queryEntities list and count queries
The filtered CTE was referenced twice (count + data), preventing
Postgres 12+ from inlining it. This forced full materialization of
the filtered set before LIMIT could short-circuit. Split into two
separate queries run via Promise.all so the list CTE is only
referenced once and the planner can short-circuit on LIMIT.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-20 15:48:22 +02:00
Fredrik Adelöw 34d86b8fe3 Enter changeset prerelease mode with tag "next"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-20 11:10:47 +02:00
Fredrik Adelöw 62dd4fc3bc Add changeset for renderInTestApp route matching fix
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-20 10:31:13 +02:00
Fredrik Adelöw 1d10fc41e8 Update changeset and PR description to cover both fix sites
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-20 09:59:37 +02:00
Fredrik Adelöw 8abfa78e4c Revert eachSupportedId guard — env var fix is sufficient
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-19 23:23:37 +02:00
Fredrik Adelöw 03f0f3f953 Add changeset
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-19 23:19:18 +02:00
Fredrik Adelöw 39c5fbb633 Add extended statistics on search(key, value) for planner accuracy
The search table is an EAV schema where key and value are highly
correlated, but standard single-column statistics can't model this.
This caused the planner to underestimate compound filter queries by
up to 1300x, choosing materialize-then-sort plans instead of LIMIT
short-circuit index scans.

CREATE STATISTICS captures the (key, value) correlation via
dependencies, ndistinct, and most-common-values metadata. The planner
then correctly estimates row counts and chooses the index-driven plan.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-19 23:11:19 +02:00
Fredrik Adelöw 774d69884a Wrap stitch queue claim in a transaction to hold row locks
The SELECT FOR UPDATE SKIP LOCKED and the subsequent UPDATE of
next_stitch_at now run inside a single transaction. Previously the
row locks were released after the SELECT auto-committed, allowing
another worker to claim the same rows before the UPDATE ran.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-19 22:12:59 +02:00
github-actions[bot] b97fcb0a93 Version Packages 2026-05-19 18:28:24 +00:00
Patrik Oldsberg 0a44fb3cb8 Merge pull request #33895 from ganievs/fix-valkey-cluster-client
fix: use iovalkey Cluster for Valkey cluster mode
2026-05-19 20:14:27 +02:00
Ben Lambert e16b564c6f Merge pull request #34310 from backstage/copilot/copy-commits-from-pr-34066
MCP structured responses, OIDC error improvements, catalog model reference config
2026-05-19 20:12:47 +02:00
benjdlambert 3f5e7ec2b4 Improve MCP safeStringify, OIDC error messages, and catalog model reference config
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 19:27:45 +02:00
Ben Lambert a5a269c27a Merge pull request #34300 from backstage/github-omit-suspended-rest
feat(catalog-backend-module-github): add experimental REST-based suspended user check
2026-05-19 19:19:59 +02:00
Love Kumar Chauhan ca8951ae87 fix(mcp-actions-backend): return structured content and remove markdown formatting in tool responses
This change aligns the MCP tool execution responses with the specification by returning plain text in the 'content' array and providing the raw JSON in a new 'structuredContent' field. It also removes the unnecessary Markdown code block formatting that was previously added to tool results.

Fixes #34052

Signed-off-by: Love Kumar Chauhan <lovechauhan6564@gmail.com>

Co-authored-by: benjdlambert <3645856+benjdlambert@users.noreply.github.com>
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 18:48:50 +02:00
Ben Lambert 381cf2ae10 Merge pull request #34308 from backstage/freben/cached-service-cleanup
Fix cache eviction race in CachedUserInfoService
2026-05-19 18:37:27 +02:00
Ben Lambert 359d5a502f Merge pull request #34016 from backstage/benjdlambert/api-v1beta2-mcp-server 2026-05-19 16:01:11 +02:00
Ben Lambert 484c073be9 Merge pull request #34261 from backstage/session/scheming-finch-ks70 2026-05-19 16:00:41 +02:00
MT Lewis d745f1c39c feat(catalog-backend-module-github): add experimental REST-based suspended user check
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>
2026-05-19 14:45:33 +01:00
Fredrik Adelöw 97d3bd4c7b Add changeset for cached service cleanup
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-19 15:27:22 +02:00
Fredrik Adelöw 6eacdc036e Merge pull request #34252 from backstage/freben/lazy-permission-user
permission: cache user info, clean up PolicyQueryUser, drop getPluginRequestToken
2026-05-19 15:20:48 +02:00
Patrik Oldsberg 1dbc1543f4 Merge pull request #34299 from backstage/rugvip/nav-item-gone
frontend-plugin-api: remove NavItemBlueprint
2026-05-19 14:44:58 +02:00
Andre Wanlin a07e6a31a4 Typos CLI - initial config and changes
Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Fixed test typos

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Fixed docs typos

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Fixed code comment typos

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Fixed remaining typos

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Added CI and Config

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Fixed typo, lol

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Fixes and update API reports

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Updated based on feedback

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Updated test

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Minor corrections

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Removed changesets

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Refactor to make changes non-breaking

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Clean up of new typos

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Use typoed over typo'd

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Added typoed

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Updated API Reports

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Feedback improvement

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Refinements

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Simplify based on feedback

Signed-off-by: Andre Wanlin <awanlin@spotify.com>

Reverted to handle both keys

Signed-off-by: Andre Wanlin <awanlin@spotify.com>
2026-05-19 07:38:06 -05:00
benjdlambert be71476943 chore: rename changeset, remove invalid example entity
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:34 +02:00
benjdlambert 888955697b refactor: register mcp-server model in ai-model module, remove separate module
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:34 +02:00
benjdlambert 2003dcb4db refactor(catalog-model): move mcp-server model to opt-in backend module
Moves the mcp-server specType registration out of the default catalog
entity model into a separate backend module following the same pattern
as the AiResource module. Types and validators are now alpha exports.

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:34 +02:00
benjdlambert 664d1da60f refactor(catalog-model): move mcp-server to v1alpha1 specType, drop v1alpha2
Registers mcp-server as a specType on v1alpha1/v1beta1 instead of
introducing a new v1alpha2 apiVersion. Adds addKindVersion to the
builder so separate layers can extend existing kinds.

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:34 +02:00
benjdlambert 2cf453f328 refactor(catalog-model): rename API v1beta2 to v1alpha2
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:34 +02:00
benjdlambert 27aee3a9b1 feat(catalog-model): add API v1beta2 with mcp-server subtype
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 14:15:33 +02:00
Fredrik Adelöw baeb4431e8 Merge pull request #34278 from backstage/freben/deprecate-immediate-stitching
catalog-backend: deprecate immediate mode stitching
2026-05-19 14:12:30 +02:00
Fredrik Adelöw fdf8f753bc Merge pull request #34301 from backstage/freben/incremental-ingestion-any-array
incremental-ingestion: use ANY(array) instead of IN(...) on Postgres
2026-05-19 14:06:34 +02:00
dependabot[bot] 998664c1d2 chore(deps): Bump ws from 8.20.0 to 8.20.1
Bumps [ws](https://github.com/websockets/ws) from 8.20.0 to 8.20.1.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.20.0...8.20.1)

---
updated-dependencies:
- dependency-name: ws
  dependency-version: 8.20.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 10:22:54 +00:00
Patrik Oldsberg dcf850f1f5 Merge pull request #34108 from backstage/rugvip/forward-embedded-pg-config
cli-module-build: forward user config to embedded Postgres
2026-05-19 12:10:05 +02:00
Fredrik Adelöw 32f0dfe7f8 incremental-ingestion: use ANY(array) instead of IN(...) on Postgres
The whereIn('ref', refs) calls on ingestion_mark_entities generated
a unique prepared statement for every distinct array length, bloating
the Postgres query plan cache. On Postgres, use = ANY($1) with a
single array parameter instead. Falls back to regular whereIn on
SQLite/MySQL.

Signed-off-by: Fredrik Adelöw <freben@gmail.com>

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
2026-05-19 11:55:30 +02:00
Fredrik Adelöw 8f867a2078 Merge pull request #34272 from backstage/freben/relations-target-index
catalog-backend: add missing index on relations.target_entity_ref
2026-05-19 11:43:39 +02:00
Patrik Oldsberg 2ec4c54b5f Remove rolled-back nav item disable changeset
The grumpy-experts-leave fix was superseded by removing nav-item config
matching entirely.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:29:29 +02:00
Patrik Oldsberg 15afdd994d Fix plugin-app changeset to describe legacy nav-item support
Page-based nav discovery is unchanged; the app nav change is backward
compatibility after NavItemBlueprint removal.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:22:38 +02:00