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-browser-static(production Dockerfile build + marketing route smoke — same as CIproduction-browser-static-verify)
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-browser-static(production image build + route smoke). The gate starts composerds/memorywhen they are not already running. -
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 Dockerfile / browser-static, and other jobs.
make local-verification runs the same sequential checklist locally, including the codegen dirty-tree check and production browser-static 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
