diff --git a/docs/README.md b/docs/README.md index 8331ee7290..9b0c003a59 100644 --- a/docs/README.md +++ b/docs/README.md @@ -139,6 +139,7 @@ FN-7088 links previously-unlinked first-class testing and baseline docs here so | [Lost-Work Tasks Incident (2026-05-23)](./incidents/2026-05-23-lost-work-tasks.md) | Incident catalog of 9 lost-work tasks from no-op finalize and reuse-handoff bugs | | [GitLab Parity Inventory (FN-7421)](./gitlab-parity-inventory.md) | Implementation map for first-class GitLab support: import, linked issue tracking, comments, auth/settings UI, CLI/extension, and Command Center surfaces to mirror or explicitly exclude | +| [Dashboard Theme & UI Plugin System Proposal (2026-07-01)](./proposals/2026-07-01-dashboard-theme-plugin-system.md) | Feasibility-spike proposal for a controlled dashboard theme/UI shell extension point sharing one backend source of truth | ## External Resources diff --git a/packages/dashboard/src/routes/register-auth-routes.ts b/packages/dashboard/src/routes/register-auth-routes.ts index e6dc418319..35a29ff173 100644 --- a/packages/dashboard/src/routes/register-auth-routes.ts +++ b/packages/dashboard/src/routes/register-auth-routes.ts @@ -265,7 +265,16 @@ export const registerAuthRoutes: ApiRouteRegistrar = (ctx) => { const url = new URL(trimmed); const searchCode = url.searchParams.get("code"); if (searchCode) { - return trimmed; + if (url.protocol === "http:" || url.protocol === "https:") { + return trimmed; + } + const normalized = new URLSearchParams(); + normalized.set("code", searchCode); + const searchState = url.searchParams.get("state"); + if (searchState) { + normalized.set("state", searchState); + } + return normalized.toString(); } const hash = url.hash.replace(/^#/, "").replace(/^\?/, "");