ESLint boundaries
ESLint owns frontend architecture gates.
- Atomic layers cannot reverse-import higher layers.
src/features/**is migration debt, not an allowed target layer.- New imports from
src/features/**must fail, not warn. - Existing
src/features/**files must shrink toward atomic UI, Nanostores UI stores, orsrc/lib/*-client.tswrappers. src/features/**/*.tsxUI is blocked; promote UI to the atomic layer.- Business-flow state must use Nanostores, not React local/context state hooks.
- Frontend must not recompute RBAC, reservation transition, payment amount, settlement readiness, discount, subsidy, or workflow decisions. Those fields come from backend contracts.
- Reservation/payment/settlement E2E runs cannot close a checklist item while
the route still imports
src/features/**or computes backend-owned decisions in browser code. - Features cannot bypass generated contract clients.
- Direct Supabase SDK access is restricted to approved wrappers.
npm,npx,yarn, andbunflows are blocked by scripts and CI.
Frontend edits are handled by the assigned frontend worker, not by backend migration work.