[run]
# Coverage denominator = product runtime we intentionally measure.
# Default suite: core/infra + core/modules (see pytest.ini).
# Cases matter more than %; omit paths we do not expect unit tests to cover.
source = core
omit =
    */__test__/*
    */__performance__/*
    */__pycache__/*
    */venv/*
    */userspace/*
    */test_*.py
    */__init__.py
    */example.py
    */*_example.py
    */__main__.py
    # Not in default pytest suite (norecursedirs)
    */core/ui/*
    */core/bff/*
    # Maintainer toolbox (devcli scripts) — tested ad hoc; not product facade stats
    */core/infra/cli/dev/scripts/*
    # Install/upgrade plumbing — FS-heavy; covered by install/CI smoke, not unit suite
    */core/infra/setup/core/steps/*
    */core/infra/setup/core/scripts/*
    */core/infra/setup/core/cli_runtime.py
    */core/infra/setup/core/ui_runtime.py
    */core/infra/updater/core/orchestrator/*
    */core/infra/updater/core/post_upgrade/*

[report]
exclude_lines =
    pragma: no cover
    def __repr__
    raise AssertionError
    raise NotImplementedError
    if __name__ == .__main__.:
    if TYPE_CHECKING:
    @abstractmethod
