Parent
#918 — 🗺️ [wayfinder] Error page 준수 (결정 D4·D7 / 리스크 R5)
What to build
admin 트리는 shell보다 상태가 나쁘다. admin 페이지가 throw하거나 notFound()를 부르면 루트 경계로 튀어 AdminAppShell 사이드바가 사라지는데, ConditionalNav도 /admin 경로에서 자기억제하기 때문에 사이드바도 레거시 nav도 없는 완전 백지가 된다. 운영자가 에러 하나로 아무 데도 못 가는 상태에 빠진다.
admin 세그먼트에 에러 경계와 not-found 경계를 두어 AdminAppShell 사이드바가 유지되게 한다. (shell)과 같은 패턴·같은 shared/ErrorState·EmptyState 조합을 쓴다.
admin은 내부 도구이므로 i18n 대상이 아니다 — 현 admin의 영문 하드코딩 관행을 따른다.
admin은 shared 컴포넌트를 쓸 수 있는 자연스러운 첫 지렛대이기도 하다. 다만 기존 AdminEmptyState·CatalogEmptyState·profile EmptyState 3계열을 shared로 수렴시키는 작업은 이번 스코프가 아니다(별도 티켓).
Acceptance criteria
Blocked by
권장: #1056((shell) 경계) 이후에 착수. 거기서 R1(@modal parallel route 회귀)이 먼저 드러나며, 해소책이 필요했다면 이 슬라이스에도 같은 처리가 필요하다.
Parent
#918 — 🗺️ [wayfinder] Error page 준수 (결정 D4·D7 / 리스크 R5)
What to build
admin 트리는 shell보다 상태가 나쁘다. admin 페이지가 throw하거나
notFound()를 부르면 루트 경계로 튀어AdminAppShell사이드바가 사라지는데,ConditionalNav도/admin경로에서 자기억제하기 때문에 사이드바도 레거시 nav도 없는 완전 백지가 된다. 운영자가 에러 하나로 아무 데도 못 가는 상태에 빠진다.admin 세그먼트에 에러 경계와 not-found 경계를 두어
AdminAppShell사이드바가 유지되게 한다. (shell)과 같은 패턴·같은shared/ErrorState·EmptyState조합을 쓴다.admin은 내부 도구이므로 i18n 대상이 아니다 — 현 admin의 영문 하드코딩 관행을 따른다.
admin은
shared컴포넌트를 쓸 수 있는 자연스러운 첫 지렛대이기도 하다. 다만 기존AdminEmptyState·CatalogEmptyState·profileEmptyState3계열을 shared로 수렴시키는 작업은 이번 스코프가 아니다(별도 티켓).Acceptance criteria
AdminAppShell사이드바가 유지된 채 에러가 렌더된다 — 실제 throw로 재현 확인notFound()가 호출됐을 때도 사이드바가 유지된다shared/ErrorState/EmptyState조합으로 만든다 (하드코딩 hex 0)AdminLayout은 세션 조회를 try/catch로 감싸 인증 실패 시 chrome 없이 children만 렌더하는 기존 동작이 있다. 새 경계가 이와 중첩되어 인증 실패가 에러 화면으로 새 나가지 않는지 확인 — 비로그인·비-admin 세션으로/admin/*접근 시 기존/admin/login리다이렉트 동작이 그대로여야 한다/admin/login자체는 여전히 chrome 없이 뜬다 (리다이렉트 루프 방지 로직 회귀 금지)Blocked by
권장: #1056((shell) 경계) 이후에 착수. 거기서 R1(@modal parallel route 회귀)이 먼저 드러나며, 해소책이 필요했다면 이 슬라이스에도 같은 처리가 필요하다.