security(android): harden project trust boundaries - #98
Conversation
|
Important Review skippedToo many files! This PR contains 146 files, which is 46 over the limit of 100. To get a review, narrow the scope: Upgrade to a paid plan to raise the limit. This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry. ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (146)
You can disable this status message by setting the ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Rebasing onto main pulled in Silo-Server#99, which added the media3 test-utils and robolectric test stack to :android-shared. The lock state on this branch was generated against the old base, so every locked configuration that resolves those artifacts failed closed — `./gradlew test` died at :android-shared:generateDebugUnitTestStubRFile before compiling anything. Regenerated with the procedure the hardening plan documents, but locks first: with stale locks present the verification-metadata pass cannot resolve anything to hash, so the documented metadata-then-locks order only works from a clean slate. ./gradlew resolveAndLockAll --write-locks ./gradlew --write-verification-metadata sha256 <the six tasks> Lock additions are Silo-Server#99's transitive test closure only (media3 test-utils, test-utils-robolectric, transformer, muxer, inspector, plus mockito, byte-buddy, truth, objenesis, androidx.test). No new repositories. The verification metadata gains 827 lines and drops none; the extra components beyond that closure are desktop/jvmstubs variants that `lockAllConfigurations` resolves and the original pass, generated before locking was enabled, never saw. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3d5dd55 to
b4a4357
Compare
|
Closing as superseded by #108. This branch turned out to be an older line of work that
Rebuilding it would mean reconstructing which fragments are genuinely absent and reconciling each against a squashed descendant, which is archaeology rather than a rebase. #108 carries the current state of all of it. If a startup or playback performance regression turns up that traces back to something here, I'll port that specific behaviour deliberately rather than replay the branch. |
Summary
Two stacks in one branch, in commit order.
Performance and stability (29 commits,
eaef12d5…49cae1ff— formerly #97)Security hardening (25 commits,
af9f4a94…b4a43575)Stack
stacked on perf(android): stabilize startup, detail, and playback work #97— perf(android): stabilize startup, detail, and playback work #97 was closed without merging, so its 29 perf commits stay here and land with this PR. This is no longer a security-only diff, and it no longer reduces to one.Rebase (2026-07-25)
Rebased from
428e9678(#94) onto5047c4d2, picking up #99 (progressive direct-play range resume) and #100 (FCM notification metadata).Two conflicts, both real:
AuthenticatedDataSourceFactoryTest.kt— feat(player): resume progressive direct play transparently after mid-stream transport failures #99 added the ETag/If-Range resume tests with aFakeHttpDataSource; this branch added the subtitle-limit tests with aByteArrayDataSource. Git interleaved the two fake classes. Both test groups and both fakes kept intact.gradle/libs.versions.toml— git auto-merged this one cleanly into a broken file. feat(player): resume progressive direct play transparently after mid-stream transport failures #99 already declaresokhttp-mockwebserverin the media3 block; this branch declares the identical key nearjunit4. A duplicate key is a hard version-catalog parse failure, so the build died at configuration time. The branch's duplicate is dropped, folded intofix(network): keep credentials on the silo originso no commit in the branch is left broken.One new commit,
build(android): refresh locks and verification metadata for the rebase— #99 added the media3 test-utils/robolectric stack to:android-shared, which the branch's lock state (generated against the old base) fails closed on. Note for anyone regenerating: the hardening plan documents metadata-then-locks, but that order only works from a clean slate. With stale locks present nothing resolves, so locks have to be written first.Verification (post-rebase)
shared1,546,android-shared1,626,androidApp918,androidTvApp1,240--dependency-verification=strictpassed; live Rust OSV query passed (no affected crates.io packages)One failure, inherited from
mainand not caused by this branch:PlaybackApiTest."v3 start uses canonical endpoint and negotiation fields"fails on a cleanorigin/maincheckout too. #99 addedDIRECT_STREAM_RESUME_V1_FEATUREto the client's negotiated feature list without updating the test's expected list. This branch does not touch that file. It needs a one-line fix onmain, separately from this PR.Not included
The two CodeRabbit findings fixed in
c8481f1c(failed final-position writes discarded instead of re-queued; Up Next countdown not cancelled on exit) exist only on the fork'smain. They apply to the perf commits carried here and are not on this branch.CI