Implement phased modernization infrastructure for transitioning from multi-page legacy routing to SPA portal-shell architecture, plus post-delivery hardening fixes for policy loading, fallback consistency, and governance drift detection. Key changes: - Add route contract enrichment with scope/visibility/compatibility policies - Canonical 302 redirects from legacy direct-entry to /portal-shell/ routes - Asset readiness enforcement and runtime fallback retirement for in-scope routes - Shared feature-flag helpers (env > config > default) replacing duplicated _to_bool - Defensive copy for lru_cached policy payloads preventing mutation corruption - Unified retired-fallback response helper across app and blueprint routes - Frontend/backend route-contract cross-validation in governance gates - Shell CSS token fallback values for routes rendered outside shell scope - Local-safe .env.example defaults with production recommendation comments - Legacy contract fallback warning logging and single-hop redirect optimization Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
167 lines
5.4 KiB
JSON
167 lines
5.4 KiB
JSON
{
|
|
"change": "full-modernization-architecture-blueprint",
|
|
"generated_at": "2026-02-12T00:00:00Z",
|
|
"routes": [
|
|
{
|
|
"route": "/wip-overview",
|
|
"route_id": "wip-overview",
|
|
"scope": "in-scope",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/wip-overview",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/wip-detail",
|
|
"route_id": "wip-detail",
|
|
"scope": "in-scope",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/wip-detail",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/hold-overview",
|
|
"route_id": "hold-overview",
|
|
"scope": "in-scope",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/hold-overview",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/hold-detail",
|
|
"route_id": "hold-detail",
|
|
"scope": "in-scope",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/hold-detail",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/hold-history",
|
|
"route_id": "hold-history",
|
|
"scope": "in-scope",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/hold-history",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/resource",
|
|
"route_id": "resource",
|
|
"scope": "in-scope",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/resource",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/resource-history",
|
|
"route_id": "resource-history",
|
|
"scope": "in-scope",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/resource-history",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/qc-gate",
|
|
"route_id": "qc-gate",
|
|
"scope": "in-scope",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/qc-gate",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/job-query",
|
|
"route_id": "job-query",
|
|
"scope": "in-scope",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/job-query",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/tmtt-defect",
|
|
"route_id": "tmtt-defect",
|
|
"scope": "in-scope",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/tmtt-defect",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/admin/pages",
|
|
"route_id": "admin-pages",
|
|
"scope": "in-scope",
|
|
"render_mode": "external",
|
|
"owner": "frontend-platform-admin",
|
|
"visibility_policy": "admin_only",
|
|
"canonical_shell_path": "/portal-shell/admin/pages",
|
|
"rollback_strategy": "external_route_reversion"
|
|
},
|
|
{
|
|
"route": "/admin/performance",
|
|
"route_id": "admin-performance",
|
|
"scope": "in-scope",
|
|
"render_mode": "external",
|
|
"owner": "frontend-platform-admin",
|
|
"visibility_policy": "admin_only",
|
|
"canonical_shell_path": "/portal-shell/admin/performance",
|
|
"rollback_strategy": "external_route_reversion"
|
|
},
|
|
{
|
|
"route": "/tables",
|
|
"route_id": "tables",
|
|
"scope": "deferred",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/tables",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/excel-query",
|
|
"route_id": "excel-query",
|
|
"scope": "deferred",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/excel-query",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/query-tool",
|
|
"route_id": "query-tool",
|
|
"scope": "deferred",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/query-tool",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
},
|
|
{
|
|
"route": "/mid-section-defect",
|
|
"route_id": "mid-section-defect",
|
|
"scope": "deferred",
|
|
"render_mode": "native",
|
|
"owner": "frontend-mes-reporting",
|
|
"visibility_policy": "released_or_admin",
|
|
"canonical_shell_path": "/portal-shell/mid-section-defect",
|
|
"rollback_strategy": "fallback_to_legacy_route"
|
|
}
|
|
]
|
|
}
|