Skip to content

chore: sync 88 commits from Silo-Server/silo-android main - #25

Merged
JonahMMay merged 93 commits into
mainfrom
cursor/sync-silo-android-4f35
Jul 27, 2026
Merged

chore: sync 88 commits from Silo-Server/silo-android main#25
JonahMMay merged 93 commits into
mainfrom
cursor/sync-silo-android-4f35

Conversation

@JonahMMay

Copy link
Copy Markdown

Problem

Prairie-android was 88 commits behind Silo-Server/silo-android main.

Approach

Merge upstream main into Prairie, including the PR Silo-Server#108 split slices:

  • supply-chain / auth-epub / room-sync / player-foundation / transactional subtitles / Watch Together

Prairie adaptations:

  • Remap org.siloserver.siloorg.prairieserver.prairie and Silo*Prairie*
  • Keep Live TV DI bindings, X-Prairie-* / ImageFormats headers, and newer GitHub Actions majors
  • Keep prairie-dovi-bridge naming and prairie_dovi.cpp; add dovi AndroidManifest.xml for the updated build script

After merge: 0 behind upstream/main (Prairie remains ahead on fork-only commits).

Testing

# No Android SDK in this environment for full Gradle; deferred to CI
git rev-list --left-right --count HEAD...upstream/main
64	0

# Local checks:
# - no conflict markers
# - no remaining org.siloserver / SiloJson / X-Silo- in source
# - LiveTvViewModel + LiveTvPlayerViewModel still registered in mobile/TV DI
# - ImageFormats header still attached in AuthInterceptorImpl

AI Disclosure

  • Tool(s): Cursor Cloud Agent
  • Model(s): Composer
  • Involvement: Performed large upstream merge, rename/content conflict resolution, Prairie rebranding, and Live TV / auth header preservation
  • Adversarial review: Scrubbed leftover Silo packages after merge; repaired DI Live TV wiring and AuthInterceptor ImageFormats header

Checklist

  • I ran an adversarial AI review of the diff and summarized findings above.
  • Android CI Builds green
Open in Web Open in Cursor 

RXWatcher added 30 commits July 27, 2026 09:23
(cherry picked from commit 4af0f4d)
(cherry picked from commit 5db84af)
(cherry picked from commit 517cc32)
(cherry picked from commit 14b41b7)
(cherry picked from commit 63cdcad)
(cherry picked from commit 5a040e0)
(cherry picked from commit 941dee8)
(cherry picked from commit fd545fa)
(cherry picked from commit 475a7ba)
(cherry picked from commit eda4a4a)
RXWatcher and others added 21 commits July 27, 2026 17:53
Enable phone and TV entry, lobby, voting, and suggestion flows with busy-state dismissal safety and module-aware QR quiet zones.

PR108-Sources: 9fe27a2 e171e01 acfac18 fca6d7c bc58049 ea5756e 8f36f7d 530f948 f91aa62 923a1a7
…y-chain

build(android): forward-split verified supply chain from PR 108
…epub

fix(android): forward-split auth and EPUB security from PR 108
…sync

fix(android): scope Room storage and outbox state (PR 108 slice C)
…r-foundation

fix(android): harden player lifecycle and final writes (PR 108 slice D)
…tles

feat(android): transactional subtitles and PGS support (PR 108 slice E)
…-together

feat(android): production-ready Watch Together (PR 108 slice F)
Bring prairie-android up to date with upstream silo-android, including the
PR Silo-Server#108 Watch Together / subtitles / player foundation slices and related
auth, epub, and supply-chain work.

Prairie adaptations:
- Remap org.siloserver.silo → org.prairieserver.prairie and Silo* → Prairie*
- Keep Live TV DI bindings, X-Prairie-* / ImageFormats headers, and newer
  GitHub Actions majors
- Keep prairie-dovi-bridge naming and prairie_dovi.cpp; add dovi AndroidManifest

Co-authored-by: Jonah May <JonahMMay@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@JonahMMay, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 4 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ea5f96fa-b19d-4a52-b970-46fd07813202

📥 Commits

