--- title: Testing Strategy created: 2026-07-09 updated: 2026-09-08 type: concept tags: [infrastructure] confidence: high source_files: - docs/TESTING.md - docs/CONTRIBUTOR_VALIDATION.md - Makefile - .github/workflows/ci.yml - integrity-dashboard/package.json - integrity-dashboard/playwright.config.ts - integrity-dashboard/e2e/test-utils.ts --- The full package, browser, and hosted Continuous Integration (CI) boundaries live in [`docs/TESTING.md`](TESTING.md). This page is the canonical wiki summary. ## Table of contents - [Validation layers](#validation-layers) - [Dashboard boundary](#dashboard-boundary) - [Ground rule](#ground-rule) - [Convention going forward](#convention-going-forward) ## Validation layers ```mermaid flowchart TB L1["Local package validation (make test)
forge / nargo / cargo / pytest
dashboard build + lint"] L2["Playwright E2E (make test-e2e)
real Chromium; backend stack
prepared separately"] L3["GitHub Actions
package jobs on push/PR to main
Playwright excluded"] L1 --> L2 L1 --> L3 ``` 1. **Package validation** (`make test`) runs the Solidity, Noir, Rust, and Python suites, then validates the dashboard with `npm run build && npm run lint`. The root runner records every suite against one run ID and tested-tree hash, runs all declared suites, and fails at finalization if any result is missing, mixed-tree, malformed, or red. Test counts are intentionally not frozen here. 2. **Playwright end-to-end** (`make test-e2e`) drives the real Vite application in Chromium. `playwright.config.ts` starts only the frontend. Chain, Oracle, middleware, databases, and optional Cortex memory Application Programming Interface (API) must be started separately as documented in [`docs/TESTING.md`](TESTING.md). 3. **Hosted CI** (`.github/workflows/ci.yml`) runs package jobs on pushes and pull requests to `main`. It excludes Playwright, opt-in full-stack Oracle coverage, and live Base Sepolia demo activity. Unlike local `make test`, hosted Continuous Integration runs Noir with `--workspace`, runs the real Open Policy Agent (OPA) policy suite, and adds the dashboard demo's Python regression suite. `make verify-kernel` is the separate pinned Halmos 0.3.3 symbolic pass. It builds Foundry artifacts with AST output and covers the governance-swap harness plus the registry-disabled and registry-enabled kernel property suites; it is not evidence of deployment, gas cost, or independent audit. ## Dashboard boundary The dashboard currently has no `npm test` script, Vitest dependency, or component-test suite. Its static gate is production build + ESLint; its behavioral gate is Playwright. Documentation must not invent a mocked component-test layer or claim Playwright starts its own backend stack. ## Ground rule No silent mocks. A test either exercises a real dependency or identifies an intentionally isolated seam. Source capability, local test evidence, hosted-CI coverage, and deployed behavior are separate claims. ## Convention going forward Every changed dashboard route should receive Playwright coverage for honest empty/unavailable states and reachable real-data states. Browser verification requires direct visual inspection as well as passing assertions. If a future component-test layer is added, add the manifest script and dependencies first, then update `Makefile`, CI, `docs/TESTING.md`, and this page in the same change.