[tool.ruff] # Lines too long in docstrings are OK line-length = 120 [tool.ruff.lint] ignore = [ "B008", # FastAPI Depends() in defaults (standard pattern) "BLE001", # Blind exception catch (many intentional) "PLW0602", # Global declaration (intentional) "TRY201", # raise without exception name "RUF059", # Unused unpacked variables "S110", # try-except-pass (intentional) "S112", # try-except-continue (intentional) "G201", # logging.exception vs .error(exc_info=True) "PIE810", # Multiple statically joined strings "ASYNC210",# Blocking HTTP in async context "DTZ007", # Naive datetime "DTZ006", # Naive datetime "EXE001", # Shebang on non-executable ] [tool.ruff.lint.per-file-ignores] "backend/main.py" = ["F821", "E402"] # current_user from FastAPI middleware, intentional lazy imports "backend/attachment_indexer.py" = ["SIM102"] # Nested if for readability [tool.bandit] skips = ["B101", "B105", "B308", "B311", "B314"] asserts = "B101" exclude_dirs = ["tests", ".venv"]