diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..f246320 --- /dev/null +++ b/TODO.md @@ -0,0 +1,229 @@ +# WalkGuide Final Readiness TODO + +Last audit date: 2026-05-17 +Source documents checked: `FULL_FLOW_ARCHITECTURE.md`, `FINAL_EXAM_GUIDE.md`, repository files. + +## Legend + +- ✅ Done / evidence exists in repository +- ⚠️ Partial / implemented but incomplete, demo-mode, or missing final evidence +- ❌ Missing / no repository evidence found +- 🔎 Verify locally / cannot be proven from files alone + +--- + +## Current Verification Status + +- ✅ Git status was clean and synced before this TODO audit. +- ✅ Backend Flyway migrations exist from `V1` through `V16`. +- ✅ OOAD diagram files exist in `ooad-docs/diagrams`. +- ✅ Backend k6 result files exist in `walkguide-backend/demo/k6-tests/k6-results`. +- ⚠️ k6 local smoke evidence exists, but strict production benchmark targets are not met under the current local-backend + remote-PostgreSQL setup. +- ❌ Flutter analyzer could not be verified inside this Codex environment because `flutter` is not available on PATH here. +- 🔎 Run this locally to confirm Dart errors: + +```powershell +cd "D:\CodeSpace\Final Project Gabungan - Broken Test\walkguide-mobile\walkguide_app" +flutter pub get +flutter analyze +``` + +- 🔎 Run this locally to confirm backend tests: + +```powershell +cd "D:\CodeSpace\Final Project Gabungan - Broken Test\walkguide-backend\demo" +mvn test +``` + +--- + +## Full Flow Architecture Checklist + +### Backend Architecture + +- ✅ Spring Boot backend structure exists: `controller`, `service`, `repository`, `entity`, `dto`, `config`, `security`, `exception`. +- ✅ PostgreSQL is configured through Flyway migrations. +- ✅ `spring.jpa.hibernate.ddl-auto=validate` is configured. +- ✅ JWT access-token flow exists. +- ✅ Refresh token entity/repository/migration exists. +- ✅ RBAC roles exist for `ROLE_USER` and `ROLE_GUARDIAN`. +- ✅ Consistent API response envelope exists through `ApiResponse`. +- ✅ OpenAPI YAML exists at `walkguide-backend/demo/src/main/resources/openapi.yaml`. +- ✅ Swagger dependency/config exists. +- ✅ WebSocket/STOMP config exists. +- ✅ Location broadcaster exists. +- ✅ Call controller/service/token response exists. +- ✅ Pairing, activity log, obstacle log, location, notification, SOS, settings, AI config, voice command, hardware shortcut, and geofence backend classes exist. +- ✅ Unit and integration test classes exist. +- ✅ JaCoCo report exists in `walkguide-backend/demo/target/site/jacoco`. +- ✅ k6 scripts and result reports exist. +- ⚠️ Firebase push notification is still log-only in `FcmService`; real Firebase Admin SDK sending is commented out. +- ⚠️ Agora token support exists, but `agora.app-id` and `agora.app-certificate` are empty in `application.properties`. +- ⚠️ Actuator metrics evidence is incomplete; k6 parsed reports show JVM heap as `N/A`. +- ⚠️ k6 evidence exists, but the current local smoke profile is relaxed because remote PostgreSQL makes auth/location latency too high for the strict target. +- ❌ Environment-separated configs are missing: no `application-dev.yml` / `application-prod.yml` evidence found. +- ❌ Secrets are still hardcoded in `application.properties` (`spring.datasource.password`, `jwt.secret`). +- ❌ Firebase Admin credential file is missing: `src/main/resources/firebase/google-services-admin.json`. + +### Flutter Architecture + +- ✅ Flutter project exists with core app, router, injection container, services, and feature screens. +- ✅ Dynamic server URL support exists through `SharedPreferences`. +- ✅ GoRouter is present. +- ✅ Dio dependency is present. +- ✅ `flutter_bloc` dependency is present. +- ✅ Secure storage dependency and service files exist. +- ✅ TTS, STT, camera, tflite, Agora, Firebase Messaging, local notifications, map, geolocation, STOMP, connectivity, vibration, audio, and recording dependencies exist. +- ✅ More than 6 screens exist. +- ✅ Widget, unit, and integration test files exist. +- ⚠️ Clean Architecture is only partially applied. Some features use `domain/data/presentation`, but many screens still live as direct StatefulWidget/service-driven screens. +- ⚠️ State management is mixed. BLoC/Cubit exists, but many screens still use direct `StatefulWidget` state and service calls. +- ⚠️ Typed failure support exists, but raw UI/service `try/catch` usage still appears in presentation-facing code and should be reviewed against the exam penalty. +- ⚠️ Offline queue service exists, but full Drift offline-first cache/sync for core entities is not proven by file structure. +- ⚠️ Integration tests exist, but comments indicate stub/self-contained flows; the exam requires E2E against the live Spring Boot API. +- ❌ YOLO model file is missing: `assets/models/yolov8n.tflite`. +- ❌ Formal i18n files are missing: no `.arb` localization files found. +- ❌ Firebase app config is missing: no `google-services.json` / `GoogleService-Info.plist` found. +- ❌ Flutter Agora App ID is still placeholder: `YOUR_AGORA_APP_ID`. +- ❌ Release APK artifact was not found in the repository. +- ❌ Flutter physical-device benchmark evidence is missing. + +### End-to-End Feature Flows + +- ✅ Register and login flow is implemented in backend and Flutter screens. +- ✅ Pairing invite/respond/status backend and Flutter screens exist. +- ✅ WalkGuide screen and obstacle analyzer code exist. +- ⚠️ WalkGuide real AI detection is incomplete until `yolov8n.tflite` is added and verified on device. +- ⚠️ Location update flow exists, but k6 evidence shows high latency with remote DB. +- ⚠️ Guardian dashboard exists, including location/status-style UI, but full live realtime validation still needs manual demo evidence. +- ⚠️ Call Guardian flow exists at code/API level, but real call requires Agora credentials and device testing. +- ⚠️ Guardian notification flow exists, but real push delivery requires Firebase Admin + mobile Firebase config. +- ⚠️ SOS flow exists, but urgent real push is still log-only until Firebase is enabled. +- ⚠️ Geofence backend/service/UI elements exist, but final live geofence-exit notification evidence is still needed. +- ❌ Voice note storage/upload pipeline is not proven. Notification DTO supports voice note fields, but no durable audio upload/storage evidence was found. + +--- + +## Final Exam Guide Checklist + +### Pillar 1: OOAD + +- ✅ Use case diagram file exists. +- ✅ Class diagram file exists. +- ✅ ERD diagram file exists. +- ✅ Component diagram file exists. +- ✅ At least 3 sequence diagrams exist: login, pairing, SOS. +- ✅ State machine diagram exists for SOS event. +- ✅ Design pattern document exists: `ooad-docs/DESIGN_PATTERNS.md`. +- ✅ Traceability audit document exists: `ooad-docs/TRACEABILITY_AUDIT.md`. +- ⚠️ Pattern documentation should still be checked for exact code line references and per-pattern UML context diagrams. +- ⚠️ Class diagram vs final code alignment should be reviewed once all missing/demo-mode features are finalized. + +### Pillar 2: Flutter Mobile + +- ✅ Flutter 3.x project structure exists. +- ✅ Navigation with GoRouter exists. +- ✅ JWT login/register API consumption exists. +- ✅ Dynamic backend URL entry exists. +- ✅ Custom/reusable shared widgets exist. +- ✅ Advanced feature evidence exists for real-time/WebSocket and push-notification plumbing. +- ⚠️ Clean Architecture is not strict across all features. +- ⚠️ BLoC is not consistently used throughout the UI. +- ⚠️ Offline local persistence is dependency-level/partial, not fully proven as an offline-first entity cache. +- ⚠️ Error handling is not fully isolated from UI; raw `try/catch` usage should be audited. +- ⚠️ Unit tests exist, but coverage of all use cases/repositories should be verified. +- ⚠️ Widget tests exist for at least 5 screens/components, but they should be run locally. +- ⚠️ Integration tests exist, but they appear stub-based instead of live-backend E2E. +- ❌ Physical Android profile-mode benchmark package is missing: + - Memory baseline + - Memory leak check + - Frame rate/jank + - CPU profile/flame graph + - Client-side API latency logs + - Cold start trace + - APK size analysis +- ❌ Mid-sprint vs final Flutter benchmark delta table is missing. +- ❌ Release APK file with required naming is missing. + +### Pillar 3: Spring Boot Backend + +- ✅ Java/Spring Boot backend exists. +- ✅ Controller-Service-Repository layering exists. +- ✅ PostgreSQL and Flyway migrations exist. +- ✅ Spring Security/JWT/RBAC exists. +- ✅ Versioned `/api/v1/...` endpoints exist. +- ✅ Bean Validation DTOs exist. +- ✅ Global exception handler exists. +- ✅ OpenAPI YAML exists. +- ✅ Swagger UI config exists. +- ✅ More than 10 REST endpoints exist. +- ✅ Unit test files exist for service layer. +- ✅ Controller/integration test files exist. +- ✅ JaCoCo report exists. +- ✅ k6 scripts and exported results exist. +- ⚠️ Testcontainers dependency and integration base exist, but final `mvn test` should be run locally before claiming green. +- ⚠️ k6 local smoke reports exist, but strict exam load benchmark target is not met in the current environment: + - Target: 50 concurrent users, 5 minutes + - Target throughput: at least 100 req/s + - Target p95 latency: less than 500 ms + - Target error rate: less than 1% +- ⚠️ DB query time and JVM heap are not fully captured in k6 reports; parsed results show JVM heap as `N/A`. +- ❌ Environment-separated config files are missing. +- ❌ Hardcoded secrets remain in config. +- ❌ Real Firebase Admin push notification is not enabled. + +### Repository / Submission Deliverables + +- ⚠️ Repository appears to be a combined workspace, while the guide asks for separate Flutter and Spring Boot repositories. +- ⚠️ GitHub workflow exists, but only `update-badge.yml` was found; Flutter/backend CI workflow evidence is missing. +- ❌ Branch protection / 3+ merged PR evidence is not in repository. +- ❌ APK artifact was not found. +- ❌ Written report PDF of 25+ pages was not found. +- ❌ Presentation deck/video link evidence was not found. +- ❌ Team contribution table verified against commit history was not found. +- ❌ README still needs final submission polish: setup, environment variables, APK link, benchmark links, and known limitations. + +--- + +## Dart Analyzer / Red Problem Checklist + +Because `flutter analyze` cannot run in this Codex environment, treat this as the required local verification checklist: + +- 🔎 Run `flutter analyze` from `walkguide-mobile/walkguide_app`. +- 🔎 If analyzer reports zero issues, update this section to ✅. +- 🔎 If analyzer reports red errors, fix those first before lint/style warnings. +- 🔎 Re-run `flutter analyze` after every fix. +- 🔎 Run Flutter tests after analyzer is clean: + +```powershell +cd "D:\CodeSpace\Final Project Gabungan - Broken Test\walkguide-mobile\walkguide_app" +flutter test +``` + +Current evidence-based status: + +- ⚠️ Cannot honestly claim zero Dart analyzer errors from this environment. +- ✅ Previous known blocking Dart errors were addressed in source files before this audit. +- 🔎 Final analyzer proof must come from your local Flutter SDK terminal output. + +--- + +## Highest Priority Fix Order + +1. ❌ Add missing `assets/models/yolov8n.tflite` and verify WalkGuide AI inference on a physical Android device. +2. ❌ Replace Flutter Agora placeholder and backend empty Agora credentials, then test real call flow. +3. ❌ Enable real Firebase push notification: + - Add Firebase mobile config. + - Add Firebase Admin config. + - Replace log-only backend sending with real `FirebaseMessaging`. +4. ⚠️ Run and save final `flutter analyze` output. +5. ⚠️ Run and save final backend `mvn test` / JaCoCo output. +6. ❌ Produce Flutter physical-device benchmark evidence and delta table. +7. ⚠️ Improve k6 evidence: + - Keep local smoke results as implementation evidence. + - Add a note explaining remote DB latency. + - If required by lecturer, run strict benchmark on deployed backend with realistic infra. +8. ❌ Build final APK with required naming. +9. ❌ Finish final report PDF and presentation evidence. +10. ⚠️ Update README files with final setup, environment, APK, Swagger, benchmark, and known limitation links. + diff --git a/walkguide-mobile/walkguide_app/assets/models/yolov8n.tflite b/walkguide-mobile/walkguide_app/assets/models/yolov8n.tflite new file mode 100644 index 0000000..7ffb7e8 Binary files /dev/null and b/walkguide-mobile/walkguide_app/assets/models/yolov8n.tflite differ