v1.16.11 - Maintenance done-click + dual-interval self-repair
Two follow-up fixes after v1.16.10's method-name correction.
km-based done-click now actually resets
The dashboard's green ✓ button on a km-based maintenance item appeared to do nothing for some users. ws_complete_maintenance was reading the raw bike.driveUnit.odometer, which is occasionally None on the Bosch API response (the periodic coordinator refresh uses a smarter _bike_current_odometer reader that falls back to the derived end-odometer of the most recent activity). When the raw value was None at click time, last_done_odometer was skipped — the date side updated (last_done_at is unconditional) so date items reset fine, but km items reverted to the pre-click remaining_km.
Both ws_complete_maintenance and ws_list_maintenance now route through _bike_current_odometer, so the click + the post-click re-render see the same value the periodic refresh used.
Self-repair for items with both km AND days intervals
Diagnostic logging from v1.16.9 revealed a maintenance item in storage with both interval_km=500 AND interval_days=365 — an invalid state (an item should trigger by km OR by date, not both) caused by a debounced-input race during an earlier type switch. The editor's initialType logic preferred km if both were set, hiding the date side and making it look like every fix attempt 'reverted'.
_buildMaintRow now detects the dual-interval state on render and silently dispatches update_maintenance with interval_km: null. Date wins (typical intent for items like Großer Kundendienst alle X Tage); the user can always switch back to km via the dropdown afterwards. Existing items get repaired the first time the editor opens after the update.