Commit Graph

73969 Commits

Author SHA1 Message Date
benjdlambert a185d7e0f8 feat: restore per-type guards for union narrowing
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 12:14:25 +02: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
benjdlambert e5671e44c0 refactor: extend default type and remove per-type guards
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 12:09:21 +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
Patrik Oldsberg 2a03b0798c Apply suggestion from @Rugvip
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-05-19 11:48:20 +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 59d62d3019 docs: use Remix icon in building plugins tutorial
Update the PageBlueprint example to use RiPuzzleLine and drop stale
nav item references from later snippets.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:29:12 +02:00
Patrik Oldsberg 36998fea17 scaffolder: restore page nav title to Create
Use Create on the page extension rather than the former nav item label.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:28:12 +02:00
Patrik Oldsberg b5032acd83 docs: remove legacy items input row from app nav table
The items input is internal backward compatibility, not public API.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:23:03 +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
Patrik Oldsberg e1b0499b7d docs: use Remix icon in plugin override example
Update the architecture plugins doc to match page IconElement usage.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:22:05 +02:00
Patrik Oldsberg 177a1c1af6 Clarify plugin-app changeset message in isolation
Explain page-based nav discovery and legacy nav-item compatibility together.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:21:23 +02:00
Patrik Oldsberg 2ba8c10106 Split plugin-app into its own changeset
Keep legacy nav-item compatibility note on plugin-app only; other
plugins get a changeset focused on page title/icon for sidebar entries.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:20:28 +02:00
Patrik Oldsberg fe72a38768 Mark renderInTestApp nav removal as breaking in changeset
Bump frontend-test-utils as minor with user-facing impact guidance.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:16:14 +02:00
Patrik Oldsberg 269c4f9f0d Remove legacy nav stub from renderInTestApp
Disable app/nav in the minimal test shell instead of rendering
legacy nav-item extensions. Use renderTestApp when nav behavior matters.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:15:31 +02:00
Patrik Oldsberg 483297f845 Trim Remix icon migration diff in changeset
Show only import and icon param changes for the Remix Icon example.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:13:45 +02:00
benjdlambert 9c7cb8f232 fix: set initial package version to 0.0.0
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 11:05:59 +02:00
Patrik Oldsberg 7089280c6e Add Remix icon migration notes to NavItemBlueprint changeset
Document switching from MUI IconComponent nav items to Remix Icon
elements on PageBlueprint.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:03:20 +02:00
Patrik Oldsberg 44d77e9680 Split nav item removal into separate changesets
Use dedicated changesets for the breaking frontend-plugin-api removal,
plugin migrations, and frontend-test-utils update.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:01:58 +02:00
Patrik Oldsberg 77ceb88228 Remove Nav Target legend from app visualizer
Legacy nav-item output is no longer a first-class extension type worth
highlighting in the detailed visualizer legend.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:01:05 +02:00
Patrik Oldsberg 10e5d6f8aa Remove NavItemBlueprint in favor of page-based nav discovery
Drop the deprecated NavItemBlueprint from the public API and migrate core
plugins to set title and icon on PageBlueprint instead. AppNav keeps
backward compatibility for legacy nav-item extensions via an internal
core.nav-item.target data ref.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 11:00:46 +02:00
Patrik Oldsberg 9a88d85d50 Merge pull request #34089 from backstage/otel/mcp-tools-call
feat: Instrument MCP tool calls with semantically appropriate span
2026-05-19 10:53:13 +02:00
Fredrik Adelöw bc32c13de6 catalog-backend: add missing index on relations.target_entity_ref
The relations table had indexes on originating_entity_id and
source_entity_ref but none on target_entity_ref. Several query paths
join or filter on this column:

- Orphan deletion (LEFT JOIN relations ON target_entity_ref)
- Entity ancestry (INNER JOIN relations ON target_entity_ref)
- Eager pruning (JOIN relations ON target_entity_ref)

Without an index these queries seq-scan the full table (~3.5M rows,
714 MB heap). On a production replica, a single point lookup takes
~122ms via seq scan. With the index it drops to <1ms.

