diff --git a/apps/pwa/src/components/CalendarShell.test.tsx b/apps/pwa/src/components/CalendarShell.test.tsx
index e5a61f5..33c4497 100644
--- a/apps/pwa/src/components/CalendarShell.test.tsx
+++ b/apps/pwa/src/components/CalendarShell.test.tsx
@@ -217,4 +217,14 @@ describe('CalendarShell — CAL-03 render smoke', () => {
renderWithClient()
// Error renders asynchronously after query settles
})
+
+ it('renders dead-end AuthSplash when redirect guard is already exhausted (D-11)', async () => {
+ // Simulate the one-shot guard having already fired (prior redirect attempt)
+ sessionStorage.setItem('familysync.loginRedirectAttempted', '1')
+ ;(fetchMe as Mock).mockRejectedValue(new Error('401'))
+ renderWithClient()
+ // After the auth error and the guard is exhausted, dead-end copy must be visible
+ const tapToRetry = await screen.findByText(/Tap here to try again/i)
+ expect(tapToRetry).toBeDefined()
+ })
})