MotorSignal-App/CHANGELOG.md

101 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Changelog
All notable changes to **Motorcycle Digital Dashboard** will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
> **Versioning scheme (Flutter):** The `version` field in `pubspec.yaml` uses
> the format `MAJOR.MINOR.PATCH+BUILD`.
> - `MAJOR.MINOR.PATCH` → the user-facing release (also stored as the `v` git tag).
> - `+BUILD` → an auto-incrementing integer consumed by `versionCode` (Android) and
> `CFBundleVersion` (iOS). It is bumped independently of the user-facing version.
## [1.0.2] - 2026-08-30
### Fixed
- **Ride Summary Session Resets**: Explicitly zeroed all handling maxima (`maxLeanLeft`, `maxLeanRight`, `maxAccelG`, `maxBrakingG`, `averageSpeedMph`) on consecutive `startRide()` calls without requiring an application restart.
- **Handling Section Responsive Layout**: Overhauled `EvolutionRideDetailsView` Handling section to dynamically scale and wrap metrics across mobile portrait and wide landscape displays without text clipping or card overflow.
- **Precision Millisecond Exporting**: Ensured high-resolution sub-second timestamp formatting across SQLite exports and `telemetry.csv`.
### Added
- **Garage Photographic Reference Engine**: Extensible `MotorcycleImageService` delivering photographic reference imagery for registered models (including 2001 Yamaha YZF-R6) with automatic fallback to high-tech vector schematics.
- **Interactive Forensic Events**: All event list items in ride details and maps now feature interactive tap-to-inspect dialogs displaying severity badges, timestamps, G-forces, lean angles, coordinates, and "View on Map" navigation.
- **Route Preview Multi-Layer Map**: Interactive toggle layers (`Route`, `Speed`, `Accel`, `Braking`, `Cornering`) with color-coded speed brackets (0-25, 25-50, 50-75, 75-100, 100+ MPH) and floating legend.
- **Offline-First GitHub Ride Log Sync**: Asynchronous background upload service to `bponders12-cell/ride_logs` (branch `main`) with token security, upload queue, retry backoff, and manual "Upload Now" controls.
---
## [1.0.1] - 2026-08-29
### Fixed
- **Authoritative 20 Hz Clock**: Synchronized telemetry emission to a single 20 Hz periodic timer with strictly monotonic timestamps and atomic sequence numbers.
- **Sub-Millisecond Timestamp Persistence**: High-resolution SQLite timestamp serialization eliminating whole-second truncation artifacts.
- **Speed-Gated Performance Classification**: Enforced `speed >= 3.0 MPH` gating on lean angle, acceleration, and braking records to prevent stationary kickstand and phone-removal handling from contaminating riding Personal Records.
- **GPS Diagnostic Consolidation**: Added a 500 ms debounce to GPS jump rejection logs, preventing duplicate error entries for single satellite multipath anomalies.
- **Dashboard Lean Needle Alignment**: Perfectly centered the lean gauge arc and zero-degree reference needle across portrait and landscape layouts.
- **Report & Summary Terminology**: Explicitly separated Qualified Moving Performance metrics from Raw Observed Sensor Peaks in all UI screens, `README.txt`, and `ride_summary.json`.
### Added
- **Production Versioning & Release Management**: Standardized `pubspec.yaml` `1.0.1+101` authoritative versioning, Git commit embedding, release manifest generation, and versioned APK naming (`MotorSignal-v1.0.1-build101-release.apk`).
- **Forensic Field Test Logger & Exporter**: 15-column timeline event logging, zip export packaging, and automated ride quality validation scoring.
### Added & Fixed
- **Landscape IMU Coordinate Transformation**: Dynamic sensor coordinate frame rotation adapting automatically to portrait and landscape mounting orientations.
- **Zero-G Deadband & Gating**: Clean 0.00G readouts when device is resting on table or stationary mount.
- **Stationary GPS Multipath Hysteresis**: Hardened anchor locking that rejects indoor GPS Doppler drift, eliminating false 3–4 MPH stationary speed readings.
- **Clean Map Tile Engine**: Switched default tile layer to high-resolution OpenStreetMap raster endpoints, removing all third-party watermark requirements.
- **Live Police & Traffic Hazard Alerts**: Waze & TomTom community alerts integration with speed trap and hazard warnings.
- **Version Bump Tooling**: Automated `tool/bump_version.dart` utility for SemVer release and build number synchronization across `pubspec.yaml` and runtime `AppInfo`.
---
## [1.0.0] - 2026-08-27
First production-ready release of the Motorcycle Digital Dashboard.
### Added
- **Real-time telemetry** via `geolocator` (GPS, 5 Hz) and `sensors_plus` (accel + gyro).
- **Complementary filter sensor fusion** (α = 0.96) for accurate lean/bank, pitch, and
longitudinal/lateral G-force calculation with vibration rejection.
- **Mount calibration** — rider can zero the sensors to compensate for arbitrary
mounting angles.
- **Automatic ride recording** state machine (`Idle` → `Ready` → `Riding`) that
detects motion, tracks session maximums (top speed, max left/right lean, max Gs),
and persists the ride to local storage on stop.
- **Performance metrics** — automatic 0–60 MPH and 0–100 MPH timing using
high-resolution timers triggered on hard acceleration.
- **Drift (SQLite) persistence** with `Rides` and `PerformanceRuns` tables, linked by
foreign key.
- **GoRouter** navigation with a `StatefulShellRoute` and persistent
`BottomNavigationBar`.
- **Riverpod** for reactive UI state and dependency injection across all features.
- **Material 3 dark theme** with portrait- and landscape-aware dashboard layout,
including a large speedometer, heading indicator, lean gauge, and live G-force readout.
- **Map screen** with Google Maps and OpenStreetMap providers, satellite toggle,
and follow-rider mode.
- **Ride history** list with per-ride telemetry cards, and **ride replay** screen
that synchronizes telemetry with the map polyline.
- **Audio (TTS) alerts** for ride states and milestones, configurable via
`flutter_tts`.
- **Data export** to `.csv` and `.gpx` via `share_plus`.
- **Police alert abstraction** (`PoliceAlertService` interface) with a mock
implementation ready to be swapped for a real provider (Waze, RadarBot, etc.).
- **Settings & diagnostics** screens, including calibration and a "clear history"
action.
- **Production hardening**:
- Lint pass with `flutter_lints` and cleanup.
- `http` added as a direct dependency for telemetry/network features.
- OSM null-safety fix for map fallback.
- Road-alert pipeline integrated into the rider state machine.
### Known Limitations
- Google Maps support requires the user to supply a real API key in
`android/app/src/main/AndroidManifest.xml` (replacing `YOUR_API_KEY_HERE`).
- The app is currently Android-first; iOS permissions and build config are not yet
configured.
- Police-alert data is mock-only until a real provider is integrated.
[Unreleased]: https://github.com/your-org/motorcycle-dash/compare/v1.0.0...HEAD
[1.0.0]: https://github.com/your-org/motorcycle-dash/releases/tag/v1.0.0