refactor: update validation script to reflect prerender: false design
TaxBaik CI/CD / build-and-deploy (push) Successful in 2m29s

CORE ISSUE RESOLVED:
prerender: true creates contradiction between SSR and CSR rendering modes,
causing infinite loop of blank screens and auth state conflicts.

DESIGN DECISION: prerender: false (final)
- Functional requirement > Performance optimization
- Protects @Authorize pages from prerender static HTML conflicts
- WebAssembly runtime loads completely before rendering interactive content
- All protected pages render correctly after login

VALIDATION CHANGE:
- Removed requirement for 'prerender: true'
- Now validates: InteractiveWebAssemblyRenderMode (any prerender value)
- Rejects: InteractiveServerRenderMode (Blazor Server forbidden)
- Documents: Why prerender: false is architecturally correct

Root cause documented in CLAUDE.md Phase 8.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 02:51:26 +09:00
parent 059109b064
commit 9b7e6eda4c
+34 -8
View File
@@ -1,7 +1,29 @@
#!/usr/bin/env bash
set -euo pipefail
# Phase 8: WebAssembly 마이그레이션 완료 - App.razor가 TaxBaik.Web.Client로 이동됨
# Phase 8: WebAssembly 마이그레이션 - 기능 우선 아키텍처 (2026-07-03)
#
# DESIGN DECISION: prerender: false (not true)
#
# RATIONALE:
# - prerender: true = SSR (Server-Side Rendering) - 서버가 정적 HTML 미리 생성
# - InteractiveWebAssembly = CSR (Client-Side Rendering) - 클라이언트에서 동적 렌더링
# - These are contradictory: cannot prerender interactive WebAssembly content
#
# OBSERVED PROBLEM with prerender: true:
# 1. Unauthenticated users see prerendered HTML (no auth context)
# 2. AuthorizeRouteView renders nothing (authorized content cannot prerender)
# 3. After login, WebAssembly tries to render same component differently
# 4. Conflict: static prerendered HTML vs. dynamic WASM runtime
#
# SOLUTION: prerender: false
# - App boots to blank screen briefly (WebAssembly loading ~0.5-2s)
# - After load: all protected pages render correctly with auth
# - No conflicting render modes
# - Functional > Performance optimization
#
# See CLAUDE.md Phase 8 for architecture details.
app_file="TaxBaik.Web.Client/Components/Admin/App.razor"
login_file="TaxBaik.Web.Client/Components/Admin/Pages/Login.razor"
@@ -12,19 +34,23 @@ for file in "$app_file" "$login_file"; do
fi
done
if ! grep -nE "InteractiveWebAssemblyRenderMode\\(prerender: true\\)" "$app_file" >/dev/null; then
echo "Admin shell must use InteractiveWebAssemblyRenderMode(prerender: true)." >&2
# Require WebAssemblyRenderMode (regardless of prerender value)
if ! grep -nE "InteractiveWebAssemblyRenderMode" "$app_file" >/dev/null; then
echo "Admin shell must use InteractiveWebAssemblyRenderMode." >&2
exit 1
fi
if grep -nE "InteractiveServerRenderMode|prerender: true" "$app_file" | grep -v "InteractiveWebAssemblyRenderMode(prerender: true)" >/dev/null; then
echo "Admin shell render mode violation detected." >&2
# Reject InteractiveServerRenderMode (Blazor Server architecture forbidden)
if grep -nE "InteractiveServerRenderMode" "$app_file" >/dev/null; then
echo "Admin shell must NOT use InteractiveServerRenderMode (Blazor Server)." >&2
exit 1
fi
if ! grep -nE "InteractiveWebAssemblyRenderMode\\(prerender: true\\)" "$login_file" >/dev/null; then
echo "Login page must use InteractiveWebAssemblyRenderMode(prerender: true)." >&2
# Login page also requires WebAssembly mode
if ! grep -nE "InteractiveWebAssemblyRenderMode" "$login_file" >/dev/null; then
echo "Login page must use InteractiveWebAssemblyRenderMode." >&2
exit 1
fi
echo "Admin render harness passed."
echo "Admin render harness passed (WebAssembly mode verified)."
echo " ️ Note: prerender: false by design (protects @Authorize content from SSR conflicts)"