You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
CI's backend job runs pytest tests/ --ignore=tests/e2e -m v2 (.github/workflows/test.yml:226). The root tests/conftest.py only auto-marks integration/slow — notv2. So -m v2deselects ~535 tests (3159 run / 3694 collected), and roughly 40% of test files carry no v2 marker at all. Those tests never gate a PR.
This is a silent coverage blind spot. It hides two different things:
Potentially-legitimate tests that simply were never marked v2 and so never run in CI (some tests/unit, tests/contract, tests/planning, tests/cli, tests/api, root test_new_feature.py, etc. — needs auditing).
Why it matters
The whole point of the v2 filter was to skip v1-legacy reference tests during the v1→v2 refactor. That refactor is done. Keeping a filter that silently drops 40% of files means real tests aren't protecting main, and dead tests rot undetected. This is the same class of risk as the disabled E2E jobs (#647).
Proposed work
Run the deselected set: uv run pytest tests/ --ignore=tests/e2e -m "not v2" -q and categorize each failure/file as dead (remove) vs legit (keep).
For legit tests: add the v2 marker (or, better, decide the filter is obsolete and drop -m v2 so CI runs all non-e2e tests). Auto-marking by directory in conftest.py is an option to avoid per-file churn.
Problem
CI's backend job runs
pytest tests/ --ignore=tests/e2e -m v2(.github/workflows/test.yml:226). The roottests/conftest.pyonly auto-marksintegration/slow— notv2. So-m v2deselects ~535 tests (3159 run / 3694 collected), and roughly 40% of test files carry nov2marker at all. Those tests never gate a PR.This is a silent coverage blind spot. It hides two different things:
/api/projectstests removed in chore(tests): remove orphaned v1 tests for removed /api/projects endpoint #667 fail with 404 on a full local run but were invisible to CI because they lack the marker.v2and so never run in CI (sometests/unit,tests/contract,tests/planning,tests/cli,tests/api, roottest_new_feature.py, etc. — needs auditing).Why it matters
The whole point of the v2 filter was to skip v1-legacy reference tests during the v1→v2 refactor. That refactor is done. Keeping a filter that silently drops 40% of files means real tests aren't protecting
main, and dead tests rot undetected. This is the same class of risk as the disabled E2E jobs (#647).Proposed work
uv run pytest tests/ --ignore=tests/e2e -m "not v2" -qand categorize each failure/file as dead (remove) vs legit (keep).v2marker (or, better, decide the filter is obsolete and drop-m v2so CI runs all non-e2e tests). Auto-marking by directory inconftest.pyis an option to avoid per-file churn./api/projectspair is already handled in chore(tests): remove orphaned v1 tests for removed /api/projects endpoint #667).-m v2filter so the suite can't silently shrink again.Acceptance criteria
Source: discovered during #659 / #667 (2026-06-13). Related: #647 (disabled E2E gates).