Repository navigation
ADR 0010 Python 3 13
Accepted (2026-10-08). Supersedes the "Python 3.12" constraint of the original plan.
The plan fixed Python 3.12. The spike (docs/spikes/0001-ble-bridge-and-pymammotion.md) showed that PyMammotion, the only library that speaks the mower protocol, requires Python 3.13 or newer since release 0.7.117 (May 2026) and has not supported 3.12 since 0.7.83 (April 2026). The current release 0.10.9 is pinned for MowDeck. Home Assistant, the target of the HACS integration, also runs on Python 3.13 or newer. Every other dependency of the foundation libraries (FastAPI, Pydantic, SQLAlchemy, nats-py, structlog) supports 3.13.
Options considered:
- Move the whole workspace to Python 3.13.
- Stay on 3.12 and isolate the PyMammotion adapter and the Device-Gateway in a separate 3.13 image.
- Pin an old PyMammotion release (0.7.82) that still supports 3.12.
Option 1: the workspace, every library and every service require Python 3.13 (>=3.13,<3.14). Ruff targets py313, mypy checks against 3.13, .python-version is 3.13, and container images are built from the Python 3.13 base image. uv installs the interpreter on demand (uv python install 3.13).
- One Python version across the repository, no split toolchain.
- Option 2 would have meant two interpreters, two lockfile resolutions and two sets of CI jobs for a single dependency.
- Option 3 would have frozen the mower protocol to a release that predates the owner's firmware and gets no fixes.
- Language features up to 3.13 may be used; 3.12-only syntax restrictions no longer apply.
- When PyMammotion raises its floor again, this ADR is revisited; the change is a one-line edit per
pyproject.tomlplus a re-lock.
Mirrored from docs/adr/0010-python-3-13.md at commit a117684672263ba4f0b7e2e3538233456122d24e. Edit the file in the repository, not this wiki page.
Mirrored from the docs/ directory at commit a117684672263ba4f0b7e2e3538233456122d24e. Edit the files in the repository, not this wiki.
MowDeck documentation
- Home
- Phases
- Architecture
-
Decisions (ADR)
- Architecture decisions
- ADR 0001: OpenFGA instead of self-built authorization
- ADR 0002: Self-built Identity service in FastAPI instead of Keycloak or Zitadel
- ADR 0003: SvelteKit for the web app
- ADR 0004: Monorepo with a uv workspace
- ADR 0005: AGPL-3.0 for services and apps, Apache-2.0 for libraries
- ADR 0006: PostgreSQL for all persistence, no SQLite
- ADR 0007: NATS JetStream as event bus
- ADR 0008: Traefik as gateway
- ADR 0009: Command and event envelopes, subject naming and de-duplication
- ADR 0010: Python 3.13 for all services and libraries
- ADR 0011: Separate GPL-3.0 package for the PyMammotion adapter
- ADR 0012: Mower control interface and safety rules
- ADR 0013: Device-Gateway registry, sharding and per-mower concurrency
- ADR 0014: Authorization model, tuple ownership and the mowdeck-authz client
- ADR 0015: Tokens, sessions and key rotation
- ADR 0016: Fleet commands and authorization per command kind
- ADR 0017: Telemetry storage and retention
- ADR 0018: Realtime WebSocket protocol
- ADR 0019: Mammotion adapter transports, manual drive and secrets
- ADR 0020: Web app architecture
- ADR 0021: Browser authentication flow
- ADR 0022: Notifications: rules, recipients and delivery
- ADR 0023: Map rendering and projection
- ADR 0024: Scheduler: recurrence, rain pause and command issuing
- ADR 0025: Home Assistant integration as a pure API client
- ADR 0026: Manual drive channel over the Realtime WebSocket
- ADR 0027: Health history and theft alarm
- ADR 0028: Entitlements: plans as data and enforcement
- ADR 0029: Helm chart and release pipeline
- ADR 0030: Mowing patterns as plug-ins and the Planner
- ADR 0031: Billing with a Stripe adapter
- ADR 0032: Live camera over Agora, joined directly by the browser
- ADR 0033: Vision-assisted recovery with human approval
- ADR 0034: Linked cloud accounts and device discovery
- ADR 0035: Server-side camera frames and automatic AI analysis on errors
- ADR 0036: Native app shells with Capacitor, loading the web app from the server
- ADR 0037: Camera panorama calibration in the browser, with the AI supplying points only
- ADR 0038: Dual link per mower and firmware updates
- ADR 0039: Spot mowing by MowDeck-driven paths
- ADR 0040: Link heartbeat for online status
- ADR 0041: Spot runs from the dock: undock, transit and return
- ADR 0042: Drive calibration
- ADR 0043: Turn styles
- ADR 0044: Drive view with camera
- Development
- Operations
- Spikes
- Guides
- Original plan (German)