# tavolo-app The deployable tavolo application: the composition root wiring [`tavolo-platform`](../tavolo-platform/README.md) to the [`tavolo-scopone`](../tavolo-scopone/README.md), [`tavolo-scopa`](../tavolo-scopa/README.md) and [`tavolo-briscola`](../tavolo-briscola/README.md) games. ## Contents - `app.py` — assembles the `KayaApp` (session/OIDC/Tortoise/OpenAPI mixins plus `PlatformMixin` and the deadline scheduler), registers the `ScoponeEngine`, `ScopaEngine`, `ScopaQuattroEngine`, `BriscolaEngine`, `BriscolaQuattroEngine` and `BriscolaChiamataEngine` with their configured timeouts, and exposes `tavolo.app:app` for granian. - `config.py` — environment-driven frozen `Settings`. - `telemetry.py` — the optional OpenTelemetry wiring beyond kaya-otel: meter/tracer/logger providers, the `tavolo.active_users`/`tavolo.ongoing_games` gauges (polled from the stores), process/CPython metrics via `opentelemetry-instrumentation-system-metrics`, Postgres/Redis query spans via the asyncpg/redis instrumentations, and OTLP log export. - `aerich_config.py` — Tortoise ORM configuration consumed by the aerich CLI (migrations live in `server/migrations/`; aerich itself is configured via the `[tool.aerich]` section of `server/pyproject.toml`). - `logging_config.py` — logging setup. - `static.py` — SPA shell hosting for the compiled frontend. ## Development (from `packages/tavolo-app/`) ```sh uv run mypy --namespace-packages --explicit-package-bases \ src/tavolo/app.py \ src/tavolo/config.py \ src/tavolo/telemetry.py \ src/tavolo/static.py \ src/tavolo/aerich_config.py \ src/tavolo/logging_config.py ``` End-to-end coverage of the wired stack lives in `server/tests/`.