make local-verification is the cross-package completion gate for Refract. It runs the same checklist agents and humans use before merging backend or multi-package work. How each step executes depends on an explicit exec backend, not on detecting Cursor, GitHub Actions, or “cloud.”
Pipeline (same steps everywhere)
migrate-upbuild-lint-deps(shared +tooling-eslint-refract)lint-allbuild-alltest-allgql-codegengql-codegen-dirty-tree(fail if generated files are uncommitted — same check as CIcodegen-verification)verify-production-smoke(RailwayDockerfile.productionbuild + throwaway Postgres/Redis + migrate/seed from the image + health/CSP — same as CIproduction-smoke)
Choosing an exec backend
Set via environment or Make override:
exec_backend_validate.
There is no auto-detection of Cursor Cloud or GITHUB_ACTIONS. Harnesses declare the backend once (e.g. Cursor Cloud env: REFRACT_EXEC_BACKEND=native).
Native prerequisites
-
Node + pnpm on the host (
packageManagerin rootpackage.json). -
Postgres and Redis on localhost (defaults:
localhost:5432,redis://localhost:6379, DBtest_db, user/passwordpostgres/password). Env vars can override — seescripts/shell/lib/verification-test-env.sh. -
Writable
/sharedfor portal GraphQL codegen (apps/portal/codegen.ymlreads/shared/template.schema.graphql). One-time: -
Docker for
verify-production-smoke(production image build, throwaway Postgres/Redis, Railway migrate+seed, health + CSP). Locally the step warns and skips if Docker is missing; CI fails hard. Chrome/Chromium is required for the CSP browser check (same skip-vs-fail split). -
Optional:
REFRACT_VERIFY_SKIP_INSTALL=1after Composemigrator(or an earlier install) already populatednode_modules. Skips hostpnpm install --frozen-lockfile(important when rootnode_modulesis root-owned from Docker).
make test / make lint / make build still use Docker by default; only local-verification honors the native backend today.
Dry-run and backend smoke
Layout (scripts)
Relationship to CI
GitHub Actions (integration.yml) remains the merge gate: parallel tests (with coverage comments), builds, lints, codegen-verification, production-smoke, and other jobs.
make local-verification runs the same sequential checklist locally, including the codegen dirty-tree check and production smoke, so those CI jobs fail at the pre-push gate instead of only on GitHub. Coverage PR comments and parallel job speed stay in Actions. See Continuous Integration.
What’s next?
- Make Commands — full target list
- Continuous Integration — PR workflows
- Root
AGENTS.md— Cursor Cloud native verification notes
