Conventions for validating PrairieLearn Express request parameters, query strings, bodies, and `__action` forms with Zod.
Conventions for writing tRPC routers and procedures.
Use when creating a new PrairieLearn element or changing an element's runtime dependencies, scripts, styles, or bundled assets.
Use when changing or reviewing PrairieLearn element question.html contracts, including schema-level attributes/children, Python semantic validation, docs, and AI HTML validation support lists.
Write end-to-end browser tests using Playwright.
Backwards compatibility rules when changing element controllers in `apps/prairielearn/elements/`.
Dealing with groups and teams in PrairieLearn, and confusion about table/column/variable names.