Backstage Weekly ยท Issue 137

v1.52.0-next.0, Catalog Stitching Fixes, and Engineering Org Opacity

Backstage v1.52.0-next.0 removes immediate-mode catalog stitching and fixes a stitch-queue race condition, with catalog reliability the headline. Plus why organizational opacity, not model limits, is what blocks AI agents.

David Tuite
ยท

News

๐Ÿ‘‹ Welcome to Backstage Weekly 137.

TL;DR

v1.52.0-next.0, the first pre-release for the June 16 stable, was cut on May 26 - and for operators the headline is catalog reliability: it removes the immediate-mode stitching strategy and fixes a stitch-queue race condition. It also bundles the catalog export and queryEntities work we covered in Issue 136, both now confirmed for the stable, plus a new totalItems option for skipping the entity count. On the Roadie blog, Jian Reis examines how organizational opacity blocks AI agents and why a well-maintained catalog is the first line of defense.

v1.52.0-next.0, Catalog Stitching Fixes, and Engineering Org Opacity

v1.52.0-next.0 is out

Backstage v1.52.0-next.0 was tagged on May 26, the first pre-release build ahead of the v1.52.0 stable window on June 16. It rolls up the streaming catalog export and the queryEntities list/count split we covered in Issue 136 - both now confirmed for the stable. The release also adds a totalItems parameter to CatalogApi.queryEntities and the /entities/by-query endpoint that goes a step further: where the Issue 136 change ran the list and count queries concurrently, totalItems: 'exclude' skips the count entirely for callers that only need the entity list - useful for paginated views that would otherwise pay for a full filtered-dataset scan on every page load.

The most substantial new change is the removal of immediate-mode stitching. PR #34193 by freben drops the strategy that ran stitching synchronously in-process on entity writes. All stitching now runs through the deferred worker queue. If your catalog configuration explicitly sets stitchingStrategy: 'immediate', that option no longer does anything and should be removed. For most operators this change is invisible - immediate mode has been deprecated since v1.47 - but it's worth checking before upgrading.

PR #34339 by freben fixes a race condition in the stitch queue: row locks were released before timestamp bumps completed, allowing duplicate stitching claims on the same entity. A related improvement makes pending re-stitches immediately eligible for pickup once a first stitch completes, reducing the window where a re-stitch could be missed under load.

PR #34394 by benjdlambert adds an app.disablePublicEntryPoint config option to the app-backend plugin. Setting it to true disables the experimental behavior that automatically serves an unauthenticated sign-in page when a dist/public directory exists in the app bundle. Teams that have explicitly opted into this feature don't need to change anything.

From the Roadie blog

We published What Your Engineering Organisation Doesn't Know About Itself on May 27. Jian Reis extends a dekodiert.de argument about how AI agent failures often trace back to organizational opacity rather than model limitations.

The post taxonomizes organizational knowledge into three groups: undocumented-but-knowable (21 items, including service ownership, deployment cadence, and incident history), tacit (7 items, including architectural intent and team conventions), and politically concealed (4 items). The first group is the largest and the most tractable for a platform team.

The piece argues that a well-maintained service catalog directly addresses the undocumented-but-knowable layer: entity graphs capture ownership, Tech Insights scores organizational legibility, and operational annotations - SLO targets, runbook links, deployment state - give AI agents the runtime context to make sound suggestions rather than locally correct but globally invalid ones.

The catalog reliability work landing in v1.52.0-next.0 this week connects directly to that argument. A stale or inconsistently stitched catalog propagates the opacity problem instead of reducing it. Better stitching semantics and faster queries are prerequisites for using the catalog as a reliable AI context source in production.

Read it on the Roadie blog.

Community

๐Ÿ”’ PR #34398 by robingileborg changes how Backstage treats Bitbucket usernames: they are no longer redacted as secrets in logs. Passwords and tokens remain redacted; this fix removes unintentional noise when debugging Bitbucket authentication failures.

๐Ÿงฉ PR #34264 by jabrks adds a NumberField component to @backstage/ui. It mirrors the TextField pattern using react-aria-components and supports min/max/step bounds, increment/decrement controls, an optional icon, and inline validation feedback. Approved by cdedreuille and Naycon; targeting v1.52.0.

๐Ÿ“š PR #34406 by deiga updates the official Backstage documentation to recommend @react-hookz/web over react-use for hooks in plugin development. react-use has had maintenance gaps; the change reduces risk for plugin authors starting new projects.

๐Ÿ”ง PR #34421 by freben increases MySQL connect and pool timeouts in @backstage/backend-test-utils. The fix addresses test flakiness in slow CI environments where MySQL initialization time caused connection failures before the test suite started.

What shipped

  • @backstage/plugin-catalog-backend - immediate-mode stitching removed; deferred queue only from v1.52.0 (#34193, freben)
  • @backstage/plugin-catalog-backend - stitch queue race condition fixed; overlapping stitches for same entity prevented (#34339, freben)
  • @backstage/plugin-catalog-backend - totalItems option added to queryEntities and /entities/by-query endpoint
  • @backstage/app-backend - app.disablePublicEntryPoint config option added (#34394, benjdlambert)
  • @backstage/ui - NumberField component added (#34264, jabrks)
  • v1.52.0-next.0 released May 26 (full changelog )