[project] name = "maestro-backend" version = "0.1.0" description = "Maestro Platform — AI agent orchestration backend (FastAPI)" requires-python = ">=3.11" license = "LicenseRef-SustainableUse-1.0" authors = [{ name = "Yiğit Erdoğan", email = "yigiterdogan023@gmail.com" }] [tool.ruff] line-length = 88 target-version = "py311" extend-exclude = ["alembic/versions"] [tool.ruff.lint] # E/W: pycodestyle, F: pyflakes, I: isort, UP: pyupgrade, B: bugbear select = ["E", "W", "F", "I", "UP", "B"] [tool.ruff.lint.isort] known-first-party = ["app"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] pythonpath = ["."] markers = [ "integration: needs a real MongoDB/Qdrant server (docker-compose). Deselected by default.", ] # Fail on an unregistered marker (a typo'd @pytest.mark silently no-ops # otherwise) or an unknown config key. Cheap correctness guardrails that keep # the suite honest. # # `-m 'not integration'` keeps the default run infrastructure-free: a bare # `pytest` (and CI's `pytest --cov=app`) must never try to reach a real server, # or a developer without docker-compose up sees failures unrelated to their # change. A command-line `-m` overrides this one, so `pytest -m integration` # selects exactly the opposite set. addopts = "--strict-markers --strict-config -m 'not integration'" [tool.coverage.run] source = ["app"] branch = true # Exclude generated/entrypoint code that carries no test-worthy logic. omit = ["app/main.py", "alembic/*"] [tool.coverage.report] # Reporting only — CI prints coverage but does NOT gate on a threshold, so a # legitimate change is never blocked by a coverage dip (no spurious failures). show_missing = true exclude_lines = [ "pragma: no cover", "if TYPE_CHECKING:", "raise NotImplementedError", "\\.\\.\\.", ]