[pytest] ; Three test roots: cross-pipeline tests/, plus each pipeline's own ; email_processor/tests/ offline suite (deterministic template parser + ; Bedrock fallback dispatch + healthcheck, per pipeline). testpaths = tests lambdas/wo/email_processor/tests lambdas/po/email_processor/tests addopts = --cov=lambdas/po/email_processor --cov=lambdas/wo/email_processor --cov=lambdas/po/web_ui --cov=lambdas/wo/web_ui --cov=lambdas/po/site_extractor --cov=lambdas/shared --cov-report=term-missing --cov-fail-under=80 ; The 80% floor is an aggregate whole-suite gate, enforced in CI by the ; reusable ci-python-sam workflow's bare `pytest` run (which inherits these ; addopts). Because the floor is inherited by every invocation, running a ; single root or file for local iteration (e.g. `pytest tests/test_web_ui_auth.py`) ; under-measures the fixed --cov set and red-exits even when the selected tests ; pass. That is expected: append `--cov-fail-under=0` (or `-p no:cov`) to a ; subset run to skip the floor while iterating. The full-suite run still gates.