Reviewing files that changed from the base of the PR and between 46e9da1 and ffad9f1.

⛔ Files ignored due to path filters (2)
  • android-shared/src/androidUnitTest/resources/pgs/display-set-0.bin is excluded by !**/*.bin
  • android-shared/src/native/dovi/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (291)
  • .github/workflows/android-build.yml
  • .github/workflows/release.yml
  • .superpowers/sdd/2026-07-27-pr108-slice-e-transactional-subtitles/final-review-fix-report.md
  • .superpowers/sdd/2026-07-27-pr108-slice-f-watch-together/task-1-report.md
  • THIRD_PARTY_NOTICES.md
  • android-shared/build.gradle.kts
  • android-shared/gradle.lockfile
  • android-shared/schemas/org.prairieserver.prairie.common.data.db.PrairieDatabase/8.json
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/audiobook/AudiobookBookmarksStore.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/data/db/PrairieDatabase.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/data/db/dao/DirtyOperationDao.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/data/db/dao/ServerPurgeDao.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/data/db/entity/DownloadEntity.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/data/repository/RoomUserItemStateRepository.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/data/sync/OutboxSyncStarter.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/data/sync/SyncEngine.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/di/PlayerInfraModule.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/di/PlayerModule.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/downloads/DownloadEnqueuer.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/downloads/DownloadSidecarMapping.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/downloads/DownloadStorage.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/downloads/DownloadWorker.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/downloads/DownloadWorkerLifetime.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/downloads/OrphanedServerDataPurger.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/ebook/EbookLocalStateStore.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/io/LimitedStreams.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/network/CleartextConsentStore.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/pairing/PairingAuthPort.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/pip/PrairiePictureInPictureCoordinator.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/AuthenticatedDataSourceFactory.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/DolbyVisionColorInfoExtractorsFactory.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/DolbyVisionProfile7Transformer.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/FinalPlaybackPositionWriter.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/LetterboxDetection.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/MediaAuthInterceptor.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/MediaAuthSession.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/MediaLoadRetryPolicy.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/PipActionCapability.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/PlayWhenReadyReconciliation.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/PlaybackCapabilityDetector.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/PlaybackColorRangeFallback.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/PlaybackSessionLifecycle.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/PlaybackSessionManager.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/PlaybackTrackSelectionWriteCoordinator.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/PlaybackV3Session.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/PlayerOkHttpClient.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/PrairiePlaybackService.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/PrairiePlayerFactory.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/SubtitleDiagnostics.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/SubtitleManager.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/SubtitleMountResolver.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/VideoPlayerMediaMounter.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/VideoPlayerMediaSpec.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/backend/Media3VideoPlaybackBackend.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/backend/VideoPlaybackBackend.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/subtitle/PgsSupExtractor.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/player/video/VideoTrackSelectionCoordinator.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/settings/AndroidPlayerSettingsStore.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/settings/PlayerSettingsStore.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/store/SafePathSegment.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/store/ScopedJsonFileStore.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/store/ServerScopedJsonAccess.kt
  • android-shared/src/androidMain/kotlin/org/prairieserver/prairie/common/store/ServerScopedJsonStatePurger.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/data/db/SiloDatabaseMigrationTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/data/repository/RoomUserItemStateRepositoryTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/data/sync/OutboxSyncStarterScopeTriggerTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/data/sync/SyncEngineTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/downloads/DownloadStorageTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/downloads/DownloadWorkerLifetimeTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/downloads/MediaStorePublicDownloadStoreCollisionTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/downloads/OfflineMediaResolverTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/downloads/OrphanedServerDataPurgerTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/downloads/PublicDownloadRelativeRootTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/io/LimitedStreamsTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/network/CleartextConsentStoreTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/network/WatchTogetherRealtimeWebSocketTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/pairing/RegistryPairingAuthPortTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/AuthenticatedDataSourceFactoryTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/DolbyVisionColorInfoExtractorsFactoryTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/FinalPlaybackPositionWriterTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/LetterboxInsetTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/LibassPlayerReleaseContractTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/MediaAuthInterceptorTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/MediaAuthSessionTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/MediaLoadRetryPolicyTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/PipActionCapabilityTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/PlayWhenReadyReconciliationTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/PlaybackColorRangeFallbackTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/PlaybackPublicationSettlementIntegrationTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/PlaybackSessionLifecycleLoggingTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/PlaybackSessionLifecycleTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/PlaybackSessionManagerSeekReanchorTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/PlaybackSessionManagerStagedReplanTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/PlaybackTrackSelectionWriteCoordinatorTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/SubDiagGateTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/SubtitleManagerAppearanceTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/SubtitleManagerTrackSelectionTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/SubtitleMountResolverTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/TitleSafeInsetTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/subtitle/Media3PgsParserProbeTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/subtitle/Media3PgsSupportProbeTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/subtitle/PgsSupExtractorTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/player/video/VideoTrackSelectionCoordinatorTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/settings/ServerDrivenConfigRefresherTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/settings/SubtitleSyncOverridesTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/store/SafePathSegmentTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/store/ScopedJsonFileStoreTest.kt
  • android-shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/common/store/ServerScopedJsonStatePurgerTest.kt
  • android-shared/src/native/dovi/AndroidManifest.xml
  • android-shared/src/native/dovi/THIRD_PARTY_NOTICES.txt
  • android-shared/src/native/dovi/provenance.json
  • androidApp/build.gradle.kts
  • androidApp/gradle.lockfile
  • androidApp/src/androidMain/assets/reader/reflow/paginator.js
  • androidApp/src/androidMain/assets/reader/reflow/reader.html
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/MainActivity.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/PrairieApplication.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/di/AndroidModule.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/auth/ServerSetupScreen.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/auth/ServerSetupViewModel.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/detail/ItemDetailScreen.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/detail/ItemDetailViewModel.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/detail/MovieDetailContent.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/detail/SeriesDetailContent.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/downloads/DownloadsViewModel.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/player/MobileFreshSubtitleRestore.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/player/MobilePlayerLoadOwner.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/player/MobileSubtitleAutoSelection.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/player/MobileSubtitleTransactionAdapter.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/player/MobileVideoPlaybackStarter.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/player/PlayerScreen.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/player/PlayerViewModel.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/player/RoomSyncController.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/reader/EpubBook.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/reader/ReaderFileCache.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/reader/reflow/EpubHtmlSanitizer.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/reader/reflow/EpubReflowSource.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/reader/reflow/EpubResourcePathHandler.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/reader/reflow/ReflowWebView.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/reader/reflow/ReflowableReader.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/reader/reflow/ReflowableSource.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/watchtogether/SuggestToRoomViewModel.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/watchtogether/WatchTogetherEntrySheet.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/watchtogether/WatchTogetherEntryViewModel.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/watchtogether/WatchTogetherLobbyScreen.kt
  • androidApp/src/androidMain/kotlin/org/prairieserver/prairie/android/ui/screens/watchtogether/WatchTogetherLobbyViewModel.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/performance/MobilePlayerLifecyclePerformanceSourceTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/auth/ServerSetupPersistenceTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/detail/EpisodeRollupAccumulatorTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/player/MobileFreshSubtitleRestoreTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/player/MobilePlayerLoadOwnerTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/player/MobilePlayerPresentationStateTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/player/MobileSubtitleAutoSelectionTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/player/MobileSubtitleTransactionAdapterTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/player/PlayerViewModelLoadOwnershipIntegrationTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/reader/EpubBookTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/reader/ReaderEngineHostSourceTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/reader/ReaderFileCacheTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/reader/ReaderFileResolverTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/reader/ReflowWebViewEpubResourceTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/reader/reflow/EpubHtmlSanitizerTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/reader/reflow/EpubReflowSourceTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/reader/reflow/EpubResourcePathHandlerTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/watchtogether/LobbyAutoNavigateTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/watchtogether/SuggestToRoomSurfaceSourceTest.kt
  • androidApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/android/ui/screens/watchtogether/WatchTogetherEntryDestinationTest.kt
  • androidTvApp/gradle.lockfile
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/MainTvActivity.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/PrairieTvApplication.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/di/AndroidTvModule.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/navigation/TvAppNavigation.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/auth/QrCodePanel.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/auth/TvServerSetupScreen.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/auth/TvServerSetupViewModel.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/detail/TvItemDetailScreen.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvPlayerHud.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvPlayerLoadOwner.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvPlayerScreen.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvPlayerSubtitlePolicy.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvPlayerViewModel.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvRoomSyncController.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvSubtitleHudState.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvSubtitleIdentity.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvSubtitleRemountReselection.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvSubtitleTransactionAdapter.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvVideoPlaybackStarter.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/watchtogether/TvJoinCodeDialog.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/watchtogether/TvSuggestToRoomViewModel.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/watchtogether/TvWatchTogetherEntryDialog.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/watchtogether/TvWatchTogetherLobbyScreen.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/watchtogether/TvWatchTogetherLobbyViewModel.kt
  • androidTvApp/src/androidMain/kotlin/org/prairieserver/prairie/tv/ui/screens/watchtogether/TvWatchTogetherViewModel.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/data/preferences/LegacyTvPrefsMigrationTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/pip/TvPictureInPictureSourceTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/auth/TvServerSetupPersistenceTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/SubtitleRemountReselectionTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/SubtitleTransactionIntegrationTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TestPlaybackWriteScope.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvPlaybackFreshLoadOwnershipTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvPlayerPresentationStateTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvPlayerSubtitleIntegrationPolicyTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvSubtitleFinalRollbackTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvSubtitleHudStateTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvSubtitleMountDeadlineTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvSubtitleMountPriorityTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvSubtitleRefreshOwnershipTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvSubtitleSettlementOwnershipTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/player/TvSubtitleTransactionAdapterTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/watchtogether/LobbyNavigationDecisionTest.kt
  • androidTvApp/src/androidUnitTest/kotlin/org/prairieserver/prairie/tv/ui/screens/watchtogether/TvWatchTogetherSurfaceSourceTest.kt
  • baselineprofile/gradle.lockfile
  • build.gradle.kts
  • docs/notes/2026-07-27-pr108-forward-split-traceability.md
  • docs/notes/2026-07-27-pr108-slice-b-traceability.md
  • docs/notes/2026-07-27-pr108-slice-c-traceability.md
  • docs/superpowers/plans/2026-07-27-pr108-hosted-ci-recovery.md
  • docs/superpowers/plans/2026-07-27-pr108-slice-a-supply-chain.md
  • docs/superpowers/plans/2026-07-27-pr108-slice-b-auth-epub.md
  • docs/superpowers/plans/2026-07-27-pr108-slice-c-room-sync.md
  • docs/superpowers/plans/2026-07-27-pr108-slice-d-player-foundation.md
  • docs/superpowers/plans/2026-07-27-pr108-slice-e-transactional-subtitles.md
  • docs/superpowers/plans/2026-07-27-pr108-slice-f-watch-together.md
  • docs/superpowers/specs/2026-07-27-pr108-slice-f-watch-together-design.md
  • gradle/libs.versions.toml
  • gradle/verification-metadata.xml
  • gradle/wrapper/gradle-wrapper.properties
  • libass-bridge/gradle.lockfile
  • libass-bridge/src/main/java/org/prairieserver/prairie/libass/LibassBridge.java
  • scripts/build-dovi-aar.sh
  • scripts/check-build-supply-chain.sh
  • scripts/test-check-build-supply-chain.sh
  • settings-gradle.lockfile
  • shared/build.gradle.kts
  • shared/gradle.lockfile
  • shared/src/androidMain/kotlin/org/prairieserver/prairie/network/AndroidServerRegistry.kt
  • shared/src/androidMain/kotlin/org/prairieserver/prairie/network/EncryptedTokenManagerImpl.kt
  • shared/src/androidUnitTest/kotlin/org/prairieserver/prairie/network/EncryptedTokenManagerScopeGenerationTest.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/di/NetworkModule.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/di/RepositoryModule.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/model/catalog/CatalogModels.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/model/catalog/FrameRateSerializer.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/model/feature/ClientSurfacePolicy.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/model/playback/PlaybackModels.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/model/playback/PlaybackProtocolV3.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/model/playback/PlaybackSubtitleChoices.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/model/playback/SubtitleTrackMerge.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/model/playback/SubtitleTransition.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/model/settings/PlaybackSettingsKeys.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/model/settings/SubtitleAppearance.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/AuthInterceptorImpl.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/AuthScopeSnapshot.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/CleartextOriginConsent.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/HttpOriginPolicy.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/IdentityTransitionBarrier.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/PlaybackRealtimeClient.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/PrairieHttpClientImpl.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/ServerRegistry.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/TokenManager.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/WatchTogetherRealtimeClient.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/WatchTogetherRealtimeEvent.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/network/api/WatchTogetherApi.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/playback/SubtitleCodecFamily.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/playback/SubtitleLanguage.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/playback/TrackSelectionFingerprint.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/repository/WatchTogetherRepository.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/repository/port/UserItemStatePort.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/watchtogether/RoomDeliveryLatch.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/watchtogether/RoomEntryUiPolicy.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/watchtogether/RoomSession.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/watchtogether/RoomTransportAuthority.kt
  • shared/src/commonMain/kotlin/org/prairieserver/prairie/watchtogether/RoomVote.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/model/catalog/CatalogTrackSerializationTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/model/feature/ClientSurfacePolicyTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/model/playback/PlaybackModelsV2SerializationTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/model/playback/PlaybackProtocolV3Test.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/model/playback/SubtitleTrackMergeTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/model/playback/SubtitleTransitionTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/model/settings/SubtitleAppearanceTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/network/HttpOriginPolicyTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/network/IdentityTransitionBarrierTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/network/PrairieAuthPluginPinTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/network/WatchTogetherRealtimeClientTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/network/api/WatchTogetherApiTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/playback/SubtitleCodecAndLanguageTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/playback/TrackSelectionFingerprintTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/repository/WatchTogetherRepositoryTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/watchtogether/RoomDeliveryLatchTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/watchtogether/RoomEntryUiPolicyTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/watchtogether/RoomSessionTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/watchtogether/RoomTransportAuthorityTest.kt
  • shared/src/commonTest/kotlin/org/prairieserver/prairie/watchtogether/RoomVoteTest.kt
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch cursor/sync-silo-android-4f35

Comment @coderabbitai help to get the list of available commands.

cursoragent and others added 4 commits July 27, 2026 17:15
The upstream sync brought in check-build-supply-chain.sh, which rejects
mutable action tags. Adopt the pinned checkout/upload/download digests
from Silo-Server/silo-android so CI can pass.

Co-authored-by: Jonah May <JonahMMay@users.noreply.github.com>
Upstream supply-chain verification-metadata.xml did not include Prairie's
org.jetbrains.kotlinx.kover 0.9.1 artifacts, so :shared:testDebugUnitTest
failed dependency verification before tests could run.

Co-authored-by: Jonah May <JonahMMay@users.noreply.github.com>
Tree-wide Silo→Prairie rename left uppercase SILO.EXAMPLE / SILO.LAN
hosts while lowercasing counterparts to prairie.*, so case-normalization
origin equality assertions failed.

Co-authored-by: Jonah May <JonahMMay@users.noreply.github.com>
Exclude private KtorWatchTogetherSocket* transport classes from the
shared commonMain coverage gate (same live-websocket rationale as
DefaultWatchTogetherRealtimeClient) and add focused unit tests for the
new subtitle codec/language canonicalizers so the 95% line gate clears.

Co-authored-by: Jonah May <JonahMMay@users.noreply.github.com>
@JonahMMay
JonahMMay marked this pull request as ready for review July 27, 2026 18:30
@cursor

cursor Bot commented Jul 27, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@JonahMMay
JonahMMay merged commit d37bdcc into main Jul 27, 2026
2 checks passed
@JonahMMay
JonahMMay deleted the cursor/sync-silo-android-4f35 branch July 27, 2026 18:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants