34 lines
1020 B
Markdown
34 lines
1020 B
Markdown
# 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.
|