Repository navigation
Architecture 11 Risks And Technical Debt
github-actions[bot] edited this page Oct 23, 2026
·
64 revisions
| Risk | Mitigation |
|---|---|
| Unofficial protocol: a Mammotion firmware update can break features | Pin the PyMammotion version; apply mower firmware updates only after community feedback |
| Double access while the existing Mammotion integration in Home Assistant runs | In the spike use a second shared Mammotion account; remove the old integration after the MVP |
| Safety when driving or spot mowing | Dead-man switch, blade off in transfer, visible emergency stop, never bypass sensor stops |
| Login and access | Pluggable login, Argon2id, API tokens per client, login rate limit, short sessions, access from outside only via Tailscale or HTTPS proxy |
| Maintenance effort of many small programs | Monorepo, shared contracts, one CI, versioned public API early |
| Terms of use | Uncritical for personal use; review before redistribution |
| WLAN control not yet available | Bluetooth is default; WLAN is a second adapter behind the same interface |
| Microservice complexity for one household | Same pattern for every service, one Compose file, interfaces that would allow several services in one process |
| Data leaks between accounts | Account ID only from token, filter in each query, per-service tests with foreign data |
| Distributed failures | Command IDs, expiry, emergency stop priority, traces across services |
| Payment and legal duties once others pay | Only in Phase 4; choose a provider that handles taxes |
- Does PyMammotion deliver map geometry (zones, paths, dock) in a usable form?
- Does it support manual driving and mowing jobs with own limits?
- How does the camera stream leave the mower and can it be tapped locally?
- What is the command latency over the Bluetooth bridge, and is it enough for the joystick?
- Which entities and services should the HACS integration offer?
- Does it fully support 4G mowers and network RTK, including fix status and cellular connection?
- Does the mower report the correction source (station or network RTK)?
- Which bridge firmware: ESPHome Bluetooth proxy or a lean custom ESP32 firmware?
- Payment provider for EU customers: Stripe with tax module or a merchant of record such as Paddle?
- How many mower connections can one Device-Gateway instance hold (sharding size)?
- Can the LUBA drive arbitrary paths or only zones with its own patterns (own route versus native job)?
None recorded yet. Known deliberate shortcuts: the Compose stack uses one shared password for all service database roles and mounts the Docker socket read-only into Traefik; both are acceptable for the development defaults and must be revisited before cloud operation.
Mirrored from docs/architecture/11-risks-and-technical-debt.md at commit 1482479ad827c7a45f9044230d213599a5abf361. Edit the file in the repository, not this wiki page.
Mirrored from the docs/ directory at commit 1482479ad827c7a45f9044230d213599a5abf361. 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
- ADR 0045: Camera relay
- ADR 0046: Device settings as capabilities
- ADR 0047: The RTK base station as a Fleet device
- ADR 0048: Maintenance commands
- Development
- Operations
- Spikes
- Guides
- Original plan (German)