[tool.ruff]
target-version = "py312"
line-length = 100

[tool.ruff.lint]
select = [
  "E",    # pycodestyle errors
  "W",    # pycodestyle warnings
  "F",    # pyflakes
  "I",    # isort
  "N",    # pep8-naming
  "UP",   # pyupgrade
  "B",    # flake8-bugbear
  "SIM",  # flake8-simplify
  "TCH",  # flake8-type-checking
  "RUF",  # ruff-specific
]
ignore = [
  "E501",   # line too long (handled by formatter)
  "B008",   # do not perform function calls in argument defaults (FastAPI Depends)
  "N815",   # camelCase in Pydantic models (intentional — matches frontend API contract)
  "TC003",  # datetime import used at runtime by Pydantic
]

[tool.ruff.lint.isort]
known-first-party = ["api", "domain", "persistence", "services"]

[tool.ruff.format]
quote-style = "double"
indent-style = "space"
