···88 * Use **GitHub Issues** (not Linear).
99 * **PRs:** Always create for review; never push to main directly.
1010 * **Deploy:** Automated via Actions (Backend: Fly.io, Frontend: Cloudflare Pages). Never deploy locally.
1111-* **ATProto Namespaces:** namespaces are environment-aware via settings (e.g., `fm.plyr.dev`, `fm.plyr`). **Never** hardcode outside of scripts
1111+* **ATProto NSIDs:** namespaces are environment-aware via settings (e.g., `fm.plyr.dev` (dev), `fm.plyr` (prod)). **Never** hardcode outside of scripts. these are fully-qualified hostname in Reverse Domain-Name Order, not urls.
1212* **Auth Security:** Session IDs live in HttpOnly cookies. **Never** touch `localStorage` for auth.
1313* **Async Everywhere:** Never block the event loop. Use `anyio`/`aiofiles`.
1414* **Type Hints:** Required everywhere (Python & TypeScript).