diff --git a/packages/e2e/react-router/v6/cypress/e2e/shared/fog-of-war.cy.ts b/packages/e2e/react-router/v6/cypress/e2e/shared/fog-of-war.cy.ts
new file mode 100644
index 000000000..24dd01824
--- /dev/null
+++ b/packages/e2e/react-router/v6/cypress/e2e/shared/fog-of-war.cy.ts
@@ -0,0 +1,5 @@
+import { testFogOfWar } from 'e2e-shared/specs/react-router/fog-of-war.cy'
+
+testFogOfWar({
+ path: '/fog-of-war'
+})
diff --git a/packages/e2e/react-router/v6/src/react-router.tsx b/packages/e2e/react-router/v6/src/react-router.tsx
index 702acce03..c2c1c0e89 100644
--- a/packages/e2e/react-router/v6/src/react-router.tsx
+++ b/packages/e2e/react-router/v6/src/react-router.tsx
@@ -41,6 +41,8 @@ const router = createBrowserRouter(
+
+
diff --git a/packages/e2e/react-router/v6/src/routes/fog-of-war._index.tsx b/packages/e2e/react-router/v6/src/routes/fog-of-war._index.tsx
new file mode 100644
index 000000000..72e330d8a
--- /dev/null
+++ b/packages/e2e/react-router/v6/src/routes/fog-of-war._index.tsx
@@ -0,0 +1,5 @@
+import { FogOfWarStartPage } from 'e2e-shared/specs/react-router/fog-of-war'
+
+export default function FogOfWarStart() {
+ return
+}
diff --git a/packages/e2e/react-router/v6/src/routes/fog-of-war.result.tsx b/packages/e2e/react-router/v6/src/routes/fog-of-war.result.tsx
new file mode 100644
index 000000000..a1ca1acaf
--- /dev/null
+++ b/packages/e2e/react-router/v6/src/routes/fog-of-war.result.tsx
@@ -0,0 +1,3 @@
+import { FogOfWarResultPage } from 'e2e-shared/specs/react-router/fog-of-war'
+
+export default FogOfWarResultPage
diff --git a/packages/e2e/react-router/v7/app/routes.ts b/packages/e2e/react-router/v7/app/routes.ts
index d55ccfbc0..f2acb5ecd 100644
--- a/packages/e2e/react-router/v7/app/routes.ts
+++ b/packages/e2e/react-router/v7/app/routes.ts
@@ -24,6 +24,9 @@ export default [
route('/form/useQueryStates', './routes/form.useQueryStates.tsx'),
route('/referential-stability/useQueryState', './routes/referential-stability.useQueryState.tsx'),
route('/referential-stability/useQueryStates', './routes/referential-stability.useQueryStates.tsx'),
+ route('/fog-of-war', './routes/fog-of-war._index.tsx'),
+ route('/fog-of-war/result', './routes/fog-of-war.result.tsx'),
+
route('/render-count/:hook/:shallow/:history/:startTransition/no-loader', './routes/render-count.$hook.$shallow.$history.$startTransition.no-loader.tsx'),
route('/render-count/:hook/:shallow/:history/:startTransition/sync-loader', './routes/render-count.$hook.$shallow.$history.$startTransition.sync-loader.tsx'),
route('/render-count/:hook/:shallow/:history/:startTransition/async-loader', './routes/render-count.$hook.$shallow.$history.$startTransition.async-loader.tsx'),
diff --git a/packages/e2e/react-router/v7/app/routes/fog-of-war._index.tsx b/packages/e2e/react-router/v7/app/routes/fog-of-war._index.tsx
new file mode 100644
index 000000000..72e330d8a
--- /dev/null
+++ b/packages/e2e/react-router/v7/app/routes/fog-of-war._index.tsx
@@ -0,0 +1,5 @@
+import { FogOfWarStartPage } from 'e2e-shared/specs/react-router/fog-of-war'
+
+export default function FogOfWarStart() {
+ return
+}
diff --git a/packages/e2e/react-router/v7/app/routes/fog-of-war.result.tsx b/packages/e2e/react-router/v7/app/routes/fog-of-war.result.tsx
new file mode 100644
index 000000000..a1ca1acaf
--- /dev/null
+++ b/packages/e2e/react-router/v7/app/routes/fog-of-war.result.tsx
@@ -0,0 +1,3 @@
+import { FogOfWarResultPage } from 'e2e-shared/specs/react-router/fog-of-war'
+
+export default FogOfWarResultPage
diff --git a/packages/e2e/react-router/v7/cypress/e2e/shared/fog-of-war.cy.ts b/packages/e2e/react-router/v7/cypress/e2e/shared/fog-of-war.cy.ts
new file mode 100644
index 000000000..24dd01824
--- /dev/null
+++ b/packages/e2e/react-router/v7/cypress/e2e/shared/fog-of-war.cy.ts
@@ -0,0 +1,5 @@
+import { testFogOfWar } from 'e2e-shared/specs/react-router/fog-of-war.cy'
+
+testFogOfWar({
+ path: '/fog-of-war'
+})
diff --git a/packages/e2e/remix/app/routes/fog-of-war._index.tsx b/packages/e2e/remix/app/routes/fog-of-war._index.tsx
new file mode 100644
index 000000000..72e330d8a
--- /dev/null
+++ b/packages/e2e/remix/app/routes/fog-of-war._index.tsx
@@ -0,0 +1,5 @@
+import { FogOfWarStartPage } from 'e2e-shared/specs/react-router/fog-of-war'
+
+export default function FogOfWarStart() {
+ return
+}
diff --git a/packages/e2e/remix/app/routes/fog-of-war.result.tsx b/packages/e2e/remix/app/routes/fog-of-war.result.tsx
new file mode 100644
index 000000000..a1ca1acaf
--- /dev/null
+++ b/packages/e2e/remix/app/routes/fog-of-war.result.tsx
@@ -0,0 +1,3 @@
+import { FogOfWarResultPage } from 'e2e-shared/specs/react-router/fog-of-war'
+
+export default FogOfWarResultPage
diff --git a/packages/e2e/remix/cypress/e2e/shared/fog-of-war.cy.ts b/packages/e2e/remix/cypress/e2e/shared/fog-of-war.cy.ts
new file mode 100644
index 000000000..24dd01824
--- /dev/null
+++ b/packages/e2e/remix/cypress/e2e/shared/fog-of-war.cy.ts
@@ -0,0 +1,5 @@
+import { testFogOfWar } from 'e2e-shared/specs/react-router/fog-of-war.cy'
+
+testFogOfWar({
+ path: '/fog-of-war'
+})
diff --git a/packages/e2e/shared/specs/react-router/fog-of-war.cy.ts b/packages/e2e/shared/specs/react-router/fog-of-war.cy.ts
new file mode 100644
index 000000000..15e2dee39
--- /dev/null
+++ b/packages/e2e/shared/specs/react-router/fog-of-war.cy.ts
@@ -0,0 +1,12 @@
+import { createTest } from '../../create-test'
+
+export const testFogOfWar = createTest('Fog of War', ({ path }) => {
+ it('should navigate to the result page', () => {
+ cy.visit(path)
+ cy.contains('#hydration-marker', 'hydrated').should('be.hidden')
+ cy.get('#set').click()
+ cy.get('#navigate').click()
+ cy.location('pathname').should('eq', `${path}/result`)
+ cy.get('#result').should('have.text', 'pass')
+ })
+})
diff --git a/packages/e2e/shared/specs/react-router/fog-of-war.tsx b/packages/e2e/shared/specs/react-router/fog-of-war.tsx
new file mode 100644
index 000000000..3a308982c
--- /dev/null
+++ b/packages/e2e/shared/specs/react-router/fog-of-war.tsx
@@ -0,0 +1,22 @@
+import { useQueryState } from 'nuqs'
+import { useLink } from '../../components/link'
+
+export function FogOfWarStartPage({ resultHref }: { resultHref: string }) {
+ const [, setState] = useQueryState('test')
+ // const [, setState] = useState('init')
+ const Link = useLink()
+ return (
+ <>
+
+
+ Navigate
+
+ >
+ )
+}
+
+export function FogOfWarResultPage() {
+ return
pass
+}