# CI labels The pull request workflows recognize these optional maintainer labels: - `tests:full`: run the full Linux CI matrix for the PR, including all ML suites and package compatibility lanes. - `tests:heavy-examples`: run the heavy examples workflow for the PR. Windows and macOS smoke lanes are intentionally not label-triggered. Run them from the `Run CI` or `Run CI Main` workflow dispatch inputs when cross-platform verification is needed. ## ML test segmentation Expensive ML tests are selected with module-level pytest markers, not workflow file globs: - `pytest.mark.ml_ocr` - `pytest.mark.ml_pdf_model` - `pytest.mark.ml_vlm` - `pytest.mark.ml_asr` New tests run in the core lane by default. If a new test belongs in an ML lane, add the matching module-level `pytestmark`; do not add per-test file globs to the workflow. The workflow intentionally uses a broad ML trigger for code, test, and tooling changes. Tach performs the fine-grained affected-test selection inside the ML lanes. Path filters still decide whether a CI lane should be created at all. Pytest markers only select which test modules run after a test lane has started. ## Cross-platform smoke tests Windows and macOS smoke tests are selected with `pytest.mark.cross_platform`. Use this marker for lightweight modules that should be exercised by the workflow-dispatch cross-platform lanes; do not maintain a separate test-file list in the workflow.