What to build
Cover Favorite create, rename, trim, delete, reopen, and Favorite Media manifest behavior through both native implementations and their callers. Use GRDB records for ordinary iOS writes; preserve pinning and media ownership.
Part 4 of the approved cross-platform persistence reliability plan. Android and iOS remain separate native implementations with shared observable contracts. Local planning document: docs/persistence-reliability-plan.md; this issue is self-contained. Type: AFK.
Likely files
modules/vescape-core/ios/telemetry/FavoriteStore.swift - production behavior or caller to inspect
modules/vescape-core/ios/telemetry/FavoriteMediaStore.swift - production behavior or caller to inspect
modules/vescape-core/ios/telemetry/FavoriteStoreTests.swift - existing verification seam
modules/vescape-core/android/src/main/java/expo/modules/vescapecore/telemetry/TelemetryDao.kt - production behavior or caller to inspect
src/modules/history/store/historyStore.ts - production behavior or caller to inspect
Implementation hints
Keep Room on Android and GRDB on iOS. Native owns durable truth; JS renders state and sends intents. Follow bidirectional @parity links and preserve bridge payloads. Custom SQL is allowed for migrations and aggregate updates with real DB tests. Use existing error UI and avoid a generic persistence/recovery framework. Diagnostics transport follows ADR 0031; Sentry handles errors independently of local event persistence. Use bun commands and appropriate scoped verification.
Acceptance criteria
Blocked by
Related
What to build
Cover Favorite create, rename, trim, delete, reopen, and Favorite Media manifest behavior through both native implementations and their callers. Use GRDB records for ordinary iOS writes; preserve pinning and media ownership.
Part 4 of the approved cross-platform persistence reliability plan. Android and iOS remain separate native implementations with shared observable contracts. Local planning document: docs/persistence-reliability-plan.md; this issue is self-contained. Type: AFK.
Likely files
modules/vescape-core/ios/telemetry/FavoriteStore.swift- production behavior or caller to inspectmodules/vescape-core/ios/telemetry/FavoriteMediaStore.swift- production behavior or caller to inspectmodules/vescape-core/ios/telemetry/FavoriteStoreTests.swift- existing verification seammodules/vescape-core/android/src/main/java/expo/modules/vescapecore/telemetry/TelemetryDao.kt- production behavior or caller to inspectsrc/modules/history/store/historyStore.ts- production behavior or caller to inspectImplementation hints
Keep Room on Android and GRDB on iOS. Native owns durable truth; JS renders state and sends intents. Follow bidirectional @parity links and preserve bridge payloads. Custom SQL is allowed for migrations and aggregate updates with real DB tests. Use existing error UI and avoid a generic persistence/recovery framework. Diagnostics transport follows ADR 0031; Sentry handles errors independently of local event persistence. Use bun commands and appropriate scoped verification.
Acceptance criteria
Blocked by
Related