feat(docs): complete P2.6 type safety cleanup and P2.7 system invariants
P2.6: Type Safety Cleanup - Replaced 'any' return types in vite-plugin.ts with concrete types (UserConfig, transform return type) - Documented TypeScript mixin 'any[]' exception in PlatformServiceMixin.ts - Audit confirmed: zero 'any' in codebase except documented TS mixin limitation - All external boundaries use 'unknown', all data payloads use 'Record<string, unknown>' P2.7: System Invariants Documentation - Created SYSTEM_INVARIANTS.md documenting all 6 enforced invariants - Added to docs/00-INDEX.md under Policy & Contracts section - Each invariant includes: What, Why, How, Where Progress Docs Updates: - Updated 00-STATUS.md: marked P2.6/P2.7 complete, added type safety invariant note - Updated 01-CHANGELOG-WORK.md: added 2025-12-22 entries for P2.6/P2.7 - Updated 03-TEST-RUNS.md: added P2.6 type safety audit test run - Updated P2-DESIGN.md: marked P2.6 acceptance criteria complete - Updated SYSTEM_INVARIANTS.md: added Type Safety Notes section Baseline Tag: - Created v1.0.11-p0-p1.4-p1.5-p2.6-p2.7-complete TypeScript compilation: ✅ PASSES Build: ✅ PASSES CI: ✅ All checks pass
This commit is contained in:
102
docs/progress/04-PARITY-MATRIX.md
Normal file
102
docs/progress/04-PARITY-MATRIX.md
Normal file
@@ -0,0 +1,102 @@
|
||||
# iOS vs Android Feature Parity Matrix
|
||||
|
||||
**Purpose:** Feature-by-feature comparison of iOS and Android implementations to track parity gaps.
|
||||
**Owner:** Development Team
|
||||
**Last Updated:** 2025-12-22
|
||||
**Status:** active
|
||||
|
||||
---
|
||||
|
||||
## Storage & Persistence
|
||||
|
||||
| Feature | Android | iOS | Notes |
|
||||
|---------|---------|-----|-------|
|
||||
| Persistent state | ✅ SQLite (Room) | ✅ CoreData + SQLite | Both implemented |
|
||||
| Schema versioning | ✅ Room migrations | ⚠️ Partial | iOS has CoreData auto-migration, but explicit versioning may be needed |
|
||||
| State survives app restart | ✅ Yes | ✅ Yes | Both implemented |
|
||||
| State survives OS kill | ✅ Yes | ✅ Yes | Both implemented |
|
||||
| State survives reboot | ✅ Yes | N/A | iOS handles notifications automatically |
|
||||
|
||||
---
|
||||
|
||||
## Notification Scheduling
|
||||
|
||||
| Feature | Android | iOS | Notes |
|
||||
|---------|---------|-----|-------|
|
||||
| Exact alarms | ✅ AlarmManager | N/A | iOS uses UNUserNotificationCenter |
|
||||
| Daily rollover | ✅ Automatic | ✅ Automatic | Both implemented (iOS uses NotificationCenter pattern) |
|
||||
| Schedule persistence | ✅ Database | ✅ UNUserNotificationCenter | iOS OS-guaranteed |
|
||||
| Next notification retrieval | ✅ getNotificationStatus() | ✅ getNotificationStatus() | Both implemented |
|
||||
|
||||
---
|
||||
|
||||
## Recovery & Resilience
|
||||
|
||||
| Feature | Android | iOS | Notes |
|
||||
|---------|---------|-----|-------|
|
||||
| App launch recovery | ✅ ReactivationManager | ✅ ReactivationManager | Both implemented with persistence |
|
||||
| Boot recovery | ✅ BootReceiver | N/A | iOS handles automatically |
|
||||
| Missed notification detection | ✅ Yes | ✅ Yes | Both implemented with persistent state |
|
||||
| Recovery logging | ✅ Comprehensive | ✅ Comprehensive | Both have good logging |
|
||||
| Invalid data recovery | ✅ Tested (TEST 4) | ✅ Tested (RecoveryTests) | Both have automated recovery tests |
|
||||
| Rollover idempotency | ✅ Tested | ✅ Tested | Both verify duplicate rollover prevention |
|
||||
| Migration safety | ✅ Tested | ✅ Tested | Both test unknown/missing fields |
|
||||
|
||||
---
|
||||
|
||||
## Background Execution
|
||||
|
||||
| Feature | Android | iOS | Notes |
|
||||
|---------|---------|-----|-------|
|
||||
| Background fetch | ✅ WorkManager | ✅ BGTaskScheduler | Both implemented |
|
||||
| Background notification | ✅ WorkManager | ✅ BGTaskScheduler | Both implemented |
|
||||
| Execution time limits | ✅ Flexible | ⚠️ ~30 seconds | iOS has strict limits |
|
||||
| Battery optimization handling | ✅ Documented | N/A | iOS handles automatically |
|
||||
|
||||
---
|
||||
|
||||
## Error Handling
|
||||
|
||||
| Feature | Android | iOS | Notes |
|
||||
|---------|---------|-----|-------|
|
||||
| Error codes | ✅ Structured | ✅ Structured | Both have error codes |
|
||||
| Error recovery | ✅ Yes | ✅ Yes | Both handle errors gracefully |
|
||||
| Invalid data handling | ✅ Recovery tested | ⚠️ Input validation only | **GAP** - iOS needs recovery testing |
|
||||
|
||||
---
|
||||
|
||||
## Testing
|
||||
|
||||
| Feature | Android | iOS | Notes |
|
||||
|---------|---------|-----|-------|
|
||||
| Unit tests | ✅ Yes | ⚠️ Partial | iOS has some tests |
|
||||
| Integration tests | ✅ Yes | ⚠️ Partial | iOS has some tests |
|
||||
| Test automation | ✅ High | ⚠️ Medium | iOS has manual components |
|
||||
| Recovery testing | ✅ Yes | ✅ Yes | Both have automated recovery tests (DailyNotificationRecoveryTests.swift) |
|
||||
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
### Critical Gaps (P0)
|
||||
|
||||
**None** - All critical gaps addressed:
|
||||
- ✅ iOS rollover implemented (NotificationCenter pattern)
|
||||
- ✅ iOS recovery testing implemented (DailyNotificationRecoveryTests.swift)
|
||||
- ✅ iOS persistence confirmed (CoreData + SQLite)
|
||||
|
||||
### Important Gaps (P1)
|
||||
|
||||
1. **Schema Versioning** - iOS has CoreData auto-migration, but explicit versioning strategy may be needed
|
||||
2. **Test Automation** - iOS tests can be run via xcodebuild, but CI integration may need macOS runners
|
||||
|
||||
### Nice-to-Have (P2)
|
||||
|
||||
1. **Combined Edge Case Tests** - DST boundary + duplicate delivery + cold start combined scenario
|
||||
2. **OS Reboot Testing** - True OS reboot scenarios (iOS handles automatically, but explicit testing may be valuable)
|
||||
|
||||
---
|
||||
|
||||
**Last Updated:** 2025-12-16
|
||||
**Next Review:** After PHASE 2 completion
|
||||
|
||||
Reference in New Issue
Block a user