# Website Guardrails (Mandatory) This document defines architecture guardrails that must be enforced via tests + ESLint. Authoritative contract: [`WEBSITE_CONTRACT.md`](docs/architecture/website/WEBSITE_CONTRACT.md:1). ## 1) RSC boundary guardrails Fail CI if any `apps/website/app/**/page.tsx`: - imports from `apps/website/lib/view-models/*` - imports from Presenter code (presenters live colocated with ViewModels) - calls `Intl.*` or `toLocale*` - performs sorting/filtering (`sort`, `filter`, `reduce`) beyond trivial null checks ## 2) Template purity guardrails Fail CI if any `apps/website/templates/**`: - imports from `apps/website/lib/view-models/*` - imports from presenter code (presenters live colocated with ViewModels) - imports from `apps/website/lib/display-objects/*` - calls `Intl.*` or `toLocale*` Templates accept ViewData only. ## 3) Display Object guardrails Fail CI if any `apps/website/lib/display-objects/**`: - calls `Intl.*` or `toLocale*` Display Objects must be deterministic.