From 4a39cade982926f607b4606d0f8d92a807f4b0bf Mon Sep 17 00:00:00 2001
From: shivam <91240327+shivamhwp@users.noreply.github.com>
Date: Sun, 13 Sep 2026 21:25:17 +0530
Subject: [PATCH 01/10] fix(web): offer recovery from missing pages (#11314)
---
apps/web/src/routes/__root.tsx | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx
index 0831a922325e..63495ce5cd65 100644
--- a/apps/web/src/routes/__root.tsx
+++ b/apps/web/src/routes/__root.tsx
@@ -3,6 +3,7 @@ import { scopedProjectKey, scopeProjectRef } from "@t3tools/client-runtime/envir
import { squashAtomCommandFailure } from "@t3tools/client-runtime/state/runtime";
import {
Outlet,
+ Link,
redirect,
createRootRoute,
type ErrorComponentProps,
@@ -104,11 +105,27 @@ export const Route = createRootRoute({
},
component: RootRouteView,
errorComponent: RootRouteErrorView,
+ notFoundComponent: RootRouteNotFoundView,
head: () => ({
meta: [{ name: "title", content: APP_DISPLAY_NAME }],
}),
});
+function RootRouteNotFoundView() {
+ return (
+
+
+
Page not found
+
+ This link doesn't point to a page in {APP_DISPLAY_NAME}. Go home to choose a project or
+ start a thread.
+
+
}>Go home
+
+
+ );
+}
+
function RootRouteView() {
useEffect(() => installDesktopPasteAsText(window.desktopBridge, window), []);
const pathname = useLocation({ select: (location) => location.pathname });
From e6286839369a29d829aee3c64dd64ce39c626d2f Mon Sep 17 00:00:00 2001
From: shivam <91240327+shivamhwp@users.noreply.github.com>
Date: Sun, 13 Sep 2026 21:26:03 +0530
Subject: [PATCH 02/10] fix(web): retry startup after the server recovers
(#11291)
---
apps/web/src/routes/__root.tsx | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx
index 63495ce5cd65..982d81420445 100644
--- a/apps/web/src/routes/__root.tsx
+++ b/apps/web/src/routes/__root.tsx
@@ -9,6 +9,7 @@ import {
type ErrorComponentProps,
useLocation,
useNavigate,
+ useRouter,
} from "@tanstack/react-router";
import { CheckIcon, CopyIcon } from "lucide-react";
import { useEffect, useEffectEvent, useMemo, useRef, useState } from "react";
@@ -353,7 +354,8 @@ function HostedStaticEnvironmentBootstrap() {
return null;
}
-function RootRouteErrorView({ error, reset }: ErrorComponentProps) {
+function RootRouteErrorView({ error }: ErrorComponentProps) {
+ const router = useRouter();
const message = errorMessage(error);
// Router pathname rather than window.location: desktop uses hash history, where the window path is always "/".
const pathname = useLocation({ select: (location) => location.pathname });
@@ -376,7 +378,7 @@ function RootRouteErrorView({ error, reset }: ErrorComponentProps) {
{message}
-