Problem
The readable-route migration intentionally replaced old query-param detail URLs with canonical path routes. The client parser no longer treats the old URLs as selected PR/issue detail routes, but those old paths still receive the SPA fallback and render a valid application surface instead of being explicitly rejected.
Retired URL shapes include:
/pulls/detail?provider=github&platform_host=github.com&repo_path=acme%2Fwidgets&number=42
/pulls/detail/files?provider=github&platform_host=github.com&repo_path=acme%2Fwidgets&number=42
/issues/detail?provider=github&platform_host=github.com&repo_path=acme%2Fwidgets&number=42
/focus/pr?provider=github&platform_host=github.com&repo_path=acme%2Fwidgets&number=42
/focus/issue?provider=github&platform_host=github.com&repo_path=acme%2Fwidgets&number=42
Expected behavior
These legacy detail URL shapes should be fully retired. Do not redirect them, canonicalize them, or preserve backwards compatibility. They should stop working as usable app routes.
Suggested implementation
Add an explicit blocklist for the retired path shapes before the generic SPA fallback serves index.html, or add an equivalent client-side not-found/rejection path that makes it unambiguous the URL is unsupported.
Keep the canonical routes as the only supported detail routes, for example:
/pulls/github/acme/widgets/42
/pulls/github/acme/widgets/42/files
/issues/github/acme/widgets/42
/focus/pulls/github/acme/widgets/42
/focus/issues/github/acme/widgets/42
Acceptance criteria
- Old query-param PR detail URLs no longer render a usable app route.
- Old query-param issue detail URLs no longer render a usable app route.
- Old query-param focus detail URLs no longer render a usable app route.
- Canonical path-based PR, issue, files, and focus routes continue to work.
- Tests cover direct browser loads, not only client-side navigation.
Problem
The readable-route migration intentionally replaced old query-param detail URLs with canonical path routes. The client parser no longer treats the old URLs as selected PR/issue detail routes, but those old paths still receive the SPA fallback and render a valid application surface instead of being explicitly rejected.
Retired URL shapes include:
/pulls/detail?provider=github&platform_host=github.com&repo_path=acme%2Fwidgets&number=42/pulls/detail/files?provider=github&platform_host=github.com&repo_path=acme%2Fwidgets&number=42/issues/detail?provider=github&platform_host=github.com&repo_path=acme%2Fwidgets&number=42/focus/pr?provider=github&platform_host=github.com&repo_path=acme%2Fwidgets&number=42/focus/issue?provider=github&platform_host=github.com&repo_path=acme%2Fwidgets&number=42Expected behavior
These legacy detail URL shapes should be fully retired. Do not redirect them, canonicalize them, or preserve backwards compatibility. They should stop working as usable app routes.
Suggested implementation
Add an explicit blocklist for the retired path shapes before the generic SPA fallback serves
index.html, or add an equivalent client-side not-found/rejection path that makes it unambiguous the URL is unsupported.Keep the canonical routes as the only supported detail routes, for example:
/pulls/github/acme/widgets/42/pulls/github/acme/widgets/42/files/issues/github/acme/widgets/42/focus/pulls/github/acme/widgets/42/focus/issues/github/acme/widgets/42Acceptance criteria