This file is the single source of truth for local CI readiness before any push or PR.
If your diff is only documentation or contributor-process files, you may skip the code-quality and test commands below.
Examples of files that qualify:
AGENTS.mdCI.mdCONTRIBUTING.mdREADME.mdTESTING.mdTOOL_INTEGRATION_CHECKLIST.mddocs/**/*.mddocs/**/*.mdxdocs/docs.json
You may use the shortcut only when all changed files are non-runtime and non-executable. If the diff touches application code, tests, build tooling, dependency manifests, CI workflows, scripts, or anything with runtime impact, run the normal harness.
For docs/process-only changes, the minimum required local check is:
git status --shortIf you are unsure whether the shortcut applies, do not use it — run the standard checks below.
Run all of these first:
-
Clean working tree
git status --short
- No accidental untracked files
- Never commit
.envor secrets
-
Lint
make lint
-
Format check
make format-check
If it fails:
make format && make format-check -
Typecheck
make typecheck
Recommended — run this instead of manually looking up the table below:
make test-scopemake test-scope reads git diff against main, maps each changed path to
its test target(s) using infra/ci/test_scope_rules.py,
and runs the minimal pytest invocation. It escalates automatically to
make test-cov when shared/core code is touched or 3+ app areas change.
Pass ARGS=--dry-run to preview without running.
If you prefer to pick the command yourself, or need a focused -k filter,
see the PathRule entries in infra/ci/test_scope_rules.py.
Rules with always_escalate=True map to make test-cov; all others list their
test_targets tuple. Changed files under tests/ with no app rule run as-is.
Run make test-cov (instead of only targeted tests) when any of these are true:
- Shared/core code changed (
app/utils/,app/state/,app/types/,app/pipeline/,app/nodes/) - 3+ app areas changed in one diff
- New files with unclear blast radius
- Cross-cutting refactor
- You are unsure test scope is sufficient
make test-covIf integration config, integration wiring, or related tools changed, also run:
make verify-integrationsYou may run make check as a final pass, but it is heavier (test-full) than the required harness.
Routing live tests always run with live coverage enabled. Do not use deselection filters like -k "not live_llm". Fix failures by improving planner/tool correctness or updating fixtures only when behavior changes are explicitly approved.
Some paths require live infrastructure and are excluded from make test-cov:
- Kubernetes / EKS scenarios (
tests/e2e/) - Chaos Mesh workflows (
tests/chaos_engineering/) - Docker-dependent Grafana stack tests
Mark CI-only tests with the appropriate pytest marker or place them in the correct folder so they do not run locally by default.
If readiness instructions conflict across docs, this file wins for push/PR checks.