2ad2e943f3
CI & Build / Python lint (push) Successful in 2s
CI & Build / integration (push) Failing after 19s
CI & Build / TypeScript typecheck (push) Successful in 20s
CI & Build / Python tests (push) Successful in 45s
CI & Build / Build & push image (push) Successful in 1m1s
The unit suite can't catch sync/async API mismatches against SQLAlchemy (an un-awaited execution_options passed green CI but failed at runtime: VACUUM 0/6). Add a real-Postgres integration lane modelled on the family pattern (rules 6/79-82): a new CI 'integration' job with a postgres:16 service, bridge-IP discovery, busybox-safe readiness wait, and 'alembic upgrade head', running pytest -m integration. Non-gating, like the unit lane. - tests/test_integration_db_maintenance.py: runs run_maintenance() and get_table_health() against real Postgres; asserts all allowlisted tables vacuum OK (the await regression makes this fail) and health reports real stats. - pyproject: register the 'integration' marker. - conftest: integration-marked tests use the real DATABASE_URL, not the stub. - ci.yml: unit 'test' job now runs -m 'not integration'. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
56 lines
1.4 KiB
TOML
56 lines
1.4 KiB
TOML
[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",
|
|
]
|
|
|
|
[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
|
|
]
|