101 lines
7.0 KiB
Markdown
101 lines
7.0 KiB
Markdown
# 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
|