[build-system] requires = ["setuptools>=68.0", "setuptools-scm>=8.0"] build-backend = "setuptools.build_meta" [project] name = "scribe" version = "0.1.0" description = "Self-hosted note-taking, project-management, and calendar app exposed to Claude via MCP" requires-python = ">=3.14" dependencies = [ "quart>=0.19", "sqlalchemy[asyncio]>=2.0", "asyncpg>=0.29", "alembic>=1.13", "httpx>=0.27", "hypercorn>=0.17", "bcrypt>=4.0", "aiosmtplib>=3.0", "caldav>=1.3", "icalendar>=5.0", "APScheduler>=3.10,<4.0", "mcp[cli]>=1.0", "fastembed>=0.4", "pgvector>=0.3", ] [project.optional-dependencies] dev = [ "pytest>=8.0", "pytest-asyncio>=0.23", "ruff>=0.6", ] [tool.setuptools.packages.find] where = ["src"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] markers = [ "integration: requires a real Postgres database (runs only in the CI integration lane)", ] [tool.ruff] line-length = 120 target-version = "py312" [tool.ruff.lint] # E = pycodestyle errors, F = pyflakes (catches unused imports, undefined names) # Start conservative — add more rules as the codebase gains coverage. select = ["E", "F"] ignore = [ "E501", # line too long — long lines are acceptable in this codebase "E402", # module-level import not at top — common in Quart app factories "F401", # imported but unused — some re-exports are intentional ]