# Skill: Testing > **Atelier source:** `domains/testing/` (first-principles + pyramid, > fixtures) > **Core principles:** C1 Correctness, C5 Reversibility > **BA.A mapping:** UAT is the citizen developer's RACI responsibility > **Consumer:** read this before submitting for UAT. ## First Principles (citizen-developer-relevant subset) - **Tests are independent.** Order doesn't matter; one test's setup doesn't break another's. - **Tests are deterministic.** No `Date.now()`, no `random()`, no network calls in unit tests. - **Edge cases are covered.** Empty, single, max, invalid — not just the happy path. - **A failing test names the problem.** The assertion message explains what failed and why, not just "assertion failed". - **The pyramid: unit → integration → e2e.** Most tests are unit; few are e2e; the middle is integration. Don't invert the pyramid. ## Agent-Checklist Triggers (§ Testing) - Tests are independent (order doesn't matter) - Tests are deterministic (no `Date.now()`, no `random()`) - Edge cases are covered (empty, single, max, invalid) - A failing test names the problem specifically ## How Nova Uses This Per the RACI matrix (`docs/raci.md`), the **Citizen Developer is Responsible for User Acceptance Testing (UAT)**. The platform provides the QA checks (policy, confidence, schema); you provide the UAT. The testing skill ensures your UAT meets production-grade standards. The W3.E per-env mandatory table requires `validation.e2eSuite` + `validation.loadTest` for `qa` environment submissions — the submission-readiness gate enforces this.