fix: rename the Projects org settings URL to /settings/projects - #4739
Conversation
The org settings page at /orgs/:organizationSlug/settings/runtime-updates was rebuilt into a general "Projects" page, but its URL still described only the runtime-update banner at the top of it. Move the page to /orgs/:organizationSlug/settings/projects and rename the path helper and page component to match. The old URL keeps working: a redirect-only loader at the old segment sends requests to the new path, preserving the org slug and any query string. The `/_/` deeplink table gains a `projects` key and keeps `runtime-updates` as an alias for the same page, so links already shared under either name resolve. Names that describe the runtime-update feature rather than the URL (projectRuntimeUpdates.server, organizationHasProjectRuntimeUpdate, ProjectRuntimeRow) are left alone, since they are still accurate. Co-Authored-By: Claude <noreply@anthropic.com>
|
Observability mapAs of 19/100 over 445 measured of 462 entry points (base 19, no change) What this PR changed
1 entries removed FIX FIRST
AUDIT 3 of 50 sensitive mutations record an actor. 47 without one. What the score is made ofThe score and findings here are report-only and never gate the merge. Separately, a required test suite keeps this tool's symbol and route lists in sync with the code they name, and can fail a pull request that renames or removes a symbol they reference, or that adds the first route with a segment they anticipate. Each failure names the list to edit. The rules and their reasons: internal-packages/observability-map/README.md. |
Co-Authored-By: Claude <noreply@anthropic.com>
Requested by Chris Arderne · Slack thread
What changed
Before: the org settings page that lists projects lived at
/orgs/:organizationSlug/settings/runtime-updates. The page had already been rebuilt into a general "Projects" page — it is titled "Projects" and the side-menu item is "Projects" — but the URL still described only the runtime-update banner that sits at the top of it.After: the page lives at
/orgs/:organizationSlug/settings/projects. The old settings URL/orgs/:organizationSlug/settings/runtime-updatesstill works: it redirects to the new one, keeping the org slug and any query string.How: the route folder was renamed from
_app.orgs.$organizationSlug.settings.runtime-updatesto_app.orgs.$organizationSlug.settings.projects(the flat-route filename is the URL segment). The path helperorganizationRuntimeUpdatesPathbecameorganizationProjectsPath, matching its siblingsorganizationTeamPath/organizationRolesPath/organizationSsoPath, and the page component was renamedRuntimeUpdatesPage→ProjectsPage. The redirect at the old segment is a redirect-only loader following the convention already used byorgs.$organizationSlug.team.ts,orgs.$organizationSlug.usage.tsandorgs.$organizationSlug.billing.ts. The/_/deeplink table gains aprojectskey, so/_/projectslands on the new URL. There is deliberately noruntime-updatesdeeplink alias:/_/runtime-updatesis not a recognised key, so it falls through to the generic unknown-deeplink behaviour and redirects to the caller's default environment dashboard, exactly like any other unrecognised/_/path. The redirect for the old settings URL is a separate thing and is unaffected.Names that describe the runtime-update feature rather than the URL —
projectRuntimeUpdates.server,organizationHasProjectRuntimeUpdate, theProjectRuntimeRowtype — are unchanged, since they are still accurate.✅ Checklist
Testing
pnpm turbo run typecheck --filter webapp— passes (20/20 tasks).pnpm --filter webapp run lint— clean.pnpm --filter webapp exec vitest run app/utils/deeplinkPages.test.ts— 27/27 pass.pnpm run format/pnpm run knip— clean (ran via the pre-push hook).The deeplink unit test covers
/_/projectsresolving to the projects page, and pins thatruntime-updatesis absent from the org deeplink table so the alias cannot creep back in.Changelog
The org settings "Projects" page moved from
/settings/runtime-updatesto/settings/projects. The old settings URL redirects to the new one.Screenshots
No visual change — the page itself is untouched, only its URL.
💯