diff --git a/docs/testing/pr-testing-guide.md b/archive/2026-06-test-cleanup/docs/testing/pr-testing-guide.md
similarity index 100%
rename from docs/testing/pr-testing-guide.md
rename to archive/2026-06-test-cleanup/docs/testing/pr-testing-guide.md
diff --git a/docs/testing/test-organization.md b/archive/2026-06-test-cleanup/docs/testing/test-organization.md
similarity index 100%
rename from docs/testing/test-organization.md
rename to archive/2026-06-test-cleanup/docs/testing/test-organization.md
diff --git a/docs/testing/testing-architecture.md b/archive/2026-06-test-cleanup/docs/testing/testing-architecture.md
similarity index 100%
rename from docs/testing/testing-architecture.md
rename to archive/2026-06-test-cleanup/docs/testing/testing-architecture.md
diff --git a/docs/testing/README.md b/docs/testing/README.md
new file mode 100644
index 00000000..3f05e414
--- /dev/null
+++ b/docs/testing/README.md
@@ -0,0 +1,73 @@
+# Testing
+
+GraphDone has one reproducible test entry — the **unified harness** — plus the
+focused **smoke gate** that must pass before any "it works" claim.
+
+```bash
+TEST_URL=http://localhost:3127 npm run test:smoke # THE GATE (blocking, ~30s)
+npm run test:unified # full battery → dual report
+npm run test:unified:smoke # fast subset (unit + gate + a focused e2e)
+npm run test:unified:open # full battery, then open the HTML report
+npm run test:unified:lib # the harness's own unit tests (node --test)
+```
+
+## Dual output (one run, two artifacts)
+The harness writes to `test-artifacts/unified/`:
+- **`report.html`** — human-readable: per-sequence pass/warn/fail with embedded
+ `
` screenshots and `