# 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.