The index is ~141 MB based on column width (~35 bytes avg) across
~3.5M rows. On PostgreSQL it's created with CONCURRENTLY to avoid
blocking reads/writes.

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 10:50:06 +02:00
benjdlambert 21835f6f52 feat: add rule specType with disciplines, category, and rationale
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:48:59 +02:00
Patrik Oldsberg 6651f2be06 app: remove nav item disable matching
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-05-19 10:48:24 +02:00
benjdlambert 333b10c2ab refactor: move AiResource types to @backstage/catalog-model alpha
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:49 +02:00
benjdlambert 46fbd60aef refactor: rename package to @backstage/plugin-catalog-backend-module-ai-model
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:49 +02:00
benjdlambert cf29736923 refactor: rename AIResource to AiResource for PascalCase consistency
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:48 +02:00
benjdlambert 07a2ece671 feat: install AIResource module in example backend with test entities
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:48 +02:00
benjdlambert 8e1e1bb06e fix: use CatalogModelSources.static for model registration
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:48 +02:00
benjdlambert 65c8533ba1 refactor: extract shared relation fields and fix type guard safety
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:48 +02:00
benjdlambert c41b6d09f7 docs: add README for ai-resource-entity-model module
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:48 +02:00
benjdlambert 37267be659 fix: clarify type guard test names
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:42 +02:00
benjdlambert 3170784f18 feat: add specType dispatch with skill-specific schema
Adds discriminated union on spec.type with specType dispatch in the
model layer. The skill type adds disciplines, categories, agents,
and dependsOn fields. Fixes model source to not duplicate the default
catalog entity model.

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:41 +02:00
benjdlambert 3664148c2e feat: add AIResource catalog entity kind as opt-in module
Introduces @backstage/plugin-catalog-backend-module-ai-resource-entity-model,
a new backend module that registers the AIResource kind with the catalog.

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:42:41 +02:00
Patrik Oldsberg 05f13d50c0 Merge pull request #34296 from backstage/worktree-fix-e2e-tests
fix(create-app): remove disabled nav-item config that breaks custom sidebar
2026-05-19 10:40:58 +02:00
MT Lewis 2bd0450cb4 feat(catalog-backend-module-msgraph): filter out disabled users by default (#34165)
* feat(catalog-backend-module-msgraph): filter out disabled users by default

The Microsoft Graph provider now always applies an `accountEnabled eq true`
base filter when fetching users. Any custom `user.filter` is combined with
the base filter using `and`, so adopters no longer need to manually add
`accountEnabled eq true` to their configuration.

Also removes the legacy mutual exclusivity check between `userFilter` and
`userGroupMemberFilter` — these serve orthogonal purposes (user-level
filtering vs group selection) and the downstream code already handles
both being set.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>

* chore: mark msgraph disabled-user filtering as breaking change

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>

* docs(catalog-backend-module-msgraph): clarify automatic accountEnabled filter in docs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>

---------

Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-19 10:30:30 +02:00
Patrik Oldsberg d11836fd22 workspaces/ui: add yarn settings from root
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
2026-05-19 10:25:36 +02:00
Fredrik Adelöw a29edc58fb Merge pull request #34267 from backstage/freben/describe-each-databases
tests: use describe.each for database test iteration
2026-05-19 10:24:00 +02:00
Fredrik Adelöw 98f496a1ad Merge pull request #34265 from backstage/freben/stable-multi-org-order
github: stabilize entity order in multi-org provider
2026-05-19 10:23:43 +02:00
Ben Lambert 782a819e4d fix: correct changeset bump level for scaffolder-backend (#34297)
Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 10:05:53 +02:00
Ben Lambert 29d398b57c fix(auth-backend): harden default allowed patterns for CIMD and DCR (#34260)
* fix(auth-backend): harden default allowed patterns for CIMD and DCR

Signed-off-by: benjdlambert <ben@blam.sh>

* address PR review feedback for OIDC defaults

- narrow CLI client ID pattern to exact cli.json path
- add BREAKING prefix to changeset
- add IPv6 [::1] to docs examples
- add loopback redirect URI tests for IPv6 and 127.0.0.1

Signed-off-by: benjdlambert <ben@blam.sh>

* remove dead ['*'] fallback when features are disabled

The restrictive defaults are now always used regardless of the enabled
flag, since the patterns are only consulted on code paths that require
the feature to be enabled.

Signed-off-by: benjdlambert <ben@blam.sh>

* add default pattern tests and fix docs cli example

Signed-off-by: benjdlambert <ben@blam.sh>

* use URL constructor for CLI client ID

Signed-off-by: benjdlambert <ben@blam.sh>

* use string templating for cliClientId to match OidcRouter

Signed-off-by: benjdlambert <ben@blam.sh>

* fix docs: remove misleading CLI client_id URL example

Signed-off-by: benjdlambert <ben@blam.sh>

---------

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 09:45:31 +02:00
Fredrik Adelöw 50d97e714e Merge pull request #34258 from backstage/freben/mock-credentials-version
backend-test-utils: add version field to mock credentials
2026-05-19 09:24:41 +02:00
Fredrik Adelöw d325ee31d0 Merge pull request #34225 from backstage/fix/filter-predicate-mixed-operator-keys
fix(filter-predicates): reject operator keys mixed with other keys
2026-05-19 09:24:31 +02:00
Eric Peterson 828d3d4282 Put tool payload capture config under plugin namespace
Signed-off-by: Eric Peterson <ericpeterson@spotify.com>
2026-05-19 09:23:35 +02:00
benjdlambert 219cc05885 fix(create-app): remove disabled nav-item config that breaks custom sidebar
The nav-item extensions were disabled in the template config to prevent
duplicate rendering, but the custom sidebar already handles this via
nav.take(). After #33788 added filtering of disabled nav items from page
discovery, disabling them causes nav.take('page:catalog') to return
nothing, breaking the sidebar navigation.

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-19 09:08:02 +02:00
Patrik Oldsberg 5f14aba359 Merge pull request #34285 from backstage/rugvip/cimd-metadata-size-cap
auth-backend: cap CIMD metadata response size
2026-05-18 17:53:32 +02:00
Eric Peterson 0422010a37 Address valid review comments
Signed-off-by: Eric Peterson <ericpeterson@spotify.com>
2026-05-18 17:12:19 +02:00
Ben Lambert 07ec25de2c fix(catalog-backend): move generateStableHash out of shared util to fix Storybook build (#34284)
* fix(catalog-backend): move generateStableHash out of shared util to fix Storybook build

The util.ts file mixed Node.js-only code (createHash from node:crypto)
with pure constants. Since InMemoryCatalogClient reaches into
buildEntitySearch via a relative import, and buildEntitySearch imports
from util.ts, the node:crypto dependency leaked into Vite's browser
bundle causing the Storybook build to fail.

Signed-off-by: benjdlambert <ben@blam.sh>

* add changeset

Signed-off-by: benjdlambert <ben@blam.sh>

---------

Signed-off-by: benjdlambert <ben@blam.sh>
2026-05-18 16:57:26 +02:00